avo 1.4.0.pre.1 → 1.4.4

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 (335) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -4
  3. data/README.md +1 -0
  4. data/app/components/avo/fields/badge_field/index_component.html.erb +3 -0
  5. data/app/components/avo/fields/badge_field/index_component.rb +4 -0
  6. data/app/components/avo/fields/badge_field/show_component.html.erb +3 -0
  7. data/app/components/avo/fields/badge_field/show_component.rb +4 -0
  8. data/app/components/avo/{edit/fields/belongs_to_field_component.html.erb → fields/belongs_to_field/edit_component.html.erb} +0 -0
  9. data/app/components/avo/{edit/fields/belongs_to_field_component.rb → fields/belongs_to_field/edit_component.rb} +1 -1
  10. data/app/components/avo/{index/fields/belongs_to_field_component.html.erb → fields/belongs_to_field/index_component.html.erb} +0 -0
  11. data/app/components/avo/fields/belongs_to_field/index_component.rb +4 -0
  12. data/app/components/avo/{show/fields/belongs_to_field_component.html.erb → fields/belongs_to_field/show_component.html.erb} +0 -0
  13. data/app/components/avo/fields/belongs_to_field/show_component.rb +4 -0
  14. data/app/components/avo/{edit/fields/boolean_field_component.html.erb → fields/boolean_field/edit_component.html.erb} +0 -0
  15. data/app/components/avo/fields/boolean_field/edit_component.rb +4 -0
  16. data/app/components/avo/fields/boolean_field/index_component.html.erb +3 -0
  17. data/app/components/avo/fields/boolean_field/index_component.rb +4 -0
  18. data/app/components/avo/{show/fields/boolean_field_component.html.erb → fields/boolean_field/show_component.html.erb} +1 -1
  19. data/app/components/avo/fields/boolean_field/show_component.rb +4 -0
  20. data/app/components/avo/{edit/fields/boolean_group_field_component.html.erb → fields/boolean_group_field/edit_component.html.erb} +0 -0
  21. data/app/components/avo/fields/boolean_group_field/edit_component.rb +4 -0
  22. data/app/components/avo/fields/boolean_group_field/index_component.html.erb +3 -0
  23. data/app/components/avo/fields/boolean_group_field/index_component.rb +4 -0
  24. data/app/components/avo/fields/boolean_group_field/show_component.html.erb +3 -0
  25. data/app/components/avo/fields/boolean_group_field/show_component.rb +4 -0
  26. data/app/components/avo/{edit/fields/code_field_component.html.erb → fields/code_field/edit_component.html.erb} +0 -0
  27. data/app/components/avo/fields/code_field/edit_component.rb +4 -0
  28. data/app/components/avo/{show/fields/code_field_component.html.erb → fields/code_field/show_component.html.erb} +0 -0
  29. data/app/components/avo/fields/code_field/show_component.rb +4 -0
  30. data/app/components/avo/{common → fields/common}/badge_viewer_component.html.erb +0 -0
  31. data/app/components/avo/{common → fields/common}/badge_viewer_component.rb +1 -1
  32. data/app/components/avo/{common → fields/common}/boolean_check_component.html.erb +0 -0
  33. data/app/components/avo/{common → fields/common}/boolean_check_component.rb +1 -1
  34. data/app/components/avo/{common → fields/common}/boolean_group_component.html.erb +1 -1
  35. data/app/components/avo/{common → fields/common}/boolean_group_component.rb +1 -1
  36. data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
  37. data/app/components/avo/{common → fields/common}/files_list_viewer_component.rb +1 -1
  38. data/app/components/avo/{common → fields/common}/gravatar_viewer_component.html.erb +0 -0
  39. data/app/components/avo/{common → fields/common}/gravatar_viewer_component.rb +1 -1
  40. data/app/components/avo/{common → fields/common}/heading_component.html.erb +0 -0
  41. data/app/components/avo/{common → fields/common}/heading_component.rb +1 -1
  42. data/app/components/avo/{common → fields/common}/key_value_component.html.erb +0 -0
  43. data/app/components/avo/{common → fields/common}/key_value_component.rb +1 -1
  44. data/app/components/avo/{common → fields/common}/multiple_file_viewer_component.html.erb +0 -0
  45. data/app/components/avo/{common → fields/common}/multiple_file_viewer_component.rb +1 -1
  46. data/app/components/avo/{common → fields/common}/single_file_viewer_component.html.erb +0 -0
  47. data/app/components/avo/{common → fields/common}/single_file_viewer_component.rb +1 -1
  48. data/app/components/avo/fields/common/status_viewer_component.html.erb +18 -0
  49. data/app/components/avo/{common → fields/common}/status_viewer_component.rb +1 -1
  50. data/app/components/avo/{edit/fields/country_field_component.html.erb → fields/country_field/edit_component.html.erb} +0 -0
  51. data/app/components/avo/fields/country_field/edit_component.rb +4 -0
  52. data/app/components/avo/{index/fields/country_field_component.html.erb → fields/country_field/index_component.html.erb} +0 -0
  53. data/app/components/avo/fields/country_field/index_component.rb +4 -0
  54. data/app/components/avo/{show/fields/country_field_component.html.erb → fields/country_field/show_component.html.erb} +0 -0
  55. data/app/components/avo/fields/country_field/show_component.rb +4 -0
  56. data/app/components/avo/{edit/fields/date_field_component.html.erb → fields/date_field/edit_component.html.erb} +0 -0
  57. data/app/components/avo/fields/date_field/edit_component.rb +4 -0
  58. data/app/components/avo/{index/fields/date_field_component.html.erb → fields/date_field/index_component.html.erb} +0 -0
  59. data/app/components/avo/fields/date_field/index_component.rb +4 -0
  60. data/app/components/avo/{show/fields/date_field_component.html.erb → fields/date_field/show_component.html.erb} +0 -0
  61. data/app/components/avo/fields/date_field/show_component.rb +4 -0
  62. data/app/components/avo/{edit/fields/date_time_field_component.html.erb → fields/date_time_field/edit_component.html.erb} +0 -0
  63. data/app/components/avo/fields/date_time_field/edit_component.rb +4 -0
  64. data/app/components/avo/{index/fields/date_time_field_component.html.erb → fields/date_time_field/index_component.html.erb} +0 -0
  65. data/app/components/avo/fields/date_time_field/index_component.rb +4 -0
  66. data/app/components/avo/{show/fields/date_time_field_component.html.erb → fields/date_time_field/show_component.html.erb} +0 -0
  67. data/app/components/avo/fields/date_time_field/show_component.rb +4 -0
  68. data/app/components/avo/{edit/fields/field_component.rb → fields/edit_component.rb} +1 -1
  69. data/app/components/avo/{edit/fields/external_image_field_component.html.erb → fields/external_image_field/edit_component.html.erb} +0 -0
  70. data/app/components/avo/fields/external_image_field/edit_component.rb +4 -0
  71. data/app/components/avo/{index/fields/external_image_field_component.html.erb → fields/external_image_field/index_component.html.erb} +0 -0
  72. data/app/components/avo/fields/external_image_field/index_component.rb +4 -0
  73. data/app/components/avo/{show/fields/external_image_field_component.html.erb → fields/external_image_field/show_component.html.erb} +0 -0
  74. data/app/components/avo/fields/external_image_field/show_component.rb +4 -0
  75. data/app/components/avo/{edit/fields/file_field_component.html.erb → fields/file_field/edit_component.html.erb} +1 -1
  76. data/app/components/avo/fields/file_field/edit_component.rb +4 -0
  77. data/app/components/avo/{index/fields/file_field_component.html.erb → fields/file_field/index_component.html.erb} +1 -1
  78. data/app/components/avo/fields/file_field/index_component.rb +4 -0
  79. data/app/components/avo/fields/file_field/show_component.html.erb +3 -0
  80. data/app/components/avo/fields/file_field/show_component.rb +4 -0
  81. data/app/components/avo/{edit/fields/files_field_component.html.erb → fields/files_field/edit_component.html.erb} +1 -1
  82. data/app/components/avo/fields/files_field/edit_component.rb +4 -0
  83. data/app/components/avo/{index/fields/files_field_component.html.erb → fields/files_field/index_component.html.erb} +0 -0
  84. data/app/components/avo/fields/files_field/index_component.rb +4 -0
  85. data/app/components/avo/fields/files_field/show_component.html.erb +3 -0
  86. data/app/components/avo/fields/files_field/show_component.rb +4 -0
  87. data/app/components/avo/{index/fields/gravatar_field_component.html.erb → fields/gravatar_field/index_component.html.erb} +2 -2
  88. data/app/components/avo/fields/gravatar_field/index_component.rb +4 -0
  89. data/app/components/avo/{show/fields/gravatar_field_component.html.erb → fields/gravatar_field/show_component.html.erb} +1 -1
  90. data/app/components/avo/fields/gravatar_field/show_component.rb +4 -0
  91. data/app/components/avo/{show/fields/has_many_field_component.html.erb → fields/has_many_field/show_component.html.erb} +0 -0
  92. data/app/components/avo/fields/has_many_field/show_component.rb +4 -0
  93. data/app/components/avo/{index/fields/has_one_field_component.html.erb → fields/has_one_field/index_component.html.erb} +0 -0
  94. data/app/components/avo/fields/has_one_field/index_component.rb +4 -0
  95. data/app/components/avo/{show/fields/has_one_field_component.html.erb → fields/has_one_field/show_component.html.erb} +0 -0
  96. data/app/components/avo/fields/has_one_field/show_component.rb +5 -0
  97. data/app/components/avo/{show/fields/heading_field_component.html.erb → fields/heading_field/edit_component.html.erb} +1 -1
  98. data/app/components/avo/fields/heading_field/edit_component.rb +4 -0
  99. data/app/components/avo/{edit/fields/heading_field_component.html.erb → fields/heading_field/show_component.html.erb} +1 -1
  100. data/app/components/avo/fields/heading_field/show_component.rb +4 -0
  101. data/app/components/avo/{edit/fields/hidden_field_component.html.erb → fields/hidden_field/edit_component.html.erb} +0 -0
  102. data/app/components/avo/fields/hidden_field/edit_component.rb +4 -0
  103. data/app/components/avo/{edit/fields/id_field_component.html.erb → fields/id_field/edit_component.html.erb} +0 -0
  104. data/app/components/avo/fields/id_field/edit_component.rb +4 -0
  105. data/app/components/avo/fields/id_field/index_component.html.erb +3 -0
  106. data/app/components/avo/fields/id_field/index_component.rb +4 -0
  107. data/app/components/avo/{show/fields/id_field_component.html.erb → fields/id_field/show_component.html.erb} +0 -0
  108. data/app/components/avo/fields/id_field/show_component.rb +4 -0
  109. data/app/components/avo/fields/index_component.rb +20 -0
  110. data/app/components/avo/{edit/fields/key_value_field_component.html.erb → fields/key_value_field/edit_component.html.erb} +1 -1
  111. data/app/components/avo/fields/key_value_field/edit_component.rb +4 -0
  112. data/app/components/avo/{show/fields/key_value_field_component.html.erb → fields/key_value_field/show_component.html.erb} +1 -1
  113. data/app/components/avo/fields/key_value_field/show_component.rb +4 -0
  114. data/app/components/avo/{edit/fields/markdown_field_component.html.erb → fields/markdown_field/edit_component.html.erb} +0 -0
  115. data/app/components/avo/fields/markdown_field/edit_component.rb +4 -0
  116. data/app/components/avo/{show/fields/markdown_field_component.html.erb → fields/markdown_field/show_component.html.erb} +1 -1
  117. data/app/components/avo/fields/markdown_field/show_component.rb +4 -0
  118. data/app/components/avo/{edit/fields/number_field_component.html.erb → fields/number_field/edit_component.html.erb} +3 -3
  119. data/app/components/avo/fields/number_field/edit_component.rb +4 -0
  120. data/app/components/avo/{index/fields/number_field_component.html.erb → fields/number_field/index_component.html.erb} +0 -0
  121. data/app/components/avo/fields/number_field/index_component.rb +4 -0
  122. data/app/components/avo/{show/fields/number_field_component.html.erb → fields/number_field/show_component.html.erb} +0 -0
  123. data/app/components/avo/fields/number_field/show_component.rb +4 -0
  124. data/app/components/avo/{edit/fields/password_field_component.html.erb → fields/password_field/edit_component.html.erb} +0 -0
  125. data/app/components/avo/fields/password_field/edit_component.rb +4 -0
  126. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +26 -0
  127. data/app/components/avo/fields/progress_bar_field/edit_component.rb +4 -0
  128. data/app/components/avo/fields/progress_bar_field/index_component.html.erb +8 -0
  129. data/app/components/avo/fields/progress_bar_field/index_component.rb +4 -0
  130. data/app/components/avo/fields/progress_bar_field/show_component.html.erb +8 -0
  131. data/app/components/avo/fields/progress_bar_field/show_component.rb +4 -0
  132. data/app/components/avo/{edit/fields/select_field_component.html.erb → fields/select_field/edit_component.html.erb} +0 -0
  133. data/app/components/avo/fields/select_field/edit_component.rb +4 -0
  134. data/app/components/avo/{index/fields/select_field_component.html.erb → fields/select_field/index_component.html.erb} +0 -0
  135. data/app/components/avo/fields/select_field/index_component.rb +4 -0
  136. data/app/components/avo/{show/fields/select_field_component.html.erb → fields/select_field/show_component.html.erb} +0 -0
  137. data/app/components/avo/fields/select_field/show_component.rb +4 -0
  138. data/app/components/avo/{show/fields/field_component.rb → fields/show_component.rb} +1 -1
  139. data/app/components/avo/{edit/fields/status_field_component.html.erb → fields/status_field/edit_component.html.erb} +0 -0
  140. data/app/components/avo/fields/status_field/edit_component.rb +4 -0
  141. data/app/components/avo/fields/status_field/index_component.html.erb +3 -0
  142. data/app/components/avo/fields/status_field/index_component.rb +4 -0
  143. data/app/components/avo/fields/status_field/show_component.html.erb +3 -0
  144. data/app/components/avo/fields/status_field/show_component.rb +4 -0
  145. data/app/components/avo/{edit/fields/text_field_component.html.erb → fields/text_field/edit_component.html.erb} +0 -0
  146. data/app/components/avo/fields/text_field/edit_component.rb +4 -0
  147. data/app/components/avo/fields/text_field/index_component.html.erb +3 -0
  148. data/app/components/avo/fields/text_field/index_component.rb +4 -0
  149. data/app/components/avo/{show/fields/text_field_component.html.erb → fields/text_field/show_component.html.erb} +0 -0
  150. data/app/components/avo/fields/text_field/show_component.rb +4 -0
  151. data/app/components/avo/{edit/fields/textarea_field_component.html.erb → fields/textarea_field/edit_component.html.erb} +1 -1
  152. data/app/components/avo/fields/textarea_field/edit_component.rb +4 -0
  153. data/app/components/avo/{show/fields/textarea_field_component.html.erb → fields/textarea_field/show_component.html.erb} +0 -0
  154. data/app/components/avo/fields/textarea_field/show_component.rb +4 -0
  155. data/app/components/avo/{edit/fields/trix_field_component.html.erb → fields/trix_field/edit_component.html.erb} +1 -2
  156. data/app/components/avo/fields/trix_field/edit_component.rb +4 -0
  157. data/app/components/avo/{show/fields/trix_field_component.html.erb → fields/trix_field/show_component.html.erb} +0 -0
  158. data/app/components/avo/fields/trix_field/show_component.rb +4 -0
  159. data/app/components/avo/index/resource_controls_component.html.erb +2 -3
  160. data/app/components/avo/index/table_row_component.html.erb +1 -1
  161. data/app/components/avo/panel_component.html.erb +1 -1
  162. data/app/components/avo/panel_component.rb +4 -4
  163. data/app/components/avo/views/resource_edit_component.html.erb +2 -2
  164. data/app/components/avo/views/resource_index_component.html.erb +3 -3
  165. data/app/components/avo/views/resource_new_component.html.erb +2 -2
  166. data/app/components/avo/views/resource_show_component.html.erb +5 -5
  167. data/app/controllers/avo/base_controller.rb +26 -2
  168. data/app/controllers/avo/home_controller.rb +1 -1
  169. data/app/controllers/avo/search_controller.rb +1 -1
  170. data/app/helpers/avo/resources_helper.rb +0 -44
  171. data/app/packs/entrypoints/application.css +1 -0
  172. data/app/packs/js/controllers/fields/key_value_controller.js +0 -1
  173. data/app/packs/stylesheets/components/progress.css +13 -0
  174. data/app/packs/stylesheets/components/status.css +31 -20
  175. data/app/packs/svgs/check-circle-sm.svg +3 -0
  176. data/app/packs/svgs/x-circle-sm.svg +3 -0
  177. data/app/views/avo/actions/show.html.erb +1 -1
  178. data/app/views/avo/partials/_profile_dropdown.html.erb +23 -0
  179. data/app/views/layouts/avo/application.html.erb +6 -3
  180. data/avo.gemspec +1 -1
  181. data/db/factories.rb +3 -0
  182. data/db/migrate/20210421064037_add_color_to_teams.rb +5 -0
  183. data/db/migrate/20210423075924_add_progress_to_projects.rb +5 -0
  184. data/lib/avo/app.rb +9 -20
  185. data/lib/avo/base_resource.rb +9 -1
  186. data/lib/avo/configuration.rb +1 -1
  187. data/lib/avo/engine.rb +1 -0
  188. data/lib/avo/fields/badge_field.rb +4 -6
  189. data/lib/avo/fields/base_field.rb +62 -83
  190. data/lib/avo/fields/belongs_to_field.rb +11 -11
  191. data/lib/avo/fields/boolean_field.rb +2 -7
  192. data/lib/avo/fields/boolean_group_field.rb +2 -7
  193. data/lib/avo/fields/code_field.rb +3 -7
  194. data/lib/avo/fields/country_field.rb +3 -6
  195. data/lib/avo/fields/currency_field.rb +4 -13
  196. data/lib/avo/fields/date_field.rb +2 -8
  197. data/lib/avo/fields/date_time_field.rb +2 -3
  198. data/lib/avo/fields/external_image_field.rb +3 -7
  199. data/lib/avo/fields/file_field.rb +4 -8
  200. data/lib/avo/fields/files_field.rb +6 -8
  201. data/lib/avo/fields/gravatar_field.rb +6 -9
  202. data/lib/avo/fields/has_and_belongs_to_many_field.rb +6 -7
  203. data/lib/avo/fields/has_many_field.rb +3 -9
  204. data/lib/avo/fields/has_one_field.rb +3 -8
  205. data/lib/avo/fields/heading_field.rb +10 -8
  206. data/lib/avo/fields/hidden_field.rb +2 -6
  207. data/lib/avo/fields/id_field.rb +5 -17
  208. data/lib/avo/fields/key_value_field.rb +4 -6
  209. data/lib/avo/fields/markdown_field.rb +3 -5
  210. data/lib/avo/fields/number_field.rb +8 -11
  211. data/lib/avo/fields/password_field.rb +2 -6
  212. data/lib/avo/fields/progress_bar_field.rb +19 -0
  213. data/lib/avo/fields/select_field.rb +13 -12
  214. data/lib/avo/fields/status_field.rb +2 -6
  215. data/lib/avo/fields/text_field.rb +3 -6
  216. data/lib/avo/fields/textarea_field.rb +4 -7
  217. data/lib/avo/fields/trix_field.rb +5 -9
  218. data/lib/avo/fields_collector.rb +47 -11
  219. data/lib/avo/licensing/pro_license.rb +2 -1
  220. data/lib/avo/version.rb +1 -1
  221. data/lib/generators/avo/eject_generator.rb +1 -0
  222. data/lib/generators/avo/field_generator.rb +17 -0
  223. data/lib/generators/avo/filter_generator.rb +1 -1
  224. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +5 -0
  225. data/lib/generators/avo/templates/field/components/edit_component.html.erb.tt +6 -0
  226. data/lib/generators/avo/templates/field/components/edit_component.rb.tt +4 -0
  227. data/lib/generators/avo/templates/field/components/index_component.html.erb.tt +3 -0
  228. data/lib/generators/avo/templates/field/components/index_component.rb.tt +4 -0
  229. data/lib/generators/avo/templates/field/components/show_component.html.erb.tt +3 -0
  230. data/lib/generators/avo/templates/field/components/show_component.rb.tt +4 -0
  231. data/lib/generators/avo/templates/tool/sidebar_item.tt +1 -1
  232. data/lib/generators/avo/templates/tool/view.tt +1 -1
  233. data/public/avo-packs/css/{application-5bdca030.css → application-68691c73.css} +126 -50
  234. data/public/avo-packs/css/application-68691c73.css.br +0 -0
  235. data/public/avo-packs/css/application-68691c73.css.gz +0 -0
  236. data/public/avo-packs/css/application-68691c73.css.map +1 -0
  237. data/public/avo-packs/css/application-68691c73.css.map.br +0 -0
  238. data/public/avo-packs/css/application-68691c73.css.map.gz +0 -0
  239. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js +26 -0
  240. data/public/avo-packs/js/{application-16a456a2b7cb56b01153.js.LICENSE.txt → application-6a0b9e58526ae6bef242.js.LICENSE.txt} +0 -0
  241. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.br +0 -0
  242. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.gz +0 -0
  243. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.map +1 -0
  244. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.map.br +0 -0
  245. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.map.gz +0 -0
  246. data/public/avo-packs/manifest.json +15 -15
  247. metadata +189 -175
  248. data/app/components/avo/common/files_list_viewer_component.html.erb +0 -5
  249. data/app/components/avo/common/status_viewer_component.html.erb +0 -10
  250. data/app/components/avo/edit/fields/boolean_field_component.rb +0 -4
  251. data/app/components/avo/edit/fields/boolean_group_field_component.rb +0 -4
  252. data/app/components/avo/edit/fields/code_field_component.rb +0 -4
  253. data/app/components/avo/edit/fields/country_field_component.rb +0 -4
  254. data/app/components/avo/edit/fields/date_field_component.rb +0 -4
  255. data/app/components/avo/edit/fields/date_time_field_component.rb +0 -4
  256. data/app/components/avo/edit/fields/external_image_field_component.rb +0 -4
  257. data/app/components/avo/edit/fields/file_field_component.rb +0 -4
  258. data/app/components/avo/edit/fields/files_field_component.rb +0 -4
  259. data/app/components/avo/edit/fields/heading_field_component.rb +0 -4
  260. data/app/components/avo/edit/fields/hidden_field_component.rb +0 -4
  261. data/app/components/avo/edit/fields/id_field_component.rb +0 -4
  262. data/app/components/avo/edit/fields/key_value_field_component.rb +0 -4
  263. data/app/components/avo/edit/fields/markdown_field_component.rb +0 -4
  264. data/app/components/avo/edit/fields/number_field_component.rb +0 -4
  265. data/app/components/avo/edit/fields/password_field_component.rb +0 -4
  266. data/app/components/avo/edit/fields/select_field_component.rb +0 -4
  267. data/app/components/avo/edit/fields/status_field_component.rb +0 -4
  268. data/app/components/avo/edit/fields/text_field_component.rb +0 -4
  269. data/app/components/avo/edit/fields/textarea_field_component.rb +0 -4
  270. data/app/components/avo/edit/fields/trix_field_component.rb +0 -4
  271. data/app/components/avo/index/fields/badge_field_component.html.erb +0 -3
  272. data/app/components/avo/index/fields/badge_field_component.rb +0 -4
  273. data/app/components/avo/index/fields/belongs_to_field_component.rb +0 -4
  274. data/app/components/avo/index/fields/boolean_field_component.html.erb +0 -3
  275. data/app/components/avo/index/fields/boolean_field_component.rb +0 -4
  276. data/app/components/avo/index/fields/boolean_group_field_component.html.erb +0 -3
  277. data/app/components/avo/index/fields/boolean_group_field_component.rb +0 -4
  278. data/app/components/avo/index/fields/country_field_component.rb +0 -4
  279. data/app/components/avo/index/fields/date_field_component.rb +0 -4
  280. data/app/components/avo/index/fields/date_time_field_component.rb +0 -4
  281. data/app/components/avo/index/fields/external_image_field_component.rb +0 -4
  282. data/app/components/avo/index/fields/field_component.html.erb +0 -1
  283. data/app/components/avo/index/fields/field_component.rb +0 -11
  284. data/app/components/avo/index/fields/file_field_component.rb +0 -4
  285. data/app/components/avo/index/fields/files_field_component.rb +0 -4
  286. data/app/components/avo/index/fields/gravatar_field_component.rb +0 -4
  287. data/app/components/avo/index/fields/has_one_field_component.rb +0 -4
  288. data/app/components/avo/index/fields/id_field_component.html.erb +0 -10
  289. data/app/components/avo/index/fields/id_field_component.rb +0 -4
  290. data/app/components/avo/index/fields/number_field_component.rb +0 -4
  291. data/app/components/avo/index/fields/select_field_component.rb +0 -4
  292. data/app/components/avo/index/fields/status_field_component.html.erb +0 -3
  293. data/app/components/avo/index/fields/status_field_component.rb +0 -4
  294. data/app/components/avo/index/fields/text_field_component.html.erb +0 -3
  295. data/app/components/avo/index/fields/text_field_component.rb +0 -4
  296. data/app/components/avo/show/fields/badge_field_component.html.erb +0 -3
  297. data/app/components/avo/show/fields/badge_field_component.rb +0 -4
  298. data/app/components/avo/show/fields/belongs_to_field_component.rb +0 -4
  299. data/app/components/avo/show/fields/boolean_field_component.rb +0 -4
  300. data/app/components/avo/show/fields/boolean_group_field_component.html.erb +0 -3
  301. data/app/components/avo/show/fields/boolean_group_field_component.rb +0 -4
  302. data/app/components/avo/show/fields/code_field_component.rb +0 -4
  303. data/app/components/avo/show/fields/country_field_component.rb +0 -4
  304. data/app/components/avo/show/fields/date_field_component.rb +0 -4
  305. data/app/components/avo/show/fields/date_time_field_component.rb +0 -4
  306. data/app/components/avo/show/fields/external_image_field_component.rb +0 -4
  307. data/app/components/avo/show/fields/file_field_component.html.erb +0 -3
  308. data/app/components/avo/show/fields/file_field_component.rb +0 -4
  309. data/app/components/avo/show/fields/files_field_component.html.erb +0 -3
  310. data/app/components/avo/show/fields/files_field_component.rb +0 -4
  311. data/app/components/avo/show/fields/gravatar_field_component.rb +0 -4
  312. data/app/components/avo/show/fields/has_many_field_component.rb +0 -4
  313. data/app/components/avo/show/fields/has_one_field_component.rb +0 -5
  314. data/app/components/avo/show/fields/heading_field_component.rb +0 -4
  315. data/app/components/avo/show/fields/id_field_component.rb +0 -4
  316. data/app/components/avo/show/fields/key_value_field_component.rb +0 -4
  317. data/app/components/avo/show/fields/markdown_field_component.rb +0 -4
  318. data/app/components/avo/show/fields/number_field_component.rb +0 -4
  319. data/app/components/avo/show/fields/select_field_component.rb +0 -4
  320. data/app/components/avo/show/fields/status_field_component.html.erb +0 -3
  321. data/app/components/avo/show/fields/status_field_component.rb +0 -4
  322. data/app/components/avo/show/fields/text_field_component.rb +0 -4
  323. data/app/components/avo/show/fields/textarea_field_component.rb +0 -4
  324. data/app/components/avo/show/fields/trix_field_component.rb +0 -4
  325. data/public/avo-packs/css/application-5bdca030.css.br +0 -0
  326. data/public/avo-packs/css/application-5bdca030.css.gz +0 -0
  327. data/public/avo-packs/css/application-5bdca030.css.map +0 -1
  328. data/public/avo-packs/css/application-5bdca030.css.map.br +0 -0
  329. data/public/avo-packs/css/application-5bdca030.css.map.gz +0 -0
  330. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js +0 -26
  331. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.br +0 -0
  332. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.gz +0 -0
  333. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.map +0 -1
  334. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.map.br +0 -0
  335. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.map.gz +0 -0
