avo 1.0.4 → 1.3.0.pre.1

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

Potentially problematic release.


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

Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -1
  3. data/Gemfile.lock +11 -3
  4. data/README.md +3 -1
  5. data/app/components/avo/common/key_value_component.html.erb +53 -0
  6. data/app/components/avo/common/key_value_component.rb +11 -0
  7. data/app/components/avo/edit/fields/belongs_to_field_component.html.erb +0 -1
  8. data/app/components/avo/edit/fields/belongs_to_field_component.rb +7 -0
  9. data/app/components/avo/edit/fields/key_value_field_component.html.erb +3 -0
  10. data/app/components/avo/edit/fields/key_value_field_component.rb +4 -0
  11. data/app/components/avo/index/grid_cover_empty_state_component.html.erb +3 -0
  12. data/app/components/avo/index/grid_cover_empty_state_component.rb +4 -0
  13. data/app/components/avo/index/grid_item_component.html.erb +4 -4
  14. data/app/components/avo/modal_component.rb +2 -1
  15. data/app/components/avo/panel_component.html.erb +7 -2
  16. data/app/components/avo/panel_component.rb +4 -1
  17. data/app/components/avo/show/fields/has_one_field_component.html.erb +3 -3
  18. data/app/components/avo/show/fields/key_value_field_component.html.erb +3 -0
  19. data/app/components/avo/show/fields/key_value_field_component.rb +4 -0
  20. data/app/components/avo/views/resource_edit_component.html.erb +3 -3
  21. data/app/components/avo/views/resource_index_component.html.erb +4 -4
  22. data/app/components/avo/views/resource_new_component.html.erb +3 -3
  23. data/app/components/avo/views/resource_show_component.html.erb +2 -2
  24. data/app/controllers/avo/application_controller.rb +12 -8
  25. data/app/controllers/avo/base_controller.rb +16 -0
  26. data/app/controllers/avo/home_controller.rb +2 -0
  27. data/app/helpers/avo/application_helper.rb +0 -30
  28. data/app/packs/entrypoints/application.css +1 -0
  29. data/app/packs/entrypoints/application.js +14 -10
  30. data/app/packs/js/controllers/fields/key_value_controller.js +132 -0
  31. data/app/packs/stylesheets/breadcrumbs.css +12 -0
  32. data/app/packs/svgs/chevron-right.svg +3 -0
  33. data/app/views/avo/actions/show.html.erb +2 -2
  34. data/app/views/avo/home/index.html.erb +3 -3
  35. data/{lib/generators/avo/templates → app/views/avo}/partials/_scripts.html.erb +0 -0
  36. data/app/views/avo/relations/new.html.erb +2 -2
  37. data/app/views/avo/sidebar/_sidebar.html.erb +11 -2
  38. data/app/views/layouts/avo/application.html.erb +5 -4
  39. data/avo.gemspec +2 -0
  40. data/lib/avo/app.rb +28 -9
  41. data/lib/avo/base_resource.rb +12 -12
  42. data/lib/avo/configuration.rb +11 -1
  43. data/lib/avo/fields/belongs_to_field.rb +0 -2
  44. data/lib/avo/fields/key_value_field.rb +24 -1
  45. data/lib/avo/grid_collector.rb +1 -1
  46. data/lib/avo/version.rb +1 -1
  47. data/lib/generators/avo/eject_generator.rb +55 -0
  48. data/lib/generators/avo/templates/tool/controller.tt +2 -0
  49. data/lib/generators/avo/templates/tool/sidebar_item.tt +1 -0
  50. data/lib/generators/avo/templates/tool/view.tt +27 -0
  51. data/lib/generators/avo/tool_generator.rb +62 -0
  52. data/public/avo-packs/css/{application-9d115b7e.css → application-5af67922.css} +132 -24
  53. data/public/avo-packs/css/application-5af67922.css.br +0 -0
  54. data/public/avo-packs/css/application-5af67922.css.gz +0 -0
  55. data/public/avo-packs/css/application-5af67922.css.map +1 -0
  56. data/public/avo-packs/css/application-5af67922.css.map.br +0 -0
  57. data/public/avo-packs/css/application-5af67922.css.map.gz +0 -0
  58. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js +26 -0
  59. data/public/avo-packs/js/{application-e351ef988a3cb9687542.js.LICENSE.txt → application-a48a99244065c8d7a1d1.js.LICENSE.txt} +0 -0
  60. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.br +0 -0
  61. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.gz +0 -0
  62. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.map +1 -0
  63. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.map.br +0 -0
  64. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.map.gz +0 -0
  65. data/public/avo-packs/manifest.json +15 -15
  66. metadata +62 -22
  67. data/lib/generators/avo/partials_generator.rb +0 -14
  68. data/lib/generators/avo/templates/partials/_footer.html.erb +0 -3
  69. data/lib/generators/avo/templates/partials/_header.html.erb +0 -1
  70. data/lib/generators/avo/templates/partials/_logo.html.erb +0 -1
  71. data/public/avo-packs/css/application-9d115b7e.css.br +0 -0
  72. data/public/avo-packs/css/application-9d115b7e.css.gz +0 -0
  73. data/public/avo-packs/css/application-9d115b7e.css.map +0 -1
  74. data/public/avo-packs/css/application-9d115b7e.css.map.br +0 -0
  75. data/public/avo-packs/css/application-9d115b7e.css.map.gz +0 -0
  76. data/public/avo-packs/js/application-e351ef988a3cb9687542.js +0 -26
  77. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.br +0 -0
  78. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.gz +0 -0
  79. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.map +0 -1
  80. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.map.br +0 -0
  81. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.map.gz +0 -0
