plutonium 0.16.4 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (717) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/plutonium.css +9 -1
  3. data/app/assets/plutonium.js +23273 -9599
  4. data/app/assets/plutonium.js.map +4 -4
  5. data/app/assets/plutonium.min.js +159 -49
  6. data/app/assets/plutonium.min.js.map +4 -4
  7. data/app/views/plutonium/_resource_header.html.erb +33 -24
  8. data/app/views/plutonium/_resource_sidebar.html.erb +10 -8
  9. data/app/views/rodauth/otp_unlock.html.erb +22 -0
  10. data/app/views/rodauth/otp_unlock_not_available.html.erb +14 -0
  11. data/app/views/rodauth/webauthn_remove.html.erb +1 -0
  12. data/docs/guide/getting-started/resources.md +2 -2
  13. data/docs/guide/tutorial.md +4 -4
  14. data/gemfiles/rails_7.gemfile.lock +406 -0
  15. data/lib/generators/pu/core/assets/assets_generator.rb +1 -1
  16. data/lib/generators/pu/res/conn/conn_generator.rb +24 -10
  17. data/lib/generators/pu/rodauth/concerns/configuration.rb +11 -0
  18. data/lib/generators/pu/rodauth/concerns/feature_selector.rb +4 -0
  19. data/lib/generators/pu/rodauth/install_generator.rb +3 -1
  20. data/lib/generators/pu/rodauth/migration/active_record/otp_unlock.erb +7 -0
  21. data/lib/generators/pu/rodauth/templates/INSTRUCTIONS +2 -46
  22. data/lib/generators/pu/rodauth/templates/app/controllers/plugin_controller.rb.tt +3 -3
  23. data/lib/generators/pu/rodauth/templates/app/mailers/rodauth_mailer.rb.tt +50 -1
  24. data/lib/generators/pu/rodauth/templates/app/rodauth/account_rodauth_plugin.rb.tt +37 -3
  25. data/lib/generators/pu/rodauth/templates/app/rodauth/rodauth_plugin.rb.tt +33 -8
  26. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_disabled.text.erb +2 -0
  27. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_locked_out.text.erb +9 -0
  28. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_setup.text.erb +2 -0
  29. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_unlock_failed.text.erb +8 -0
  30. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_unlocked.text.erb +2 -0
  31. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/webauthn_authenticator_added.text.erb +3 -0
  32. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/webauthn_authenticator_removed.text.erb +3 -0
  33. data/lib/generators/pu/rodauth/views_generator.rb +1 -12
  34. data/lib/plutonium/core/controllers/authorizable.rb +3 -1
  35. data/lib/plutonium/helpers/application_helper.rb +0 -8
  36. data/lib/plutonium/helpers.rb +0 -3
  37. data/lib/plutonium/railtie.rb +0 -14
  38. data/lib/plutonium/reloader.rb +2 -12
  39. data/lib/plutonium/rodauth/controller_methods.rb +1 -3
  40. data/lib/plutonium/ui/component/behaviour.rb +1 -1
  41. data/lib/plutonium/ui/component/kit.rb +59 -15
  42. data/lib/plutonium/ui/display/base.rb +6 -2
  43. data/lib/plutonium/ui/display/{component → components}/association.rb +1 -1
  44. data/lib/plutonium/ui/display/components/attachment.rb +93 -0
  45. data/lib/plutonium/ui/display/{component → components}/markdown.rb +2 -1
  46. data/lib/plutonium/ui/display/resource.rb +21 -6
  47. data/lib/plutonium/ui/display/theme.rb +2 -1
  48. data/lib/plutonium/ui/form/base.rb +7 -0
  49. data/lib/plutonium/ui/form/components/belongs_to.rb +45 -1
  50. data/lib/plutonium/ui/form/components/has_many.rb +45 -1
  51. data/lib/plutonium/ui/form/components/uppy.rb +173 -0
  52. data/lib/plutonium/ui/form/query.rb +5 -5
  53. data/lib/plutonium/ui/form/resource.rb +6 -6
  54. data/lib/plutonium/ui/form/theme.rb +6 -2
  55. data/lib/plutonium/ui/frame_navigator_panel.rb +25 -4
  56. data/lib/plutonium/ui/layout/base.rb +1 -1
  57. data/lib/plutonium/ui/layout/header.rb +1 -1
  58. data/lib/plutonium/ui/layout/sidebar.rb +0 -1
  59. data/lib/plutonium/ui/nav_grid_menu.rb +93 -0
  60. data/lib/plutonium/ui/nav_user.rb +121 -0
  61. data/lib/plutonium/ui/panel.rb +2 -2
  62. data/lib/plutonium/ui/sidebar_menu.rb +19 -39
  63. data/lib/plutonium/ui/tab_list.rb +73 -0
  64. data/lib/plutonium/ui/table/base.rb +7 -1
  65. data/lib/plutonium/ui/table/components/attachment.rb +71 -0
  66. data/lib/plutonium/ui/table/components/pagy_info.rb +12 -4
  67. data/lib/plutonium/ui/table/components/pagy_pagination.rb +5 -5
  68. data/lib/plutonium/ui/table/display_theme.rb +2 -1
  69. data/lib/plutonium/ui/table/resource.rb +11 -12
  70. data/lib/plutonium/version.rb +1 -1
  71. data/package-lock.json +356 -18
  72. data/package.json +6 -2
  73. data/src/css/plutonium.css +3 -0
  74. data/src/js/controllers/attachment_input_controller.js +241 -0
  75. data/src/js/controllers/attachment_preview_container_controller.js +15 -0
  76. data/src/js/controllers/attachment_preview_controller.js +63 -0
  77. data/src/js/controllers/color_mode_controller.js +0 -1
  78. data/src/js/controllers/easymde_controller.js +0 -1
  79. data/src/js/controllers/flatpickr_controller.js +0 -1
  80. data/src/js/controllers/form_controller.js +0 -1
  81. data/src/js/controllers/frame_navigator_controller.js +16 -12
  82. data/src/js/controllers/intl_tel_input_controller.js +0 -1
  83. data/src/js/controllers/register_controllers.js +12 -30
  84. data/src/js/controllers/resource_collapse_controller.js +0 -1
  85. data/src/js/controllers/resource_dismiss_controller.js +0 -1
  86. data/src/js/controllers/resource_drop_down_controller.js +161 -9
  87. data/src/js/controllers/{header_controller.js → resource_header_controller.js} +1 -0
  88. data/src/js/controllers/resource_tab_list_controller.js +64 -0
  89. data/src/js/controllers/select_navigator.js +16 -0
  90. data/src/js/controllers/slim_select_controller.js +0 -1
  91. data/src/js/support/dom_element.js +78 -0
  92. data/src/js/support/mime_icon.js +127 -0
  93. data/tailwind.options.js +0 -5
  94. metadata +29 -642
  95. data/README copy.md +0 -83
  96. data/app/assets/application.js.bk +0 -31419
  97. data/app/assets/icons/flags/ghana.svg +0 -49
  98. data/app/assets/icons/outline/address-book.svg +0 -3
  99. data/app/assets/icons/outline/adjustments-horizontal.svg +0 -3
  100. data/app/assets/icons/outline/adjustments-vertical.svg +0 -3
  101. data/app/assets/icons/outline/align-center.svg +0 -3
  102. data/app/assets/icons/outline/angle-down.svg +0 -3
  103. data/app/assets/icons/outline/angle-left.svg +0 -3
  104. data/app/assets/icons/outline/angle-right.svg +0 -3
  105. data/app/assets/icons/outline/angle-up.svg +0 -3
  106. data/app/assets/icons/outline/annotation.svg +0 -3
  107. data/app/assets/icons/outline/archive-arrow-down.svg +0 -3
  108. data/app/assets/icons/outline/archive.svg +0 -3
  109. data/app/assets/icons/outline/arrow-down-to-bracket.svg +0 -3
  110. data/app/assets/icons/outline/arrow-down.svg +0 -3
  111. data/app/assets/icons/outline/arrow-left-to-bracket.svg +0 -3
  112. data/app/assets/icons/outline/arrow-left.svg +0 -3
  113. data/app/assets/icons/outline/arrow-right-alt.svg +0 -3
  114. data/app/assets/icons/outline/arrow-right-to-bracket.svg +0 -3
  115. data/app/assets/icons/outline/arrow-right.svg +0 -3
  116. data/app/assets/icons/outline/arrow-sort-letters.svg +0 -3
  117. data/app/assets/icons/outline/arrow-up-down.svg +0 -3
  118. data/app/assets/icons/outline/arrow-up-from-bracket.svg +0 -3
  119. data/app/assets/icons/outline/arrow-up-right-down-left.svg +0 -3
  120. data/app/assets/icons/outline/arrow-up-right-from-square.svg +0 -3
  121. data/app/assets/icons/outline/arrow-up.svg +0 -3
  122. data/app/assets/icons/outline/arrows-repeat-count.svg +0 -3
  123. data/app/assets/icons/outline/arrows-repeat.svg +0 -3
  124. data/app/assets/icons/outline/atom.svg +0 -3
  125. data/app/assets/icons/outline/backward-step.svg +0 -3
  126. data/app/assets/icons/outline/badge-check.svg +0 -3
  127. data/app/assets/icons/outline/bars-from-left.svg +0 -3
  128. data/app/assets/icons/outline/bars.svg +0 -3
  129. data/app/assets/icons/outline/bell-active-alt.svg +0 -3
  130. data/app/assets/icons/outline/bell-active.svg +0 -3
  131. data/app/assets/icons/outline/bell-ring.svg +0 -3
  132. data/app/assets/icons/outline/bell.svg +0 -3
  133. data/app/assets/icons/outline/blender-phone.svg +0 -3
  134. data/app/assets/icons/outline/book-open.svg +0 -3
  135. data/app/assets/icons/outline/book.svg +0 -3
  136. data/app/assets/icons/outline/bookmark.svg +0 -3
  137. data/app/assets/icons/outline/brain.svg +0 -3
  138. data/app/assets/icons/outline/briefcase.svg +0 -3
  139. data/app/assets/icons/outline/bug.svg +0 -3
  140. data/app/assets/icons/outline/building.svg +0 -3
  141. data/app/assets/icons/outline/bullhorn.svg +0 -3
  142. data/app/assets/icons/outline/calendar-edit.svg +0 -3
  143. data/app/assets/icons/outline/calendar-month.svg +0 -3
  144. data/app/assets/icons/outline/calendar-plus.svg +0 -3
  145. data/app/assets/icons/outline/calendar-week.svg +0 -3
  146. data/app/assets/icons/outline/camera-photo.svg +0 -4
  147. data/app/assets/icons/outline/caption.svg +0 -3
  148. data/app/assets/icons/outline/caret-down.svg +0 -3
  149. data/app/assets/icons/outline/caret-left.svg +0 -3
  150. data/app/assets/icons/outline/caret-right.svg +0 -3
  151. data/app/assets/icons/outline/caret-sort.svg +0 -3
  152. data/app/assets/icons/outline/caret-up.svg +0 -3
  153. data/app/assets/icons/outline/cart-plus-alt.svg +0 -3
  154. data/app/assets/icons/outline/cart-plus.svg +0 -3
  155. data/app/assets/icons/outline/cart.svg +0 -3
  156. data/app/assets/icons/outline/cash.svg +0 -3
  157. data/app/assets/icons/outline/chart-line-down.svg +0 -3
  158. data/app/assets/icons/outline/chart-line-up.svg +0 -3
  159. data/app/assets/icons/outline/chart-mixed-dollar.svg +0 -3
  160. data/app/assets/icons/outline/chart-mixed.svg +0 -3
  161. data/app/assets/icons/outline/chart-pie.svg +0 -4
  162. data/app/assets/icons/outline/chart.svg +0 -3
  163. data/app/assets/icons/outline/check-circle.svg +0 -3
  164. data/app/assets/icons/outline/check-plus-circle.svg +0 -3
  165. data/app/assets/icons/outline/check.svg +0 -3
  166. data/app/assets/icons/outline/chevron-double-down.svg +0 -3
  167. data/app/assets/icons/outline/chevron-double-left.svg +0 -3
  168. data/app/assets/icons/outline/chevron-double-right.svg +0 -3
  169. data/app/assets/icons/outline/chevron-double-up.svg +0 -3
  170. data/app/assets/icons/outline/chevron-down.svg +0 -3
  171. data/app/assets/icons/outline/chevron-left.svg +0 -3
  172. data/app/assets/icons/outline/chevron-right.svg +0 -3
  173. data/app/assets/icons/outline/chevron-sort.svg +0 -3
  174. data/app/assets/icons/outline/chevron-up.svg +0 -3
  175. data/app/assets/icons/outline/circle-pause.svg +0 -3
  176. data/app/assets/icons/outline/circle-plus.svg +0 -3
  177. data/app/assets/icons/outline/clapperboard-play.svg +0 -3
  178. data/app/assets/icons/outline/clipboard-check.svg +0 -3
  179. data/app/assets/icons/outline/clipboard-list.svg +0 -3
  180. data/app/assets/icons/outline/clipboard.svg +0 -3
  181. data/app/assets/icons/outline/clock.svg +0 -3
  182. data/app/assets/icons/outline/close-circle.svg +0 -3
  183. data/app/assets/icons/outline/close.svg +0 -3
  184. data/app/assets/icons/outline/cloud-arrow-up.svg +0 -3
  185. data/app/assets/icons/outline/code-branch.svg +0 -3
  186. data/app/assets/icons/outline/code-fork.svg +0 -3
  187. data/app/assets/icons/outline/code-merge.svg +0 -3
  188. data/app/assets/icons/outline/code-pull-request.svg +0 -3
  189. data/app/assets/icons/outline/code.svg +0 -3
  190. data/app/assets/icons/outline/cog.svg +0 -4
  191. data/app/assets/icons/outline/column.svg +0 -3
  192. data/app/assets/icons/outline/command.svg +0 -3
  193. data/app/assets/icons/outline/compress.svg +0 -3
  194. data/app/assets/icons/outline/computer-speaker.svg +0 -3
  195. data/app/assets/icons/outline/credit-card.svg +0 -3
  196. data/app/assets/icons/outline/database.svg +0 -3
  197. data/app/assets/icons/outline/desktop-pc.svg +0 -3
  198. data/app/assets/icons/outline/dna.svg +0 -3
  199. data/app/assets/icons/outline/dollar.svg +0 -3
  200. data/app/assets/icons/outline/dots-horizontal.svg +0 -3
  201. data/app/assets/icons/outline/dots-vertical.svg +0 -3
  202. data/app/assets/icons/outline/download.svg +0 -3
  203. data/app/assets/icons/outline/draw-square.svg +0 -3
  204. data/app/assets/icons/outline/edit.svg +0 -3
  205. data/app/assets/icons/outline/envelope-open.svg +0 -3
  206. data/app/assets/icons/outline/envelope.svg +0 -3
  207. data/app/assets/icons/outline/euro.svg +0 -3
  208. data/app/assets/icons/outline/exclamation-circle.svg +0 -3
  209. data/app/assets/icons/outline/expand.svg +0 -3
  210. data/app/assets/icons/outline/eye-slash.svg +0 -3
  211. data/app/assets/icons/outline/eye.svg +0 -4
  212. data/app/assets/icons/outline/face-explode.svg +0 -4
  213. data/app/assets/icons/outline/face-grin-stars.svg +0 -6
  214. data/app/assets/icons/outline/face-grin.svg +0 -3
  215. data/app/assets/icons/outline/face-laugh.svg +0 -3
  216. data/app/assets/icons/outline/file-chart-bar.svg +0 -3
  217. data/app/assets/icons/outline/file-check.svg +0 -3
  218. data/app/assets/icons/outline/file-circle-plus.svg +0 -3
  219. data/app/assets/icons/outline/file-clone.svg +0 -3
  220. data/app/assets/icons/outline/file-code.svg +0 -3
  221. data/app/assets/icons/outline/file-copy-alt.svg +0 -3
  222. data/app/assets/icons/outline/file-copy.svg +0 -3
  223. data/app/assets/icons/outline/file-csv.svg +0 -3
  224. data/app/assets/icons/outline/file-export.svg +0 -3
  225. data/app/assets/icons/outline/file-image.svg +0 -4
  226. data/app/assets/icons/outline/file-import.svg +0 -3
  227. data/app/assets/icons/outline/file-invoice.svg +0 -3
  228. data/app/assets/icons/outline/file-lines.svg +0 -3
  229. data/app/assets/icons/outline/file-music.svg +0 -3
  230. data/app/assets/icons/outline/file-paste.svg +0 -3
  231. data/app/assets/icons/outline/file-pdf.svg +0 -3
  232. data/app/assets/icons/outline/file-pen.svg +0 -3
  233. data/app/assets/icons/outline/file-ppt.svg +0 -3
  234. data/app/assets/icons/outline/file-search.svg +0 -3
  235. data/app/assets/icons/outline/file-shield.svg +0 -3
  236. data/app/assets/icons/outline/file-video.svg +0 -3
  237. data/app/assets/icons/outline/file-word.svg +0 -3
  238. data/app/assets/icons/outline/file-zip.svg +0 -3
  239. data/app/assets/icons/outline/file.svg +0 -3
  240. data/app/assets/icons/outline/filter.svg +0 -3
  241. data/app/assets/icons/outline/fingerprint.svg +0 -3
  242. data/app/assets/icons/outline/fire.svg +0 -3
  243. data/app/assets/icons/outline/flag.svg +0 -3
  244. data/app/assets/icons/outline/folder-arrow-right.svg +0 -3
  245. data/app/assets/icons/outline/folder-duplicate.svg +0 -3
  246. data/app/assets/icons/outline/folder-open.svg +0 -3
  247. data/app/assets/icons/outline/folder-plus.svg +0 -3
  248. data/app/assets/icons/outline/folder.svg +0 -3
  249. data/app/assets/icons/outline/forward-step.svg +0 -3
  250. data/app/assets/icons/outline/forward.svg +0 -3
  251. data/app/assets/icons/outline/gift-box.svg +0 -3
  252. data/app/assets/icons/outline/globe.svg +0 -3
  253. data/app/assets/icons/outline/grid-plus.svg +0 -3
  254. data/app/assets/icons/outline/grid.svg +0 -3
  255. data/app/assets/icons/outline/headphones.svg +0 -3
  256. data/app/assets/icons/outline/heart.svg +0 -3
  257. data/app/assets/icons/outline/home.svg +0 -3
  258. data/app/assets/icons/outline/hourglass.svg +0 -3
  259. data/app/assets/icons/outline/image.svg +0 -3
  260. data/app/assets/icons/outline/inbox-full.svg +0 -3
  261. data/app/assets/icons/outline/inbox.svg +0 -3
  262. data/app/assets/icons/outline/indent.svg +0 -3
  263. data/app/assets/icons/outline/info-circle.svg +0 -3
  264. data/app/assets/icons/outline/keyboard.svg +0 -5
  265. data/app/assets/icons/outline/label.svg +0 -3
  266. data/app/assets/icons/outline/landmark.svg +0 -3
  267. data/app/assets/icons/outline/layers.svg +0 -3
  268. data/app/assets/icons/outline/letter-bold.svg +0 -3
  269. data/app/assets/icons/outline/letter-italic.svg +0 -3
  270. data/app/assets/icons/outline/letter-underline.svg +0 -3
  271. data/app/assets/icons/outline/life-saver.svg +0 -3
  272. data/app/assets/icons/outline/lightbulb.svg +0 -3
  273. data/app/assets/icons/outline/link.svg +0 -3
  274. data/app/assets/icons/outline/list-music.svg +0 -3
  275. data/app/assets/icons/outline/list.svg +0 -3
  276. data/app/assets/icons/outline/lock-open.svg +0 -3
  277. data/app/assets/icons/outline/lock-time.svg +0 -3
  278. data/app/assets/icons/outline/lock.svg +0 -3
  279. data/app/assets/icons/outline/mail-box.svg +0 -3
  280. data/app/assets/icons/outline/map-pin-alt.svg +0 -4
  281. data/app/assets/icons/outline/map-pin.svg +0 -3
  282. data/app/assets/icons/outline/message-caption.svg +0 -3
  283. data/app/assets/icons/outline/message-dots.svg +0 -3
  284. data/app/assets/icons/outline/messages.svg +0 -3
  285. data/app/assets/icons/outline/microphone.svg +0 -3
  286. data/app/assets/icons/outline/minimize.svg +0 -3
  287. data/app/assets/icons/outline/minus.svg +0 -3
  288. data/app/assets/icons/outline/mobile-phone.svg +0 -3
  289. data/app/assets/icons/outline/moon.svg +0 -3
  290. data/app/assets/icons/outline/newspaper.svg +0 -3
  291. data/app/assets/icons/outline/ordered-list.svg +0 -3
  292. data/app/assets/icons/outline/outdent.svg +0 -3
  293. data/app/assets/icons/outline/palette.svg +0 -3
  294. data/app/assets/icons/outline/paper-clip.svg +0 -3
  295. data/app/assets/icons/outline/paper-plane.svg +0 -3
  296. data/app/assets/icons/outline/paragraph.svg +0 -3
  297. data/app/assets/icons/outline/pause.svg +0 -3
  298. data/app/assets/icons/outline/pen-nib.svg +0 -3
  299. data/app/assets/icons/outline/pen.svg +0 -3
  300. data/app/assets/icons/outline/phone.svg +0 -3
  301. data/app/assets/icons/outline/play.svg +0 -3
  302. data/app/assets/icons/outline/plus.svg +0 -3
  303. data/app/assets/icons/outline/printer.svg +0 -3
  304. data/app/assets/icons/outline/profile-card.svg +0 -3
  305. data/app/assets/icons/outline/question-circle.svg +0 -3
  306. data/app/assets/icons/outline/quote.svg +0 -3
  307. data/app/assets/icons/outline/receipt.svg +0 -3
  308. data/app/assets/icons/outline/rectangle-list.svg +0 -3
  309. data/app/assets/icons/outline/redo.svg +0 -3
  310. data/app/assets/icons/outline/refresh.svg +0 -3
  311. data/app/assets/icons/outline/reply-all.svg +0 -3
  312. data/app/assets/icons/outline/reply.svg +0 -3
  313. data/app/assets/icons/outline/restore-window.svg +0 -3
  314. data/app/assets/icons/outline/rocket.svg +0 -3
  315. data/app/assets/icons/outline/ruler-combined.svg +0 -3
  316. data/app/assets/icons/outline/sale-percent.svg +0 -3
  317. data/app/assets/icons/outline/scale-balanced.svg +0 -3
  318. data/app/assets/icons/outline/search.svg +0 -3
  319. data/app/assets/icons/outline/share-all.svg +0 -3
  320. data/app/assets/icons/outline/share-nodes.svg +0 -3
  321. data/app/assets/icons/outline/shield-check.svg +0 -3
  322. data/app/assets/icons/outline/shield.svg +0 -3
  323. data/app/assets/icons/outline/shopping-bag.svg +0 -3
  324. data/app/assets/icons/outline/shuffle.svg +0 -3
  325. data/app/assets/icons/outline/sort-horizontal.svg +0 -3
  326. data/app/assets/icons/outline/sort.svg +0 -3
  327. data/app/assets/icons/outline/star-half-stroke.svg +0 -3
  328. data/app/assets/icons/outline/star-half.svg +0 -3
  329. data/app/assets/icons/outline/star.svg +0 -3
  330. data/app/assets/icons/outline/store.svg +0 -3
  331. data/app/assets/icons/outline/sun.svg +0 -3
  332. data/app/assets/icons/outline/swatchbook.svg +0 -3
  333. data/app/assets/icons/outline/table-column.svg +0 -3
  334. data/app/assets/icons/outline/table-row.svg +0 -3
  335. data/app/assets/icons/outline/tablet.svg +0 -3
  336. data/app/assets/icons/outline/tag.svg +0 -3
  337. data/app/assets/icons/outline/terminal.svg +0 -3
  338. data/app/assets/icons/outline/text-size.svg +0 -3
  339. data/app/assets/icons/outline/text-slash.svg +0 -3
  340. data/app/assets/icons/outline/thumbs-down.svg +0 -3
  341. data/app/assets/icons/outline/thumbs-up.svg +0 -3
  342. data/app/assets/icons/outline/ticket.svg +0 -3
  343. data/app/assets/icons/outline/trash-bin.svg +0 -3
  344. data/app/assets/icons/outline/truck.svg +0 -3
  345. data/app/assets/icons/outline/undo.svg +0 -3
  346. data/app/assets/icons/outline/upload.svg +0 -3
  347. data/app/assets/icons/outline/user-add.svg +0 -3
  348. data/app/assets/icons/outline/user-circle.svg +0 -3
  349. data/app/assets/icons/outline/user-edit.svg +0 -3
  350. data/app/assets/icons/outline/user-headset.svg +0 -3
  351. data/app/assets/icons/outline/user-remove.svg +0 -3
  352. data/app/assets/icons/outline/user-settings.svg +0 -3
  353. data/app/assets/icons/outline/user.svg +0 -3
  354. data/app/assets/icons/outline/users-group.svg +0 -3
  355. data/app/assets/icons/outline/users.svg +0 -3
  356. data/app/assets/icons/outline/video-camera.svg +0 -3
  357. data/app/assets/icons/outline/volume-down.svg +0 -3
  358. data/app/assets/icons/outline/volume-up.svg +0 -3
  359. data/app/assets/icons/outline/wallet.svg +0 -3
  360. data/app/assets/icons/outline/wand-magic-sparkles.svg +0 -3
  361. data/app/assets/icons/outline/window.svg +0 -3
  362. data/app/assets/icons/outline/zoom-in.svg +0 -3
  363. data/app/assets/icons/outline/zoom-out.svg +0 -3
  364. data/app/assets/icons/solid/X.svg +0 -3
  365. data/app/assets/icons/solid/address-book.svg +0 -3
  366. data/app/assets/icons/solid/adjustments-horizontal.svg +0 -3
  367. data/app/assets/icons/solid/adjustments-vertical.svg +0 -3
  368. data/app/assets/icons/solid/annotation.svg +0 -3
  369. data/app/assets/icons/solid/apple.svg +0 -3
  370. data/app/assets/icons/solid/archive-arrow-down.svg +0 -3
  371. data/app/assets/icons/solid/archive.svg +0 -4
  372. data/app/assets/icons/solid/arrow-right-alt.svg +0 -3
  373. data/app/assets/icons/solid/arrow-up-right-from-square.svg +0 -4
  374. data/app/assets/icons/solid/backward-step.svg +0 -3
  375. data/app/assets/icons/solid/badge-check.svg +0 -3
  376. data/app/assets/icons/solid/bell-active-alt.svg +0 -3
  377. data/app/assets/icons/solid/bell-active.svg +0 -5
  378. data/app/assets/icons/solid/bell-ring.svg +0 -3
  379. data/app/assets/icons/solid/bell.svg +0 -3
  380. data/app/assets/icons/solid/blender-phone.svg +0 -3
  381. data/app/assets/icons/solid/book-open.svg +0 -3
  382. data/app/assets/icons/solid/book.svg +0 -3
  383. data/app/assets/icons/solid/bookmark.svg +0 -3
  384. data/app/assets/icons/solid/brain.svg +0 -3
  385. data/app/assets/icons/solid/briefcase.svg +0 -3
  386. data/app/assets/icons/solid/bug.svg +0 -3
  387. data/app/assets/icons/solid/building.svg +0 -3
  388. data/app/assets/icons/solid/bullhorn.svg +0 -3
  389. data/app/assets/icons/solid/calendar-edit.svg +0 -4
  390. data/app/assets/icons/solid/calendar-month.svg +0 -3
  391. data/app/assets/icons/solid/calendar-plus.svg +0 -3
  392. data/app/assets/icons/solid/calendar-week.svg +0 -3
  393. data/app/assets/icons/solid/camera-photo.svg +0 -3
  394. data/app/assets/icons/solid/caption.svg +0 -3
  395. data/app/assets/icons/solid/caret-down.svg +0 -3
  396. data/app/assets/icons/solid/caret-left.svg +0 -3
  397. data/app/assets/icons/solid/caret-right.svg +0 -3
  398. data/app/assets/icons/solid/caret-sort.svg +0 -3
  399. data/app/assets/icons/solid/caret-up.svg +0 -3
  400. data/app/assets/icons/solid/cart-plus-alt.svg +0 -4
  401. data/app/assets/icons/solid/cart-plus.svg +0 -4
  402. data/app/assets/icons/solid/cart.svg +0 -3
  403. data/app/assets/icons/solid/cash.svg +0 -5
  404. data/app/assets/icons/solid/chart-mixed-dollar.svg +0 -3
  405. data/app/assets/icons/solid/chart-pie.svg +0 -4
  406. data/app/assets/icons/solid/check-circle.svg +0 -3
  407. data/app/assets/icons/solid/check-plus-circle.svg +0 -4
  408. data/app/assets/icons/solid/circle-pause.svg +0 -3
  409. data/app/assets/icons/solid/circle-plus.svg +0 -3
  410. data/app/assets/icons/solid/clapperboard-play.svg +0 -3
  411. data/app/assets/icons/solid/clipboard-check.svg +0 -3
  412. data/app/assets/icons/solid/clipboard-list.svg +0 -3
  413. data/app/assets/icons/solid/clipboard.svg +0 -3
  414. data/app/assets/icons/solid/clock.svg +0 -3
  415. data/app/assets/icons/solid/close-circle.svg +0 -3
  416. data/app/assets/icons/solid/cloud-arrow-up.svg +0 -4
  417. data/app/assets/icons/solid/code-branch.svg +0 -3
  418. data/app/assets/icons/solid/code-fork.svg +0 -3
  419. data/app/assets/icons/solid/code-merge.svg +0 -3
  420. data/app/assets/icons/solid/code-pull-request.svg +0 -3
  421. data/app/assets/icons/solid/cog.svg +0 -3
  422. data/app/assets/icons/solid/column.svg +0 -3
  423. data/app/assets/icons/solid/computer-speaker.svg +0 -4
  424. data/app/assets/icons/solid/credit-card.svg +0 -4
  425. data/app/assets/icons/solid/css.svg +0 -3
  426. data/app/assets/icons/solid/database.svg +0 -3
  427. data/app/assets/icons/solid/desktop-pc.svg +0 -3
  428. data/app/assets/icons/solid/discord.svg +0 -3
  429. data/app/assets/icons/solid/download.svg +0 -4
  430. data/app/assets/icons/solid/draw-square.svg +0 -4
  431. data/app/assets/icons/solid/dribbble.svg +0 -3
  432. data/app/assets/icons/solid/dropbox.svg +0 -4
  433. data/app/assets/icons/solid/edit.svg +0 -4
  434. data/app/assets/icons/solid/envelope-open.svg +0 -4
  435. data/app/assets/icons/solid/envelope.svg +0 -4
  436. data/app/assets/icons/solid/exclamation-circle.svg +0 -3
  437. data/app/assets/icons/solid/eye-slash.svg +0 -5
  438. data/app/assets/icons/solid/eye.svg +0 -3
  439. data/app/assets/icons/solid/face-explode.svg +0 -3
  440. data/app/assets/icons/solid/face-grin-stars.svg +0 -3
  441. data/app/assets/icons/solid/face-grin.svg +0 -3
  442. data/app/assets/icons/solid/face-laugh.svg +0 -3
  443. data/app/assets/icons/solid/facebook.svg +0 -3
  444. data/app/assets/icons/solid/file-chart-bar.svg +0 -3
  445. data/app/assets/icons/solid/file-check.svg +0 -4
  446. data/app/assets/icons/solid/file-circle-plus.svg +0 -4
  447. data/app/assets/icons/solid/file-clone.svg +0 -4
  448. data/app/assets/icons/solid/file-code.svg +0 -3
  449. data/app/assets/icons/solid/file-copy-alt.svg +0 -4
  450. data/app/assets/icons/solid/file-copy.svg +0 -4
  451. data/app/assets/icons/solid/file-csv.svg +0 -3
  452. data/app/assets/icons/solid/file-export.svg +0 -3
  453. data/app/assets/icons/solid/file-image.svg +0 -3
  454. data/app/assets/icons/solid/file-import.svg +0 -3
  455. data/app/assets/icons/solid/file-invoice.svg +0 -3
  456. data/app/assets/icons/solid/file-lines.svg +0 -3
  457. data/app/assets/icons/solid/file-music.svg +0 -3
  458. data/app/assets/icons/solid/file-paste.svg +0 -4
  459. data/app/assets/icons/solid/file-pdf.svg +0 -3
  460. data/app/assets/icons/solid/file-pen.svg +0 -4
  461. data/app/assets/icons/solid/file-ppt.svg +0 -3
  462. data/app/assets/icons/solid/file-search.svg +0 -3
  463. data/app/assets/icons/solid/file-shield.svg +0 -4
  464. data/app/assets/icons/solid/file-video.svg +0 -3
  465. data/app/assets/icons/solid/file-word.svg +0 -3
  466. data/app/assets/icons/solid/file-zip.svg +0 -3
  467. data/app/assets/icons/solid/file.svg +0 -3
  468. data/app/assets/icons/solid/filter.svg +0 -3
  469. data/app/assets/icons/solid/fire.svg +0 -3
  470. data/app/assets/icons/solid/flag.svg +0 -3
  471. data/app/assets/icons/solid/flowbite.svg +0 -6
  472. data/app/assets/icons/solid/folder-arrow-right.svg +0 -3
  473. data/app/assets/icons/solid/folder-duplicate.svg +0 -4
  474. data/app/assets/icons/solid/folder-open.svg +0 -3
  475. data/app/assets/icons/solid/folder-plus.svg +0 -3
  476. data/app/assets/icons/solid/folder.svg +0 -3
  477. data/app/assets/icons/solid/forward-step.svg +0 -3
  478. data/app/assets/icons/solid/forward.svg +0 -3
  479. data/app/assets/icons/solid/gift-box.svg +0 -3
  480. data/app/assets/icons/solid/github.svg +0 -3
  481. data/app/assets/icons/solid/globe.svg +0 -3
  482. data/app/assets/icons/solid/google.svg +0 -3
  483. data/app/assets/icons/solid/grid-plus.svg +0 -3
  484. data/app/assets/icons/solid/grid.svg +0 -3
  485. data/app/assets/icons/solid/headphones.svg +0 -3
  486. data/app/assets/icons/solid/heart.svg +0 -3
  487. data/app/assets/icons/solid/home.svg +0 -3
  488. data/app/assets/icons/solid/hourglass.svg +0 -3
  489. data/app/assets/icons/solid/html.svg +0 -3
  490. data/app/assets/icons/solid/image.svg +0 -4
  491. data/app/assets/icons/solid/inbox-full.svg +0 -3
  492. data/app/assets/icons/solid/inbox.svg +0 -3
  493. data/app/assets/icons/solid/indent.svg +0 -3
  494. data/app/assets/icons/solid/info-circle.svg +0 -3
  495. data/app/assets/icons/solid/keyboard.svg +0 -3
  496. data/app/assets/icons/solid/label.svg +0 -3
  497. data/app/assets/icons/solid/landmark.svg +0 -4
  498. data/app/assets/icons/solid/layers.svg +0 -4
  499. data/app/assets/icons/solid/life-saver.svg +0 -3
  500. data/app/assets/icons/solid/lightbulb.svg +0 -3
  501. data/app/assets/icons/solid/linkedin.svg +0 -4
  502. data/app/assets/icons/solid/list-music.svg +0 -3
  503. data/app/assets/icons/solid/lock-open.svg +0 -3
  504. data/app/assets/icons/solid/lock-time.svg +0 -4
  505. data/app/assets/icons/solid/lock.svg +0 -3
  506. data/app/assets/icons/solid/mail-box.svg +0 -3
  507. data/app/assets/icons/solid/map-pin-alt.svg +0 -3
  508. data/app/assets/icons/solid/map-pin.svg +0 -3
  509. data/app/assets/icons/solid/message-caption.svg +0 -3
  510. data/app/assets/icons/solid/message-dots.svg +0 -3
  511. data/app/assets/icons/solid/messages.svg +0 -4
  512. data/app/assets/icons/solid/microphone.svg +0 -4
  513. data/app/assets/icons/solid/mobile-phone.svg +0 -3
  514. data/app/assets/icons/solid/moon.svg +0 -3
  515. data/app/assets/icons/solid/newspaper.svg +0 -3
  516. data/app/assets/icons/solid/npm.svg +0 -3
  517. data/app/assets/icons/solid/outdent.svg +0 -3
  518. data/app/assets/icons/solid/palette.svg +0 -3
  519. data/app/assets/icons/solid/paper-plane.svg +0 -3
  520. data/app/assets/icons/solid/paragraph.svg +0 -3
  521. data/app/assets/icons/solid/pause.svg +0 -3
  522. data/app/assets/icons/solid/pen-nib.svg +0 -3
  523. data/app/assets/icons/solid/pen.svg +0 -3
  524. data/app/assets/icons/solid/phone.svg +0 -3
  525. data/app/assets/icons/solid/play.svg +0 -3
  526. data/app/assets/icons/solid/printer.svg +0 -3
  527. data/app/assets/icons/solid/profile-card.svg +0 -3
  528. data/app/assets/icons/solid/question-circle.svg +0 -3
  529. data/app/assets/icons/solid/quote.svg +0 -3
  530. data/app/assets/icons/solid/react.svg +0 -4
  531. data/app/assets/icons/solid/receipt.svg +0 -3
  532. data/app/assets/icons/solid/rectangle-list.svg +0 -3
  533. data/app/assets/icons/solid/reply-all.svg +0 -3
  534. data/app/assets/icons/solid/reply.svg +0 -3
  535. data/app/assets/icons/solid/rocket.svg +0 -3
  536. data/app/assets/icons/solid/sale-percent.svg +0 -3
  537. data/app/assets/icons/solid/scale-balanced.svg +0 -3
  538. data/app/assets/icons/solid/search.svg +0 -4
  539. data/app/assets/icons/solid/share-all.svg +0 -3
  540. data/app/assets/icons/solid/share-nodes.svg +0 -3
  541. data/app/assets/icons/solid/shield-check.svg +0 -3
  542. data/app/assets/icons/solid/shield.svg +0 -3
  543. data/app/assets/icons/solid/shopping-bag.svg +0 -3
  544. data/app/assets/icons/solid/stackoverflow.svg +0 -4
  545. data/app/assets/icons/solid/star-half-stroke.svg +0 -3
  546. data/app/assets/icons/solid/star-half.svg +0 -3
  547. data/app/assets/icons/solid/star.svg +0 -3
  548. data/app/assets/icons/solid/store.svg +0 -3
  549. data/app/assets/icons/solid/sun.svg +0 -3
  550. data/app/assets/icons/solid/swatchbook.svg +0 -3
  551. data/app/assets/icons/solid/table-column.svg +0 -3
  552. data/app/assets/icons/solid/table-row.svg +0 -3
  553. data/app/assets/icons/solid/tablet.svg +0 -3
  554. data/app/assets/icons/solid/tag.svg +0 -3
  555. data/app/assets/icons/solid/tailwind.svg +0 -3
  556. data/app/assets/icons/solid/terminal.svg +0 -3
  557. data/app/assets/icons/solid/thumbs-down.svg +0 -3
  558. data/app/assets/icons/solid/thumbs-up.svg +0 -3
  559. data/app/assets/icons/solid/ticket.svg +0 -3
  560. data/app/assets/icons/solid/trash-bin.svg +0 -3
  561. data/app/assets/icons/solid/truck.svg +0 -3
  562. data/app/assets/icons/solid/twitter.svg +0 -3
  563. data/app/assets/icons/solid/upload.svg +0 -3
  564. data/app/assets/icons/solid/user-add.svg +0 -3
  565. data/app/assets/icons/solid/user-circle.svg +0 -3
  566. data/app/assets/icons/solid/user-edit.svg +0 -3
  567. data/app/assets/icons/solid/user-headset.svg +0 -3
  568. data/app/assets/icons/solid/user-remove.svg +0 -3
  569. data/app/assets/icons/solid/user-settings.svg +0 -3
  570. data/app/assets/icons/solid/user.svg +0 -3
  571. data/app/assets/icons/solid/users-group.svg +0 -3
  572. data/app/assets/icons/solid/users.svg +0 -3
  573. data/app/assets/icons/solid/video-camera.svg +0 -3
  574. data/app/assets/icons/solid/volume-down.svg +0 -4
  575. data/app/assets/icons/solid/volume-up.svg +0 -5
  576. data/app/assets/icons/solid/vue.svg +0 -3
  577. data/app/assets/icons/solid/wallet.svg +0 -4
  578. data/app/assets/icons/solid/wand-magic-sparkles.svg +0 -4
  579. data/app/assets/icons/solid/window-restore.svg +0 -4
  580. data/app/assets/icons/solid/window.svg +0 -3
  581. data/app/assets/icons/solid/youtube.svg +0 -3
  582. data/app/assets/icons/solid/zoom-in.svg +0 -3
  583. data/app/assets/icons/solid/zoom-out.svg +0 -3
  584. data/app/views/components/action_button/action_button_component.html.erb +0 -7
  585. data/app/views/components/action_button/action_button_component.rb +0 -15
  586. data/app/views/components/attributes.rb +0 -184
  587. data/app/views/components/base.rb +0 -29
  588. data/app/views/components/block/block_component.html.erb +0 -3
  589. data/app/views/components/block/block_component.rb +0 -44
  590. data/app/views/components/breadcrumbs/breadcrumbs_component.html.erb +0 -96
  591. data/app/views/components/breadcrumbs/breadcrumbs_component.rb +0 -9
  592. data/app/views/components/button/button_component.html.erb +0 -11
  593. data/app/views/components/button/button_component.rb +0 -128
  594. data/app/views/components/dyna_frame_content/dyna_frame_content_component.html.erb +0 -8
  595. data/app/views/components/dyna_frame_content/dyna_frame_content_component.rb +0 -6
  596. data/app/views/components/dyna_frame_host/dyna_frame_host_component.html.erb +0 -3
  597. data/app/views/components/dyna_frame_host/dyna_frame_host_component.rb +0 -18
  598. data/app/views/components/empty_card/empty_card_component.html.erb +0 -6
  599. data/app/views/components/empty_card/empty_card_component.rb +0 -7
  600. data/app/views/components/form/form_builder.rb +0 -75
  601. data/app/views/components/form/form_component.html.erb +0 -73
  602. data/app/views/components/form/form_component.rb +0 -23
  603. data/app/views/components/has_many_panel/has_many_panel_component.html.erb +0 -25
  604. data/app/views/components/has_many_panel/has_many_panel_component.rb +0 -16
  605. data/app/views/components/header/header_component.html.erb +0 -1
  606. data/app/views/components/header/header_component.rb +0 -7
  607. data/app/views/components/interactive_action_form/interactive_action_form_component.html.erb +0 -39
  608. data/app/views/components/interactive_action_form/interactive_action_form_component.rb +0 -8
  609. data/app/views/components/nav_grid_menu/nav_grid_menu_component.html.erb +0 -24
  610. data/app/views/components/nav_grid_menu/nav_grid_menu_component.rb +0 -23
  611. data/app/views/components/nav_grid_menu_item/nav_grid_menu_item_component.html.erb +0 -4
  612. data/app/views/components/nav_grid_menu_item/nav_grid_menu_item_component.rb +0 -20
  613. data/app/views/components/nav_user/nav_user_component.html.erb +0 -50
  614. data/app/views/components/nav_user/nav_user_component.rb +0 -32
  615. data/app/views/components/nav_user_link/nav_user_link_component.html.erb +0 -7
  616. data/app/views/components/nav_user_link/nav_user_link_component.rb +0 -23
  617. data/app/views/components/nav_user_section/nav_user_section_component.html.erb +0 -7
  618. data/app/views/components/nav_user_section/nav_user_section_component.rb +0 -18
  619. data/app/views/components/nested_resource_form_fields/nested_resource_form_fields_component.html.erb +0 -64
  620. data/app/views/components/nested_resource_form_fields/nested_resource_form_fields_component.rb +0 -29
  621. data/app/views/components/pagination/pagination_component.html.erb +0 -6
  622. data/app/views/components/pagination/pagination_component.rb +0 -94
  623. data/app/views/components/panel/panel_component.html.erb +0 -17
  624. data/app/views/components/panel/panel_component.rb +0 -17
  625. data/app/views/components/resource_header/resource_header_component.html.erb +0 -83
  626. data/app/views/components/resource_header/resource_header_component.rb +0 -30
  627. data/app/views/components/resource_layout/resource_layout_component.html.erb +0 -53
  628. data/app/views/components/resource_layout/resource_layout_component.rb +0 -41
  629. data/app/views/components/sidebar/sidebar_component.html.erb +0 -69
  630. data/app/views/components/sidebar/sidebar_component.rb +0 -23
  631. data/app/views/components/sidebar_menu/sidebar_menu_component.html.erb +0 -5
  632. data/app/views/components/sidebar_menu/sidebar_menu_component.rb +0 -17
  633. data/app/views/components/sidebar_menu_item/sidebar_menu_item_component.html.erb +0 -64
  634. data/app/views/components/sidebar_menu_item/sidebar_menu_item_component.rb +0 -52
  635. data/app/views/components/skeleton/table/table_component.html.erb +0 -18
  636. data/app/views/components/skeleton/table/table_component.rb +0 -6
  637. data/app/views/components/table/table_component.html.erb +0 -43
  638. data/app/views/components/table/table_component.rb +0 -159
  639. data/app/views/components/table_search_input/table_search_input_component.html.erb +0 -48
  640. data/app/views/components/table_search_input/table_search_input_component.rb +0 -15
  641. data/app/views/components/table_toolbar/table_toolbar_component.html.erb +0 -7
  642. data/app/views/components/table_toolbar/table_toolbar_component.rb +0 -17
  643. data/app/views/components/toolbar/toolbar_component.html.erb +0 -67
  644. data/app/views/components/toolbar/toolbar_component.rb +0 -26
  645. data/app/views/layouts/resource.html copy.erb +0 -49
  646. data/app/views/plutonium/_resource_header.html copy.erb +0 -287
  647. data/lib/generators/pu/gen/component/component_generator.rb +0 -99
  648. data/lib/generators/pu/gen/component/templates/component.html.erb.tt +0 -3
  649. data/lib/generators/pu/gen/component/templates/component.rb.tt +0 -15
  650. data/lib/generators/pu/gen/component/templates/controller.js.tt +0 -8
  651. data/lib/plutonium/builders/menus/sidebar_menu.rb.bk +0 -26
  652. data/lib/plutonium/builders/menus/sidebar_menu_item.rb.bk +0 -28
  653. data/lib/plutonium/component_registry.rb +0 -19
  654. data/lib/plutonium/core/action.rb +0 -49
  655. data/lib/plutonium/core/actions/basic_action.rb +0 -16
  656. data/lib/plutonium/core/actions/collection.rb +0 -37
  657. data/lib/plutonium/core/actions/destroy_action.rb +0 -23
  658. data/lib/plutonium/core/actions/edit_action.rb +0 -21
  659. data/lib/plutonium/core/actions/interactive_action.rb +0 -64
  660. data/lib/plutonium/core/actions/new_action.rb +0 -20
  661. data/lib/plutonium/core/actions/show_action.rb +0 -19
  662. data/lib/plutonium/core/associations/renderers/base.rb +0 -77
  663. data/lib/plutonium/core/associations/renderers/factory.rb +0 -36
  664. data/lib/plutonium/core/associations/renderers/has_many_renderer.rb +0 -18
  665. data/lib/plutonium/core/autodiscovery/association_renderer_discoverer.rb +0 -31
  666. data/lib/plutonium/core/autodiscovery/discoverer.rb +0 -15
  667. data/lib/plutonium/core/autodiscovery/input_discoverer.rb +0 -31
  668. data/lib/plutonium/core/autodiscovery/renderer_discoverer.rb +0 -31
  669. data/lib/plutonium/core/definers/action_definer.rb +0 -25
  670. data/lib/plutonium/core/definers/association_renderer_definer.rb +0 -33
  671. data/lib/plutonium/core/definers/field_definer.rb +0 -19
  672. data/lib/plutonium/core/definers/field_input_definer.rb +0 -77
  673. data/lib/plutonium/core/definers/field_renderer_definer.rb +0 -37
  674. data/lib/plutonium/core/fields/inputs/attachment_input.rb +0 -24
  675. data/lib/plutonium/core/fields/inputs/base.rb +0 -110
  676. data/lib/plutonium/core/fields/inputs/belongs_to_association_input.rb +0 -15
  677. data/lib/plutonium/core/fields/inputs/checkbox_input.rb +0 -15
  678. data/lib/plutonium/core/fields/inputs/date_time_input.rb +0 -15
  679. data/lib/plutonium/core/fields/inputs/factory.rb +0 -50
  680. data/lib/plutonium/core/fields/inputs/has_many_association_input.rb +0 -15
  681. data/lib/plutonium/core/fields/inputs/nested_input.rb +0 -72
  682. data/lib/plutonium/core/fields/inputs/noop_input.rb +0 -16
  683. data/lib/plutonium/core/fields/inputs/phone_input.rb +0 -22
  684. data/lib/plutonium/core/fields/inputs/polymorphic_belongs_to_association_input.rb +0 -48
  685. data/lib/plutonium/core/fields/inputs/simple_form_association_input.rb +0 -26
  686. data/lib/plutonium/core/fields/inputs/simple_form_input.rb +0 -13
  687. data/lib/plutonium/core/fields/renderers/association_renderer.rb +0 -28
  688. data/lib/plutonium/core/fields/renderers/attachment_renderer.rb +0 -21
  689. data/lib/plutonium/core/fields/renderers/base.rb +0 -83
  690. data/lib/plutonium/core/fields/renderers/basic_renderer.rb +0 -13
  691. data/lib/plutonium/core/fields/renderers/factory.rb +0 -37
  692. data/lib/plutonium/core/renderable.rb +0 -20
  693. data/lib/plutonium/core/ui/collection.rb +0 -18
  694. data/lib/plutonium/core/ui/detail.rb +0 -15
  695. data/lib/plutonium/core/ui/form.rb +0 -12
  696. data/lib/plutonium/helpers/action_buttons_helper.rb +0 -32
  697. data/lib/plutonium/helpers/component_helper.rb +0 -14
  698. data/lib/plutonium/helpers/form_helper.rb +0 -50
  699. data/lib/plutonium/icons.rb +0 -32
  700. data/lib/plutonium/preserved__/field.rb.bk +0 -65
  701. data/lib/plutonium/preserved__/input.rb.bk +0 -93
  702. data/lib/plutonium/ui/table/components/pagy_page_info.rb +0 -70
  703. data/src/js/controllers/has_many_panel_controller.js +0 -8
  704. data/src/js/controllers/interactive_action_form_controller.js +0 -13
  705. data/src/js/controllers/nav_grid_menu_controller.js +0 -8
  706. data/src/js/controllers/nav_grid_menu_item_controller.js +0 -8
  707. data/src/js/controllers/nav_user_controller.js +0 -8
  708. data/src/js/controllers/nav_user_link_controller.js +0 -8
  709. data/src/js/controllers/nav_user_section_controller.js +0 -8
  710. data/src/js/controllers/resource_layout_controller.js +0 -8
  711. data/src/js/controllers/sidebar_controller.js +0 -8
  712. data/src/js/controllers/sidebar_menu_controller.js +0 -8
  713. data/src/js/controllers/sidebar_menu_item_controller.js +0 -8
  714. data/src/js/controllers/table_controller.js +0 -8
  715. data/src/js/controllers/table_search_input_controller.js +0 -8
  716. data/src/js/controllers/table_toolbar_controller.js +0 -8
  717. data/src/js/controllers/toolbar_controller.js +0 -8
