easy-admin-rails 0.2.5 → 0.2.7

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/builds/easy_admin.base.js +95 -0
  3. data/app/assets/builds/easy_admin.base.js.map +3 -3
  4. data/app/assets/builds/easy_admin.css +226 -0
  5. data/app/components/easy_admin/fields/form/belongs_to_component.rb +0 -1
  6. data/app/components/easy_admin/form_layout_component.rb +553 -0
  7. data/app/components/easy_admin/navbar_component.rb +19 -4
  8. data/app/components/easy_admin/permissions/user_role_permissions_component.rb +1 -3
  9. data/app/components/easy_admin/profile/change_password_modal_component.rb +75 -0
  10. data/app/components/easy_admin/profile/profile_tab_component.rb +92 -0
  11. data/app/components/easy_admin/profile/security_tab_component.rb +53 -0
  12. data/app/components/easy_admin/profile/settings_component.rb +103 -0
  13. data/app/components/easy_admin/show_layout_component.rb +694 -24
  14. data/app/components/easy_admin/two_factor/backup_codes_component.rb +118 -0
  15. data/app/components/easy_admin/two_factor/setup_component.rb +124 -0
  16. data/app/components/easy_admin/two_factor/status_component.rb +92 -0
  17. data/app/controllers/concerns/easy_admin/two_factor.rb +110 -0
  18. data/app/controllers/easy_admin/application_controller.rb +10 -5
  19. data/app/controllers/easy_admin/batch_actions_controller.rb +0 -1
  20. data/app/controllers/easy_admin/concerns/inline_field_editing.rb +4 -11
  21. data/app/controllers/easy_admin/concerns/resource_loading.rb +10 -9
  22. data/app/controllers/easy_admin/concerns/resource_pagination.rb +3 -0
  23. data/app/controllers/easy_admin/dashboards_controller.rb +0 -1
  24. data/app/controllers/easy_admin/profile_controller.rb +25 -0
  25. data/app/controllers/easy_admin/resources_controller.rb +1 -5
  26. data/app/controllers/easy_admin/row_actions_controller.rb +1 -4
  27. data/app/controllers/easy_admin/sessions_controller.rb +107 -1
  28. data/app/helpers/easy_admin/fields_helper.rb +8 -22
  29. data/app/javascript/easy_admin/controllers/infinite_scroll_controller.js +12 -0
  30. data/app/javascript/easy_admin/controllers/vertical_tabs_controller.js +112 -0
  31. data/app/javascript/easy_admin/controllers.js +3 -1
  32. data/app/models/easy_admin/admin_user.rb +3 -0
  33. data/app/views/easy_admin/profile/backup_codes_regenerated.turbo_stream.erb +12 -0
  34. data/app/views/easy_admin/profile/change_password.html.erb +24 -0
  35. data/app/views/easy_admin/profile/index.html.erb +1 -0
  36. data/app/views/easy_admin/profile/password_error.turbo_stream.erb +6 -0
  37. data/app/views/easy_admin/profile/password_invalid_current.turbo_stream.erb +6 -0
  38. data/app/views/easy_admin/profile/password_updated.turbo_stream.erb +9 -0
  39. data/app/views/easy_admin/profile/two_factor_backup_codes.html.erb +24 -0
  40. data/app/views/easy_admin/profile/two_factor_enabled.turbo_stream.erb +12 -0
  41. data/app/views/easy_admin/profile/two_factor_invalid_code.turbo_stream.erb +6 -0
  42. data/app/views/easy_admin/profile/two_factor_not_enabled.turbo_stream.erb +6 -0
  43. data/app/views/easy_admin/profile/two_factor_setup.html.erb +24 -0
  44. data/app/views/easy_admin/profile/two_factor_unavailable.turbo_stream.erb +6 -0
  45. data/app/views/easy_admin/resources/edit.html.erb +2 -2
  46. data/app/views/easy_admin/resources/new.html.erb +2 -2
  47. data/app/views/easy_admin/resources/show.html.erb +3 -1
  48. data/app/views/easy_admin/sessions/two_factor_verification.html.erb +48 -0
  49. data/app/views/easy_admin/sessions/verify_2fa_error.turbo_stream.erb +13 -0
  50. data/config/routes.rb +20 -1
  51. data/lib/easy-admin-rails.rb +1 -0
  52. data/lib/easy_admin/field.rb +3 -2
  53. data/lib/easy_admin/layouts/builders/base_layout_builder.rb +245 -0
  54. data/lib/easy_admin/layouts/builders/form_layout_builder.rb +208 -0
  55. data/lib/easy_admin/layouts/builders/index_layout_builder.rb +22 -0
  56. data/lib/easy_admin/layouts/builders/show_layout_builder.rb +199 -0
  57. data/lib/easy_admin/layouts/dsl.rb +200 -0
  58. data/lib/easy_admin/layouts/layout_context.rb +189 -0
  59. data/lib/easy_admin/layouts/nodes/base_node.rb +88 -0
  60. data/lib/easy_admin/layouts/nodes/divider.rb +27 -0
  61. data/lib/easy_admin/layouts/nodes/field_node.rb +57 -0
  62. data/lib/easy_admin/layouts/nodes/grid.rb +60 -0
  63. data/lib/easy_admin/layouts/nodes/render_node.rb +41 -0
  64. data/lib/easy_admin/layouts/nodes/root.rb +25 -0
  65. data/lib/easy_admin/layouts/nodes/section.rb +46 -0
  66. data/lib/easy_admin/layouts/nodes/spacer.rb +17 -0
  67. data/lib/easy_admin/layouts/nodes/stubs.rb +109 -0
  68. data/lib/easy_admin/layouts/nodes/tab.rb +40 -0
  69. data/lib/easy_admin/layouts/nodes/tabs.rb +40 -0
  70. data/lib/easy_admin/layouts.rb +28 -0
  71. data/lib/easy_admin/permissions/resource_permissions.rb +1 -5
  72. data/lib/easy_admin/resource/base.rb +2 -2
  73. data/lib/easy_admin/resource/dsl.rb +2 -11
  74. data/lib/easy_admin/resource/field_registry.rb +58 -2
  75. data/lib/easy_admin/resource.rb +0 -9
  76. data/lib/easy_admin/resource_modules.rb +21 -4
  77. data/lib/easy_admin/two_factor_authentication.rb +156 -0
  78. data/lib/easy_admin/version.rb +1 -1
  79. data/lib/generators/easy_admin/permissions/install_generator.rb +0 -10
  80. data/lib/generators/easy_admin/permissions/templates/migrations/create_permission_tables.rb +33 -3
  81. data/lib/generators/easy_admin/two_factor/templates/README +29 -0
  82. data/lib/generators/easy_admin/two_factor/templates/migration.rb +10 -0
  83. data/lib/generators/easy_admin/two_factor/two_factor_generator.rb +22 -0
  84. metadata +49 -9
  85. data/lib/easy_admin/resource/form_builder.rb +0 -123
  86. data/lib/easy_admin/resource/layout_builder.rb +0 -249
  87. data/lib/easy_admin/resource/show_builder.rb +0 -359
  88. data/lib/generators/easy_admin/permissions/templates/migrations/update_users_for_permissions.rb +0 -6
  89. data/lib/generators/easy_admin/rbac/rbac_generator.rb +0 -244
  90. data/lib/generators/easy_admin/rbac/templates/add_rbac_to_admin_users.rb +0 -23
  91. data/lib/generators/easy_admin/rbac/templates/super_admin.rb +0 -34