@@ -21,6 +21,7 @@ module Avo
21
21
  class_attribute :filters_loader
22
22
  class_attribute :fields
23
23
  class_attribute :grid_loader
24
+ class_attribute :visible_on_sidebar, default: true
24
25
 
25
26
  class << self
26
27
  def grid(&block)
@@ -260,28 +261,27 @@ module Avo
260
261
  end
261
262
  end
262
263
 
263
- # For :new views we're hydrating the model with the values from the resource's default attribute.
264
264
  # We will not overwrite any attributes that come pre-filled in the model.
265
265
  def hydrate_model_with_default_values
266
266
  default_values = get_fields.select do |field|
267
267
  !field.computed
268
268
  end
269
269
  .map do |field|
270
- id = field.id
271
- value = field.value
270
+ id = field.id
271
+ value = field.value
272
272
 
273
- if field.respond_to? :foreign_key
274
- id = field.foreign_key.to_sym
273
+ if field.respond_to? :foreign_key
274
+ id = field.foreign_key.to_sym
275
275
 
276
- reflection = @model._reflections[@params[:via_relation]]
276
+ reflection = @model._reflections[@params[:via_relation]]
277
277
 
278
- if reflection.present? && reflection.foreign_key.present?
279
- value = @params[:via_resource_id]
280
- end
281
- end
278
+ if reflection.present? && reflection.foreign_key.present? && field.id.to_s == @params[:via_relation].to_s
279
+ value = @params[:via_resource_id]
280
+ end
281
+ end
282
282
 
283
- [id, value]
284
- end
283
+ [id, value]
284
+ end
285
285
  .to_h
286
286
  .select do |id, value|
287
287
  value.present?
@@ -19,10 +19,12 @@ module Avo
19
19
  attr_accessor :full_width_index_view
20
20
  attr_accessor :cache_resources_on_index_view
21
21
  attr_accessor :context
22
+ attr_accessor :display_breadcrumbs
23
+ attr_accessor :initial_breadcrumbs
22
24
 
23
25
  def initialize
24
26
  @root_path = "/avo"
25
- @app_name = Rails.application.class.to_s.split("::").first.underscore.humanize(keep_id_suffix: true)
27
+ @app_name = ::Rails.application.class.to_s.split("::").first.underscore.humanize(keep_id_suffix: true)
26
28
  @timezone = "UTC"
27
29
  @per_page = 24
28
30
  @per_page_steps = [12, 24, 48, 72]
@@ -48,6 +50,10 @@ module Avo
48
50
  @full_width_index_view = false
49
51
  @cache_resources_on_index_view = Avo::PACKED
50
52
  @context = proc {}
