plutonium 0.16.5 → 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 (715) 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/rodauth/otp_unlock.html.erb +22 -0
  9. data/app/views/rodauth/otp_unlock_not_available.html.erb +14 -0
  10. data/app/views/rodauth/webauthn_remove.html.erb +1 -0
  11. data/docs/guide/getting-started/resources.md +2 -2
  12. data/docs/guide/tutorial.md +4 -4
  13. data/gemfiles/rails_7.gemfile.lock +406 -0
  14. data/lib/generators/pu/core/assets/assets_generator.rb +1 -1
  15. data/lib/generators/pu/res/conn/conn_generator.rb +24 -10
  16. data/lib/generators/pu/rodauth/concerns/configuration.rb +11 -0
  17. data/lib/generators/pu/rodauth/concerns/feature_selector.rb +4 -0
  18. data/lib/generators/pu/rodauth/install_generator.rb +3 -1
  19. data/lib/generators/pu/rodauth/migration/active_record/otp_unlock.erb +7 -0
  20. data/lib/generators/pu/rodauth/templates/INSTRUCTIONS +2 -46
  21. data/lib/generators/pu/rodauth/templates/app/controllers/plugin_controller.rb.tt +3 -3
  22. data/lib/generators/pu/rodauth/templates/app/mailers/rodauth_mailer.rb.tt +50 -1
  23. data/lib/generators/pu/rodauth/templates/app/rodauth/account_rodauth_plugin.rb.tt +37 -3
  24. data/lib/generators/pu/rodauth/templates/app/rodauth/rodauth_plugin.rb.tt +33 -8
  25. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_disabled.text.erb +2 -0
  26. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_locked_out.text.erb +9 -0
  27. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_setup.text.erb +2 -0
  28. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_unlock_failed.text.erb +8 -0
  29. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/otp_unlocked.text.erb +2 -0
  30. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/webauthn_authenticator_added.text.erb +3 -0
  31. data/lib/generators/pu/rodauth/templates/app/views/rodauth_mailer/webauthn_authenticator_removed.text.erb +3 -0
  32. data/lib/generators/pu/rodauth/views_generator.rb +1 -12
  33. data/lib/plutonium/core/controllers/authorizable.rb +3 -1
  34. data/lib/plutonium/helpers/application_helper.rb +0 -8
  35. data/lib/plutonium/helpers.rb +0 -3
  36. data/lib/plutonium/railtie.rb +0 -14
  37. data/lib/plutonium/reloader.rb +2 -12
  38. data/lib/plutonium/rodauth/controller_methods.rb +1 -3
  39. data/lib/plutonium/ui/component/behaviour.rb +1 -1
  40. data/lib/plutonium/ui/component/kit.rb +59 -15
  41. data/lib/plutonium/ui/display/base.rb +6 -2
  42. data/lib/plutonium/ui/display/{component → components}/association.rb +1 -1
  43. data/lib/plutonium/ui/display/components/attachment.rb +93 -0
  44. data/lib/plutonium/ui/display/{component → components}/markdown.rb +2 -1
  45. data/lib/plutonium/ui/display/resource.rb +21 -6
  46. data/lib/plutonium/ui/display/theme.rb +2 -1
  47. data/lib/plutonium/ui/form/base.rb +7 -0
  48. data/lib/plutonium/ui/form/components/belongs_to.rb +45 -1
  49. data/lib/plutonium/ui/form/components/has_many.rb +45 -1
  50. data/lib/plutonium/ui/form/components/uppy.rb +173 -0
  51. data/lib/plutonium/ui/form/query.rb +5 -5
  52. data/lib/plutonium/ui/form/resource.rb +6 -6
  53. data/lib/plutonium/ui/form/theme.rb +6 -2
  54. data/lib/plutonium/ui/frame_navigator_panel.rb +25 -4
  55. data/lib/plutonium/ui/layout/base.rb +1 -1
  56. data/lib/plutonium/ui/layout/header.rb +1 -1
  57. data/lib/plutonium/ui/layout/sidebar.rb +0 -1
  58. data/lib/plutonium/ui/nav_grid_menu.rb +93 -0
  59. data/lib/plutonium/ui/nav_user.rb +121 -0
  60. data/lib/plutonium/ui/panel.rb +2 -2
  61. data/lib/plutonium/ui/tab_list.rb +73 -0
  62. data/lib/plutonium/ui/table/base.rb +7 -1
  63. data/lib/plutonium/ui/table/components/attachment.rb +71 -0
  64. data/lib/plutonium/ui/table/components/pagy_info.rb +12 -4
  65. data/lib/plutonium/ui/table/components/pagy_pagination.rb +5 -5
  66. data/lib/plutonium/ui/table/display_theme.rb +2 -1
  67. data/lib/plutonium/ui/table/resource.rb +11 -12
  68. data/lib/plutonium/version.rb +1 -1
  69. data/package-lock.json +356 -18
  70. data/package.json +6 -2
  71. data/src/css/plutonium.css +3 -0
  72. data/src/js/controllers/attachment_input_controller.js +241 -0
  73. data/src/js/controllers/attachment_preview_container_controller.js +15 -0
  74. data/src/js/controllers/attachment_preview_controller.js +63 -0
  75. data/src/js/controllers/color_mode_controller.js +0 -1
  76. data/src/js/controllers/easymde_controller.js +0 -1
  77. data/src/js/controllers/flatpickr_controller.js +0 -1
  78. data/src/js/controllers/form_controller.js +0 -1
  79. data/src/js/controllers/frame_navigator_controller.js +16 -12
  80. data/src/js/controllers/intl_tel_input_controller.js +0 -1
  81. data/src/js/controllers/register_controllers.js +12 -30
  82. data/src/js/controllers/resource_collapse_controller.js +0 -1
  83. data/src/js/controllers/resource_dismiss_controller.js +0 -1
  84. data/src/js/controllers/resource_drop_down_controller.js +161 -9
  85. data/src/js/controllers/{header_controller.js → resource_header_controller.js} +1 -0
  86. data/src/js/controllers/resource_tab_list_controller.js +64 -0
  87. data/src/js/controllers/select_navigator.js +16 -0
  88. data/src/js/controllers/slim_select_controller.js +0 -1
  89. data/src/js/support/dom_element.js +78 -0
  90. data/src/js/support/mime_icon.js +127 -0
  91. data/tailwind.options.js +0 -5
  92. metadata +29 -642
  93. data/README copy.md +0 -83
  94. data/app/assets/application.js.bk +0 -31419
  95. data/app/assets/icons/flags/ghana.svg +0 -49
  96. data/app/assets/icons/outline/address-book.svg +0 -3
  97. data/app/assets/icons/outline/adjustments-horizontal.svg +0 -3
  98. data/app/assets/icons/outline/adjustments-vertical.svg +0 -3
  99. data/app/assets/icons/outline/align-center.svg +0 -3
  100. data/app/assets/icons/outline/angle-down.svg +0 -3
  101. data/app/assets/icons/outline/angle-left.svg +0 -3
  102. data/app/assets/icons/outline/angle-right.svg +0 -3
  103. data/app/assets/icons/outline/angle-up.svg +0 -3
  104. data/app/assets/icons/outline/annotation.svg +0 -3
  105. data/app/assets/icons/outline/archive-arrow-down.svg +0 -3
  106. data/app/assets/icons/outline/archive.svg +0 -3
  107. data/app/assets/icons/outline/arrow-down-to-bracket.svg +0 -3
  108. data/app/assets/icons/outline/arrow-down.svg +0 -3
  109. data/app/assets/icons/outline/arrow-left-to-bracket.svg +0 -3
  110. data/app/assets/icons/outline/arrow-left.svg +0 -3
  111. data/app/assets/icons/outline/arrow-right-alt.svg +0 -3
  112. data/app/assets/icons/outline/arrow-right-to-bracket.svg +0 -3
  113. data/app/assets/icons/outline/arrow-right.svg +0 -3
  114. data/app/assets/icons/outline/arrow-sort-letters.svg +0 -3
  115. data/app/assets/icons/outline/arrow-up-down.svg +0 -3
  116. data/app/assets/icons/outline/arrow-up-from-bracket.svg +0 -3
  117. data/app/assets/icons/outline/arrow-up-right-down-left.svg +0 -3
  118. data/app/assets/icons/outline/arrow-up-right-from-square.svg +0 -3
  119. data/app/assets/icons/outline/arrow-up.svg +0 -3
  120. data/app/assets/icons/outline/arrows-repeat-count.svg +0 -3
  121. data/app/assets/icons/outline/arrows-repeat.svg +0 -3
  122. data/app/assets/icons/outline/atom.svg +0 -3
  123. data/app/assets/icons/outline/backward-step.svg +0 -3
  124. data/app/assets/icons/outline/badge-check.svg +0 -3
  125. data/app/assets/icons/outline/bars-from-left.svg +0 -3
  126. data/app/assets/icons/outline/bars.svg +0 -3
  127. data/app/assets/icons/outline/bell-active-alt.svg +0 -3
  128. data/app/assets/icons/outline/bell-active.svg +0 -3
  129. data/app/assets/icons/outline/bell-ring.svg +0 -3
  130. data/app/assets/icons/outline/bell.svg +0 -3
  131. data/app/assets/icons/outline/blender-phone.svg +0 -3
  132. data/app/assets/icons/outline/book-open.svg +0 -3
  133. data/app/assets/icons/outline/book.svg +0 -3
  134. data/app/assets/icons/outline/bookmark.svg +0 -3
  135. data/app/assets/icons/outline/brain.svg +0 -3
  136. data/app/assets/icons/outline/briefcase.svg +0 -3
  137. data/app/assets/icons/outline/bug.svg +0 -3
  138. data/app/assets/icons/outline/building.svg +0 -3
  139. data/app/assets/icons/outline/bullhorn.svg +0 -3
  140. data/app/assets/icons/outline/calendar-edit.svg +0 -3
  141. data/app/assets/icons/outline/calendar-month.svg +0 -3
  142. data/app/assets/icons/outline/calendar-plus.svg +0 -3
  143. data/app/assets/icons/outline/calendar-week.svg +0 -3
  144. data/app/assets/icons/outline/camera-photo.svg +0 -4
  145. data/app/assets/icons/outline/caption.svg +0 -3
  146. data/app/assets/icons/outline/caret-down.svg +0 -3
  147. data/app/assets/icons/outline/caret-left.svg +0 -3
  148. data/app/assets/icons/outline/caret-right.svg +0 -3
  149. data/app/assets/icons/outline/caret-sort.svg +0 -3
  150. data/app/assets/icons/outline/caret-up.svg +0 -3
  151. data/app/assets/icons/outline/cart-plus-alt.svg +0 -3
  152. data/app/assets/icons/outline/cart-plus.svg +0 -3
  153. data/app/assets/icons/outline/cart.svg +0 -3
  154. data/app/assets/icons/outline/cash.svg +0 -3
  155. data/app/assets/icons/outline/chart-line-down.svg +0 -3
  156. data/app/assets/icons/outline/chart-line-up.svg +0 -3
  157. data/app/assets/icons/outline/chart-mixed-dollar.svg +0 -3
  158. data/app/assets/icons/outline/chart-mixed.svg +0 -3
  159. data/app/assets/icons/outline/chart-pie.svg +0 -4
  160. data/app/assets/icons/outline/chart.svg +0 -3
  161. data/app/assets/icons/outline/check-circle.svg +0 -3
  162. data/app/assets/icons/outline/check-plus-circle.svg +0 -3
  163. data/app/assets/icons/outline/check.svg +0 -3
  164. data/app/assets/icons/outline/chevron-double-down.svg +0 -3
  165. data/app/assets/icons/outline/chevron-double-left.svg +0 -3
  166. data/app/assets/icons/outline/chevron-double-right.svg +0 -3
  167. data/app/assets/icons/outline/chevron-double-up.svg +0 -3
  168. data/app/assets/icons/outline/chevron-down.svg +0 -3
  169. data/app/assets/icons/outline/chevron-left.svg +0 -3
  170. data/app/assets/icons/outline/chevron-right.svg +0 -3
  171. data/app/assets/icons/outline/chevron-sort.svg +0 -3
  172. data/app/assets/icons/outline/chevron-up.svg +0 -3
  173. data/app/assets/icons/outline/circle-pause.svg +0 -3
  174. data/app/assets/icons/outline/circle-plus.svg +0 -3
  175. data/app/assets/icons/outline/clapperboard-play.svg +0 -3
  176. data/app/assets/icons/outline/clipboard-check.svg +0 -3
  177. data/app/assets/icons/outline/clipboard-list.svg +0 -3
  178. data/app/assets/icons/outline/clipboard.svg +0 -3
  179. data/app/assets/icons/outline/clock.svg +0 -3
  180. data/app/assets/icons/outline/close-circle.svg +0 -3
  181. data/app/assets/icons/outline/close.svg +0 -3
  182. data/app/assets/icons/outline/cloud-arrow-up.svg +0 -3
  183. data/app/assets/icons/outline/code-branch.svg +0 -3
  184. data/app/assets/icons/outline/code-fork.svg +0 -3
  185. data/app/assets/icons/outline/code-merge.svg +0 -3
  186. data/app/assets/icons/outline/code-pull-request.svg +0 -3
  187. data/app/assets/icons/outline/code.svg +0 -3
  188. data/app/assets/icons/outline/cog.svg +0 -4
  189. data/app/assets/icons/outline/column.svg +0 -3
  190. data/app/assets/icons/outline/command.svg +0 -3
  191. data/app/assets/icons/outline/compress.svg +0 -3
  192. data/app/assets/icons/outline/computer-speaker.svg +0 -3
  193. data/app/assets/icons/outline/credit-card.svg +0 -3
  194. data/app/assets/icons/outline/database.svg +0 -3
  195. data/app/assets/icons/outline/desktop-pc.svg +0 -3
  196. data/app/assets/icons/outline/dna.svg +0 -3
  197. data/app/assets/icons/outline/dollar.svg +0 -3
  198. data/app/assets/icons/outline/dots-horizontal.svg +0 -3
  199. data/app/assets/icons/outline/dots-vertical.svg +0 -3
  200. data/app/assets/icons/outline/download.svg +0 -3
  201. data/app/assets/icons/outline/draw-square.svg +0 -3
  202. data/app/assets/icons/outline/edit.svg +0 -3
  203. data/app/assets/icons/outline/envelope-open.svg +0 -3
  204. data/app/assets/icons/outline/envelope.svg +0 -3
  205. data/app/assets/icons/outline/euro.svg +0 -3
  206. data/app/assets/icons/outline/exclamation-circle.svg +0 -3
  207. data/app/assets/icons/outline/expand.svg +0 -3
  208. data/app/assets/icons/outline/eye-slash.svg +0 -3
  209. data/app/assets/icons/outline/eye.svg +0 -4
  210. data/app/assets/icons/outline/face-explode.svg +0 -4
  211. data/app/assets/icons/outline/face-grin-stars.svg +0 -6
  212. data/app/assets/icons/outline/face-grin.svg +0 -3
  213. data/app/assets/icons/outline/face-laugh.svg +0 -3
  214. data/app/assets/icons/outline/file-chart-bar.svg +0 -3
  215. data/app/assets/icons/outline/file-check.svg +0 -3
  216. data/app/assets/icons/outline/file-circle-plus.svg +0 -3
  217. data/app/assets/icons/outline/file-clone.svg +0 -3
  218. data/app/assets/icons/outline/file-code.svg +0 -3
  219. data/app/assets/icons/outline/file-copy-alt.svg +0 -3
  220. data/app/assets/icons/outline/file-copy.svg +0 -3
  221. data/app/assets/icons/outline/file-csv.svg +0 -3
  222. data/app/assets/icons/outline/file-export.svg +0 -3
  223. data/app/assets/icons/outline/file-image.svg +0 -4
  224. data/app/assets/icons/outline/file-import.svg +0 -3
  225. data/app/assets/icons/outline/file-invoice.svg +0 -3
  226. data/app/assets/icons/outline/file-lines.svg +0 -3
  227. data/app/assets/icons/outline/file-music.svg +0 -3
  228. data/app/assets/icons/outline/file-paste.svg +0 -3
  229. data/app/assets/icons/outline/file-pdf.svg +0 -3
  230. data/app/assets/icons/outline/file-pen.svg +0 -3
  231. data/app/assets/icons/outline/file-ppt.svg +0 -3
  232. data/app/assets/icons/outline/file-search.svg +0 -3
  233. data/app/assets/icons/outline/file-shield.svg +0 -3
  234. data/app/assets/icons/outline/file-video.svg +0 -3
  235. data/app/assets/icons/outline/file-word.svg +0 -3
  236. data/app/assets/icons/outline/file-zip.svg +0 -3
  237. data/app/assets/icons/outline/file.svg +0 -3
  238. data/app/assets/icons/outline/filter.svg +0 -3
  239. data/app/assets/icons/outline/fingerprint.svg +0 -3
  240. data/app/assets/icons/outline/fire.svg +0 -3
  241. data/app/assets/icons/outline/flag.svg +0 -3
  242. data/app/assets/icons/outline/folder-arrow-right.svg +0 -3
  243. data/app/assets/icons/outline/folder-duplicate.svg +0 -3
  244. data/app/assets/icons/outline/folder-open.svg +0 -3
  245. data/app/assets/icons/outline/folder-plus.svg +0 -3
  246. data/app/assets/icons/outline/folder.svg +0 -3
  247. data/app/assets/icons/outline/forward-step.svg +0 -3
  248. data/app/assets/icons/outline/forward.svg +0 -3
  249. data/app/assets/icons/outline/gift-box.svg +0 -3
  250. data/app/assets/icons/outline/globe.svg +0 -3
  251. data/app/assets/icons/outline/grid-plus.svg +0 -3
  252. data/app/assets/icons/outline/grid.svg +0 -3
  253. data/app/assets/icons/outline/headphones.svg +0 -3
  254. data/app/assets/icons/outline/heart.svg +0 -3
  255. data/app/assets/icons/outline/home.svg +0 -3
  256. data/app/assets/icons/outline/hourglass.svg +0 -3
  257. data/app/assets/icons/outline/image.svg +0 -3
  258. data/app/assets/icons/outline/inbox-full.svg +0 -3
  259. data/app/assets/icons/outline/inbox.svg +0 -3
  260. data/app/assets/icons/outline/indent.svg +0 -3
  261. data/app/assets/icons/outline/info-circle.svg +0 -3
  262. data/app/assets/icons/outline/keyboard.svg +0 -5
  263. data/app/assets/icons/outline/label.svg +0 -3
  264. data/app/assets/icons/outline/landmark.svg +0 -3
  265. data/app/assets/icons/outline/layers.svg +0 -3
  266. data/app/assets/icons/outline/letter-bold.svg +0 -3
  267. data/app/assets/icons/outline/letter-italic.svg +0 -3
  268. data/app/assets/icons/outline/letter-underline.svg +0 -3
  269. data/app/assets/icons/outline/life-saver.svg +0 -3
  270. data/app/assets/icons/outline/lightbulb.svg +0 -3
  271. data/app/assets/icons/outline/link.svg +0 -3
  272. data/app/assets/icons/outline/list-music.svg +0 -3
  273. data/app/assets/icons/outline/list.svg +0 -3
  274. data/app/assets/icons/outline/lock-open.svg +0 -3
  275. data/app/assets/icons/outline/lock-time.svg +0 -3
  276. data/app/assets/icons/outline/lock.svg +0 -3
  277. data/app/assets/icons/outline/mail-box.svg +0 -3
  278. data/app/assets/icons/outline/map-pin-alt.svg +0 -4
  279. data/app/assets/icons/outline/map-pin.svg +0 -3
  280. data/app/assets/icons/outline/message-caption.svg +0 -3
  281. data/app/assets/icons/outline/message-dots.svg +0 -3
  282. data/app/assets/icons/outline/messages.svg +0 -3
  283. data/app/assets/icons/outline/microphone.svg +0 -3
  284. data/app/assets/icons/outline/minimize.svg +0 -3
  285. data/app/assets/icons/outline/minus.svg +0 -3
  286. data/app/assets/icons/outline/mobile-phone.svg +0 -3
  287. data/app/assets/icons/outline/moon.svg +0 -3
  288. data/app/assets/icons/outline/newspaper.svg +0 -3
  289. data/app/assets/icons/outline/ordered-list.svg +0 -3
  290. data/app/assets/icons/outline/outdent.svg +0 -3
  291. data/app/assets/icons/outline/palette.svg +0 -3
  292. data/app/assets/icons/outline/paper-clip.svg +0 -3
  293. data/app/assets/icons/outline/paper-plane.svg +0 -3
  294. data/app/assets/icons/outline/paragraph.svg +0 -3
  295. data/app/assets/icons/outline/pause.svg +0 -3
  296. data/app/assets/icons/outline/pen-nib.svg +0 -3
  297. data/app/assets/icons/outline/pen.svg +0 -3
  298. data/app/assets/icons/outline/phone.svg +0 -3
  299. data/app/assets/icons/outline/play.svg +0 -3
  300. data/app/assets/icons/outline/plus.svg +0 -3
  301. data/app/assets/icons/outline/printer.svg +0 -3
  302. data/app/assets/icons/outline/profile-card.svg +0 -3
  303. data/app/assets/icons/outline/question-circle.svg +0 -3
  304. data/app/assets/icons/outline/quote.svg +0 -3
  305. data/app/assets/icons/outline/receipt.svg +0 -3
  306. data/app/assets/icons/outline/rectangle-list.svg +0 -3
  307. data/app/assets/icons/outline/redo.svg +0 -3
  308. data/app/assets/icons/outline/refresh.svg +0 -3
  309. data/app/assets/icons/outline/reply-all.svg +0 -3
  310. data/app/assets/icons/outline/reply.svg +0 -3
  311. data/app/assets/icons/outline/restore-window.svg +0 -3
  312. data/app/assets/icons/outline/rocket.svg +0 -3
  313. data/app/assets/icons/outline/ruler-combined.svg +0 -3
  314. data/app/assets/icons/outline/sale-percent.svg +0 -3
  315. data/app/assets/icons/outline/scale-balanced.svg +0 -3
  316. data/app/assets/icons/outline/search.svg +0 -3
  317. data/app/assets/icons/outline/share-all.svg +0 -3
  318. data/app/assets/icons/outline/share-nodes.svg +0 -3
  319. data/app/assets/icons/outline/shield-check.svg +0 -3
  320. data/app/assets/icons/outline/shield.svg +0 -3
  321. data/app/assets/icons/outline/shopping-bag.svg +0 -3
  322. data/app/assets/icons/outline/shuffle.svg +0 -3
  323. data/app/assets/icons/outline/sort-horizontal.svg +0 -3
  324. data/app/assets/icons/outline/sort.svg +0 -3
  325. data/app/assets/icons/outline/star-half-stroke.svg +0 -3
  326. data/app/assets/icons/outline/star-half.svg +0 -3
  327. data/app/assets/icons/outline/star.svg +0 -3
  328. data/app/assets/icons/outline/store.svg +0 -3
  329. data/app/assets/icons/outline/sun.svg +0 -3
  330. data/app/assets/icons/outline/swatchbook.svg +0 -3
  331. data/app/assets/icons/outline/table-column.svg +0 -3
  332. data/app/assets/icons/outline/table-row.svg +0 -3
  333. data/app/assets/icons/outline/tablet.svg +0 -3
  334. data/app/assets/icons/outline/tag.svg +0 -3
  335. data/app/assets/icons/outline/terminal.svg +0 -3
  336. data/app/assets/icons/outline/text-size.svg +0 -3
  337. data/app/assets/icons/outline/text-slash.svg +0 -3
  338. data/app/assets/icons/outline/thumbs-down.svg +0 -3
  339. data/app/assets/icons/outline/thumbs-up.svg +0 -3
  340. data/app/assets/icons/outline/ticket.svg +0 -3
  341. data/app/assets/icons/outline/trash-bin.svg +0 -3
  342. data/app/assets/icons/outline/truck.svg +0 -3
  343. data/app/assets/icons/outline/undo.svg +0 -3
  344. data/app/assets/icons/outline/upload.svg +0 -3
  345. data/app/assets/icons/outline/user-add.svg +0 -3
  346. data/app/assets/icons/outline/user-circle.svg +0 -3
  347. data/app/assets/icons/outline/user-edit.svg +0 -3
  348. data/app/assets/icons/outline/user-headset.svg +0 -3
  349. data/app/assets/icons/outline/user-remove.svg +0 -3
  350. data/app/assets/icons/outline/user-settings.svg +0 -3
  351. data/app/assets/icons/outline/user.svg +0 -3
  352. data/app/assets/icons/outline/users-group.svg +0 -3
  353. data/app/assets/icons/outline/users.svg +0 -3
  354. data/app/assets/icons/outline/video-camera.svg +0 -3
  355. data/app/assets/icons/outline/volume-down.svg +0 -3
  356. data/app/assets/icons/outline/volume-up.svg +0 -3
  357. data/app/assets/icons/outline/wallet.svg +0 -3
  358. data/app/assets/icons/outline/wand-magic-sparkles.svg +0 -3
  359. data/app/assets/icons/outline/window.svg +0 -3
  360. data/app/assets/icons/outline/zoom-in.svg +0 -3
  361. data/app/assets/icons/outline/zoom-out.svg +0 -3
  362. data/app/assets/icons/solid/X.svg +0 -3
  363. data/app/assets/icons/solid/address-book.svg +0 -3
  364. data/app/assets/icons/solid/adjustments-horizontal.svg +0 -3
  365. data/app/assets/icons/solid/adjustments-vertical.svg +0 -3
  366. data/app/assets/icons/solid/annotation.svg +0 -3
  367. data/app/assets/icons/solid/apple.svg +0 -3
  368. data/app/assets/icons/solid/archive-arrow-down.svg +0 -3
  369. data/app/assets/icons/solid/archive.svg +0 -4
  370. data/app/assets/icons/solid/arrow-right-alt.svg +0 -3
  371. data/app/assets/icons/solid/arrow-up-right-from-square.svg +0 -4
  372. data/app/assets/icons/solid/backward-step.svg +0 -3
  373. data/app/assets/icons/solid/badge-check.svg +0 -3
  374. data/app/assets/icons/solid/bell-active-alt.svg +0 -3
  375. data/app/assets/icons/solid/bell-active.svg +0 -5
  376. data/app/assets/icons/solid/bell-ring.svg +0 -3
  377. data/app/assets/icons/solid/bell.svg +0 -3
  378. data/app/assets/icons/solid/blender-phone.svg +0 -3
  379. data/app/assets/icons/solid/book-open.svg +0 -3
  380. data/app/assets/icons/solid/book.svg +0 -3
  381. data/app/assets/icons/solid/bookmark.svg +0 -3
  382. data/app/assets/icons/solid/brain.svg +0 -3
  383. data/app/assets/icons/solid/briefcase.svg +0 -3
  384. data/app/assets/icons/solid/bug.svg +0 -3
  385. data/app/assets/icons/solid/building.svg +0 -3
  386. data/app/assets/icons/solid/bullhorn.svg +0 -3
  387. data/app/assets/icons/solid/calendar-edit.svg +0 -4
  388. data/app/assets/icons/solid/calendar-month.svg +0 -3
  389. data/app/assets/icons/solid/calendar-plus.svg +0 -3
  390. data/app/assets/icons/solid/calendar-week.svg +0 -3
  391. data/app/assets/icons/solid/camera-photo.svg +0 -3
  392. data/app/assets/icons/solid/caption.svg +0 -3
  393. data/app/assets/icons/solid/caret-down.svg +0 -3
  394. data/app/assets/icons/solid/caret-left.svg +0 -3
  395. data/app/assets/icons/solid/caret-right.svg +0 -3
  396. data/app/assets/icons/solid/caret-sort.svg +0 -3
  397. data/app/assets/icons/solid/caret-up.svg +0 -3
  398. data/app/assets/icons/solid/cart-plus-alt.svg +0 -4
  399. data/app/assets/icons/solid/cart-plus.svg +0 -4
  400. data/app/assets/icons/solid/cart.svg +0 -3
  401. data/app/assets/icons/solid/cash.svg +0 -5
  402. data/app/assets/icons/solid/chart-mixed-dollar.svg +0 -3
  403. data/app/assets/icons/solid/chart-pie.svg +0 -4
  404. data/app/assets/icons/solid/check-circle.svg +0 -3
  405. data/app/assets/icons/solid/check-plus-circle.svg +0 -4
  406. data/app/assets/icons/solid/circle-pause.svg +0 -3
  407. data/app/assets/icons/solid/circle-plus.svg +0 -3
  408. data/app/assets/icons/solid/clapperboard-play.svg +0 -3
  409. data/app/assets/icons/solid/clipboard-check.svg +0 -3
  410. data/app/assets/icons/solid/clipboard-list.svg +0 -3
  411. data/app/assets/icons/solid/clipboard.svg +0 -3
  412. data/app/assets/icons/solid/clock.svg +0 -3
  413. data/app/assets/icons/solid/close-circle.svg +0 -3
  414. data/app/assets/icons/solid/cloud-arrow-up.svg +0 -4
  415. data/app/assets/icons/solid/code-branch.svg +0 -3
  416. data/app/assets/icons/solid/code-fork.svg +0 -3
  417. data/app/assets/icons/solid/code-merge.svg +0 -3
  418. data/app/assets/icons/solid/code-pull-request.svg +0 -3
  419. data/app/assets/icons/solid/cog.svg +0 -3
  420. data/app/assets/icons/solid/column.svg +0 -3
  421. data/app/assets/icons/solid/computer-speaker.svg +0 -4
  422. data/app/assets/icons/solid/credit-card.svg +0 -4
  423. data/app/assets/icons/solid/css.svg +0 -3
  424. data/app/assets/icons/solid/database.svg +0 -3
  425. data/app/assets/icons/solid/desktop-pc.svg +0 -3
  426. data/app/assets/icons/solid/discord.svg +0 -3
  427. data/app/assets/icons/solid/download.svg +0 -4
  428. data/app/assets/icons/solid/draw-square.svg +0 -4
  429. data/app/assets/icons/solid/dribbble.svg +0 -3
  430. data/app/assets/icons/solid/dropbox.svg +0 -4
  431. data/app/assets/icons/solid/edit.svg +0 -4
  432. data/app/assets/icons/solid/envelope-open.svg +0 -4
  433. data/app/assets/icons/solid/envelope.svg +0 -4
  434. data/app/assets/icons/solid/exclamation-circle.svg +0 -3
  435. data/app/assets/icons/solid/eye-slash.svg +0 -5
  436. data/app/assets/icons/solid/eye.svg +0 -3
  437. data/app/assets/icons/solid/face-explode.svg +0 -3
  438. data/app/assets/icons/solid/face-grin-stars.svg +0 -3
  439. data/app/assets/icons/solid/face-grin.svg +0 -3
  440. data/app/assets/icons/solid/face-laugh.svg +0 -3
  441. data/app/assets/icons/solid/facebook.svg +0 -3
  442. data/app/assets/icons/solid/file-chart-bar.svg +0 -3
  443. data/app/assets/icons/solid/file-check.svg +0 -4
  444. data/app/assets/icons/solid/file-circle-plus.svg +0 -4
  445. data/app/assets/icons/solid/file-clone.svg +0 -4
  446. data/app/assets/icons/solid/file-code.svg +0 -3
  447. data/app/assets/icons/solid/file-copy-alt.svg +0 -4
  448. data/app/assets/icons/solid/file-copy.svg +0 -4
  449. data/app/assets/icons/solid/file-csv.svg +0 -3
  450. data/app/assets/icons/solid/file-export.svg +0 -3
  451. data/app/assets/icons/solid/file-image.svg +0 -3
  452. data/app/assets/icons/solid/file-import.svg +0 -3
  453. data/app/assets/icons/solid/file-invoice.svg +0 -3
  454. data/app/assets/icons/solid/file-lines.svg +0 -3
  455. data/app/assets/icons/solid/file-music.svg +0 -3
  456. data/app/assets/icons/solid/file-paste.svg +0 -4
  457. data/app/assets/icons/solid/file-pdf.svg +0 -3
  458. data/app/assets/icons/solid/file-pen.svg +0 -4
  459. data/app/assets/icons/solid/file-ppt.svg +0 -3
  460. data/app/assets/icons/solid/file-search.svg +0 -3
  461. data/app/assets/icons/solid/file-shield.svg +0 -4
  462. data/app/assets/icons/solid/file-video.svg +0 -3
  463. data/app/assets/icons/solid/file-word.svg +0 -3
  464. data/app/assets/icons/solid/file-zip.svg +0 -3
  465. data/app/assets/icons/solid/file.svg +0 -3
  466. data/app/assets/icons/solid/filter.svg +0 -3
  467. data/app/assets/icons/solid/fire.svg +0 -3
  468. data/app/assets/icons/solid/flag.svg +0 -3
  469. data/app/assets/icons/solid/flowbite.svg +0 -6
  470. data/app/assets/icons/solid/folder-arrow-right.svg +0 -3
  471. data/app/assets/icons/solid/folder-duplicate.svg +0 -4
  472. data/app/assets/icons/solid/folder-open.svg +0 -3
  473. data/app/assets/icons/solid/folder-plus.svg +0 -3
  474. data/app/assets/icons/solid/folder.svg +0 -3
  475. data/app/assets/icons/solid/forward-step.svg +0 -3
  476. data/app/assets/icons/solid/forward.svg +0 -3
  477. data/app/assets/icons/solid/gift-box.svg +0 -3
  478. data/app/assets/icons/solid/github.svg +0 -3
  479. data/app/assets/icons/solid/globe.svg +0 -3
  480. data/app/assets/icons/solid/google.svg +0 -3
  481. data/app/assets/icons/solid/grid-plus.svg +0 -3
  482. data/app/assets/icons/solid/grid.svg +0 -3
  483. data/app/assets/icons/solid/headphones.svg +0 -3
  484. data/app/assets/icons/solid/heart.svg +0 -3
  485. data/app/assets/icons/solid/home.svg +0 -3
  486. data/app/assets/icons/solid/hourglass.svg +0 -3
  487. data/app/assets/icons/solid/html.svg +0 -3
  488. data/app/assets/icons/solid/image.svg +0 -4
  489. data/app/assets/icons/solid/inbox-full.svg +0 -3
  490. data/app/assets/icons/solid/inbox.svg +0 -3
  491. data/app/assets/icons/solid/indent.svg +0 -3
  492. data/app/assets/icons/solid/info-circle.svg +0 -3
  493. data/app/assets/icons/solid/keyboard.svg +0 -3
  494. data/app/assets/icons/solid/label.svg +0 -3
  495. data/app/assets/icons/solid/landmark.svg +0 -4
  496. data/app/assets/icons/solid/layers.svg +0 -4
  497. data/app/assets/icons/solid/life-saver.svg +0 -3
  498. data/app/assets/icons/solid/lightbulb.svg +0 -3
  499. data/app/assets/icons/solid/linkedin.svg +0 -4
  500. data/app/assets/icons/solid/list-music.svg +0 -3
  501. data/app/assets/icons/solid/lock-open.svg +0 -3
  502. data/app/assets/icons/solid/lock-time.svg +0 -4
  503. data/app/assets/icons/solid/lock.svg +0 -3
  504. data/app/assets/icons/solid/mail-box.svg +0 -3
  505. data/app/assets/icons/solid/map-pin-alt.svg +0 -3
  506. data/app/assets/icons/solid/map-pin.svg +0 -3
  507. data/app/assets/icons/solid/message-caption.svg +0 -3
  508. data/app/assets/icons/solid/message-dots.svg +0 -3
  509. data/app/assets/icons/solid/messages.svg +0 -4
  510. data/app/assets/icons/solid/microphone.svg +0 -4
  511. data/app/assets/icons/solid/mobile-phone.svg +0 -3
  512. data/app/assets/icons/solid/moon.svg +0 -3
  513. data/app/assets/icons/solid/newspaper.svg +0 -3
  514. data/app/assets/icons/solid/npm.svg +0 -3
  515. data/app/assets/icons/solid/outdent.svg +0 -3
  516. data/app/assets/icons/solid/palette.svg +0 -3
  517. data/app/assets/icons/solid/paper-plane.svg +0 -3
  518. data/app/assets/icons/solid/paragraph.svg +0 -3
  519. data/app/assets/icons/solid/pause.svg +0 -3
  520. data/app/assets/icons/solid/pen-nib.svg +0 -3
  521. data/app/assets/icons/solid/pen.svg +0 -3
  522. data/app/assets/icons/solid/phone.svg +0 -3
  523. data/app/assets/icons/solid/play.svg +0 -3
  524. data/app/assets/icons/solid/printer.svg +0 -3
  525. data/app/assets/icons/solid/profile-card.svg +0 -3
  526. data/app/assets/icons/solid/question-circle.svg +0 -3
  527. data/app/assets/icons/solid/quote.svg +0 -3
  528. data/app/assets/icons/solid/react.svg +0 -4
  529. data/app/assets/icons/solid/receipt.svg +0 -3
  530. data/app/assets/icons/solid/rectangle-list.svg +0 -3
  531. data/app/assets/icons/solid/reply-all.svg +0 -3
  532. data/app/assets/icons/solid/reply.svg +0 -3
  533. data/app/assets/icons/solid/rocket.svg +0 -3
  534. data/app/assets/icons/solid/sale-percent.svg +0 -3
  535. data/app/assets/icons/solid/scale-balanced.svg +0 -3
  536. data/app/assets/icons/solid/search.svg +0 -4
  537. data/app/assets/icons/solid/share-all.svg +0 -3
  538. data/app/assets/icons/solid/share-nodes.svg +0 -3
  539. data/app/assets/icons/solid/shield-check.svg +0 -3
  540. data/app/assets/icons/solid/shield.svg +0 -3
  541. data/app/assets/icons/solid/shopping-bag.svg +0 -3
  542. data/app/assets/icons/solid/stackoverflow.svg +0 -4
  543. data/app/assets/icons/solid/star-half-stroke.svg +0 -3
  544. data/app/assets/icons/solid/star-half.svg +0 -3
  545. data/app/assets/icons/solid/star.svg +0 -3
  546. data/app/assets/icons/solid/store.svg +0 -3
  547. data/app/assets/icons/solid/sun.svg +0 -3
  548. data/app/assets/icons/solid/swatchbook.svg +0 -3
  549. data/app/assets/icons/solid/table-column.svg +0 -3
  550. data/app/assets/icons/solid/table-row.svg +0 -3
  551. data/app/assets/icons/solid/tablet.svg +0 -3
  552. data/app/assets/icons/solid/tag.svg +0 -3
  553. data/app/assets/icons/solid/tailwind.svg +0 -3
  554. data/app/assets/icons/solid/terminal.svg +0 -3
  555. data/app/assets/icons/solid/thumbs-down.svg +0 -3
  556. data/app/assets/icons/solid/thumbs-up.svg +0 -3
  557. data/app/assets/icons/solid/ticket.svg +0 -3
  558. data/app/assets/icons/solid/trash-bin.svg +0 -3
  559. data/app/assets/icons/solid/truck.svg +0 -3
  560. data/app/assets/icons/solid/twitter.svg +0 -3
  561. data/app/assets/icons/solid/upload.svg +0 -3
  562. data/app/assets/icons/solid/user-add.svg +0 -3
  563. data/app/assets/icons/solid/user-circle.svg +0 -3
  564. data/app/assets/icons/solid/user-edit.svg +0 -3
  565. data/app/assets/icons/solid/user-headset.svg +0 -3
  566. data/app/assets/icons/solid/user-remove.svg +0 -3
  567. data/app/assets/icons/solid/user-settings.svg +0 -3
  568. data/app/assets/icons/solid/user.svg +0 -3
  569. data/app/assets/icons/solid/users-group.svg +0 -3
  570. data/app/assets/icons/solid/users.svg +0 -3
  571. data/app/assets/icons/solid/video-camera.svg +0 -3
  572. data/app/assets/icons/solid/volume-down.svg +0 -4
  573. data/app/assets/icons/solid/volume-up.svg +0 -5
  574. data/app/assets/icons/solid/vue.svg +0 -3
  575. data/app/assets/icons/solid/wallet.svg +0 -4
  576. data/app/assets/icons/solid/wand-magic-sparkles.svg +0 -4
  577. data/app/assets/icons/solid/window-restore.svg +0 -4
  578. data/app/assets/icons/solid/window.svg +0 -3
  579. data/app/assets/icons/solid/youtube.svg +0 -3
  580. data/app/assets/icons/solid/zoom-in.svg +0 -3
  581. data/app/assets/icons/solid/zoom-out.svg +0 -3
  582. data/app/views/components/action_button/action_button_component.html.erb +0 -7
  583. data/app/views/components/action_button/action_button_component.rb +0 -15
  584. data/app/views/components/attributes.rb +0 -184
  585. data/app/views/components/base.rb +0 -29
  586. data/app/views/components/block/block_component.html.erb +0 -3
  587. data/app/views/components/block/block_component.rb +0 -44
  588. data/app/views/components/breadcrumbs/breadcrumbs_component.html.erb +0 -96
  589. data/app/views/components/breadcrumbs/breadcrumbs_component.rb +0 -9
  590. data/app/views/components/button/button_component.html.erb +0 -11
  591. data/app/views/components/button/button_component.rb +0 -128
  592. data/app/views/components/dyna_frame_content/dyna_frame_content_component.html.erb +0 -8
  593. data/app/views/components/dyna_frame_content/dyna_frame_content_component.rb +0 -6
  594. data/app/views/components/dyna_frame_host/dyna_frame_host_component.html.erb +0 -3
  595. data/app/views/components/dyna_frame_host/dyna_frame_host_component.rb +0 -18
  596. data/app/views/components/empty_card/empty_card_component.html.erb +0 -6
  597. data/app/views/components/empty_card/empty_card_component.rb +0 -7
  598. data/app/views/components/form/form_builder.rb +0 -75
  599. data/app/views/components/form/form_component.html.erb +0 -73
  600. data/app/views/components/form/form_component.rb +0 -23
  601. data/app/views/components/has_many_panel/has_many_panel_component.html.erb +0 -25
  602. data/app/views/components/has_many_panel/has_many_panel_component.rb +0 -16
  603. data/app/views/components/header/header_component.html.erb +0 -1
  604. data/app/views/components/header/header_component.rb +0 -7
  605. data/app/views/components/interactive_action_form/interactive_action_form_component.html.erb +0 -39
  606. data/app/views/components/interactive_action_form/interactive_action_form_component.rb +0 -8
  607. data/app/views/components/nav_grid_menu/nav_grid_menu_component.html.erb +0 -24
  608. data/app/views/components/nav_grid_menu/nav_grid_menu_component.rb +0 -23
  609. data/app/views/components/nav_grid_menu_item/nav_grid_menu_item_component.html.erb +0 -4
  610. data/app/views/components/nav_grid_menu_item/nav_grid_menu_item_component.rb +0 -20
  611. data/app/views/components/nav_user/nav_user_component.html.erb +0 -50
  612. data/app/views/components/nav_user/nav_user_component.rb +0 -32
  613. data/app/views/components/nav_user_link/nav_user_link_component.html.erb +0 -7
  614. data/app/views/components/nav_user_link/nav_user_link_component.rb +0 -23
  615. data/app/views/components/nav_user_section/nav_user_section_component.html.erb +0 -7
  616. data/app/views/components/nav_user_section/nav_user_section_component.rb +0 -18
  617. data/app/views/components/nested_resource_form_fields/nested_resource_form_fields_component.html.erb +0 -64
  618. data/app/views/components/nested_resource_form_fields/nested_resource_form_fields_component.rb +0 -29
  619. data/app/views/components/pagination/pagination_component.html.erb +0 -6
  620. data/app/views/components/pagination/pagination_component.rb +0 -94
  621. data/app/views/components/panel/panel_component.html.erb +0 -17
  622. data/app/views/components/panel/panel_component.rb +0 -17
  623. data/app/views/components/resource_header/resource_header_component.html.erb +0 -83
  624. data/app/views/components/resource_header/resource_header_component.rb +0 -30
  625. data/app/views/components/resource_layout/resource_layout_component.html.erb +0 -53
  626. data/app/views/components/resource_layout/resource_layout_component.rb +0 -41
  627. data/app/views/components/sidebar/sidebar_component.html.erb +0 -69
  628. data/app/views/components/sidebar/sidebar_component.rb +0 -23
  629. data/app/views/components/sidebar_menu/sidebar_menu_component.html.erb +0 -5
  630. data/app/views/components/sidebar_menu/sidebar_menu_component.rb +0 -17
  631. data/app/views/components/sidebar_menu_item/sidebar_menu_item_component.html.erb +0 -64
  632. data/app/views/components/sidebar_menu_item/sidebar_menu_item_component.rb +0 -52
  633. data/app/views/components/skeleton/table/table_component.html.erb +0 -18
  634. data/app/views/components/skeleton/table/table_component.rb +0 -6
  635. data/app/views/components/table/table_component.html.erb +0 -43
  636. data/app/views/components/table/table_component.rb +0 -159
  637. data/app/views/components/table_search_input/table_search_input_component.html.erb +0 -48
  638. data/app/views/components/table_search_input/table_search_input_component.rb +0 -15
  639. data/app/views/components/table_toolbar/table_toolbar_component.html.erb +0 -7
  640. data/app/views/components/table_toolbar/table_toolbar_component.rb +0 -17
  641. data/app/views/components/toolbar/toolbar_component.html.erb +0 -67
  642. data/app/views/components/toolbar/toolbar_component.rb +0 -26
  643. data/app/views/layouts/resource.html copy.erb +0 -49
  644. data/app/views/plutonium/_resource_header.html copy.erb +0 -287
  645. data/lib/generators/pu/gen/component/component_generator.rb +0 -99
  646. data/lib/generators/pu/gen/component/templates/component.html.erb.tt +0 -3
  647. data/lib/generators/pu/gen/component/templates/component.rb.tt +0 -15
  648. data/lib/generators/pu/gen/component/templates/controller.js.tt +0 -8
  649. data/lib/plutonium/builders/menus/sidebar_menu.rb.bk +0 -26
  650. data/lib/plutonium/builders/menus/sidebar_menu_item.rb.bk +0 -28
  651. data/lib/plutonium/component_registry.rb +0 -19
  652. data/lib/plutonium/core/action.rb +0 -49
  653. data/lib/plutonium/core/actions/basic_action.rb +0 -16
  654. data/lib/plutonium/core/actions/collection.rb +0 -37
  655. data/lib/plutonium/core/actions/destroy_action.rb +0 -23
  656. data/lib/plutonium/core/actions/edit_action.rb +0 -21
  657. data/lib/plutonium/core/actions/interactive_action.rb +0 -64
  658. data/lib/plutonium/core/actions/new_action.rb +0 -20
  659. data/lib/plutonium/core/actions/show_action.rb +0 -19
  660. data/lib/plutonium/core/associations/renderers/base.rb +0 -77
  661. data/lib/plutonium/core/associations/renderers/factory.rb +0 -36
  662. data/lib/plutonium/core/associations/renderers/has_many_renderer.rb +0 -18
  663. data/lib/plutonium/core/autodiscovery/association_renderer_discoverer.rb +0 -31
  664. data/lib/plutonium/core/autodiscovery/discoverer.rb +0 -15
  665. data/lib/plutonium/core/autodiscovery/input_discoverer.rb +0 -31
  666. data/lib/plutonium/core/autodiscovery/renderer_discoverer.rb +0 -31
  667. data/lib/plutonium/core/definers/action_definer.rb +0 -25
  668. data/lib/plutonium/core/definers/association_renderer_definer.rb +0 -33
  669. data/lib/plutonium/core/definers/field_definer.rb +0 -19
  670. data/lib/plutonium/core/definers/field_input_definer.rb +0 -77
  671. data/lib/plutonium/core/definers/field_renderer_definer.rb +0 -37
  672. data/lib/plutonium/core/fields/inputs/attachment_input.rb +0 -24
  673. data/lib/plutonium/core/fields/inputs/base.rb +0 -110
  674. data/lib/plutonium/core/fields/inputs/belongs_to_association_input.rb +0 -15
  675. data/lib/plutonium/core/fields/inputs/checkbox_input.rb +0 -15
  676. data/lib/plutonium/core/fields/inputs/date_time_input.rb +0 -15
  677. data/lib/plutonium/core/fields/inputs/factory.rb +0 -50
  678. data/lib/plutonium/core/fields/inputs/has_many_association_input.rb +0 -15
  679. data/lib/plutonium/core/fields/inputs/nested_input.rb +0 -72
  680. data/lib/plutonium/core/fields/inputs/noop_input.rb +0 -16
  681. data/lib/plutonium/core/fields/inputs/phone_input.rb +0 -22
  682. data/lib/plutonium/core/fields/inputs/polymorphic_belongs_to_association_input.rb +0 -48
  683. data/lib/plutonium/core/fields/inputs/simple_form_association_input.rb +0 -26
  684. data/lib/plutonium/core/fields/inputs/simple_form_input.rb +0 -13
  685. data/lib/plutonium/core/fields/renderers/association_renderer.rb +0 -28
  686. data/lib/plutonium/core/fields/renderers/attachment_renderer.rb +0 -21
  687. data/lib/plutonium/core/fields/renderers/base.rb +0 -83
  688. data/lib/plutonium/core/fields/renderers/basic_renderer.rb +0 -13
  689. data/lib/plutonium/core/fields/renderers/factory.rb +0 -37
  690. data/lib/plutonium/core/renderable.rb +0 -20
  691. data/lib/plutonium/core/ui/collection.rb +0 -18
  692. data/lib/plutonium/core/ui/detail.rb +0 -15
  693. data/lib/plutonium/core/ui/form.rb +0 -12
  694. data/lib/plutonium/helpers/action_buttons_helper.rb +0 -32
  695. data/lib/plutonium/helpers/component_helper.rb +0 -14
  696. data/lib/plutonium/helpers/form_helper.rb +0 -50
  697. data/lib/plutonium/icons.rb +0 -32
  698. data/lib/plutonium/preserved__/field.rb.bk +0 -65
  699. data/lib/plutonium/preserved__/input.rb.bk +0 -93
  700. data/lib/plutonium/ui/table/components/pagy_page_info.rb +0 -70
  701. data/src/js/controllers/has_many_panel_controller.js +0 -8
  702. data/src/js/controllers/interactive_action_form_controller.js +0 -13
  703. data/src/js/controllers/nav_grid_menu_controller.js +0 -8
  704. data/src/js/controllers/nav_grid_menu_item_controller.js +0 -8
  705. data/src/js/controllers/nav_user_controller.js +0 -8
  706. data/src/js/controllers/nav_user_link_controller.js +0 -8
  707. data/src/js/controllers/nav_user_section_controller.js +0 -8
  708. data/src/js/controllers/resource_layout_controller.js +0 -8
  709. data/src/js/controllers/sidebar_controller.js +0 -8
  710. data/src/js/controllers/sidebar_menu_controller.js +0 -8
  711. data/src/js/controllers/sidebar_menu_item_controller.js +0 -8
  712. data/src/js/controllers/table_controller.js +0 -8
  713. data/src/js/controllers/table_search_input_controller.js +0 -8
  714. data/src/js/controllers/table_toolbar_controller.js +0 -8
  715. 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?
@@ -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.5"
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