spina 2.12.0 → 2.13.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of spina might be problematic. Click here for more details.

Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +17 -17
  3. data/app/assets/builds/spina/tailwind.css +79 -47
  4. data/app/components/spina/application_component.rb +1 -1
  5. data/app/components/spina/forms/group_component.rb +2 -3
  6. data/app/components/spina/forms/label_component.rb +2 -3
  7. data/app/components/spina/forms/password_field_component.rb +1 -1
  8. data/app/components/spina/forms/switch_component.rb +2 -3
  9. data/app/components/spina/forms/text_field_component.rb +8 -9
  10. data/app/components/spina/forms/trix_toolbar_component.rb +1 -3
  11. data/app/components/spina/hooks/hook_component.rb +3 -5
  12. data/app/components/spina/hooks/partial_component.rb +4 -5
  13. data/app/components/spina/main_navigation/link_component.rb +1 -3
  14. data/app/components/spina/main_navigation/sub_nav_component.rb +6 -7
  15. data/app/components/spina/media_picker/image_component.rb +1 -3
  16. data/app/components/spina/media_picker/modal_component.rb +4 -6
  17. data/app/components/spina/pages/actions_component.rb +1 -3
  18. data/app/components/spina/pages/list_component.rb +3 -4
  19. data/app/components/spina/pages/location_component.rb +10 -11
  20. data/app/components/spina/pages/new_page_button_component.rb +4 -5
  21. data/app/components/spina/pages/page_component.rb +8 -9
  22. data/app/components/spina/pages/page_select_component.rb +3 -4
  23. data/app/components/spina/pages/tab_button_component.rb +1 -3
  24. data/app/components/spina/pages/translations_component.rb +9 -11
  25. data/app/components/spina/user_interface/dropdown_button_component.rb +4 -4
  26. data/app/components/spina/user_interface/dropdown_component.rb +8 -9
  27. data/app/components/spina/user_interface/flash_message_component.rb +3 -5
  28. data/app/components/spina/user_interface/header_component.rb +2 -2
  29. data/app/components/spina/user_interface/modal_component.rb +1 -3
  30. data/app/components/spina/user_interface/tab_link_component.rb +1 -3
  31. data/app/components/spina/user_interface/translations_component.rb +8 -10
  32. data/app/controllers/concerns/spina/api/paginable.rb +36 -37
  33. data/app/controllers/concerns/spina/current_spina_account.rb +1 -1
  34. data/app/controllers/concerns/spina/current_theme.rb +6 -7
  35. data/app/controllers/concerns/spina/frontend.rb +58 -44
  36. data/app/controllers/spina/admin/accounts_controller.rb +9 -10
  37. data/app/controllers/spina/admin/admin_controller.rb +18 -18
  38. data/app/controllers/spina/admin/attachments_controller.rb +15 -10
  39. data/app/controllers/spina/admin/embeds_controller.rb +17 -19
  40. data/app/controllers/spina/admin/images_controller.rb +24 -25
  41. data/app/controllers/spina/admin/layout_controller.rb +19 -20
  42. data/app/controllers/spina/admin/media_folders_controller.rb +4 -5
  43. data/app/controllers/spina/admin/media_picker_controller.rb +2 -4
  44. data/app/controllers/spina/admin/move_pages_controller.rb +8 -10
  45. data/app/controllers/spina/admin/navigation_items_controller.rb +13 -14
  46. data/app/controllers/spina/admin/navigations_controller.rb +26 -26
  47. data/app/controllers/spina/admin/page_translations_controller.rb +1 -3
  48. data/app/controllers/spina/admin/pages_controller.rb +34 -34
  49. data/app/controllers/spina/admin/parent_pages_controller.rb +1 -3
  50. data/app/controllers/spina/admin/password_resets_controller.rb +8 -9
  51. data/app/controllers/spina/admin/resources_controller.rb +14 -15
  52. data/app/controllers/spina/admin/sessions_controller.rb +2 -2
  53. data/app/controllers/spina/admin/settings_controller.rb +28 -29
  54. data/app/controllers/spina/admin/theme_controller.rb +10 -11
  55. data/app/controllers/spina/admin/users_controller.rb +28 -29
  56. data/app/controllers/spina/api/api_controller.rb +17 -17
  57. data/app/controllers/spina/api/images_controller.rb +1 -3
  58. data/app/controllers/spina/api/navigations_controller.rb +2 -4
  59. data/app/controllers/spina/api/pages_controller.rb +8 -9
  60. data/app/controllers/spina/api/resources_controller.rb +2 -4
  61. data/app/controllers/spina/application_controller.rb +4 -3
  62. data/app/controllers/spina/pages_controller.rb +4 -5
  63. data/app/controllers/spina/sitemaps_controller.rb +0 -2
  64. data/app/helpers/spina/admin/icons_helper.rb +151 -153
  65. data/app/helpers/spina/admin/images_helper.rb +0 -2
  66. data/app/helpers/spina/admin/pages_helper.rb +3 -5
  67. data/app/helpers/spina/attachments_helper.rb +1 -3
  68. data/app/helpers/spina/images_helper.rb +5 -7
  69. data/app/helpers/spina/pages_helper.rb +0 -2
  70. data/app/helpers/spina/spina_helper.rb +1 -3
  71. data/app/jobs/spina/replace_signed_id_job.rb +10 -11
  72. data/app/jobs/spina/resource_pages_update_job.rb +1 -1
  73. data/app/mailers/spina/application_mailer.rb +2 -2
  74. data/app/mailers/spina/user_mailer.rb +4 -6
  75. data/app/models/concerns/spina/gravatar.rb +11 -12
  76. data/app/models/concerns/spina/partable.rb +4 -6
  77. data/app/models/concerns/spina/translated_content.rb +5 -5
  78. data/app/models/spina/account.rb +9 -10
  79. data/app/models/spina/application_record.rb +2 -3
  80. data/app/models/spina/attachment.rb +3 -4
  81. data/app/models/spina/current.rb +1 -1
  82. data/app/models/spina/embeds/base.rb +2 -2
  83. data/app/models/spina/embeds/button.rb +4 -4
  84. data/app/models/spina/embeds/vimeo.rb +17 -18
  85. data/app/models/spina/embeds/youtube.rb +18 -19
  86. data/app/models/spina/image.rb +4 -4
  87. data/app/models/spina/media_folder.rb +1 -1
  88. data/app/models/spina/navigation.rb +1 -2
  89. data/app/models/spina/navigation_item.rb +2 -2
  90. data/app/models/spina/page.rb +32 -38
  91. data/app/models/spina/parts/attachment.rb +1 -2
  92. data/app/models/spina/parts/base.rb +5 -4
  93. data/app/models/spina/parts/image.rb +3 -4
  94. data/app/models/spina/parts/image_collection.rb +2 -3
  95. data/app/models/spina/parts/image_variant.rb +3 -4
  96. data/app/models/spina/parts/repeater_content.rb +2 -2
  97. data/app/models/spina/resource.rb +3 -4
  98. data/app/models/spina/rewrite_rule.rb +1 -1
  99. data/app/models/spina/setting.rb +0 -2
  100. data/app/models/spina/user.rb +3 -4
  101. data/app/presenters/spina/content_presenter.rb +11 -12
  102. data/app/presenters/spina/menu_presenter.rb +55 -55
  103. data/app/presenters/spina/rich_text_presenter.rb +28 -29
  104. data/app/serializers/spina/api/base_serializer.rb +1 -1
  105. data/app/serializers/spina/api/image_serializer.rb +6 -6
  106. data/app/serializers/spina/api/navigation_serializer.rb +4 -7
  107. data/app/serializers/spina/api/page_serializer.rb +9 -12
  108. data/app/serializers/spina/api/resource_serializer.rb +5 -5
  109. data/app/views/layouts/spina/admin/application.html.erb +1 -0
  110. data/app/views/spina/admin/parts/attachments/_attachment.html.erb +3 -0
  111. data/app/views/spina/admin/parts/attachments/_form.html.erb +22 -1
  112. data/app/views/spina/admin/parts/repeaters/_fields.html.erb +2 -2
  113. data/app/views/spina/admin/parts/repeaters/_form.html.erb +4 -4
  114. data/app/views/spina/admin/shared/_navigation.html.erb +3 -1
  115. data/app/views/spina/admin/shared/_version.html.erb +18 -0
  116. data/app/views/spina/sitemaps/show.xml.builder +1 -1
  117. data/config/initializers/importmap.rb +3 -3
  118. data/config/initializers/yaml_column_permitted_classes.rb +3 -3
  119. data/config/locales/de.yml +1 -0
  120. data/config/locales/en.yml +3 -0
  121. data/config/locales/nl.yml +4 -1
  122. data/config/routes.rb +10 -17
  123. data/db/migrate/1_create_spina_tables.rb +57 -57
  124. data/db/migrate/3_create_spina_navigations.rb +1 -1
  125. data/db/seeds.rb +0 -1
  126. data/lib/generators/spina/embed_generator.rb +5 -6
  127. data/lib/generators/spina/install_generator.rb +48 -41
  128. data/lib/generators/spina/tailwind_config_generator.rb +3 -4
  129. data/lib/generators/spina/templates/app/models/spina/embeds/embed.rb.tt +20 -18
  130. data/lib/generators/spina/templates/config/initializers/spina.rb +11 -11
  131. data/lib/generators/spina/templates/config/initializers/themes/default.rb +17 -17
  132. data/lib/generators/spina/templates/config/initializers/themes/demo.rb +22 -22
  133. data/lib/spina/admin_sectionable.rb +5 -8
  134. data/lib/spina/attr_json_monkeypatch.rb +4 -7
  135. data/lib/spina/attr_json_spina_parts_model.rb +1 -3
  136. data/lib/spina/authentication/basic.rb +9 -10
  137. data/lib/spina/authentication/sessions.rb +10 -11
  138. data/lib/spina/embeddable.rb +14 -17
  139. data/lib/spina/embeds/trix_conversion.rb +25 -26
  140. data/lib/spina/embeds.rb +1 -3
  141. data/lib/spina/engine.rb +18 -19
  142. data/lib/spina/part.rb +1 -6
  143. data/lib/spina/plugin.rb +9 -13
  144. data/lib/spina/railtie.rb +5 -7
  145. data/lib/spina/theme.rb +13 -17
  146. data/lib/spina/theme_reloader.rb +12 -13
  147. data/lib/spina/version.rb +1 -1
  148. data/lib/spina.rb +39 -40
  149. data/lib/tasks/install.rake +8 -14
  150. data/lib/tasks/tailwind.rake +10 -8
  151. metadata +18 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf34b8b63f0ed2a3dd618d67a722869d8e3863ed9592adae25ae245dee0eb569
