avo 3.10.10 → 3.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -4
  3. data/Gemfile.lock +51 -49
  4. data/app/components/avo/actions_component.html.erb +10 -6
  5. data/app/components/avo/actions_component.rb +37 -55
  6. data/app/components/avo/button_component.rb +3 -3
  7. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +8 -4
  8. data/app/components/avo/fields/belongs_to_field/show_component.rb +1 -1
  9. data/app/components/avo/fields/common/files/list_viewer_component.rb +1 -1
  10. data/app/components/avo/fields/has_one_field/show_component.rb +3 -3
  11. data/app/components/avo/index/resource_controls_component.rb +9 -5
  12. data/app/components/avo/paginator_component.html.erb +1 -1
  13. data/app/components/avo/paginator_component.rb +1 -1
  14. data/app/components/avo/panel_component.html.erb +6 -4
  15. data/app/components/avo/resource_component.rb +3 -2
  16. data/app/components/avo/resource_sidebar_component.html.erb +1 -1
  17. data/app/components/avo/views/resource_edit_component.html.erb +2 -2
  18. data/app/components/avo/views/resource_index_component.html.erb +2 -2
  19. data/app/components/avo/views/resource_index_component.rb +17 -4
  20. data/app/components/avo/views/resource_show_component.html.erb +2 -2
  21. data/app/controllers/avo/actions_controller.rb +1 -1
  22. data/app/controllers/avo/application_controller.rb +1 -1
  23. data/app/controllers/avo/associations_controller.rb +55 -18
  24. data/app/controllers/avo/base_controller.rb +7 -2
  25. data/app/controllers/avo/search_controller.rb +1 -1
  26. data/app/helpers/avo/application_helper.rb +1 -1
  27. data/app/javascript/avo.base.js +8 -0
  28. data/app/views/avo/actions/show.html.erb +3 -3
  29. data/app/views/avo/associations/new.html.erb +45 -20
  30. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +1 -1
  31. data/app/views/layouts/avo/application.html.erb +1 -2
  32. data/config/initializers/pagy.rb +1 -1
  33. data/lib/avo/base_action.rb +1 -0
  34. data/lib/avo/engine.rb +8 -4
  35. data/lib/avo/fields/base_field.rb +2 -2
  36. data/lib/avo/fields/belongs_to_field.rb +14 -8
  37. data/lib/avo/fields/concerns/is_required.rb +1 -1
  38. data/lib/avo/fields/has_base_field.rb +3 -1
  39. data/lib/avo/fields/has_one_field.rb +1 -1
  40. data/lib/avo/fields_execution_context.rb +13 -0
  41. data/lib/avo/resources/base.rb +32 -22
  42. data/lib/avo/version.rb +1 -1
  43. data/lib/avo.rb +10 -8
  44. data/lib/generators/avo/templates/initializer/avo.tt +3 -3
  45. data/lib/generators/avo/templates/locales/avo.ar.yml +1 -0
  46. data/lib/generators/avo/templates/locales/avo.de.yml +1 -0
  47. data/lib/generators/avo/templates/locales/avo.en.yml +1 -0
  48. data/lib/generators/avo/templates/locales/avo.es.yml +1 -0
  49. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -0
  50. data/lib/generators/avo/templates/locales/avo.it.yml +1 -0
  51. data/lib/generators/avo/templates/locales/avo.ja.yml +1 -0
  52. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -0
  53. data/lib/generators/avo/templates/locales/avo.nl.yml +1 -0
  54. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -0
  55. data/lib/generators/avo/templates/locales/avo.pl.yml +1 -0
  56. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -0
  57. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -0
  58. data/lib/generators/avo/templates/locales/avo.ro.yml +1 -0
  59. data/lib/generators/avo/templates/locales/avo.ru.yml +1 -0
  60. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -0
  61. data/lib/generators/avo/templates/locales/avo.uk.yml +1 -0
  62. data/lib/generators/avo/templates/locales/avo.zh.yml +1 -0
  63. data/lib/tasks/avo_tasks.rake +1 -1
  64. data/public/avo-assets/avo.base.css +49 -2
  65. data/public/avo-assets/avo.base.js +129 -129
  66. data/public/avo-assets/avo.base.js.map +3 -3
  67. data/tailwind.preset.js +2 -3
  68. metadata +4 -3
  69. /data/{lib → app}/avo/base_resource.rb +0 -0