@@ -0,0 +1,93 @@
1
+ module Plutonium
2
+ module UI
3
+ # A responsive grid-based navigation menu component that displays a collection of Item
4
+ # components in a dropdown format. The menu includes a trigger button with an icon and a dropdown
5
+ # panel containing a grid of navigation items.
6
+ #
7
+ # @example Basic usage
8
+ # render Plutonium::UI:NavGridMenu.new(label: "Resources", icon: Phlex::TablerIcons::Grid) do |menu|
9
+ # menu.with_item(name: "Dashboard", icon: Phlex::TablerIcons::Dashboard, href: "/dashboard")
10
+ # menu.with_item(name: "Settings", icon: Phlex::TablerIcons::Settings, href: "/settings")
11
+ # end
12
+ #
13
+ class NavGridMenu < Plutonium::UI::Component::Base
14
+ include Phlex::Slotable
15
+
16
+ # A grid-based navigation menu item component that represents a single clickable item
17
+ # within a NavGridMenu. Each item consists of an icon and label that links to a specific URL.
18
+ #
19
+ # @example Basic usage
20
+ # render Plutonium::UI::NavGridMenu::Item.new(
21
+ # name: "Dashboard",
22
+ # icon: "chart",
23
+ # href: "/dashboard"
24
+ # )
25
+ #
26
+ class Item < Plutonium::UI::Component::Base
27
+ def initialize(name:, icon:, href:)
28
+ @name = name
29
+ @icon = icon
30
+ @href = href
31
+ end
32
+
33
+ def view_template
34
+ a(
35
+ class: "block p-4 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-600 group",
36
+ href: @href
37
+ ) do
38
+ render @icon.new(
39
+ class: "text-gray-400 group-hover:text-gray-500 dark:text-gray-200 dark:group-hover:text-gray-400 w-8 h-8 mx-auto"
40
+ )
41
+ div(class: "text-sm text-gray-900 dark:text-white text-center") { @name }
42
+ end
43
+ end
44
+ end
45
+
46
+ # Defines the menu items slot collection
47
+ # @!method item
48
+ # Renders a Item component
49
+ # @yield The block containing the menu item content
50
+ slot :item, Item, collection: true
51
+
52
+ def initialize(label:, icon:)
53
+ @label = label
54
+ @icon = icon
55
+ end
56
+
57
+ def view_template
58
+ div(data: {controller: "resource-drop-down"}) do
59
+ render_trigger_button
60
+ render_dropdown_menu
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def render_trigger_button
67
+ button(
68
+ type: "button",
69
+ data: {resource_drop_down_target: "trigger"},
70
+ class: "p-2 text-gray-500 rounded-lg hover:text-gray-900 hover:bg-gray-100 dark:text-gray-200 dark:hover:text-white dark:hover:bg-gray-700 focus:ring-4 focus:ring-gray-300 dark:focus:ring-gray-600"
71
+ ) do
72
+ span(class: "sr-only") { "View #{@label}" }
73
+ render @icon.new(class: "w-6 h-6")
74
+ end
75
+ end
76
+
77
+ def render_dropdown_menu
78
+ div(
79
+ class: "hidden overflow-hidden z-50 my-4 max-w-sm text-base list-none bg-white divide-y divide-gray-100 shadow-lg dark:bg-gray-700 dark:divide-gray-600 rounded-xl",
80
+ data: {resource_drop_down_target: "menu"}
81
+ ) do
82
+ div(
83
+ class: "block py-2 px-4 text-base font-medium text-center text-gray-700 bg-gray-50 dark:bg-gray-600 dark:text-gray-300"
84
+ ) { @label }
85
+
86
+ div(class: "grid grid-cols-3 gap-4 p-4") do
87
+ item_slots.each { |item| render item }
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,121 @@
1
+ module Plutonium
2
+ module UI
3
+ class NavUser < Plutonium::UI::Component::Base
4
+ include Phlex::Slotable
5
+
6
+ class SectionLink < Plutonium::UI::Component::Base
7
+ include Phlex::Slotable
8
+
9
+ slot :leading
10
+ slot :trailing
11
+
12
+ def initialize(label:, href:, **attributes)
13
+ @label = label
14
+ @href = href
15
+ @attributes = attributes
16
+ end
17
+
18
+ def view_template
19
+ a(
20
+ class: tokens(
21
+ "flex justify-between items-center py-2 px-4 text-sm hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white",
22
+ @attributes.delete(:class)
23
+ ),
24
+ href: @href,
25
+ **@attributes
26
+ ) do
27
+ span(class: "flex items-center") do
28
+ render leading_slot if leading_slot
29
+ plain @label
30
+ end
31
+ render trailing_slot if trailing_slot?
32
+ end
33
+ end
34
+ end
35
+
36
+ class Section < Plutonium::UI::Component::Base
37
+ include Phlex::Slotable
38
+
39
+ slot :link, SectionLink, collection: true
40
+
41
+ def view_template
42
+ ul(
43
+ class: "text-gray-700 dark:text-gray-300",
44
+ aria: {labelledby: "user-nav-dropdown-toggle"}
45
+ ) do
46
+ link_slots.each do |link|
47
+ li { render link }
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ slot :section, Section, collection: true
54
+
55
+ def initialize(email:, name: nil, avatar_url: nil)
56
+ @email = email
57
+ @name = name
58
+ @avatar_url = avatar_url
59
+ end
60
+
61
+ def view_template
62
+ div(data: {controller: "resource-drop-down"}) do
63
+ render_trigger_button
64
+ render_dropdown_menu
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def render_trigger_button
71
+ if @avatar_url.present?
72
+ render_avatar_button
73
+ else
74
+ render_default_button
75
+ end
76
+ end
77
+
78
+ def render_avatar_button
79
+ button(
80
+ type: "button",
81
+ class: "flex mx-3 text-sm bg-gray-800 rounded-full md:mr-0 focus:ring-4 focus:ring-gray-300 dark:focus:ring-gray-600",
82
+ aria: {expanded: "false"},
83
+ id: "user-nav-dropdown-toggle",
84
+ data: {resource_drop_down_target: "trigger"}
85
+ ) do
86
+ span(class: "sr-only") { "Open user menu" }
87
+ img(class: "w-8 h-8 rounded-full", src: @avatar_url, alt: "avatar")
88
+ end
89
+ end
90
+
91
+ def render_default_button
92
+ button(
93
+ type: "button",
94
+ class: "flex mx-3 text-sm border border-gray-600 text-gray-500 hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 dark:hover:text-white dark:hover:bg-gray-700 rounded-full md:mr-0 focus:ring-4 focus:ring-gray-300 dark:focus:ring-gray-600",
95
+ aria: {expanded: "false"},
96
+ id: "user-nav-dropdown-toggle",
97
+ data: {resource_drop_down_target: "trigger"}
98
+ ) do
99
+ span(class: "sr-only") { "Open user menu" }
100
+ render Phlex::TablerIcons::User.new(class: "w-6 h-6")
101
+ end
102
+ end
103
+
104
+ def render_dropdown_menu
105
+ div(
106
+ class: "hidden z-50 my-4 w-56 text-base list-none bg-white divide-y divide-gray-100 shadow dark:bg-gray-700 dark:divide-gray-600 rounded-xl",
107
+ data: {resource_drop_down_target: "menu"}
108
+ ) do
109
+ div(class: "py-3 px-4") do
110
+ if @name.present?
111
+ span(class: "block text-sm font-semibold text-gray-900 dark:text-white") { @name }
112
+ end
113
+ span(class: "block text-sm text-gray-900 truncate dark:text-white") { @email }
114
+ end
115
+
116
+ section_slots.each { |section| render section }
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
@@ -34,7 +34,7 @@ module Plutonium
34
34
 