4
- data.tar.gz: b3c9ac76f43fd9c10d56b51064ed0c33cbcb96465f46ba13d1e6cea94ffed275
3
+ metadata.gz: ab6900c802d27484924d6d0bcc6bc5120ebdd7bbd71ab151b87209aa7835c341
4
+ data.tar.gz: 479551a874aeafc4707a5d33770b0e630f4a438274ee8bd61e1f5e6749a59f95
5
5
  SHA512:
6
- metadata.gz: a63ea9e4cc97caad6688b157d8ee024495456e5c77921e6bbb72236bf642c7e9f2b634d3d165f474102df521c8689b110d727b4412b7c163b4695d1741ee2659
7
- data.tar.gz: a7a114fefb5ad42e79884c784e7c4c2f8c919f5f775abc10821746fc753bc5c5894e831248a8885b6d34267561d7725ec0ee23cd355055a560d11b321b0f16a6
6
+ metadata.gz: 014c4c2cab3b756b3e9d932e18aaa9b95c145e625793fa962d6ba2671a6ce7fa6af0377c87b54e4bd3a16fe7425fc82f877afdb5655c92d9eea764bcc08c0d2e
7
+ data.tar.gz: 189ce7c2f1aa01e5da754884ce766ca520a358498326363d946fd46dfe89e139fd086476df5e4382a34053c4eddcb03e6389b8338062fdf83b8ab1ed579bbc0f
data/Rakefile CHANGED
@@ -1,35 +1,35 @@
1
1
  begin