@@ -0,0 +1,13 @@
1
+ module Avo
2
+ class FieldsExecutionContext < Avo::ExecutionContext
3
+ include Avo::Concerns::HasItems
4
+
5
+ def detect_fields
6
+ self.items_holder = Avo::Resources::Items::Holder.new(parent: self)
7
+
8
+ instance_exec(&target) if target.present? && target.respond_to?(:call)
9
+
10
+ self
11
+ end
12
+ end
13
+ end
@@ -119,7 +119,7 @@ module Avo
119
119
  end
120
120
 
121
121
  def valid_association_name(record, association_name)
122
- association_name if record._reflections.with_indifferent_access[association_name].present?
122
+ association_name if record.class.reflect_on_association(association_name).present?
123
123
  end
124
124
 
125
125
  def valid_attachment_name(record, association_name)
@@ -285,14 +285,16 @@ module Avo
285
285
  self
286
286
  end
287
287
 
288
- VIEW_METHODS_MAPPING = {
289
- index: [:index_fields, :display_fields],
290
- show: [:show_fields, :display_fields],
291
- edit: [:edit_fields, :form_fields],
292
- update: [:edit_fields, :form_fields],
293
- new: [:new_fields, :form_fields],
294
- create: [:new_fields, :form_fields]
295
- } unless defined? VIEW_METHODS_MAPPING
288
+ unless defined? VIEW_METHODS_MAPPING
289
+ VIEW_METHODS_MAPPING = {
290
+ index: [:index_fields, :display_fields],
291
+ show: [:show_fields, :display_fields],
292
+ edit: [:edit_fields, :form_fields],
293
+ update: [:edit_fields, :form_fields],
294
+ new: [:new_fields, :form_fields],
295
+ create: [:new_fields, :form_fields]
296
+ }
297
+ end
296
298
 
297
299
  def fetch_fields
298
300
  possible_methods_for_view = VIEW_METHODS_MAPPING[view.to_sym]
@@ -329,17 +331,17 @@ module Avo
329
331
  end
330
332
 
331
333
  # def action / def filter / def scope
332
- define_method entity do |entity_class, arguments: {}, icon: nil|
333
- entity_loader(entity).use({class: entity_class, arguments: arguments, icon: icon}.compact)
334
+ define_method entity do |entity_class, arguments: {}, icon: nil, default: nil|
335
+ entity_loader(entity).use({class: entity_class, arguments: arguments, icon: icon, default: default}.compact)
334
336
  end
335
337
 
336
338
  # def get_actions / def get_filters / def get_scopes
337
- define_method "get_#{plural_entity}" do
339
+ define_method :"get_#{plural_entity}" do
338
340
  return entity_loader(entity).bag if entity_loader(entity).present?
339
341
 
340
342
  # ex: @actions_loader = Avo::Loaders::ActionsLoader.new
341
343
  instance_variable_set(
342
- "@#{plural_entity}_loader",
344
+ :"@#{plural_entity}_loader",
343
345
  "Avo::Loaders::#{plural_entity.humanize}Loader".constantize.new
344
346
  )
345
347
 
@@ -349,8 +351,8 @@ module Avo
349
351
  end
350
352
 
351
353
  # def get_action_arguments / def get_filter_arguments / def get_scope_arguments
