plutonium 0.11.2 → 0.12.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b6352f5ac97d4869094c4226b8e1327cd4ba4bcb63b2cc465ff54353a44a4e6
4
- data.tar.gz: 071752cc007fabe87d5a79c3c06e5357bcde3e01addba212d94cdb51c7a201df
3
+ metadata.gz: b2d283bb447f847e5572c33aa15dafa3dd859314e49beeebcd6d4ed43eb0fe15
4
+ data.tar.gz: c93d18374cb47f049bd8218d43c46fe66df9a83d7e10595f30f58715fee28274
5
5
  SHA512:
6
- metadata.gz: e7efd694295f349c4008a3c3add37c12d5c04c5e9e1ca0e650d4c453aa3931ebe3d9245c7c2a9e78f3a85ef30ca20bf05ac746c19d3123b6e24f995dbd9e906a
7
- data.tar.gz: 055c209e6b2e5b568863e950b0203f308e132ba9d2c6a9ecda62e3874d977fc777f4007c90e049bb01b0d7c6d8b80a351c39678dd65d18275314b8c7e6042007
6
+ metadata.gz: 178c4d95219eade116c333efbe8bbde980176ce4e4d93d1641ccae7e9a19ad1e7d1aa4394513f3466c7f7f9491a48bc4009c8ce3032a04d7a9bda27dde56c07a
7
+ data.tar.gz: db5b8b26c501faa4c25e7508775673f5553f567a67c78a7930a3d68b8354d7a4734fff6b9996dd2ed53a31e4f955c73b921f91ec5c360ede2b4469372d6cbe94
@@ -0,0 +1,287 @@
1
+ <%# locals: (sidebar_toggle:) %>
2
+
3
+ <%= render_component :resource_header, sidebar_toggle: do |header| %>
4
+ <% header.with_action do %>
5
+ <%=
6
+ render_component :nav_grid_menu, label: "Apps" do |menu|
7
+ menu.with_item url: "#", name: "Sales", icon: "outline/sale-percent"
8
+ menu.with_item url: "#", name: "Users", icon: "outline/users"
9
+ end
10
+ %>
11
+ <% end %>
12
+
13
+ <% header.with_action do %>
14
+ <%= render_component :nav_user, email: current_user.email, logout_url: try(:logout_url) do |nav_user| %>
15
+ <% nav_user.with_section do |section| %>
16
+ <% section.with_link url: "#", label: "My profile" %>
17
+ <% section.with_link url: "#", label: "Account settings" %>
18
+ <% end %>
19
+
20
+ <% nav_user.with_section do |section| %>
21
+ <% section.with_link url: "#", label: "My likes" do |link| %>
22
+ <% link.with_leading do %>
23
+ <%= render_icon "outline/heart", classname: "mr-2 text-gray-400" %>
24
+ <% end %>
25
+ <% end %>
26
+
27
+ <% section.with_link url: "#", label: "Pro version" do |link| %>
28
+ <% link.with_leading do %>
29
+ <%= render_icon "outline/fire", classname: "mr-2 text-primary-600 dark:text-primary-500" %>
30
+ <% end %>
31
+ <% link.with_trailing do %>
32
+ <%= render_icon "outline/angle-right", size: :sm %>
33
+ <% end %>
34
+ <% end %>
35
+ <% end %>
36
+ <% end %>
37
+ <% end %>
38
+
39
+ <%#
40
+
41
+ <!-- Notifications -->
42
+ <div data-controller="resource-drop-down">
43
+ <button
44
+ type="button"
45
+ data-resource-drop-down-target="trigger"
46
+ class="p-2 mr-1 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">
47
+ <span class="sr-only">View notifications</span>
48
+ <!-- Bell icon -->
49
+ <svg
50
+ aria-hidden="true"
51
+ class="w-6 h-6"
52
+ fill="currentColor"
53
+ viewBox="0 0 20 20"
54
+ xmlns="http://www.w3.org/2000/svg">
55
+ <path
56
+ d="M10 2a6 6 0 00-6 6v3.586l-.707.707A1 1 0 004 14h12a1 1 0 00.707-1.707L16 11.586V8a6 6 0 00-6-6zM10 18a3 3 0 01-3-3h6a3 3 0 01-3 3z"></path>
57
+ </svg>
58
+ </button>
59
+ <!-- Dropdown menu -->
60
+ <div
61
+ data-resource-drop-down-target="menu"
62
+ 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:divide-gray-600 dark:bg-gray-700 rounded-xl">
63
+ <div
64
+ 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">
65
+ Notifications
66
+ </div>
67
+ <div>
68
+ <a
69
+ href="#"
70
+ class="flex py-3 px-4 border-b hover:bg-gray-100 dark:hover:bg-gray-600 dark:border-gray-600">
71
+ <div class="shrink-0">
72
+ <img
73
+ class="w-11 h-11 rounded-full"
74
+ src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/bonnie-green.png"
75
+ alt="Bonnie Green avatar"
76
+ />
77
+ <div
78
+ class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 rounded-full border border-white bg-primary-700 dark:border-gray-700">
79
+ <svg
80
+ aria-hidden="true"
81
+ class="w-3 h-3 text-white"
82
+ fill="currentColor"
83
+ viewBox="0 0 20 20"
84
+ xmlns="http://www.w3.org/2000/svg">
85
+ <path
86
+ d="M8.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l2-2a1 1 0 00-1.414-1.414L11 7.586V3a1 1 0 10-2 0v4.586l-.293-.293z"></path>
87
+ <path
88
+ d="M3 5a2 2 0 012-2h1a1 1 0 010 2H5v7h2l1 2h4l1-2h2V5h-1a1 1 0 110-2h1a2 2 0 012 2v10a2 2 0 01-2 2H5a2 2 0 01-2-2V5z"></path>
89
+ </svg>
90
+ </div>
91
+ </div>
92
+ <div class="pl-3 w-full">
93
+ <div
94
+ class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
95
+ New message from
96
+ <span class="font-semibold text-gray-900 dark:text-white"
97
+ >Bonnie Green</span
98
+ >: "Hey, what's up? All set for the presentation?"
99
+ </div>
100
+ <div
101
+ class="text-xs font-medium text-primary-600 dark:text-primary-500">
102
+ a few moments ago
103
+ </div>
104
+ </div>
105
+ </a>
106
+ <a
107
+ href="#"
108
+ class="flex py-3 px-4 border-b hover:bg-gray-100 dark:hover:bg-gray-600 dark:border-gray-600">
109
+ <div class="shrink-0">
110
+ <img
111
+ class="w-11 h-11 rounded-full"
112
+ src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/jese-leos.png"
113
+ alt="Jese Leos avatar"
114
+ />
115
+ <div
116
+ class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 bg-gray-900 rounded-full border border-white dark:border-gray-700">
117
+ <svg
118
+ aria-hidden="true"
119
+ class="w-3 h-3 text-white"
120
+ fill="currentColor"
121
+ viewBox="0 0 20 20"
122
+ xmlns="http://www.w3.org/2000/svg">
123
+ <path
124
+ d="M8 9a3 3 0 100-6 3 3 0 000 6zM8 11a6 6 0 016 6H2a6 6 0 016-6zM16 7a1 1 0 10-2 0v1h-1a1 1 0 100 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2h-1V7z"></path>
125
+ </svg>
126
+ </div>
127
+ </div>
128
+ <div class="pl-3 w-full">
129
+ <div
130
+ class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
131
+ <span class="font-semibold text-gray-900 dark:text-white"
132
+ >Jese leos</span>
133
+ and
134
+ <span class="font-medium text-gray-900 dark:text-white"
135
+ >5 others</span>
136
+ started following you.
137
+ </div>
138
+ <div
139
+ class="text-xs font-medium text-primary-600 dark:text-primary-500">
140
+ 10 minutes ago
141
+ </div>
142
+ </div>
143
+ </a>
144
+ <a
145
+ href="#"
146
+ class="flex py-3 px-4 border-b hover:bg-gray-100 dark:hover:bg-gray-600 dark:border-gray-600">
147
+ <div class="shrink-0">
148
+ <img
149
+ class="w-11 h-11 rounded-full"
150
+ src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/joseph-mcfall.png"
151
+ alt="Joseph McFall avatar"
152
+ />
153
+ <div
154
+ class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 bg-red-600 rounded-full border border-white dark:border-gray-700">
155
+ <svg
156
+ aria-hidden="true"
157
+ class="w-3 h-3 text-white"
158
+ fill="currentColor"
159
+ viewBox="0 0 20 20"
160
+ xmlns="http://www.w3.org/2000/svg">
161
+ <path
162
+ fill-rule="evenodd"
163
+ d="M3.172 5.172a4 4 0 015.656 0L10 6.343l1.172-1.171a4 4 0 115.656 5.656L10 17.657l-6.828-6.829a4 4 0 010-5.656z"
164
+ clip-rule="evenodd"
165
+ ></path>
166
+ </svg>
167
+ </div>
168
+ </div>
169
+ <div class="pl-3 w-full">
170
+ <div
171
+ class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
172
+ <span class="font-semibold text-gray-900 dark:text-white"
173
+ >Joseph Mcfall</span>
174
+ and
175
+ <span class="font-medium text-gray-900 dark:text-white"
176
+ >141 others</span>
177
+ love your story. See it and view more stories.
178
+ </div>
179
+ <div
180
+ class="text-xs font-medium text-primary-600 dark:text-primary-500">
181
+ 44 minutes ago
182
+ </div>
183
+ </div>
184
+ </a>
185
+ <a
186
+ href="#"
187
+ class="flex py-3 px-4 border-b hover:bg-gray-100 dark:hover:bg-gray-600 dark:border-gray-600">
188
+ <div class="shrink-0">
189
+ <img
190
+ class="w-11 h-11 rounded-full"
191
+ src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/roberta-casas.png"
192
+ alt="Roberta Casas image"
193
+ />
194
+ <div
195
+ class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 bg-green-400 rounded-full border border-white dark:border-gray-700">
196
+ <svg
197
+ aria-hidden="true"
198
+ class="w-3 h-3 text-white"
199
+ fill="currentColor"
200
+ viewBox="0 0 20 20"
201
+ xmlns="http://www.w3.org/2000/svg">
202
+ <path
203
+ fill-rule="evenodd"
204
+ d="M18 13V5a2 2 0 00-2-2H4a2 2 0 00-2 2v8a2 2 0 002 2h3l3 3 3-3h3a2 2 0 002-2zM5 7a1 1 0 011-1h8a1 1 0 110 2H6a1 1 0 01-1-1zm1 3a1 1 0 100 2h3a1 1 0 100-2H6z"
205
+ clip-rule="evenodd"></path>
206
+ </svg>
207
+ </div>
208
+ </div>
209
+ <div class="pl-3 w-full">
210
+ <div
211
+ class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
212
+ <span class="font-semibold text-gray-900 dark:text-white"
213
+ >Leslie Livingston</span>
214
+ mentioned you in a comment:
215
+ <span
216
+ class="font-medium text-primary-600 dark:text-primary-500"
217
+ >@bonnie.green</span>
218
+ what do you say?
219
+ </div>
220
+ <div
221
+ class="text-xs font-medium text-primary-600 dark:text-primary-500">
222
+ 1 hour ago
223
+ </div>
224
+ </div>
225
+ </a>
226
+ <a
227
+ href="#"
228
+ class="flex py-3 px-4 hover:bg-gray-100 dark:hover:bg-gray-600">
229
+ <div class="shrink-0">
230
+ <img
231
+ class="w-11 h-11 rounded-full"
232
+ src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/robert-brown.png"
233
+ alt="Robert image"
234
+ />
235
+ <div
236
+ class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 bg-purple-500 rounded-full border border-white dark:border-gray-700">
237
+ <svg
238
+ aria-hidden="true"
239
+ class="w-3 h-3 text-white"
240
+ fill="currentColor"
241
+ viewBox="0 0 20 20"
242
+ xmlns="http://www.w3.org/2000/svg">
243
+ <path
244
+ d="M2 6a2 2 0 012-2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6zM14.553 7.106A1 1 0 0014 8v4a1 1 0 00.553.894l2 1A1 1 0 0018 13V7a1 1 0 00-1.447-.894l-2 1z"
245
+ ></path>
246
+ </svg>
247
+ </div>
248
+ </div>
249
+ <div class="pl-3 w-full">
250
+ <div
251
+ class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
252
+ <span class="font-semibold text-gray-900 dark:text-white"
253
+ >Robert Brown</span>
254
+ posted a new video: Glassmorphism - learn how to implement
255
+ the new design trend.
256
+ </div>
257
+ <div
258
+ class="text-xs font-medium text-primary-600 dark:text-primary-500">
259
+ 3 hours ago
260
+ </div>
261
+ </div>
262
+ </a>
263
+ </div>
264
+ <a
265
+ href="#"
266
+ class="block py-2 text-md font-medium text-center text-gray-900 bg-gray-50 hover:bg-gray-100 dark:bg-gray-600 dark:text-white dark:hover:underline">
267
+ <div class="inline-flex items-center">
268
+ <svg
269
+ aria-hidden="true"
270
+ class="mr-2 w-4 h-4 text-gray-500 dark:text-gray-200"
271
+ fill="currentColor"
272
+ viewBox="0 0 20 20"
273
+ xmlns="http://www.w3.org/2000/svg">
274
+ <path d="M10 12a2 2 0 100-4 2 2 0 000 4z"></path>
275
+ <path
276
+ fill-rule="evenodd"
277
+ d="M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z"
278
+ clip-rule="evenodd"></path>
279
+ </svg>
280
+ View all
281
+ </div>
282
+ </a>
283
+ </div>
284
+ </div>
285
+
286
+ %>
287
+ <% end %>
@@ -35,253 +35,4 @@
35
35
  <% end %>