35
35
  def render_toolbar
36
36
  div(class: %(flex justify-between items-center mb-4)) do
37
- if @title.present?
37
+ if @title
38
38
  h5(class: %(text-2xl font-bold tracking-tight text-gray-900 dark:text-white)) do
39
39
  @title
40
40
  end
@@ -52,7 +52,7 @@ module Plutonium
52
52
  end
53
53
 
54
54
  def render_toolbar?
55
- @title || @items.present?
55
+ @title || @items
56
56
  end
57
57
 
58
58
  def render_content?
@@ -25,7 +25,7 @@ module Plutonium
25
25
  item_span: "flex items-center p-2 w-full text-base font-normal text-gray-900 rounded-lg transition duration-75 group hover:bg-gray-100 dark:text-white dark:hover:bg-gray-700",
26
26
 
27
27
  # Label and content styles
28
- item_label: "flex-1 ml-3 text-left whitespace-nowrap",
28
+ item_label: ->(depth) { "flex-1 #{(depth > 0) ? "ml-9" : "ml-3"} text-left whitespace-nowrap" },
29
29
 
30
30
  # Badge styles
31
31
  leading_badge: "inline-flex justify-center items-center w-5 h-5 text-xs font-semibold rounded-full text-primary-800 bg-primary-100 dark:bg-primary-200 dark:text-primary-800",
