avo 1.3.3 → 1.4.0

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 (340) 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/fields/common/key_value_component.html.erb +53 -0
  43. data/app/components/avo/fields/common/key_value_component.rb +11 -0
  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/{common → fields/common}/status_viewer_component.html.erb +0 -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/fields/key_value_field/edit_component.html.erb +3 -0
  111. data/app/components/avo/fields/key_value_field/edit_component.rb +4 -0
  112. data/app/components/avo/fields/key_value_field/show_component.html.erb +3 -0
  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/fields/trix_field/edit_component.html.erb +19 -0
  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/application_controller.rb +5 -1
  168. data/app/controllers/avo/attachments_controller.rb +14 -3
  169. data/app/controllers/avo/base_controller.rb +26 -2
  170. data/app/controllers/avo/home_controller.rb +1 -1
  171. data/app/controllers/avo/search_controller.rb +1 -1
  172. data/app/helpers/avo/application_helper.rb +1 -1
  173. data/app/helpers/avo/resources_helper.rb +0 -44
  174. data/app/packs/entrypoints/application.css +1 -0
  175. data/app/packs/entrypoints/application.js +14 -11
  176. data/app/packs/js/controllers/fields/code_field_controller.js +1 -0
  177. data/app/packs/js/controllers/fields/date_field_controller.js +1 -1
  178. data/app/packs/js/controllers/fields/key_value_controller.js +136 -0
  179. data/app/packs/js/controllers/fields/trix_field_controller.js +121 -0
  180. data/app/packs/stylesheets/components/progress.css +13 -0
  181. data/app/views/avo/actions/show.html.erb +1 -1
  182. data/app/views/avo/partials/_javascript.html.erb +3 -1
  183. data/app/views/avo/partials/_profile_dropdown.html.erb +19 -0
  184. data/app/views/layouts/avo/application.html.erb +6 -3
  185. data/config/routes.rb +4 -0
  186. data/config/webpacker.yml +2 -2
  187. data/db/factories.rb +3 -0
  188. data/db/migrate/20210421064037_add_color_to_teams.rb +5 -0
  189. data/db/migrate/20210423075924_add_progress_to_projects.rb +5 -0
  190. data/lib/avo.rb +1 -1
  191. data/lib/avo/app.rb +9 -20
  192. data/lib/avo/base_resource.rb +9 -1
  193. data/lib/avo/engine.rb +1 -0
  194. data/lib/avo/fields/badge_field.rb +4 -6
  195. data/lib/avo/fields/base_field.rb +62 -83
  196. data/lib/avo/fields/belongs_to_field.rb +11 -11
  197. data/lib/avo/fields/boolean_field.rb +2 -7
  198. data/lib/avo/fields/boolean_group_field.rb +2 -7
  199. data/lib/avo/fields/code_field.rb +3 -7
  200. data/lib/avo/fields/country_field.rb +3 -6
  201. data/lib/avo/fields/currency_field.rb +4 -13
  202. data/lib/avo/fields/date_field.rb +2 -8
  203. data/lib/avo/fields/date_time_field.rb +2 -3
  204. data/lib/avo/fields/external_image_field.rb +2 -7
  205. data/lib/avo/fields/file_field.rb +4 -8
  206. data/lib/avo/fields/files_field.rb +6 -8
  207. data/lib/avo/fields/gravatar_field.rb +6 -9
  208. data/lib/avo/fields/has_and_belongs_to_many_field.rb +6 -7
  209. data/lib/avo/fields/has_many_field.rb +3 -9
  210. data/lib/avo/fields/has_one_field.rb +3 -8
  211. data/lib/avo/fields/heading_field.rb +10 -8
  212. data/lib/avo/fields/hidden_field.rb +2 -6
  213. data/lib/avo/fields/id_field.rb +5 -17
  214. data/lib/avo/fields/key_value_field.rb +27 -6
  215. data/lib/avo/fields/markdown_field.rb +3 -5
  216. data/lib/avo/fields/number_field.rb +8 -11
  217. data/lib/avo/fields/password_field.rb +2 -6
  218. data/lib/avo/fields/progress_bar_field.rb +19 -0
  219. data/lib/avo/fields/select_field.rb +13 -12
  220. data/lib/avo/fields/status_field.rb +2 -6
  221. data/lib/avo/fields/text_field.rb +3 -6
  222. data/lib/avo/fields/textarea_field.rb +4 -7
  223. data/lib/avo/fields/trix_field.rb +7 -7
  224. data/lib/avo/fields_collector.rb +47 -11
  225. data/lib/avo/licensing/pro_license.rb +2 -1
  226. data/lib/avo/version.rb +1 -1
  227. data/lib/generators/avo/action_generator.rb +1 -1
  228. data/lib/generators/avo/eject_generator.rb +1 -0
  229. data/lib/generators/avo/field_generator.rb +17 -0
  230. data/lib/generators/avo/filter_generator.rb +1 -1
  231. data/lib/generators/avo/templates/action.tt +5 -9
  232. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +5 -0
  233. data/lib/generators/avo/templates/field/components/edit_component.html.erb.tt +6 -0
  234. data/lib/generators/avo/templates/field/components/edit_component.rb.tt +4 -0
  235. data/lib/generators/avo/templates/field/components/index_component.html.erb.tt +3 -0
  236. data/lib/generators/avo/templates/field/components/index_component.rb.tt +4 -0
  237. data/lib/generators/avo/templates/field/components/show_component.html.erb.tt +3 -0
  238. data/lib/generators/avo/templates/field/components/show_component.rb.tt +4 -0
  239. data/lib/generators/avo/templates/tool/view.tt +1 -1
  240. data/public/avo-packs/css/{application-af3e670d.css → application-cb627e0b.css} +179 -43
  241. data/public/avo-packs/css/application-cb627e0b.css.br +0 -0
  242. data/public/avo-packs/css/application-cb627e0b.css.gz +0 -0
  243. data/public/avo-packs/css/application-cb627e0b.css.map +1 -0
  244. data/public/avo-packs/css/application-cb627e0b.css.map.br +0 -0
  245. data/public/avo-packs/css/application-cb627e0b.css.map.gz +0 -0
  246. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js +26 -0
  247. data/public/avo-packs/js/{application-801f1297670a4c6df1b6.js.LICENSE.txt → application-6a0b9e58526ae6bef242.js.LICENSE.txt} +0 -0
  248. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.br +0 -0
  249. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.gz +0 -0
  250. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.map +1 -0
  251. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.map.br +0 -0
  252. data/public/avo-packs/js/application-6a0b9e58526ae6bef242.js.map.gz +0 -0
  253. data/public/avo-packs/manifest.json +15 -15
  254. metadata +185 -159
  255. data/app/components/avo/common/files_list_viewer_component.html.erb +0 -5
  256. data/app/components/avo/edit/fields/boolean_field_component.rb +0 -4
  257. data/app/components/avo/edit/fields/boolean_group_field_component.rb +0 -4
  258. data/app/components/avo/edit/fields/code_field_component.rb +0 -4
  259. data/app/components/avo/edit/fields/country_field_component.rb +0 -4
  260. data/app/components/avo/edit/fields/date_field_component.rb +0 -4
  261. data/app/components/avo/edit/fields/date_time_field_component.rb +0 -4
  262. data/app/components/avo/edit/fields/external_image_field_component.rb +0 -4
  263. data/app/components/avo/edit/fields/file_field_component.rb +0 -4
  264. data/app/components/avo/edit/fields/files_field_component.rb +0 -4
  265. data/app/components/avo/edit/fields/heading_field_component.rb +0 -4
  266. data/app/components/avo/edit/fields/hidden_field_component.rb +0 -4
  267. data/app/components/avo/edit/fields/id_field_component.rb +0 -4
  268. data/app/components/avo/edit/fields/markdown_field_component.rb +0 -4
  269. data/app/components/avo/edit/fields/number_field_component.rb +0 -4
  270. data/app/components/avo/edit/fields/password_field_component.rb +0 -4
  271. data/app/components/avo/edit/fields/select_field_component.rb +0 -4
  272. data/app/components/avo/edit/fields/status_field_component.rb +0 -4
  273. data/app/components/avo/edit/fields/text_field_component.rb +0 -4
  274. data/app/components/avo/edit/fields/textarea_field_component.rb +0 -4
  275. data/app/components/avo/edit/fields/trix_field_component.html.erb +0 -11
  276. data/app/components/avo/edit/fields/trix_field_component.rb +0 -4
  277. data/app/components/avo/index/fields/badge_field_component.html.erb +0 -3
  278. data/app/components/avo/index/fields/badge_field_component.rb +0 -4
  279. data/app/components/avo/index/fields/belongs_to_field_component.rb +0 -4
  280. data/app/components/avo/index/fields/boolean_field_component.html.erb +0 -3
  281. data/app/components/avo/index/fields/boolean_field_component.rb +0 -4
  282. data/app/components/avo/index/fields/boolean_group_field_component.html.erb +0 -3
  283. data/app/components/avo/index/fields/boolean_group_field_component.rb +0 -4
  284. data/app/components/avo/index/fields/country_field_component.rb +0 -4
  285. data/app/components/avo/index/fields/date_field_component.rb +0 -4
  286. data/app/components/avo/index/fields/date_time_field_component.rb +0 -4
  287. data/app/components/avo/index/fields/external_image_field_component.rb +0 -4
  288. data/app/components/avo/index/fields/field_component.html.erb +0 -1
  289. data/app/components/avo/index/fields/field_component.rb +0 -11
  290. data/app/components/avo/index/fields/file_field_component.rb +0 -4
  291. data/app/components/avo/index/fields/files_field_component.rb +0 -4
  292. data/app/components/avo/index/fields/gravatar_field_component.rb +0 -4
  293. data/app/components/avo/index/fields/has_one_field_component.rb +0 -4
  294. data/app/components/avo/index/fields/id_field_component.html.erb +0 -10
  295. data/app/components/avo/index/fields/id_field_component.rb +0 -4
  296. data/app/components/avo/index/fields/number_field_component.rb +0 -4
  297. data/app/components/avo/index/fields/select_field_component.rb +0 -4
  298. data/app/components/avo/index/fields/status_field_component.html.erb +0 -3
  299. data/app/components/avo/index/fields/status_field_component.rb +0 -4
  300. data/app/components/avo/index/fields/text_field_component.html.erb +0 -3
  301. data/app/components/avo/index/fields/text_field_component.rb +0 -4
  302. data/app/components/avo/show/fields/badge_field_component.html.erb +0 -3
  303. data/app/components/avo/show/fields/badge_field_component.rb +0 -4
  304. data/app/components/avo/show/fields/belongs_to_field_component.rb +0 -4
  305. data/app/components/avo/show/fields/boolean_field_component.rb +0 -4
  306. data/app/components/avo/show/fields/boolean_group_field_component.html.erb +0 -3
  307. data/app/components/avo/show/fields/boolean_group_field_component.rb +0 -4
  308. data/app/components/avo/show/fields/code_field_component.rb +0 -4
  309. data/app/components/avo/show/fields/country_field_component.rb +0 -4
  310. data/app/components/avo/show/fields/date_field_component.rb +0 -4
  311. data/app/components/avo/show/fields/date_time_field_component.rb +0 -4
  312. data/app/components/avo/show/fields/external_image_field_component.rb +0 -4
  313. data/app/components/avo/show/fields/file_field_component.html.erb +0 -3
  314. data/app/components/avo/show/fields/file_field_component.rb +0 -4
  315. data/app/components/avo/show/fields/files_field_component.html.erb +0 -3
  316. data/app/components/avo/show/fields/files_field_component.rb +0 -4
  317. data/app/components/avo/show/fields/gravatar_field_component.rb +0 -4
  318. data/app/components/avo/show/fields/has_many_field_component.rb +0 -4
  319. data/app/components/avo/show/fields/has_one_field_component.rb +0 -5
  320. data/app/components/avo/show/fields/heading_field_component.rb +0 -4
  321. data/app/components/avo/show/fields/id_field_component.rb +0 -4
  322. data/app/components/avo/show/fields/markdown_field_component.rb +0 -4
  323. data/app/components/avo/show/fields/number_field_component.rb +0 -4
  324. data/app/components/avo/show/fields/select_field_component.rb +0 -4
  325. data/app/components/avo/show/fields/status_field_component.html.erb +0 -3
  326. data/app/components/avo/show/fields/status_field_component.rb +0 -4
  327. data/app/components/avo/show/fields/text_field_component.rb +0 -4
  328. data/app/components/avo/show/fields/textarea_field_component.rb +0 -4
  329. data/app/components/avo/show/fields/trix_field_component.rb +0 -4
  330. data/public/avo-packs/css/application-af3e670d.css.br +0 -0
  331. data/public/avo-packs/css/application-af3e670d.css.gz +0 -0
  332. data/public/avo-packs/css/application-af3e670d.css.map +0 -1
  333. data/public/avo-packs/css/application-af3e670d.css.map.br +0 -0
  334. data/public/avo-packs/css/application-af3e670d.css.map.gz +0 -0
  335. data/public/avo-packs/js/application-801f1297670a4c6df1b6.js +0 -26
  336. data/public/avo-packs/js/application-801f1297670a4c6df1b6.js.br +0 -0
  337. data/public/avo-packs/js/application-801f1297670a4c6df1b6.js.gz +0 -0
  338. data/public/avo-packs/js/application-801f1297670a4c6df1b6.js.map +0 -1
  339. data/public/avo-packs/js/application-801f1297670a4c6df1b6.js.map.br +0 -0
  340. data/public/avo-packs/js/application-801f1297670a4c6df1b6.js.map.gz +0 -0