36
36
  <% end %>
37
37
  <% end %>
38
-
39
- <%#
40
-
41
- <!-- Notifications -->
42
- <div data-controller="resource-drop-down">
43
- <button
44
- type="button"
45
- data-resource-drop-down-target="trigger"
46
- class="p-2 mr-1 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">
47
- <span class="sr-only">View notifications</span>
48
- <!-- Bell icon -->
49
- <svg
50
- aria-hidden="true"
51
- class="w-6 h-6"
52
- fill="currentColor"
53
- viewBox="0 0 20 20"
54
- xmlns="http://www.w3.org/2000/svg">
55
- <path
56
- d="M10 2a6 6 0 00-6 6v3.586l-.707.707A1 1 0 004 14h12a1 1 0 00.707-1.707L16 11.586V8a6 6 0 00-6-6zM10 18a3 3 0 01-3-3h6a3 3 0 01-3 3z"></path>
57
- </svg>
58
- </button>
59
- <!-- Dropdown menu -->
60
- <div
61
- data-resource-drop-down-target="menu"
62
- 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:divide-gray-600 dark:bg-gray-700 rounded-xl">
63
- <div
64
- 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">
65
- Notifications
66
- </div>
67
- <div>
68
- <a
69
- href="#"
70
- class="flex py-3 px-4 border-b hover:bg-gray-100 dark:hover:bg-gray-600 dark:border-gray-600">
71
- <div class="shrink-0">
72
- <img
73
- class="w-11 h-11 rounded-full"
74
- src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/bonnie-green.png"
75
- alt="Bonnie Green avatar"
76
- />
77
- <div
78
- class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 rounded-full border border-white bg-primary-700 dark:border-gray-700">
79
- <svg
80
- aria-hidden="true"
81
- class="w-3 h-3 text-white"
82
- fill="currentColor"
83
- viewBox="0 0 20 20"
84
- xmlns="http://www.w3.org/2000/svg">
85
- <path
86
- d="M8.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l2-2a1 1 0 00-1.414-1.414L11 7.586V3a1 1 0 10-2 0v4.586l-.293-.293z"></path>
87
- <path
88
- d="M3 5a2 2 0 012-2h1a1 1 0 010 2H5v7h2l1 2h4l1-2h2V5h-1a1 1 0 110-2h1a2 2 0 012 2v10a2 2 0 01-2 2H5a2 2 0 01-2-2V5z"></path>
89
- </svg>
90
- </div>
91
- </div>
92
- <div class="pl-3 w-full">
93
- <div
94
- class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
95
- New message from
96
- <span class="font-semibold text-gray-900 dark:text-white"
97
- >Bonnie Green</span
98
- >: "Hey, what's up? All set for the presentation?"
99
- </div>
100
- <div
101
- class="text-xs font-medium text-primary-600 dark:text-primary-500">
102
- a few moments ago
103
- </div>
104
- </div>
105
- </a>
106
- <a
107
- href="#"
108
- class="flex py-3 px-4 border-b hover:bg-gray-100 dark:hover:bg-gray-600 dark:border-gray-600">
109
- <div class="shrink-0">
110
- <img
111
- class="w-11 h-11 rounded-full"
112
- src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/jese-leos.png"
113
- alt="Jese Leos avatar"
114
- />
115
- <div
116
- class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 bg-gray-900 rounded-full border border-white dark:border-gray-700">
117
- <svg
118
- aria-hidden="true"
119
- class="w-3 h-3 text-white"
120
- fill="currentColor"
121
- viewBox="0 0 20 20"
122
- xmlns="http://www.w3.org/2000/svg">
123
- <path
124
- d="M8 9a3 3 0 100-6 3 3 0 000 6zM8 11a6 6 0 016 6H2a6 6 0 016-6zM16 7a1 1 0 10-2 0v1h-1a1 1 0 100 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2h-1V7z"></path>
125
- </svg>
126
- </div>
127
- </div>
128
- <div class="pl-3 w-full">
129
- <div
130
- class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
131
- <span class="font-semibold text-gray-900 dark:text-white"
132
- >Jese leos</span>
133
- and
134
- <span class="font-medium text-gray-900 dark:text-white"
135
- >5 others</span>
136
- started following you.
137
- </div>
138
- <div
139
- class="text-xs font-medium text-primary-600 dark:text-primary-500">
140
- 10 minutes ago
141
- </div>
142
- </div>
143
- </a>
144
- <a
145
- href="#"
146
- class="flex py-3 px-4 border-b hover:bg-gray-100 dark:hover:bg-gray-600 dark:border-gray-600">
147
- <div class="shrink-0">
148
- <img
149
- class="w-11 h-11 rounded-full"
150
- src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/joseph-mcfall.png"
151
- alt="Joseph McFall avatar"
152
- />
153
- <div
154
- class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 bg-red-600 rounded-full border border-white dark:border-gray-700">
155
- <svg
156
- aria-hidden="true"
157
- class="w-3 h-3 text-white"
158
- fill="currentColor"
159
- viewBox="0 0 20 20"
160
- xmlns="http://www.w3.org/2000/svg">
161
- <path
162
- fill-rule="evenodd"
163
- d="M3.172 5.172a4 4 0 015.656 0L10 6.343l1.172-1.171a4 4 0 115.656 5.656L10 17.657l-6.828-6.829a4 4 0 010-5.656z"
164
- clip-rule="evenodd"
165
- ></path>
166
- </svg>
167
- </div>
168
- </div>
169
- <div class="pl-3 w-full">
170
- <div
171
- class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
172
- <span class="font-semibold text-gray-900 dark:text-white"
173
- >Joseph Mcfall</span>
174
- and
175
- <span class="font-medium text-gray-900 dark:text-white"
176
- >141 others</span>
177
- love your story. See it and view more stories.
178
- </div>
179
- <div
180
- class="text-xs font-medium text-primary-600 dark:text-primary-500">
181
- 44 minutes ago
182
- </div>
183
- </div>
184
- </a>
185
- <a
186
- href="#"
187
- class="flex py-3 px-4 border-b hover:bg-gray-100 dark:hover:bg-gray-600 dark:border-gray-600">
188
- <div class="shrink-0">
189
- <img
190
- class="w-11 h-11 rounded-full"
191
- src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/roberta-casas.png"
192
- alt="Roberta Casas image"
193
- />
194
- <div
195
- class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 bg-green-400 rounded-full border border-white dark:border-gray-700">
196
- <svg
197
- aria-hidden="true"
198
- class="w-3 h-3 text-white"
199
- fill="currentColor"
200
- viewBox="0 0 20 20"
201
- xmlns="http://www.w3.org/2000/svg">
202
- <path
203
- fill-rule="evenodd"
204
- d="M18 13V5a2 2 0 00-2-2H4a2 2 0 00-2 2v8a2 2 0 002 2h3l3 3 3-3h3a2 2 0 002-2zM5 7a1 1 0 011-1h8a1 1 0 110 2H6a1 1 0 01-1-1zm1 3a1 1 0 100 2h3a1 1 0 100-2H6z"
205
- clip-rule="evenodd"></path>
206
- </svg>
207
- </div>
208
- </div>
209
- <div class="pl-3 w-full">
210
- <div
211
- class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
212
- <span class="font-semibold text-gray-900 dark:text-white"
213
- >Leslie Livingston</span>
214
- mentioned you in a comment:
215
- <span
216
- class="font-medium text-primary-600 dark:text-primary-500"
217
- >@bonnie.green</span>
218
- what do you say?
219
- </div>
220
- <div
221
- class="text-xs font-medium text-primary-600 dark:text-primary-500">
222
- 1 hour ago
223
- </div>
224
- </div>
225
- </a>
226
- <a
227
- href="#"
228
- class="flex py-3 px-4 hover:bg-gray-100 dark:hover:bg-gray-600">
229
- <div class="shrink-0">
230
- <img
231
- class="w-11 h-11 rounded-full"
232
- src="https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/robert-brown.png"
233
- alt="Robert image"
234
- />
235
- <div
236
- class="flex absolute justify-center items-center ml-6 -mt-5 w-5 h-5 bg-purple-500 rounded-full border border-white dark:border-gray-700">
237
- <svg
238
- aria-hidden="true"
239
- class="w-3 h-3 text-white"
240
- fill="currentColor"
241
- viewBox="0 0 20 20"
242
- xmlns="http://www.w3.org/2000/svg">
243
- <path
244
- d="M2 6a2 2 0 012-2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6zM14.553 7.106A1 1 0 0014 8v4a1 1 0 00.553.894l2 1A1 1 0 0018 13V7a1 1 0 00-1.447-.894l-2 1z"
245
- ></path>
246
- </svg>
247
- </div>
248
- </div>
249
- <div class="pl-3 w-full">
250
- <div
251
- class="text-gray-500 font-normal text-sm mb-1.5 dark:text-gray-200">
252
- <span class="font-semibold text-gray-900 dark:text-white"
253
- >Robert Brown</span>
254
- posted a new video: Glassmorphism - learn how to implement
255
- the new design trend.
256
- </div>
257
- <div
258
- class="text-xs font-medium text-primary-600 dark:text-primary-500">
259
- 3 hours ago
260
- </div>
261
- </div>
262
- </a>
263
- </div>
264
- <a
265
- href="#"
266
- class="block py-2 text-md font-medium text-center text-gray-900 bg-gray-50 hover:bg-gray-100 dark:bg-gray-600 dark:text-white dark:hover:underline">
267
- <div class="inline-flex items-center">
268
- <svg
269
- aria-hidden="true"
270
- class="mr-2 w-4 h-4 text-gray-500 dark:text-gray-200"
271
- fill="currentColor"
272
- viewBox="0 0 20 20"
273
- xmlns="http://www.w3.org/2000/svg">
274
- <path d="M10 12a2 2 0 100-4 2 2 0 000 4z"></path>
275
- <path
276
- fill-rule="evenodd"
277
- d="M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z"
278
- clip-rule="evenodd"></path>
279
- </svg>
280
- View all
281
- </div>
282
- </a>
283
- </div>
284
- </div>
285
-
286
- %>
287
38
  <% end %>