@@ -3494,6 +3494,54 @@ input:checked + .toggle-switch .toggle-slider:before {
3494
3494
  grid-column: span 1 / span 1;
3495
3495
  }
3496
3496
 
3497
+ .col-span-10 {
3498
+ grid-column: span 10 / span 10;
3499
+ }
3500
+
3501
+ .col-span-11 {
3502
+ grid-column: span 11 / span 11;
3503
+ }
3504
+
3505
+ .col-span-12 {
3506
+ grid-column: span 12 / span 12;
3507
+ }
3508
+
3509
+ .col-span-2 {
3510
+ grid-column: span 2 / span 2;
3511
+ }
3512
+
3513
+ .col-span-3 {
3514
+ grid-column: span 3 / span 3;
3515
+ }
3516
+
3517
+ .col-span-4 {
3518
+ grid-column: span 4 / span 4;
3519
+ }
3520
+
3521
+ .col-span-5 {
3522
+ grid-column: span 5 / span 5;
3523
+ }
3524
+
3525
+ .col-span-6 {
3526
+ grid-column: span 6 / span 6;
3527
+ }
3528
+
3529
+ .col-span-7 {
3530
+ grid-column: span 7 / span 7;
3531
+ }
3532
+
3533
+ .col-span-8 {
3534
+ grid-column: span 8 / span 8;
3535
+ }
3536
+
3537
+ .col-span-9 {
3538
+ grid-column: span 9 / span 9;
3539
+ }
3540
+
3541
+ .col-span-full {
3542
+ grid-column: 1 / -1;
3543
+ }
3544
+
3497
3545
  .m-auto {
3498
3546
  margin: auto;
3499
3547
  }
