avo 1.2.2 → 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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/components/avo/common/key_value_component.html.erb +53 -0
  4. data/app/components/avo/common/key_value_component.rb +11 -0
  5. data/app/components/avo/edit/fields/key_value_field_component.html.erb +3 -0
  6. data/app/components/avo/edit/fields/key_value_field_component.rb +4 -0
  7. data/app/components/avo/show/fields/key_value_field_component.html.erb +3 -0
  8. data/app/components/avo/show/fields/key_value_field_component.rb +4 -0
  9. data/app/packs/entrypoints/application.js +14 -10
  10. data/app/packs/js/controllers/fields/key_value_controller.js +132 -0
  11. data/lib/avo/fields/key_value_field.rb +24 -1
  12. data/lib/avo/version.rb +1 -1
  13. data/public/avo-packs/css/{application-13cc02fb.css → application-5af67922.css} +92 -18
  14. data/public/avo-packs/css/application-5af67922.css.br +0 -0
  15. data/public/avo-packs/css/application-5af67922.css.gz +0 -0
  16. data/public/avo-packs/css/application-5af67922.css.map +1 -0
  17. data/public/avo-packs/css/application-5af67922.css.map.br +0 -0
  18. data/public/avo-packs/css/application-5af67922.css.map.gz +0 -0
  19. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js +26 -0
  20. data/public/avo-packs/js/{application-e351ef988a3cb9687542.js.LICENSE.txt → application-a48a99244065c8d7a1d1.js.LICENSE.txt} +0 -0
  21. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.br +0 -0
  22. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.gz +0 -0
  23. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.map +1 -0
  24. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.map.br +0 -0
  25. data/public/avo-packs/js/application-a48a99244065c8d7a1d1.js.map.gz +0 -0
  26. data/public/avo-packs/manifest.json +15 -15
  27. metadata +23 -16
  28. data/public/avo-packs/css/application-13cc02fb.css.br +0 -0
  29. data/public/avo-packs/css/application-13cc02fb.css.gz +0 -0
  30. data/public/avo-packs/css/application-13cc02fb.css.map +0 -1
  31. data/public/avo-packs/css/application-13cc02fb.css.map.br +0 -0
  32. data/public/avo-packs/css/application-13cc02fb.css.map.gz +0 -0
  33. data/public/avo-packs/js/application-e351ef988a3cb9687542.js +0 -26
  34. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.br +0 -0
  35. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.gz +0 -0
  36. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.map +0 -1
  37. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.map.br +0 -0
  38. data/public/avo-packs/js/application-e351ef988a3cb9687542.js.map.gz +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5cd3316f4906c09337ae6079468f6779b272ec800112cefa1db60a169acaddf
4
- data.tar.gz: 6238d803e939ed4471cf6b67fbcf2568bc74fddd6f125eb10575d15f2ee6c244
3
+ metadata.gz: a62f55a2092f0dd2716cdaacc87e2eea086745d164d032ff8024757748830e54
4
+ data.tar.gz: a104302aecf8c7f57ac9915fe61eaf26866d3ac25678f40eee2b2244de5d3664
5
5
  SHA512:
6
- metadata.gz: 3e81e69fdb6f0094ccada08f1ca66c522fbf813b9dbc310de63a8c1ed64c9155d62e2dadee337b7ea937280755b157325e07ada2de94a88e219d4f29a8c58d66
7
- data.tar.gz: f82850865b3a6592364534c33b4766f808e9d869025ea57bbe8148625fd0399d46575046d86bcca9115a68f604c302628c39965ba7f36f55c9822f2b3bf41480
6
+ metadata.gz: 88e0ca48ccbc7ff735cbf14178e8bfce1085b34996ed3cad80238e3a625adc0eeab918092b5fee304a3fc31ab9d2465a5f0b5580aac6b5efd308b09218f340cd
7
+ data.tar.gz: 8b1847c9083ef9998ee2e6a49202addcb9e670c2b5fa1904672287bfa902dd886df4ed5a6ba21de1f5db9020a3a1bc1e5e868765d672677928840d9c14ad83e1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- avo (1.2.2)
4
+ avo (1.3.0.pre.1)
5
5
  active_link_to
6
6
  addressable
7
7
  breadcrumbs_on_rails