2
- require 'bundler/setup'
2
+ require "bundler/setup"
3
3
  rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
4
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
5
5
  end
6
6
 
7
- require 'rdoc/task'
7
+ require "rdoc/task"
8
8
 
9
9
  RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'Spina'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
10
+ rdoc.rdoc_dir = "rdoc"
11
+ rdoc.title = "Spina"
12
+ rdoc.options << "--line-numbers"
13
+ rdoc.rdoc_files.include("README.rdoc")
14
+ rdoc.rdoc_files.include("lib/**/*.rb")
15
15
  end
16
16
 
17
17
  APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
18
- load 'rails/tasks/engine.rake'
18
+ load "rails/tasks/engine.rake"
19
19
 
20
- load 'rails/tasks/statistics.rake'
20
+ load "rails/tasks/statistics.rake"
21
21
 
22
- load 'lib/tasks/install.rake'
23
- load 'lib/tasks/tailwind.rake'
22
+ load "lib/tasks/install.rake"
23
+ load "lib/tasks/tailwind.rake"
24
24
 
25
- require 'bundler/gem_tasks'
25
+ require "bundler/gem_tasks"
26
26
 
27
- require 'rake/testtask'
27
+ require "rake/testtask"
28
28
 
29
29
  Rake::TestTask.new(:test) do |t|