53
+ @initial_breadcrumbs = proc {
54
+ add_breadcrumb I18n.t("avo.home").humanize, avo.root_path
55
+ }
56
+ @display_breadcrumbs = true
51
57
  end
52
58
 
53
59
  def locale_tag
@@ -71,6 +77,10 @@ module Avo
71
77
  def set_context(&block)
72
78
  @context = block if block.present?
73
79
  end
80
+
81
+ def set_initial_breadcrumbs(&block)
82
+ @initial_breadcrumbs = block if block.present?
83
+ end
74
84
  end
75
85
 
76
86
  def self.configuration
@@ -50,8 +50,6 @@ module Avo
50
50
  foreign_key.to_sym
51
51
  end
52
52
 
53
- private
54
-
55
53
  def target_resource
56
54
  if @model._reflections[id.to_s].klass.present?
57
55
  App.get_resource_by_model_name @model._reflections[id.to_s].klass.to_s
@@ -3,6 +3,11 @@ require "json"
3
3
  module Avo
4
4
  module Fields
5
5
  class KeyValueField < BaseField
6
+ attr_reader :key_label
7
+ attr_reader :value_label
8
+ attr_reader :action_text
9
+ attr_reader :disable_adding_rows
10
+
6
11
  def initialize(name, **args, &block)
