plutonium 0.15.14 → 0.15.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  <%= render Plutonium::UI::Layout::Header.new do |header| %>
2
2
  <% header.with_brand_logo do %>
3
- <%= resource_logo_tag(classname: "mr-3 h-10") %>
3
+ <%= resource_logo_tag(classname: "h-10") %>
4
4
  <% end %>
5
5
 
6
6
  <% header.with_action do %>
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../lib/plutonium_generators"
4
+
5
+ module Pu
6
+ module Gem
7
+ class StateMachinesGenerator < Rails::Generators::Base
8
+ include PlutoniumGenerators::Generator
9
+
10
+ desc "Set up state_machines"
11
+
12
+ def start
13
+ bundle "state_machines"
14
+ bundle "state_machines-activerecord"
15
+ rescue => e
16
+ exception "#{self.class} failed:", e
17
+ end
18
+ end
19
+ end
20
+ end
@@ -29,19 +29,26 @@ module Plutonium
29
29
 
30
30
  class Form < Plutonium::UI::Form::Interaction; end
31
31
 
32
+ class << self
33
+ def call(...)
34
+ new(...).call
35
+ end
36
+
37
+ def build_form(instance)
38
+ raise ArgumentError, "instance is required" unless instance
39
+
40
+ self::Form.new(instance)
41
+ end
42
+ end
43
+
32
44
  config_attr :turbo
33
45
  defineable_props :field, :input
34
46
 
35
- # Executes the interaction with the given arguments.
36
- #
37
- # @param args [Hash] The arguments to initialize the interaction.
38
- # @return [Plutonium::Interaction::Outcome] The result of the interaction.
39
- def self.call(**args)
40
- new(**args).call
41
- end
47
+ attr_reader :view_context
42
48
 
43
- def self.build_form(instance)
44
- self::Form.new(instance || new)
49
+ def initialize(view_context:, **attributes)
50
+ super(attributes)
51
+ @view_context = view_context
45
52
  end
46
53
 
47
54
  def build_form
@@ -101,6 +108,10 @@ module Plutonium
101
108
  def failure
102
109
  Plutonium::Interaction::Outcome::Failure.new
103
110
  end
111
+
112
+ def current_user
113
+ view_context.controller.helpers.current_user
114
+ end
104
115
  end
105
116
  end
106
117
  end
@@ -215,13 +215,13 @@ module Plutonium
215
215
  end
216
216
 
217
217
  def build_interactive_record_action_interaction
218
- @interaction = current_interactive_action.interaction.new
218
+ @interaction = current_interactive_action.interaction.new(view_context:)
219
219
  @interaction.attributes = interaction_params.merge(resource: resource_record)
220
220
  @interaction
221
221
  end
222
222
 
223
223
  def build_interactive_resource_action_interaction
224
- @interaction = current_interactive_action.interaction.new
224
+ @interaction = current_interactive_action.interaction.new(view_context:)
225
225
  @interaction.attributes = interaction_params
226
226
  @interaction
227
227
  end
@@ -231,7 +231,7 @@ module Plutonium
231
231
  def submitted_interaction_params
232
232
  @submitted_interaction_params ||= current_interactive_action
233
233
  .interaction
234
- .build_form(nil)
234
+ .build_form(current_interactive_action.interaction.new(view_context:))
235
235
  .extract_input(params, view_context:)[:interaction]
236
236
  end
237
237
 
@@ -23,7 +23,7 @@ module Plutonium
23
23
 
24
24
  # Renders the color mode selector
25
25
  # @return [void]
26
- def template
26
+ def view_template
27
27
  div(data_controller: "resource-drop-down") do
28
28
  render_dropdown_trigger
29
29
  render_dropdown_menu
@@ -39,6 +39,7 @@ module Plutonium
39
39
  :resource_name_plural,
40
40
  :display_name_of,
41
41
  :resource_url_for,
42
+ :current_user,
42
43
  :current_definition,
43
44
  :current_query_object,
44
45
  :raw_resource_query_params,
@@ -79,7 +79,7 @@ module Plutonium
79
79
  field_options = field_options.except(:as)
80
80
  wrapper_options = display_options.except(:tag, :as)
81
81
  render field(name, **field_options).wrapped(**wrapper_options) do |f|
82
- render tag_block.call(f)
82
+ render instance_exec(f, &tag_block)
83
83
  end
84
84
  end
85
85
  end