@@ -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
@@ -2,17 +2,17 @@ module Avo
2
2
  module Fields
3
3
  class TrixField < BaseField
4
4
  attr_reader :always_show
5
+ attr_reader :attachments_disabled
6
+ attr_reader :attachment_key
5
7
 
6
- def initialize(name, **args, &block)
7
- @defaults = {
8
- partial_name: "trix-field"
9
- }
10
-
11
- super(name, **args, &block)
8
+ def initialize(id, **args, &block)
9
+ super(id, **args, &block)
12
10
 
13
11
  hide_on :index
14
12
 
15
- @always_show = args[:always_show].present? ? args[:always_show] : false
13
+ @always_show = args[:always_show] || false
14
+ @attachments_disabled = args[:attachments_disabled] || false
15
+ @attachment_key = args[:attachment_key]
16
16
  end
17
17
  end
18
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.3.3"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -7,7 +7,7 @@ module Generators
7
7
  namespace "avo:action"
8
8
 
9
9
  def create_resource_file
10
- template "action.rb", "app/avo/actions/#{singular_name}.rb"
10
+ template "action.tt", "app/avo/actions/#{singular_name}.rb"
11
11
  end
12
12
  end
13
13
  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
@@ -1,13 +1,9 @@
1
- module Avo
2
- module Actions
3
- class <%= class_name.camelize %> < Action
4
- self.name = '<%= name.underscore.humanize %>'
1
+ class <%= class_name.camelize %> < Avo::BaseAction
2
+ self.name = '<%= name.underscore.humanize %>'
5
3
 