30
- t.libs << 'test'
31
- t.pattern = 'test/**/*_test.rb'
30
+ t.libs << "test"
31
+ t.pattern = "test/**/*_test.rb"
32
32
  t.verbose = false
33
33
  end
34
34
 
35
- task :default => :test
35
+ task default: :test
@@ -1744,7 +1744,7 @@ a, button {
1744
1744
 
1745
1745
  .btn-green {
1746
1746
  --tw-bg-opacity: 1;
1747
- background-color: rgb(34 197 94 / var(--tw-bg-opacity));
1747
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity));
1748
1748
  }
1749
1749
 
1750
1750
  /* Forms */
@@ -2079,6 +2079,14 @@ trix-editor [data-trix-mutable]::selection,
2079
2079
  margin-right: 0.5rem;
2080
2080
  }
2081
2081
 
2082
+ .-ml-1 {
2083
+ margin-left: -0.25rem;
2084
+ }
2085
+
2086
+ .mr-1 {
2087
+ margin-right: 0.25rem;
2088
+ }
2089
+
2082
2090
  .mt-5 {
2083
2091
  margin-top: 1.25rem;
2084
2092
  }
@@ -2087,18 +2095,10 @@ trix-editor [data-trix-mutable]::selection,
2087
2095
  margin-right: 0.5rem;
2088
2096
  }
2089
2097
 
2090
- .mr-1 {
2091
- margin-right: 0.25rem;
2092
- }
2093
-
2094
2098
  .ml-2 {
2095
2099
  margin-left: 0.5rem;
2096
2100
  }
2097
2101
 
2098
- .-ml-1 {
2099
- margin-left: -0.25rem;
2100
- }
2101
-
2102
2102
  .-mb-3 {
2103
2103
  margin-bottom: -0.75rem;
2104
2104
  }
@@ -2111,10 +2111,6 @@ trix-editor [data-trix-mutable]::selection,
2111
2111
  margin-bottom: 0.5rem;
2112
2112
  }
2113
2113
 
2114
- .-ml-2 {
2115
- margin-left: -0.5rem;
2116
- }
2117
-
2118
2114
  .mr-4 {
2119
2115
  margin-right: 1rem;
2120
2116
  }
@@ -2143,10 +2139,6 @@ trix-editor [data-trix-mutable]::selection,
2143
2139
  margin-left: 2rem;
2144
2140
  }
2145
2141
 
2146
- .mr-1\.5 {
2147
- margin-right: 0.375rem;
2148
- }
2149
-
2150
2142
  .mt-6 {
2151
2143
  margin-top: 1.5rem;
2152
2144
  }
@@ -2171,6 +2163,10 @@ trix-editor [data-trix-mutable]::selection,
2171
2163
  margin-bottom: 1.25rem;
2172
2164
  }
2173
2165
 
2166
+ .-ml-2 {
2167
+ margin-left: -0.5rem;
2168
+ }
2169
+
2174
2170
  .mr-3 {
2175
2171
  margin-right: 0.75rem;
2176
2172
  }
@@ -2191,14 +2187,6 @@ trix-editor [data-trix-mutable]::selection,
2191
2187
  margin-right: -1rem;
2192
2188
  }
2193
2189
 
