domma-cms 0.9.6 → 0.9.10
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.
- package/admin/js/app.js +2 -2
- package/admin/js/lib/card-builder.js +7 -0
- package/admin/js/templates/api-reference.html +943 -1107
- package/admin/js/templates/documentation.html +828 -655
- package/admin/js/templates/tutorials.html +202 -177
- package/admin/js/views/api-reference.js +1 -1
- package/admin/js/views/documentation.js +1 -1
- package/admin/js/views/index.js +1 -1
- package/admin/js/views/page-editor.js +4 -4
- package/admin/js/views/tutorials.js +1 -1
- package/config/site.json +1 -1
- package/package.json +1 -1
- package/plugins/notes/admin/views/notes.js +24 -26
- package/plugins/todo/admin/views/todo.js +32 -34
- package/public/css/site.css +1 -1
- package/server/services/markdown.js +609 -79
|
@@ -5,18 +5,21 @@
|
|
|
5
5
|
<div class="row">
|
|
6
6
|
<div class="col-12">
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
<span class="card-collapse-icon" data-icon="chevron-down"></span>
|
|
8
|
+
<div class="tabs" id="tutorials-tabs">
|
|
9
|
+
<div class="tab-list" style="flex-wrap: wrap;">
|
|
10
|
+
<button class="tab-item active">Writing a Plugin</button>
|
|
11
|
+
<button class="tab-item">Form Follow-Up</button>
|
|
13
12
|
</div>
|
|
14
|
-
|
|
15
|
-
<p>Plugins live in the <code>plugins/</code> directory. Each plugin is a self-contained folder with three
|
|
16
|
-
required files and optional <code>admin/</code> and <code>public/</code> subdirectories.</p>
|
|
13
|
+
<div class="tab-content">
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
<!-- Writing a Plugin -->
|
|
16
|
+
<div class="tab-panel active docs-body">
|
|
17
|
+
<p>Plugins live in the <code>plugins/</code> directory. Each plugin is a self-contained folder with
|
|
18
|
+
three
|
|
19
|
+
required files and optional <code>admin/</code> and <code>public/</code> subdirectories.</p>
|
|
20
|
+
|
|
21
|
+
<h3>Directory structure</h3>
|
|
22
|
+
<pre class="code-block"><code>plugins/
|
|
20
23
|
my-plugin/
|
|
21
24
|
plugin.json ← manifest (required)
|
|
22
25
|
plugin.js ← Fastify plugin (required)
|
|
@@ -31,12 +34,13 @@
|
|
|
31
34
|
inject-body.html ← injected before </body> on every page (optional)
|
|
32
35
|
data/ ← plugin data store (optional, not publicly served)</code></pre>
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
<hr>
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
<h3>1. plugin.json — the manifest</h3>
|
|
40
|
+
<p>All fields below are <strong>required</strong>. Missing any will cause the plugin to be skipped on
|
|
41
|
+
startup
|
|
42
|
+
with a warning in the server log.</p>
|
|
43
|
+
<pre class="code-block"><code>{
|
|
40
44
|
"name": "my-plugin",
|
|
41
45
|
"displayName": "My Plugin",
|
|
42
46
|
"version": "1.0.0",
|
|
@@ -46,53 +50,56 @@
|
|
|
46
50
|
"icon": "star"
|
|
47
51
|
}</code></pre>
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
53
|
+
<p>Optional fields:</p>
|
|
54
|
+
<table class="table table-sm">
|
|
55
|
+
<thead>
|
|
56
|
+
<tr>
|
|
57
|
+
<th>Field</th>
|
|
58
|
+
<th>Type</th>
|
|
59
|
+
<th>Description</th>
|
|
60
|
+
</tr>
|
|
61
|
+
</thead>
|
|
62
|
+
<tbody>
|
|
63
|
+
<tr>
|
|
64
|
+
<td><code>inject.head</code></td>
|
|
65
|
+
<td>string</td>
|
|
66
|
+
<td>Path (relative to plugin root) to an HTML snippet injected into <code><head></code>.
|
|
67
|
+
</td>
|
|
68
|
+
</tr>
|
|
69
|
+
<tr>
|
|
70
|
+
<td><code>inject.bodyEnd</code></td>
|
|
71
|
+
<td>string</td>
|
|
72
|
+
<td>Path to an HTML snippet injected before <code></body></code>.</td>
|
|
73
|
+
</tr>
|
|
74
|
+
<tr>
|
|
75
|
+
<td><code>admin.sidebar</code></td>
|
|
76
|
+
<td>array</td>
|
|
77
|
+
<td>Sidebar items to add to the admin panel.</td>
|
|
78
|
+
</tr>
|
|
79
|
+
<tr>
|
|
80
|
+
<td><code>admin.routes</code></td>
|
|
81
|
+
<td>array</td>
|
|
82
|
+
<td>SPA routes to register in the admin router.</td>
|
|
83
|
+
</tr>
|
|
84
|
+
<tr>
|
|
85
|
+
<td><code>admin.views</code></td>
|
|
86
|
+
<td>object</td>
|
|
87
|
+
<td>View modules to dynamically import into the admin SPA.</td>
|
|
88
|
+
</tr>
|
|
89
|
+
</tbody>
|
|
90
|
+
</table>
|
|
91
|
+
|
|
92
|
+
<hr>
|
|
93
|
+
|
|
94
|
+
<h3>2. plugin.js — the Fastify plugin</h3>
|
|
95
|
+
<p>This is the server-side entry point. It must export a default <strong>async function</strong> that
|
|
96
|
+
Fastify
|
|
97
|
+
will call with <code>(fastify, options)</code>.</p>
|
|
98
|
+
<p>The CMS injects auth middleware through <code>options.auth</code> — always destructure from there
|
|
99
|
+
rather than
|
|
100
|
+
importing directly.</p>
|
|
101
|
+
|
|
102
|
+
<pre class="code-block"><code>import { getPluginSettings, savePluginState } from '../../server/services/plugins.js';
|
|
96
103
|
|
|
97
104
|
export default async function myPlugin(fastify, options) {
|
|
98
105
|
const { authenticate, requireAdmin } = options.auth;
|
|
@@ -113,30 +120,33 @@ export default async function myPlugin(fastify, options) {
|
|
|
113
120
|
});
|
|
114
121
|
}</code></pre>
|
|
115
122
|
|
|
116
|
-
|
|
117
|
-
|
|
123
|
+
<p>Routes are registered under the prefix <code>/api/plugins/{name}</code> automatically. You do not
|
|
124
|
+
set the
|
|
125
|
+
prefix yourself — it is always locked to your plugin's directory name.</p>
|
|
118
126
|
|
|
119
|
-
|
|
127
|
+
<hr>
|
|
120
128
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
129
|
+
<h3>3. config.js — settings defaults</h3>
|
|
130
|
+
<p>Export a plain object of default settings. These are merged with any user overrides stored in
|
|
131
|
+
<code>config/plugins.json</code>
|
|
132
|
+
when <code>getPluginSettings()</code> is called.</p>
|
|
124
133
|
|
|
125
|
-
|
|
134
|
+
<pre class="code-block"><code>export default {
|
|
126
135
|
greeting: 'Hello, world!',
|
|
127
136
|
enableFeature: true,
|
|
128
137
|
maxItems: 10
|
|
129
138
|
};</code></pre>
|
|
130
139
|
|
|
131
|
-
|
|
132
|
-
|
|
140
|
+
<p><code>config.js</code> is only loaded for <strong>enabled</strong> plugins. Side-effect code here
|
|
141
|
+
will not
|
|
142
|
+
run for disabled plugins.</p>
|
|
133
143
|
|
|
134
|
-
|
|
144
|
+
<hr>
|
|
135
145
|
|
|
136
|
-
|
|
137
|
-
|
|
146
|
+
<h3>4. Admin views (optional)</h3>
|
|
147
|
+
<p>To add a page to the admin panel, declare the route and view in <code>plugin.json</code>:</p>
|
|
138
148
|
|
|
139
|
-
|
|
149
|
+
<pre class="code-block"><code>"admin": {
|
|
140
150
|
"sidebar": [
|
|
141
151
|
{
|
|
142
152
|
"id": "my-plugin",
|
|
@@ -161,10 +171,10 @@ export default async function myPlugin(fastify, options) {
|
|
|
161
171
|
}
|
|
162
172
|
}</code></pre>
|
|
163
173
|
|
|
164
|
-
|
|
165
|
-
|
|
174
|
+
<p>The view file follows the standard Domma view pattern — a <code>templateUrl</code> and an <code>onMount($container)</code>
|
|
175
|
+
function:</p>
|
|
166
176
|
|
|
167
|
-
|
|
177
|
+
<pre class="code-block"><code>// admin/views/my-view.js
|
|
168
178
|
export const myPluginView = {
|
|
169
179
|
templateUrl: '/plugins/my-plugin/admin/templates/my-view.html',
|
|
170
180
|
|
|
@@ -179,10 +189,11 @@ export const myPluginView = {
|
|
|
179
189
|
}
|
|
180
190
|
};</code></pre>
|
|
181
191
|
|
|
182
|
-
|
|
183
|
-
|
|
192
|
+
<p>The template is a plain HTML fragment (no <code><html></code> wrapper). Use the same card and
|
|
193
|
+
form
|
|
194
|
+
patterns as the rest of the admin panel:</p>
|
|
184
195
|
|
|
185
|
-
|
|
196
|
+
<pre class="code-block"><code><!-- admin/templates/my-view.html -->
|
|
186
197
|
<div class="view-header">
|
|
187
198
|
<h1><span data-icon="star"></span> My Plugin</h1>
|
|
188
199
|
</div>
|
|
@@ -193,14 +204,16 @@ export const myPluginView = {
|
|
|
193
204
|
</div>
|
|
194
205
|
</div></code></pre>
|
|
195
206
|
|
|
196
|
-
|
|
207
|
+
<hr>
|
|
197
208
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
209
|
+
<h3>5. Injection snippets (optional)</h3>
|
|
210
|
+
<p>HTML snippets declared in <code>inject.head</code> and <code>inject.bodyEnd</code> are read from
|
|
211
|
+
the plugin's
|
|
212
|
+
<code>public/</code> directory and inserted into every public page. Use this for analytics
|
|
213
|
+
scripts,
|
|
214
|
+
stylesheets, or widgets.</p>
|
|
202
215
|
|
|
203
|
-
|
|
216
|
+
<pre class="code-block"><code><!-- public/inject-body.html -->
|
|
204
217
|
<script>
|
|
205
218
|
(function () {
|
|
206
219
|
// This runs on every public page
|
|
@@ -210,55 +223,55 @@ export const myPluginView = {
|
|
|
210
223
|
})();
|
|
211
224
|
</script></code></pre>
|
|
212
225
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
<pre class="code-block"><code>Recipients: admin@example.com, team@example.com
|
|
226
|
+
<p>Snippet paths are validated — they must stay within the plugin's own directory. Paths containing
|
|
227
|
+
<code>..</code> are blocked.</p>
|
|
228
|
+
|
|
229
|
+
<hr>
|
|
230
|
+
|
|
231
|
+
<h3>6. Registering and testing</h3>
|
|
232
|
+
<ol>
|
|
233
|
+
<li>Create the <code>plugins/my-plugin/</code> directory with all three required files.</li>
|
|
234
|
+
<li>Restart the server — you should see <code>[plugins] Loaded N plugins: …, my-plugin</code> in
|
|
235
|
+
the log.
|
|
236
|
+
</li>
|
|
237
|
+
<li>Go to the <a href="#/plugins">Plugins page</a> and enable your plugin.</li>
|
|
238
|
+
<li>Restart the server again to register the routes.</li>
|
|
239
|
+
<li>Verify your endpoint: <code>GET /api/plugins/my-plugin/hello</code></li>
|
|
240
|
+
</ol>
|
|
241
|
+
|
|
242
|
+
<p class="text-muted" style="font-size:.9rem">Tip: use <code>npm run dev</code> during development —
|
|
243
|
+
the server
|
|
244
|
+
restarts automatically on file changes.</p>
|
|
245
|
+
</div>
|
|
246
|
+
|
|
247
|
+
<!-- Form Follow-Up -->
|
|
248
|
+
<div class="tab-panel docs-body">
|
|
249
|
+
<p>Every form in Domma CMS can trigger up to four things after a submission is stored:</p>
|
|
250
|
+
<ol>
|
|
251
|
+
<li>Send an <strong>email notification</strong> to one or more recipients</li>
|
|
252
|
+
<li>POST to a <strong>webhook URL</strong></li>
|
|
253
|
+
<li>Execute a <strong>CMS Action</strong> (Pro)</li>
|
|
254
|
+
<li>Redirect the visitor to a <strong>success page</strong> (or show an inline message)</li>
|
|
255
|
+
</ol>
|
|
256
|
+
<p>These are configured per-form in the admin. Open any form in <a href="#/forms">Forms</a> and go to
|
|
257
|
+
the
|
|
258
|
+
<strong>Settings</strong> and <strong>Actions</strong> tabs.</p>
|
|
259
|
+
|
|
260
|
+
<hr>
|
|
261
|
+
|
|
262
|
+
<h3>1. Email notification</h3>
|
|
263
|
+
<p>Go to the <strong>Actions</strong> tab of your form and enable <em>Send email on submit</em>. Enter
|
|
264
|
+
one or
|
|
265
|
+
more comma-separated recipient addresses. This uses the SMTP settings configured in
|
|
266
|
+
<a href="#/settings">Site Settings → Email / SMTP</a>.</p>
|
|
267
|
+
|
|
268
|
+
<pre class="code-block"><code>Recipients: admin@example.com, team@example.com
|
|
257
269
|
Subject Prefix: [Contact Form]</code></pre>
|
|
258
270
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
271
|
+
<h3>2. Webhook</h3>
|
|
272
|
+
<p>Enable <em>POST to webhook on submit</em> and enter a URL. Domma will POST the following JSON body:
|
|
273
|
+
</p>
|
|
274
|
+
<pre class="code-block"><code>{
|
|
262
275
|
"form": "enquiries",
|
|
263
276
|
"data": {
|
|
264
277
|
"full_name": "Jane Smith",
|
|
@@ -266,49 +279,61 @@ Subject Prefix: [Contact Form]</code></pre>
|
|
|
266
279
|
"message": "Hello!"
|
|
267
280
|
}
|
|
268
281
|
}</code></pre>
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
282
|
+
<p>Use this to integrate with Zapier, Make, Slack, or any HTTP endpoint.</p>
|
|
283
|
+
|
|
284
|
+
<h3>3. CMS Action (Pro)</h3>
|
|
285
|
+
<p>Actions are reusable workflow steps defined in <a href="#/actions">Actions</a>. A single action can
|
|
286
|
+
chain
|
|
287
|
+
multiple steps: update a field, move an entry to another collection, send an email, call a
|
|
288
|
+
webhook, or
|
|
289
|
+
delete an entry.</p>
|
|
290
|
+
<p>To wire an Action to a form:</p>
|
|
291
|
+
<ol>
|
|
292
|
+
<li>Create an Action in <a href="#/actions">Actions</a> targeting the same collection as your
|
|
293
|
+
form.
|
|
294
|
+
</li>
|
|
295
|
+
<li>Open the form in <a href="#/forms">Forms</a> → <strong>Actions</strong> tab → <strong>CMS
|
|
296
|
+
Action</strong>
|
|
297
|
+
card.
|
|
298
|
+
</li>
|
|
299
|
+
<li>Select the Action from the dropdown and save.</li>
|
|
300
|
+
</ol>
|
|
301
|
+
<p>The Action runs server-side, after the entry is saved. If it fails (e.g. MongoDB is not
|
|
302
|
+
configured),
|
|
303
|
+
the submission is still stored — the action failure is non-fatal and logged as a warning.</p>
|
|
304
|
+
|
|
305
|
+
<h3>4. Success message vs. redirect</h3>
|
|
306
|
+
<p>After a successful submission the visitor sees one of two things:</p>
|
|
307
|
+
<ul>
|
|
308
|
+
<li><strong>Inline success message</strong> — the form is replaced by the text set in
|
|
309
|
+
<em>Settings → Success Message</em>. Good for simple acknowledgements.
|
|
310
|
+
</li>
|
|
311
|
+
<li><strong>Page redirect</strong> — the visitor is sent to the URL set in
|
|
312
|
+
<em>Settings → Success Redirect URL</em>. Good for registration flows, checkouts, or when you
|
|
313
|
+
want
|
|
314
|
+
a full thank-you page with additional content. <strong>Takes priority</strong> if both are
|
|
315
|
+
set.
|
|
316
|
+
</li>
|
|
317
|
+
</ul>
|
|
318
|
+
<p>Example: set <em>Success Redirect URL</em> to <code>/thank-you</code> and create a <code>thank-you.md</code>
|
|
319
|
+
page in the CMS with any content you like.</p>
|
|
320
|
+
|
|
321
|
+
<h3>Execution order</h3>
|
|
322
|
+
<p>On every submission, the pipeline runs in this fixed order:</p>
|
|
323
|
+
<ol>
|
|
324
|
+
<li>Validate fields + honeypot + rate limit</li>
|
|
325
|
+
<li>Store entry to collection</li>
|
|
326
|
+
<li>Send email (if enabled)</li>
|
|
327
|
+
<li>Call webhook (if enabled)</li>
|
|
328
|
+
<li>Execute CMS Action (if set)</li>
|
|
329
|
+
<li>Return success response → client redirects or shows message</li>
|
|
330
|
+
</ol>
|
|
331
|
+
<p>Steps 3–5 are non-fatal: a failure in any of them is logged as a warning but does not prevent the
|
|
332
|
+
submission from being stored or the success response from being returned.</p>
|
|
333
|
+
</div>
|
|
334
|
+
|
|
335
|
+
</div>
|
|
336
|
+
</div>
|
|
312
337
|
|
|
313
338
|
</div>
|
|
314
339
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const apiReferenceView={templateUrl:"/admin/js/templates/api-reference.html",async onMount(e){Domma.icons.scan(),Domma.syntax.scan()}};
|
|
1
|
+
export const apiReferenceView={templateUrl:"/admin/js/templates/api-reference.html",async onMount(e){E.tabs(e.find("#api-tabs").get(0)),Domma.icons.scan(),Domma.syntax.scan()}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const documentationView={templateUrl:"/admin/js/templates/documentation.html",async onMount(t){
|
|
1
|
+
export const documentationView={templateUrl:"/admin/js/templates/documentation.html",async onMount(t){E.tabs(t.find("#docs-tabs").get(0)),Domma.icons.scan(),Domma.syntax.scan()}};
|
package/admin/js/views/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{dashboardView as o}from"./dashboard.js";import{pagesView as i}from"./pages.js";import{pageEditorView as r}from"./page-editor.js";import{settingsView as e}from"./settings.js";import{navigationView as t}from"./navigation.js";import{layoutsView as m}from"./layouts.js";import{mediaView as s}from"./media.js";import{loginView as f}from"./login.js";import{usersView as p}from"./users.js";import{userEditorView as w}from"./user-editor.js";import{pluginsView as V}from"./plugins.js";import{documentationView as n}from"./documentation.js";import{tutorialsView as l}from"./tutorials.js";import{apiReferenceView as c}from"./api-reference.js";import{collectionsView as a}from"./collections.js";import{collectionEditorView as d}from"./collection-editor.js";import{collectionEntriesView as E}from"./collection-entries.js";import{formsView as u}from"./forms.js";import{formEditorView as g}from"./form-editor.js";import{formSubmissionsView as v}from"./form-submissions.js";import{viewsListView as b}from"./views-list.js";import{viewEditorView as k}from"./view-editor.js";import{viewPreviewView as y}from"./view-preview.js";import{actionsListView as L}from"./actions-list.js";import{actionEditorView as P}from"./action-editor.js";import{proDocsView as h}from"./pro-docs.js";import{blocksView as D}from"./blocks.js";import{blockEditorView as R}from"./block-editor.js";import{myProfileView as S}from"./my-profile.js";import{rolesView as x}from"./roles.js";import{roleEditorView as j}from"./role-editor.js";import{effectsView as q}from"./effects.js";export const views={dashboard:o,pages:i,pageEditor:r,settings:e,navigation:t,layouts:m,media:s,login:f,users:p,userEditor:w,plugins:V,documentation:n,tutorials:l,apiReference:c,collections:a,collectionEditor:d,collectionEntries:E,forms:u,formEditor:g,formSubmissions:v,viewsList:b,viewEditor:k,viewPreview:y,actionsList:L,actionEditor:P,proDocs:h,blocks:D,blockEditor:R,myProfile:S,roles:x,roleEditor:j,effects:q};
|
|
1
|
+
import{dashboardView as o}from"./dashboard.js";import{pagesView as i}from"./pages.js";import{pageEditorView as r}from"./page-editor.js?v=4";import{settingsView as e}from"./settings.js";import{navigationView as t}from"./navigation.js";import{layoutsView as m}from"./layouts.js";import{mediaView as s}from"./media.js";import{loginView as f}from"./login.js";import{usersView as p}from"./users.js";import{userEditorView as w}from"./user-editor.js";import{pluginsView as V}from"./plugins.js";import{documentationView as n}from"./documentation.js";import{tutorialsView as l}from"./tutorials.js";import{apiReferenceView as c}from"./api-reference.js";import{collectionsView as a}from"./collections.js";import{collectionEditorView as d}from"./collection-editor.js";import{collectionEntriesView as E}from"./collection-entries.js";import{formsView as u}from"./forms.js";import{formEditorView as g}from"./form-editor.js";import{formSubmissionsView as v}from"./form-submissions.js";import{viewsListView as b}from"./views-list.js";import{viewEditorView as k}from"./view-editor.js";import{viewPreviewView as y}from"./view-preview.js";import{actionsListView as L}from"./actions-list.js";import{actionEditorView as P}from"./action-editor.js";import{proDocsView as h}from"./pro-docs.js";import{blocksView as D}from"./blocks.js";import{blockEditorView as R}from"./block-editor.js";import{myProfileView as S}from"./my-profile.js";import{rolesView as x}from"./roles.js";import{roleEditorView as j}from"./role-editor.js";import{effectsView as q}from"./effects.js";export const views={dashboard:o,pages:i,pageEditor:r,settings:e,navigation:t,layouts:m,media:s,login:f,users:p,userEditor:w,plugins:V,documentation:n,tutorials:l,apiReference:c,collections:a,collectionEditor:d,collectionEntries:E,forms:u,formEditor:g,formSubmissions:v,viewsList:b,viewEditor:k,viewPreview:y,actionsList:L,actionEditor:P,proDocs:h,blocks:D,blockEditor:R,myProfile:S,roles:x,roleEditor:j,effects:q};
|