@@ -19,9 +19,9 @@ module PlutoniumUi
19
19
  # @param label [String] The label of the column.
20
20
  # @param search_object [Object] The search object associated with the column.
21
21
  # @param block [Proc] An optional block for additional column customization.
22
- def column(name:, label:, search_object:, &block)
22
+ def column(name:, label:, search_object:, &)
23
23
  @columns ||= []
24
- @columns << Column.new(name:, label:, search_object:, &block)
24
+ @columns << Column.new(name:, label:, search_object:, &)
25
25
  end
26
26
 
27
27
  # Returns the base attributes for the table.
@@ -12,16 +12,16 @@ module Pu
12
12
  desc "Set up the base requirements for Plutonium"
13
13
 
14
14
  def start
15
- setup_packaging_system
16
- install_required_gems
15
+ setup_packages
17
16
  setup_app
17
+ eject_views
18
18
  rescue => e
19
19
  exception "#{self.class} failed:", e
20
20
  end
21
21
 
22
22
  private
23
23
 
24
- def setup_packaging_system
24
+ def setup_packages
25
25
  copy_file "config/packages.rb"
26
26
  create_file "packages/.keep"
27
27
  insert_into_file "config/application.rb", "\nrequire_relative \"packages\"\n", after: /Bundler\.require.*\n/