2194
- .-ml-0\.5 {
2195
- margin-left: -0.125rem;
2196
- }
2197
-
2198
- .-ml-0 {
2199
- margin-left: -0px;
2200
- }
2201
-
2202
2190
  .block {
2203
2191
  display: block;
2204
2192
  }
@@ -2231,6 +2219,10 @@ trix-editor [data-trix-mutable]::selection,
2231
2219
  display: none;
2232
2220
  }
2233
2221
 
2222
+ .h-5 {
2223
+ height: 1.25rem;
2224
+ }
2225
+
2234
2226
  .h-12 {
2235
2227
  height: 3rem;
2236
2228
  }
@@ -2247,8 +2239,8 @@ trix-editor [data-trix-mutable]::selection,
2247
2239
  height: 1rem;
2248
2240
  }
2249
2241
 
2250
- .h-5 {
2251
- height: 1.25rem;
2242
+ .h-3 {
2243
+ height: 0.75rem;
2252
2244
  }
2253
2245
 
2254
2246
  .h-9 {
@@ -2259,10 +2251,6 @@ trix-editor [data-trix-mutable]::selection,
2259
2251
  height: 1.5rem;
2260
2252
  }
2261
2253
 
2262
- .h-3 {
2263
- height: 0.75rem;
2264
- }
2265
-
2266
2254
  .h-10 {
2267
2255
  height: 2.5rem;
2268
2256
  }
@@ -2299,6 +2287,10 @@ trix-editor [data-trix-mutable]::selection,
2299
2287
  width: 100%;
2300
2288
  }
2301
2289
 
2290
+ .w-5 {
2291
+ width: 1.25rem;
2292
+ }
2293
+
2302
2294
  .w-56 {
2303
2295
  width: 14rem;
2304
2296
  }
@@ -2307,12 +2299,16 @@ trix-editor [data-trix-mutable]::selection,
2307
2299
  width: 1rem;
2308
2300
  }
2309
2301
 
2302
+ .w-3 {
2303
+ width: 0.75rem;
2304
+ }
2305
+
2310
2306
  .w-32 {
2311
2307
  width: 8rem;
2312
2308
  }
2313
2309
 
2314
- .w-5 {
2315
- width: 1.25rem;
2310
+ .w-6 {
2311
+ width: 1.5rem;
2316
2312
  }
2317
2313
 
2318
2314
  .w-auto {
@@ -2323,10 +2319,6 @@ trix-editor [data-trix-mutable]::selection,
2323
2319
  width: 16rem;
2324
2320
  }
2325
2321
 
2326
- .w-6 {
2327
- width: 1.5rem;
2328
- }
2329
-
2330
2322
  .w-8 {
2331
2323
  width: 2rem;
2332
2324
  }
@@ -2339,10 +2331,6 @@ trix-editor [data-trix-mutable]::selection,
2339
2331
  width: 12rem;
2340
2332
  }
2341
2333
 
2342
- .w-3 {
2343
- width: 0.75rem;
2344
- }
2345
-
2346
2334
  .w-14 {
2347
2335
  width: 3.5rem;
2348
2336
  }
@@ -2743,6 +2731,11 @@ trix-editor [data-trix-mutable]::selection,
2743
2731
  border-color: rgb(104 101 180 / var(--tw-border-opacity));
2744
2732
  }
2745
2733
 
2734
+ .border-emerald-600 {
2735
+ --tw-border-opacity: 1;
2736
+ border-color: rgb(5 150 105 / var(--tw-border-opacity));
2737
+ }
2738
+
2746
2739
  .border-spina-dark {
2747
2740
  --tw-border-opacity: 1;
2748
2741
  border-color: rgb(58 58 112 / var(--tw-border-opacity));
@@ -2787,6 +2780,11 @@ trix-editor [data-trix-mutable]::selection,
2787
2780
  background-color: rgb(0 0 0 / var(--tw-bg-opacity));
2788
2781
  }
2789
2782
 
2783
+ .bg-gray-400 {
2784
+ --tw-bg-opacity: 1;
2785
+ background-color: rgb(156 163 175 / var(--tw-bg-opacity));
2786
+ }
2787
+
2790
2788
  .bg-gray-200 {
2791
2789
  --tw-bg-opacity: 1;
2792
2790
  background-color: rgb(229 231 235 / var(--tw-bg-opacity));
@@ -2797,14 +2795,14 @@ trix-editor [data-trix-mutable]::selection,
2797
2795
  background-color: rgb(104 101 180 / var(--tw-bg-opacity));
2798
2796
  }