@@ -1,14 +1,10 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class PasswordField < TextField
4
- def initialize(name, **args, &block)
5
- @defaults = {
6
- partial_name: "password-field"
7
- }
8
-
4
+ def initialize(id, **args, &block)
9
5
  show_on :forms
10
6
 
11
- super(name, **args, &block)
7
+ super(id, **args, &block)
12
8
 
13
9
  hide_on [:index, :show]
14
10
  end
@@ -0,0 +1,19 @@
1
+ module Avo
2
+ module Fields
3
+ class ProgressBarField < BaseField
4
+ attr_reader :max
5
+ attr_reader :step
6
+ attr_reader :display_value
7
+ attr_reader :value_suffix
8
+
9
+ def initialize(name, **args, &block)
10
+ super(name, **args, &block)
11
+
12
+ @max = args[:max] || 100
13
+ @step = args[:step] || 1
14
+ @display_value = args[:display_value] || false
15
+ @value_suffix = args[:value_suffix] || nil
16
+ end
17
+ end
18
+ end
19
+ end
@@ -5,18 +5,15 @@ module Avo
5
5
  attr_reader :enum
6
6
  attr_reader :display_value
7
7
 
8
- def initialize(name, **args, &block)
9
- @defaults = {
10
- partial_name: "select-field"
11
- }
8
+ def initialize(id, **args, &block)
9
+ args[:placeholder] ||= I18n.t("avo.choose_an_option")
12
10
 