352
- define_method "get_#{entity}_arguments" do |entity_class|
353
- klass = send("get_#{plural_entity}").find { |entity| entity[:class].to_s == entity_class.to_s }
354
+ define_method :"get_#{entity}_arguments" do |entity_class|
355
+ klass = send(:"get_#{plural_entity}").find { |entity| entity[:class].to_s == entity_class.to_s }
354
356
 
355
357
  raise "Couldn't find '#{entity_class}' in the 'def #{plural_entity}' method on your '#{self.class}' resource." if klass.nil?
356
358
 
@@ -359,7 +361,7 @@ module Avo
359
361
  end
360
362
 
361
363
  def hydrate(...)
362
- super(...)
364
+ super
363
365
 
364
366
  if @record.present?
365
367
  hydrate_model_with_default_values if @view&.new?
@@ -394,8 +396,8 @@ module Avo
394
396
  def record_title
395
397
  return name if @record.nil?
396
398
 
397
- # Get the title from the record if title is not set, try to get the name, title or label, or fallback to the id
398
- return @record.try(:name) || @record.try(:title) || @record.try(:label) || @record.id if title.nil?
399
+ # Get the title from the record if title is not set, try to get the name, title or label, or fallback to the to_param
400
+ return @record.try(:name) || @record.try(:title) || @record.try(:label) || @record.to_param if title.nil?
399
401
 
400
402
  # If the title is a symbol, get the value from the record else execute the block/string
401
403
  case title
@@ -443,10 +445,14 @@ module Avo
443
445
  .to_h
444
446
  end
445
447
 
446
- def fill_record(record, params, extra_params: [])
448
+ def fill_record(record, params, extra_params: [], fields: nil)
447
449
  # Write the field values
448
450
  params.each do |key, value|
449
- field = fields_by_database_id[key]
451
+ field = if fields.present?
452
+ fields.find { |f| f.id == key.to_sym }
453
+ else
454
+ fields_by_database_id[key]
455
+ end
450
456
 
451
457
  next unless field.present?
452
458
 
@@ -509,7 +515,7 @@ module Avo
509
515
 
510
516
  if field.type == "belongs_to"
511
517
 
512
- reflection = @record._reflections.with_indifferent_access[@params[:via_relation]]
518
+ reflection = @record.class.reflect_on_association(@params[:via_relation]) if @params[:via_relation].present?
513
519
 
514
520
  if field.polymorphic_as.present? && field.types.map(&:to_s).include?(@params[:via_relation_class])
515
521
  # set the value to the actual record
@@ -601,7 +607,11 @@ module Avo
601
607
  end
602
608
 
603
609
  def entity_loader(entity)
604
- instance_variable_get("@#{entity.to_s.pluralize}_loader")
610
+ instance_variable_get(:"@#{entity.to_s.pluralize}_loader")
611
+ end
612
+
613
+ def record_param
614
+ @record_param ||= @record.persisted? ? @record.to_param : nil
605
615
  end
606
616
  end
607
617
  end
data/lib/avo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Avo
2
- VERSION = "3.10.10" unless const_defined?(:VERSION)
2
+ VERSION = "3.11.0" unless const_defined?(:VERSION)
3
3
  end
data/lib/avo.rb CHANGED
@@ -36,19 +36,20 @@ module Avo
36
36
  class DeprecatedAPIError < StandardError; end
37
37
 
38
38
  class MissingResourceError < StandardError
39
- def initialize(resource_name)
40
- super(missing_resource_message(resource_name))
39
+ def initialize(model_class, field_name = nil)
40
+ super(missing_resource_message(model_class, field_name))
41
41
  end
42
42
 
43
43
  private
44
44
 
45
- def missing_resource_message(resource_name)
46
- name = resource_name.to_s.underscore
45
+ def missing_resource_message(model_class, field_name)
46
+ model_name = model_class.to_s.underscore
47
+ field_name ||= model_name
47
48
 