6
- def handle(models:, fields:)
7
- models.each do |model|
8
- # Do something with your models.
9
- end
10
- end
4
+ def handle(models:, fields:)
5
+ models.each do |model|
6
+ # Do something with your models.
11
7
  end
12
8
  end
13
9
  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,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 %>
@@ -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
  */
@@ -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));
@@ -2339,6 +2344,11 @@ select {
2339
2344
  border-color: rgba(148, 163, 184, var(--tw-border-opacity));
2340
2345
  }
2341
2346
 
2347
+ .focus\:border-gray-300:focus {
2348
+ --tw-border-opacity: 1;
2349
+ border-color: rgba(209, 213, 219, var(--tw-border-opacity));
2350
+ }
2351
+
2342
2352
  .focus\:bg-white:focus {
2343
2353
  --tw-bg-opacity: 1;
2344
2354
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
@@ -3651,6 +3661,39 @@ span.CodeMirror-selectedtext { background: none; }
3651
3661
  z-index: 50;
3652
3662
  }
3653
3663
 
3664
+ progress {
3665
+ height: 0.5rem;
3666
+ border-radius: 0.25rem;
3667
+ border-width: 1px;
3668
+ --tw-border-opacity: 1;
3669
+ border-color: rgba(156, 163, 175, var(--tw-border-opacity));
3670
+ --tw-bg-opacity: 1;
3671
+ background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
3672
+ --tw-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
3673
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
3674
+ }
3675
+ progress[value]::-webkit-progress-bar {
3676
+ border-radius: 0.25rem;
3677
+ border-width: 1px;
3678
+ --tw-border-opacity: 1;
3679
+ border-color: rgba(107, 114, 128, var(--tw-border-opacity));
3680
+ --tw-bg-opacity: 1;
3681
+ background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
3682
+ --tw-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
3683
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
3684
+ }
3685
+ progress[value]::-webkit-progress-value {
3686
+ border-radius: 0.25rem;
3687
+ --tw-bg-opacity: 1;
3688
+ background-color: rgba(5, 150, 105, var(--tw-bg-opacity))
3689
+ }
3690
+ progress[value]::-moz-progress-bar {
3691
+ appearance: none;
3692
+ border-radius: 0.25rem;
3693
+ --tw-bg-opacity: 1;
3694
+ background-color: rgba(5, 150, 105, var(--tw-bg-opacity))
3695
+ }
3696
+
3654
3697
  .container {
3655
3698
  width: 100%;
3656
3699
  }
