kaze 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -2
  3. data/lib/kaze/commands/install_command.rb +24 -7
  4. data/lib/kaze/commands/installs_hotwire_stack.rb +62 -0
  5. data/lib/kaze/commands/{install_inertia_stacks.rb → installs_inertia_stacks.rb} +19 -17
  6. data/lib/kaze/version.rb +1 -1
  7. data/stubs/default/app/validators/lowercase_validator.rb +1 -0
  8. data/stubs/default/app/views/layouts/mailer.html.erb +3 -1
  9. data/stubs/default/app/views/layouts/mailer.text.erb +3 -1
  10. data/stubs/default/config/routes.rb +1 -1
  11. data/stubs/hotwire/Procfile.dev +2 -0
  12. data/stubs/hotwire/app/components/application_logo_component.rb +14 -0
  13. data/stubs/hotwire/app/components/auth_session_status_component.rb +17 -0
  14. data/stubs/hotwire/app/components/danger_button_component.rb +13 -0
  15. data/stubs/hotwire/app/components/dropdown_component.html.erb +20 -0
  16. data/stubs/hotwire/app/components/dropdown_component.rb +15 -0
  17. data/stubs/hotwire/app/components/dropdown_link_component.rb +12 -0
  18. data/stubs/hotwire/app/components/input_error_component.rb +18 -0
  19. data/stubs/hotwire/app/components/input_label_component.rb +13 -0
  20. data/stubs/hotwire/app/components/modal_component.html.erb +62 -0
  21. data/stubs/hotwire/app/components/modal_component.rb +14 -0
  22. data/stubs/hotwire/app/components/nav_link_component.rb +15 -0
  23. data/stubs/hotwire/app/components/primary_button_component.rb +13 -0
  24. data/stubs/hotwire/app/components/responsive_nav_link_component.rb +15 -0
  25. data/stubs/hotwire/app/components/secondary_button_component.rb +13 -0
  26. data/stubs/hotwire/app/components/text_input_component.rb +11 -0
  27. data/stubs/hotwire/app/controllers/application_controller.rb +3 -0
  28. data/stubs/hotwire/app/controllers/auth/authenticated_session_controller.rb +29 -0
  29. data/stubs/hotwire/app/controllers/auth/new_password_controller.rb +19 -0
  30. data/stubs/hotwire/app/controllers/auth/password_reset_link_controller.rb +19 -0
  31. data/stubs/hotwire/app/controllers/auth/registered_user_controller.rb +23 -0
  32. data/stubs/hotwire/app/controllers/dashboard_controller.rb +4 -0
  33. data/stubs/hotwire/app/controllers/password_controller.rb +11 -0
  34. data/stubs/hotwire/app/controllers/profile_controller.rb +33 -0
  35. data/stubs/hotwire/app/controllers/welcome_controller.rb +7 -0
  36. data/stubs/hotwire/app/javascript/alpinejs.js +2 -0
  37. data/stubs/hotwire/app/javascript/application.js +8 -0
  38. data/stubs/hotwire/app/views/auth/forgot_password.html.erb +23 -0
  39. data/stubs/hotwire/app/views/auth/login.html.erb +40 -0
  40. data/stubs/hotwire/app/views/auth/register.html.erb +47 -0
  41. data/stubs/hotwire/app/views/auth/reset_password.html.erb +28 -0
  42. data/stubs/hotwire/app/views/dashboard/index.html.erb +15 -0
  43. data/stubs/hotwire/app/views/layouts/_navigation.html.erb +92 -0
  44. data/stubs/hotwire/app/views/layouts/application.html.erb +42 -0
  45. data/stubs/hotwire/app/views/layouts/guest.html.erb +33 -0
  46. data/stubs/hotwire/app/views/profile/edit.html.erb +27 -0
  47. data/stubs/hotwire/app/views/profile/partials/_delete_user_form.html.erb +48 -0
  48. data/stubs/hotwire/app/views/profile/partials/_update_password_form.html.erb +58 -0
  49. data/stubs/hotwire/app/views/profile/partials/_update_profile_information_form.html.erb +49 -0
  50. data/stubs/hotwire/app/views/welcome/index.html.erb +68 -0
  51. data/stubs/hotwire/config/importmap.rb +3 -0
  52. data/stubs/hotwire/config/tailwind.config.js +23 -0
  53. data/stubs/inertia-common/app/controllers/concerns/authenticate.rb +34 -0
  54. data/stubs/{default → inertia-common}/app/controllers/dashboard_controller.rb +1 -1
  55. data/stubs/inertia-common/bin/vite +27 -0
  56. data/stubs/inertia-common/config/vite.json +16 -0
  57. data/stubs/inertia-react-ts/app/views/layouts/application.html.erb +0 -4
  58. data/stubs/inertia-react-ts/config/tailwind.config.js +1 -1
  59. data/stubs/inertia-react-ts/package.json +24 -24
  60. data/stubs/inertia-vue-ts/app/javascript/Pages/Welcome.vue +1 -1
  61. data/stubs/inertia-vue-ts/app/views/layouts/application.html.erb +0 -4
  62. data/stubs/inertia-vue-ts/config/tailwind.config.js +1 -1
  63. metadata +63 -18
  64. data/stubs/default/config/vite.json +0 -16
  65. /data/stubs/{default → hotwire}/app/controllers/concerns/authenticate.rb +0 -0
  66. /data/stubs/{default → hotwire}/bin/vite +0 -0
  67. /data/stubs/{default → inertia-common}/Procfile.dev +0 -0
  68. /data/stubs/{default → inertia-common}/app/controllers/application_controller.rb +0 -0
  69. /data/stubs/{default → inertia-common}/app/controllers/auth/authenticated_session_controller.rb +0 -0
  70. /data/stubs/{default → inertia-common}/app/controllers/auth/new_password_controller.rb +0 -0
  71. /data/stubs/{default → inertia-common}/app/controllers/auth/password_reset_link_controller.rb +0 -0
  72. /data/stubs/{default → inertia-common}/app/controllers/auth/registered_user_controller.rb +0 -0
  73. /data/stubs/{default → inertia-common}/app/controllers/concerns/handle_inertia_requests.rb +0 -0
  74. /data/stubs/{default → inertia-common}/app/controllers/concerns/verify_csrf_token.rb +0 -0
  75. /data/stubs/{default → inertia-common}/app/controllers/password_controller.rb +0 -0
  76. /data/stubs/{default → inertia-common}/app/controllers/profile_controller.rb +0 -0
  77. /data/stubs/{default → inertia-common}/app/controllers/welcome_controller.rb +0 -0
