avo-rhino_field 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ @import "./../../../node_modules/rhino-editor/exports/styles/trix.css";
2
+
3
+ @tailwind base;
4
+ @tailwind components;
5
+ @tailwind utilities;
6
+
7
+ .rhino-editor .rhino-toolbar-button,
8
+ .rhino-editor::part(toolbar__button) {
9
+ --rhino-toolbar-icon-size: 18px;
10
+ @apply flex items-center justify-center border-none;
11
+
12
+ &:hover {
13
+ @apply shadow-none bg-gray-100;
14
+ }
15
+ }
16
+
17
+ .hidden-until-rhino-boots-up {
18
+ @apply !hidden;
19
+ }
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
2
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12h.01M6 12h.01M9 16h.01M6 16h.01M12 12h.01M12 16h.01M15 12h.01M18 12h.01M15 16h.01M18 16h.01m-4.51-2h.01m-.01 4h.01m-3.01-4h.01m-.01 4h.01M7.5 14h.01m-.01 4h.01M17 14h.01M17 18h.01M5.75 19.25h12.5a1 1 0 0 0 1-1V5.75a1 1 0 0 0-1-1H5.75a1 1 0 0 0-1 1v12.5a1 1 0 0 0 1 1Z"></path>
3
+ </svg>
@@ -0,0 +1,58 @@
1
+ <%= field_wrapper **field_wrapper_args, full_width: true do %>
2
+ <%= content_tag :div, class: "relative block overflow-x-auto max-w-4xl" do %>
3
+ <%= content_tag 'avo-rhino-editor',
4
+ data: {
5
+ controller: "rhino-field",
6
+ blob_url_template: helpers.main_app.rails_service_blob_url(":signed_id", ":filename"),
7
+ direct_upload_url: helpers.main_app.rails_direct_uploads_url,
8
+ action: "rhino-before-initialize->rhino-field#onRhinoBeforeInitialize rhino-initialize->rhino-field#onRhinoInitialize rhino-change->rhino-field#onRhinoChange rhino-paste->rhino-field#onRhinoPaste rhino-selection-change->rhino-field#onRhinoSelectionChange rhino-focus->rhino-field#onRhinoFocus rhino-blur->rhino-field#onRhinoBlur rhino-file-accept->rhino-field#onRhinoFileAccept rhino-attachment-add->rhino-field#onRhinoAttachmentAdd rhino-attachment-remove->rhino-field#onRhinoAttachmentRemove",
9
+ **@field.get_html(:data, view: view, element: :input)
10
+ },
11
+ input: field_id,
12
+ placeholder: @field.placeholder do %>
13
+ <button
14
+ type="button"
15
+ slot="after-link-button"
16
+ class="toolbar__button rhino-toolbar-button flex flex-col items-center grow-0 text-sm hidden-until-rhino-boots-up"
17
+ data-role="toolbar-item"
18
+ tabindex="-1"
19
+ data-action="click->rhino-field#openTextColorPicker"
20
+ >
21
+ <%= helpers.svg "heroicons/outline/swatch", class: "!min-h-4 !max-h-4" %>
22
+ <input
23
+ type="color"
24
+ slot="after-undo-button"
25
+ data-action="input->rhino-field#setTextColor"
26
+ data-rhino-field-target="textColorInput"
27
+ class="h-3.5 w-5 bg-transparent -mt-px -mb-1"
28
+ />
29
+ </button>
30
+ <button
31
+ type="button"
32
+ slot="after-link-button"
33
+ class="toolbar__button rhino-toolbar-button flex flex-col items-center grow-0 text-sm hidden-until-rhino-boots-up"
34
+ data-role="toolbar-item"
35
+ tabindex="-1"
36
+ data-action="click->rhino-field#openBackgroundColorPicker"
37
+ >
38
+ <%= helpers.svg "avo/gradient", class: "!min-h-4 !max-h-4" %>
39
+ <input
40
+ type="color"
41
+ slot="after-undo-button"
42
+ data-action="input->rhino-field#setBackgroundColor"
43
+ data-rhino-field-target="backgroundColorInput"
44
+ class="h-3.5 w-5 bg-transparent -mt-px -mb-1"
45
+ />
46
+ </button>
47
+ <% end %>
48
+ <%= @form.text_area @field.id,
49
+ value: @field.value.try(:to_trix_html) || @field.value,
50
+ class: classes("w-full hidden"),
51
+ data: @field.get_html(:data, view: view, element: :input),
52
+ disabled: disabled?,
53
+ id: field_id,
54
+ placeholder: @field.placeholder,
55
+ style: @field.get_html(:style, view: view, element: :input)
56
+ %>
57
+ <% end %>
58
+ <% end %>
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Fields::RhinoField::EditComponent < Avo::Fields::EditComponent
4
+ attr_reader :resource
5
+
6
+ def initialize(**args)
7
+ @resource = args[:resource]
8
+ @resource_id = args[:resource_id] || @resource&.record&.to_param
9
+ @resource_name = args[:resource_name] || @resource&.singular_route_key
10
+
11
+ super(**args)
12
+ end
13
+
14
+ def field_id
15
+ if @resource_name.present?
16
+ "rhino_#{@resource_name}_#{@field.id}"
17
+ elsif form.present?
18
+ "rhino_#{form.index}_#{@field.id}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ <%= field_wrapper **field_wrapper_args do %>
2
+ <%
3
+ content_classes = 'trix-content py-2 max-w-4xl'
4
+ content_classes << ' hidden' unless @field.always_show
5
+ %>
6
+ <div data-controller="hidden-input">
7
+ <% unless @field.always_show %>
8
+ <%= link_to t('avo.show_content'), 'javascript:void(0);', class: 'font-bold inline-block', data: { action: 'click->hidden-input#showContent' } %>
9
+ <% end %>
10
+ <div class="<%= content_classes %> " data-hidden-input-target="content">
11
+ <%= @field.value.html_safe %>
12
+ </div>
13
+ </div>
14
+ <% end %>
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Fields::RhinoField::ShowComponent < Avo::Fields::ShowComponent
4
+ end
@@ -0,0 +1,19 @@
1
+ $:.push File.expand_path("lib", __dir__)
2
+
3
+ require "avo/rhino_field/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "avo-rhino_field"
7
+ spec.version = Avo::RhinoField::VERSION
8
+ spec.summary = "rhino field for Avo."
9
+ spec.description = "rhino field for Avo."
10
+ spec.authors = ["Adrian Marin"]
11
+ spec.email = "adrian@adrianthedev.com"
12
+
13
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
14
+ Dir["{app,lib}/**/*", "Rakefile", "README.md", "avo-rhino_field.gemspec"]
15
+ end
16
+ spec.files.reject! { |file_name| %w[app/javascript].any? { |rejected_file| file_name.include? rejected_file } }
17
+
18
+ spec.homepage = "https://avohq.io"
19
+ end
@@ -0,0 +1,24 @@
1
+ require_relative "fields/rhino_field"
2
+
3
+ module Avo
4
+ module RhinoField
5
+ class Engine < Rails::Engine
6
+ isolate_namespace Avo::RhinoField
7
+
8
+ initializer "avo-rhino_field.init" do |app|
9
+ ActiveSupport.on_load(:avo_boot) do
10
+ Avo.plugin_manager.register :rhino
11
+
12
+ Avo.plugin_manager.register_field :rhino, Avo::Fields::RhinoField
13
+
14
+ Avo.asset_manager.add_stylesheet "avo-rhino_field"
15
+ Avo.asset_manager.add_javascript "avo-rhino_field"
16
+ end
17
+
18
+ app.config.assets.paths << root.join("app", "assets", "svgs", "avo")
19
+ app.config.assets.precompile += %w(avo-rhino_field.css avo-rhino_field.js)
20
+ app.config.assets.precompile << '*.svg'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ module Avo
2
+ module RhinoField
3
+ module Fields
4
+ class RhinoField < Avo::Fields::BaseField
5
+ attr_reader :always_show
6
+
7
+ def initialize(id, **args, &block)
8
+ super(id, **args, &block)
9
+
10
+ hide_on :index
11
+
12
+ @always_show = args[:always_show] || false
13
+ end
14
+
15
+ def view_component_namespace
16
+ "Avo::Fields::RhinoField"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ module Avo
2
+ module RhinoField
3
+ VERSION = "0.0.11" unless const_defined?(:VERSION)
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ require "zeitwerk"
2
+ require "avo"
3
+ require "avo/rhino_field/version"
4
+ require "avo/rhino_field/engine"
5
+
6
+ loader = Zeitwerk::Loader.for_gem_extension(Avo)
7
+ loader.setup
8
+
9
+ module Avo
10
+ module RhinoField
11
+ # Your code goes here...d
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: avo-rhino_field
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.11
5
+ platform: ruby
6
+ authors:
7
+ - Adrian Marin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-11-15 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: rhino field for Avo.
14
+ email: adrian@adrianthedev.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - README.md
20
+ - app/assets/builds/avo-rhino_field.css
21
+ - app/assets/builds/avo-rhino_field.css.map
22
+ - app/assets/builds/avo-rhino_field.js
23
+ - app/assets/builds/avo-rhino_field.js.map
24
+ - app/assets/stylesheets/avo-rhino_field.css
25
+ - app/assets/svgs/avo/gradient.svg
26
+ - app/components/avo/fields/rhino_field/edit_component.html.erb
27
+ - app/components/avo/fields/rhino_field/edit_component.rb
28
+ - app/components/avo/fields/rhino_field/show_component.html.erb
29
+ - app/components/avo/fields/rhino_field/show_component.rb
30
+ - avo-rhino_field.gemspec
31
+ - lib/avo/rhino_field.rb
32
+ - lib/avo/rhino_field/engine.rb
33
+ - lib/avo/rhino_field/fields/rhino_field.rb
34
+ - lib/avo/rhino_field/version.rb
35
+ homepage: https://avohq.io
36
+ licenses: []
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubygems_version: 3.4.10
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: rhino field for Avo.
57
+ test_files: []