@@ -4234,6 +4277,10 @@ span.CodeMirror-selectedtext { background: none; }
4234
4277
  --tw-bg-opacity: 1;
4235
4278
  background-color: rgba(59, 130, 246, var(--tw-bg-opacity));
4236
4279
  }
4280
+ .hover\:bg-green-500:hover {
4281
+ --tw-bg-opacity: 1;
4282
+ background-color: rgba(16, 185, 129, var(--tw-bg-opacity));
4283
+ }
4237
4284
  .hover\:bg-blue-300:hover {
4238
4285
  --tw-bg-opacity: 1;
4239
4286
  background-color: rgba(147, 197, 253, var(--tw-bg-opacity));
@@ -4320,6 +4367,10 @@ span.CodeMirror-selectedtext { background: none; }
4320
4367
  --tw-border-opacity: 1;
4321
4368
  border-color: rgba(148, 163, 184, var(--tw-border-opacity));
4322
4369
  }
4370
+ .focus\:border-gray-300:focus {
4371
+ --tw-border-opacity: 1;
4372
+ border-color: rgba(209, 213, 219, var(--tw-border-opacity));
4373
+ }
4323
4374
  .focus\:bg-white:focus {
4324
4375
  --tw-bg-opacity: 1;
4325
4376
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
@@ -4527,6 +4578,9 @@ span.CodeMirror-selectedtext { background: none; }
4527
4578
  }