@@ -36,10 +36,10 @@ module Pu
36
36
  environment "# config.plutonium.assets.logo = \"logo.png\""
37
37
  end
38
38
 
39
- def install_required_gems
40
- # invoke "pu:gem:simple_form"
41
- # invoke "pu:gem:pagy"
42
- # invoke "pu:gem:rabl"
39
+ def eject_views
40
+ invoke "pu:eject:layout", [], dest: "main_app",
41
+ force: options[:force],
42
+ skip: options[:skip]
43
43
  end
44
44
  end
45
45
  end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../lib/plutonium_generators"
4
+
5
+ module Pu
6
+ module Eject
7
+ class LayoutGenerator < Rails::Generators::Base
8
+ include PlutoniumGenerators::Generator
9
+
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ desc "Eject layout views into your own project"
13
+
14
+ class_option :dest, type: :string
15
+ class_option :rodauth, type: :boolean
16
+
17
+ def start
18
+ destination_dir = (destination_app == "main_app") ? "app/views/" : "packages/#{destination_app}/app/views/#{destination_app}"
19
+ [
20
+ "layouts/resource.html.erb"
21
+ ].each do |file|
22
+ copy_file Plutonium.root.join("app", "views", file), Rails.root.join(destination_dir)
23
+ end
24
+ rescue => e
25
+ exception "#{self.class} failed:", e
26
+ end
27
+
28
+ private
29
+
30
+ def destination_app
31
+ @destination_app || select_app(options[:dest], msg: "Select destination app")
32
+ end
33
+
34
+ def copy_file(source_path, destination_path)
35
+ if File.exist?(source_path)
36
+ FileUtils.cp(source_path, destination_path)
37
+ say_status("info", "Copied #{source_path} to #{destination_path}", :green)
38
+ else
39
+ say_status("error", "Source file #{source_path} does not exist", :red)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../lib/plutonium_generators"
4
+
5
+ module Pu
6
+ module Eject
7
+ class ShellGenerator < Rails::Generators::Base
8
+ include PlutoniumGenerators::Generator
9
+
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ desc "Eject layout shell (i.e header, sidebar) into your own project"
13
+
14
+ class_option :dest, type: :string
15
+
16
+ def start
17
+ destination_dir = (destination_app == "main_app") ? "app/views/" : "packages/#{destination_app}/app/views/#{destination_app}"
18
+ [
19
+ "application/_resource_header.html.erb",
20
+ "application/_resource_sidebar.html.erb"
21
+ ].each do |file|
22
+ copy_file Plutonium.root.join("app", "views", file), Rails.root.join(destination_dir)
23
+ end
24
+ rescue => e
25
+ exception "#{self.class} failed:", e
26
+ end
27
+
28
+ private
29
+
30
+ def destination_app
31
+ @destination_app || select_app(options[:dest], msg: "Select destination app")
32
+ end
33
+
34
+ def copy_file(source_path, destination_path)
35
+ if File.exist?(source_path)
36
+ FileUtils.cp(source_path, destination_path)
37
+ say_status("info", "Copied #{source_path} to #{destination_path}", :green)
38
+ else
39
+ say_status("error", "Source file #{source_path} does not exist", :red)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -34,7 +34,7 @@ module PlutoniumGenerators
34
34
  end