@@ -50,9 +50,22 @@ module Plutonium
50
50
 
51
51
  protected
52
52
 
53
+ def render_items(items, depth = 0)
54
+ return if depth >= @max_depth || items.empty?
55
+
56
+ if depth.zero?
57
+ ul(class: themed(:items_container, depth)) do
58
+ items.each { |item| render_item_wrapper(item, depth) }
59
+ end
60
+ else
61
+ ul(class: themed(:sub_items_container, depth), data: {"resource-collapse-target": "menu"}) do
62
+ items.each { |item| render_item_wrapper(item, depth) }
63
+ end
64
+ end
65
+ end
66
+
53
67
  # def render_items(items, depth = 0)
54
68
  # return if depth >= @max_depth
55
- # return if items.empty?
56
69
 
57
70
  # if depth.zero?
58
71
  # ul(class: themed(:items_container, depth)) do
@@ -63,9 +76,9 @@ module Plutonium
63
76
  # else
64
77
  # # Use collapsible rendering for nested levels
65
78
  # ul(
66
- # id: generate_menu_id(items.first&.options&.dig(:parent)),
79
+ # id: generate_menu_id(:root),
67
80
  # class: themed(:sub_items_container, depth),
68
- # data: { "resource-collapse-target": "menu" }
81
+ # data: {"resource-collapse-target": "menu"}
69
82
  # ) do