4528
4579
  }
4529
4580
 
4581
+ .pointer-events-none {
4582
+ pointer-events: none
4583
+ }
4530
4584
  .visible {
4531
4585
  visibility: visible
4532
4586
  }
@@ -4670,12 +4724,15 @@ span.CodeMirror-selectedtext { background: none; }
4670
4724
  .ml-1 {
4671
4725
  margin-left: 0.25rem
4672
4726
  }
4727
+ .mr-6 {
4728
+ margin-right: 1.5rem
4729
+ }
4730
+ .mt-0 {
4731
+ margin-top: 0px
4732
+ }
4673
4733
  .ml-1\/12 {
4674
4734
  margin-left: 8.333333%
4675
4735
  }
4676
- .ml-6 {
4677
- margin-left: 1.5rem
4678
- }
4679
4736
  .-mb-1 {
4680
4737
  margin-bottom: -0.25rem
4681
4738
  }
@@ -4694,27 +4751,30 @@ span.CodeMirror-selectedtext { background: none; }
4694
4751
  .ml-2 {
4695
4752
  margin-left: 0.5rem
4696
4753
  }
4754
+ .ml-6 {
4755
+ margin-left: 1.5rem
4756
+ }
4697
4757
  .block {
4698
4758
  display: block
4699
4759
  }
