inertia_rails 3.12.1 → 3.14.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 (163) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/lib/generators/inertia/controller/templates/controller.rb.tt +1 -1
  4. data/lib/generators/inertia/install/frameworks.yml +10 -45
  5. data/lib/generators/inertia/install/install_generator.rb +102 -14
  6. data/lib/generators/inertia/install/js_package_manager.rb +6 -6
  7. data/lib/generators/inertia/install/templates/assets/rails.svg +9 -0
  8. data/lib/generators/inertia/install/templates/controller.rb +6 -3
  9. data/lib/generators/inertia/install/templates/inertia_controller.rb +5 -0
  10. data/lib/generators/inertia/install/templates/react/InertiaExample.jsx +43 -47
  11. data/lib/generators/inertia/install/templates/react/InertiaExample.module.css +63 -41
  12. data/lib/generators/inertia/install/templates/react/InertiaExample.tsx +46 -47
  13. data/lib/generators/inertia/install/templates/react/inertia.jsx +65 -0
  14. data/lib/generators/inertia/install/templates/react/inertia.tsx +65 -0
  15. data/lib/generators/inertia/install/templates/react/tsconfig.app.json +7 -0
  16. data/lib/generators/inertia/install/templates/react/types/globals.d.ts +8 -0
  17. data/lib/generators/inertia/install/templates/react/types/index.ts +8 -0
  18. data/lib/generators/inertia/install/templates/svelte/InertiaExample.svelte +103 -69
  19. data/lib/generators/inertia/install/templates/svelte/InertiaExample.ts.svelte +104 -69
  20. data/lib/generators/inertia/install/templates/svelte/inertia.js +14 -3
  21. data/lib/generators/inertia/install/templates/svelte/{inertia.ts.tt → inertia.ts} +12 -2
  22. data/lib/generators/inertia/install/templates/svelte/tsconfig.json +8 -0
  23. data/lib/generators/inertia/install/templates/svelte/types/globals.d.ts +8 -0
  24. data/lib/generators/inertia/install/templates/svelte/types/index.ts +8 -0
  25. data/lib/generators/inertia/install/templates/tailwind/application.css +3 -3
  26. data/lib/generators/inertia/install/templates/vue/InertiaExample.ts.vue +107 -70
  27. data/lib/generators/inertia/install/templates/vue/InertiaExample.vue +129 -92
  28. data/lib/generators/inertia/install/templates/vue/inertia.js +30 -3
  29. data/lib/generators/inertia/install/templates/vue/inertia.ts +31 -3
  30. data/lib/generators/inertia/install/templates/vue/tsconfig.app.json +9 -1
  31. data/lib/generators/inertia/install/templates/vue/types/globals.d.ts +8 -0
  32. data/lib/generators/inertia/install/templates/vue/types/index.ts +8 -0
  33. data/lib/generators/inertia/scaffold_controller/scaffold_controller_generator.rb +4 -0
  34. data/lib/generators/inertia/scaffold_controller/templates/controller.rb.tt +7 -5
  35. data/lib/generators/inertia_templates/scaffold/templates/react/{Edit.jsx.tt → edit.jsx.tt} +5 -8
  36. data/lib/generators/inertia_templates/scaffold/templates/react/{Edit.tsx.tt → edit.tsx.tt} +7 -9
  37. data/lib/generators/inertia_templates/scaffold/templates/react/form.jsx.tt +94 -0
  38. data/lib/generators/inertia_templates/scaffold/templates/react/form.tsx.tt +109 -0
  39. data/lib/generators/inertia_templates/scaffold/templates/react/{Index.jsx.tt → index.jsx.tt} +1 -1
  40. data/lib/generators/inertia_templates/scaffold/templates/react/{Index.tsx.tt → index.tsx.tt} +1 -1
  41. data/lib/generators/inertia_templates/scaffold/templates/react/{New.jsx.tt → new.jsx.tt} +3 -5
  42. data/lib/generators/inertia_templates/scaffold/templates/react/{New.tsx.tt → new.tsx.tt} +5 -6
  43. data/lib/generators/inertia_templates/scaffold/templates/react/{Show.jsx.tt → show.jsx.tt} +1 -1
  44. data/lib/generators/inertia_templates/scaffold/templates/react/{Show.tsx.tt → show.tsx.tt} +1 -1
  45. data/lib/generators/inertia_templates/scaffold/templates/svelte/{Edit.svelte.tt → edit.svelte.tt} +9 -13
  46. data/lib/generators/inertia_templates/scaffold/templates/{svelte4/Edit.svelte.tt → svelte/edit.ts.svelte.tt} +11 -15
  47. data/lib/generators/inertia_templates/scaffold/templates/svelte/form.svelte.tt +96 -0
  48. data/lib/generators/inertia_templates/scaffold/templates/svelte/form.ts.svelte.tt +103 -0
  49. data/lib/generators/inertia_templates/scaffold/templates/svelte/{Index.svelte.tt → index.svelte.tt} +1 -1
  50. data/lib/generators/inertia_templates/scaffold/templates/svelte/{Index.ts.svelte.tt → index.ts.svelte.tt} +1 -1
  51. data/lib/generators/inertia_templates/scaffold/templates/svelte/{New.svelte.tt → new.svelte.tt} +4 -7
  52. data/lib/generators/inertia_templates/scaffold/templates/{svelte4/New.svelte.tt → svelte/new.ts.svelte.tt} +6 -9
  53. data/lib/generators/inertia_templates/scaffold/templates/svelte/{Show.svelte.tt → show.svelte.tt} +1 -1
  54. data/lib/generators/inertia_templates/scaffold/templates/svelte/{Show.ts.svelte.tt → show.ts.svelte.tt} +1 -1
  55. data/lib/generators/inertia_templates/scaffold/templates/vue/{Edit.ts.vue.tt → edit.ts.vue.tt} +11 -15
  56. data/lib/generators/inertia_templates/scaffold/templates/vue/{Edit.vue.tt → edit.vue.tt} +9 -13
  57. data/lib/generators/inertia_templates/scaffold/templates/vue/form.ts.vue.tt +102 -0
  58. data/lib/generators/inertia_templates/scaffold/templates/vue/form.vue.tt +98 -0
  59. data/lib/generators/inertia_templates/scaffold/templates/vue/{Index.ts.vue.tt → index.ts.vue.tt} +1 -1
  60. data/lib/generators/inertia_templates/scaffold/templates/vue/{Index.vue.tt → index.vue.tt} +1 -1
  61. data/lib/generators/inertia_templates/scaffold/templates/vue/{New.ts.vue.tt → new.ts.vue.tt} +6 -9
  62. data/lib/generators/inertia_templates/scaffold/templates/vue/{New.vue.tt → new.vue.tt} +4 -7
  63. data/lib/generators/inertia_templates/scaffold/templates/vue/{Show.ts.vue.tt → show.ts.vue.tt} +1 -1
  64. data/lib/generators/inertia_templates/scaffold/templates/vue/{Show.vue.tt → show.vue.tt} +1 -1
  65. data/lib/generators/inertia_tw_templates/scaffold/templates/react/{Edit.jsx.tt → edit.jsx.tt} +5 -8
  66. data/lib/generators/inertia_tw_templates/scaffold/templates/react/{Edit.tsx.tt → edit.tsx.tt} +6 -9
  67. data/lib/generators/inertia_tw_templates/scaffold/templates/react/form.jsx.tt +106 -0
  68. data/lib/generators/inertia_tw_templates/scaffold/templates/react/form.tsx.tt +122 -0
  69. data/lib/generators/inertia_tw_templates/scaffold/templates/react/{Index.jsx.tt → index.jsx.tt} +1 -1
  70. data/lib/generators/inertia_tw_templates/scaffold/templates/react/{Index.tsx.tt → index.tsx.tt} +1 -1
  71. data/lib/generators/inertia_tw_templates/scaffold/templates/react/{New.jsx.tt → new.jsx.tt} +3 -5
  72. data/lib/generators/inertia_tw_templates/scaffold/templates/react/{New.tsx.tt → new.tsx.tt} +4 -6
  73. data/lib/generators/inertia_tw_templates/scaffold/templates/react/{Show.jsx.tt → show.jsx.tt} +1 -1
  74. data/lib/generators/inertia_tw_templates/scaffold/templates/react/{Show.tsx.tt → show.tsx.tt} +1 -1
  75. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/{Edit.svelte.tt → edit.svelte.tt} +9 -13
  76. data/lib/generators/inertia_tw_templates/scaffold/templates/{svelte4/Edit.svelte.tt → svelte/edit.ts.svelte.tt} +11 -15
  77. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/form.svelte.tt +109 -0
  78. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/form.ts.svelte.tt +115 -0
  79. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/{Index.svelte.tt → index.svelte.tt} +1 -1
  80. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/{Index.ts.svelte.tt → index.ts.svelte.tt} +1 -1
  81. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/{New.svelte.tt → new.svelte.tt} +4 -7
  82. data/lib/generators/inertia_tw_templates/scaffold/templates/{svelte4/New.svelte.tt → svelte/new.ts.svelte.tt} +6 -9
  83. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/{Show.svelte.tt → show.svelte.tt} +1 -1
  84. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/{Show.ts.svelte.tt → show.ts.svelte.tt} +1 -1
  85. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{Edit.ts.vue.tt → edit.ts.vue.tt} +10 -15
  86. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{Edit.vue.tt → edit.vue.tt} +8 -13
  87. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{Form.ts.vue.tt → form.ts.vue.tt} +19 -42
  88. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{Form.vue.tt → form.vue.tt} +18 -38
  89. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{Index.ts.vue.tt → index.ts.vue.tt} +1 -1
  90. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{Index.vue.tt → index.vue.tt} +1 -1
  91. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{New.ts.vue.tt → new.ts.vue.tt} +6 -9
  92. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{New.vue.tt → new.vue.tt} +4 -7
  93. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{Show.ts.vue.tt → show.ts.vue.tt} +1 -1
  94. data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{Show.vue.tt → show.vue.tt} +1 -1
  95. data/lib/inertia_rails/generators/controller_template_base.rb +1 -1
  96. data/lib/inertia_rails/generators/helper.rb +2 -3
  97. data/lib/inertia_rails/generators/scaffold_template_base.rb +3 -3
  98. data/lib/inertia_rails/version.rb +1 -1
  99. data/lib/inertia_rails.rb +1 -0
  100. metadata +88 -116
  101. data/lib/generators/inertia/install/templates/react/inertia.js +0 -45
  102. data/lib/generators/inertia/install/templates/react/inertia.ts +0 -51
  103. data/lib/generators/inertia/install/templates/svelte4/InertiaExample.svelte +0 -116
  104. data/lib/generators/inertia/install/templates/svelte4/InertiaExample.ts.svelte +0 -116
  105. data/lib/generators/inertia/install/templates/svelte4/inertia.js +0 -43
  106. data/lib/generators/inertia/install/templates/svelte4/inertia.ts.tt +0 -44
  107. data/lib/generators/inertia/install/templates/svelte4/svelte.config.js +0 -7
  108. data/lib/generators/inertia/install/templates/svelte4/tsconfig.json +0 -21
  109. data/lib/generators/inertia/install/templates/svelte4/tsconfig.node.json +0 -12
  110. data/lib/generators/inertia/install/templates/svelte4/vite-env.d.ts +0 -2
  111. data/lib/generators/inertia_templates/controller/templates/svelte4/view.svelte.tt +0 -2
  112. data/lib/generators/inertia_templates/scaffold/templates/react/Form.jsx.tt +0 -111
  113. data/lib/generators/inertia_templates/scaffold/templates/react/Form.tsx.tt +0 -130
  114. data/lib/generators/inertia_templates/scaffold/templates/svelte/Edit.ts.svelte.tt +0 -37
  115. data/lib/generators/inertia_templates/scaffold/templates/svelte/Form.svelte.tt +0 -97
  116. data/lib/generators/inertia_templates/scaffold/templates/svelte/Form.ts.svelte.tt +0 -102
  117. data/lib/generators/inertia_templates/scaffold/templates/svelte/New.ts.svelte.tt +0 -30
  118. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Edit.ts.svelte.tt +0 -38
  119. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Form.svelte.tt +0 -96
  120. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Form.ts.svelte.tt +0 -106
  121. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Index.svelte.tt +0 -36
  122. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Index.ts.svelte.tt +0 -37
  123. data/lib/generators/inertia_templates/scaffold/templates/svelte4/New.ts.svelte.tt +0 -31
  124. data/lib/generators/inertia_templates/scaffold/templates/svelte4/One.svelte.tt +0 -28
  125. data/lib/generators/inertia_templates/scaffold/templates/svelte4/One.ts.svelte.tt +0 -30
  126. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Show.svelte.tt +0 -39
  127. data/lib/generators/inertia_templates/scaffold/templates/svelte4/Show.ts.svelte.tt +0 -40
  128. data/lib/generators/inertia_templates/scaffold/templates/svelte4/types.ts.tt +0 -19
  129. data/lib/generators/inertia_templates/scaffold/templates/vue/Form.ts.vue.tt +0 -101
  130. data/lib/generators/inertia_templates/scaffold/templates/vue/Form.vue.tt +0 -94
  131. data/lib/generators/inertia_tw_templates/controller/templates/svelte4/view.svelte.tt +0 -2
  132. data/lib/generators/inertia_tw_templates/scaffold/templates/react/Form.jsx.tt +0 -122
  133. data/lib/generators/inertia_tw_templates/scaffold/templates/react/Form.tsx.tt +0 -142
  134. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Edit.ts.svelte.tt +0 -45
  135. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Form.svelte.tt +0 -118
  136. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Form.ts.svelte.tt +0 -123
  137. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/New.ts.svelte.tt +0 -33
  138. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Edit.ts.svelte.tt +0 -46
  139. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Form.svelte.tt +0 -120
  140. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Form.ts.svelte.tt +0 -130
  141. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Index.svelte.tt +0 -43
  142. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Index.ts.svelte.tt +0 -44
  143. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/New.ts.svelte.tt +0 -34
  144. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/One.svelte.tt +0 -28
  145. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/One.ts.svelte.tt +0 -30
  146. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Show.svelte.tt +0 -51
  147. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Show.ts.svelte.tt +0 -52
  148. data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/types.ts.tt +0 -19
  149. /data/lib/generators/inertia/install/templates/react/{vite-env.d.ts → types/vite-env.d.ts} +0 -0
  150. /data/lib/generators/inertia/install/templates/svelte/{vite-env.d.ts → types/vite-env.d.ts} +0 -0
  151. /data/lib/generators/inertia/install/templates/vue/{vite-env.d.ts → types/vite-env.d.ts} +0 -0
  152. /data/lib/generators/inertia_templates/scaffold/templates/react/{One.jsx.tt → one.jsx.tt} +0 -0
  153. /data/lib/generators/inertia_templates/scaffold/templates/react/{One.tsx.tt → one.tsx.tt} +0 -0
  154. /data/lib/generators/inertia_templates/scaffold/templates/svelte/{One.svelte.tt → one.svelte.tt} +0 -0
  155. /data/lib/generators/inertia_templates/scaffold/templates/svelte/{One.ts.svelte.tt → one.ts.svelte.tt} +0 -0
  156. /data/lib/generators/inertia_templates/scaffold/templates/vue/{One.ts.vue.tt → one.ts.vue.tt} +0 -0
  157. /data/lib/generators/inertia_templates/scaffold/templates/vue/{One.vue.tt → one.vue.tt} +0 -0
  158. /data/lib/generators/inertia_tw_templates/scaffold/templates/react/{One.jsx.tt → one.jsx.tt} +0 -0
  159. /data/lib/generators/inertia_tw_templates/scaffold/templates/react/{One.tsx.tt → one.tsx.tt} +0 -0
  160. /data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/{One.svelte.tt → one.svelte.tt} +0 -0
  161. /data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/{One.ts.svelte.tt → one.ts.svelte.tt} +0 -0
  162. /data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{One.ts.vue.tt → one.ts.vue.tt} +0 -0
  163. /data/lib/generators/inertia_tw_templates/scaffold/templates/vue/{One.vue.tt → one.vue.tt} +0 -0