48
- "Failed to find a resource while rendering the :#{name} field.\n" \
49
- "You may generate a resource for it by running 'rails generate avo:resource #{name.singularize}'.\n" \
49
+ "Failed to find a resource while rendering the :#{field_name} field.\n" \
50
+ "You may generate a resource for it by running 'rails generate avo:resource #{model_name.singularize}'.\n" \
50
51
  "\n" \
51
- "Alternatively add the 'use_resource' option to the :#{name} field to specify a custom resource to be used.\n" \
52
+ "Alternatively add the 'use_resource' option to the :#{field_name} field to specify a custom resource to be used.\n" \
52
53
  "More info on https://docs.avohq.io/#{Avo::VERSION[0]}.0/resources.html."
53
54
  end
54
55
  end
@@ -75,7 +76,7 @@ module Avo
75
76
  Avo::Current.error_manager = Avo::ErrorManager.build
76
77
  # Check rails version issues only on NON Production environments
77
78
  unless Rails.env.production?
78
- check_rails_version_issues
79
+ check_rails_version_issues
79
80
  display_menu_editor_warning
80
81
  end
81
82
  Avo::Current.resource_manager = Avo::Resources::ResourceManager.build
@@ -138,6 +139,7 @@ module Avo
138
139
  mount Avo::DynamicFilters::Engine, at: "/avo-dynamic_filters" if defined?(Avo::DynamicFilters::Engine)
139
140
  mount Avo::Dashboards::Engine, at: "/dashboards" if defined?(Avo::Dashboards::Engine)
140
141
  mount Avo::Pro::Engine, at: "/avo-pro" if defined?(Avo::Pro::Engine)
142
+ mount Avo::Kanban::Engine, at: "/boards" if defined?(Avo::Kanban::Engine)
141
143
  }
142
144
  end
143
145
 
@@ -22,13 +22,13 @@ Avo.configure do |config|
22
22
  end
23
23
 
24
24
  ## == Authentication ==
25
- # config.current_user_method = {}
26
- # config.is_admin_method = :is_admin
27
- # config.is_developer_method = :is_developer
25
+ # config.current_user_method = :current_user
28
26
  # config.authenticate_with do
29
27
  # end
30
28
 
31
29
  ## == Authorization ==
30
+ # config.is_admin_method = :is_admin
31
+ # config.is_developer_method = :is_developer
32
32
  # config.authorization_methods = {
33
33
  # index: 'index?',
34
34
  # show: 'show?',
@@ -21,6 +21,7 @@ ar:
21
21
  attachment_class_attached: "%{attachment_class} تم ربط"
22
22
  attachment_class_detached: "%{attachment_class} تم فصل"
23
23
  attachment_destroyed: تم حذف المرفق
24
+ attachment_failed: فشل في إرفاق %{attachment_class}
24
25
  cancel: إلغاء
25
26
  choose_a_country: اختر دولة
26
27
  choose_an_option: اختر خيارًا
@@ -16,6 +16,7 @@ de:
16
16
  attach_item: "%{item} anhängen"
17
17
  attachment_class_attached: "%{attachment_class} angehängt."
18
18
  attachment_class_detached: "%{attachment_class} abgehängt."
19
+ attachment_failed: "Kon %{attachment_class} niet bijvoegen"
19
20
  attachment_destroyed: Anhang gelöscht
20
21
  cancel: Abbrechen
21
22
  choose_a_country: Land auswählen
@@ -15,6 +15,7 @@ en:
15
15
  attachment_class_attached: "%{attachment_class} attached."
16
16
  attachment_class_detached: "%{attachment_class} detached."
17
17
  attachment_destroyed: Attachment destroyed
18
+ attachment_failed: Failed to attach %{attachment_class}
18
19
  cancel: Cancel
19
20
  choose_a_country: Choose a country
20
21
  choose_an_option: Choose an option
@@ -17,6 +17,7 @@ es:
17
17
  attachment_class_attached: "%{attachment_class} adjuntado/a."