2799
2797
 
2800
- .bg-yellow-500 {
2798
+ .bg-emerald-500 {
2801
2799
  --tw-bg-opacity: 1;
2802
- background-color: rgb(234 179 8 / var(--tw-bg-opacity));
2800
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity));
2803
2801
  }
2804
2802
 
2805
- .bg-gray-400 {
2803
+ .bg-yellow-500 {
2806
2804
  --tw-bg-opacity: 1;
2807
- background-color: rgb(156 163 175 / var(--tw-bg-opacity));
2805
+ background-color: rgb(234 179 8 / var(--tw-bg-opacity));
2808
2806
  }
2809
2807
 
2810
2808
  .bg-green-300 {
@@ -2982,6 +2980,21 @@ trix-editor [data-trix-mutable]::selection,
2982
2980
  padding-bottom: 2rem;
2983
2981
  }
2984
2982
 
2983
+ .px-5 {
2984
+ padding-left: 1.25rem;
2985
+ padding-right: 1.25rem;
2986
+ }
2987
+
2988
+ .py-0\.5 {
2989
+ padding-top: 0.125rem;
2990
+ padding-bottom: 0.125rem;
2991
+ }
2992
+
2993
+ .py-0 {
2994
+ padding-top: 0px;
2995
+ padding-bottom: 0px;
2996
+ }
2997
+
2985
2998
  .pr-3 {
2986
2999
  padding-right: 0.75rem;
2987
3000
  }
@@ -3132,6 +3145,10 @@ trix-editor [data-trix-mutable]::selection,
3132
3145
  line-height: 1rem;
3133
3146
  }
3134
3147
 
3148
+ .tracking-wider {
3149
+ letter-spacing: 0.05em;
3150
+ }
3151
+
3135
3152
  .text-gray-800 {
3136
3153
  --tw-text-opacity: 1;
3137
3154
  color: rgb(31 41 55 / var(--tw-text-opacity));
@@ -3192,9 +3209,9 @@ trix-editor [data-trix-mutable]::selection,
3192
3209
  color: rgb(209 213 219 / var(--tw-text-opacity));
3193
3210
  }
3194
3211
 
3195
- .text-green-500 {
3212
+ .text-emerald-500 {
3196
3213
  --tw-text-opacity: 1;
3197
- color: rgb(34 197 94 / var(--tw-text-opacity));
3214
+ color: rgb(16 185 129 / var(--tw-text-opacity));
3198
3215
  }
3199
3216
 
3200
3217
  .text-blue-600 {
@@ -3443,6 +3460,11 @@ trix-editor [data-trix-mutable]::selection,
3443
3460
  background-color: rgb(254 226 226 / var(--tw-bg-opacity));
3444
3461
  }
3445
3462
 
3463
+ .hover\:bg-emerald-600:hover {
3464
+ --tw-bg-opacity: 1;
3465
+ background-color: rgb(5 150 105 / var(--tw-bg-opacity));
3466
+ }
3467
+
3446
3468
  .hover\:bg-opacity-50:hover {
3447
3469
  --tw-bg-opacity: 0.5;
3448
3470
  }
@@ -3533,6 +3555,16 @@ trix-editor [data-trix-mutable]::selection,
3533
3555
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
3534
3556
  }
3535
3557
 
3558
+ .group:hover .group-hover\:bg-pink-500 {
3559
+ --tw-bg-opacity: 1;
3560
+ background-color: rgb(236 72 153 / var(--tw-bg-opacity));
3561
+ }
3562
+
3563
+ .group:hover .group-hover\:text-spina {
3564
+ --tw-text-opacity: 1;
3565
+ color: rgb(104 101 180 / var(--tw-text-opacity));
3566
+ }
3567
+
3536
3568
  .group:hover .group-hover\:opacity-100 {
3537
3569
  opacity: 1;
3538
3570
  }
@@ -1,4 +1,4 @@
1
1
  module Spina
2
2
  class ApplicationComponent < ViewComponent::Base
3
3
  end
4
- end
4
+ end
@@ -2,12 +2,11 @@ module Spina
2
2
  module Forms