@@ -0,0 +1,53 @@
1
+ <div class="w-full shadow-lg rounded-lg overflow-hidden"
2
+ data-controller="key-value"
3
+ data-key-value-target="controller"
4
+ data-options="<%= @field.options.to_json %>"
5
+ data-input-classes="<%= input_classes %>"
6
+ data-editable="<%= @view.in?([:edit, :create]) %>"
7
+ >
8
+ <div class="w-full flex flex-col">
9
+ <div class="flex w-full">
10
+ <div class="flex w-full bg-gray-800 shadow overflow-hidden">
11
+ <div class="w-1/2 py-3 px-3 uppercase font-semibold text-xs text-white border-gray-600 border-r">
12
+ <%= @field.key_label %>
13
+ </div>
14
+ <div class="w-1/2 py-3 px-3 uppercase font-semibold text-xs text-white">
15
+ <%= @field.value_label %>
16
+ </div>
17
+ <% if @view.in?([:edit, :create]) %>
18
+ <div class="flex items-center justify-center p-2 px-3 border-l border-gray-600">
19
+ <a href="javascript:void(0);"
20
+ title="<%= @field.action_text %>"
21
+ data-tippy="tooltip"
22
+ data-button="add-row"
23
+ data-action="click->key-value#addRow"
24
+ <% if @field.disable_adding_rows %>
25
+ class="cursor-not-allowed"
26
+ <% end %>
27
+ >
28
+ <%= svg 'plus-circle', class: 'text-gray-400 h-5 hover:text-gray-500' %>
29
+ </a>
30
+ </div>
31
+ <% end %>
32
+ </div>
33
+ </div>
34
+ <div data-key-value-target="rows"></div>
35
+ </div>
36
+ <% if @form.present? %>
37
+ <%= @form.text_area @field.id,
38
+ value: @field.parsed_value,
39
+ class: 'hidden',
40
+ placeholder: @field.placeholder,
41
+ 'data-key-value-target': 'input',
42
+ 'data-view': :edit
43
+ %>
44
+ <% else %>
45
+ <%= text_area_tag @field.id,
46
+ @field.parsed_value,
47
+ class: 'hidden',
48
+ placeholder: @field.placeholder,
49
+ 'data-key-value-target': 'input',
50
+ 'data-view': :edit
51
+ %>
52
+ <% end %>
53
+ </div>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Common::KeyValueComponent < ViewComponent::Base
4
+ include Avo::ApplicationHelper
5
+
6
+ def initialize(field:, form: nil, view: :show)
7
+ @field = field
8
+ @form = form
9
+ @view = view
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ <%= edit_field_wrapper field: @field, index: @index, form: @form, resource: @resource, displayed_in_modal: @displayed_in_modal do %>
2
+ <%= render Avo::Common::KeyValueComponent.new field: @field, form: @form, view: :edit %>
3
+ <% end %>
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Edit::Fields::KeyValueFieldComponent < Avo::Edit::Fields::FieldComponent
4
+ end
@@ -0,0 +1,3 @@
1
+ <%= show_field_wrapper field: @field, index: @index do %>
2
+ <%= render Avo::Common::KeyValueComponent.new field: @field, view: :show %>
3
+ <% end %>
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Show::Fields::KeyValueFieldComponent < Avo::Show::Fields::FieldComponent
4
+ end
@@ -19,6 +19,19 @@ window.Turbolinks = Turbo
19
19
 
20
20
  Mousetrap.bind('r r r', () => Turbo.visit(window.location.href, { action: 'replace' }))
21
21
 
22
+ function initTippy() {
23
+ tippy('[data-tippy="tooltip"]', {
24
+ theme: 'light',
25
+ content(reference) {
26
+ const title = reference.getAttribute('title')
27
+ reference.removeAttribute('title')
28
+
29
+ return title
30
+ },
31
+ })
32
+ }
33
+ window.initTippy = initTippy
34
+
22
35
  const application = Application.start()
23
36
 
24
37
  const context = require.context('./../js/controllers', true, /\.js$/)
@@ -29,16 +42,7 @@ application.load(definitionsFromContext(fieldsContext))
29
42
 
