plutonium 0.44.0 → 0.45.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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/skills/plutonium/skill.md +88 -11
  3. data/.claude/skills/plutonium-assets/SKILL.md +1 -1
  4. data/.claude/skills/plutonium-controller/SKILL.md +6 -2
  5. data/.claude/skills/plutonium-create-resource/SKILL.md +1 -1
  6. data/.claude/skills/plutonium-definition/SKILL.md +445 -53
  7. data/.claude/skills/plutonium-definition-actions/SKILL.md +2 -2
  8. data/.claude/skills/plutonium-definition-query/SKILL.md +2 -2
  9. data/.claude/skills/plutonium-forms/SKILL.md +6 -2
  10. data/.claude/skills/plutonium-installation/SKILL.md +3 -3
  11. data/.claude/skills/plutonium-interaction/SKILL.md +3 -3
  12. data/.claude/skills/plutonium-invites/SKILL.md +1 -1
  13. data/.claude/skills/plutonium-model/SKILL.md +228 -55
  14. data/.claude/skills/plutonium-nested-resources/SKILL.md +9 -2
  15. data/.claude/skills/plutonium-package/SKILL.md +3 -3
  16. data/.claude/skills/plutonium-policy/SKILL.md +6 -2
  17. data/.claude/skills/plutonium-portal/SKILL.md +97 -59
  18. data/.claude/skills/plutonium-profile/SKILL.md +2 -2
  19. data/.claude/skills/plutonium-rodauth/SKILL.md +1 -1
  20. data/.claude/skills/plutonium-theming/SKILL.md +1 -1
  21. data/.claude/skills/plutonium-views/SKILL.md +2 -2
  22. data/CHANGELOG.md +25 -0
  23. data/app/assets/plutonium.css +1 -1
  24. data/gemfiles/rails_7.gemfile.lock +3 -3
  25. data/gemfiles/rails_8.0.gemfile.lock +3 -3
  26. data/gemfiles/rails_8.1.gemfile.lock +3 -3
  27. data/lib/generators/pu/invites/install_generator.rb +2 -2
  28. data/lib/generators/pu/invites/templates/packages/invites/app/views/invites/user_invitations/show.html.erb.tt +7 -7
  29. data/lib/generators/pu/saas/portal_generator.rb +17 -0
  30. data/lib/generators/pu/skills/sync/sync_generator.rb +21 -0
  31. data/lib/plutonium/engine.rb +1 -1
  32. data/lib/plutonium/railtie.rb +1 -1
  33. data/lib/plutonium/ui/form/components/resource_select.rb +1 -1
  34. data/lib/plutonium/ui/form/components/secure_association.rb +2 -2
  35. data/lib/plutonium/ui/form/components/secure_polymorphic_association.rb +6 -11
  36. data/lib/plutonium/version.rb +1 -1
  37. data/package.json +1 -1
  38. data/plutonium.gemspec +1 -1
  39. data/src/css/tokens.css +2 -0
  40. metadata +4 -8
  41. data/.claude/skills/plutonium-connect-resource/SKILL.md +0 -130
  42. data/.claude/skills/plutonium-definition-fields/SKILL.md +0 -535
  43. data/.claude/skills/plutonium-model-features/SKILL.md +0 -286
  44. data/.claude/skills/plutonium-resource/SKILL.md +0 -281
@@ -1,5 +1,5 @@
1
1
  module Plutonium