3
3
  class GroupComponent < ApplicationComponent
4
4
  attr_reader :label, :description
5
-
5
+
6
6
  def initialize(label:, description: "")
7
7
  @label = label
8
8
  @description = description
9
9
  end
10
-
11
10
  end
12
11
  end
13
- end
12
+ end
@@ -2,16 +2,15 @@ module Spina
2
2
  module Forms
3
3
  class LabelComponent < ApplicationComponent
4
4
  attr_reader :f, :method
5
-
5
+
6
6
  def initialize(f, method)
7
7
  @f = f
8
8
  @method = method
9
9
  end
10
-
10
+
11
11
  def call
12
12
  f.label method, class: "font-medium text-sm text-gray-700 block"
13
13
  end
14
-
15
14
  end
16
15
  end
17
16
  end
@@ -3,4 +3,4 @@ module Spina
3
3
  class PasswordFieldComponent < TextFieldComponent
4
4
  end
5
5
  end
6
- end
6
+ end
@@ -2,12 +2,11 @@ module Spina
2
2
  module Forms
3
3
  class SwitchComponent < ApplicationComponent
4
4
  attr_accessor :f, :method
5
-
5
+
6
6
  def initialize(f, method)
7
7
  @f = f
8
8
  @method = method
9
9
  end
10
-
11
10
  end
12
11
  end
13
- end
12
+ end
@@ -2,20 +2,20 @@ module Spina
2
2
  module Forms
3
3
  class TextFieldComponent < ApplicationComponent
4
4
  attr_accessor :f, :method, :size, :autofocus
5
-
5
+
6
6
  def initialize(f, method, size: "md", autofocus: false)
7
7
  @f = f
8
8
  @method = method
9
9
  @size = size
10
10
  @autofocus = autofocus
11
11
  end
12
-
12
+
13
13
  def controllers
14
14
  contr = []
15
15
  contr << "autofocus" if autofocus
16
16
  contr.join(" ")
17
17
  end
18
-
18
+
19
19
  def size_styles
20
20
  case size
21
21
  when "lg"
@@ -24,7 +24,7 @@ module Spina
24
24
  "text-sm"
25
25
  end
26
26
  end
27
-
27
+
28
28
  def error_styles
29
29
  if has_errors?
30
30
  "border-red-500 ring-red-500 ring-1"
@@ -32,19 +32,18 @@ module Spina
32
32
  ""
33
33
  end
34
34
  end
35
-
35
+
36
36
  def error_messages
37
37
  f.object.errors[method.to_sym]
38
38
  end
39
-
39
+
40
40
  def has_errors?
41
41
  error_messages.present?
42
42
  end
43
-
43
+
44
44
  def placeholder
45
45
  f.object.class.human_attribute_name(method)
46
46
  end
47
-
48
47
  end
49
48
  end
50
- end
49
+ end
@@ -1,11 +1,9 @@
1
1
  module Spina
2
2
  module Forms
3
3
  class TrixToolbarComponent < ApplicationComponent
4
-
5
4
  def initialize(trix_id)
6
5
  @trix_id = trix_id
7
6
  end
8
-
9
7
  end
10
8
  end
11
- end
9
+ end
@@ -1,21 +1,19 @@
1
1
  module Spina
2
2
  module Hooks
3
3
  class HookComponent < ApplicationComponent
4
-
5
4
  def initialize(partial:)
6
5
  @partial = partial
7
6
  end
8
-
7
+
9
8
  def call
10
9
  render Spina::Hooks::PartialComponent.with_collection(plugins, partial: @partial)
11
10
  end
12
-
11
+
13
12
  def plugins
14
13
  Spina::Plugin.all.find_all do |plugin|
15
14
  helpers.current_theme.plugins.include?(plugin.name)
16
15
  end
17
16
  end
18
-
19
17
  end
20
18
  end
21
- end
19
+ end
@@ -2,20 +2,19 @@ module Spina
2
2
  module Hooks
3
3
  class PartialComponent < ApplicationComponent
4
4
  with_collection_parameter :plugin
5
-
5
+
6
6
  def initialize(plugin:, partial:)
7
7
  @plugin = plugin
8
8
  @partial = partial
9
9
  end
10
-
10
+
11
11
  def call