30
43
  document.addEventListener('turbo:load', () => {
31
44
  document.body.classList.remove('turbo-loading')
32
-
33
- tippy('[data-tippy="tooltip"]', {
34
- theme: 'light',
35
- content(reference) {
36
- const title = reference.getAttribute('title')
37
- reference.removeAttribute('title')
38
-
39
- return title
40
- },
41
- })
45
+ initTippy()
42
46
  })
43
47
  document.addEventListener('turbo:visit', () => document.body.classList.add('turbo-loading'))
44
48
  document.addEventListener('turbo:submit-start', () => document.body.classList.add('turbo-loading'))
@@ -0,0 +1,132 @@
1
+ import { Controller } from 'stimulus'
2
+ import { castBoolean } from '@/js/helpers/cast_boolean'
3
+
4
+ export default class extends Controller {
5
+ static targets = ['input', 'controller', 'rows']
6
+
7
+ fieldValue = []
8
+
9
+ options = {}
10
+
11
+ get keyInputDisabled() {
12
+ return !this.options.editable || this.options.disable_editing_keys
13
+ }
14
+
15
+ get valueInputDisabled() {
16
+ return !this.options.editable
17
+ }
18
+
19
+ connect() {
20
+ this.setOptions()
21
+
22
+ try {
23
+ const objectValue = JSON.parse(this.inputTarget.value)
24
+ Object.keys(objectValue).forEach((key) => this.fieldValue.push([key, objectValue[key]]))
25
+ } catch (error) {
26
+ this.fieldValue = []
27
+ }
28
+
29
+ this.updateKeyValueComponent()
30
+ }
31
+
32
+ addRow() {
33
+ if (this.options.disable_adding_rows || !this.options.editable) return
34
+ this.fieldValue.push(['', ''])
35
+ this.updateKeyValueComponent()
36
+ }
37
+
38
+ deleteRow(event) {
39
+ if (this.options.disable_deleting_rows || !this.options.editable) return
40
+ const { index } = event.target.dataset
41
+ this.fieldValue.splice(index, 1)
42
+ this.updateTextareaInput()
43
+ this.updateKeyValueComponent()
44
+ }
45
+
46
+ valueFieldUpdated(event) {
47
+ const { value } = event.target
48
+ const { index } = event.target.dataset
49
+ this.fieldValue[index][1] = value
50
+
51
+ this.updateTextareaInput()
52
+ }
53
+
54
+ keyFieldUpdated(event) {
55
+ const { value } = event.target
56
+ const { index } = event.target.dataset
57
+ this.fieldValue[index][0] = value
58
+
59
+ this.updateTextareaInput()
60
+ }
61
+
62
+ updateTextareaInput() {
63
+ if (!this.hasInputTarget) return
64
+ let result = {}
65
+ if (this.fieldValue && this.fieldValue.length > 0) {
66
+ result = Object.assign(...this.fieldValue.map(([key, val]) => ({ [key]: val })))
67
+ }
68
+ this.inputTarget.value = JSON.stringify(result)
69
+ }
70
+
71
+ updateKeyValueComponent() {
72
+ let result = ''
73
+ let index = 0
74
+ this.fieldValue.forEach((row) => {
75
+ const [key, value] = row
76
+ result += this.interpolatedRow(key, value, index)
77
+ index++
78
+ })
79
+ this.rowsTarget.innerHTML = result
80
+ window.initTippy()
81
+ }
82
+
83
+ interpolatedRow(key, value, index) {
84
+ let result = `<div class="flex"><input type="text"
85
+ class="${this.options.inputClasses} border-gray-600 border-r border-l-0 border-b-0 border-t-0 focus:border-gray-700 w-1/2 rounded-none focus:outline-none outline-none focus:border-none"
86
+ data-action="input->key-value#keyFieldUpdated"
87
+ placeholder="${this.options.key_label}"
88
+ data-index="${index}"
89
+ ${this.keyInputDisabled ? "disabled='disabled'" : ''}
90
+ value="${key}"
91
+ autofocus
92
+ />
93
+ <input type="text"
94
+ class="${this.options.inputClasses} border-gray-600 border-r border-l-0 border-b-0 border-t-0 focus:border-gray-700 w-1/2 rounded-none focus:outline-none outline-none focus:border-none"
95
+ data-action="input->key-value#valueFieldUpdated"
96
+ placeholder="${this.options.value_label}"
97
+ data-index="${index}"
98
+ ${this.valueInputDisabled ? "disabled='disabled'" : ''}
99
+ value="${value}"
100
+ />`
101
+ if (this.options.editable) {
102
+ result += `<a
103
+ href="javascript:void(0);"
104
+ data-index="${index}"
105
+ data-action="click->key-value#deleteRow"
106
+ title="${this.options.delete_text}"
107
+ data-tippy="tooltip"
108
+ data-button="delete-row"
109
+ ${this.options.disable_deleting_rows ? "disabled='disabled'" : ''}
110
+ class="flex items-center justify-center p-2 px-3 border-l ${this.options.disable_deleting_rows ? 'cursor-not-allowed' : ''}"
111
+ ><svg class="pointer-events-none text-gray-500 h-5 hover:text-gray-500" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor"><path d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path></svg></a>`
112
+ }
113
+ result += '</div>'
114
+
115
+ return result
116
+ }
117
+
118
+ setOptions() {
119
+ let fieldOptions
120
+
121
+ try {
122
+ fieldOptions = JSON.parse(this.controllerTarget.dataset.options)
123
+ } catch (error) {
124
+ fieldOptions = {}
125
+ }
126
+ this.options = {
127
+ ...fieldOptions,
128
+ inputClasses: this.controllerTarget.dataset.inputClasses,
129
+ editable: castBoolean(this.controllerTarget.dataset.editable),
130
+ }
131
+ }
132
+ }
@@ -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
data/lib/avo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Avo
2
- VERSION = "1.2.2"
2
+ VERSION = "1.3.0.pre.1"
3
3
  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));