18
18
  attachment_class_detached: "%{attachment_class} adjuntado/a."
19
19
  attachment_destroyed: Adjunto eliminado
20
+ attachment_failed: No se pudo adjuntar %{attachment_class}
20
21
  cancel: Cancelar
21
22
  choose_a_country: Elige un país
22
23
  choose_an_option: Elige una opción
@@ -17,6 +17,7 @@ fr:
17
17
  attachment_class_attached: "%{attachment_class} attaché."
18
18
  attachment_class_detached: "%{attachment_class} détaché."
19
19
  attachment_destroyed: Pièce jointe détruite
20
+ attachment_failed: Échec de l'ajout de %{attachment_class}
20
21
  cancel: Annuler
21
22
  choose_a_country: Sélectionnez un pays
22
23
  choose_an_option: Sélectionnez une option
@@ -16,6 +16,7 @@ it:
16
16
  attach_item: Allega %{item}
17
17
  attachment_class_attached: "%{attachment_class} allegato."
18
18
  attachment_class_detached: "%{attachment_class} staccato."
19
+ attachment_failed: "Impossibile allegare %{attachment_class}"
19
20
  attachment_destroyed: Allegato distrutto
20
21
  cancel: Annulla
21
22
  choose_a_country: Scegli un paese
@@ -17,6 +17,7 @@ ja:
17
17
  attachment_class_attached: "%{attachment_class}をアタッチしました。"
18
18
  attachment_class_detached: "%{attachment_class}をデタッチしました。"
19
19
  attachment_destroyed: アタッチは削除されました
20
+ attachment_failed: "%{attachment_class}の添付に失敗しました"
20
21
  cancel: キャンセル
21
22
  choose_a_country: 国を選択
22
23
  choose_an_option: オプションを選択
@@ -17,6 +17,7 @@ nb:
17
17
  attachment_class_attached: "%{attachment_class} lagt til."
18
18
  attachment_class_detached: "%{attachment_class} fjernet."
19
19
  attachment_destroyed: Vedlett slettet
20
+ attachment_failed: Kunne ikke legge ved %{attachment_class}
20
21
  cancel: Avbryt
21
22
  choose_a_country: Velg et land
22
23
  choose_an_option: Velg et alternativ
@@ -16,6 +16,7 @@ nl:
16
16
  attach_item: "%{item} bijvoegen"
17
17
  attachment_class_attached: "%{attachment_class} bijgevoegd."
18
18
  attachment_class_detached: "%{attachment_class} losgekoppeld."
19
+ attachment_failed: "Kon %{attachment_class} niet bijvoegen"
19
20
  attachment_destroyed: Bijlage verwijderd
20
21
  cancel: Annuleren
21
22
  choose_a_country: Kies een land
@@ -17,6 +17,7 @@ nn:
17
17
  attachment_class_attached: "%{attachment_class} lagt til."
18
18
  attachment_class_detached: "%{attachment_class} fjerna."
19
19
  attachment_destroyed: Vedlegg sletta
20
+ attachment_failed: Klarte ikkje å legge ved %{attachment_class}
20
21
  cancel: Avbryt
21
22
  choose_a_country: Vel eit land
22
23
  choose_an_option: Vel eit alternativ
@@ -16,6 +16,7 @@ pl:
16
16
  attach_item: Załącz %{item}
17
17
  attachment_class_attached: "%{attachment_class} załączony."
18
18
  attachment_class_detached: "%{attachment_class} odłączony."
19
+ attachment_failed: "Nie udało się dołączyć %{attachment_class}"
19
20
  attachment_destroyed: Załącznik usunięty
20
21
  cancel: Anuluj
21
22
  choose_a_country: Wybierz kraj
@@ -17,6 +17,7 @@ pt-BR:
17
17
  attachment_class_attached: "%{attachment_class} anexado."
18
18
  attachment_class_detached: "%{attachment_class} separado."