13
- super(name, **args, &block)
11
+ super(id, **args, &block)
14
12
 
15
- @options = args[:options].present? ? args[:options] : args[:enum]
16
- @options = ActiveSupport::HashWithIndifferentAccess.new @options
13
+ options = args[:options].present? ? args[:options] : args[:enum]
14
+ @options = ActiveSupport::HashWithIndifferentAccess.new options
17
15
  @enum = args[:enum].present? ? args[:enum] : nil
18
16
  @display_value = args[:display_value].present? ? args[:display_value] : false
19
- @placeholder = args[:placeholder].present? ? args[:placeholder].to_s : I18n.t("avo.choose_an_option")
20
17
  end
21
18
 
22
19
  def options_for_select
@@ -34,12 +31,16 @@ module Avo
34
31
  end
35
32
 
36
33
  def label
37
- if display_value
34
+ if enum.present?
35
+ if display_value
36
+ options[value]
37
+ else
38
+ value
39
+ end
40
+ elsif display_value
38
41
  value
39
- elsif enum.present?
40
- options[value]
41
42
  else
42
- options.invert[value]
43
+ options.invert.stringify_keys[value]
43
44
  end
44
45
  end
45
46
  end
@@ -1,12 +1,8 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class StatusField < BaseField
4
- def initialize(name, **args, &block)
5
- @defaults = {
6
- partial_name: "status-field"
7
- }
8
-
9
- super(name, **args, &block)
4
+ def initialize(id, **args, &block)
5
+ super(id, **args, &block)
10
6
 