@@ -160,14 +160,14 @@ module Plutonium
160
160
  def render_multiple_nested_fields(context)
161
161
  nesting_method = :nest_many
162
162
  options = {default: {NEW_RECORD: context.blank_object}}
163
- render_template_for_nested_fields(context, options, nesting_method:)
163
+ render_template_for_nested_fields(context, options.merge(collection: {NEW_RECORD: context.blank_object}), nesting_method:)
164
164
  render_existing_nested_fields(context, options, nesting_method:)
165
165
  end
166
166
 
167
167
  def render_single_nested_field(context)
168
168
  nesting_method = :nest_one
169
169
  options = {default: context.blank_object}
170
- render_template_for_nested_fields(context, options, nesting_method:)
170
+ render_template_for_nested_fields(context, options.merge(object: context.blank_object), nesting_method:)
171
171
  render_existing_nested_fields(context, options, nesting_method:)
172
172
  end
173
173
 
@@ -267,8 +267,8 @@ module Plutonium
267
267
  you can either pass in a block:
268
268
  ```ruby
269
269
  nested_input :#{name} do |definition|
270
- input :city
271
- input :country
270
+ definition.input :city
271
+ definition.input :country
272
272
  end
273
273
  ```
274
274
 
@@ -9,12 +9,12 @@ module Plutonium
9
9
  def initialize(*, query_object:, page_size:, attributes: {}, **options, &)
10
10
  options[:as] = :q
11
11
  options[:method] = :get
12
- attributes.deep_merge!(
12
+ attributes = mix(attributes.deep_merge(
13
13
  id: :search_form,
14
14
  class!: "space-y-2 mb-4",
15
15
  controller: "form",
16
16
  data: {controller: "form", turbo_frame: nil}
17
- )
17
+ ))
18
18
  super(*, attributes:, **options, &)
19
19
 
20
20
  @query_object = query_object
@@ -97,6 +97,8 @@ module Plutonium
97
97
  end
98
98
 
99
99
  def render_filter_fields
100
+ return if query_object.filter_definitions.blank?
101
+
100
102
  div(class: "flex flex-wrap items-center gap-4") do
101
103
  span(class: "text-sm font-medium text-gray-900 dark:text-white") { "Filters:" }
102
104
  div(class: "flex flex-wrap items-center gap-4 mr-auto") do
@@ -162,7 +164,7 @@ module Plutonium
162
164
  field_options = field_options.except(:as)
163
165
  nested.field(name, **field_options) do |f|
164
166
  f.placeholder(f.label) unless f.placeholder
165
- render tag_block.call(f)
167
+ render instance_exec(f, &tag_block)
166
168
  end
167
169
  end
168
170
  end
@@ -37,7 +37,7 @@ module Plutonium
37
37
 
38
38
  def render_resource_field(name)
39
39
  when_permitted(name) do
40
- if resource_definition.defined_nested_inputs[name]
40
+ if resource_definition.respond_to?(:defined_nested_inputs) && resource_definition.defined_nested_inputs[name]
41
41
  render_nested_resource_field(name)
42
42
  else
43
43
  render_simple_resource_field(name, resource_definition, self)
@@ -75,7 +75,7 @@ module Plutonium
75
75
  end
76
76
 
77
77
  render form.field(name, **field_options).wrapped(**wrapper_options) do |f|
78
- render tag_block.call(f)
78
+ render instance_exec(f, &tag_block)
79
79
  end
80
80
  end
81
81
 
@@ -112,7 +112,7 @@ module Plutonium
112
112
  end
113
113
 
114
114
  def render_favicon_tag
115
- favicon_link_tag(Plutonium.configuration.assets.favicon)
115
+ favicon_link_tag(Plutonium.configuration.assets.favicon) if Plutonium.configuration.assets.favicon
116
116
  end
117
117
 
118
118
  def render_assets_tags
@@ -84,7 +84,7 @@ module Plutonium
84
84
  # Renders the brand section with logo and/or name
85
85
  # @private
86
86
  def render_brand
87
- a(href: root_path, class: "flex items-center justify-between md:min-w-60") do
87
+ a(href: root_path, class: "flex items-center space-x-2 md:min-w-60") do
88
88
  render brand_logo_slot if brand_logo_slot?
89
89
  if brand_name_slot?
90
90
  span(class: "self-center text-2xl font-semibold whitespace-nowrap dark:text-white hidden xs:block") do