@@ -3564,10 +3612,18 @@ input:checked + .toggle-switch .toggle-slider:before {
3564
3612
  margin-bottom: 1.5rem;
3565
3613
  }
3566
3614
 
3615
+ .mb-8 {
3616
+ margin-bottom: 2rem;
3617
+ }
3618
+
3567
3619
  .me-1 {
3568
3620
  margin-inline-end: 0.25rem;
3569
3621
  }
3570
3622
 
3623
+ .me-2 {
3624
+ margin-inline-end: 0.5rem;
3625
+ }
3626
+
3571
3627
  .ml-1 {
3572
3628
  margin-left: 0.25rem;
3573
3629
  }
@@ -3604,6 +3660,10 @@ input:checked + .toggle-switch .toggle-slider:before {
3604
3660
  margin-right: 1rem;
3605
3661
  }
3606
3662
 
3663
+ .mr-8 {
3664
+ margin-right: 2rem;
3665
+ }
3666
+
3607
3667
  .ms-auto {
3608
3668
  margin-inline-start: auto;
3609
3669
  }
@@ -3724,6 +3784,10 @@ input:checked + .toggle-switch .toggle-slider:before {
3724
3784
  height: 1rem;
3725
3785
  }
3726
3786
 
3787
+ .h-48 {
3788
+ height: 12rem;
3789
+ }
3790
+
3727
3791
  .h-5 {
3728
3792
  height: 1.25rem;
3729
3793
  }
@@ -3917,6 +3981,10 @@ input:checked + .toggle-switch .toggle-slider:before {
3917
3981
  max-width: 56rem;
3918
3982
  }
3919
3983
 
3984
+ .max-w-6xl {
3985
+ max-width: 72rem;
3986
+ }
3987
+
3920
3988
  .max-w-7xl {
3921
3989
  max-width: 80rem;
3922
3990
  }
@@ -3929,6 +3997,10 @@ input:checked + .toggle-switch .toggle-slider:before {
3929
3997
  max-width: 24rem;
3930
3998
  }
3931
3999
 
4000
+ .max-w-full {
4001
+ max-width: 100%;
4002
+ }
4003
+
3932
4004
  .flex-1 {
3933
4005
  flex: 1 1 0%;
3934
4006
  }
@@ -4083,6 +4155,10 @@ input:checked + .toggle-switch .toggle-slider:before {
4083
4155
  grid-template-columns: repeat(7, minmax(0, 1fr));
4084
4156
  }
