react_router_rails_spa 0.1.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.
- checksums.yaml +7 -0
- data/.idea/.gitignore +8 -0
- data/.idea/.name +1 -0
- data/.idea/inspectionProfiles/Project_Default.xml +15 -0
- data/.idea/misc.xml +6 -0
- data/.idea/modules.xml +8 -0
- data/.idea/react_router_rails_spa.iml +139 -0
- data/.idea/vcs.xml +6 -0
- data/.rubocop.yml +8 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +12 -0
- data/lib/react_router_rails_spa/generators/install_generator.rb +50 -0
- data/lib/react_router_rails_spa/generators/templates/csrf.ts +44 -0
- data/lib/react_router_rails_spa/generators/templates/home.tsx +13 -0
- data/lib/react_router_rails_spa/generators/templates/proxy.ts +37 -0
- data/lib/react_router_rails_spa/generators/templates/react-router.config.ts +12 -0
- data/lib/react_router_rails_spa/generators/templates/react.rake +87 -0
- data/lib/react_router_rails_spa/generators/templates/vite.config.ts +51 -0
- data/lib/react_router_rails_spa/generators/templates/welcome/logo-dark.svg +23 -0
- data/lib/react_router_rails_spa/generators/templates/welcome/logo-light.svg +23 -0
- data/lib/react_router_rails_spa/generators/templates/welcome/rails-logo.svg +1 -0
- data/lib/react_router_rails_spa/generators/templates/welcome/welcome.tsx +65 -0
- data/lib/react_router_rails_spa/version.rb +5 -0
- data/lib/react_router_rails_spa.rb +7 -0
- data/sig/re_rou_ra.rbs +4 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 261fa2216af64ecdaff4a8d74850b7ccebd05f4c3d0fbd8af986fd0658faf873
|
4
|
+
data.tar.gz: 262c1899faf8d7b574d7c6523fb864139c640a1faf274c581f07139d68ae68bd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dec2a2a6262c9b3cbff0fa5f8f301d55cef2433b0f2b29350a610874240b735ca7d6b265f271df8dbd91e33cd922c7a41c038417ed22dd3f195a3dea77b671ac
|
7
|
+
data.tar.gz: 6419659c7dd675ea3e531efc15a6dfaef38597db12d420f84eb9ac61c0bb088121998c4e333bf2b2801d552a34010f0d802ca3aa494fe44cfc0534726e83791c
|
data/.idea/.gitignore
ADDED
data/.idea/.name
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
re_rou_ra
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<component name="InspectionProjectProfileManager">
|
2
|
+
<profile version="1.0">
|
3
|
+
<option name="myName" value="Project Default" />
|
4
|
+
<inspection_tool class="RbsMissingTypeSignature" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
5
|
+
<inspection_tool class="RubyClassMethodNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
6
|
+
<inspection_tool class="RubyClassModuleNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
7
|
+
<inspection_tool class="RubyClassVariableNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
8
|
+
<inspection_tool class="RubyConstantNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
9
|
+
<inspection_tool class="RubyGlobalVariableNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
10
|
+
<inspection_tool class="RubyInstanceMethodNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
11
|
+
<inspection_tool class="RubyInstanceVariableNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
12
|
+
<inspection_tool class="RubyLocalVariableNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
13
|
+
<inspection_tool class="RubyParameterNamingConvention" enabled="false" level="WARNING" enabled_by_default="false" />
|
14
|
+
</profile>
|
15
|
+
</component>
|
data/.idea/misc.xml
ADDED
data/.idea/modules.xml
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project version="4">
|
3
|
+
<component name="ProjectModuleManager">
|
4
|
+
<modules>
|
5
|
+
<module fileurl="file://$PROJECT_DIR$/.idea/react_router_rails_spa.iml" filepath="$PROJECT_DIR$/.idea/react_router_rails_spa.iml" />
|
6
|
+
</modules>
|
7
|
+
</component>
|
8
|
+
</project>
|
@@ -0,0 +1,139 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<module type="RUBY_MODULE" version="4">
|
3
|
+
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
4
|
+
<exclude-output />
|
5
|
+
<content url="file://$MODULE_DIR$">
|
6
|
+
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
|
7
|
+
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
8
|
+
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
9
|
+
</content>
|
10
|
+
<orderEntry type="jdk" jdkName="rbenv: 3.2.2" jdkType="RUBY_SDK" />
|
11
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
12
|
+
<orderEntry type="library" scope="PROVIDED" name="actioncable (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
13
|
+
<orderEntry type="library" scope="PROVIDED" name="actionmailbox (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
14
|
+
<orderEntry type="library" scope="PROVIDED" name="actionmailer (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
15
|
+
<orderEntry type="library" scope="PROVIDED" name="actionpack (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
16
|
+
<orderEntry type="library" scope="PROVIDED" name="actiontext (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
17
|
+
<orderEntry type="library" scope="PROVIDED" name="actionview (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
18
|
+
<orderEntry type="library" scope="PROVIDED" name="activejob (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
19
|
+
<orderEntry type="library" scope="PROVIDED" name="activemodel (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
20
|
+
<orderEntry type="library" scope="PROVIDED" name="activerecord (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
21
|
+
<orderEntry type="library" scope="PROVIDED" name="activestorage (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
22
|
+
<orderEntry type="library" scope="PROVIDED" name="activesupport (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
23
|
+
<orderEntry type="library" scope="PROVIDED" name="ast (v2.4.3, rbenv: 3.2.2) [gem]" level="application" />
|
24
|
+
<orderEntry type="library" scope="PROVIDED" name="base64 (v0.2.0, rbenv: 3.2.2) [gem]" level="application" />
|
25
|
+
<orderEntry type="library" scope="PROVIDED" name="benchmark (v0.4.0, rbenv: 3.2.2) [gem]" level="application" />
|
26
|
+
<orderEntry type="library" scope="PROVIDED" name="bigdecimal (v3.1.9, rbenv: 3.2.2) [gem]" level="application" />
|
27
|
+
<orderEntry type="library" scope="PROVIDED" name="builder (v3.3.0, rbenv: 3.2.2) [gem]" level="application" />
|
28
|
+
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.5.23, rbenv: 3.2.2) [gem]" level="application" />
|
29
|
+
<orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.3.5, rbenv: 3.2.2) [gem]" level="application" />
|
30
|
+
<orderEntry type="library" scope="PROVIDED" name="connection_pool (v2.5.0, rbenv: 3.2.2) [gem]" level="application" />
|
31
|
+
<orderEntry type="library" scope="PROVIDED" name="crass (v1.0.6, rbenv: 3.2.2) [gem]" level="application" />
|
32
|
+
<orderEntry type="library" scope="PROVIDED" name="date (v3.4.1, rbenv: 3.2.2) [gem]" level="application" />
|
33
|
+
<orderEntry type="library" scope="PROVIDED" name="drb (v2.2.1, rbenv: 3.2.2) [gem]" level="application" />
|
34
|
+
<orderEntry type="library" scope="PROVIDED" name="erubi (v1.13.1, rbenv: 3.2.2) [gem]" level="application" />
|
35
|
+
<orderEntry type="library" scope="PROVIDED" name="globalid (v1.2.1, rbenv: 3.2.2) [gem]" level="application" />
|
36
|
+
<orderEntry type="library" scope="PROVIDED" name="i18n (v1.14.7, rbenv: 3.2.2) [gem]" level="application" />
|
37
|
+
<orderEntry type="library" scope="PROVIDED" name="io-console (v0.8.0, rbenv: 3.2.2) [gem]" level="application" />
|
38
|
+
<orderEntry type="library" scope="PROVIDED" name="irb (v1.15.2, rbenv: 3.2.2) [gem]" level="application" />
|
39
|
+
<orderEntry type="library" scope="PROVIDED" name="json (v2.10.2, rbenv: 3.2.2) [gem]" level="application" />
|
40
|
+
<orderEntry type="library" scope="PROVIDED" name="language_server-protocol (v3.17.0.4, rbenv: 3.2.2) [gem]" level="application" />
|
41
|
+
<orderEntry type="library" scope="PROVIDED" name="lint_roller (v1.1.0, rbenv: 3.2.2) [gem]" level="application" />
|
42
|
+
<orderEntry type="library" scope="PROVIDED" name="logger (v1.7.0, rbenv: 3.2.2) [gem]" level="application" />
|
43
|
+
<orderEntry type="library" scope="PROVIDED" name="loofah (v2.24.0, rbenv: 3.2.2) [gem]" level="application" />
|
44
|
+
<orderEntry type="library" scope="PROVIDED" name="mail (v2.8.1, rbenv: 3.2.2) [gem]" level="application" />
|
45
|
+
<orderEntry type="library" scope="PROVIDED" name="marcel (v1.0.4, rbenv: 3.2.2) [gem]" level="application" />
|
46
|
+
<orderEntry type="library" scope="PROVIDED" name="mini_mime (v1.1.5, rbenv: 3.2.2) [gem]" level="application" />
|
47
|
+
<orderEntry type="library" scope="PROVIDED" name="minitest (v5.25.5, rbenv: 3.2.2) [gem]" level="application" />
|
48
|
+
<orderEntry type="library" scope="PROVIDED" name="net-imap (v0.5.6, rbenv: 3.2.2) [gem]" level="application" />
|
49
|
+
<orderEntry type="library" scope="PROVIDED" name="net-pop (v0.1.2, rbenv: 3.2.2) [gem]" level="application" />
|
50
|
+
<orderEntry type="library" scope="PROVIDED" name="net-protocol (v0.2.2, rbenv: 3.2.2) [gem]" level="application" />
|
51
|
+
<orderEntry type="library" scope="PROVIDED" name="net-smtp (v0.5.1, rbenv: 3.2.2) [gem]" level="application" />
|
52
|
+
<orderEntry type="library" scope="PROVIDED" name="nio4r (v2.7.4, rbenv: 3.2.2) [gem]" level="application" />
|
53
|
+
<orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.18.7, rbenv: 3.2.2) [gem]" level="application" />
|
54
|
+
<orderEntry type="library" scope="PROVIDED" name="parallel (v1.26.3, rbenv: 3.2.2) [gem]" level="application" />
|
55
|
+
<orderEntry type="library" scope="PROVIDED" name="parser (v3.3.7.4, rbenv: 3.2.2) [gem]" level="application" />
|
56
|
+
<orderEntry type="library" scope="PROVIDED" name="pp (v0.6.2, rbenv: 3.2.2) [gem]" level="application" />
|
57
|
+
<orderEntry type="library" scope="PROVIDED" name="prettyprint (v0.2.0, rbenv: 3.2.2) [gem]" level="application" />
|
58
|
+
<orderEntry type="library" scope="PROVIDED" name="prism (v1.4.0, rbenv: 3.2.2) [gem]" level="application" />
|
59
|
+
<orderEntry type="library" scope="PROVIDED" name="psych (v5.2.3, rbenv: 3.2.2) [gem]" level="application" />
|
60
|
+
<orderEntry type="library" scope="PROVIDED" name="racc (v1.8.1, rbenv: 3.2.2) [gem]" level="application" />
|
61
|
+
<orderEntry type="library" scope="PROVIDED" name="rack (v3.1.12, rbenv: 3.2.2) [gem]" level="application" />
|
62
|
+
<orderEntry type="library" scope="PROVIDED" name="rack-session (v2.1.0, rbenv: 3.2.2) [gem]" level="application" />
|
63
|
+
<orderEntry type="library" scope="PROVIDED" name="rack-test (v2.2.0, rbenv: 3.2.2) [gem]" level="application" />
|
64
|
+
<orderEntry type="library" scope="PROVIDED" name="rackup (v2.2.1, rbenv: 3.2.2) [gem]" level="application" />
|
65
|
+
<orderEntry type="library" scope="PROVIDED" name="rails (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
66
|
+
<orderEntry type="library" scope="PROVIDED" name="rails-dom-testing (v2.2.0, rbenv: 3.2.2) [gem]" level="application" />
|
67
|
+
<orderEntry type="library" scope="PROVIDED" name="rails-html-sanitizer (v1.6.2, rbenv: 3.2.2) [gem]" level="application" />
|
68
|
+
<orderEntry type="library" scope="PROVIDED" name="railties (v8.0.2, rbenv: 3.2.2) [gem]" level="application" />
|
69
|
+
<orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, rbenv: 3.2.2) [gem]" level="application" />
|
70
|
+
<orderEntry type="library" scope="PROVIDED" name="rake (v13.2.1, rbenv: 3.2.2) [gem]" level="application" />
|
71
|
+
<orderEntry type="library" scope="PROVIDED" name="rdoc (v6.13.1, rbenv: 3.2.2) [gem]" level="application" />
|
72
|
+
<orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.10.0, rbenv: 3.2.2) [gem]" level="application" />
|
73
|
+
<orderEntry type="library" scope="PROVIDED" name="reline (v0.6.1, rbenv: 3.2.2) [gem]" level="application" />
|
74
|
+
<orderEntry type="library" scope="PROVIDED" name="rubocop (v1.75.1, rbenv: 3.2.2) [gem]" level="application" />
|
75
|
+
<orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.43.0, rbenv: 3.2.2) [gem]" level="application" />
|
76
|
+
<orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.13.0, rbenv: 3.2.2) [gem]" level="application" />
|
77
|
+
<orderEntry type="library" scope="PROVIDED" name="securerandom (v0.4.1, rbenv: 3.2.2) [gem]" level="application" />
|
78
|
+
<orderEntry type="library" scope="PROVIDED" name="stringio (v3.1.6, rbenv: 3.2.2) [gem]" level="application" />
|
79
|
+
<orderEntry type="library" scope="PROVIDED" name="thor (v1.3.2, rbenv: 3.2.2) [gem]" level="application" />
|
80
|
+
<orderEntry type="library" scope="PROVIDED" name="timeout (v0.4.3, rbenv: 3.2.2) [gem]" level="application" />
|
81
|
+
<orderEntry type="library" scope="PROVIDED" name="tzinfo (v2.0.6, rbenv: 3.2.2) [gem]" level="application" />
|
82
|
+
<orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v3.1.4, rbenv: 3.2.2) [gem]" level="application" />
|
83
|
+
<orderEntry type="library" scope="PROVIDED" name="unicode-emoji (v4.0.4, rbenv: 3.2.2) [gem]" level="application" />
|
84
|
+
<orderEntry type="library" scope="PROVIDED" name="uri (v1.0.3, rbenv: 3.2.2) [gem]" level="application" />
|
85
|
+
<orderEntry type="library" scope="PROVIDED" name="useragent (v0.16.11, rbenv: 3.2.2) [gem]" level="application" />
|
86
|
+
<orderEntry type="library" scope="PROVIDED" name="websocket-driver (v0.7.7, rbenv: 3.2.2) [gem]" level="application" />
|
87
|
+
<orderEntry type="library" scope="PROVIDED" name="websocket-extensions (v0.1.5, rbenv: 3.2.2) [gem]" level="application" />
|
88
|
+
<orderEntry type="library" scope="PROVIDED" name="zeitwerk (v2.7.2, rbenv: 3.2.2) [gem]" level="application" />
|
89
|
+
</component>
|
90
|
+
<component name="RakeTasksCache-v2">
|
91
|
+
<option name="myRootTask">
|
92
|
+
<RakeTaskImpl id="rake">
|
93
|
+
<subtasks>
|
94
|
+
<RakeTaskImpl description="Build react_router_rails_spa-0.1.0.gem into the pkg directory" fullCommand="build" id="build" />
|
95
|
+
<RakeTaskImpl id="build">
|
96
|
+
<subtasks>
|
97
|
+
<RakeTaskImpl description="Generate SHA512 checksum of react_router_rails_spa-0.1.0.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
|
98
|
+
</subtasks>
|
99
|
+
</RakeTaskImpl>
|
100
|
+
<RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
|
101
|
+
<RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
|
102
|
+
<RakeTaskImpl description="Build and install react_router_rails_spa-0.1.0.gem into system gems" fullCommand="install" id="install" />
|
103
|
+
<RakeTaskImpl id="install">
|
104
|
+
<subtasks>
|
105
|
+
<RakeTaskImpl description="Build and install react_router_rails_spa-0.1.0.gem into system gems without network access" fullCommand="install:local" id="local" />
|
106
|
+
</subtasks>
|
107
|
+
</RakeTaskImpl>
|
108
|
+
<RakeTaskImpl description="Create tag v0.1.0 and build and push react_router_rails_spa-0.1.0.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
|
109
|
+
<RakeTaskImpl description="Run RuboCop" fullCommand="rubocop" id="rubocop" />
|
110
|
+
<RakeTaskImpl id="rubocop">
|
111
|
+
<subtasks>
|
112
|
+
<RakeTaskImpl description="Autocorrect RuboCop offenses (only when it's safe)" fullCommand="rubocop:autocorrect" id="autocorrect" />
|
113
|
+
<RakeTaskImpl description="Autocorrect RuboCop offenses (safe and unsafe)" fullCommand="rubocop:autocorrect_all" id="autocorrect_all" />
|
114
|
+
<RakeTaskImpl description="" fullCommand="rubocop:auto_correct" id="auto_correct" />
|
115
|
+
</subtasks>
|
116
|
+
</RakeTaskImpl>
|
117
|
+
<RakeTaskImpl description="Run the test suite" fullCommand="test" id="test" />
|
118
|
+
<RakeTaskImpl id="test">
|
119
|
+
<subtasks>
|
120
|
+
<RakeTaskImpl description="Print out the test command" fullCommand="test:cmd" id="cmd" />
|
121
|
+
<RakeTaskImpl description="Show which test files fail when run in isolation" fullCommand="test:isolated" id="isolated" />
|
122
|
+
<RakeTaskImpl description="Run the test suite and report the slowest 25 tests" fullCommand="test:slow" id="slow" />
|
123
|
+
<RakeTaskImpl description="" fullCommand="test:deps" id="deps" />
|
124
|
+
</subtasks>
|
125
|
+
</RakeTaskImpl>
|
126
|
+
<RakeTaskImpl description="" fullCommand="default" id="default" />
|
127
|
+
<RakeTaskImpl description="" fullCommand="release" id="release" />
|
128
|
+
<RakeTaskImpl id="release">
|
129
|
+
<subtasks>
|
130
|
+
<RakeTaskImpl description="" fullCommand="release:guard_clean" id="guard_clean" />
|
131
|
+
<RakeTaskImpl description="" fullCommand="release:rubygem_push" id="rubygem_push" />
|
132
|
+
<RakeTaskImpl description="" fullCommand="release:source_control_push" id="source_control_push" />
|
133
|
+
</subtasks>
|
134
|
+
</RakeTaskImpl>
|
135
|
+
</subtasks>
|
136
|
+
</RakeTaskImpl>
|
137
|
+
</option>
|
138
|
+
</component>
|
139
|
+
</module>
|
data/.idea/vcs.xml
ADDED
data/.rubocop.yml
ADDED
data/CHANGELOG.md
ADDED
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
2
|
+
|
3
|
+
## Our Pledge
|
4
|
+
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our
|
6
|
+
community a harassment-free experience for everyone, regardless of age, body
|
7
|
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
8
|
+
identity and expression, level of experience, education, socio-economic status,
|
9
|
+
nationality, personal appearance, race, caste, color, religion, or sexual
|
10
|
+
identity and orientation.
|
11
|
+
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
13
|
+
diverse, inclusive, and healthy community.
|
14
|
+
|
15
|
+
## Our Standards
|
16
|
+
|
17
|
+
Examples of behavior that contributes to a positive environment for our
|
18
|
+
community include:
|
19
|
+
|
20
|
+
* Demonstrating empathy and kindness toward other people
|
21
|
+
* Being respectful of differing opinions, viewpoints, and experiences
|
22
|
+
* Giving and gracefully accepting constructive feedback
|
23
|
+
* Accepting responsibility and apologizing to those affected by our mistakes,
|
24
|
+
and learning from the experience
|
25
|
+
* Focusing on what is best not just for us as individuals, but for the overall
|
26
|
+
community
|
27
|
+
|
28
|
+
Examples of unacceptable behavior include:
|
29
|
+
|
30
|
+
* The use of sexualized language or imagery, and sexual attention or advances of
|
31
|
+
any kind
|
32
|
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
33
|
+
* Public or private harassment
|
34
|
+
* Publishing others' private information, such as a physical or email address,
|
35
|
+
without their explicit permission
|
36
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
37
|
+
professional setting
|
38
|
+
|
39
|
+
## Enforcement Responsibilities
|
40
|
+
|
41
|
+
Community leaders are responsible for clarifying and enforcing our standards of
|
42
|
+
acceptable behavior and will take appropriate and fair corrective action in
|
43
|
+
response to any behavior that they deem inappropriate, threatening, offensive,
|
44
|
+
or harmful.
|
45
|
+
|
46
|
+
Community leaders have the right and responsibility to remove, edit, or reject
|
47
|
+
comments, commits, code, wiki edits, issues, and other contributions that are
|
48
|
+
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
49
|
+
decisions when appropriate.
|
50
|
+
|
51
|
+
## Scope
|
52
|
+
|
53
|
+
This Code of Conduct applies within all community spaces, and also applies when
|
54
|
+
an individual is officially representing the community in public spaces.
|
55
|
+
Examples of representing our community include using an official email address,
|
56
|
+
posting via an official social media account, or acting as an appointed
|
57
|
+
representative at an online or offline event.
|
58
|
+
|
59
|
+
## Enforcement
|
60
|
+
|
61
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
62
|
+
reported to the community leaders responsible for enforcement at
|
63
|
+
[INSERT CONTACT METHOD].
|
64
|
+
All complaints will be reviewed and investigated promptly and fairly.
|
65
|
+
|
66
|
+
All community leaders are obligated to respect the privacy and security of the
|
67
|
+
reporter of any incident.
|
68
|
+
|
69
|
+
## Enforcement Guidelines
|
70
|
+
|
71
|
+
Community leaders will follow these Community Impact Guidelines in determining
|
72
|
+
the consequences for any action they deem in violation of this Code of Conduct:
|
73
|
+
|
74
|
+
### 1. Correction
|
75
|
+
|
76
|
+
**Community Impact**: Use of inappropriate language or other behavior deemed
|
77
|
+
unprofessional or unwelcome in the community.
|
78
|
+
|
79
|
+
**Consequence**: A private, written warning from community leaders, providing
|
80
|
+
clarity around the nature of the violation and an explanation of why the
|
81
|
+
behavior was inappropriate. A public apology may be requested.
|
82
|
+
|
83
|
+
### 2. Warning
|
84
|
+
|
85
|
+
**Community Impact**: A violation through a single incident or series of
|
86
|
+
actions.
|
87
|
+
|
88
|
+
**Consequence**: A warning with consequences for continued behavior. No
|
89
|
+
interaction with the people involved, including unsolicited interaction with
|
90
|
+
those enforcing the Code of Conduct, for a specified period of time. This
|
91
|
+
includes avoiding interactions in community spaces as well as external channels
|
92
|
+
like social media. Violating these terms may lead to a temporary or permanent
|
93
|
+
ban.
|
94
|
+
|
95
|
+
### 3. Temporary Ban
|
96
|
+
|
97
|
+
**Community Impact**: A serious violation of community standards, including
|
98
|
+
sustained inappropriate behavior.
|
99
|
+
|
100
|
+
**Consequence**: A temporary ban from any sort of interaction or public
|
101
|
+
communication with the community for a specified period of time. No public or
|
102
|
+
private interaction with the people involved, including unsolicited interaction
|
103
|
+
with those enforcing the Code of Conduct, is allowed during this period.
|
104
|
+
Violating these terms may lead to a permanent ban.
|
105
|
+
|
106
|
+
### 4. Permanent Ban
|
107
|
+
|
108
|
+
**Community Impact**: Demonstrating a pattern of violation of community
|
109
|
+
standards, including sustained inappropriate behavior, harassment of an
|
110
|
+
individual, or aggression toward or disparagement of classes of individuals.
|
111
|
+
|
112
|
+
**Consequence**: A permanent ban from any sort of public interaction within the
|
113
|
+
community.
|
114
|
+
|
115
|
+
## Attribution
|
116
|
+
|
117
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
118
|
+
version 2.1, available at
|
119
|
+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
120
|
+
|
121
|
+
Community Impact Guidelines were inspired by
|
122
|
+
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
123
|
+
|
124
|
+
For answers to common questions about this code of conduct, see the FAQ at
|
125
|
+
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
126
|
+
[https://www.contributor-covenant.org/translations][translations].
|
127
|
+
|
128
|
+
[homepage]: https://www.contributor-covenant.org
|
129
|
+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
130
|
+
[Mozilla CoC]: https://github.com/mozilla/diversity
|
131
|
+
[FAQ]: https://www.contributor-covenant.org/faq
|
132
|
+
[translations]: https://www.contributor-covenant.org/translations
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2025 Naofumi Kagami
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# ReactRouterRails
|
2
|
+
|
3
|
+
TODO: Delete this and the text below, and describe your gem
|
4
|
+
|
5
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/react_router_rails_spa`. To experiment with that code, run `bin/console` for an interactive prompt.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.
|
10
|
+
|
11
|
+
Install the gem and add to the application's Gemfile by executing:
|
12
|
+
|
13
|
+
```bash
|
14
|
+
bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
|
15
|
+
```
|
16
|
+
|
17
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
18
|
+
|
19
|
+
```bash
|
20
|
+
gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
|
21
|
+
```
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/react_router_rails_spa. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/re_rou_ra/blob/main/CODE_OF_CONDUCT.md).
|
36
|
+
|
37
|
+
## License
|
38
|
+
|
39
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
40
|
+
|
41
|
+
## Code of Conduct
|
42
|
+
|
43
|
+
Everyone interacting in the ReactRouterRails project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/react_router_rails_spa/blob/main/CODE_OF_CONDUCT.md).
|
data/Rakefile
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require "rails/generators"
|
2
|
+
|
3
|
+
module ReactRouterRailsSpa
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path("templates", __dir__)
|
7
|
+
|
8
|
+
def create_react_router_app
|
9
|
+
say "Setting up React Router v7 SBA mode in Rails..."
|
10
|
+
inside Rails.root do
|
11
|
+
run "npx create-react-router@latest frontend --yes --no-git-init"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup_rails_routes
|
16
|
+
route 'get "react/*path", to: "react#show"'
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_react_controller
|
20
|
+
create_file "app/controllers/react_controller.rb", <<-RUBY
|
21
|
+
class ReactController < ApplicationController
|
22
|
+
def show
|
23
|
+
render file: Rails.public_path.join("react/react-router-rails-spa-index.html"), layout: false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
RUBY
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_public_folders
|
30
|
+
empty_directory Rails.root.join("public/react")
|
31
|
+
end
|
32
|
+
|
33
|
+
def copy_rake_task
|
34
|
+
template "react.rake", "lib/tasks/react.rake"
|
35
|
+
end
|
36
|
+
|
37
|
+
def copy_react_router_configs
|
38
|
+
template "react-router.config.ts", "frontend/react-router.config.ts"
|
39
|
+
template "vite.config.ts", "frontend/vite.config.ts"
|
40
|
+
end
|
41
|
+
|
42
|
+
def copy_react_app_files
|
43
|
+
template "home.tsx", "frontend/app/routes/home.tsx"
|
44
|
+
directory "welcome", "frontend/app/welcome"
|
45
|
+
template "csrf.ts", "frontend/app/utilities/csrf.ts"
|
46
|
+
template "proxy.ts", "frontend/app/utilities/proxy.ts"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
/*
|
2
|
+
* # Utilities for CSRF protection.
|
3
|
+
*
|
4
|
+
* Cookie-based authentication is very convenient, well-studied and smooth to implement.
|
5
|
+
* However, care must be taken to prevent CSRF attacks.
|
6
|
+
*
|
7
|
+
* ## CSRF protection with the "Cookie to Header" approach
|
8
|
+
*
|
9
|
+
* The current application sends the CSRF token to the browser as a non-session cookie.
|
10
|
+
* This token is then sent back to the server on a later request to prove authenticity.
|
11
|
+
*
|
12
|
+
* This approach is described in the "Mitigating CSRF attacks" section of [this post](https://pragmaticstudio.com/tutorials/rails-session-cookies-for-api-authentication),
|
13
|
+
* and also on [Wikipedia: Cookie to Header Token](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Cookie-to-header_token).
|
14
|
+
*
|
15
|
+
* How it works.
|
16
|
+
*
|
17
|
+
* 1. The Ruby on Rails server sends the session-specific
|
18
|
+
* CSRF token in a Cookie named "X-CSRF-Token"
|
19
|
+
* app/controllers/concerns/csrf_cookie_enabled.rb
|
20
|
+
* 2. Retrieve this token with the `getCSRFToken()` function
|
21
|
+
* and use its value to send in your fetch request headers.
|
22
|
+
* 3. On receiving the request, Rails will validate that the
|
23
|
+
* 'X-CSRF-Token' header value matches what was sent via the cookie.
|
24
|
+
* 4. Note that you only need to do this for non-GET requests assuming that
|
25
|
+
* you are following best practices and not mutating data in GET requests.
|
26
|
+
*
|
27
|
+
* Your code should look like this.
|
28
|
+
* const res = await fetch(`${baseApiPath()}/posts`, {
|
29
|
+
* method: 'POST',
|
30
|
+
* headers: {
|
31
|
+
* "Accept": "application/json",
|
32
|
+
* "Content-Type": "application/json",
|
33
|
+
* 'X-CSRF-Token': getCSRFToken(),
|
34
|
+
* },
|
35
|
+
* body: JSON.stringify({content})
|
36
|
+
* }
|
37
|
+
* )
|
38
|
+
*
|
39
|
+
* */
|
40
|
+
|
41
|
+
export function getCSRFToken() {
|
42
|
+
const token = document.cookie.match(/X-CSRF-Token=([^;]+)/)?.[1] || ''
|
43
|
+
return token
|
44
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import type { Route } from "./+types/home";
|
2
|
+
import { Welcome } from "../welcome/welcome";
|
3
|
+
|
4
|
+
export function meta({}: Route.MetaArgs) {
|
5
|
+
return [
|
6
|
+
{ title: "New React Router on Rails App" },
|
7
|
+
{ name: "description", content: "Welcome to React Router on Rails!" },
|
8
|
+
];
|
9
|
+
}
|
10
|
+
|
11
|
+
export default function Home() {
|
12
|
+
return <Welcome />;
|
13
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
/*
|
2
|
+
* In this example application, the Ruby on Rails APIs endpoints are like
|
3
|
+
* `GET /posts` or `GET /users` and do not have any prefixes like `/api*`.
|
4
|
+
*
|
5
|
+
* However, during development, the port for the Vite development server (typically 5173) is different from
|
6
|
+
* the Rails development server (typically 3000).
|
7
|
+
* This means that the Vite server needs to distinguish
|
8
|
+
* between the requests it should send to the Rails server on port 3000 (JSON API requests) and the
|
9
|
+
* ones that it should handle itself on port 5173 (e.g., the Vite assets).
|
10
|
+
*
|
11
|
+
* Therefore, when running on the Vite development server, we prefix
|
12
|
+
* requests intended for the Rails API server with "/api" to tell Vite to send them
|
13
|
+
* to port 3000.
|
14
|
+
* See the `proxy:` section in `frontend-react-router/vite.config.ts` for
|
15
|
+
* the Vite side of this configuration.
|
16
|
+
*
|
17
|
+
* Using this function, you would write a request to the Rails API as follows.
|
18
|
+
*
|
19
|
+
* fetch(`${baseApiPath()}/posts`, {
|
20
|
+
* headers: { "Accept": "application/json" }
|
21
|
+
* }).then(...)....
|
22
|
+
*
|
23
|
+
* Note that if your API server's endpoints are like `/api/posts`,
|
24
|
+
* then you can write like the following, without the `baseApiPath()` function.
|
25
|
+
*
|
26
|
+
* fetch(`/api/posts`, {
|
27
|
+
* headers: { "Accept": "application/json" }
|
28
|
+
* }).then(...)....
|
29
|
+
*
|
30
|
+
* * */
|
31
|
+
export function baseApiPath() {
|
32
|
+
if (import.meta.env.MODE === 'development') {
|
33
|
+
return '/api'
|
34
|
+
} else {
|
35
|
+
return ''
|
36
|
+
}
|
37
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import type { Config } from "@react-router/dev/config";
|
2
|
+
|
3
|
+
export default {
|
4
|
+
// Config options...
|
5
|
+
// For our React Router app, we will turn off Server-side render
|
6
|
+
// use SPA mode!!
|
7
|
+
ssr: false,
|
8
|
+
// In the above, we have decided to serve the React Router app from "/react-router/".
|
9
|
+
// The basename options tell React Router to manage this when generating
|
10
|
+
// Link tags, for example.
|
11
|
+
basename: "/react-router/"
|
12
|
+
} satisfies Config;
|
@@ -0,0 +1,87 @@
|
|
1
|
+
namespace :react do
|
2
|
+
desc "Build the React application"
|
3
|
+
task :build do
|
4
|
+
puts "Building React Router v7 app..."
|
5
|
+
system("cd frontend && npm install && npm run build")
|
6
|
+
|
7
|
+
puts "Moving build files to public/react-router..."
|
8
|
+
system("rm -rf public/react-router/*")
|
9
|
+
system("mv frontend/dist/* public/react-router/")
|
10
|
+
system("mv public/react-router/index.html public/react-router/react-router-index.html")
|
11
|
+
|
12
|
+
puts "✅ React app successfully built and deployed!"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
namespace :react_router do
|
17
|
+
# For convenience, npm packages do not have to be explicitly installed.
|
18
|
+
# Installed will be automatically initiated by other tasks.
|
19
|
+
desc "Install npm packages for the React Router app"
|
20
|
+
task :npm_install do
|
21
|
+
puts "Installing npm packages ..."
|
22
|
+
Dir.chdir("#{Dir.pwd}/frontend") do
|
23
|
+
system("npm", "install")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Run bin/rails react_router:dev to start the dev server.
|
28
|
+
#
|
29
|
+
# If you are using the Foreman gem, you might want to run
|
30
|
+
# this task in the Procfile.
|
31
|
+
#
|
32
|
+
# bin/rails react_router:dev
|
33
|
+
desc "Start React Router Dev Server"
|
34
|
+
task dev: [ :npm_install ] do
|
35
|
+
puts "Starting React Router v7 app dev server..."
|
36
|
+
Dir.chdir("#{Dir.pwd}/frontend") do
|
37
|
+
system("npm", "run", "dev")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# bin/rails react_router:typecheck
|
42
|
+
desc "Check Typescript for the React Router App"
|
43
|
+
task typecheck: [ :npm_install ] do
|
44
|
+
puts "Check Typescript for React Router v7 app..."
|
45
|
+
Dir.chdir("#{Dir.pwd}/frontend") do
|
46
|
+
system("npm", "run", "typecheck")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Run bin/rails react_router:build to build the production app.
|
51
|
+
# The location of the build is defined in the
|
52
|
+
# frontend/react-router.config.ts file, and should
|
53
|
+
# point to a location within the public folder.
|
54
|
+
# Running bin/rails assets:precompile will also run this task.
|
55
|
+
#
|
56
|
+
# bin/rails react_router:build
|
57
|
+
desc "Build React Router App"
|
58
|
+
task build: [ :npm_install ] do
|
59
|
+
Dir.chdir("#{Dir.pwd}/frontend") do
|
60
|
+
puts "Building React Router v7 app..."
|
61
|
+
system("npm", "run", "build")
|
62
|
+
|
63
|
+
puts "Moving build files to public/react..."
|
64
|
+
system("rm -rf public/react/*")
|
65
|
+
system("mv frontend/build/client public/react")
|
66
|
+
system("mv public/react/index.html public/react/react-router-rails-spa-index.html")
|
67
|
+
|
68
|
+
puts "✅ React app successfully built and deployed!"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Run bin/rails react_router:clobber to remove the build files.
|
73
|
+
# Running bin/rails assets:clobber will also run this task.
|
74
|
+
task :clobber do
|
75
|
+
puts "Clobbering React Router v7 app build files..."
|
76
|
+
FileUtils.rm_rf("#{Dir.pwd}/public/react-router")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# The following adds the above tasks to the regular
|
81
|
+
# assets:precompile and assets:clobber tasks.
|
82
|
+
#
|
83
|
+
# This means that any normal Rails deployment script which
|
84
|
+
# contains rake assets:precompile will also build the
|
85
|
+
# React Router app automatically.
|
86
|
+
Rake::Task["assets:precompile"].enhance([ "react_router:build" ])
|
87
|
+
Rake::Task["assets:clobber"].enhance([ "react_router:clobber" ])
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import { reactRouter } from "@react-router/dev/vite";
|
2
|
+
import tailwindcss from "@tailwindcss/vite";
|
3
|
+
import { defineConfig } from "vite";
|
4
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
5
|
+
|
6
|
+
export default defineConfig({
|
7
|
+
plugins: [tailwindcss(), reactRouter(), tsconfigPaths()],
|
8
|
+
build: {
|
9
|
+
assetsDir: "assets",
|
10
|
+
// Set to true if you want sourcemaps
|
11
|
+
sourcemap: true,
|
12
|
+
},
|
13
|
+
// Like in react-router.config.ts, this tells Vite that
|
14
|
+
// the app is served from the "/react-router/" sub-path.
|
15
|
+
// Change this if you want to use a different sub-path name.
|
16
|
+
base: "/react-router/",
|
17
|
+
|
18
|
+
// These are settings for the dev server.
|
19
|
+
server: {
|
20
|
+
// In production, the API server (Rails) and the assets
|
21
|
+
// will be served from the same port number (typically 80).
|
22
|
+
//
|
23
|
+
// However, in development, assets will be served from the
|
24
|
+
// Vite dev server on port 5173, and the API server will be on
|
25
|
+
// port 3000 (Rails default).
|
26
|
+
// The use of different ports can complicate CORS setting and cookie handling.
|
27
|
+
//
|
28
|
+
// To prevent this problem, Vite provides a proxy mode that can receive API requests
|
29
|
+
// on port (5173) and forward this to the Rails server (port 3000).
|
30
|
+
// The browser will think that all communication happens on port 5173 so CORS
|
31
|
+
// is no longer necessary.
|
32
|
+
proxy: {
|
33
|
+
// Any requests starting with "/api" will be forwarded according to
|
34
|
+
// the following rules.
|
35
|
+
"/api": {
|
36
|
+
// The requests will be forward to the Rails server on
|
37
|
+
// "http://localhost:3000"
|
38
|
+
target: "http://localhost:3000",
|
39
|
+
// In our case, our Rails server does not serve APIs on "/api".
|
40
|
+
// Instead, a request for Posts is handled by "http://localhost:3000/posts".
|
41
|
+
// Therefore, we strip the "/api" prefix from the request path before
|
42
|
+
// sending it to Rails.
|
43
|
+
//
|
44
|
+
// Note that if the Rails server has a dedicated namespace for APIs,
|
45
|
+
// then you can just use that instead of "/api", and the following
|
46
|
+
// rewrite rule will not be necessary.
|
47
|
+
rewrite: (path) => path.replace(/^\/api/, ""),
|
48
|
+
},
|
49
|
+
},
|
50
|
+
},
|
51
|
+
});
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<svg width="1080" height="174" viewBox="0 0 1080 174" fill="none" xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<path d="M231.527 86.9999C231.527 94.9642 228.297 102.173 223.067 107.387C217.837 112.606 210.614 115.835 202.634 115.835C194.654 115.835 187.43 119.059 182.206 124.278C176.977 129.498 173.741 136.707 173.741 144.671C173.741 152.635 170.51 159.844 165.281 165.058C160.051 170.277 152.828 173.507 144.847 173.507C136.867 173.507 129.644 170.277 124.42 165.058C119.19 159.844 115.954 152.635 115.954 144.671C115.954 136.707 119.19 129.498 124.42 124.278C129.644 119.059 136.867 115.835 144.847 115.835C152.828 115.835 160.051 112.606 165.281 107.387C170.51 102.173 173.741 94.9642 173.741 86.9999C173.741 71.0711 160.808 58.1643 144.847 58.1643C136.867 58.1643 129.644 54.9347 124.42 49.7155C119.19 44.502 115.954 37.2931 115.954 29.3287C115.954 21.3643 119.19 14.1555 124.42 8.93622C129.644 3.71698 136.867 0.493164 144.847 0.493164C160.808 0.493164 173.741 13.4 173.741 29.3287C173.741 37.2931 176.977 44.502 182.206 49.7155C187.43 54.9347 194.654 58.1643 202.634 58.1643C218.594 58.1643 231.527 71.0711 231.527 86.9999Z" fill="#F44250"/>
|
3
|
+
<path d="M115.954 86.9996C115.954 71.0742 103.018 58.1641 87.061 58.1641C71.1037 58.1641 58.1677 71.0742 58.1677 86.9996C58.1677 102.925 71.1037 115.835 87.061 115.835C103.018 115.835 115.954 102.925 115.954 86.9996Z" fill="white"/>
|
4
|
+
<path d="M58.1676 144.671C58.1676 128.745 45.2316 115.835 29.2743 115.835C13.317 115.835 0.381104 128.745 0.381104 144.671C0.381104 160.596 13.317 173.506 29.2743 173.506C45.2316 173.506 58.1676 160.596 58.1676 144.671Z" fill="white"/>
|
5
|
+
<path d="M289.314 144.671C289.314 128.745 276.378 115.835 260.42 115.835C244.463 115.835 231.527 128.745 231.527 144.671C231.527 160.596 244.463 173.506 260.42 173.506C276.378 173.506 289.314 160.596 289.314 144.671Z" fill="white"/>
|
6
|
+
<g clip-path="url(#clip0_202_2131)">
|
7
|
+
<path d="M562.482 173.247C524.388 173.247 498.363 147.49 498.363 110.468C498.363 73.4455 524.388 47.6885 562.482 47.6885C600.576 47.6885 626.869 73.7135 626.869 110.468C626.869 147.222 600.576 173.247 562.482 173.247ZM562.482 144.007C579.385 144.007 587.703 130.319 587.703 110.468C587.703 90.6168 579.385 76.9289 562.482 76.9289C545.579 76.9289 537.529 90.6168 537.529 110.468C537.529 130.319 545.311 144.007 562.482 144.007Z" fill="white"/>
|
8
|
+
<path d="M833.64 141.116C824.217 141.116 819.237 136.684 819.237 126.156V74.8983H851.928V47.7792H819.237V1.15527H791.75L786.1 26.1978C783.343 36.4805 780.82 42.822 773.897 46.0821C773.105 46.4506 771.129 46.9976 769.409 47.3884C768.014 47.701 766.596 47.8573 765.167 47.8573H752.338V47.9243H734.832C723.578 47.9243 714.445 57.0459 714.445 68.3111V111.552C714.445 130.599 707.199 142.668 692.719 142.668C678.238 142.668 672.868 133.279 672.868 116.375V47.9243H634.249V125.765C634.249 151.254 644.442 173.248 676.63 173.248C691.915 173.248 703.895 167.231 711.096 157.182C712.145 155.72 714.445 156.49 714.445 158.276V170.022H753.332V83.8412C753.332 78.8953 757.34 74.8871 762.286 74.8871H779.882V136.952C779.882 164.663 797.89 173.248 817.842 173.248C833.908 173.248 844.436 169.374 853.58 162.441V136.126C846.1 139.453 839.725 141.116 833.629 141.116H833.64Z" fill="white"/>
|
9
|
+
<path d="M981.561 130.865C975.387 157.962 954.197 173.258 923.07 173.258C885.243 173.258 858.415 150.18 858.415 112.354C858.415 74.5281 885.779 47.6992 922.266 47.6992C961.699 47.6992 982.365 74.796 982.365 107.263V113.884H896.509C894.555 135.711 909.382 144.017 924.409 144.017C937.829 144.017 946.136 138.915 950.434 127.918L981.561 130.865ZM945.075 94.9372C944.271 83.1361 936.757 75.8567 921.998 75.8567C906.434 75.8567 899.188 82.321 897.045 94.9372H945.064H945.075Z" fill="white"/>
|
10
|
+
<path d="M1076.24 85.7486C1070.06 82.2652 1064.17 80.9142 1055.85 80.9142C1039.75 80.9142 1029.02 90.0358 1029.02 110.691V170.02H990.393V47.9225H1029.02V64.3235C1029.02 65.4623 1030.54 65.8195 1031.05 64.8035C1036.68 53.5718 1047.91 44.707 1062.03 44.707C1069.27 44.707 1075.45 46.8507 1078.66 49.5414L1076.25 85.7597L1076.24 85.7486Z" fill="white"/>
|
11
|
+
<path d="M547.32 31.5345V23.9983H522.457V31.5345H515.378V2.23828H542.14C553.562 2.23828 554.365 2.95282 554.365 13.1239C554.365 17.4111 553.472 18.5611 551.329 19.6553L549.408 20.6378L551.317 21.6426C553.595 22.8372 554.365 23.2391 554.365 30.0273V31.5345H547.332H547.32ZM522.457 18.3601H547.32V7.88763H522.457V18.349V18.3601Z" fill="white"/>
|
12
|
+
<path d="M578.493 2.23828H610.826V7.90996H580.067V14.5083H610.011V19.2868H580.067V25.8963H610.837V31.501L578.504 31.5345C575.344 31.5345 572.787 28.9778 572.787 25.8293V7.95462C572.787 4.80617 575.344 2.24945 578.493 2.24945V2.23828Z" fill="white"/>
|
13
|
+
<path d="M655.562 31.5345L653.151 26.3429H633.746L631.335 31.5345H624.58L637.006 4.75034C637.71 3.22078 639.262 2.23828 640.936 2.23828H645.927C647.613 2.23828 649.154 3.22078 649.857 4.75034L662.283 31.5345H655.529H655.562ZM643.46 8.06627C642.712 8.06627 642.053 8.49053 641.729 9.17158L635.968 21.5756H650.94L645.19 9.17158C644.878 8.49053 644.208 8.06627 643.46 8.06627Z" fill="white"/>
|
14
|
+
<path d="M694.862 32.4153C676.05 32.4153 675.313 32.4153 675.313 16.8852C675.313 1.35505 676.05 1.36621 694.862 1.36621C711.721 1.36621 713.764 2.06959 714.244 10.5325H707.333V7.01556H682.168V26.766H707.333V23.2714H714.244C713.775 31.7119 711.721 32.4153 694.862 32.4153Z" fill="white"/>
|
15
|
+
<path d="M745.282 31.5345V7.02795H729.16V2.23828H768.147V7.02795H752.025V31.5345H745.282Z" fill="white"/>
|
16
|
+
<path d="M454.419 169.819C450.935 165.264 448.792 154.814 447.452 137.397C446.112 118.104 437.806 113.817 422.532 113.817H392.254V169.83H347.494V0.986328H432.715C476.391 0.986328 498.106 21.6187 498.106 54.5882C498.106 79.2399 482.833 95.3171 462.201 98.0078C479.618 101.491 489.8 111.405 491.675 130.966C494.087 156.154 494.891 163.656 500.518 169.819H454.419ZM424.676 78.704C443.969 78.704 453.615 73.8808 453.615 58.3395C453.615 44.6739 443.969 37.4392 424.676 37.4392H392.254V78.7152H424.676V78.704Z" fill="white"/>
|
17
|
+
</g>
|
18
|
+
<defs>
|
19
|
+
<clipPath id="clip0_202_2131">
|
20
|
+
<rect width="731.156" height="172.261" fill="white" transform="translate(347.494 0.986328)"/>
|
21
|
+
</clipPath>
|
22
|
+
</defs>
|
23
|
+
</svg>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<svg width="1080" height="174" viewBox="0 0 1080 174" fill="none" xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<path d="M231.527 86.9999C231.527 94.9642 228.297 102.173 223.067 107.387C217.837 112.606 210.614 115.835 202.634 115.835C194.654 115.835 187.43 119.059 182.206 124.278C176.977 129.498 173.741 136.707 173.741 144.671C173.741 152.635 170.51 159.844 165.281 165.058C160.051 170.277 152.828 173.507 144.847 173.507C136.867 173.507 129.644 170.277 124.42 165.058C119.19 159.844 115.954 152.635 115.954 144.671C115.954 136.707 119.19 129.498 124.42 124.278C129.644 119.059 136.867 115.835 144.847 115.835C152.828 115.835 160.051 112.606 165.281 107.387C170.51 102.173 173.741 94.9642 173.741 86.9999C173.741 71.0711 160.808 58.1643 144.847 58.1643C136.867 58.1643 129.644 54.9347 124.42 49.7155C119.19 44.502 115.954 37.2931 115.954 29.3287C115.954 21.3643 119.19 14.1555 124.42 8.93622C129.644 3.71698 136.867 0.493164 144.847 0.493164C160.808 0.493164 173.741 13.4 173.741 29.3287C173.741 37.2931 176.977 44.502 182.206 49.7155C187.43 54.9347 194.654 58.1643 202.634 58.1643C218.594 58.1643 231.527 71.0711 231.527 86.9999Z" fill="#F44250"/>
|
3
|
+
<path d="M115.954 86.9996C115.954 71.0742 103.018 58.1641 87.0608 58.1641C71.1035 58.1641 58.1676 71.0742 58.1676 86.9996C58.1676 102.925 71.1035 115.835 87.0608 115.835C103.018 115.835 115.954 102.925 115.954 86.9996Z" fill="#121212"/>
|
4
|
+
<path d="M58.1676 144.671C58.1676 128.745 45.2316 115.835 29.2743 115.835C13.317 115.835 0.381104 128.745 0.381104 144.671C0.381104 160.596 13.317 173.506 29.2743 173.506C45.2316 173.506 58.1676 160.596 58.1676 144.671Z" fill="#121212"/>
|
5
|
+
<path d="M289.313 144.671C289.313 128.745 276.378 115.835 260.42 115.835C244.463 115.835 231.527 128.745 231.527 144.671C231.527 160.596 244.463 173.506 260.42 173.506C276.378 173.506 289.313 160.596 289.313 144.671Z" fill="#121212"/>
|
6
|
+
<g clip-path="url(#clip0_171_1761)">
|
7
|
+
<path d="M562.482 173.247C524.388 173.247 498.363 147.49 498.363 110.468C498.363 73.4455 524.388 47.6885 562.482 47.6885C600.576 47.6885 626.869 73.7135 626.869 110.468C626.869 147.222 600.576 173.247 562.482 173.247ZM562.482 144.007C579.386 144.007 587.703 130.319 587.703 110.468C587.703 90.6168 579.386 76.9289 562.482 76.9289C545.579 76.9289 537.529 90.6168 537.529 110.468C537.529 130.319 545.311 144.007 562.482 144.007Z" fill="#121212"/>
|
8
|
+
<path d="M833.64 141.116C824.217 141.116 819.237 136.684 819.237 126.156V74.8983H851.928V47.7792H819.237V1.15527H791.75L786.1 26.1978C783.343 36.4805 780.82 42.822 773.897 46.0821C773.105 46.4506 771.129 46.9976 769.409 47.3884C768.014 47.701 766.596 47.8573 765.167 47.8573H752.338V47.9243H734.832C723.578 47.9243 714.445 57.0459 714.445 68.3111V111.552C714.445 130.599 707.199 142.668 692.719 142.668C678.238 142.668 672.868 133.279 672.868 116.375V47.9243H634.249V125.765C634.249 151.254 644.442 173.248 676.63 173.248C691.915 173.248 703.895 167.231 711.096 157.182C712.145 155.72 714.445 156.49 714.445 158.276V170.022H753.332V83.8412C753.332 78.8953 757.34 74.8871 762.286 74.8871H779.882V136.952C779.882 164.663 797.89 173.248 817.842 173.248C833.908 173.248 844.436 169.374 853.58 162.441V136.126C846.1 139.453 839.725 141.116 833.629 141.116H833.64Z" fill="#121212"/>
|
9
|
+
<path d="M981.561 130.865C975.387 157.962 954.197 173.258 923.07 173.258C885.243 173.258 858.415 150.18 858.415 112.354C858.415 74.5281 885.779 47.6992 922.266 47.6992C961.699 47.6992 982.365 74.796 982.365 107.263V113.884H896.509C894.555 135.711 909.382 144.017 924.409 144.017C937.829 144.017 946.136 138.915 950.434 127.918L981.561 130.865ZM945.075 94.9372C944.271 83.1361 936.757 75.8567 921.998 75.8567C906.434 75.8567 899.188 82.321 897.045 94.9372H945.064H945.075Z" fill="#121212"/>
|
10
|
+
<path d="M1076.24 85.7486C1070.06 82.2652 1064.17 80.9142 1055.85 80.9142C1039.75 80.9142 1029.02 90.0358 1029.02 110.691V170.02H990.393V47.9225H1029.02V64.3235C1029.02 65.4623 1030.54 65.8195 1031.05 64.8035C1036.68 53.5718 1047.91 44.707 1062.03 44.707C1069.27 44.707 1075.45 46.8507 1078.66 49.5414L1076.25 85.7597L1076.24 85.7486Z" fill="#121212"/>
|
11
|
+
<path d="M547.321 31.5345V23.9983H522.457V31.5345H515.378V2.23828H542.14C553.562 2.23828 554.366 2.95282 554.366 13.1239C554.366 17.4111 553.472 18.5611 551.329 19.6553L549.408 20.6378L551.318 21.6426C553.595 22.8372 554.366 23.2391 554.366 30.0273V31.5345H547.332H547.321ZM522.457 18.3601H547.321V7.88763H522.457V18.349V18.3601Z" fill="#121212"/>
|
12
|
+
<path d="M578.493 2.23828H610.826V7.90996H580.067V14.5083H610.011V19.2868H580.067V25.8963H610.837V31.501L578.504 31.5345C575.344 31.5345 572.787 28.9778 572.787 25.8293V7.95462C572.787 4.80617 575.344 2.24945 578.493 2.24945V2.23828Z" fill="#121212"/>
|
13
|
+
<path d="M655.562 31.5345L653.151 26.3429H633.747L631.335 31.5345H624.58L637.007 4.75034C637.71 3.22078 639.262 2.23828 640.937 2.23828H645.927C647.613 2.23828 649.154 3.22078 649.857 4.75034L662.284 31.5345H655.529H655.562ZM643.46 8.06627C642.712 8.06627 642.053 8.49053 641.729 9.17158L635.968 21.5756H650.94L645.19 9.17158C644.878 8.49053 644.208 8.06627 643.46 8.06627Z" fill="#121212"/>
|
14
|
+
<path d="M694.862 32.4153C676.05 32.4153 675.313 32.4153 675.313 16.8852C675.313 1.35505 676.05 1.36621 694.862 1.36621C711.721 1.36621 713.764 2.06959 714.244 10.5325H707.333V7.01556H682.168V26.766H707.333V23.2714H714.244C713.775 31.7119 711.721 32.4153 694.862 32.4153Z" fill="#121212"/>
|
15
|
+
<path d="M745.282 31.5345V7.02795H729.16V2.23828H768.148V7.02795H752.026V31.5345H745.282Z" fill="#121212"/>
|
16
|
+
<path d="M454.419 169.819C450.935 165.264 448.792 154.814 447.452 137.397C446.112 118.104 437.806 113.817 422.532 113.817H392.254V169.83H347.494V0.986328H432.715C476.391 0.986328 498.106 21.6187 498.106 54.5882C498.106 79.2399 482.833 95.3171 462.201 98.0078C479.618 101.491 489.8 111.405 491.676 130.966C494.087 156.154 494.891 163.656 500.518 169.819H454.419ZM424.676 78.704C443.969 78.704 453.615 73.8808 453.615 58.3395C453.615 44.6739 443.969 37.4392 424.676 37.4392H392.254V78.7152H424.676V78.704Z" fill="#121212"/>
|
17
|
+
</g>
|
18
|
+
<defs>
|
19
|
+
<clipPath id="clip0_171_1761">
|
20
|
+
<rect width="731.156" height="172.261" fill="white" transform="translate(347.494 0.986328)"/>
|
21
|
+
</clipPath>
|
22
|
+
</defs>
|
23
|
+
</svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg height="32" fill="#D30001" viewBox="0 0 90 32" width="90" xmlns="http://www.w3.org/2000/svg"><path d="m418.082357 25.9995403v4.1135034h-7.300339v1.89854h3.684072c1.972509 0 4.072534 1.4664311 4.197997 3.9665124l.005913.2373977v1.5821167c-.087824 3.007959-2.543121 4.1390018-4.071539 4.2011773l-.132371.0027328h-7.390745v-4.0909018l7.481152-.0226016v-1.9889467l-1.190107.0007441-.346911.0008254-.084566.0003251-.127643.0007097-.044785.0003793-.055764.0007949-.016378.0008259c.000518.0004173.013246.0008384.034343.0012518l.052212.000813c.030547.0003979.066903.0007803.105225.0011355l.078131.0006709-.155385-.0004701c-.31438-.001557-.85249-.0041098-1.729029-.0080055-1.775258 0-4.081832-1.3389153-4.219994-3.9549201l-.006518-.24899v-1.423905c0-2.6982402 2.278213-4.182853 4.065464-4.2678491l.161048-.003866zm-18.691579 0v11.8658752h6.170255v4.1361051h-10.735792v-16.0019803zm-6.441475 0v16.0019803h-4.588139v-16.0019803zm-10.803597 0c1.057758 0 4.04923.7305141 4.198142 3.951222l.005768.2526881v11.7980702h-4.271715v-2.8252084h-4.136105v2.8252084h-4.407325v-11.7980702c0-1.3184306 1.004082-4.0468495 3.946899-4.197411l.257011-.0064991zm-24.147177-.0027581 8.580186.0005749c.179372.0196801 4.753355.5702841 4.753355 5.5438436s-3.775694 5.3947112-3.92376 5.4093147l-.004472.0004216 5.00569 5.0505836h-6.374959l-3.726209-3.8608906v3.8608906h-4.309831zm22.418634-2.6971669.033418.0329283s-.384228.27122-.791058.610245c-12.837747-9.4927002-20.680526-5.0175701-23.144107-3.8196818-11.187826 6.2428065-7.954768 21.5678895-7.888988 21.8737669l.001006.0046469h-17.855317s.67805-6.6900935 5.4244-14.600677c4.74635-7.9105834 12.837747-13.9000252 19.414832-14.4876686 12.681632-1.2703535 24.110975 9.7062594 24.805814 10.3864403zm-31.111679 14.1815719 2.44098.881465c.113008.8852319.273103 1.7233771.441046 2.4882761l.101394.4499406-2.7122-.9718717c-.113009-.67805-.226017-1.6499217-.27122-2.84781zm31.506724-7.6619652h-1.514312c-1.128029 0-1.333125.5900716-1.370415.8046431l-.007251.056292-.000906.0152319-.00013 3.9153864h4.136105l-.000316-3.916479c-.004939-.0795522-.08331-.8750744-1.242775-.8750744zm-50.492125.339025 2.599192.94927c-.316423.731729-.719369 1.6711108-1.011998 2.4093289l-.118085.3028712-2.599192-.94927c.226017-.610245.700652-1.7403284 1.130083-2.7122001zm35.445121-.1434449h-3.456844v3.6588673h3.434397s.98767-.3815997.98767-1.8406572-.965223-1.8182101-.965223-1.8182101zm-15.442645-.7606218 1.62732 1.2882951c-.180814.705172-.318232 1.410344-.412255 2.115516l-.06238.528879-1.830735-1.4465067c.180813-.81366.384228-1.6499217.67805-2.4861834zm4.000495-6.3058651 1.017075 1.5369134c-.39779.4158707-.766649.8317413-1.095006 1.2707561l-.238493.3339623-1.08488-1.6273201c.40683-.5198383.881465-1.0396767 1.401304-1.5143117zm-16.182794-3.3450467 1.604719 1.4013034c-.40683.4237812-.800947.8729894-1.172815 1.3285542l-.364099.4569775-1.740328-1.4917101c.519838-.5650416 1.08488-1.1300833 1.672523-1.695125zm22.398252-.0904067.497237 1.4917101c-.524359.162732-1.048717.3688592-1.573076.6068095l-.393269.1842488-.519838-1.559515c.565041-.2486184 1.22049-.4972367 1.988946-.7232534zm5.28879-.54244c.578603.0361627 1.171671.1012555 1.779204.2068505l.458361.0869712-.090406 1.4013034c-.596684-.1265694-1.193368-.2097435-1.790052-.2495224l-.447513-.0216976zm-18.555968-6.2380601 1.017075 1.559515c-.440733.2203663-.868752.4661594-1.303128.7278443l-.437201.2666291-1.039676-1.5821167c.610245-.3616267 1.197888-.67805 1.76293-.9718717zm18.601172-.8588633c1.344799.3842283 1.923513.6474959 2.155025.7707625l.037336.0202958-.090406 1.5143117c-.482169-.1958811-.964338-.381717-1.453204-.5575078l-.739158-.2561522zm-8.633837-1.3334984.452033 1.3787017h-.226016c-.491587 0-.983173.0127134-1.474759.0476754l-.491587.0427313-.429431-1.3334984c.745855-.0904067 1.469108-.13561 2.16976-.13561z" transform="translate(-329 -10)"/></svg>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
import logoDark from "./logo-dark.svg";
|
2
|
+
import logoLight from "./logo-light.svg";
|
3
|
+
import railsLogo from "./rails-logo.svg";
|
4
|
+
|
5
|
+
export function Welcome() {
|
6
|
+
return (
|
7
|
+
<main className="flex items-center justify-center pt-16 pb-4">
|
8
|
+
<div className="flex-1 flex flex-col items-center gap-16 min-h-0">
|
9
|
+
<header className="flex flex-row items-baseline gap-9 max-w-[100vw]">
|
10
|
+
<div className="w-[300px]">
|
11
|
+
<img
|
12
|
+
src={logoLight}
|
13
|
+
alt="React Router"
|
14
|
+
className="block w-full dark:hidden"
|
15
|
+
/>
|
16
|
+
<img
|
17
|
+
src={logoDark}
|
18
|
+
alt="React Router"
|
19
|
+
className="hidden w-full dark:block"
|
20
|
+
/>
|
21
|
+
</div>
|
22
|
+
<div className="text-5xl text-gray-500 font-bold">on</div>
|
23
|
+
<div className="text-red-500 w-[300px]">
|
24
|
+
<img
|
25
|
+
src={railsLogo}
|
26
|
+
alt="Ruby on Rails"
|
27
|
+
className="block w-full"
|
28
|
+
/>
|
29
|
+
</div>
|
30
|
+
</header>
|
31
|
+
<div className="max-w-[300px] w-full space-y-6 px-4">
|
32
|
+
<nav className="space-y-4">
|
33
|
+
<p className="leading-6 text-gray-700 dark:text-gray-200 text-center">
|
34
|
+
What's next?
|
35
|
+
</p>
|
36
|
+
<div className="text-center">
|
37
|
+
{resources.map(({ href, text }) => (
|
38
|
+
<a
|
39
|
+
key={href}
|
40
|
+
className="block mb-2 leading-normal text-blue-700 hover:underline dark:text-blue-500"
|
41
|
+
href={href}
|
42
|
+
target="_blank"
|
43
|
+
rel="noreferrer"
|
44
|
+
>
|
45
|
+
{text}
|
46
|
+
</a>
|
47
|
+
))}
|
48
|
+
</div>
|
49
|
+
</nav>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
</main>
|
53
|
+
);
|
54
|
+
}
|
55
|
+
|
56
|
+
const resources = [
|
57
|
+
{
|
58
|
+
href: "https://reactrouter.com/docs",
|
59
|
+
text: "React Router Docs",
|
60
|
+
},
|
61
|
+
{
|
62
|
+
href: "https://rmx.as/discord",
|
63
|
+
text: "Join Discord",
|
64
|
+
},
|
65
|
+
];
|
data/sig/re_rou_ra.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: react_router_rails_spa
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Naofumi Kagami
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-04-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 8.0.2
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 8.0.2
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
- naofumi@mac.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".idea/.gitignore"
|
35
|
+
- ".idea/.name"
|
36
|
+
- ".idea/inspectionProfiles/Project_Default.xml"
|
37
|
+
- ".idea/misc.xml"
|
38
|
+
- ".idea/modules.xml"
|
39
|
+
- ".idea/react_router_rails_spa.iml"
|
40
|
+
- ".idea/vcs.xml"
|
41
|
+
- ".rubocop.yml"
|
42
|
+
- CHANGELOG.md
|
43
|
+
- CODE_OF_CONDUCT.md
|
44
|
+
- LICENSE.txt
|
45
|
+
- README.md
|
46
|
+
- Rakefile
|
47
|
+
- lib/react_router_rails_spa.rb
|
48
|
+
- lib/react_router_rails_spa/generators/install_generator.rb
|
49
|
+
- lib/react_router_rails_spa/generators/templates/csrf.ts
|
50
|
+
- lib/react_router_rails_spa/generators/templates/home.tsx
|
51
|
+
- lib/react_router_rails_spa/generators/templates/proxy.ts
|
52
|
+
- lib/react_router_rails_spa/generators/templates/react-router.config.ts
|
53
|
+
- lib/react_router_rails_spa/generators/templates/react.rake
|
54
|
+
- lib/react_router_rails_spa/generators/templates/vite.config.ts
|
55
|
+
- lib/react_router_rails_spa/generators/templates/welcome/logo-dark.svg
|
56
|
+
- lib/react_router_rails_spa/generators/templates/welcome/logo-light.svg
|
57
|
+
- lib/react_router_rails_spa/generators/templates/welcome/rails-logo.svg
|
58
|
+
- lib/react_router_rails_spa/generators/templates/welcome/welcome.tsx
|
59
|
+
- lib/react_router_rails_spa/version.rb
|
60
|
+
- sig/re_rou_ra.rbs
|
61
|
+
homepage: https://github.com/naofumi/react_router_rails_spa
|
62
|
+
licenses:
|
63
|
+
- MIT
|
64
|
+
metadata:
|
65
|
+
homepage_uri: https://github.com/naofumi/react_router_rails_spa
|
66
|
+
source_code_uri: https://github.com/naofumi/react_router_rails_spa
|
67
|
+
changelog_uri: https://github.com/naofumi/react_router_rails_spa
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 3.0.0
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubygems_version: 3.4.10
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: Use React Router v7 framework on your Rails-powered SPA.
|
87
|
+
test_files: []
|