plutonium 0.59.0 → 0.60.1

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/skills/plutonium-auth/SKILL.md +8 -2
  3. data/.claude/skills/plutonium-ui/SKILL.md +12 -0
  4. data/CHANGELOG.md +15 -0
  5. data/app/assets/plutonium.css +1 -1
  6. data/docs/reference/auth/accounts.md +7 -0
  7. data/docs/reference/configuration.md +1 -1
  8. data/docs/reference/resource/definition.md +129 -0
  9. data/docs/reference/ui/forms.md +51 -21
  10. data/docs/reference/ui/layouts.md +37 -1
  11. data/docs/superpowers/plans/2026-06-14-form-sectioning.md +926 -0
  12. data/docs/superpowers/plans/2026-06-14-form-sectioning.md.tasks.json +40 -0
  13. data/docs/superpowers/plans/2026-06-14-railless-portal.md +761 -0
  14. data/docs/superpowers/plans/2026-06-14-railless-portal.md.tasks.json +51 -0
  15. data/docs/superpowers/specs/2026-06-14-form-sectioning-design.md +247 -0
  16. data/docs/superpowers/specs/2026-06-14-railless-portal-design.md +275 -0
  17. data/gemfiles/rails_7.gemfile.lock +1 -1
  18. data/gemfiles/rails_8.0.gemfile.lock +1 -1
  19. data/gemfiles/rails_8.1.gemfile.lock +1 -1
  20. data/lib/generators/pu/core/install/templates/config/initializers/plutonium.rb +1 -0
  21. data/lib/generators/pu/rodauth/admin_generator.rb +5 -2
  22. data/lib/generators/pu/rodauth/migration_generator.rb +1 -1
  23. data/lib/generators/pu/rodauth/templates/app/interactions/resend_admin_interaction.rb.tt +18 -0
  24. data/lib/generators/pu/rodauth/views_generator.rb +1 -1
  25. data/lib/plutonium/auth/rodauth.rb +2 -1
  26. data/lib/plutonium/configuration.rb +2 -1
  27. data/lib/plutonium/core/controller.rb +19 -0
  28. data/lib/plutonium/definition/base.rb +1 -0
  29. data/lib/plutonium/definition/form_layout.rb +143 -0
  30. data/lib/plutonium/interaction/base.rb +1 -0
  31. data/lib/plutonium/package/engine.rb +17 -7
  32. data/lib/plutonium/ui/form/components/section.rb +58 -0
  33. data/lib/plutonium/ui/form/components/sticky_footer.rb +1 -1
  34. data/lib/plutonium/ui/form/resource.rb +85 -7
  35. data/lib/plutonium/ui/layout/base.rb +5 -0
  36. data/lib/plutonium/ui/layout/resource_layout.rb +22 -6
  37. data/lib/plutonium/ui/layout/topbar.rb +1 -1
  38. data/lib/plutonium/version.rb +1 -1
  39. data/package.json +1 -1
  40. data/src/css/components.css +9 -0
  41. data/src/css/slim_select.css +11 -2
  42. metadata +11 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dfbb1eb8e3b796aa9ef55595aa4fc0a475f4a5f084388f0aebd4bf76eec468ae
4
- data.tar.gz: 8b15084a3c2a0ef577cd7b88fe2ebc1666d274fd0effa28227c674c722a16b09
3
+ metadata.gz: 371d9fea402116abc683c5a86c2a23ff54d6e093a5d5d64860a905cd2fb64b72
4
+ data.tar.gz: 6fc951e3e6ab822ee42c17ee843b0373b185e9e2d54b63c68906391bae04d07b
5
5
  SHA512:
6
- metadata.gz: e75d7e2efadc2c1ff0bb2d57d979604fff1e7ffef6c8ecbb7635f4aeafb13716852932bfd439bc444f79404f4cf106ee203dc0d525c06b5d9d13b6536c8f82fb
7
- data.tar.gz: 548b3f3b61d032c540847982e31e7734aed74b47b4cdce1867207c49bba7b3981e0de367955d3eed2d74a679187238deb8226913b396d6714002ba6dc42b7757
6
+ metadata.gz: e3b2bbce710220fe7cdaab63cb0b35c5b271cf4c07fe246fbc6a5a96cc178b1b223947150e547bc763c5adb59454d685e50984e6978a7427813d2f8182f72fdc
7
+ data.tar.gz: c243e2aa38c0ca4942655791b6a9ed8efc1e037d90ec63c1f07e1051ef4fe7fc8abf1b12af5dcb916632c301eb3eb9bdb3c7d7f4818a347992fac3a5ecc142e2
@@ -70,7 +70,7 @@ rails generate pu:rodauth:account user [options]
70
70
 
