trestle 0.10.0.pre → 0.10.0.pre2

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +26 -0
  3. data/.github/workflows/rspec.yml +6 -2
  4. data/Gemfile +14 -5
  5. data/app/assets/bundle/trestle/admin.css +4 -4
  6. data/app/assets/bundle/trestle/admin.js +2 -2
  7. data/app/controllers/concerns/trestle/controller/turbo_stream.rb +12 -0
  8. data/app/controllers/concerns/trestle/resource/controller/actions.rb +3 -3
  9. data/app/controllers/trestle/application_controller.rb +1 -1
  10. data/app/helpers/trestle/modal_helper.rb +0 -5
  11. data/app/helpers/trestle/turbo/frame_helper.rb +29 -0
  12. data/app/helpers/trestle/turbo/stream_helper.rb +9 -0
  13. data/app/helpers/trestle/turbo/tag_builder.rb +21 -0
  14. data/app/helpers/trestle/url_helper.rb +1 -1
  15. data/app/views/layouts/trestle/admin.html.erb +1 -1
  16. data/app/views/layouts/trestle/admin.turbo_stream.erb +2 -9
  17. data/app/views/trestle/application/_header.html.erb +12 -10
  18. data/app/views/trestle/resource/create.turbo_stream.erb +1 -5
  19. data/app/views/trestle/resource/destroy.turbo_stream.erb +1 -1
  20. data/app/views/trestle/resource/edit.html.erb +2 -0
  21. data/app/views/trestle/resource/index.html.erb +5 -0
  22. data/app/views/trestle/resource/new.html.erb +5 -0
  23. data/app/views/trestle/resource/show.html.erb +2 -0
  24. data/app/views/trestle/resource/update.turbo_stream.erb +1 -5
  25. data/app/views/trestle/shared/_sidebar.html.erb +2 -2
  26. data/frontend/css/components/_alerts.scss +22 -20
  27. data/frontend/css/components/_avatar.scss +12 -12
  28. data/frontend/css/components/_background.scss +1 -1
  29. data/frontend/css/components/_breadcrumbs.scss +8 -29
  30. data/frontend/css/components/_buttons.scss +3 -3
  31. data/frontend/css/components/_datepicker.scss +3 -3
  32. data/frontend/css/components/_dropdown.scss +18 -26
  33. data/frontend/css/components/_forms.scss +4 -4
  34. data/frontend/css/components/_grid.scss +29 -0
  35. data/frontend/css/components/_media-grid.scss +1 -1
  36. data/frontend/css/components/_modal.scss +4 -4
  37. data/frontend/css/components/_pagination.scss +4 -8
  38. data/frontend/css/components/_popover.scss +1 -1
  39. data/frontend/css/components/_scopes.scss +4 -10
  40. data/frontend/css/components/_select.scss +8 -9
  41. data/frontend/css/components/_sort.scss +1 -1
  42. data/frontend/css/components/_table.scss +5 -5
  43. data/frontend/css/components/_tabs.scss +11 -18
  44. data/frontend/css/components/_tags.scss +16 -6
  45. data/frontend/css/components/_toolbars.scss +9 -9
  46. data/frontend/css/core/_functions.scss +0 -8
  47. data/frontend/css/core/_theme.scss +3 -0
  48. data/frontend/css/core/_typography.scss +12 -19
  49. data/frontend/css/index.scss +3 -1
  50. data/frontend/css/layout/_base.scss +4 -2
  51. data/frontend/css/layout/_content-header.scss +71 -0
  52. data/frontend/css/layout/_footer.scss +5 -7
  53. data/frontend/css/layout/_main-content.scss +107 -0
  54. data/frontend/css/layout/_navigation.scss +111 -49
  55. data/frontend/css/layout/_sidebar.scss +58 -34
  56. data/frontend/css/variables/_bootstrap.scss +30 -21
  57. data/frontend/css/variables/_trestle.scss +17 -17
  58. data/frontend/js/controllers/batch_action_controller.js +59 -0
  59. data/frontend/js/controllers/checkbox_select_controller.js +3 -0
  60. data/lib/trestle/engine.rb +18 -16
  61. data/lib/trestle/resource/toolbar.rb +18 -8
  62. data/lib/trestle/sprockets_compressor.rb +16 -0
  63. data/lib/trestle/toolbar/context.rb +7 -4
  64. data/lib/trestle/toolbar/menu.rb +8 -5
  65. data/lib/trestle/version.rb +1 -1
  66. data/package.json +1 -1
  67. data/trestle.gemspec +5 -9
  68. data/yarn.lock +17 -32
  69. metadata +34 -69
  70. data/app/controllers/concerns/trestle/controller/turbo.rb +0 -21
  71. data/app/helpers/trestle/turbo_frame_helper.rb +0 -34
  72. data/frontend/css/layout/_content.scss +0 -173