11
7
  @loading_when = args[:loading_when].present? ? [args[:loading_when]].flatten : [:waiting, :running]
12
8
  @failed_when = args[:failed_when].present? ? [args[:failed_when]].flatten : [:failed]
@@ -1,13 +1,10 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class TextField < BaseField
4
- def initialize(name, **args, &block)
5
- @defaults = {
6
- partial_name: "text-field",
7
- computable: true
8
- }.merge(@defaults || {})
4
+ attr_reader :link_to_resource
9
5
 
10
- super(name, **args, &block)
6
+ def initialize(id, **args, &block)
7
+ super(id, **args, &block)
11
8
 
12
9
  @link_to_resource = args[:link_to_resource].present? ? args[:link_to_resource] : false
13
10
  end
@@ -1,17 +1,14 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class TextareaField < TextField
4
- def initialize(name, **args, &block)
5
- @defaults = {
6
- partial_name: "textarea-field",
7
- computable: true
8
- }
4
+ attr_reader :rows
9
5
 
10
- super(name, **args, &block)
6
+ def initialize(id, **args, &block)
7
+ super(id, **args, &block)
11
8
 
12
9
  hide_on :index
13
10
 
14
- @meta[:rows] = args[:rows].present? ? args[:rows].to_i : 5
11
+ @rows = args[:rows].present? ? args[:rows].to_i : 5
15
12
  end