@@ -1,60 +1,59 @@
1
1
  import { Head } from '@inertiajs/react'
2
- import { useState } from 'react'
2
+ import { version as react_version } from 'react'
3
3
 
4
+ import railsSvg from '/assets/rails.svg'
4
5
  import inertiaSvg from '/assets/inertia.svg'
5
6
  import reactSvg from '/assets/react.svg'
6
- import viteRubySvg from '/assets/vite_ruby.svg'
7
7
 
8
- import cs from './InertiaExample.module.css'
9
-
10
- export default function InertiaExample({ name }: { name: string }) {
11
- const [count, setCount] = useState(0)
8
+ import cs from './index.module.css'
12
9
 
10
+ export default function InertiaExample(
11
+ { rails_version, ruby_version, rack_version, inertia_rails_version }:
12
+ { rails_version: string, ruby_version: string, rack_version: string, inertia_rails_version: string }
13
+ ) {
13
14
  return (
14
- <>
15
- <Head title="Inertia + Vite Ruby + React Example" />
16
-
17
- <div className={cs.root}>
18
- <h1 className={cs.h1}>Hello {name}!</h1>
19
-
20
- <div>
21
- <a href="https://inertia-rails.dev" target="_blank">
22
- <img className={cs.logo} src={inertiaSvg} alt="Inertia logo" />
23
- </a>
24
- <a href="https://vite-ruby.netlify.app" target="_blank">
25
- <img
26
- className={`${cs.logo} ${cs.vite}`}
27
- src={viteRubySvg}
28
- alt="Vite Ruby logo"
29
- />
30
- </a>
31
- <a href="https://react.dev" target="_blank">
32
- <img
33
- className={`${cs.logo} ${cs.react}`}
34
- src={reactSvg}
35
- alt="React logo"
36
- />
37
- </a>
38
- </div>
39
-
40
- <h2 className={cs.h2}>Inertia + Vite Ruby + React</h2>
41
-
42
- <div className="card">
43
- <button
44
- className={cs.button}
45
- onClick={() => setCount((count) => count + 1)}
46
- >
47
- count is {count}
48
- </button>
15
+ <div className={cs.root}>
16
+ <Head title="Ruby on Rails + Inertia + React" />
17
+
18
+ <nav className={cs.subNav}>
19
+ <a href="https://rubyonrails.org" target="_blank">
20
+ <img className={`${cs.logo} ${cs.rails}`} alt="Ruby on Rails Logo" src={railsSvg} />
21
+ </a>
22
+ <a href="https://inertia-rails.dev" target="_blank">
23
+ <img className={`${cs.logo} ${cs.inertia}`} src={inertiaSvg} alt="Inertia logo" />
24
+ </a>
25
+ <a href="https://react.dev" target="_blank">
26
+ <img
27
+ className={`${cs.logo} ${cs.react}`}
28
+ src={reactSvg}
29
+ alt="React logo"
30
+ />
31
+ </a>
32
+ </nav>
33
+
34
+ <div className={cs.footer}>
35
+ <div className={cs.card}>
49
36
  <p>
50
- Edit <code>app/frontend/pages/InertiaExample.jsx</code> and save to
51
- test HMR
37
+ Edit <code><%= js_destination_path %>/pages/inertia_example/index.jsx</code> and save to test <abbr title="Hot Module Replacement">HMR</abbr>.
52
38
  </p>
53
39
  </div>
54
- <p className={cs.readTheDocs}>
55
- Click on the Inertia, Vite Ruby, and React logos to learn more
56
- </p>
40
+
41
+ <ul>
42
+ <li>
43
+ <ul>
44
+ <li><strong>Rails version:</strong> {rails_version}</li>
45
+ <li><strong>Rack version:</strong> {rack_version}</li>
46
+ </ul>
47
+ </li>
48
+ <li><strong>Ruby version:</strong> {ruby_version}</li>
49
+ <li>
50
+ <ul>
51
+ <li><strong>Inertia Rails version:</strong> {inertia_rails_version}</li>
52
+ <li><strong>React version:</strong> {react_version}</li>
53
+ </ul>
54
+ </li>
55
+ </ul>
57
56
  </div>
58
- </>
57
+ </div>
59
58
  )
60
59
  }
@@ -0,0 +1,65 @@
1
+ import { createInertiaApp } from '@inertiajs/react'
2
+ import { StrictMode } from 'react'
3
+ import { createRoot } from 'react-dom/client'
4
+
5
+ createInertiaApp({
6
+ // Set default page title
7
+ // see https://inertia-rails.dev/guide/title-and-meta
8
+ //
9
+ // title: title => title ? `${title} - App` : 'App',
10
+
11
+ // Disable progress bar
12
+ //
13
+ // see https://inertia-rails.dev/guide/progress-indicators
14
+ // progress: false,
15
+
16
+ resolve: (name) => {
17
+ const pages = import.meta.glob('../pages/**/*.jsx', {
18
+ eager: true,
19
+ })
20
+ const page = pages[`../pages/${name}.jsx`]
21
+ if (!page) {
22
+ console.error(`Missing Inertia page component: '${name}.jsx'`)
23
+ }
24
+
25
+ // To use a default layout, import the Layout component
26
+ // and use the following lines.
27
+ // see https://inertia-rails.dev/guide/pages#default-layouts
28
+ //
29
+ // page.default.layout ||= (page) => (<Layout>{page}</Layout>)
30
+
31
+ return page
32
+ },
33
+
34
+ setup({ el, App, props }) {
35
+ createRoot(el).render(
36
+ <StrictMode>
37
+ <App {...props} />
38
+ </StrictMode>
39
+ )
40
+ },
41
+
42
+ defaults: {
43
+ form: {
44
+ forceIndicesArrayFormatInFormData: false,
45
+ },
46
+ future: {
47
+ useDataInertiaHeadAttribute: true,
48
+ useDialogForErrorModal: true,
49
+ preserveEqualProps: true,
50
+ },
51
+ },
52
+ }).catch((error) => {
53
+ // This ensures this entrypoint is only loaded on Inertia pages
54
+ // by checking for the presence of the root element (#app by default).
55
+ // Feel free to remove this `catch` if you don't need it.
56
+ if (document.getElementById("app")) {
57
+ throw error
58
+ } else {
59
+ console.error(
60
+ "Missing root element.\n\n" +
61
+ "If you see this error, it probably means you loaded Inertia.js on non-Inertia pages.\n" +
62
+ 'Consider moving <%= vite_javascript_tag "inertia.jsx" %> to the Inertia-specific layout instead.',
63
+ )
64
+ }
65
+ })
@@ -0,0 +1,65 @@
1
+ import { createInertiaApp, type ResolvedComponent } from '@inertiajs/react'
2
+ import { StrictMode } from 'react'
3
+ import { createRoot } from 'react-dom/client'
4
+
5
+ void createInertiaApp({
6
+ // Set default page title
7
+ // see https://inertia-rails.dev/guide/title-and-meta
8
+ //
9
+ // title: title => title ? `${title} - App` : 'App',
10
+
11
+ // Disable progress bar
12
+ //
13
+ // see https://inertia-rails.dev/guide/progress-indicators
14
+ // progress: false,
15
+
16
+ resolve: (name) => {
17
+ const pages = import.meta.glob<{default: ResolvedComponent}>('../pages/**/*.tsx', {
18
+ eager: true,
19
+ })
20
+ const page = pages[`../pages/${name}.tsx`]
21
+ if (!page) {
22
+ console.error(`Missing Inertia page component: '${name}.tsx'`)
23
+ }
24
+
25
+ // To use a default layout, import the Layout component
26
+ // and use the following line.
27
+ // see https://inertia-rails.dev/guide/pages#default-layouts
28
+ //
29
+ // page.default.layout ||= (page: ReactNode) => (<Layout>{page}</Layout>)
30
+
31
+ return page
32
+ },
33
+
34
+ setup({ el, App, props }) {
35
+ createRoot(el).render(
36
+ <StrictMode>
37
+ <App {...props} />
38
+ </StrictMode>
39
+ )
40
+ },
41
+
42
+ defaults: {
43
+ form: {
44
+ forceIndicesArrayFormatInFormData: false,
45
+ },
46
+ future: {
47
+ useDataInertiaHeadAttribute: true,
48
+ useDialogForErrorModal: true,
49
+ preserveEqualProps: true,
50
+ },
51
+ },
52
+ }).catch((error) => {
53
+ // This ensures this entrypoint is only loaded on Inertia pages
54
+ // by checking for the presence of the root element (#app by default).
55
+ // Feel free to remove this `catch` if you don't need it.
56
+ if (document.getElementById("app")) {
57
+ throw error
58
+ } else {
59
+ console.error(
60
+ "Missing root element.\n\n" +
61
+ "If you see this error, it probably means you loaded Inertia.js on non-Inertia pages.\n" +
62
+ 'Consider moving <%= vite_typescript_tag "inertia.tsx" %> to the Inertia-specific layout instead.',
63
+ )
64
+ }
65
+ })
@@ -22,6 +22,13 @@
22
22
  "noUnusedLocals": true,
23
23
  "noUnusedParameters": true,
24
24
  "noFallthroughCasesInSwitch": true,
25
+
26
+ /* Aliases */
27
+ "baseUrl": ".",
28
+ "paths": {
29
+ "@/*": ["<%= js_destination_path %>/*"],
30
+ "~/*": ["<%= js_destination_path %>/*"]
31
+ }
25
32
  },