19
19
  attachment_destroyed: Anexo destruído
20
+ attachment_failed: Não foi possível anexar %{attachment_class}
20
21
  cancel: Cancelar
21
22
  choose_a_country: Escolha um país
22
23
  choose_an_option: Escolha uma opção
@@ -17,6 +17,7 @@ pt:
17
17
  attachment_class_attached: "%{attachment_class} anexado."
18
18
  attachment_class_detached: "%{attachment_class} separado."
19
19
  attachment_destroyed: Anexo destruído
20
+ attachment_failed: Não foi possível anexar %{attachment_class}
20
21
  cancel: Cancelar
21
22
  choose_a_country: Escolha um país
22
23
  choose_an_option: Escolha uma opção
@@ -18,6 +18,7 @@ ro:
18
18
  attachment_class_attached: "%{attachment_class} anexat."
19
19
  attachment_class_detached: "%{attachment_class} separat."
20
20
  attachment_destroyed: Atașamentul a fost distrus
21
+ attachment_failed: Nu s-a reușit atașarea %{attachment_class}
21
22
  cancel: Anulează
22
23
  choose_a_country: Alege o țară
23
24
  choose_an_option: Alege o opțiune
@@ -16,6 +16,7 @@ ru:
16
16
  attach_item: Прикрепить %{item}
17
17
  attachment_class_attached: "%{attachment_class} прикреплено."
18
18
  attachment_class_detached: "%{attachment_class} отсоединено."
19
+ attachment_failed: "Не удалось прикрепить %{attachment_class}"
19
20
  attachment_destroyed: Вложение удалено
20
21
  cancel: Отмена
21
22
  choose_a_country: Выберите страну
@@ -17,6 +17,7 @@ tr:
17
17
  attachment_class_attached: "%{attachment_class} ilişkilendirildi."
18
18
  attachment_class_detached: "%{attachment_class} ilişkisi kesildi."
19
19
  attachment_destroyed: Ek silindi
20
+ attachment_failed: "%{attachment_class} eklenemedi"
20
21
  cancel: İptal et
21
22
  choose_a_country: Bir ülke seç
22
23
  choose_an_option: Bir seçenek seç
@@ -16,6 +16,7 @@ uk:
16
16
  attach_item: Прикріпити %{item}
17
17
  attachment_class_attached: "%{attachment_class} прикріплено."
18
18
  attachment_class_detached: "%{attachment_class} відкріплено."
19
+ attachment_failed: "Не вдалося прикріпити %{attachment_class}"
19
20
  attachment_destroyed: Вкладення знищено
20
21
  cancel: Скасувати
21
22
  choose_a_country: Виберіть країну
@@ -16,6 +16,7 @@ zh:
16
16
  attach_item: 附加 %{item}
17
17
  attachment_class_attached: "%{attachment_class} 已附加。"
18
18
  attachment_class_detached: "%{attachment_class} 已分离。"
19
+ attachment_failed: "无法附加 %{attachment_class}"
19
20
  attachment_destroyed: 附件已删除
20
21
  cancel: 取消
21
22
  choose_a_country: 选择一个国家
@@ -79,7 +79,7 @@ task "avo:sym_link" do
79
79
  `touch #{packages_path}/.keep`
80
80
  end
81
81
 
82
- ["avo-advanced", "avo-pro", "avo-dynamic_filters", "avo-dashboards", "avo-menu"].each do |gem|
82
+ ["avo-advanced", "avo-pro", "avo-dynamic_filters", "avo-dashboards", "avo-menu", "avo-kanban"].each do |gem|
83
83
  path = `bundle show #{gem} 2> /dev/null`.chomp
84
84
 
85
85
  # If path is emty we check if package is defined outside of root (on release process it is)
@@ -3671,7 +3671,7 @@ body[data-theme=dark], body.dark {
3671
3671
  text-indent:1em
3672
3672
  }
3673
3673
 