@@ -97,11 +97,11 @@ module Plutonium
97
97
  # Renders the toggle icons for the sidebar button
98
98
  # @private
99
99
  def render_toggle_icons
100
- span(data_header_target: "open") do
100
+ span(data_header_target: "openIcon") do
101
101
  render Phlex::TablerIcons::Menu.new(class: "w-6 h-6")
102
102
  end
103
103
 
104
- span(data_header_target: "close", class: "hidden", aria_hidden: "true") do
104
+ span(data_header_target: "closeIcon", class: "hidden", aria_hidden: "true") do
105
105
  render Phlex::TablerIcons::X.new(class: "w-6 h-6")
106
106
  end
107
107
 
@@ -9,8 +9,6 @@ module Plutonium
9
9
  # ...
10
10
  # end
11
11
  class Sidebar < Base
12
- include Phlex::Slotable
13
-
14
12
  # Renders the sidebar navigation template
15
13
  # @yield [void] The block containing sidebar content
16
14
  # @return [void]
@@ -1,5 +1,5 @@
1
1
  module Plutonium
2
- VERSION = "0.15.14"
2
+ VERSION = "0.15.16"
3
3
  NEXT_MAJOR_VERSION = VERSION.split(".").tap { |v|
4
4
  v[1] = v[1].to_i + 1
5
5
  v[2] = 0
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@radioactive-labs/plutonium",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@radioactive-labs/plutonium",
9
- "version": "0.1.8",
9
+ "version": "0.1.9",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@hotwired/stimulus": "^3.2.2",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radioactive-labs/plutonium",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Core assets for the Plutonium gem",
5
5
  "type": "module",
6
6
  "main": "src/js/core.js",
@@ -1,7 +1,7 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
2
 
3
3
  export default class extends Controller {
4
- static targets = ["open", "close"]
4
+ static targets = ["openIcon", "closeIcon"]
5
5
  static outlets = ["sidebar"]
6
6
  static values = {
7
7
  placement: { type: String, default: "left" },
@@ -57,11 +57,11 @@ export default class extends Controller {
57
57
  }
58
58
 
59
59
  // Toggle visibility and ARIA attributes of icons
60
- this.openTarget.classList.add("hidden")
61
- this.openTarget.setAttribute("aria-hidden", "true")
60
+ this.openIconTarget.classList.add("hidden")
61
+ this.openIconTarget.setAttribute("aria-hidden", "true")
62
62
 
63
- this.closeTarget.classList.remove("hidden")
64
- this.closeTarget.setAttribute("aria-hidden", "false")
63
+ this.closeIconTarget.classList.remove("hidden")
64
+ this.closeIconTarget.setAttribute("aria-hidden", "false")
65
65
 
66
66
  // Rest of the method stays same...
67
67
  this.sidebarOutlet.element.setAttribute("aria-modal", "true")
@@ -88,11 +88,11 @@ export default class extends Controller {
88
88
  }
89
89
 
90
90
  // Toggle visibility and ARIA attributes of icons
91
- this.openTarget.classList.remove("hidden")
92
- this.openTarget.setAttribute("aria-hidden", "false")
91
+ this.openIconTarget.classList.remove("hidden")
92
+ this.openIconTarget.setAttribute("aria-hidden", "false")
93
93
 
94
- this.closeTarget.classList.add("hidden")
95
- this.closeTarget.setAttribute("aria-hidden", "true")
94
+ this.closeIconTarget.classList.add("hidden")
95
+ this.closeIconTarget.setAttribute("aria-hidden", "true")
96
96
 
97
97
  // Rest of the method stays same...
98
98
  this.sidebarOutlet.element.setAttribute("aria-hidden", "true")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plutonium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.14
4
+ version: 0.15.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Froelich
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-18 00:00:00.000000000 Z
11
+ date: 2024-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk
@@ -1128,6 +1128,7 @@ files:
1128
1128
  - lib/generators/pu/gem/letter_opener/letter_opener_generator.rb
1129
1129
  - lib/generators/pu/gem/redis/redis_generator.rb
1130
1130
  - lib/generators/pu/gem/standard/standard_generator.rb
1131
+ - lib/generators/pu/gem/state_machines/state_machines_generator.rb
1131
1132
  - lib/generators/pu/gen/component/component_generator.rb
1132
1133
  - lib/generators/pu/gen/component/templates/component.html.erb.tt
1133
1134
  - lib/generators/pu/gen/component/templates/component.rb.tt