12
12
  render partial: "spina/admin/hooks/#{@plugin.namespace}/#{@partial}"
13
13
  end
14
-
14
+
15
15
  def render?
16
16
  helpers.lookup_context.exists? "spina/admin/hooks/#{@plugin.namespace}/_#{@partial}"
17
17
  end
18
-
19
18
  end
20
19
  end
21
- end
20
+ end
@@ -1,7 +1,6 @@
1
1
  module Spina
2
2
  module MainNavigation
3
3
  class LinkComponent < ApplicationComponent
4
-
5
4
  def initialize(label, path, active: false)
6
5
  @label = label
7
6
  @path = path
@@ -15,7 +14,6 @@ module Spina
15
14
  "opacity-50"
16
15
  end
17
16
  end
18
-
19
17
  end
20
18
  end
21
- end
19
+ end
@@ -1,17 +1,17 @@
1
1
  module Spina
2
2
  module MainNavigation
3
- class SubNavComponent < ApplicationComponent
3
+ class SubNavComponent < ApplicationComponent
4
4
  renders_one :icon
5
5
  renders_one :links
6
-
6
+
7
7
  def initialize(name = :content)
8
8
  @name = name
9
9
  end
10
-
10
+
11
11
  def active?
12
12
  helpers.admin_section == @name
13
13
  end
14
-
14
+
15
15
  def button_classes
16
16
  if active?
17
17
  "opacity-100"
@@ -19,7 +19,7 @@ module Spina
19
19
  "opacity-50"
20
20
  end
21
21
  end
22
-
22
+
23
23
  def ul_classes
24
24
  if active?
25
25
  "md:translate-x-20 "
@@ -27,7 +27,6 @@ module Spina
27
27
  "translate-x-full"
28
28
  end
29
29
  end
30
-
31
30
  end
32
31
  end
33
- end
32
+ end
@@ -1,11 +1,9 @@
1
1
  module Spina
2
2
  module MediaPicker
3
3
  class ImageComponent < ApplicationComponent
4
-
5
4
  def initialize(image:)
6
5
  @image = image
7
6
  end
8
-
9
7
  end
10
8
  end
11
- end
9
+ end
@@ -1,21 +1,20 @@
1
1
  module Spina
2
2
  module MediaPicker
3
3
  class ModalComponent < ApplicationComponent
4
-
5
4
  def initialize(target, images:, media_folder: nil)
6
5
  @target = target
7
6
  @images = images
8
7
  @media_folder = media_folder
9
8
  end
10
-
9
+
11
10
  def media_folders
12
11
  @media_folders ||= Spina::MediaFolder.order(:name)
13
12
  end
14
-
13
+
15
14
  def image_count
16
15
  @image_count ||= Spina::Image.count
17
16
  end
18
-
17
+
19
18
  def media_folder_classes(media_folder)
20
19
  if media_folder == @media_folder
21
20
  "text-gray-900 bg-spina-dark bg-opacity-20"
@@ -23,7 +22,6 @@ module Spina
23
22
  "text-gray-600 hover:bg-gray-200 bg-opacity-100 hover:bg-gray-200"
24
23
  end
25
24
  end
26
-
27
25
  end
28
26
  end
29
- end
27
+ end
@@ -1,12 +1,10 @@
1
1
  module Spina
2
2
  module Pages
3
3
  class ActionsComponent < ApplicationComponent
4
-
5
4
  def initialize(page:, locale: I18n.locale)
6
5
  @page = page
7
6
  @locale = locale
8
7
  end
9
-
10
8
  end
11
9
  end
12
- end
10
+ end
@@ -2,17 +2,16 @@ module Spina
2
2
  module Pages
3
3
  class ListComponent < ApplicationComponent
4
4
  attr_reader :depth, :sortable, :draggable, :paginated
5
-
5
+
6
6
  def initialize(pages:, sortable: true, draggable: nil)
7
7
  @pages = pages
8
8
  @sortable = sortable
9
-
9
+
10
10
  # List of pages is only draggable if there's no pagination
11
11
  @paginated = pages.respond_to?(:total_pages)
12
12
  @draggable = draggable
13
13
  @draggable = !paginated || pages.total_pages == 1 if draggable.nil?
14
14
  end
15
-
16
15
  end
17
16
  end
18
- end
17
+ end