@@ -4307,6 +4316,9 @@ span.CodeMirror-selectedtext { background: none; }
4307
4316
  .focus\:z-10:focus {
4308
4317
  z-index: 10;
4309
4318
  }
4319
+ .focus\:border-none:focus {
4320
+ border-style: none;
4321
+ }
4310
4322
  .focus\:border-blue-300:focus {
4311
4323
  --tw-border-opacity: 1;
4312
4324
  border-color: rgba(147, 197, 253, var(--tw-border-opacity));
@@ -4315,6 +4327,10 @@ span.CodeMirror-selectedtext { background: none; }
4315
4327
  --tw-border-opacity: 1;
4316
4328
  border-color: rgba(148, 163, 184, var(--tw-border-opacity));
4317
4329
  }
4330
+ .focus\:border-gray-700:focus {
4331
+ --tw-border-opacity: 1;
4332
+ border-color: rgba(55, 65, 81, var(--tw-border-opacity));
4333
+ }
4318
4334
  .focus\:bg-white:focus {
4319
4335
  --tw-bg-opacity: 1;
4320
4336
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
@@ -4522,6 +4538,9 @@ span.CodeMirror-selectedtext { background: none; }
4522
4538
  }
4523
4539
  }
4524
4540
 
4541
+ .pointer-events-none {
4542
+ pointer-events: none
4543
+ }
4525
4544
  .visible {
4526
4545
  visibility: visible
4527
4546
  }
@@ -4689,24 +4708,24 @@ span.CodeMirror-selectedtext { background: none; }
4689
4708
  .block {
4690
4709
  display: block
4691
4710
  }