70
83
  # items.each do |item|
71
84
  # render_item_wrapper(item, depth)
@@ -83,10 +96,6 @@ module Plutonium
83
96
  if nested?(item, depth)
84
97
  wrapper_attrs[:data][:controller] = "resource-collapse"
85
98
  wrapper_attrs[:data]["resource-collapse-active-class"] = themed(:collapse_icon_expanded)
86
- wrapper_attrs[:id] = generate_item_id(item)
87
-
88
- # # Store parent reference for nested items
89
- # item.items.each { |child| child.options[:parent] = item }
90
99
  end
91
100
 
92
101
  li(**wrapper_attrs) do
@@ -103,28 +112,15 @@ module Plutonium
103
112
  end
104
113
  end
105
114
 
106
- # def render_item_link(item, depth)
107
- # if item.url
108
- # a(href: item.url, class: themed(:item_link, depth)) do
109
- # render_item_interior(item, depth)
110
- # end
111
- # else
112
- # span(class: themed(:item_span, depth)) do
113
- # render_item_interior(item, depth)
114
- # end
115
- # end
116
- # end
117
-
118
115
  def render_collapsible_button(item, depth)
119
116
  button(
120
117
  type: "button",
121
118
  class: themed(:item_span, depth),
122
119
  data: {
123
120
  "resource-collapse-target": "trigger",
124
- "action": "resource-collapse#toggle"
121
+ action: "resource-collapse#toggle"
125
122
  },
126
123
  aria: {
127
- controls: generate_menu_id(item),
128
124
  expanded: "false"
129
125
  }
130
126
  ) do