35
35
 
36
36
  def available_apps
37
- @available_apps ||= available_packages.select { |pkg| pkg.ends_with? "_app" }
37
+ @available_apps ||= ["main_app"] + available_packages.select { |pkg| pkg.ends_with? "_app" }
38
38
  end
39
39
 
40
40
  def available_features
@@ -4,7 +4,7 @@ require "rails/generators"
4
4
  require "rails/generators/active_record/model/model_generator"
5
5
 
6
6
  module PlutoniumGenerators
7
- class ModelGenerator < ActiveRecord::Generators::ModelGenerator
7
+ class ModelGeneratorBase < ActiveRecord::Generators::ModelGenerator
8
8
  include PlutoniumGenerators::Generator
9
9
 
10
10
  remove_hook_for :test_framework
@@ -41,27 +41,27 @@ module PlutoniumGenerators
41
41
  def name
42
42
  @pu_name ||= begin
43
43
  @original_name = @name
44
- @selected_feature = select_feature selected_feature
45
- @name = [main_app? ? nil : selected_feature.underscore, super.singularize.underscore].compact.join "/"
44
+ @selected_destination_feature = select_feature selected_destination_feature, msg: "Select destination feature"
45
+ @name = [main_app? ? nil : selected_destination_feature.underscore, super.singularize.underscore].compact.join "/"
46
46
  set_destination_root!