16
13
  end
17
14
  end
@@ -5,18 +5,14 @@ module Avo
5
5
  attr_reader :attachments_disabled
6
6
  attr_reader :attachment_key
7
7
 
8
- def initialize(name, **args, &block)
9
- @defaults = {
10
- partial_name: "trix-field"
11
- }
12
-
13
- super(name, **args, &block)
8
+ def initialize(id, **args, &block)
9
+ super(id, **args, &block)
14
10
 
15
11
  hide_on :index
16
12
 
17
- @always_show = args[:always_show].present? ? args[:always_show] : false
18
- @attachments_disabled = args[:attachments_disabled].present? ? args[:attachments_disabled] : false
19
- @attachment_key = args[:attachment_key].present? ? args[:attachment_key] : nil
13
+ @always_show = args[:always_show] || false
14
+ @attachments_disabled = args[:attachments_disabled] || false
15
+ @attachment_key = args[:attachment_key]
20
16
  end
21
17
  end
22
18
  end
@@ -1,30 +1,66 @@
1
+ # require "active_support/inflector"
2
+
1
3
  module Avo
2
4
  module FieldsCollector
3
5
  def field(field_name, as:, **args, &block)
4
6
  self.fields ||= []
5
7
 
6
- self.fields << parse_field(field_name, as: as, **args, &block)
7
- end
8
+ field_instance = parse_field(field_name, as: as, **args, &block)
8
9
 
9
- def parse_field(field_name, as:, **args, &block)
10
- matched_field = Avo::App.fields.find do |field|
11
- field[:name].to_s == as.to_s
10
+ if field_instance.present?
11
+ self.fields << field_instance
12
+ else
13
+ message = "[Avo] The #{field_name} field, as: #{as} from #{self.name} has an invalid configuration."
14
+ ::Rails.logger.warn message
12
15
  end
16
+ end
13
17
 