4085
4157
 
4158
+ .grid-cols-12 {
4159
+ grid-template-columns: repeat(12, minmax(0, 1fr));
4160
+ }
4161
+
4086
4162
  .flex-col {
4087
4163
  flex-direction: column;
4088
4164
  }
@@ -4103,6 +4179,14 @@ input:checked + .toggle-switch .toggle-slider:before {
4103
4179
  align-items: center;
4104
4180
  }
4105
4181
 
4182
+ .items-stretch {
4183
+ align-items: stretch;
4184
+ }
4185
+
4186
+ .justify-start {
4187
+ justify-content: flex-start;
4188
+ }
4189
+
4106
4190
  .justify-end {
4107
4191
  justify-content: flex-end;
4108
4192
  }
@@ -4165,6 +4249,12 @@ input:checked + .toggle-switch .toggle-slider:before {
4165
4249
  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
4166
4250
  }
4167
4251
 
4252
+ .space-x-8 > :not([hidden]) ~ :not([hidden]) {
4253
+ --tw-space-x-reverse: 0;
4254
+ margin-right: calc(2rem * var(--tw-space-x-reverse));
4255
+ margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
4256
+ }
4257
+
4168
4258
  .space-y-0 > :not([hidden]) ~ :not([hidden]) {
4169
4259
  --tw-space-y-reverse: 0;
4170
4260
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
@@ -4257,6 +4347,14 @@ input:checked + .toggle-switch .toggle-slider:before {
4257
4347
  white-space: pre-wrap;
4258
4348
  }
4259
4349
 
4350
+ .break-words {
4351
+ overflow-wrap: break-word;
4352
+ }
4353
+
4354
+ .break-all {
4355
+ word-break: break-all;
4356
+ }
4357
+
4260
4358
  .rounded {
4261
4359
  border-radius: 0.25rem;
4262
4360
  }
@@ -4339,6 +4437,10 @@ input:checked + .toggle-switch .toggle-slider:before {
4339
4437
  border-bottom-width: 2px;
4340
4438
  }
4341
4439
 
4440
+ .border-l-4 {
4441
+ border-left-width: 4px;
4442
+ }
4443
+
4342
4444
  .border-r {
4343
4445
  border-right-width: 1px;
4344
4446
  }
@@ -4494,6 +4596,16 @@ input:checked + .toggle-switch .toggle-slider:before {
4494
4596
  border-color: rgb(254 240 138 / var(--tw-border-opacity, 1));
4495
4597
  }
4496
4598
 
4599
+ .border-cyan-200 {
4600
+ --tw-border-opacity: 1;
4601
+ border-color: rgb(165 243 252 / var(--tw-border-opacity, 1));
4602
+ }
4603
+
4604
+ .border-gray-800 {
4605
+ --tw-border-opacity: 1;
4606
+ border-color: rgb(31 41 55 / var(--tw-border-opacity, 1));
4607
+ }
4608
+
4497
4609
  .bg-amber-50 {
4498
4610
  --tw-bg-opacity: 1;
4499
4611
  background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));
@@ -4854,6 +4966,11 @@ input:checked + .toggle-switch .toggle-slider:before {
4854
4966
  padding-right: 0px;
4855
4967
  }
4856
4968
 