@@ -139,7 +135,7 @@ module Plutonium
139
135
  fill: "currentColor",
140
136
  viewBox: "0 0 20 20",
141
137
  xmlns: "http://www.w3.org/2000/svg",
142
- aria: { hidden: true }
138
+ aria: {inert: true}
143
139
  ) do |s|
144
140
  s.path(
145
141
  fill_rule: "evenodd",
@@ -148,22 +144,6 @@ module Plutonium
148
144
  )
149
145
  end
150
146
  end
151
-
152
- private
153
-
154
- def generate_item_id(item)
155
- "sidebar-menu-item-#{item.label.to_s.parameterize}"
156
- end
157
-
158
- def generate_menu_id(item)
159
- # return nil unless item
160
- "#{generate_item_id(item)}-menu"
161
- end
162
-
163
- # # Override to disable active state for turbo-permanent compatibility
164
- # def active_class(item, depth = 0)
165
- # nil
166
- # end
167
147
  end
168
148
  end
169
149
  end
@@ -0,0 +1,73 @@
1
+ module Plutonium
2
+ module UI
3
+ class TabList < Plutonium::UI::Component::Base
4
+ class TabDefinition
5
+ end
6
+
7
+ def initialize(...)
8
+ super
9
+
10
+ @tabs = []
11
+ end
12
+
13
+ def with_tab(identifier:, title:, &block)
14
+ @tabs << {identifier:, title:, block:}
15
+ end
16
+
17
+ def render?
18
+ @tabs.present?
19
+ end
20
+
21
+ def view_template
22
+ div(
23
+ data_controller: "resource-tab-list",
24
+ data_resource_tab_list_active_classes_value: "focus:outline-none text-primary-600 hover:text-primary-600 dark:text-primary-500 dark:hover:text-primary-500 border-primary-600 dark:border-primary-500",
25
+ data_resource_tab_list_in_active_classes_value: "dark:border-transparent text-gray-500 hover:text-gray-600 dark:text-gray-400 border-gray-100 hover:border-gray-300 dark:border-gray-700 dark:hover:text-gray-300"
26
+ ) do
27
+ div(class: "mb-4 border-b border-gray-200 dark:border-gray-700") do
28
+ ul(
29
+ class: "flex flex-wrap -mb-px text-sm font-medium text-center space-x-2",
30
+ role: "tablist"
31
+ ) do
32
+ @tabs.each do |tab|
33
+ li(role: "presentation") do
34
+ button(
35
+ class: "inline-block p-4 border-b-2 rounded-t-lg",
36
+ id: "#{tab[:identifier]}-tab",
37
+ type: "button",
38
+ role: "tab",
39
+ aria_controls: "#{tab[:identifier]}-tabpanel",
40
+ aria_selected: "false",
41
+ data_resource_tab_list_target: "btn",
42
+ data_target: "#{tab[:identifier]}-tabpanel",
43
+ data_action: "click->resource-tab-list#select"
44
+ ) do
45
+ phlexi_render tab[:title] do |val|
46
+ plain val
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ div do
55
+ @tabs.each do |tab|
56
+ div(
57
+ hidden: true,
58
+ id: "#{tab[:identifier]}-tabpanel",
59
+ role: "tabpanel",
60
+ aria_labelledby: "#{tab[:identifier]}-tab",
61
+ data_resource_tab_list_target: "tab"
62
+ ) do
63
+ phlexi_render tab[:block] do |val|
64
+ raise NotImplementedError, "this should NEVER be triggered"
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -6,7 +6,13 @@ module Plutonium
6
6
  class Base < Phlexi::Table::Base