14
- if matched_field.present? && matched_field[:class].present?
15
- klass = matched_field[:class]
18
+ def parse_field(field_name, as:, **args, &block)
19
+ # The field is passed as a symbol eg: :text, :color_picker, :trix
20
+ if as.is_a? Symbol
21
+ field_class = field_class_from_symbol(as)
16
22
 
17
- if block
18
- klass.new(field_name, **args || {}, &block)
23
+ if field_class.present?
24
+ # The field has been registered before.
25
+ instantiate_field(field_name, klass: field_class, **args, &block)
19
26
  else
20
- klass.new(field_name, **args || {})
21
- end
27
+ # The symbol can be transformed to a class and found.
28
+ class_name = as.to_s.classify
29
+ field_class = "#{class_name}Field"
22
30
 
31
+ # Discover & load custom field classes
32
+ if Object.const_defined? field_class
33
+ instantiate_field(field_name, klass: field_class.safe_constantize, **args, &block)
34
+ end
35
+ end
36
+ elsif as.is_a? Class
37
+ # The field has been passed as a class.
38
+ if Object.const_defined? as.to_s
39
+ instantiate_field(field_name, klass: as, **args, &block)
40
+ end
23
41
  end
24
42
  end
25
43
 
26
44
  def heading(body, **args)
27
45
  self.fields << Avo::Fields::HeadingField.new(body, **args)
28
46
  end
47
+
48
+ private
49
+
50
+ def instantiate_field(field_name, klass:, **args, &block)
51
+ if block
52
+ klass.new(field_name, **args || {}, &block)
53
+ else
54
+ klass.new(field_name, **args || {})
55
+ end
56
+ end
57
+
58
+ def field_class_from_symbol(symbol)
59
+ matched_field = Avo::App.fields.find do |field|
60
+ field[:name].to_s == symbol.to_s
61
+ end
62
+
63
+ return matched_field[:class] if matched_field.present? && matched_field[:class].present?
64
+ end
29
65
  end
30
66
  end
@@ -4,7 +4,8 @@ module Avo
4
4
  def abilities
5
5
  [
6
6
  :authorization,
7
- :custom_tools
7
+ :custom_tools,
8
+ :custom_fields
8
9
  ]
9
10
  end
10
11
  end
data/lib/avo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Avo
2
- VERSION = "1.4.0.pre.1"
2
+ VERSION = "1.4.4"
3
3
  end
@@ -15,6 +15,7 @@ module Generators
15
15
  logo: "app/views/avo/partials/_logo.html.erb",
16
16
  head: "app/views/avo/partials/_head.html.erb",
17
17
  header: "app/views/avo/partials/_header.html.erb",
18
+ profile_dropdown: "app/views/avo/partials/_profile_dropdown.html.erb",
18
19
  footer: "app/views/avo/partials/_footer.html.erb",
19
20
  scripts: "app/views/avo/partials/_scripts.html.erb"
20
21
  }
@@ -0,0 +1,17 @@
1
+ require "rails/generators"
2
+
3
+ module Generators
4
+ module Avo
5
+ class FieldGenerator < ::Rails::Generators::NamedBase
6
+ source_root File.expand_path("templates", __dir__)
7
+
8
+ namespace "avo:field"
9
+ desc "Add a custom Avo field to your project."
10
+
11
+ def handle
12
+ directory "field/components", "app/components/avo/fields/#{singular_name}_field"
13
+ template "field/%singular_name%_field.rb.tt", "app/avo/fields/#{singular_name}_field.rb"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -13,7 +13,7 @@ module Generators
13
13
 
14
14
  type = "select" if options[:select]
15
15
 
16
- template "filters/#{type}_filter.tt", "app/services/avo/filters/#{singular_name}.rb"
16
+ template "filters/#{type}_filter.tt", "app/avo/filters/#{singular_name}.rb"
17
17
  end
18
18
  end
19
19
  end
@@ -0,0 +1,5 @@
1
+ class <%= class_name %>Field < Avo::Fields::BaseField
2
+ def initialize(name, **args, &block)
3
+ super(name, **args, &block)
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ <%%= edit_field_wrapper field: @field, index: @index, form: @form, resource: @resource, displayed_in_modal: @displayed_in_modal do %>
2
+ <%%= @form.text_field @field.id,
3
+ class: helpers.input_classes('w-full', has_error: @field.model_errors.include?(@field.id)),
4
+ placeholder: @field.placeholder,
5
+ disabled: @field.readonly %>
6
+ <%% end %>
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Fields::<%= class_name %>Field::EditComponent < Avo::Fields::EditComponent
4
+ end
@@ -0,0 +1,3 @@
1
+ <%%= index_field_wrapper field: @field do %>
2
+ <%%= @field.value %>
3
+ <%% end %>
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Fields::<%= class_name %>Field::IndexComponent < Avo::Fields::IndexComponent
4
+ end
@@ -0,0 +1,3 @@
1
+ <%%= show_field_wrapper field: @field, index: @index do %>
2
+ <%%= @field.value %>
3
+ <%% end %>
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Fields::<%= class_name %>Field::ShowComponent < Avo::Fields::ShowComponent
4
+ end
@@ -1 +1 @@
1
- <%%= render Avo::NavigationLinkComponent.new label: '<%= human_name %>', path: '/avo/<%= file_name %>' %>
1
+ <%%= render Avo::NavigationLinkComponent.new label: '<%= human_name %>', path: "#{Avo.configuration.root_path}/<%= file_name %>" %>
@@ -1,5 +1,5 @@
1
1
  <div class="flex flex-col">
2
- <%%= render Avo::PanelComponent.new title: '<%= human_name %>' do |c| %>
2
+ <%%= render Avo::PanelComponent.new title: '<%= human_name %>', display_breadcrumbs: true do |c| %>
3
3
  <%% c.tools do %>
4
4
  <div class="text-sm italic">This is the panels tools section.</div>
5
5
  <%% end %>
@@ -2231,6 +2231,11 @@ select {
2231
2231
  background-color: rgba(59, 130, 246, var(--tw-bg-opacity));
2232
2232
  }
2233
2233
 
2234
+ .hover\:bg-green-500:hover {
2235
+ --tw-bg-opacity: 1;
2236
+ background-color: rgba(16, 185, 129, var(--tw-bg-opacity));
2237
+ }
2238
+
2234
2239
  .hover\:bg-blue-300:hover {
2235
2240
  --tw-bg-opacity: 1;
2236
2241
  background-color: rgba(147, 197, 253, var(--tw-bg-opacity));
@@ -3091,22 +3096,36 @@ svg.tea #steamR {
3091
3096
  }
3092
3097
 
3093
3098
  .spinner {
3099
+ width: 16px;
3100
+ height: 16px;
3101
+
3094
3102
  position: relative;
3095
- display: inline-block;
3096
- width: 18px;
3097
- height: 18px;
3098
- top: 3px;
3103
+ }
3104
+
3105
+
3106
+ .double-bounce1, .double-bounce2 {
3107
+ width: 100%;
3108
+ height: 100%;
3109
+ border-radius: 50%;
3099
3110
  background-color: #333;
3100
- border-radius: 100%;
3101
- animation: sk-scaleout 1.0s infinite ease-in-out;
3111
+ opacity: 0.6;
3112
+ position: absolute;
3113
+ top: 0;
3114
+ left: 0;
3115
+ animation: sk-bounce 2.0s infinite ease-in-out;
3102
3116
  }