7
12
  @defaults = {
8
13
  partial_name: "key-value-field"
@@ -33,7 +38,13 @@ module Avo
33
38
  [:"#{id}", "#{id}": {}]
34
39
  end
35
40
 
36
- def hydrate_field(fields, model, resource, view)
41
+ def parsed_value
42
+ value.to_json
43
+ rescue
44
+ {}
45
+ end
46
+
47
+ def options
37
48
  {
38
49
  key_label: @key_label,
39
50
  value_label: @value_label,
@@ -44,6 +55,18 @@ module Avo
44
55
  disable_deleting_rows: @disable_deleting_rows
45
56
  }
46
57
  end
58
+
59
+ def fill_field(model, key, value)
60
+ begin
61
+ new_value = JSON.parse(value)
62
+ rescue
63
+ new_value = {}
64
+ end
65
+
66
+ model[key] = new_value
67
+
68
+ model
69
+ end
47
70
  end
48
71
  end
49
72
  end
@@ -27,7 +27,7 @@ module Avo
27
27
  def hydrate(model:, view:, resource:)
28
28
  cover_field.hydrate(model: model, view: view, resource: resource) if cover_field.present?
29
29
  title_field.hydrate(model: model, view: view, resource: resource) if title_field.present?
30
- body_field.hydrate(model: model, view: view, resource: resource) if title_field.present?
30
+ body_field.hydrate(model: model, view: view, resource: resource) if body_field.present?
31
31
 
32
32
  self
33
33
  end
data/lib/avo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Avo
2
- VERSION = "1.0.4"
2
+ VERSION = "1.3.0.pre.1"
3
3
  end
@@ -0,0 +1,55 @@
1
+ require "rails/generators"
2
+ require "fileutils"
3
+
4
+ module Generators
5
+ module Avo
6
+ class EjectGenerator < ::Rails::Generators::Base
7
+ argument :filename, type: :string, required: true
8
+
9
+ source_root ::Avo::Engine.root
10
+
11
+ namespace "avo:eject"
12
+
13
+ TEMPLATES = {
14
+ sidebar: "app/views/avo/sidebar/_sidebar.html.erb",
15
+ logo: "app/views/avo/partials/logo.html.erb",
16
+ header: "app/views/avo/partials/header.html.erb",
17
+ footer: "app/views/avo/partials/footer.html.erb",
18
+ scripts: "app/views/avo/partials/scripts.html.erb"
19
+ }
20
+
21
+ def handle
22
+ if @filename.starts_with?(":")
23
+ template_id = path_to_sym @filename
24
+ template_path = TEMPLATES[template_id]
25
+
26
+ if path_exists? template_path
27
+ eject template_path
28
+ else
29
+ say("Failed to find the `#{template_id.to_sym}` template.", :yellow)
30
+ end
31
+ elsif path_exists? @filename
32
+ eject @filename
33
+ else
34
+ say("Failed to find the `#{@filename}` template.", :yellow)
35
+ end
36
+ end
37
+
38
+ no_tasks do
39
+ def path_to_sym(filename)
40
+ template_id = filename.dup
41
+ template_id[0] = ""
42
+ template_id.to_sym
43
+ end
44
+
45
+ def path_exists?(path)
46
+ path.present? && File.file?(::Avo::Engine.root.join(path))
47
+ end
48
+
49
+ def eject(path)
50
+ copy_file ::Avo::Engine.root.join(path), ::Rails.root.join(path)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,2 @@
1
+ class Avo::ToolsController < Avo::ApplicationController
2
+ end
@@ -0,0 +1 @@
1
+ <%%= render Avo::NavigationLinkComponent.new label: '<%= human_name %>', path: '/avo/<%= file_name %>' %>
@@ -0,0 +1,27 @@
1
+ <div class="flex flex-col">
2
+ <%%= render Avo::PanelComponent.new title: '<%= human_name %>' do |c| %>
3
+ <%% c.tools do %>
4
+ <div class="text-sm italic">This is the panels tools section.</div>
5
+ <%% end %>
6
+
7
+ <%% c.body do %>
8
+ <div class="flex flex-col justify-between py-6 min-h-24">
9
+ <div class="px-6 space-y-4">
10
+ <h3>What a nice new tool 👋</h3>
11
+
12
+ <p>
13
+ You can edit this file here <%= in_code "app/views/avo/tools/#{file_name}.html.erb" %>.
14
+ </p>
15
+
16
+ <p>
17
+ For this tool we created the <%= in_code file_name %> method in the <%= in_code "Avo::ToolsController" %>. You may delete it or move it to your own controller.
18
+ </p>
19
+
20
+ <p>
21
+ A new <%= in_code human_name %> item should have been added to the sidebar. Edit it in <%= in_code "app/views/avo/sidebar/items/_#{file_name}.html.erb" %>
22
+ </p>
23
+ </div>
24
+ </div>
25
+ <%% end %>
26
+ <%% end %>
27
+ </div>
@@ -0,0 +1,62 @@
1
+ require "rails/generators"
2
+ require "fileutils"
3
+
4
+ module Generators
5
+ module Avo
6
+ class ToolGenerator < ::Rails::Generators::Base
7
+ argument :name, type: :string, required: true
8
+
9
+ source_root File.expand_path("templates", __dir__)
10
+
11
+ namespace "avo:tool"
12
+
13
+ def handle
14
+ # Sidebar items
15
+ template "tool/sidebar_item.tt", "app/views/avo/sidebar/items/_#{file_name}.html.erb"
16
+
17
+ # Add controller if it doesn't exist
18
+ controller_path = "app/controllers/avo/tools_controller.rb"
19
+ unless File.file?(Rails.root.join(controller_path))
20
+ template "tool/controller.tt", controller_path
21
+ end
22
+
23
+ # Add controller method
24
+ inject_into_class controller_path, "Avo::ToolsController" do
25
+ <<-METHOD
26
+ def #{file_name}
27
+ @page_title = "#{human_name}"
28
+ add_breadcrumb "#{human_name}"
29
+ end
30
+ METHOD
31
+ end
32
+
33
+ # Add view file
34
+ template "tool/view.tt", "app/views/avo/tools/#{file_name}.html.erb"
35
+
36
+ route <<-ROUTE
37
+ namespace :#{::Avo.configuration.root_path.gsub('/', '')} do
38
+ get "#{file_name}", to: "tools##{file_name}"
39
+ end
40
+ ROUTE
41
+ end
42
+
43
+ no_tasks do
44
+ def file_name
45
+ name.to_s.underscore
46
+ end
47
+
48
+ def controller_name
49
+ file_name.to_s
50
+ end
51
+
52
+ def human_name
53
+ file_name.humanize
54
+ end
55
+
56
+ def in_code(text)
57
+ "<code class='p-1 rounded bg-gray-500 text-white text-sm'>#{text}</code>"
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1388,7 +1388,7 @@ span.flatpickr-weekday {
1388
1388
  }
1389
1389
  }
1390
1390
 