2
- VERSION = "0.44.0"
2
+ VERSION = "0.45.0"
3
3
  NEXT_MAJOR_VERSION = VERSION.split(".").tap { |v|
4
4
  v[1] = v[1].to_i + 1
5
5
  v[2] = 0
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radioactive-labs/plutonium",
3
- "version": "0.44.0",
3
+ "version": "0.45.0",
4
4
  "description": "Build production-ready Rails apps in minutes, not days. Convention-driven, fully customizable, AI-ready.",
5
5
  "type": "module",
6
6
  "main": "src/js/core.js",
data/plutonium.gemspec CHANGED
@@ -44,7 +44,7 @@ Gem::Specification.new do |spec|
44
44
  spec.add_dependency "phlex-rails"
45
45
  spec.add_dependency "phlex-tabler_icons"
46
46
  spec.add_dependency "phlexi-field", ">= 0.2.0"
47
- spec.add_dependency "phlexi-form", ">= 0.14.1"
47
+ spec.add_dependency "phlexi-form", ">= 0.14.2"
48
48
  spec.add_dependency "phlexi-table", ">= 0.2.0"
49
49
  spec.add_dependency "phlexi-display", ">= 0.2.0"
50
50
  spec.add_dependency "phlexi-menu", ">= 0.4.1"
data/src/css/tokens.css CHANGED
@@ -31,6 +31,7 @@
31
31
  --pu-text: #0f172a;
32
32
  --pu-text-muted: #64748b;
33
33
  --pu-text-subtle: #94a3b8;
34
+ --pu-text-danger: #dc2626;
34
35
 
35
36
  /* ===================
36
37
  Table Tokens - Clean minimal design
@@ -116,6 +117,7 @@
116
117
  --pu-text: #f8fafc;
117
118
  --pu-text-muted: #94a3b8;
118
119
  --pu-text-subtle: #64748b;
120
+ --pu-text-danger: #f87171;
119
121
 
120
122
  /* ===================
121
123
  Table Tokens (Dark)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plutonium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.44.0
4
+ version: 0.45.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Froelich
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-03-30 00:00:00.000000000 Z
10
+ date: 2026-04-01 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: zeitwerk
@@ -183,14 +183,14 @@ dependencies:
183
183
  requirements:
184
184
  - - ">="
185
185
  - !ruby/object:Gem::Version
186
- version: 0.14.1
186
+ version: 0.14.2
187
187
  type: :runtime
188
188
  prerelease: false
189
189
  version_requirements: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - ">="
192
192
  - !ruby/object:Gem::Version
193
- version: 0.14.1
193
+ version: 0.14.2
194
194
  - !ruby/object:Gem::Dependency
195
195
  name: phlexi-table
196
196
  requirement: !ruby/object:Gem::Requirement
@@ -400,25 +400,21 @@ extra_rdoc_files: []
400
400
  files:
401
401
  - "# Plutonium: The pre-alpha demo.md"
402
402
  - ".claude/skills/plutonium-assets/SKILL.md"
403
- - ".claude/skills/plutonium-connect-resource/SKILL.md"
404
403
  - ".claude/skills/plutonium-controller/SKILL.md"
405
404
  - ".claude/skills/plutonium-create-resource/SKILL.md"
406
405
  - ".claude/skills/plutonium-definition-actions/SKILL.md"
407
- - ".claude/skills/plutonium-definition-fields/SKILL.md"
408
406
  - ".claude/skills/plutonium-definition-query/SKILL.md"
409
407
  - ".claude/skills/plutonium-definition/SKILL.md"
410
408
  - ".claude/skills/plutonium-forms/SKILL.md"
411
409
  - ".claude/skills/plutonium-installation/SKILL.md"
412
410
  - ".claude/skills/plutonium-interaction/SKILL.md"
413
411
  - ".claude/skills/plutonium-invites/SKILL.md"
414
- - ".claude/skills/plutonium-model-features/SKILL.md"
415
412
  - ".claude/skills/plutonium-model/SKILL.md"
416
413
  - ".claude/skills/plutonium-nested-resources/SKILL.md"
417
414
  - ".claude/skills/plutonium-package/SKILL.md"
418
415
  - ".claude/skills/plutonium-policy/SKILL.md"
419
416
  - ".claude/skills/plutonium-portal/SKILL.md"
420
417
  - ".claude/skills/plutonium-profile/SKILL.md"
421
- - ".claude/skills/plutonium-resource/SKILL.md"
422
418
  - ".claude/skills/plutonium-rodauth/SKILL.md"
423
419
  - ".claude/skills/plutonium-theming/SKILL.md"
424
420
  - ".claude/skills/plutonium-views/SKILL.md"
@@ -1,130 +0,0 @@
1
- ---
2
- name: plutonium-connect-resource
3
- description: Connect existing resources to portals for web access
4
- ---
5
-
6
- # Connect Resource Skill
7
-
8
- Use the `pu:res:conn` generator to connect resources to portals. This is required to expose resources through a portal's web interface.
9
-
10
- ## Command Syntax
11
-
12
- ```bash
13
- rails g pu:res:conn RESOURCE [RESOURCE...] --dest=PORTAL_NAME [--singular]
14
- ```
15
-
16
- **Always specify resources directly** - this avoids interactive prompts. The `--src` option is only needed for interactive mode and can be ignored.
17
-
18
- ### Options
19
-
20
- | Option | Description |
21
- |--------|-------------|
22
- | `--dest=NAME` | Target portal package (required) |
23
- | `--singular` | Register as a singular resource (e.g., profile, dashboard) |
24
-
25
- ## Usage Patterns
26
-
27
- ### Main App Resources (not in a package)
28
-
29
- ```bash
30
- rails g pu:res:conn PropertyAmenity --dest=admin_portal
31
- rails g pu:res:conn Post Comment Tag --dest=dashboard_portal
32
- ```
33
-
34
- ### Namespaced Resources (from a feature package)
35
-
36
- Use the full class name:
37
-
38
- ```bash
39
- rails g pu:res:conn Blogging::Post --dest=admin_portal
40
- rails g pu:res:conn Blogging::Post Blogging::Comment --dest=admin_portal
41
- ```
42
-
43
- ### Multiple Resources at Once
44
-
45
- ```bash
46
- rails g pu:res:conn Property PropertyAmenity Unit Tenant --dest=admin_portal
47
- ```
48
-
49
- ### Singular Resources
50
-
51
- For resources that represent a single record per user (e.g., profile, dashboard, settings):
52
-
53
- ```bash
54
- rails g pu:res:conn Profile --dest=customer_portal --singular
55
- ```
56
-
57
- This registers the resource with `singular: true`, generating routes like `/profile` instead of `/profiles/:id`.
58
-
59
- ## What Gets Generated
60
-
61
- For a resource `Post` connected to `admin_portal`:
62
-
63
- ```
64
- packages/admin_portal/
65
- ├── app/
66
- │ ├── controllers/admin_portal/
67
- │ │ └── posts_controller.rb # Portal controller
68
- │ ├── policies/admin_portal/
69
- │ │ └── post_policy.rb # Portal policy (if needed)
70
- │ └── definitions/admin_portal/
71
- │ └── post_definition.rb # Portal definition (if needed)
72
- └── config/
73
- └── routes.rb # Updated with register_resource
74
- ```
75
-
76
- ### Generated Controller
77
-
78
- ```ruby
79
- class AdminPortal::PostsController < ::PostsController
80
- include AdminPortal::Concerns::Controller
81
- end
82
- ```
83
-
84
- ### Generated Policy
85
-
86
- ```ruby
87
- class AdminPortal::PostPolicy < ::PostPolicy
88
- include AdminPortal::ResourcePolicy
89
-
90
- def permitted_attributes_for_create
91
- [:title, :content, :user_id]
92
- end
93
-
94
- def permitted_attributes_for_read
95
- [:title, :content, :user_id, :created_at, :updated_at]
96
- end
97
-
98
- def permitted_associations
99
- %i[]
100
- end
101
- end
102
- ```
103
-
104
- ### Route Registration
105
-
106
- ```ruby
107
- # In packages/admin_portal/config/routes.rb
108
- register_resource ::Post
109
- register_resource ::Profile, singular: true # With --singular
110
- ```
111
-
112
- ## Typical Workflow
113
-
114
- ```bash
115
- # 1. Create resources (always specify --dest)
116
- rails g pu:res:scaffold Post user:belongs_to title:string 'content:text?' --dest=main_app
117
-
118
- # 2. Run migrations
119
- rails db:migrate
120
-
121
- # 3. Connect resources to portal (always specify --dest)
122
- rails g pu:res:conn Post --dest=admin_portal
123
- ```
124
-
125
- ## Important Notes
126
-
127
- 1. **Always specify resources directly** - avoids prompts, no `--src` needed
128
- 2. **Always use the generator** - never manually connect resources
129
- 3. **Run after migrations** - the generator reads model columns for policy attributes
130
- 4. **Portal-specific customization** - customize the generated policy/definition per-portal