3103
3117
 
3104
- @keyframes sk-scaleout {
3105
- 0% {
3106
- transform: scale(0);
3107
- } 100% {
3118
+ .double-bounce2 {
3119
+ animation-delay: -1.0s;
3120
+ }
3121
+
3122
+ @keyframes sk-bounce {
3123
+ 0%, 100% {
3124
+ transform: scale(0.0);
3125
+ -webkit-transform: scale(0.0);
3126
+ } 50% {
3108
3127
  transform: scale(1.0);
3109
- opacity: 0;
3128
+ -webkit-transform: scale(1.0);
3110
3129
  }
3111
3130
  }
3112
3131
 
@@ -3656,6 +3675,39 @@ span.CodeMirror-selectedtext { background: none; }
3656
3675
  z-index: 50;
3657
3676
  }
3658
3677
 
3678
+ progress {
3679
+ height: 0.5rem;
3680
+ border-radius: 0.25rem;
3681
+ border-width: 1px;
3682
+ --tw-border-opacity: 1;
3683
+ border-color: rgba(156, 163, 175, var(--tw-border-opacity));
3684
+ --tw-bg-opacity: 1;
3685
+ background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
3686
+ --tw-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
3687
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
3688
+ }
3689
+ progress[value]::-webkit-progress-bar {
3690
+ border-radius: 0.25rem;
3691
+ border-width: 1px;
3692
+ --tw-border-opacity: 1;
3693
+ border-color: rgba(107, 114, 128, var(--tw-border-opacity));
3694
+ --tw-bg-opacity: 1;
3695
+ background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
3696
+ --tw-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
3697
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
3698
+ }
3699
+ progress[value]::-webkit-progress-value {
3700
+ border-radius: 0.25rem;
3701
+ --tw-bg-opacity: 1;
3702
+ background-color: rgba(5, 150, 105, var(--tw-bg-opacity))
3703
+ }
3704
+ progress[value]::-moz-progress-bar {
3705
+ appearance: none;
3706
+ border-radius: 0.25rem;
3707
+ --tw-bg-opacity: 1;
3708
+ background-color: rgba(5, 150, 105, var(--tw-bg-opacity))
3709
+ }
3710
+
3659
3711
  .container {
3660
3712
  width: 100%;
3661
3713
  }
@@ -4239,6 +4291,10 @@ span.CodeMirror-selectedtext { background: none; }
4239
4291
  --tw-bg-opacity: 1;
4240
4292
  background-color: rgba(59, 130, 246, var(--tw-bg-opacity));
4241
4293
  }
4294
+ .hover\:bg-green-500:hover {
4295
+ --tw-bg-opacity: 1;
4296
+ background-color: rgba(16, 185, 129, var(--tw-bg-opacity));
4297
+ }
4242
4298
  .hover\:bg-blue-300:hover {
4243
4299
  --tw-bg-opacity: 1;
4244
4300
  background-color: rgba(147, 197, 253, var(--tw-bg-opacity));
@@ -4682,12 +4738,15 @@ span.CodeMirror-selectedtext { background: none; }
4682
4738
  .ml-1 {
4683
4739
  margin-left: 0.25rem
4684
4740
  }
4741
+ .mr-6 {
4742
+ margin-right: 1.5rem
4743
+ }
4744
+ .mt-0 {
4745
+ margin-top: 0px
4746
+ }
4685
4747
  .ml-1\/12 {
4686
4748
  margin-left: 8.333333%
4687
4749
  }
4688
- .ml-6 {
4689
- margin-left: 1.5rem
4690
- }
4691
4750
  .-mb-1 {
4692
4751
  margin-bottom: -0.25rem
4693
4752
  }
@@ -4706,6 +4765,9 @@ span.CodeMirror-selectedtext { background: none; }
4706
4765
  .ml-2 {
4707
4766
  margin-left: 0.5rem
4708
4767
  }
4768
+ .ml-6 {
4769
+ margin-left: 1.5rem
4770
+ }
4709
4771
  .block {
4710
4772
  display: block
4711
4773
  }
@@ -4751,6 +4813,9 @@ span.CodeMirror-selectedtext { background: none; }
4751
4813
  .h-full {
4752
4814
  height: 100%
4753
4815
  }
4816
+ .h-12 {
4817
+ height: 3rem
4818
+ }
4754
4819
  .h-16 {
4755
4820
  height: 4rem
4756
4821
  }
@@ -4760,9 +4825,6 @@ span.CodeMirror-selectedtext { background: none; }
4760
4825
  .h-10 {
4761
4826
  height: 2.5rem
4762
4827
  }
4763
- .h-12 {
4764
- height: 3rem
4765
- }
4766
4828
  .max-h-168 {
4767
4829
  max-height: 42rem
4768
4830
  }
@@ -4781,15 +4843,15 @@ span.CodeMirror-selectedtext { background: none; }
4781
4843
  .min-h-1\/3 {
4782
4844
  min-height: 33.333333%
4783
4845
  }
4784
- .min-h-48 {
4785
- min-height: 12rem
4786
- }
4787
4846
  .min-h-16 {
4788
4847
  min-height: 4rem
4789
4848
  }
4790
4849
  .min-h-inherit {
4791
4850
  min-height: inherit
4792
4851
  }
4852
+ .min-h-48 {
4853
+ min-height: 12rem
4854
+ }
4793
4855
  .w-5 {
4794
4856
  width: 1.25rem
4795
4857
  }
@@ -4835,6 +4897,9 @@ span.CodeMirror-selectedtext { background: none; }
4835
4897
  .min-w-300px {
4836
4898
  min-width: 300px
4837
4899
  }
4900
+ .min-w-\[200px\] {
4901
+ min-width: 200px
4902
+ }
4838
4903
  .min-w-4 {
4839
4904
  min-width: 1rem
4840
4905
  }
@@ -4888,12 +4953,12 @@ span.CodeMirror-selectedtext { background: none; }
4888
4953
  -webkit-appearance: none;
4889
4954
  appearance: none
4890
4955
  }
4891
- .grid-cols-3 {
4892
- grid-template-columns: repeat(3, minmax(0, 1fr))
4893
- }
4894
4956
  .grid-cols-1 {
4895
4957
  grid-template-columns: repeat(1, minmax(0, 1fr))
4896
4958
  }
4959
+ .grid-cols-3 {
4960
+ grid-template-columns: repeat(3, minmax(0, 1fr))
4961
+ }
4897
4962
  .flex-col {
4898
4963
  flex-direction: column
4899
4964
  }
@@ -4924,18 +4989,18 @@ span.CodeMirror-selectedtext { background: none; }
4924
4989
  .justify-end {
4925
4990
  justify-content: flex-end
4926
4991
  }