7
7
  include Plutonium::UI::Component::Behaviour
8
8
 
9
- class Display < Plutonium::UI::Display::Base; end
9
+ class Display < Plutonium::UI::Display::Base
10
+ class Builder < Builder
11
+ def attachment_tag(**, &)
12
+ create_component(Plutonium::UI::Table::Components::Attachment, :attachment, **, &)
13
+ end
14
+ end
15
+ end
10
16
  end
11
17
  end
12
18
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Plutonium
4
+ module UI
5
+ module Table
6
+ module Components
7
+ class Attachment < Phlexi::Display::Components::Base
8
+ include Phlexi::Display::Components::Concerns::DisplaysValue
9
+ include Plutonium::UI::Component::Methods
10
+
11
+ def render_value(value)
12
+ attachment = value
13
+ return unless attachment&.url.present?
14
+
15
+ render_thumbnail(attachment)
16
+ end
17
+
18
+ private
19
+
20
+ def render_thumbnail(attachment)
21
+ div(
22
+ class: "w-24 h-24 bg-white border border-gray-200 rounded-lg shadow hover:bg-gray-100 dark:bg-gray-800 dark:border-gray-700 dark:hover:bg-gray-700 transition-all duration-300",
23
+ data: {
24
+ controller: "attachment-preview",
25
+ attachment_preview_mime_type_value: attachment.content_type,
26
+ attachment_preview_thumbnail_url_value: attachment_thumbnail_url(attachment),
27
+ attachment_preview_target: "thumbnail"
28
+ },
29
+ title: attachment.filename
30
+ ) do
31
+ a(
32
+ href: attachment.url,
33
+ class: "block aspect-square overflow-hidden rounded-lg",
34
+ target: :blank,
35
+ data: {
36
+ attachment_preview_target: "thumbnailLink"
37
+ }
38
+ ) do
39
+ thumbnail_url = attachment_thumbnail_url(attachment)
40
+ if thumbnail_url
41
+ img(
42
+ src: thumbnail_url,
43
+ class: "w-full h-full object-cover"
44
+ )
45
+ else
46
+ div(
47
+ class: "w-full h-full flex items-center justify-center text-gray-500 dark:text-gray-400 font-mono"
48
+ ) do
49
+ ".#{attachment_extension(attachment)}"
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ def attachment_thumbnail_url(attachment)
57
+ attachment.url if attachment.representable?
58
+ end
59
+
60
+ def attachment_extension(attachment)
61
+ attachment.try(:extension) || File.extname(attachment.filename.to_s)
62
+ end
63
+
64
+ def normalize_value(value)
65
+ value
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -39,9 +39,17 @@ module Plutonium
39
39
  temp_attributes.delete("onchange")