47
47
  @name
48
48
  end
49
49
  end
50
50
 
51
51
  def feature_package_name
52
- main_app? ? nil : selected_feature.camelize
52
+ main_app? ? nil : selected_destination_feature.camelize
53
53
  end
54
54
 
55
55
  def main_app?
56
- selected_feature == "main_app"
56
+ selected_destination_feature == "main_app"
57
57
  end
58
58
 
59
- def selected_feature
60
- @selected_feature || options[:dest]
59
+ def selected_destination_feature
60
+ @selected_destination_feature || options[:dest]
61
61
  end
62
62
 
63
63
  def set_destination_root!
64
- @destination_stack = [File.join(Rails.root, main_app? ? "" : "packages/#{selected_feature.underscore}")]
64
+ @destination_stack = [File.join(Rails.root, main_app? ? "" : "packages/#{selected_destination_feature.underscore}")]
65
65
  end
66
66
 
67
67
  # https://github.com/rails/rails/blob/main/railties/lib/rails/generators/generated_attribute.rb#L7
@@ -42,6 +42,10 @@ module Pu
42
42
  directory "app/#{dir}", "packages/#{package_namespace}/app/#{dir}/#{package_namespace}"
43
43
  end
44
44
  create_file "packages/#{package_namespace}/app/views/#{package_namespace}/.keep"