4700
- .inline-flex {
4701
- display: inline-flex
4702
- }
4703
- .flex {
4704
- display: flex
4760
+ .inline-block {
4761
+ display: inline-block
4705
4762
  }
4706
4763
  .inline {
4707
4764
  display: inline
4708
4765
  }
4709
- .grid {
4710
- display: grid
4766
+ .flex {
4767
+ display: flex
4711
4768
  }
4712
- .inline-block {
4713
- display: inline-block
4769
+ .inline-flex {
4770
+ display: inline-flex
4714
4771
  }
4715
4772
  .table {
4716
4773
  display: table
4717
4774
  }
4775
+ .grid {
4776
+ display: grid
4777
+ }
4718
4778
  .hidden {
4719
4779
  display: none
4720
4780
  }
@@ -4739,6 +4799,9 @@ span.CodeMirror-selectedtext { background: none; }
4739
4799
  .h-full {
4740
4800
  height: 100%
4741
4801
  }
4802
+ .h-12 {
4803
+ height: 3rem
4804
+ }
4742
4805
  .h-16 {
4743
4806
  height: 4rem
4744
4807
  }
@@ -4748,9 +4811,6 @@ span.CodeMirror-selectedtext { background: none; }
4748
4811
  .h-10 {
4749
4812
  height: 2.5rem
4750
4813
  }
4751
- .h-12 {
4752
- height: 3rem
4753
- }
4754
4814
  .max-h-168 {
4755
4815
  max-height: 42rem
4756
4816
  }
@@ -4769,15 +4829,15 @@ span.CodeMirror-selectedtext { background: none; }
4769
4829
  .min-h-1\/3 {
4770
4830
  min-height: 33.333333%
4771
4831
  }
4772
- .min-h-48 {
4773
- min-height: 12rem
4774
- }
4775
4832
  .min-h-16 {
4776
4833
  min-height: 4rem
4777
4834
  }
4778
4835
  .min-h-inherit {
4779
4836
  min-height: inherit
4780
4837
  }
4838
+ .min-h-48 {
4839
+ min-height: 12rem
4840
+ }
4781
4841
  .w-5 {
4782
4842
  width: 1.25rem
4783
4843
  }
@@ -4802,6 +4862,9 @@ span.CodeMirror-selectedtext { background: none; }
4802
4862
  .w-64 {
4803
4863
  width: 16rem
4804
4864
  }
4865
+ .w-1\/2 {
4866
+ width: 50%
4867
+ }
4805
4868
  .w-11\/12 {
4806
4869
  width: 91.666667%
4807
4870
  }
@@ -4820,6 +4883,9 @@ span.CodeMirror-selectedtext { background: none; }
4820
4883
  .min-w-300px {
4821
4884
  min-width: 300px
4822
4885
  }
4886
+ .min-w-\[200px\] {
4887
+ min-width: 200px
4888
+ }
4823
4889
  .min-w-4 {
4824
4890
  min-width: 1rem
4825
4891
  }
@@ -4866,16 +4932,19 @@ span.CodeMirror-selectedtext { background: none; }
4866
4932
  .cursor-wait {
4867
4933
  cursor: wait
4868
4934
  }
4935
+ .cursor-not-allowed {
4936
+ cursor: not-allowed
4937
+ }
4869
4938
  .appearance-none {
4870
4939
  -webkit-appearance: none;
4871
4940
  appearance: none
4872
4941
  }
4873
- .grid-cols-3 {
4874
- grid-template-columns: repeat(3, minmax(0, 1fr))
4875
- }
4876
4942
  .grid-cols-1 {
4877
4943
  grid-template-columns: repeat(1, minmax(0, 1fr))
4878
4944
  }
4945
+ .grid-cols-3 {
4946
+ grid-template-columns: repeat(3, minmax(0, 1fr))
4947
+ }
4879
4948
  .flex-col {
4880
4949
  flex-direction: column
4881
4950
  }
@@ -4906,18 +4975,18 @@ span.CodeMirror-selectedtext { background: none; }
4906
4975
  .justify-end {
4907
4976
  justify-content: flex-end
4908
4977
  }
4909
- .justify-evenly {
4910
- justify-content: space-evenly
4911
- }
4912
4978
  .justify-around {
4913
4979
  justify-content: space-around
4914
4980
  }
4915
- .gap-3 {
4916
- gap: 0.75rem
4981
+ .justify-evenly {
4982
+ justify-content: space-evenly
4917
4983
  }
4918
4984
  .gap-6 {
4919
4985
  gap: 1.5rem
4920
4986
  }
4987
+ .gap-3 {
4988
+ gap: 0.75rem
4989
+ }
4921
4990
  .space-y-2 > :not([hidden]) ~ :not([hidden]) {
4922
4991
  --tw-space-y-reverse: 0;
4923
4992
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
@@ -4938,16 +5007,16 @@ span.CodeMirror-selectedtext { background: none; }
4938
5007
  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
4939
5008
  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)))
4940
5009
  }
4941
- .space-y-3 > :not([hidden]) ~ :not([hidden]) {
4942
- --tw-space-y-reverse: 0;
4943
- margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
4944
- margin-bottom: calc(0.75rem * var(--tw-space-y-reverse))
4945
- }
4946
5010
  .space-x-3 > :not([hidden]) ~ :not([hidden]) {
4947
5011
  --tw-space-x-reverse: 0;
4948
5012
  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
4949
5013
  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)))
4950
5014
  }