71
71
  ### Admin account — `pu:rodauth:admin`
72
72
 
73
- Pre-configured secure admin with multi-phase login, required TOTP, recovery codes, lockout, active session tracking, audit logging, role-based access, invite interaction, and **no public signup**.
73
+ Pre-configured secure admin with multi-phase login, required TOTP, recovery codes, lockout, active session tracking, audit logging, role-based access, invite + resend-invite interactions, and **no public signup**.
74
74
 
75
75
  ```bash
76
76
  rails generate pu:rodauth:admin admin
@@ -89,6 +89,12 @@ rails generate pu:rodauth:admin admin --extra-attributes=name:string,department:
89
89
  enum :role, super_admin: 0, admin: 1
90
90
  ```
91
91
 
92
+ **Invite + resend actions.** The admin resource gets two actions:
93
+ - **Invite** — invite a new admin by email; they set their password via the verification link.
94
+ - **Resend invitation** — re-send that verification email, shown only for admins who haven't verified yet.
95
+
96
+ This is Rodauth account verification — distinct from the tenancy invitation system (see [[plutonium-tenancy]]).
97
+
92
98
  Rake task for direct admin creation (namespace is `rodauth`, task name is the account name):
93
99
 
94
100
  ```bash
@@ -170,7 +176,7 @@ class AdminController < PlutoniumController
170
176
  end
171
177
  ```
172
178
 
173
- `Plutonium::Auth::Rodauth(:name)` exposes `current_user`, `logout_url`, and `rodauth` in the controller.
179
+ `Plutonium::Auth::Rodauth(:name)` exposes `current_user`, `logout_url`, and `rodauth` in the controller. It also adds a named accessor `current_<name>` aliased to `current_user` — e.g. `Rodauth(:admin)` gives `current_admin`. Read the signed-in account with `current_user` or its named alias (e.g. `current_admin`).
174
180
 
175
181
  For portal wiring (`AdminPortal::Concerns::Controller`), see [[plutonium-app]] › Portal controller concern.
176
182
 
@@ -501,10 +501,22 @@ Show pages with `permitted_associations` (see [[plutonium-behavior]]) render a t
501
501
  ```ruby
502
502
  Plutonium.configure do |config|
503
503
  config.shell = :modern # default — topbar + icon rail
504
+ # config.shell = :plain # topbar, no icon rail (whole app rail-less)
504
505
  # config.shell = :classic # legacy header + sidebar (only when upgrading)
505
506
  end
506
507
  ```
507
508
 
509
+ `:plain` keeps the Topbar but drops the icon rail. Override per-controller (and so per-portal, since it's an inherited `class_attribute`) with the `rail` DSL — `rail false` / `rail true`; `rail nil` (default) inherits the shell default, `rail?` reads the resolved value:
510
+
511
+ ```ruby
512
+ module CustomerPortal::Concerns::Controller
513
+ extend ActiveSupport::Concern
514
+ included { rail false } # entire portal rail-less
515
+ end
516
+ ```
517
+
518
+ Stable CSS hooks for rail-less overrides: `pu-topbar` (Topbar nav), `pu-sticky-footer` (form footer), and the `html.pu-no-rail` root class. A built-in rule cancels the desktop rail inset on the first two under `html.pu-no-rail`.
519
+
508
520
  ## Eject the chrome for per-portal customization
509
521
 
510
522
  ```bash
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## [0.60.1] - 2026-06-15
2
+
3
+ ### 🚀 Features
4
+
5
+ - *(layout)* First-class railless portal support
6
+
7
+ ### 🐛 Bug Fixes
8
+
9
+ - *(forms)* Skip section fields not in the permitted set instead of raising
10
+ ## [0.60.0] - 2026-06-14
11
+
12
+ ### 🚀 Features
13
+
14
+ - *(generators)* Add resend-invite action to rodauth admin
15
+ - *(forms)* Form sectioning DSL (form_layout / section / ungrouped) (#61)
1
16
  ## [0.59.0] - 2026-06-13
2
17
 
3
18
  ### 🚀 Features