40
40
  Phlex::HTML.const_set(:EVENT_ATTRIBUTES, temp_attributes)
41
41
 
42
- div(class: "flex items-center space-x-2 mt-2 md:mt-0") do
43
- label(for: "perPage", class: "mr-2") { "Per page" }
44
- select(id: "perPage", name: "items", class: select_classes, onchange: "window.location.href=this.value") do
42
+ div(
43
+ class: "flex items-center space-x-2 mt-2 md:mt-0",
44
+ data_controller: "select-navigator"
45
+ ) do
46
+ id = "perPage#{SecureRandom.hex}"
47
+ label(for: id, class: "mr-2") { "Per page" }
48
+ select(
49
+ id: id, name: "items", class: select_classes,
50
+ data_action: "change->select-navigator#navigate",
51
+ data_select_navigator_target: "select"
52
+ ) do
45
53
  @per_page_options.each do |option|
46
54
  option(value: page_url(option), selected: option == @pagy.limit) { option.to_s }
47
55
  end
@@ -53,7 +61,7 @@ module Plutonium
53
61
  end
54
62
 
55
63
  def select_classes
56
- "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
64
+ "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500 min-w-[5em]"
57
65
  end
58
66
 
59
67
  def page_url(limit)
@@ -30,7 +30,7 @@ module Plutonium
30
30
  render Phlex::TablerIcons::ChevronLeft.new
31
31
  }
32
32
  else
33
- a(href: "#", class: disabled_link_classes(true), aria_disabled: "true") {
33
+ button(class: disabled_link_classes(true), aria_disabled: "true") {
34
34
  render Phlex::TablerIcons::ChevronLeft.new
35
35
  }
36
36
  end
@@ -44,7 +44,7 @@ module Plutonium
44
44
  render Phlex::TablerIcons::ChevronRight.new
45
45
  }
46
46
  else
47
- a(href: "#", class: disabled_link_classes(false, true), aria_disabled: "true") {
47
+ button(class: disabled_link_classes(false, true), aria_disabled: "true") {
48
48
  render Phlex::TablerIcons::ChevronRight.new
49
49
  }
50
50
  end
@@ -71,11 +71,11 @@ module Plutonium
71
71
  end
72
72
 
73
73
  def current_page_link(page)
74
- a(href: "#", class: current_link_classes, aria_current: "page") { page.to_s }
74
+ button(class: current_link_classes, aria_current: "page") { page.to_s }
75
75
  end
76
76
 
77
77
  def gap_link
78
- a(href: "#", class: link_classes, aria_disabled: "true") { "..." }
78
+ button(class: link_classes, aria_disabled: "true") { "..." }
79
79
  end
80
80
 
81
81
  def link_classes(first = false, last = false)
@@ -86,7 +86,7 @@ module Plutonium
86
86
  end
87
87
 
88
88
  def current_link_classes
89
- "flex items-center justify-center px-3 h-8 text-blue-600 border border-gray-300 bg-blue-50 hover:bg-blue-100 hover:text-blue-700 dark:border-gray-700 dark:bg-gray-700 dark:text-white"
89
+ "flex items-center justify-center px-3 h-8 text-blue-600 border border-gray-300 bg-blue-50 hover:bg-blue-100 hover:text-blue-700 dark:border-gray-700 dark:bg-gray-700 dark:text-white cursor-not-allowed"
90
90
  end
91
91
 
92
92
  def disabled_link_classes(first = false, last = false)
@@ -13,7 +13,8 @@ module Plutonium
13
13
  color_indicator: "w-10 h-10 rounded-full mr-2",
14
14
  email: "flex items-center text-primary-600 dark:text-primary-500 whitespace-nowrap",
15
15
  phone: "flex items-center text-primary-600 dark:text-primary-500 whitespace-nowrap",
16
- json: " whitespace-pre font-mono shadow-inner p-4"
16
+ json: " whitespace-pre font-mono shadow-inner p-4",
17
+ attachment_value_wrapper: "flex flex-wrap gap-1"
17
18
  })
18
19
  end
19
20
  end
@@ -44,32 +44,31 @@ module Plutonium
44
44
  def render_table
45
45
  render Plutonium::UI::Table::Base.new(collection) do |table|
46
46
  @resource_fields.each do |name|
47
- # column :name, as: :string
47
+ # field :name, as: :string
48
48
  # column :description, class: "text-red-700"
49
49
  # column :age, align: :end
50
50
  # column :dob do |proxy|
51
51
  # proxy.field(:dob).date_tag
52
52
  # end
53
53
 
54
+ field_options = resource_definition.defined_fields[name] ? resource_definition.defined_fields[name][:options].dup : {}
55
+
54
56
  column_definition = resource_definition.defined_columns[name] || {}
55
- column_display_options = column_definition[:options] || {}
57
+ column_options = column_definition[:options] || {}
56
58
 
57
- display_tag = column_display_options[:as]
58
- display_tag_options = column_display_options.except(:as, :align)
59
- display_tag_block = column_definition[:block] || ->(wrapped_object, key) {
59
+ tag = column_options[:as] || field_options[:as]
60
+ tag_attributes = column_options.except(:wrapper, :as, :align)
61
+ tag_block = column_definition[:block] || ->(wrapped_object, key) {
60
62
  f = wrapped_object.field(key)
61
- display_tag ||= f.inferred_field_component
62
- f.send(:"#{display_tag}_tag", **display_tag_options)
63
+ tag ||= f.inferred_field_component
64
+ f.send(:"#{tag}_tag", **tag_attributes)
63
65
  }
64
66
 
65
- # align_field_to = column_display_options.slice(:align)
66
- field_options = resource_definition.defined_fields[name] ? resource_definition.defined_fields[name][:options].dup : {}
67
- field_options = field_options.merge(**column_display_options.slice(:align))
68
- # field_options[:align] = align_field_to if align_field_to
67
+ field_options = field_options.merge(**column_options.slice(:align))
69
68
  table.column name,
70
69
  **field_options,
71
70
  sort_params: current_query_object.sort_params_for(name),
72
- &display_tag_block
71
+ &tag_block
73
72
  end
74
73
 
75
74
  table.actions do |wrapped_object|
@@ -1,5 +1,5 @@
1
1
  module Plutonium
2
- VERSION = "0.16.4"
2
+ VERSION = "0.18.0"
3
3
  NEXT_MAJOR_VERSION = VERSION.split(".").tap { |v|
4
4
  v[1] = v[1].to_i + 1
5
5
  v[2] = 0