4969
+ .px-1 {
4970
+ padding-left: 0.25rem;
4971
+ padding-right: 0.25rem;
4972
+ }
4973
+
4857
4974
  .px-1\.5 {
4858
4975
  padding-left: 0.375rem;
4859
4976
  padding-right: 0.375rem;
@@ -5005,6 +5122,18 @@ input:checked + .toggle-switch .toggle-slider:before {
5005
5122
  padding-top: 1.5rem;
5006
5123
  }
5007
5124
 
5125
+ .pt-8 {
5126
+ padding-top: 2rem;
5127
+ }
5128
+
5129
+ .pb-2 {
5130
+ padding-bottom: 0.5rem;
5131
+ }
5132
+
5133
+ .pb-3 {
5134
+ padding-bottom: 0.75rem;
5135
+ }
5136
+
5008
5137
  .text-left {
5009
5138
  text-align: left;
5010
5139
  }
@@ -5113,6 +5242,10 @@ input:checked + .toggle-switch .toggle-slider:before {
5113
5242
  letter-spacing: 0.05em;
5114
5243
  }
5115
5244
 
5245
+ .tracking-widest {
5246
+ letter-spacing: 0.1em;
5247
+ }
5248
+
5116
5249
  .text-amber-400 {
5117
5250
  --tw-text-opacity: 1;
5118
5251
  color: rgb(251 191 36 / var(--tw-text-opacity, 1));
@@ -5248,6 +5381,11 @@ input:checked + .toggle-switch .toggle-slider:before {
5248
5381
  color: rgb(153 27 27 / var(--tw-text-opacity, 1));
5249
5382
  }
5250
5383
 
5384
+ .text-red-900 {
5385
+ --tw-text-opacity: 1;
5386
+ color: rgb(127 29 29 / var(--tw-text-opacity, 1));
5387
+ }
5388
+
5251
5389
  .text-transparent {
5252
5390
  color: transparent;
5253
5391
  }
@@ -5262,6 +5400,11 @@ input:checked + .toggle-switch .toggle-slider:before {
5262
5400
  color: rgb(250 204 21 / var(--tw-text-opacity, 1));
5263
5401
  }
5264
5402
 
5403
+ .text-yellow-500 {
5404
+ --tw-text-opacity: 1;
5405
+ color: rgb(234 179 8 / var(--tw-text-opacity, 1));
5406
+ }
5407
+
5265
5408
  .text-yellow-600 {
5266
5409
  --tw-text-opacity: 1;
5267
5410
  color: rgb(202 138 4 / var(--tw-text-opacity, 1));
@@ -5277,6 +5420,11 @@ input:checked + .toggle-switch .toggle-slider:before {
5277
5420
  color: rgb(133 77 14 / var(--tw-text-opacity, 1));
5278
5421
  }
5279
5422
 
5423
+ .text-yellow-900 {
5424
+ --tw-text-opacity: 1;
5425
+ color: rgb(113 63 18 / var(--tw-text-opacity, 1));
5426
+ }
5427
+
5280
5428
  .underline {
5281
5429
  text-decoration-line: underline;
5282
5430
  }
@@ -5650,6 +5798,10 @@ input:checked + .toggle-switch .toggle-slider:before {
5650
5798
  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
5651
5799
  }
5652
5800
 
5801
+ .last\:border-b-0:last-child {
5802
+ border-bottom-width: 0px;
5803
+ }
5804
+
5653
5805
  .focus-within\:border-blue-500:focus-within {
5654
5806
  --tw-border-opacity: 1;
5655
5807
  border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));
@@ -5782,6 +5934,11 @@ input:checked + .toggle-switch .toggle-slider:before {
5782
5934
  background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));
5783
5935
  }
5784
5936
 
5937
+ .hover\:bg-green-200:hover {
5938
+ --tw-bg-opacity: 1;
5939
+ background-color: rgb(187 247 208 / var(--tw-bg-opacity, 1));
5940
+ }
5941
+
5785
5942
  .hover\:bg-green-50:hover {
5786
5943
  --tw-bg-opacity: 1;
5787
5944
  background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));
@@ -5792,6 +5949,11 @@ input:checked + .toggle-switch .toggle-slider:before {
5792
5949
  background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));
5793
5950
  }
5794
5951
 