3674
- /*! tailwindcss v3.4.6 | MIT License | https://tailwindcss.com
3674
+ /*! tailwindcss v3.4.7 | MIT License | https://tailwindcss.com
3675
3675
  */
3676
3676
 
3677
3677
  /*
@@ -7342,10 +7342,18 @@ tag.tagify__tag{
7342
7342
  bottom:0px
7343
7343
  }
7344
7344
 
7345
+ .bottom-1{
7346
+ bottom:0.25rem
7347
+ }
7348
+
7345
7349
  .bottom-full{
7346
7350
  bottom:100%
7347
7351
  }
7348
7352
 
7353
+ .end-1{
7354
+ inset-inline-end:0.25rem
7355
+ }
7356
+
7349
7357
  .end-2{
7350
7358
  inset-inline-end:0.5rem
7351
7359
  }
@@ -7366,6 +7374,10 @@ tag.tagify__tag{
7366
7374
  left:50%
7367
7375
  }
7368
7376
 
7377
+ .left-5{
7378
+ left:1.25rem
7379
+ }
7380
+
7369
7381
  .left-auto{
7370
7382
  left:auto
7371
7383
  }
@@ -7378,6 +7390,14 @@ tag.tagify__tag{
7378
7390
  right:0.75rem
7379
7391
  }
7380
7392
 
7393
+ .start-1{
7394
+ inset-inline-start:0.25rem
7395
+ }
7396
+
7397
+ .start-2{
7398
+ inset-inline-start:0.5rem
7399
+ }
7400
+
7381
7401
  .top-0{
7382
7402
  top:0px
7383
7403
  }
@@ -7398,6 +7418,10 @@ tag.tagify__tag{
7398
7418
  top:0.75rem
7399
7419
  }
7400
7420
 
7421
+ .top-5{
7422
+ top:1.25rem
7423
+ }
7424
+
7401
7425
  .top-\[-1px\]{
7402
7426
  top:-1px
7403
7427
  }
@@ -7870,6 +7894,16 @@ tag.tagify__tag{
7870
7894
  aspect-ratio:16 / 9
7871
7895
  }
7872
7896
 
7897
+ .size-1{
7898
+ width:0.25rem;
7899
+ height:0.25rem
7900
+ }
7901
+
7902
+ .size-2{
7903
+ width:0.5rem;
7904
+ height:0.5rem
7905
+ }
7906
+
7873
7907
  .size-24{
7874
7908
  width:6rem;
7875
7909
  height:6rem
@@ -7910,6 +7944,10 @@ tag.tagify__tag{
7910
7944
  height:4rem
7911
7945
  }
7912
7946
 
7947
+ .h-2{
7948
+ height:0.5rem
7949
+ }
7950
+
7913
7951
  .h-20{
7914
7952
  height:5rem
7915
7953
  }
@@ -8640,6 +8678,10 @@ tag.tagify__tag{
8640
8678
  border-radius:0.25rem
8641
8679
  }
8642
8680
 
8681
+ .rounded-2xl{
8682
+ border-radius:1rem
8683
+ }
8684
+
8643
8685
  .rounded-full{
8644
8686
  border-radius:9999px
8645
8687
  }
@@ -8657,7 +8699,7 @@ tag.tagify__tag{
8657
8699
  }
8658
8700
 
8659
8701
  .rounded-xl{
8660
- border-radius:1rem
8702
+ border-radius:0.75rem
8661
8703
  }
8662
8704
 
8663
8705
  .rounded-l{
@@ -9830,6 +9872,11 @@ tag.tagify__tag{
9830
9872
  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)
9831
9873
  }
9832
9874
 
9875
+ .drop-shadow{
9876
+ --tw-drop-shadow:drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
9877
+ 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)
9878
+ }
9879
+
9833
9880
  .grayscale{
9834
9881
  --tw-grayscale:grayscale(100%);
9835
9882
  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)