45
+
46
+ invoke "pu:eject:shell", [], dest: package_namespace,
47
+ force: options[:force],
48
+ skip: options[:skip]
45
49
  rescue => e
46
50
  exception "#{self.class} failed:", e
47
51
  end
@@ -14,7 +14,7 @@ module Pu
14
14
  # argument :name
15
15
 
16
16
  def start
17
- source_feature = select_feature
17
+ source_feature = select_feature msg: "Select source feature"
18
18
  source_module = (source_feature == "main_app") ? "ResourceRecord" : "#{source_feature.classify}::ResourceRecord"
19
19
 
20
20
  Plutonium.eager_load_rails!
@@ -4,7 +4,7 @@ require_relative "../../lib/plutonium_generators"
4
4
 
5
5
  module Pu
6
6
  module Res
7
- class ModelGenerator < PlutoniumGenerators::ModelGenerator
7
+ class ModelGenerator < PlutoniumGenerators::ModelGeneratorBase
8
8
  source_root File.expand_path("templates", __dir__)
9
9
 
10
10
  def run_create_module
@@ -4,14 +4,18 @@ require_relative "../../lib/plutonium_generators"
4
4
 
5
5
  module Pu
6
6
  module Res
7
- class ScaffoldGenerator < PlutoniumGenerators::ModelGenerator
7
+ class ScaffoldGenerator < PlutoniumGenerators::ModelGeneratorBase
8
8
  include PlutoniumGenerators::Generator
9
9
 
10
10
  source_root File.expand_path("templates", __dir__)
11
11
 
12
12
  desc "Scaffold a resource"
13
13
 
14
+ class_option :model, type: :boolean, default: true
15
+
14
16
  def setup
17
+ return unless options[:model]
18
+
15
19
  model_class = class_name.safe_constantize
16
20
  if model_class.present? && attributes.empty? && prompt.yes?("Existing model class found. Do you want to import its attributes?")
17
21
  attributes_str = model_class.content_columns.map { |col| "#{col.name}:#{col.type}" }
@@ -20,6 +24,8 @@ module Pu
20
24
  end
21
25
 
22
26
  def create_model