5952
+ .hover\:bg-green-700:hover {
5953
+ --tw-bg-opacity: 1;
5954
+ background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));
5955
+ }
5956
+
5795
5957
  .hover\:bg-red-100:hover {
5796
5958
  --tw-bg-opacity: 1;
5797
5959
  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
@@ -6150,6 +6312,14 @@ input:checked + .toggle-switch .toggle-slider:before {
6150
6312
  grid-column: span 2 / span 2;
6151
6313
  }
6152
6314
 
6315
+ .sm\:col-span-3 {
6316
+ grid-column: span 3 / span 3;
6317
+ }
6318
+
6319
+ .sm\:col-span-9 {
6320
+ grid-column: span 9 / span 9;
6321
+ }
6322
+
6153
6323
  .sm\:-mx-6 {
6154
6324
  margin-left: -1.5rem;
6155
6325
  margin-right: -1.5rem;
@@ -6341,6 +6511,50 @@ input:checked + .toggle-switch .toggle-slider:before {
6341
6511
  grid-column: span 2 / span 2;
6342
6512
  }
6343
6513
 
6514
+ .md\:col-span-1 {
6515
+ grid-column: span 1 / span 1;
6516
+ }
6517
+
6518
+ .md\:col-span-10 {
6519
+ grid-column: span 10 / span 10;
6520
+ }
6521
+
6522
+ .md\:col-span-11 {
6523
+ grid-column: span 11 / span 11;
6524
+ }
6525
+
6526
+ .md\:col-span-12 {
6527
+ grid-column: span 12 / span 12;
6528
+ }
6529
+
6530
+ .md\:col-span-3 {
6531
+ grid-column: span 3 / span 3;
6532
+ }
6533
+
6534
+ .md\:col-span-4 {
6535
+ grid-column: span 4 / span 4;
6536
+ }
6537
+
6538
+ .md\:col-span-5 {
6539
+ grid-column: span 5 / span 5;
6540
+ }
6541
+
6542
+ .md\:col-span-6 {
6543
+ grid-column: span 6 / span 6;
6544
+ }
6545
+
6546
+ .md\:col-span-7 {
6547
+ grid-column: span 7 / span 7;
6548
+ }
6549
+
6550
+ .md\:col-span-8 {
6551
+ grid-column: span 8 / span 8;
6552
+ }
6553
+
6554
+ .md\:col-span-9 {
6555
+ grid-column: span 9 / span 9;
6556
+ }
6557
+
6344
6558
  .md\:-mx-0 {
6345
6559
  margin-left: -0px;
6346
6560
  margin-right: -0px;
@@ -6417,6 +6631,10 @@ input:checked + .toggle-switch .toggle-slider:before {
6417
6631
  grid-template-columns: repeat(3, minmax(0, 1fr));
6418
6632
  }
6419
6633
 
6634
+ .md\:grid-cols-12 {
6635
+ grid-template-columns: repeat(12, minmax(0, 1fr));
6636
+ }
6637
+
6420
6638
  .md\:flex-row {
6421
6639
  flex-direction: row;
6422
6640
  }
@@ -6554,6 +6772,14 @@ input:checked + .toggle-switch .toggle-slider:before {
6554
6772
  grid-template-columns: repeat(4, minmax(0, 1fr));
6555
6773
  }
6556
6774
 
6775
+ .lg\:grid-cols-5 {
6776
+ grid-template-columns: repeat(5, minmax(0, 1fr));
6777
+ }
6778
+
6779
+ .lg\:grid-cols-6 {
6780
+ grid-template-columns: repeat(6, minmax(0, 1fr));
6781
+ }
6782
+
6557
6783
  .lg\:px-8 {
6558
6784
  padding-left: 2rem;
6559
6785
  padding-right: 2rem;
@@ -61,7 +61,6 @@ module EasyAdmin
61
61
  search_field_name = field_name
62
62
 
63
63
  url = easy_admin_url_helpers.suggest_resource_path(resource_name, field: search_field_name)
64
- Rails.logger.debug "BelongsTo suggest URL for #{field_name}: #{url} (resource: #{resource_name}, field: #{search_field_name})"
65
64
  url
66
65
  end
67
66