4692
- .inline-flex {
4693
- display: inline-flex
4694
- }
4695
- .flex {
4696
- display: flex
4711
+ .inline-block {
4712
+ display: inline-block
4697
4713
  }
4698
4714
  .inline {
4699
4715
  display: inline
4700
4716
  }
4701
- .grid {
4702
- display: grid
4717
+ .flex {
4718
+ display: flex
4703
4719
  }
4704
- .inline-block {
4705
- display: inline-block
4720
+ .inline-flex {
4721
+ display: inline-flex
4706
4722
  }
4707
4723
  .table {
4708
4724
  display: table
4709
4725
  }
4726
+ .grid {
4727
+ display: grid
4728
+ }
4710
4729
  .hidden {
4711
4730
  display: none
4712
4731
  }
@@ -4794,6 +4813,9 @@ span.CodeMirror-selectedtext { background: none; }
4794
4813
  .w-64 {
4795
4814
  width: 16rem
4796
4815
  }
4816
+ .w-1\/2 {
4817
+ width: 50%
4818
+ }
4797
4819
  .w-11\/12 {
4798
4820
  width: 91.666667%
4799
4821
  }
@@ -4858,6 +4880,9 @@ span.CodeMirror-selectedtext { background: none; }
4858
4880
  .cursor-wait {
4859
4881
  cursor: wait
4860
4882
  }
4883
+ .cursor-not-allowed {
4884
+ cursor: not-allowed
4885
+ }
4861
4886
  .appearance-none {
4862
4887
  -webkit-appearance: none;
4863
4888
  appearance: none
@@ -4987,6 +5012,9 @@ span.CodeMirror-selectedtext { background: none; }
4987
5012
  .rounded {
4988
5013
  border-radius: 0.25rem
4989
5014
  }
5015
+ .rounded-none {
5016
+ border-radius: 0px
5017
+ }
4990
5018
  .rounded-full {
4991
5019
  border-radius: 9999px
4992
5020
  }
@@ -5014,6 +5042,18 @@ span.CodeMirror-selectedtext { background: none; }
5014
5042
  .border-r {
5015
5043
  border-right-width: 1px
5016
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
+ }
5017
5057
  .border-pink-600 {
5018
5058
  --tw-border-opacity: 1;
5019
5059
  border-color: rgba(219, 39, 119, var(--tw-border-opacity))
@@ -5221,14 +5261,14 @@ span.CodeMirror-selectedtext { background: none; }
5221
5261
  padding-top: 1px;
5222
5262
  padding-bottom: 1px
5223
5263
  }
5224
- .py-0 {
5225
- padding-top: 0px;
5226
- padding-bottom: 0px
5227
- }
5228
5264
  .py-3 {
5229
5265
  padding-top: 0.75rem;
5230
5266
  padding-bottom: 0.75rem
5231
5267
  }
5268
+ .py-0 {
5269
+ padding-top: 0px;
5270
+ padding-bottom: 0px
5271
+ }
5232
5272
  .py-8 {
5233
5273
  padding-top: 2rem;
5234
5274
  padding-bottom: 2rem
@@ -5412,12 +5452,37 @@ span.CodeMirror-selectedtext { background: none; }
5412
5452
  --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
5413
5453
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
5414
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
+ }
5415
5463
  .outline-none {
5416
5464
  outline: 2px solid transparent;
5417
5465
  outline-offset: 2px
5418
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
+ }
5419
5482
  .transition {
5420
- 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;
5421
5486
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
5422
5487
  transition-duration: 150ms
5423
5488
  }
@@ -5612,6 +5677,9 @@ span.CodeMirror-selectedtext { background: none; }
5612
5677
  .focus\:z-10:focus {
5613
5678
  z-index: 10
5614
5679
  }
5680
+ .focus\:border-none:focus {
5681
+ border-style: none
5682
+ }
5615
5683
  .focus\:border-blue-300:focus {
5616
5684
  --tw-border-opacity: 1;
5617
5685
  border-color: rgba(147, 197, 253, var(--tw-border-opacity))
@@ -5620,6 +5688,10 @@ span.CodeMirror-selectedtext { background: none; }
5620
5688
  --tw-border-opacity: 1;
5621
5689
  border-color: rgba(148, 163, 184, var(--tw-border-opacity))
5622
5690
  }
5691
+ .focus\:border-gray-700:focus {
5692
+ --tw-border-opacity: 1;
5693
+ border-color: rgba(55, 65, 81, var(--tw-border-opacity))
5694
+ }
5623
5695
  .focus\:bg-white:focus {
5624
5696
  --tw-bg-opacity: 1;
5625
5697
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity))
@@ -5853,7 +5925,9 @@ html, body{
5853
5925
  --tw-scale-x: 1;
5854
5926
  --tw-scale-y: 1;
5855
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));
5856
- 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;
5857
5931
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
5858
5932
  transition-duration: 150ms;
5859
5933
  transition-duration: 150ms;
@@ -5903,4 +5977,4 @@ html, body{
5903
5977
  }
5904
5978
 
5905
5979
 
5906
- /*# sourceMappingURL=application-13cc02fb.css.map*/
5980
+ /*# sourceMappingURL=application-5af67922.css.map*/