5015
+ .space-y-3 > :not([hidden]) ~ :not([hidden]) {
5016
+ --tw-space-y-reverse: 0;
5017
+ margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
5018
+ margin-bottom: calc(0.75rem * var(--tw-space-y-reverse))
5019
+ }
4951
5020
  .divide-y > :not([hidden]) ~ :not([hidden]) {
4952
5021
  --tw-divide-y-reverse: 0;
4953
5022
  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
@@ -4998,6 +5067,9 @@ span.CodeMirror-selectedtext { background: none; }
4998
5067
  .rounded-full {
4999
5068
  border-radius: 9999px
5000
5069
  }
5070
+ .\!rounded-none {
5071
+ border-radius: 0px !important
5072
+ }
5001
5073
  .rounded-r-md {
5002
5074
  border-top-right-radius: 0.375rem;
5003
5075
  border-bottom-right-radius: 0.375rem
@@ -5013,6 +5085,9 @@ span.CodeMirror-selectedtext { background: none; }
5013
5085
  .border {
5014
5086
  border-width: 1px
5015
5087
  }
5088
+ .border-4 {
5089
+ border-width: 4px
5090
+ }
5016
5091
  .border-t {
5017
5092
  border-top-width: 1px
5018
5093
  }
@@ -5022,6 +5097,21 @@ span.CodeMirror-selectedtext { background: none; }
5022
5097
  .border-r {
5023
5098
  border-right-width: 1px
5024
5099
  }
5100
+ .border-l-0 {
5101
+ border-left-width: 0px
5102
+ }
5103
+ .border-b-0 {
5104
+ border-bottom-width: 0px
5105
+ }
5106
+ .border-t-0 {
5107
+ border-top-width: 0px
5108
+ }
5109
+ .border-l {
5110
+ border-left-width: 1px
5111
+ }
5112
+ .border-none {
5113
+ border-style: none
5114
+ }
5025
5115
  .border-pink-600 {
5026
5116
  --tw-border-opacity: 1;
5027
5117
  border-color: rgba(219, 39, 119, var(--tw-border-opacity))
@@ -5074,6 +5164,10 @@ span.CodeMirror-selectedtext { background: none; }
5074
5164
  --tw-border-opacity: 1;
5075
5165
  border-color: rgba(209, 213, 219, var(--tw-border-opacity))
5076
5166
  }
5167
+ .border-white {
5168
+ --tw-border-opacity: 1;
5169
+ border-color: rgba(255, 255, 255, var(--tw-border-opacity))
5170
+ }
5077
5171
  .border-gray-500 {
5078
5172
  --tw-border-opacity: 1;
5079
5173
  border-color: rgba(107, 114, 128, var(--tw-border-opacity))
@@ -5225,10 +5319,6 @@ span.CodeMirror-selectedtext { background: none; }
5225
5319
  padding-left: 6rem;
5226
5320
  padding-right: 6rem
5227
5321
  }
5228
- .py-px {
5229
- padding-top: 1px;
5230
- padding-bottom: 1px
5231
- }
5232
5322
  .py-0 {
5233
5323
  padding-top: 0px;
5234
5324
  padding-bottom: 0px
@@ -5237,6 +5327,10 @@ span.CodeMirror-selectedtext { background: none; }
5237
5327
  padding-top: 0.75rem;
5238
5328
  padding-bottom: 0.75rem
5239
5329
  }
5330
+ .py-px {
5331
+ padding-top: 1px;
5332
+ padding-bottom: 1px
5333
+ }
5240
5334
  .py-8 {
5241
5335
  padding-top: 2rem;
5242
5336
  padding-bottom: 2rem
@@ -5247,12 +5341,12 @@ span.CodeMirror-selectedtext { background: none; }
5247
5341
  .pb-0 {
5248
5342
  padding-bottom: 0px
5249
5343
  }
5250
- .pl-6 {
5251
- padding-left: 1.5rem
5252
- }
5253
5344
  .pb-3\/4 {
5254
5345
  padding-bottom: 75%
5255
5346
  }
5347
+ .pl-6 {
5348
+ padding-left: 1.5rem
5349
+ }
5256
5350
  .text-center {
5257
5351
  text-align: center
5258
5352
  }
@@ -5393,6 +5487,10 @@ span.CodeMirror-selectedtext { background: none; }
5393
5487
  --tw-text-opacity: 1;
5394
5488
  color: rgba(156, 163, 175, var(--tw-text-opacity))
5395
5489
  }
5490
+ .\!text-blue-700 {
5491
+ --tw-text-opacity: 1 !important;
5492
+ color: rgba(29, 78, 216, var(--tw-text-opacity)) !important
5493
+ }
5396
5494
  .text-gray-800 {
5397
5495
  --tw-text-opacity: 1;
5398
5496
  color: rgba(31, 41, 55, var(--tw-text-opacity))
@@ -5405,6 +5503,9 @@ span.CodeMirror-selectedtext { background: none; }
5405
5503
  --tw-text-opacity: 1;
5406
5504
  color: rgba(185, 28, 28, var(--tw-text-opacity))
5407
5505
  }
5506
+ .underline {
5507
+ text-decoration: underline
5508
+ }
5408
5509
  .opacity-75 {
5409
5510
  opacity: 0.75
5410
5511
  }
@@ -5423,12 +5524,37 @@ span.CodeMirror-selectedtext { background: none; }
5423
5524
  --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
5424
5525
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
5425
5526
  }
5527
+ .shadow-lg {
5528
+ --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
5529
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
5530
+ }
5531
+ .shadow {
5532
+ --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
5533
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
5534
+ }
5426
5535
  .outline-none {
5427
5536
  outline: 2px solid transparent;
5428
5537
  outline-offset: 2px
5429
5538
  }
5539
+ .filter {
5540
+ --tw-blur: var(--tw-empty,/*!*/ /*!*/);
5541
+ --tw-brightness: var(--tw-empty,/*!*/ /*!*/);
5542
+ --tw-contrast: var(--tw-empty,/*!*/ /*!*/);
5543
+ --tw-grayscale: var(--tw-empty,/*!*/ /*!*/);
5544
+ --tw-hue-rotate: var(--tw-empty,/*!*/ /*!*/);
5545
+ --tw-invert: var(--tw-empty,/*!*/ /*!*/);
5546
+ --tw-saturate: var(--tw-empty,/*!*/ /*!*/);
5547
+ --tw-sepia: var(--tw-empty,/*!*/ /*!*/);
5548
+ --tw-drop-shadow: var(--tw-empty,/*!*/ /*!*/);
5549
+ 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)
5550
+ }
5551
+ .invert {
5552
+ --tw-invert: invert(100%)
5553
+ }
5430
5554
  .transition {
5431
- transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;
5555
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
5556
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
5557
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
5432
5558
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
5433
5559
  transition-duration: 150ms
5434
5560
  }