@@ -0,0 +1,27 @@
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
+
7
+ <div class="py-12">
8
+ <div class="max-w-7xl mx-auto sm:px-6 lg:px-8 space-y-6">
9
+ <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
10
+ <div class="max-w-xl">
11
+ <%= render "profile/partials/update_profile_information_form" %>
12
+ </div>
13
+ </div>
14
+
15
+ <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
16
+ <div class="max-w-xl">
17
+ <%= render "profile/partials/update_password_form" %>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
22
+ <div class="max-w-xl">
23
+ <%= render "profile/partials/delete_user_form" %>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
@@ -0,0 +1,48 @@
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
+
7
+ <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
8
+ 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.
9
+ </p>
10
+ </header>
11
+
12
+ <%= render(DangerButtonComponent.new({"x-data": "", "x-on:click.prevent": "$dispatch('open-modal', 'confirm-user-deletion')"})) do %>
13
+ Delete Account
14
+ <% end %>
15
+
16
+ <%= render(ModalComponent.new({ :name => "confirm-user-deletion", :show => @delete_user_form.error_messages.has_key?(:password), :focusable => true })) do %>
17
+ <turbo-frame id="delete_user_form">
18
+ <%= form_with model: @delete_user_form, url: profile_destroy_path, method: "delete", class: "p-6" do %>
19
+ <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
20
+ Are you sure you want to delete your account?
21
+ </h2>
22
+
23
+ <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
24
+ Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.
25
+ </p>
26
+
27
+ <div class="mt-6">
28
+ <%= render(InputLabelComponent.new({ for: "password", value: "Password", class: "sr-only" })) %>
29
+
30
+ <%= render(TextInputComponent.new({ id: "password", class: "mt-1 block w-3/4", type: "password", name: "password", placeholder: "Password" })) %>
31
+
32
+ <%= render(InputErrorComponent.new({ class: "mt-2", message: @delete_user_form.error_messages[:password] })) %>
33
+ </div>
34
+
35
+ <div class="mt-6 flex justify-end">
36
+ <%= render(SecondaryButtonComponent.new({ "x-on:click": "$dispatch('close')" })) do %>
37
+ Cancel
38
+ <% end %>
39
+
40
+ <%= render(DangerButtonComponent.new({ class: "ms-3" })) do %>
41
+ Delete Account
42
+ <% end %>
43
+ </div>
44
+ <% end %>
45
+ </turbo-frame>
46
+ <% end %>
47
+ </section>
48
+
@@ -0,0 +1,58 @@
1
+ <turbo-frame id="update_password_form">
2
+ <section>
3
+ <header>
4
+ <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
5
+ Update Password
6
+ </h2>
7
+
8
+ <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
9
+ Ensure your account is using a long, random password to stay secure.
10
+ </p>
11
+ </header>
12
+
13
+ <%= form_with model: @update_password_form, url: password_update_path, method: "put", class: "mt-6 space-y-6" do |update_password_form| %>
14
+ <!-- Current Password -->
15
+ <div>
16
+ <%= render(InputLabelComponent.new({ for: "update_password_current_password", value: "Current Password" })) %>
17
+
18
+ <%= render(TextInputComponent.new({ id: "update_password_current_password", class: "block mt-1 w-full", type: "password", name: "current_password", autocomplete: "current-password" })) %>
19
+
20
+ <%= render(InputErrorComponent.new({ class: "mt-2", message: @update_password_form.error_messages[:current_password] })) %>
21
+ </div>
22
+
23
+ <!-- New Password -->
24
+ <div>
25
+ <%= render(InputLabelComponent.new({ for: "update_password_password", value: "New Password" })) %>
26
+
27
+ <%= render(TextInputComponent.new({ id: "update_password_password", class: "block mt-1 w-full", type: "password", name: "password", autocomplete: "new-password" })) %>
28
+
29
+ <%= render(InputErrorComponent.new({ class: "mt-2", message: @update_password_form.error_messages[:password] })) %>
30
+ </div>
31
+
32
+ <!-- Confirm Password -->
33
+ <div class="mt-4">
34
+ <%= render(InputLabelComponent.new({ for: "update_password_password_confirmation", value: "Confirm Password" })) %>
35
+
36
+ <%= render(TextInputComponent.new({ id: "update_password_password_confirmation", class: "block mt-1 w-full", type: "password", name: "password_confirmation", autocomplete: "new-password" })) %>
37
+
38
+ <%= render(InputErrorComponent.new({ class: "mt-2", message: @update_password_form.error_messages[:password_confirmation] })) %>
39
+ </div>
40
+
41
+ <div class="flex items-center gap-4">
42
+ <%= render(PrimaryButtonComponent.new) do %>
43
+ Save
44
+ <% end %>
45
+
46
+ <% if flash[:status] == "password-updated" %>
47
+ <p
48
+ x-data="{ show: true }"
49
+ x-show="show"
50
+ x-transition
51
+ x-init="setTimeout(() => show = false, 2000)"
52
+ class="text-sm text-gray-600 dark:text-gray-400"
53
+ >Saved.</p>
54
+ <% end %>
55
+ </div>
56
+ <% end %>
57
+ </section>
58
+ </turbo-frame>
@@ -0,0 +1,49 @@
1
+ <turbo-frame id="update_profile_information_form">
2
+ <section>
3
+ <header>
4
+ <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
5
+ Profile Information
6
+ </h2>
7
+
8
+ <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
9
+ Update your account's profile information and email address.
10
+ </p>
11
+ </header>
12
+
13
+ <%= form_with model: @update_profile_information_form, url: profile_update_path, method: "patch", class: "mt-6 space-y-6" do %>
14
+ <!-- Name -->
15
+ <div>
16
+ <%= render(InputLabelComponent.new({ for: "name", value: "Name" })) %>
17
+
18
+ <%= render(TextInputComponent.new({ id: "name", class: "block mt-1 w-full", type: "text", name: "name", value: @update_profile_information_form.name, required: true, autofocus: true, autocomplete: "name" })) %>
19
+
20
+ <%= render(InputErrorComponent.new({ class: "mt-2", message: @update_profile_information_form.error_messages[:name] })) %>
21
+ </div>
22
+
23
+ <!-- Email Address -->
24
+ <div class="mt-4">
25
+ <%= render(InputLabelComponent.new({ for: "email", value: "Email" })) %>
26
+
27
+ <%= render(TextInputComponent.new({ id: "email", class: "block mt-1 w-full", type: "email", name: "email", value: @update_profile_information_form.email, required: true, autocomplete: "username" })) %>
28
+
29
+ <%= render(InputErrorComponent.new({ class: "mt-2", message: @update_profile_information_form.error_messages[:email] })) %>
30
+ </div>
31
+
32
+ <div class="flex items-center gap-4">
33
+ <%= render(PrimaryButtonComponent.new) do %>
34
+ Save
35
+ <% end %>
36
+
37
+ <% if flash[:status] == "profile-updated" %>
38
+ <p
39
+ x-data="{ show: true }"
40
+ x-show="show"
41
+ x-transition
42
+ x-init="setTimeout(() => show = false, 2000)"
43
+ class="text-sm text-gray-600 dark:text-gray-400"
44
+ >Saved.</p>
45
+ <% end %>
46
+ </div>
47
+ <% end %>
48
+ </section>
49
+ </turbo-frame>
@@ -0,0 +1,68 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <meta name="turbo-visit-control" content="reload">
7
+
8
+ <title><%= content_for(:title) || "Rails" %></title>
9
+
10
+ <%= csrf_meta_tags %>
11
+ <%= csp_meta_tag %>
12
+
13
+ <%= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload" %>
14
+
15
+ <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
16
+ <%= javascript_importmap_tags %>
17
+
18
+ <%= hotwire_livereload_tags if Rails.env.development? %>
19
+ <%= turbo_refreshes_with method: :morph, scroll: :preserve %>
20
+ </head>
21
+
22
+ <body class="font-sans antialiased">
23
+ <div
24
+ class="flex flex-col items-center justify-center bg-[#F0E7E9] bg-center bg-cover text-[#261B23] not-italic font-normal leading-tight min-h-screen text-center"
25
+ style="background-image: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEwMjQiIHZpZXdCb3g9IjAgMCAxNDQwIDEwMjQiIHdpZHRoPSIxNDQwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0xNDQwIDUxMC4wMDA2NDh2LTUxMC4wMDA2NDhoLTE0NDB2Mzg0LjAwMDY0OGM0MTcuMzExOTM5IDEzMS4xNDIxNzkgODkxIDE3MS41MTMgMTQ0MCAxMjZ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+);font-family: Sans-Serif;font-size: calc(0.9em + 0.5vw);"
26
+ >
27
+ <header class="absolute top-0 right-0 grid grid-cols-2 items-center gap-2 py-10 lg:grid-cols-3">
28
+ <div class="-mx-3 flex flex-1 justify-end">
29
+ <% if Current.user %>
30
+ <a
31
+ href="<%= dashboard_url %>"
32
+ class="rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white/80 dark:focus-visible:ring-white"
33
+ v-if="$page.props.auth.user"
34
+ >
35
+ Dashboard
36
+ </a>
37
+ <% else %>
38
+ <a
39
+ href="<%= login_url %>"
40
+ class="rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white/80 dark:focus-visible:ring-white"
41
+ >
42
+ Log in
43
+ </a>
44
+ <a
45
+ href="<%= register_url %>"
46
+ class="rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white/80 dark:focus-visible:ring-white"
47
+ >
48
+ Register
49
+ </a>
50
+ <% end %>
51
+ </div>
52
+ </header>
53
+ <nav style="font-size: 0;height: 20vw;line-height: 0;max-height: 280px;max-width: 280px;min-height: 86px;min-width: 86px;width: 20vw;">
54
+ <a
55
+ class="bg-[#D30001] hover:bg-[#261B23] flex rounded-full" href="https://rubyonrails.org" target="_blank"
56
+ style="transition: background 0.25s cubic-bezier(0.33, 1, 0.68, 1);filter: drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08));"
57
+ >
58
+ <img class="h-auto max-w-full w-full cursor-pointer" alt="" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjExMiIgdmlld0JveD0iMCAwIDExMiAxMTIiIHdpZHRoPSIxMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMC4wODIzNTcgNDguOTk5NTQwM3Y0LjExMzUwMzRoLTcuMzAwMzM4OHYxLjg5ODU0aDMuNjg0MDcxN2MxLjk3MjUwOTEgMCA0LjA3MjUzNDEgMS40NjY0MzExIDQuMTk3OTk3MSAzLjk2NjUxMjRsLjAwNTkxMy4yMzczOTc3djEuNTgyMTE2N2MtLjA4NzgyNCAzLjAwNzk1OS0yLjU0MzEyMTEgNC4xMzkwMDE4LTQuMDcxNTM4OSA0LjIwMTE3NzNsLS4xMzIzNzEyLjAwMjczMjhoLTcuMzkwNzQ1MXYtNC4wOTA5MDE4bDcuNDgxMTUxOC0uMDIyNjAxNnYtMS45ODg5NDY3aC0zLjQ4MDY1NjdjLTEuNzc1MjU4MyAwLTQuMDgxODMyMS0xLjMzODkxNTMtNC4yMTk5OTQyLTMuOTU0OTIwMWwtLjAwNjUxNzYtLjI0ODk5di0xLjQyMzkwNWMwLTIuNjk4MjQwMiAyLjI3ODIxMjktNC4xODI4NTMgNC4wNjU0NjQtNC4yNjc4NDkxbC4xNjEwNDc4LS4wMDM4NjZ6bS0xOC42OTE1NzkgMHYxMS44NjU4NzUyaDYuMTcwMjU1MXY0LjEzNjEwNTFoLTEwLjczNTc5MTl2LTE2LjAwMTk4MDN6bS02LjQ0MTQ3NTEgMHYxNi4wMDE5ODAzaC00LjU4ODEzODV2LTE2LjAwMTk4MDN6bS0xNS4yMTA5MjIgMGg0LjQwNzMyNTFsLjE4NzcyNC4wMDY2ODEyYy4wMzM4NjA5LjAwMjI3MzUuMDY4OTQ1Ny4wMDUxNDk5LjEwNTE2MDEuMDA4NjY0M2wuMjMwMDg3NS4wMjkwMTc4YzEuMjkxMzgyOS4xOTg1NDc2IDMuNTQ2MzgxNiAxLjEyMTM4MTYgMy42NzUxNzA4IDMuOTA2ODU4N2wuMDA1NzY3Ny4yNTI2ODgxdjExLjc5ODA3MDJoLTQuMjcxNzE1MXYtMi44MjUyMDg0aC00LjEzNjEwNTF2Mi44MjUyMDg0aC00LjQwNzMyNTF2LTExLjc5ODA3MDJjMC0xLjMxODQzMDYgMS4wMDQwODI2LTQuMDQ2ODQ5NSAzLjk0Njg5OS00LjE5NzQxMXptLTE5LjczOTg1MTktLjAwMjc1ODEgOC41ODAxODU3LjAwMDU3NDkuMjM4OTIzNC4wMzY3NDYyLjE0Nzk0NTkuMDI5NDE3LjI3NDExNjEuMDY1MzU4Mi4yMTI1MTk4LjA1OTkwNjguMjMyMzIyNS4wNzQ3MTgyYy4wNDAxNzkzLjAxMzc3MDQuMDgxMDQwMi4wMjgyMjAxLjEyMjUxMS4wNDMzODA0bC4yNTU1NjkxLjA5OTczNzYuMjY2NzYxOC4xMTgyODUyYzEuMzU2MDUxNS42NDAyODY2IDMuMDAyNjg1NSAyLjAzMjE1ODMgMy4wMDI2ODU1IDUuMDE2Mjk0IDAgMy4xODMwNzgxLTEuNTQ2NTI0MSA0LjUwMTQ4OTktMi42OTg4MzYyIDUuMDQyMDQ3N2wtLjIxMDk2NTEuMDkyNTA0NS0uMTk4ODgyOC4wNzU4NjU1LS4xODM5NTc3LjA2MDgxODYtLjE2NjE4OTguMDQ3MzYzNi0uMjA5NzUwOC4wNDkzMDAxLS4yNTk2NDkzLjA0MTgzNjMgNS4wMDU2ODk1IDUuMDUwNTgzNmgtNi4zNzQ5NTg5bC0zLjcyNjIwODMtMy44NjA4OTA2djMuODYwODkwNmgtNC4zMDk4MzE0em0yMi4wMDcwNjAzLTMuMDg2OTE5My40NDQ5OTE3LjQyMjY4MDctLjI0Mjk2OC4xNzc5ODgxLS4zNDgyMzMxLjI2OTMzNjUtLjE5OTg1NzMuMTYyOTIwNGMtNS4yMzk4OTY3LTMuODc0NTcxNS05LjY0NzY0NTQtNS40MjIxNDA5LTEzLjE5NzExOS01LjgxNTM1MzdsLS41MjU5ODA3LS4wNTA0NzA4Yy0xLjAzOTA3NDItLjA4NDIxMjYtMi4wMDA3ODYxLS4wNjk4MTAxLTIuODg0NDMwMi4wMTE1NDYybC0uNDM1MzEzMi4wNDYxMTExYy0uMDcxNDY2OC4wMDg1NjYyLS4xNDIzOTA3LjAxNzU2MDgtLjIxMjc3MTIuMDI2OTY1M2wtLjQxNTc1OTUuMDYxMjAwNS0uNDAyNjk5MS4wNzAxNjA3LS4zODk2MTk0LjA3ODI0MTUtLjM3NjUxOTguMDg1NDQyN2MtLjA2MTY2MDYuMDE0NzkxNy0uMTIyNzc0Ni4wMjk4NDY4LS4xODMzNDE1LjA0NTE0N2wtLjM1NjgzMzkuMDk0NTk1Ny0uMzQzNjg1NC4wOTk1OTgyLS4zMzA1MTc0LjEwMzcyMTMtLjMxNzMyOTcuMTA2OTY0OS0uMzA0MTIyNS4xMDkzMjktLjI5MDg5NTYuMTEwODEzNy0uNDExNTAwMi4xNjcwODAzLS41MDIxOTAyLjIxOTc2MTUtLjY1MzM3MzYuMzA4ODk1Ni0uNjEwMTA1LjMwMDU2NzVjLTQuNjk4ODg2NiAyLjYyMTk3ODgtNi44NTM5Mjk0IDYuODQ2MDcxMS03Ljc2ODIwMDIgMTAuODg2NjQ2M2wtLjEyMjMxMDEuNTc1NzgzOGMtLjAzODA1MDQuMTkxMzgzMy0uMDczNDI3OC4zODIxNTc2LS4xMDYyNzMyLjU3MjEzMDFsLS4wOTEwODA0LjU2NzMxOTYtLjA3NjczMTguNTYxMzUyMS0uMDYzMjI3NS41NTQyMjc3Yy0uMDA5NDU5NC4wOTE3MTM0LS4wMTgzOTE0LjE4MzA4MTctLjAyNjgxMzQuMjc0MDgwOGwtLjA0NDU1NC41NDEzNzIyLS4wMzMxNjAxLjUzMTM1NTZjLS4wMDQ2MjQyLjA4NzY2MDMtLjAwODgwODcuMTc0ODU1MS0uMDEyNTcxMy4yNjE1NjAybC0uMDE3NjUyNS41MTQxNjE4LS4wMDgzNjkzLjUwMTI1MzEuMDAwMDY5Ni40ODcxODc2LjAxNDA4MDYuNzAxODc3OS4wMjgzMTk1LjY2MzcyMjkuMDM5NzA4OS42MjE2NjM3LjA0ODI0OTIuNTc1Njk5OS4wNTM5NDAyLjUyNTgzMTcuMDc1ODQ4MS42MTY3ODc5LjA3NDE0NjIuNTExOTM3LjA4MDAwMDIuNDc4Mzc1Ni4wNjg1OTk1LjM1NDA4NjNoLTE3Ljg1NTMxN2wuMDU4NDktLjQ0MTcyNTMuMDQ2MzM2OC0uMjk1MTQ0OC4wNjMwMjA2LS4zNjQ3MjQyLjExMzI4MTktLjU4OTIwNjkuMTA5Mzc4Ny0uNTE1MDkwNy4xODIwMjY1LS43Nzg1MDg4LjE2NjEzNzYtLjY0ODY3NzIuMTI1OTIzMy0uNDYxNTk0My4yMTMwNDc0LS43MzM4MjI1LjE1ODk2NTUtLjUxNTUwNDIuMTczMTcyOC0uNTM1NDY5OS4xODc5NDYzLS41NTQ1MjI2LjIwMzI4NTctLjU3MjY2Mi4yMTkxOTEzLS41ODk4ODgzLjIzNTY2MjgtLjYwNjIwMTQuMjUyNzAwNC0uNjIxNjAxMmMuMDQzNTY4LS4xMDQ4MzI4LjA4Nzg2OTQtLjIxMDI2OTEuMTMyOTE2Mi0uMzE2MjkwMWwuMjc5MzE4LS42NDI5ODg3LjI5Nzc3MDctLjY1NjEwNTYuMzE2Nzg5NC0uNjY4MzA5Mi4zMzYzNzQtLjY3OTU5OTcuMzU2NTI0OS0uNjg5OTc3Yy4zNjY3ODg5LS42OTQ4NjExLjc2NDY1MjktMS40MDM5MTg0IDEuMTk2MTM5My0yLjEyMzA2MjQgNC43NDYzNTAxLTcuOTEwNTgzNCAxMi44Mzc3NDY5LTEzLjkwMDAyNTIgMTkuNDE0ODMyLTE0LjQ4NzY2ODYgNS4wNDUzODA2LS41MDU0MDk0IDkuODkyNTQzNi45Mjc2ODIzIDEzLjk0NDM2MjggMi44Nzk2NDM1bC42NDk5ODU4LjMyMDg1ODIuNjM1NDc2OC4zMjg2MDkzLjYyMDQwMTkuMzM1MDE1Yy4xMDIxMTI2LjA1NjI5NDkuMjAzNTczNi4xMTI4MDA3LjMwNDM3MS4xNjk0ODkybC41OTY3Mjg2LjM0MjEwMTMuNTgwMjM5LjM0NTE0MzkuNTYzMTgzNi4zNDY4NDExLjU0NTU2MjQuMzQ3MTkzMi41MjczNzUzLjM0NjE5OTkuNTA4NjIyMy4zNDM4NjE0Yy4wODMxNzYyLjA1NzA0MDYuMTY1NTQ3NS4xMTM5Mjc3LjI0NzEwMi4xNzA2MzMzbC40Nzk0MzIuMzM3ODMxMi40NTkyNjQ0LjMzMjEyOTQuNDM4NTMxLjMyNTA4MjUuNDE3MjMxNy4zMTY2OTAyLjU4NDY3MzYuNDU2MzU2OS41MzM1Njc0LjQyOTkwNzEuNjI4NjIzNy41MjQyMTc5LjY0NjM0MzIuNTYxNDAxNXptLTMwLjcwMDEwNTYgMTQuNTcxMzI0MyAyLjQ0MDk4MDEuODgxNDY1Yy4xMTMwMDgzLjg4NTIzMTkuMjczMTAzNCAxLjcyMzM3NzEuNDQxMDQ2NCAyLjQ4ODI3NjFsLjEwMTM5MzYuNDQ5OTQwNi0yLjcxMjIwMDEtLjk3MTg3MTctLjAzMzgzNDctLjIxMjE2MTgtLjA2NjA0MjEtLjQ3NTU4NDMtLjA2MTE2MDEtLjU0MTIxOTVjLS4wNDgwMjg1LS40Nzc0NjAyLS4wODc1ODE0LTEuMDE5OTAwMy0uMTEwMTgzMS0xLjYxODg0NDR6bTMxLjUwNjcyMzktNy42NjE5NjUyaC0xLjUxNDMxMTdjLS45NDAwMjM4IDAtMS4yMzkxMjI0LjQwOTc3Mi0xLjMzNDI5MDEuNjcwNTM2bC0uMDI4MjI2Ni4wOTUwMzM5Yy0uMDAzMjM3LjAxNDA3My0uMDA1ODI2Ni4wMjcxNTI2LS4wMDc4OTgyLjAzOTA3MzJsLS4wMDgxNTczLjA3MTUyMzktLjAwMDEyOTUgMy45MTUzODY0aDQuMTM2MTA1MWwtLjAwMTg1MzMtMy45MzQ3Njk0LS4wMTAyNjEyLS4wNjY5OTEzLS4wMjU3MjA3LS4wOTg3MjQxYy0uMDgzNTM1Ny0uMjU5MTUwNy0uMzUwOTEzNS0uNjkxMDY4Ni0xLjIwNTI1NjUtLjY5MTA2ODZ6bS01MC40OTIxMjQyLjMzOTAyNSAyLjU5OTE5MTcuOTQ5MjctLjQwODY0MS45NTE1ODM5Yy0uMjEyNDg4Mi40OTk0NjQ0LS40Mjc3Nzk2IDEuMDE0ODE0Mi0uNjAzMzU3NSAxLjQ1Nzc0NWwtLjExODA4NDkuMzAyODcxMi0yLjU5OTE5MTctLjk0OTI3LjEzMjM2NjItLjM0NTMwMzMuMjU4Mzg4OS0uNjM5MjAzNC4zMDU3MTExLS43MjgxOTc0LjMyNTQ4NzUtLjc1MzYyNDRjLjAzNjI0MzgtLjA4Mjc5NDMuMDcyMzQzNy0uMTY0ODgyMy4xMDgxMjk3LS4yNDU4NzE2em0zNS40NDUxMjA5LS4xNDM0NDQ5aC0zLjQ1Njg0Mzl2My42NTg4NjczaDMuNDM0Mzk2OGwuMDU0NzEwNi0uMDI1MzkyLjA4NjU5ODQtLjA0ODg5ODMuMTE0NzUzNi0uMDc4NjgyMmMuMjkyNjQyOC0uMjIxMTQ0OC43MzE2MDcxLS43MTQ5Nzk3LjczMTYwNzEtMS42ODc2ODQ3cy0uNDI4OTg3OC0xLjQ1NjU2MzQtLjcxNDk3OTctMS42NzEwNTczbC0uMTEyMTQ1NS0uMDc2MDc0MS0uMDg0NjMwMy0uMDQ2OTMwMXptLTE1LjQ0MjY0NTYtLjc2MDYyMTggMS42MjczMjAxIDEuMjg4Mjk1MWMtLjE4MDgxMzQuNzA1MTcyLS4zMTgyMzE1IDEuNDEwMzQ0LS40MTIyNTQ1IDIuMTE1NTE2bC0uMDYyMzgwNi41Mjg4NzktMS44MzA3MzUtMS40NDY1MDY3Yy4xODA4MTM0LS44MTM2Ni4zODQyMjg0LTEuNjQ5OTIxNy42NzgwNS0yLjQ4NjE4MzR6bTQuMDAwNDk1MS02LjMwNTg2NTEgMS4wMTcwNzUgMS41MzY5MTM0Yy0uMzk3Nzg5My40MTU4NzA3LS43NjY2NDg1LjgzMTc0MTMtMS4wOTUwMDU1IDEuMjcwNzU2MWwtLjIzODQ5MjguMzMzOTYyMy0xLjA4NDg4MDEtMS42MjczMjAxYy40MDY4My0uNTE5ODM4My44ODE0NjUxLTEuMDM5Njc2NyAxLjQwMTMwMzQtMS41MTQzMTE3em0tMTYuMTgyNzkzNi0zLjM0NTA0NjcgMS42MDQ3MTgzIDEuNDAxMzAzNGMtLjQwNjgzLjQyMzc4MTItLjgwMDk0NjUuODcyOTg5NC0xLjE3MjgxNDYgMS4zMjg1NTQybC0uMzY0MDk4Ny40NTY5Nzc1LTEuNzQwMzI4NC0xLjQ5MTcxMDFjLjUxOTgzODMtLjU2NTA0MTYgMS4wODQ4OC0xLjEzMDA4MzMgMS42NzI1MjM0LTEuNjk1MTI1em0yMi4zOTgyNTIxLS4wOTA0MDY3LjQ5NzIzNjYgMS40OTE3MTAxYy0uNTI0MzU4Ni4xNjI3MzItMS4wNDg3MTczLjM2ODg1OTItMS41NzMwNzYuNjA2ODA5NWwtLjM5MzI2OS4xODQyNDg4LS41MTk4Mzg0LTEuNTU5NTE1Yy41NjUwNDE3LS4yNDg2MTg0IDEuMjIwNDkwMS0uNDk3MjM2NyAxLjk4ODk0NjgtLjcyMzI1MzR6bTUuMjg4NzktLjU0MjQ0Yy41Nzg2MDI3LjAzNjE2MjcgMS4xNzE2NzA1LjEwMTI1NTUgMS43NzkyMDMzLjIwNjg1MDVsLjQ1ODM2MTguMDg2OTcxMi0uMDkwNDA2NyAxLjQwMTMwMzRjLS41OTY2ODQtLjEyNjU2OTQtMS4xOTMzNjgtLjIwOTc0MzUtMS43OTAwNTItLjI0OTUyMjRsLS40NDc1MTMtLjAyMTY5NzZ6bS0xOC41NTU5Njg2LTYuMjM4MDYwMSAxLjAxNzA3NSAxLjU1OTUxNWMtLjQ0MDczMjUuMjIwMzY2My0uODY4NzUxNi40NjYxNTk0LTEuMzAzMTI3NC43Mjc4NDQzbC0uNDM3MjAxLjI2NjYyOTEtMS4wMzk2NzY3LTEuNTgyMTE2N2MuNjEwMjQ1LS4zNjE2MjY3IDEuMTk3ODg4NC0uNjc4MDUgMS43NjI5MzAxLS45NzE4NzE3em0xOC41MTA3NjUzLjYzMjg0NjcuMDkwNDA2Ny0xLjQ5MTcxLjQ0MzUwNzMuMTMwNTU2NC4zODM5ODAzLjEyMDMyNTIuMzI4NTQ1OC4xMDk5MDc5LjI3NzIwMzcuMDk5MzA0OC4zMjg0OTE1LjEyODY2OS4yOTY0ODguMTMyNzExMi4xMzQxNDUxLjA2OTU4MzgtLjA5MDQwNjcgMS41MTQzMTE3Yy0uNDgyMTY4OS0uMTk1ODgxMS0uOTY0MzM3OC0uMzgxNzE3LTEuNDUzMjAzNS0uNTU3NTA3OHptLTguNTQzNDMwMS0yLjgyNTIwODQuNDUyMDMzMyAxLjM3ODcwMTdoLS4yMjYwMTY3Yy0uNDkxNTg2MiAwLS45ODMxNzI1LjAxMjcxMzQtMS40NzQ3NTg4LjA0NzY3NTRsLS40OTE1ODYyLjA0MjczMTMtLjQyOTQzMTctMS4zMzM0OTg0Yy43NDU4NTUtLjA5MDQwNjcgMS40NjkxMDg0LS4xMzU2MSAyLjE2OTc2MDEtLjEzNTYxeiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==" />
59
+ </a>
60
+ </nav>
61
+
62
+ <ul class="bottom-0 left-0 list-none mx-8 mt-0 mb-8 right-0 absolute">
63
+ <li><strong>Rails version:</strong> <%= Rails.version %></li>
64
+ <li><strong>Ruby version:</strong> <%= RUBY_DESCRIPTION %></li>
65
+ </ul>
66
+ </div>
67
+ </body>
68
+ </html>
@@ -0,0 +1,3 @@
1
+ pin "application"
2
+ pin "@hotwired/turbo-rails", to: "turbo.min.js"
3
+ pin "alpinejs"
@@ -0,0 +1,23 @@
1
+ import defaultTheme from 'tailwindcss/defaultTheme';
2
+ import forms from '@tailwindcss/forms';
3
+
4
+ /** @type {import('tailwindcss').Config} */
5
+ export default {
6
+ content: [
7
+ './public/*.html',
8
+ './app/helpers/**/*.rb',
9
+ './app/components/**/*',
10
+ './app/views/**/*',
11
+ './app/javascript/**/*.js',
12
+ ],
13
+
14
+ theme: {
15
+ extend: {
16
+ fontFamily: {
17
+ sans: ['Inter', ...defaultTheme.fontFamily.sans],
18
+ },
19
+ },
20
+ },
21
+
22
+ plugins: [forms],
23
+ }
@@ -0,0 +1,34 @@
1
+ module Authenticate
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ before_action :authenticate_user!
6
+ end
7
+
8
+ class_methods do
9
+ def skip_authentication(**options)
10
+ skip_before_action :authenticate_user!, **options
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def authenticate_user!
17
+ if user = User.find_by(id: session[:user_id])
18
+ Current.user = user
19
+ else
20
+ redirect_to login_path
21
+ end
22
+ end
23
+
24
+ def login(user)
25
+ Current.user = user
26
+ reset_session
27
+ session[:user_id] = user.id
28
+ end
29
+
30
+ def logout
31
+ Current.user = nil
32
+ reset_session
33
+ end
34
+ end
@@ -1,5 +1,5 @@
1
1
  class DashboardController < ApplicationController
