kaze 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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