27
+ return unless options[:model]
28
+
23
29
  invoke "pu:res:model", [@original_name, *@original_attributes], dest: selected_feature, **options
24
30
  end
25
31
 
@@ -89,6 +89,10 @@ module Pu
89
89
  return unless base?
90
90
 
91
91
  template "app/models/account.rb", "app/models/#{account_path}.rb"
92
+ invoke "pu:res:scaffold", [table, "email:string", "status:integer"], dest: "main_app",
93
+ model: false,
94
+ force: true,
95
+ skip: options[:skip]
92
96
  end
93
97
 
94
98
  def create_mailer
@@ -48,6 +48,11 @@ module Pu
48
48
  migration_template "db/migrate/install_rodauth.rb", "db/migrate/install_rodauth.rb" # , File.join(db_migrate_path, "#{migration_name}.rb")
49
49
  end
50
50
 
51
+ def eject_layout
52
+ file = "app/views/layouts/rodauth.html.erb"
53
+ FileUtils.cp Plutonium.root.join(file), Rails.root.join(file)
54
+ end
55
+
51
56
  def show_instructions
52
57
  readme "INSTRUCTIONS" if behavior == :invoke
53
58
  end
@@ -1,5 +1,5 @@
1
1
  <% if defined?(ActiveRecord::Railtie) -%>
2
- class <%= account_path.classify %> < ApplicationRecord
2
+ class <%= account_path.classify %> < ResourceRecord
3
3
  include Rodauth::Rails.model<%= "(:#{table_prefix})" unless primary? %>
4
4
  # add concerns above.
5
5
 
@@ -190,9 +190,9 @@ module Plutonium
190
190
  #
191
191
  # @param name [Symbol] The name of the filter.
192
192
  # @param body [Proc, nil] The body of the filter.
193
- def define_filter(name, body = nil, &block)
193
+ def define_filter(name, body = nil, &)
194
194
  body ||= name
195
- filter_definitions[name] = build_query(body, &block)
195
+ filter_definitions[name] = build_query(body, &)
196
196
  end
197
197
 
198
198
  # Defines a scope with the given name and body.
@@ -251,14 +251,14 @@ module Plutonium
251
251
  # @param body [Proc, Symbol] The body of the query.
252
252
  # @yieldparam query [Query] The query object.
253
253
  # @return [Query] The constructed query object.
254
- def build_query(body, &block)
254
+ def build_query(body, &)
255
255
  case body
256
256
  when Symbol
257
257
  raise "Cannot find scope :#{body} on #{resource_class}" unless resource_class.respond_to?(body)
258
258
 
259
- ScopeQuery.new(body, &block)
259
+ ScopeQuery.new(body, &)
260
260
  else
261
- BlockQuery.new(body, &block)
261
+ BlockQuery.new(body, &)
262
262
  end
263
263
  end
264
264
 
@@ -1,3 +1,3 @@
1
1
  module Plutonium
2
- VERSION = "0.11.2"
2
+ VERSION = "0.12.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plutonium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Froelich
@@ -720,6 +720,7 @@ files:
720
720
  - app/views/application/_flash.html.erb
721
721
  - app/views/application/_flash_alerts.html.erb
722
722
  - app/views/application/_flash_toasts.html.erb
723
+ - app/views/application/_resource_header.html copy.erb
723
724
  - app/views/application/_resource_header.html.erb
724
725
  - app/views/application/_resource_sidebar.html.erb
725
726
  - app/views/components/action_button/action_button_component.html.erb
@@ -874,6 +875,8 @@ files:
874
875
  - lib/generators/pu/docker/install/templates/bin/restart
875
876
  - lib/generators/pu/docker/install/templates/bin/shell
876
877
  - lib/generators/pu/docker/install/templates/docker-compose.yml
878
+ - lib/generators/pu/eject/layout/layout_generator.rb
879
+ - lib/generators/pu/eject/shell/shell_generator.rb
877
880
  - lib/generators/pu/gem/dotenv/dotenv_generator.rb
878
881
  - lib/generators/pu/gem/dotenv/templates/.env
879
882
  - lib/generators/pu/gem/dotenv/templates/.env.local
@@ -897,7 +900,7 @@ files:
897
900
  - lib/generators/pu/lib/plutonium_generators/concerns/serializer.rb
898
901
  - lib/generators/pu/lib/plutonium_generators/generator.rb
899
902
  - lib/generators/pu/lib/plutonium_generators/installer.rb
900
- - lib/generators/pu/lib/plutonium_generators/model_generator.rb
903
+ - lib/generators/pu/lib/plutonium_generators/model_generator_base.rb
901
904
  - lib/generators/pu/pkg/app/app_generator.rb
902
905
  - lib/generators/pu/pkg/app/templates/app/controllers/concerns/controller.rb.tt
903
906
  - lib/generators/pu/pkg/app/templates/app/controllers/controller.rb.tt