2
- def show
2
+ def index
3
3
  render inertia: "Dashboard"
4
4
  end
5
5
  end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'vite' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
+
13
+ bundle_binstub = File.expand_path("bundle", __dir__)
14
+
15
+ if File.file?(bundle_binstub)
16
+ if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
17
+ load(bundle_binstub)
18
+ else
19
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
+ end
22
+ end
23
+
24
+ require "rubygems"
25
+ require "bundler/setup"
26
+
27
+ load Gem.bin_path("vite_ruby", "vite")
@@ -0,0 +1,16 @@
1
+ {
2
+ "all": {
3
+ "sourceCodeDir": "app/javascript",
4
+ "watchAdditionalPaths": []
5
+ },
6
+ "development": {
7
+ "autoBuild": true,
8
+ "publicOutputDir": "vite-dev",
9
+ "port": 3036
10
+ },
11
+ "test": {
12
+ "autoBuild": true,
13
+ "publicOutputDir": "vite-test",
14
+ "port": 3037
15
+ }
16
+ }
@@ -9,10 +9,6 @@
9
9
  <%= csrf_meta_tags %>
10
10
  <%= csp_meta_tag %>
11
11
 
12
- <!-- Fonts -->
13
- <link rel="preconnect" href="https://fonts.bunny.net">
14
- <link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
15
-
16
12
  <%= vite_client_tag %>