26
33
  "include": ["<%= js_destination_path %>"]
27
34
  }
@@ -0,0 +1,8 @@
1
+ import type { SharedProps } from '@/types'
2
+
3
+ declare module '@inertiajs/core' {
4
+ export interface InertiaConfig {
5
+ sharedPageProps: SharedProps
6
+ errorValueType: string[]
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ export type Flash = {
2
+ notice?: string
3
+ alert?: string
4
+ }
5
+
6
+ export type SharedProps = {
7
+ flash: Flash
8
+ }
@@ -1,112 +1,146 @@
1
1
  <script>
2
+ import { VERSION } from 'svelte/compiler'
3
+
4
+ import railsSvg from '/assets/rails.svg'
2
5
  import svelteSvg from '/assets/svelte.svg'
3
6
  import inertiaSvg from '/assets/inertia.svg'
4
- import viteRubySvg from '/assets/vite_ruby.svg'
5
-
6
- let { name } = $props()
7
7
 
8
- let count = $state(0)
8
+ let { rails_version, rack_version, ruby_version, inertia_rails_version } = $props()
9
9
  </script>
10
10
 
11
11
  <svelte:head>
12
- <title>Inertia + Vite Ruby + Svelte Example</title>
12
+ <title>Rails + Inertia + Svelte</title>
13
13
  </svelte:head>
14
14
 
15
- <div class="inertia_example">
16
- <h1>Hello {name}!</h1>
17
-
18
- <div>
19
- <a href="https://inertia-rails.dev" target="_blank">
20
- <img class="logo" src={inertiaSvg} alt="Inertia logo" />
15
+ <div class="root">
16
+ <nav class="subNav">
17
+ <a href="https://rubyonrails.org" target="_blank">
18
+ <img class="logo rails" src={railsSvg} alt="Ruby on Rails Logo" />
21
19
  </a>
22
- <a href="https://vite-ruby.netlify.app" target="_blank">
23
- <img class="logo vite" src={viteRubySvg} alt="Vite Ruby logo" />
20
+ <a href="https://inertia-rails.dev" target="_blank">
21
+ <img class="logo inertia" src={inertiaSvg} alt="Inertia logo" />
24
22
  </a>
25
23
  <a href="https://svelte.dev" target="_blank">
26
- <img class="logo svelte" src={svelteSvg} alt="Svelte logo" />
24
+ <img class="logo svelte" src={svelteSvg} alt="Svelte logo"/>
27
25
  </a>
28
- </div>
26
+ </nav>
29
27
 
30
- <h2>Inertia + Vite Ruby + Svelte</h2>
28
+ <div class="footer">
29
+ <div class="card">
30
+ <p>
31
+ Edit <code><%= js_destination_path %>/pages/inertia_example/index.svelte</code> and save to test <abbr title="Hot Module Replacement">HMR</abbr>.
32
+ </p>
33
+ </div>
31
34
 
32
- <div class="card">
33
- <button onclick={() => count++}>
34
- count is {count}
35
- </button>
36
- <p>
37
- Edit <code>app/frontend/pages/InertiaExample.svelte</code> and save to test
38
- HMR
39
- </p>
35
+ <ul>
36
+ <li>
37
+ <ul>
38
+ <li><strong>Rails version:</strong> {rails_version}</li>
39
+ <li><strong>Rack version:</strong> {rack_version}</li>
40
+ </ul>
41
+ </li>
42
+ <li><strong>Ruby version:</strong> {ruby_version}</li>
43
+ <li>
44
+ <ul>
45
+ <li><strong>Inertia Rails version:</strong> {inertia_rails_version}</li>
46
+ <li><strong>Svelte version:</strong> {VERSION}</li>
47
+ </ul>
48
+ </li>
49
+ </ul>
40
50
  </div>
41
- <p class="read-the-docs">
42
- Click on the Inertia, Vite Ruby, and Svelte logos to learn more
43
- </p>
44
51
  </div>
45
52
 
46
53
  <style>
47
- .inertia_example {
48
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
49
- line-height: 1.5;
50
- font-weight: 400;
51
- color: #213547;
52
- background-color: #ffffff;
53
- max-width: 1280px;
54
- margin: 0 auto;
55
- padding: 2rem;
56
- text-align: center;
57
- }
58
-
59
- h1 {
60
- font-size: 3.2em;
61
- line-height: 1.1;
54
+ :global(body) {
55
+ margin: 0;
56
+ padding: 0;
62
57
  }
63
58
 
64
- h2 {
65
- font-size: 2.6em;
66
- line-height: 1.1;
59
+ .root {
60
+ box-sizing: border-box;
61
+ margin: 0;
62
+ padding: 0;
63
+ align-items: center;
64
+ background-color: #F0E7E9;
65
+ background-image: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEwMjQiIHZpZXdCb3g9IjAgMCAxNDQwIDEwMjQiIHdpZHRoPSIxNDQwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0xNDQwIDUxMC4wMDA2NDh2LTUxMC4wMDA2NDhoLTE0NDB2Mzg0LjAwMDY0OGM0MTcuMzExOTM5IDEzMS4xNDIxNzkgODkxIDE3MS41MTMgMTQ0MCAxMjZ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+);
66
+ background-position: center center;
67
+ background-repeat: no-repeat;
68
+ background-size: cover;
69
+ color: #261B23;
70
+ display: flex;
71
+ flex-direction: column;
72
+ font-family: Sans-Serif;
73
+ font-size: calc(0.9em + 0.5vw);
74
+ font-style: normal;
75
+ font-weight: 400;
76
+ justify-content: center;
77
+ line-height: 1.25;
78
+ min-height: 100vh;
79
+ text-align: center;
67
80
  }
68
81
 
69
- button {
70
- border-radius: 8px;
71
- border: 1px solid transparent;
72
- padding: 0.6em 1.2em;
73
- font-size: 1em;
74
- font-weight: 500;
75
- font-family: inherit;
76
- background-color: #f9f9f9;
77
- cursor: pointer;
78
- transition: border-color 0.25s;
79
- }
80
- button:hover {
81
- border-color: #646cff;
82
- }
83
- button:focus,
84
- button:focus-visible {
85
- outline: 4px auto -webkit-focus-ring-color;
82
+ @media (prefers-color-scheme: dark) {
83
+ .root {
84
+ background-color: #1a1a1a;
85
+ background-image: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEwMjQiIHZpZXdCb3g9IjAgMCAxNDQwIDEwMjQiIHdpZHRoPSIxNDQwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0xNDQwIDUxMC4wMDA2NDh2LTUxMC4wMDA2NDhoLTE0NDB2Mzg0LjAwMDY0OGM0MTcuMzExOTM5IDEzMS4xNDIxNzkgODkxIDE3MS41MTMgMTQ0MCAxMjZ6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);
86
+ color: #e0e0e0;
87
+ }
86
88
  }
87
89
 
88
90
  .logo {
89
91
  display: inline-block;
90
- height: 6em;
92
+ height: 9.8vw;
93
+ min-height: 130px;
91
94
  padding: 1.5em;
92
95
  will-change: filter;
93
96
  transition: filter 300ms;
97
+ filter: drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08));
94
98
  }
95
- .logo:hover {
99
+ .logo.inertia:hover {
96
100
  filter: drop-shadow(0 0 2em #646cffaa);
97
101
  }
98
- .logo.vite:hover {
99
- filter: drop-shadow(0 0 2em #e4023baa);
100
- }
101
102
  .logo.svelte:hover {
102
103
  filter: drop-shadow(0 0 2em #ff3e00aa);
103
104
  }
105
+ .logo.rails:hover {
106
+ filter: drop-shadow(0 0 2em rgb(211 0 1 / 0.6));
107
+ }
108
+
109
+ @media (prefers-color-scheme: dark) {
110
+ .logo {
111
+ filter: drop-shadow(0 20px 13px rgb(255 255 255 / 0.03)) drop-shadow(0 8px 5px rgb(255 255 255 / 0.08));
112
+ }
113
+ }
104
114
 
105
115
  .card {
106
116
  padding: 2em;
117
+ font-size: 0.7em;
118
+ color: #948e90;
119
+ }
120
+
121
+ .footer {
122
+ bottom: 0;
123
+ left: 0;
124
+ margin: 0 2rem 2rem 2rem;
125
+ position: absolute;
126
+ right: 0;
127
+ }
128
+
129
+ .footer ul {
130
+ list-style: none;
131
+ }
132
+
133
+ .footer ul li {
134
+ display: inline;
135
+ }
136
+
137
+ .footer ul ul li:after {
138
+ content: " | ";
139
+ font-weight: 300;
140
+ color: #948e90;
107
141
  }
108
142
 
109
- .read-the-docs {
110
- color: #888;
143
+ .footer ul ul li:last-child:after {
144
+ content: "";
111
145
  }
112
146
  </style>