1391
- /*! tailwindcss v2.0.4 | MIT License | https://tailwindcss.com *//*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
1391
+ /*! tailwindcss v2.1.1 | MIT License | https://tailwindcss.com *//*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
1392
1392
 
1393
1393
  /*
1394
1394
  Document
@@ -1915,7 +1915,7 @@ object {
1915
1915
 
1916
1916
  /**
1917
1917
  * Constrain images and videos to the parent width and preserve
1918
- * their instrinsic aspect ratio.
1918
+ * their intrinsic aspect ratio.
1919
1919
  *
1920
1920
  * https://github.com/mozdevs/cssremedy/issues/14
1921
1921
  */
@@ -2329,6 +2329,10 @@ select {
2329
2329
  z-index: 10;
2330
2330
  }
2331
2331
 
2332
+ .focus\:border-none:focus {
2333
+ border-style: none;
2334
+ }
2335
+
2332
2336
  .focus\:border-blue-300:focus {
2333
2337
  --tw-border-opacity: 1;
2334
2338
  border-color: rgba(147, 197, 253, var(--tw-border-opacity));
@@ -2339,6 +2343,11 @@ select {
2339
2343
  border-color: rgba(148, 163, 184, var(--tw-border-opacity));
2340
2344
  }
2341
2345
 
2346
+ .focus\:border-gray-700:focus {
2347
+ --tw-border-opacity: 1;
2348
+ border-color: rgba(55, 65, 81, var(--tw-border-opacity));
2349
+ }
2350
+
2342
2351
  .focus\:bg-white:focus {
2343
2352
  --tw-bg-opacity: 1;
2344
2353
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
@@ -3051,6 +3060,40 @@ svg.tea #steamR {
3051
3060
  color: rgba(255, 255, 255, var(--tw-text-opacity))
3052
3061
  }
3053
3062
 
3063
+ .breadcrumbs {
3064
+
3065
+ position: relative;
3066
+
3067
+ font-size: 0.875rem;
3068
+
3069
+ line-height: 1.25rem;
3070
+
3071
+ font-weight: 700;
3072
+
3073
+ --tw-text-opacity: 1;
3074
+
3075
+ color: rgba(156, 163, 175, var(--tw-text-opacity));
3076
+ }
3077
+
3078
+ .breadcrumbs a, .breadcrumbs span {
3079
+
3080
+ display: inline-block
3081
+ }
3082
+
3083
+ .breadcrumbs a, .breadcrumbs span {
3084
+
3085
+ --tw-text-opacity: 1;
3086
+
3087
+ color: rgba(156, 163, 175, var(--tw-text-opacity))
3088
+ }
3089
+
3090
+ .breadcrumbs a:hover {
3091
+
3092
+ --tw-text-opacity: 1;
3093
+
3094
+ color: rgba(107, 114, 128, var(--tw-text-opacity))
3095
+ }
3096
+
3054
3097
  .spinner {
3055
3098
  position: relative;
3056
3099
  display: inline-block;
@@ -4273,6 +4316,9 @@ span.CodeMirror-selectedtext { background: none; }
4273
4316
  .focus\:z-10:focus {
4274
4317
  z-index: 10;
4275
4318
  }
4319
+ .focus\:border-none:focus {
4320
+ border-style: none;
4321
+ }
4276
4322
  .focus\:border-blue-300:focus {
4277
4323
  --tw-border-opacity: 1;
4278
4324
  border-color: rgba(147, 197, 253, var(--tw-border-opacity));
@@ -4281,6 +4327,10 @@ span.CodeMirror-selectedtext { background: none; }
4281
4327
  --tw-border-opacity: 1;
4282
4328
  border-color: rgba(148, 163, 184, var(--tw-border-opacity));
4283
4329
  }
4330
+ .focus\:border-gray-700:focus {
4331
+ --tw-border-opacity: 1;
4332
+ border-color: rgba(55, 65, 81, var(--tw-border-opacity));
4333
+ }
4284
4334
  .focus\:bg-white:focus {
4285
4335
  --tw-bg-opacity: 1;
4286
4336
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
@@ -4488,6 +4538,9 @@ span.CodeMirror-selectedtext { background: none; }
4488
4538
  }
4489
4539
  }
4490
4540
 
4541
+ .pointer-events-none {
4542
+ pointer-events: none
4543
+ }
4491
4544
  .visible {
4492
4545
  visibility: visible
4493
4546
  }
@@ -4533,6 +4586,9 @@ span.CodeMirror-selectedtext { background: none; }
4533
4586
  .bottom-0 {
4534
4587
  bottom: 0px
4535
4588
  }
4589
+ .top-\[-1px\] {
4590
+ top: -1px
4591
+ }
4536
4592
  .z-10 {
4537
4593
  z-index: 10
4538
4594
  }
@@ -4637,9 +4693,6 @@ span.CodeMirror-selectedtext { background: none; }
4637
4693
  .mb-6 {
4638
4694
  margin-bottom: 1.5rem
4639
4695
  }
4640
- .mb-3 {
4641
- margin-bottom: 0.75rem
4642
- }
4643
4696
  .mb-8 {
4644
4697
  margin-bottom: 2rem
4645
4698
  }
@@ -4655,24 +4708,24 @@ span.CodeMirror-selectedtext { background: none; }
4655
4708
  .block {
4656
4709
  display: block
4657
4710
  }
4658
- .inline-flex {
4659
- display: inline-flex
4660
- }
4661
- .flex {
4662
- display: flex
4711
+ .inline-block {
4712
+ display: inline-block
4663
4713
  }
4664
4714
  .inline {
4665
4715
  display: inline
4666
4716
  }
4667
- .grid {
4668
- display: grid
4717
+ .flex {
4718
+ display: flex
4669
4719
  }
4670
- .inline-block {
4671
- display: inline-block
4720
+ .inline-flex {
4721
+ display: inline-flex
4672
4722
  }
4673
4723
  .table {
4674
4724
  display: table
4675
4725
  }
4726
+ .grid {
4727
+ display: grid
4728
+ }
4676
4729
  .hidden {
4677
4730
  display: none
4678
4731
  }
@@ -4700,15 +4753,15 @@ span.CodeMirror-selectedtext { background: none; }
4700
4753
  .h-16 {
4701
4754
  height: 4rem
4702
4755
  }
4756
+ .h-3 {
4757
+ height: 0.75rem
4758
+ }
4703
4759
  .h-10 {
4704
4760
  height: 2.5rem
4705
4761
  }
4706
4762
  .h-12 {
4707
4763
  height: 3rem
4708
4764
  }
4709
- .h-3 {
4710
- height: 0.75rem
4711
- }
4712
4765
  .max-h-168 {
4713
4766
  max-height: 42rem
4714
4767
  }
@@ -4760,6 +4813,9 @@ span.CodeMirror-selectedtext { background: none; }
4760
4813
  .w-64 {
4761
4814
  width: 16rem
4762
4815
  }
4816
+ .w-1\/2 {
4817
+ width: 50%
4818
+ }
4763
4819
  .w-11\/12 {
4764
4820
  width: 91.666667%
4765
4821
  }
@@ -4824,6 +4880,9 @@ span.CodeMirror-selectedtext { background: none; }
4824
4880
  .cursor-wait {
4825
4881
  cursor: wait
4826
4882
  }
4883
+ .cursor-not-allowed {
4884
+ cursor: not-allowed
4885
+ }
4827
4886
  .appearance-none {
4828
4887
  -webkit-appearance: none;
4829
4888
  appearance: none
@@ -4953,6 +5012,9 @@ span.CodeMirror-selectedtext { background: none; }
4953
5012
  .rounded {
4954
5013
  border-radius: 0.25rem
4955
5014
  }
5015
+ .rounded-none {
5016
+ border-radius: 0px
5017
+ }
4956
5018
  .rounded-full {
4957
5019
  border-radius: 9999px
4958
5020
  }
@@ -4980,6 +5042,18 @@ span.CodeMirror-selectedtext { background: none; }
4980
5042
  .border-r {
4981
5043
  border-right-width: 1px
4982
5044
  }
5045
+ .border-l-0 {
5046
+ border-left-width: 0px
5047
+ }
5048
+ .border-b-0 {
5049
+ border-bottom-width: 0px
5050
+ }
5051
+ .border-t-0 {
5052
+ border-top-width: 0px
5053
+ }
5054
+ .border-l {
5055
+ border-left-width: 1px
5056
+ }
4983
5057
  .border-pink-600 {
4984
5058
  --tw-border-opacity: 1;
4985
5059
  border-color: rgba(219, 39, 119, var(--tw-border-opacity))
@@ -5187,14 +5261,14 @@ span.CodeMirror-selectedtext { background: none; }
5187
5261
  padding-top: 1px;
5188
5262
  padding-bottom: 1px
5189
5263
  }
5190
- .py-0 {
5191
- padding-top: 0px;
5192
- padding-bottom: 0px
5193
- }
5194
5264
  .py-3 {
5195
5265
  padding-top: 0.75rem;
5196
5266
  padding-bottom: 0.75rem
5197
5267
  }
5268
+ .py-0 {
5269
+ padding-top: 0px;
5270
+ padding-bottom: 0px
5271
+ }
5198
5272
  .py-8 {
5199
5273
  padding-top: 2rem;
5200
5274
  padding-bottom: 2rem
@@ -5378,12 +5452,37 @@ span.CodeMirror-selectedtext { background: none; }
5378
5452
  --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
5379
5453
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
5380
5454
  }
5455
+ .shadow-lg {
5456
+ --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
5457
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
5458
+ }
5459
+ .shadow {
5460
+ --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
5461
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
5462
+ }
5381
5463
  .outline-none {
5382
5464
  outline: 2px solid transparent;
5383
5465
  outline-offset: 2px
5384
5466
  }
5467
+ .filter {
5468
+ --tw-blur: var(--tw-empty,/*!*/ /*!*/);
5469
+ --tw-brightness: var(--tw-empty,/*!*/ /*!*/);
5470
+ --tw-contrast: var(--tw-empty,/*!*/ /*!*/);
5471
+ --tw-grayscale: var(--tw-empty,/*!*/ /*!*/);
5472
+ --tw-hue-rotate: var(--tw-empty,/*!*/ /*!*/);
5473
+ --tw-invert: var(--tw-empty,/*!*/ /*!*/);
5474
+ --tw-saturate: var(--tw-empty,/*!*/ /*!*/);
5475
+ --tw-sepia: var(--tw-empty,/*!*/ /*!*/);
5476
+ --tw-drop-shadow: var(--tw-empty,/*!*/ /*!*/);
5477
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
5478
+ }
5479
+ .invert {
5480
+ --tw-invert: invert(100%)
5481
+ }
5385
5482
  .transition {
5386
- transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;
5483
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
5484
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
5485
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
5387
5486
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
5388
5487
  transition-duration: 150ms
5389
5488
  }
@@ -5578,6 +5677,9 @@ span.CodeMirror-selectedtext { background: none; }
5578
5677
  .focus\:z-10:focus {
5579
5678
  z-index: 10
5580
5679
  }
5680
+ .focus\:border-none:focus {
5681
+ border-style: none
5682
+ }
5581
5683
  .focus\:border-blue-300:focus {
5582
5684
  --tw-border-opacity: 1;
5583
5685
  border-color: rgba(147, 197, 253, var(--tw-border-opacity))
@@ -5586,6 +5688,10 @@ span.CodeMirror-selectedtext { background: none; }
5586
5688
  --tw-border-opacity: 1;
5587
5689
  border-color: rgba(148, 163, 184, var(--tw-border-opacity))
5588
5690
  }
5691
+ .focus\:border-gray-700:focus {
5692
+ --tw-border-opacity: 1;
5693
+ border-color: rgba(55, 65, 81, var(--tw-border-opacity))
5694
+ }
5589
5695
  .focus\:bg-white:focus {
5590
5696
  --tw-bg-opacity: 1;
5591
5697
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity))
@@ -5819,7 +5925,9 @@ html, body{
5819
5925
  --tw-scale-x: 1;
5820
5926
  --tw-scale-y: 1;
5821
5927
  transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
5822
- transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;
5928
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
5929
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
5930
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
5823
5931
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
5824
5932
  transition-duration: 150ms;
5825
5933
  transition-duration: 150ms;
@@ -5869,4 +5977,4 @@ html, body{
5869
5977
  }
5870
5978
 
5871
5979
 
5872
- /*# sourceMappingURL=application-9d115b7e.css.map*/
5980
+ /*# sourceMappingURL=application-5af67922.css.map*/