17
13
  <%= vite_react_refresh_tag %>
18
14
  <%= vite_typescript_tag 'application.tsx', defer: true %>
@@ -13,7 +13,7 @@ export default {
13
13
  theme: {
14
14
  extend: {
15
15
  fontFamily: {
16
- sans: ['Figtree', ...defaultTheme.fontFamily.sans],
16
+ sans: ['Inter', ...defaultTheme.fontFamily.sans],
17
17
  },
18
18
  },
19
19
  },
@@ -1,26 +1,26 @@
1
1
  {
2
- "private": true,
3
- "type": "module",
4
- "scripts": {
5
- "dev": "vite",
6
- "build": "tsc && bin/rails tailwindcss:build && vite build"
7
- },
8
- "devDependencies": {
9
- "@headlessui/react": "^2.0.4",
10
- "@inertiajs/react": "^1.1.0",
11
- "@tailwindcss/forms": "^0.5.7",
12
- "@types/node": "^18.13.0",
13
- "@types/react": "^18.0.28",
14
- "@types/react-dom": "^18.0.10",
15
- "@vitejs/plugin-react": "^4.2.0",
16
- "autoprefixer": "^10.4.12",
17
- "axios": "^1.6.4",
18
- "postcss": "^8.4.31",
19
- "react": "^18.2.0",
20
- "react-dom": "^18.2.0",
21
- "tailwindcss": "^3.2.1",
22
- "typescript": "^5.0.2",
23
- "vite": "^5.2.11",
24
- "vite-plugin-rails": "^0.5.0"
25
- }
2
+ "private": true,
3
+ "type": "module",
4
+ "scripts": {
5
+ "dev": "vite",
6
+ "build": "tsc && bin/rails tailwindcss:build && vite build"
7
+ },
8
+ "devDependencies": {
9
+ "@headlessui/react": "^2.0.4",
10
+ "@inertiajs/react": "^1.1.0",
11
+ "@tailwindcss/forms": "^0.5.7",
12
+ "@types/node": "^18.13.0",
13
+ "@types/react": "^18.0.28",
14
+ "@types/react-dom": "^18.0.10",
15
+ "@vitejs/plugin-react": "^4.2.0",
16
+ "autoprefixer": "^10.4.12",
17
+ "axios": "^1.6.4",
18
+ "postcss": "^8.4.31",
19
+ "react": "^18.2.0",
20
+ "react-dom": "^18.2.0",
21
+ "tailwindcss": "^3.2.1",
22
+ "typescript": "^5.0.2",
23
+ "vite": "^5.2.11",
24
+ "vite-plugin-rails": "^0.5.0"
26
25
  }
26
+ }
@@ -17,7 +17,7 @@ defineProps<{
17
17
  <header class="absolute top-0 right-0 grid grid-cols-2 items-center gap-2 py-10 lg:grid-cols-3">
18
18
  <div class="-mx-3 flex flex-1 justify-end">
19
19
  <Link
20
- href="dashboard_path()"
20
+ :href="dashboard_path()"
21
21
  class="rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white/80 dark:focus-visible:ring-white"
22
22
  v-if="$page.props.auth.user"
23
23
  >
@@ -9,10 +9,6 @@
9
9
  <%= csrf_meta_tags %>
10
10
  <%= csp_meta_tag %>
11
11
 
12
- <!-- Fonts -->
13
- <link rel="preconnect" href="https://fonts.bunny.net">
14
- <link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
15
-
16
12
  <%= vite_client_tag %>
17
13
  <%= vite_typescript_tag 'application.ts', defer: true %>
18
14
  </head>
@@ -13,7 +13,7 @@ export default {
13
13
  theme: {
14
14
  extend: {
15
15
  fontFamily: {
16
- sans: ['Figtree', ...defaultTheme.fontFamily.sans],
16
+ sans: ['Inter', ...defaultTheme.fontFamily.sans],
17
17
  },
18
18
  },
19
19
  },
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaze
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cuong Giang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-10 00:00:00.000000000 Z
11
+ date: 2024-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -66,23 +66,11 @@ files:
66
66
  - lib/kaze.rb
67
67
  - lib/kaze/commands.rb
68
68
  - lib/kaze/commands/install_command.rb
69
- - lib/kaze/commands/install_inertia_stacks.rb
69
+ - lib/kaze/commands/installs_hotwire_stack.rb
70
+ - lib/kaze/commands/installs_inertia_stacks.rb
70
71
  - lib/kaze/version.rb
71
- - stubs/default/Procfile.dev
72
72
  - stubs/default/app/assets/stylesheets/application.css
73
73
  - stubs/default/app/assets/stylesheets/application.tailwind.css
74
- - stubs/default/app/controllers/application_controller.rb
75
- - stubs/default/app/controllers/auth/authenticated_session_controller.rb
76
- - stubs/default/app/controllers/auth/new_password_controller.rb
77
- - stubs/default/app/controllers/auth/password_reset_link_controller.rb
78
- - stubs/default/app/controllers/auth/registered_user_controller.rb
79
- - stubs/default/app/controllers/concerns/authenticate.rb
80
- - stubs/default/app/controllers/concerns/handle_inertia_requests.rb
81
- - stubs/default/app/controllers/concerns/verify_csrf_token.rb
82
- - stubs/default/app/controllers/dashboard_controller.rb
83
- - stubs/default/app/controllers/password_controller.rb
84
- - stubs/default/app/controllers/profile_controller.rb
85
- - stubs/default/app/controllers/welcome_controller.rb
86
74
  - stubs/default/app/forms/application_form.rb
87
75
  - stubs/default/app/forms/auth/login_form.rb
88
76
  - stubs/default/app/forms/auth/new_password_form.rb
@@ -105,11 +93,68 @@ files:
105
93
  - stubs/default/app/views/layouts/mailer.text.erb
106
94
  - stubs/default/app/views/user_mailer/reset_password.html.erb
107
95
  - stubs/default/bin/dev
108
- - stubs/default/bin/vite
109
96
  - stubs/default/config/routes.rb
110
- - stubs/default/config/vite.json
111
97
  - stubs/default/db/migrate/20240101000000_create_users.rb
112
98
  - stubs/default/db/migrate/20240101000001_create_delayed_jobs.rb
99
+ - stubs/hotwire/Procfile.dev
100
+ - stubs/hotwire/app/components/application_logo_component.rb
101
+ - stubs/hotwire/app/components/auth_session_status_component.rb
102
+ - stubs/hotwire/app/components/danger_button_component.rb
103
+ - stubs/hotwire/app/components/dropdown_component.html.erb
104
+ - stubs/hotwire/app/components/dropdown_component.rb
105
+ - stubs/hotwire/app/components/dropdown_link_component.rb
106
+ - stubs/hotwire/app/components/input_error_component.rb
107
+ - stubs/hotwire/app/components/input_label_component.rb
108
+ - stubs/hotwire/app/components/modal_component.html.erb
109
+ - stubs/hotwire/app/components/modal_component.rb
110
+ - stubs/hotwire/app/components/nav_link_component.rb
111
+ - stubs/hotwire/app/components/primary_button_component.rb
112
+ - stubs/hotwire/app/components/responsive_nav_link_component.rb
113
+ - stubs/hotwire/app/components/secondary_button_component.rb
114
+ - stubs/hotwire/app/components/text_input_component.rb
115
+ - stubs/hotwire/app/controllers/application_controller.rb
116
+ - stubs/hotwire/app/controllers/auth/authenticated_session_controller.rb
117
+ - stubs/hotwire/app/controllers/auth/new_password_controller.rb
118
+ - stubs/hotwire/app/controllers/auth/password_reset_link_controller.rb
119
+ - stubs/hotwire/app/controllers/auth/registered_user_controller.rb
120
+ - stubs/hotwire/app/controllers/concerns/authenticate.rb
121
+ - stubs/hotwire/app/controllers/dashboard_controller.rb
122
+ - stubs/hotwire/app/controllers/password_controller.rb
123
+ - stubs/hotwire/app/controllers/profile_controller.rb
124
+ - stubs/hotwire/app/controllers/welcome_controller.rb
125
+ - stubs/hotwire/app/javascript/alpinejs.js
126
+ - stubs/hotwire/app/javascript/application.js
127
+ - stubs/hotwire/app/views/auth/forgot_password.html.erb
128
+ - stubs/hotwire/app/views/auth/login.html.erb
129
+ - stubs/hotwire/app/views/auth/register.html.erb
130
+ - stubs/hotwire/app/views/auth/reset_password.html.erb
131
+ - stubs/hotwire/app/views/dashboard/index.html.erb
132
+ - stubs/hotwire/app/views/layouts/_navigation.html.erb
133
+ - stubs/hotwire/app/views/layouts/application.html.erb
134
+ - stubs/hotwire/app/views/layouts/guest.html.erb
135
+ - stubs/hotwire/app/views/profile/edit.html.erb
136
+ - stubs/hotwire/app/views/profile/partials/_delete_user_form.html.erb
137
+ - stubs/hotwire/app/views/profile/partials/_update_password_form.html.erb
138
+ - stubs/hotwire/app/views/profile/partials/_update_profile_information_form.html.erb
139
+ - stubs/hotwire/app/views/welcome/index.html.erb
140
+ - stubs/hotwire/bin/vite
141
+ - stubs/hotwire/config/importmap.rb
142
+ - stubs/hotwire/config/tailwind.config.js
143
+ - stubs/inertia-common/Procfile.dev
144
+ - stubs/inertia-common/app/controllers/application_controller.rb
145
+ - stubs/inertia-common/app/controllers/auth/authenticated_session_controller.rb
146
+ - stubs/inertia-common/app/controllers/auth/new_password_controller.rb
147
+ - stubs/inertia-common/app/controllers/auth/password_reset_link_controller.rb
148
+ - stubs/inertia-common/app/controllers/auth/registered_user_controller.rb
149
+ - stubs/inertia-common/app/controllers/concerns/authenticate.rb
150
+ - stubs/inertia-common/app/controllers/concerns/handle_inertia_requests.rb
151
+ - stubs/inertia-common/app/controllers/concerns/verify_csrf_token.rb
152
+ - stubs/inertia-common/app/controllers/dashboard_controller.rb
153
+ - stubs/inertia-common/app/controllers/password_controller.rb
154
+ - stubs/inertia-common/app/controllers/profile_controller.rb
155
+ - stubs/inertia-common/app/controllers/welcome_controller.rb
156
+ - stubs/inertia-common/bin/vite
157
+ - stubs/inertia-common/config/vite.json
113
158
  - stubs/inertia-react-ts/app/javascript/Components/ApplicationLogo.tsx
114
159
  - stubs/inertia-react-ts/app/javascript/Components/Checkbox.tsx
115
160
  - stubs/inertia-react-ts/app/javascript/Components/DangerButton.tsx
@@ -1,16 +0,0 @@
1
- {
2
- "all": {
3
- "sourceCodeDir": "app/javascript",
4
- "watchAdditionalPaths": []
5
- },
6
- "development": {
7
- "autoBuild": true,
8
- "publicOutputDir": "vite-dev",
9
- "port": 3036
10
- },
11
- "test": {
12
- "autoBuild": true,
13
- "publicOutputDir": "vite-test",
14
- "port": 3037
15
- }
16
- }
File without changes
File without changes