@@ -5545,6 +5671,10 @@ span.CodeMirror-selectedtext { background: none; }
5545
5671
  --tw-bg-opacity: 1;
5546
5672
  background-color: rgba(59, 130, 246, var(--tw-bg-opacity))
5547
5673
  }
5674
+ .hover\:bg-green-500:hover {
5675
+ --tw-bg-opacity: 1;
5676
+ background-color: rgba(16, 185, 129, var(--tw-bg-opacity))
5677
+ }
5548
5678
  .hover\:bg-blue-300:hover {
5549
5679
  --tw-bg-opacity: 1;
5550
5680
  background-color: rgba(147, 197, 253, var(--tw-bg-opacity))
@@ -5631,6 +5761,10 @@ span.CodeMirror-selectedtext { background: none; }
5631
5761
  --tw-border-opacity: 1;
5632
5762
  border-color: rgba(148, 163, 184, var(--tw-border-opacity))
5633
5763
  }
5764
+ .focus\:border-gray-300:focus {
5765
+ --tw-border-opacity: 1;
5766
+ border-color: rgba(209, 213, 219, var(--tw-border-opacity))
5767
+ }
5634
5768
  .focus\:bg-white:focus {
5635
5769
  --tw-bg-opacity: 1;
5636
5770
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity))
@@ -5864,7 +5998,9 @@ html, body{
5864
5998
  --tw-scale-x: 1;
5865
5999
  --tw-scale-y: 1;
5866
6000
  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));
5867
- transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;
6001
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
6002
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
6003
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
5868
6004
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
5869
6005
  transition-duration: 150ms;
5870
6006
  transition-duration: 150ms;
@@ -5914,4 +6050,4 @@ html, body{
5914
6050
  }
5915
6051
 
5916
6052
 
5917
- /*# sourceMappingURL=application-af3e670d.css.map*/
6053
+ /*# sourceMappingURL=application-cb627e0b.css.map*/