4927
- .justify-evenly {
4928
- justify-content: space-evenly
4929
- }
4930
4992
  .justify-around {
4931
4993
  justify-content: space-around
4932
4994
  }
4933
- .gap-3 {
4934
- gap: 0.75rem
4995
+ .justify-evenly {
4996
+ justify-content: space-evenly
4935
4997
  }
4936
4998
  .gap-6 {
4937
4999
  gap: 1.5rem
4938
5000
  }
5001
+ .gap-3 {
5002
+ gap: 0.75rem
5003
+ }
4939
5004
  .space-y-2 > :not([hidden]) ~ :not([hidden]) {
4940
5005
  --tw-space-y-reverse: 0;
4941
5006
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
@@ -4956,16 +5021,16 @@ span.CodeMirror-selectedtext { background: none; }
4956
5021
  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
4957
5022
  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)))
4958
5023
  }
4959
- .space-y-3 > :not([hidden]) ~ :not([hidden]) {
4960
- --tw-space-y-reverse: 0;
4961
- margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
4962
- margin-bottom: calc(0.75rem * var(--tw-space-y-reverse))
4963
- }
4964
5024
  .space-x-3 > :not([hidden]) ~ :not([hidden]) {
4965
5025
  --tw-space-x-reverse: 0;
4966
5026
  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
4967
5027
  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)))
4968
5028
  }
5029
+ .space-y-3 > :not([hidden]) ~ :not([hidden]) {
5030
+ --tw-space-y-reverse: 0;
5031
+ margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
5032
+ margin-bottom: calc(0.75rem * var(--tw-space-y-reverse))
5033
+ }
4969
5034
  .divide-y > :not([hidden]) ~ :not([hidden]) {
4970
5035
  --tw-divide-y-reverse: 0;
4971
5036
  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
@@ -5013,12 +5078,12 @@ span.CodeMirror-selectedtext { background: none; }
5013
5078
  .rounded {
5014
5079
  border-radius: 0.25rem
5015
5080
  }
5016
- .\!rounded-none {
5017
- border-radius: 0px !important
5018
- }
5019
5081
  .rounded-full {
5020
5082
  border-radius: 9999px
5021
5083
  }
5084
+ .\!rounded-none {
5085
+ border-radius: 0px !important
5086
+ }
5022
5087
  .rounded-r-md {
5023
5088
  border-top-right-radius: 0.375rem;
5024
5089
  border-bottom-right-radius: 0.375rem
@@ -5034,6 +5099,9 @@ span.CodeMirror-selectedtext { background: none; }
5034
5099
  .border {
5035
5100
  border-width: 1px
5036
5101
  }
5102
+ .border-4 {
5103
+ border-width: 4px
5104
+ }
5037
5105
  .border-t {
5038
5106
  border-top-width: 1px
5039
5107
  }
@@ -5110,6 +5178,10 @@ span.CodeMirror-selectedtext { background: none; }
5110
5178
  --tw-border-opacity: 1;
5111
5179
  border-color: rgba(209, 213, 219, var(--tw-border-opacity))
5112
5180
  }
5181
+ .border-white {
5182
+ --tw-border-opacity: 1;
5183
+ border-color: rgba(255, 255, 255, var(--tw-border-opacity))
5184
+ }
5113
5185
  .border-gray-500 {
5114
5186
  --tw-border-opacity: 1;
5115
5187
  border-color: rgba(107, 114, 128, var(--tw-border-opacity))
@@ -5190,6 +5262,10 @@ span.CodeMirror-selectedtext { background: none; }
5190
5262
  --tw-bg-opacity: 1;
5191
5263
  background-color: rgba(71, 85, 105, var(--tw-bg-opacity))
5192
5264
  }
5265
+ .bg-gray-600 {
5266
+ --tw-bg-opacity: 1;
5267
+ background-color: rgba(75, 85, 99, var(--tw-bg-opacity))
5268
+ }
5193
5269
  .bg-opacity-25 {
5194
5270
  --tw-bg-opacity: 0.25
5195
5271
  }
@@ -5261,17 +5337,17 @@ span.CodeMirror-selectedtext { background: none; }
5261
5337
  padding-left: 6rem;
5262
5338
  padding-right: 6rem
5263
5339
  }
5264
- .py-px {
5265
- padding-top: 1px;
5266
- padding-bottom: 1px
5340
+ .py-0 {
5341
+ padding-top: 0px;
5342
+ padding-bottom: 0px
5267
5343
  }
5268
5344
  .py-3 {
5269
5345
  padding-top: 0.75rem;
5270
5346
  padding-bottom: 0.75rem
5271
5347
  }
5272
- .py-0 {
5273
- padding-top: 0px;
5274
- padding-bottom: 0px
5348
+ .py-px {
5349
+ padding-top: 1px;
5350
+ padding-bottom: 1px
5275
5351
  }
5276
5352
  .py-8 {
5277
5353
  padding-top: 2rem;
@@ -5283,12 +5359,12 @@ span.CodeMirror-selectedtext { background: none; }
5283
5359
  .pb-0 {
5284
5360
  padding-bottom: 0px
5285
5361
  }
5286
- .pl-6 {
5287
- padding-left: 1.5rem
5288
- }
5289
5362
  .pb-3\/4 {
5290
5363
  padding-bottom: 75%
5291
5364
  }
5365
+ .pl-6 {
5366
+ padding-left: 1.5rem
5367
+ }
5292
5368
  .text-center {
5293
5369
  text-align: center
5294
5370
  }
@@ -5441,10 +5517,6 @@ span.CodeMirror-selectedtext { background: none; }
5441
5517
  --tw-text-opacity: 1;
5442
5518
  color: rgba(239, 68, 68, var(--tw-text-opacity))
5443
5519
  }
5444
- .text-red-700 {
5445
- --tw-text-opacity: 1;
5446
- color: rgba(185, 28, 28, var(--tw-text-opacity))
5447
- }
5448
5520
  .underline {
5449
5521
  text-decoration: underline
5450
5522
  }
@@ -5613,6 +5685,10 @@ span.CodeMirror-selectedtext { background: none; }
5613
5685
  --tw-bg-opacity: 1;
5614
5686
  background-color: rgba(59, 130, 246, var(--tw-bg-opacity))
5615
5687
  }
5688
+ .hover\:bg-green-500:hover {
5689
+ --tw-bg-opacity: 1;
5690
+ background-color: rgba(16, 185, 129, var(--tw-bg-opacity))
5691
+ }
5616
5692
  .hover\:bg-blue-300:hover {
5617
5693
  --tw-bg-opacity: 1;
5618
5694
  background-color: rgba(147, 197, 253, var(--tw-bg-opacity))
@@ -5988,4 +6064,4 @@ html, body{
5988
6064
  }
5989
6065
 
5990
6066
 
5991
- /*# sourceMappingURL=application-5bdca030.css.map*/
6067
+ /*# sourceMappingURL=application-68691c73.css.map*/