@@ -0,0 +1,59 @@
1
+ import ApplicationController from './application_controller'
2
+
3
+ export default class extends ApplicationController {
4
+ static outlets = ['checkbox-select']
5
+
6
+ connect () {
7
+ if (!this.hasCheckboxSelectOutlet) {
8
+ // Set default outlet if none specified
9
+ this.element.setAttribute(`data-${this.identifier}-checkbox-select-outlet`, '.trestle-table')
10
+ }
11
+
12
+ this.baseHref = this.element.href
13
+
14
+ this.update()
15
+ }
16
+
17
+ update () {
18
+ this.toggleEnabled()
19
+ this.updateHref()
20
+ }
21
+
22
+ toggleEnabled () {
23
+ this.element.classList.toggle('disabled', this.checkboxes.length === 0)
24
+ }
25
+
26
+ updateHref () {
27
+ this.element.href = this.hrefWithSelectedIds
28
+ }
29
+
30
+ get checkboxes () {
31
+ if (this.hasCheckboxSelectOutlet) {
32
+ return this.checkboxSelectOutlet.checked
33
+ } else {
34
+ return []
35
+ }
36
+ }
37
+
38
+ get selectedIds () {
39
+ return this.checkboxes.map(c => c.value)
40
+ }
41
+
42
+ get hrefWithSelectedIds () {
43
+ const ids = this.selectedIds
44
+
45
+ if (ids.length) {
46
+ return `${this.baseHref}?ids=${ids.join(',')}`
47
+ } else {
48
+ return this.baseHref
49
+ }
50
+ }
51
+
52
+ checkboxSelectOutletConnected (outlet, element) {
53
+ element.addEventListener('checkbox-select:change', this.update.bind(this))
54
+ }
55
+
56
+ checkboxSelectOutletDisconnected (outlet, element) {
57
+ element.removeEventListener('checkbox-select:change', this.update.bind(this))
58
+ }
59
+ }
@@ -5,6 +5,7 @@ export default class extends ApplicationController {
5
5
 
6
6
  toggle () {
7
7
  this.updateSelectAllState()
8
+ this.dispatch('change')
8
9
  }
9
10
 
10
11
  toggleAll () {
@@ -13,6 +14,8 @@ export default class extends ApplicationController {
13
14
  this.checkboxTargets.forEach((checkbox) => {
14
15
  checkbox.checked = isChecked
15
16
  })
17
+
18
+ this.dispatch('change')
16
19
  }
17
20
 
18
21
  updateSelectAllState () {
@@ -1,3 +1,5 @@
1
+ require "turbo-rails"
2
+
1
3
  module Trestle
2
4
  class Engine < ::Rails::Engine
3
5
  isolate_namespace Trestle
@@ -30,22 +32,6 @@ module Trestle
30
32
  end
31
33
  end
32
34
 
33
- initializer "turbo.mimetype" do
34
- Mime::Type.register "text/vnd.turbo-stream.html", :turbo_stream unless Mime[:turbo_stream]
35
- end
36
-
37
- initializer "turbo.renderer" do
38
- ActiveSupport.on_load(:action_controller) do
39
- # Compatibility fix for Rails 5.2
40
- delegate :media_type, to: "@_response" unless instance_methods.include?(:media_type)
41
-
42
- ActionController::Renderers.add :turbo_stream do |turbo_streams_html, options|
43
- self.content_type = Mime[:turbo_stream] if media_type.nil?
44
- turbo_streams_html
45
- end
46
- end
47
- end
48
-
49
35
  config.to_prepare do
50
36
  Engine.reset_helpers!
51
37
  end
@@ -55,6 +41,22 @@ module Trestle
55
41
  reloader.install(app) unless app.config.eager_load
56
42
  end
57
43
 
44
+ # For compatibility with the `sassc-rails`` gem, register a custom compressor that excludes the
45
+ # Trestle admin stylesheets as a) they are already minimized and b) libsass is not compatible with
46
+ # some of the newer CSS syntax that is used.
47
+ #
48
+ # To avoid this being necessary, it is recommended that either
49
+ # 1) `sassc-rails` is removed from the Gemfile (if not required),
50
+ # 2) the `sassc-embedded` gem is added to the Gemfile, or
51
+ # 3) `sassc-rails` is replaced with `dartsass-sprockets`
52
+ config.assets.configure do |env|
53
+ if original_compressor = config.assets.css_compressor
54
+ require "trestle/sprockets_compressor"
55
+ original_compressor = Sprockets.compressors['text/css'][original_compressor] if original_compressor.is_a?(Symbol)
56
+ config.assets.css_compressor = Trestle::SprocketsCompressor.new(original_compressor)
57
+ end
58
+ end if defined?(SassC::Rails)
59
+
58
60
  def reset_helpers!
59
61
  @helpers = nil
60
62
  end
@@ -5,20 +5,30 @@ module Trestle
5
5
  delegate :admin, :instance, to: :@template
6
6
  delegate :translate, :t, to: :admin
7
7
 
8
- def new
9
- link(t("buttons.new", default: "New %{model_name}"), action: :new, style: :light, icon: "fa fa-plus", class: "btn-new-resource") if action?(:new)
8
+ def new(label: t("buttons.new", default: "New %{model_name}"), **attrs)
9
+ return unless action?(:new)
10
+
11
+ defaults = { action: :new, style: :light, icon: "fa fa-plus", class: "btn-new-resource" }
12
+ link(label, defaults.merge(attrs))
10
13
  end
11
14
 
12
- def save
13
- button(t("buttons.save", default: "Save %{model_name}"), style: :success)
15
+ def save(label: t("buttons.save", default: "Save %{model_name}"), **attrs)
16
+ defaults = { style: :success }
17
+ button(label, defaults.merge(attrs))
14
18
  end
15
19
 
16
- def delete
17
- link(t("buttons.delete", default: "Delete %{model_name}"), instance, action: :destroy, style: :danger, icon: "fa fa-trash", data: { turbo_method: "delete", controller: "confirm-delete", confirm_delete_placement_value: "bottom" }) if action?(:destroy)
20
+ def delete(label: t("buttons.delete", default: "Delete %{model_name}"), **attrs)
21
+ return unless action?(:destroy)
22
+
23
+ defaults = Trestle::Options.new(action: :destroy, style: :danger, icon: "fa fa-trash", data: { turbo_method: "delete", controller: "confirm-delete", confirm_delete_placement_value: "bottom" })
24
+ link(label, instance, defaults.merge(attrs))
18
25
  end
19
26
 
20
- def dismiss
21
- button(t("buttons.ok", default: "OK"), style: :light, data: { bs_dismiss: "modal" }) if @template.modal_request?
27
+ def dismiss(label: t("buttons.ok", default: "OK"), **attrs)
28
+ return unless @template.modal_request?
29
+
30
+ defaults = Trestle::Options.new(type: :button, style: :light, data: { bs_dismiss: "modal" })
31
+ button(label, defaults.merge(attrs))
22
32
  end
23
33
  alias ok dismiss
24
34
 
@@ -0,0 +1,16 @@
1
+ module Trestle
2
+ class SprocketsCompressor
3
+ def initialize(original_compressor, excluded_files: ["trestle/admin"])
4
+ @original_compressor = original_compressor
5
+ @excluded_files = excluded_files
6
+ end
7
+
8
+ def call(input)
9
+ if @excluded_files.include?(input[:name])
10
+ input[:data]
11
+ else
12
+ @original_compressor.call(input)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -21,11 +21,10 @@ module Trestle
21
21
  end
22
22
 
23
23
  private
24
- def respond_to_missing?(name, include_all=false)
25
- builder.respond_to?(name) || super
26
- end
24
+ def self.ruby2_keywords(*)
25
+ end unless respond_to?(:ruby2_keywords, true)
27
26
 
28
- def method_missing(name, *args, &block)
27
+ ruby2_keywords def method_missing(name, *args, &block)
29
28
  result = builder.send(name, *args, &block)
30
29
 
31
30
  if builder.builder_methods.include?(name)
@@ -34,6 +33,10 @@ module Trestle
34
33
  result
35
34
  end
36
35
  end
36
+
37
+ def respond_to_missing?(name, include_all=false)
38
+ builder.respond_to?(name) || super
39
+ end
37
40
  end
38
41
  end
39
42
  end
@@ -28,13 +28,17 @@ module Trestle
28
28
  end
29
29
 
30
30
  class Builder
31
- delegate :admin_link_to, :content_tag, to: :@template
31
+ delegate :admin_link_to, :content_tag, :tag, to: :@template
32
32
 
33
33
  def initialize(menu, template)
34
34
  @menu, @template = menu, template
35
35
  end
36
36
 
37
37
  def link(content, instance_or_url=nil, options={}, &block)
38
+ if instance_or_url.is_a?(Hash)
39
+ instance_or_url, options = nil, instance_or_url
40
+ end
41
+
38
42
  options[:class] = Array(options[:class])
39
43
  options[:class] << "dropdown-item"
40
44
 
@@ -42,16 +46,15 @@ module Trestle
42
46
  end
43
47
 
44
48
  def header(text)
45
- item(class: "dropdown-header") { text }
49
+ item { content_tag(:h6, text, class: "dropdown-header") }
46
50
  end
47
51
 
48
52
  def divider
49
- item(class: "divider")
53
+ item { tag(:hr, class: "dropdown-divider") }
50
54
  end
51
55
 
52
56
  def item(options={}, &block)
53
- opts = { role: "presentation" }.merge(options)
54
- item = block_given? ? content_tag(:li, opts, &block) : content_tag(:li, "", opts)
57
+ item = block_given? ? content_tag(:li, options, &block) : content_tag(:li, "", options)
55
58
 
56
59
  @menu.items << item
57
60
 
@@ -1,3 +1,3 @@
1
1
  module Trestle
2
- VERSION = "0.10.0.pre"
2
+ VERSION = "0.10.0.pre2"
3
3
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trestle",
3
- "version": "0.10.0.pre",
3
+ "version": "0.10.0-pre2",
4
4
  "description": "A modern, responsive admin framework for Ruby on Rails",
5
5
  "homepage": "https://trestle.io",
6
6
  "repository": "https://github.com/TrestleAdmin/trestle.git",
data/trestle.gemspec CHANGED
@@ -18,19 +18,15 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = ">= 2.2.2"
21
+ spec.required_ruby_version = ">= 2.6.0"
22
22
 
23
- spec.add_dependency "railties", ">= 5.2.0"
24
- spec.add_dependency "activemodel", ">= 5.2.0"
25
- spec.add_dependency "kaminari", ">= 1.1.0"
23
+ spec.add_dependency "railties", ">= 6.0.0"
24
+ spec.add_dependency "activemodel", ">= 6.0.0"
25
+ spec.add_dependency "turbo-rails", ">= 2.0.0"
26
+ spec.add_dependency "kaminari", ">= 1.1.0"
26
27
 
27
28
  spec.add_development_dependency "rspec-rails", ">= 5.1.2"
28
29
  spec.add_development_dependency "rspec-html-matchers", "~> 0.10.0"
29
30
  spec.add_development_dependency "database_cleaner", "~> 2.0.2"
30
31
  spec.add_development_dependency "ammeter", "~> 1.1.5"
31
- spec.add_development_dependency "i18n-js", "~> 4.2.3"
32
-
33
- spec.add_development_dependency "bundler"
34
- spec.add_development_dependency "rake"
35
- spec.add_development_dependency "sqlite3"
36
32
  end
data/yarn.lock CHANGED
@@ -232,16 +232,16 @@
232
232
  dependencies:
233
233
  "@babel/types" "^7.24.7"
234
234
 
235
- "@babel/helper-string-parser@^7.24.1":
236
- version "7.24.1"
237
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e"
238
- integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
239
-
240
235
  "@babel/helper-string-parser@^7.24.7":
241
236
  version "7.24.7"
242
237
  resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2"
243
238
  integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==
244
239
 
240
+ "@babel/helper-string-parser@^7.24.8":
241
+ version "7.24.8"
242
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d"
243
+ integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==
244
+
245
245
  "@babel/helper-validator-identifier@^7.24.5", "@babel/helper-validator-identifier@^7.24.7":
246
246
  version "7.24.7"
247
247
  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db"
@@ -979,13 +979,13 @@
979
979
  debug "^4.3.1"
980
980
  globals "^11.1.0"
981
981
 
982
- "@babel/types@^7.22.5":
983
- version "7.24.5"
984
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7"
985
- integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==
982
+ "@babel/types@^7.18.6":
983
+ version "7.24.9"
984
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73"
985
+ integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==
986
986
  dependencies:
987
- "@babel/helper-string-parser" "^7.24.1"
988
- "@babel/helper-validator-identifier" "^7.24.5"
987
+ "@babel/helper-string-parser" "^7.24.8"
988
+ "@babel/helper-validator-identifier" "^7.24.7"
989
989
  to-fast-properties "^2.0.0"
990
990
 
991
991
  "@babel/types@^7.24.7", "@babel/types@^7.4.4":
@@ -1549,25 +1549,10 @@ caniuse-api@^3.0.0:
1549
1549
  lodash.memoize "^4.1.2"
1550
1550
  lodash.uniq "^4.5.0"
1551
1551
 
1552
- caniuse-lite@^1.0.0:
1553
- version "1.0.30001520"
1554
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz#62e2b7a1c7b35269594cf296a80bdf8cb9565006"
1555
- integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==
1556
-
1557
- caniuse-lite@^1.0.30001517:
1558
- version "1.0.30001585"
1559
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz#0b4e848d84919c783b2a41c13f7de8ce96744401"
1560
- integrity sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==
1561
-
1562
- caniuse-lite@^1.0.30001599:
1563
- version "1.0.30001621"
1564
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz#4adcb443c8b9c8303e04498318f987616b8fea2e"
1565
- integrity sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==
1566
-
1567
- caniuse-lite@^1.0.30001629:
1568
- version "1.0.30001638"
1569
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz#598e1f0c2ac36f37ebc3f5b8887a32ca558e5d56"
1570
- integrity sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==
1552
+ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001629:
1553
+ version "1.0.30001643"
1554
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz"
1555
+ integrity sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==
1571
1556
 
1572
1557
  chalk@^2.4.2:
1573
1558
  version "2.4.2"
@@ -2459,7 +2444,7 @@ ms@2.1.2:
2459
2444
  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
2460
2445
  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
2461
2446
 
2462
- nanoid@^3.3.7:
2447
+ nanoid@^3.3.6, nanoid@^3.3.7:
2463
2448
  version "3.3.7"
2464
2449
  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
2465
2450
  integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
@@ -3107,7 +3092,7 @@ slash@^4.0.0:
3107
3092
  resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
3108
3093
  integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
3109
3094
 
3110
- "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0:
3095
+ "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.0:
3111
3096
  version "1.2.0"
3112
3097
  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
3113
3098
  integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trestle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0.pre
4
+ version: 0.10.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Pohlenz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-03 00:00:00.000000000 Z
11
+ date: 2024-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -16,28 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.0
19
+ version: 6.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.0
26
+ version: 6.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 5.2.0
33
+ version: 6.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 5.2.0
40
+ version: 6.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: turbo-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: kaminari
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -108,62 +122,6 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: 1.1.5
111
- - !ruby/object:Gem::Dependency
112
- name: i18n-js
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 4.2.3
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 4.2.3
125
- - !ruby/object:Gem::Dependency
126
- name: bundler
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: rake
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: sqlite3
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
125
  description: Trestle is a modern, responsive admin framework for Ruby on Rails.
168
126
  email:
169
127
  - sam@sampohlenz.com
@@ -174,6 +132,7 @@ files:
174
132
  - ".babelrc"
175
133
  - ".browserslistrc"
176
134
  - ".gitattributes"
135
+ - ".github/workflows/release.yml"
177
136
  - ".github/workflows/rspec.yml"
178
137
  - ".gitignore"
179
138
  - ".rspec"
@@ -285,7 +244,7 @@ files:
285
244
  - app/controllers/concerns/trestle/controller/modal.rb
286
245
  - app/controllers/concerns/trestle/controller/title.rb
287
246
  - app/controllers/concerns/trestle/controller/toolbars.rb
288
- - app/controllers/concerns/trestle/controller/turbo.rb
247
+ - app/controllers/concerns/trestle/controller/turbo_stream.rb
289
248
  - app/controllers/concerns/trestle/resource/controller/actions.rb
290
249
  - app/controllers/concerns/trestle/resource/controller/data_methods.rb
291
250
  - app/controllers/concerns/trestle/resource/controller/redirection.rb
@@ -318,7 +277,9 @@ files:
318
277
  - app/helpers/trestle/timestamp_helper.rb
319
278
  - app/helpers/trestle/title_helper.rb
320
279
  - app/helpers/trestle/toolbars_helper.rb
321
- - app/helpers/trestle/turbo_frame_helper.rb
280
+ - app/helpers/trestle/turbo/frame_helper.rb
281
+ - app/helpers/trestle/turbo/stream_helper.rb
282
+ - app/helpers/trestle/turbo/tag_builder.rb
322
283
  - app/helpers/trestle/url_helper.rb
323
284
  - app/views/kaminari/trestle/_first_page.html.erb
324
285
  - app/views/kaminari/trestle/_gap.html.erb
@@ -391,6 +352,7 @@ files:
391
352
  - frontend/css/components/_datepicker.scss
392
353
  - frontend/css/components/_dropdown.scss
393
354
  - frontend/css/components/_forms.scss
355
+ - frontend/css/components/_grid.scss
394
356
  - frontend/css/components/_media-grid.scss
395
357
  - frontend/css/components/_modal.scss
396
358
  - frontend/css/components/_pagination.scss
@@ -414,9 +376,10 @@ files:
414
376
  - frontend/css/icons/_fontawesome.scss
415
377
  - frontend/css/index.scss
416
378
  - frontend/css/layout/_base.scss
417
- - frontend/css/layout/_content.scss
379
+ - frontend/css/layout/_content-header.scss
418
380
  - frontend/css/layout/_footer.scss
419
381
  - frontend/css/layout/_header.scss
382
+ - frontend/css/layout/_main-content.scss
420
383
  - frontend/css/layout/_navigation.scss
421
384
  - frontend/css/layout/_sidebar.scss
422
385
  - frontend/css/support/_sprockets.scss
@@ -427,6 +390,7 @@ files:
427
390
  - frontend/images/bright-squares.png
428
391
  - frontend/index.js
429
392
  - frontend/js/controllers/application_controller.js
393
+ - frontend/js/controllers/batch_action_controller.js
430
394
  - frontend/js/controllers/checkbox_select_controller.js
431
395
  - frontend/js/controllers/confirm_controller.js
432
396
  - frontend/js/controllers/confirm_delete_controller.js
@@ -565,6 +529,7 @@ files:
565
529
  - lib/trestle/scopes/block.rb
566
530
  - lib/trestle/scopes/definition.rb
567
531
  - lib/trestle/scopes/scope.rb
532
+ - lib/trestle/sprockets_compressor.rb
568
533
  - lib/trestle/tab.rb
569
534
  - lib/trestle/table.rb
570
535
  - lib/trestle/table/actions_column.rb
@@ -587,7 +552,7 @@ homepage: https://www.trestle.io
587
552
  licenses:
588
553
  - LGPL-3.0-only
589
554
  metadata: {}
590
- post_install_message:
555
+ post_install_message:
591
556
  rdoc_options: []
592
557
  require_paths:
593
558
  - lib
@@ -595,7 +560,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
595
560
  requirements:
596
561
  - - ">="
597
562
  - !ruby/object:Gem::Version
598
- version: 2.2.2
563
+ version: 2.6.0
599
564
  required_rubygems_version: !ruby/object:Gem::Requirement
600
565
  requirements:
601
566
  - - ">="
@@ -603,7 +568,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
603
568
  version: '0'
604
569
  requirements: []
605
570
  rubygems_version: 3.5.11
606
- signing_key:
571
+ signing_key:
607
572
  specification_version: 4
608
573
  summary: A modern, responsive admin framework for Ruby on Rails
609
574
  test_files: []
@@ -1,21 +0,0 @@
1
- module Trestle
2
- module Controller
3
- module Turbo
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- etag { :frame if turbo_frame_request? }
8
- helper_method :turbo_frame_request?, :turbo_frame_request_id
9
- end
10
-
11
- private
12
- def turbo_frame_request?
13
- turbo_frame_request_id.present?
14
- end
15
-
16
- def turbo_frame_request_id
17
- request.headers["Turbo-Frame"]
18
- end
19
- end
20
- end
21
- end
@@ -1,34 +0,0 @@
1
- module Trestle
2
- module TurboFrameHelper
3
- def index_turbo_frame(options={}, &block)
4
- defaults = {
5
- id: "index",
6
- data: {
7
- controller: "reloadable",
8
- turbo_action: "advance"
9
- }
10
- }
11
-
12
- content_tag("turbo-frame", defaults.merge(options), &block)
13
- end
14
-
15
- def resource_turbo_frame(instance, options={}, &block)
16
- defaults = {
17
- id: dom_id(instance),
18
- target: ("_top" unless modal_request?),
19
- data: {
20
- controller: resource_turbo_frame_controllers.join(" ").presence
21
- }
22
- }
23
-
24
- content_tag("turbo-frame", defaults.merge(options), &block)
25
- end
26
-
27
- def resource_turbo_frame_controllers
28
- controllers = []
29
- controllers << "modal-frame" if modal_request?
30
- controllers << "deprecated--init" if modal_request? || request.post? || turbo_frame_request?
31
- controllers
32
- end
33
- end
34
- end