domma-cms 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 (254) hide show
  1. package/CLAUDE.md +53 -53
  2. package/README.md +27 -27
  3. package/admin/css/admin.css +1 -1
  4. package/admin/dist/domma/domma-tools.css +3 -3
  5. package/admin/dist/domma/domma-tools.min.js +3 -3
  6. package/admin/index.html +2 -2
  7. package/admin/js/app.js +1 -1
  8. package/admin/js/lib/card-builder.js +2 -2
  9. package/admin/js/lib/crud-tutorial.js +1 -1
  10. package/admin/js/lib/effect-defs.js +1 -1
  11. package/admin/js/lib/effects-builder.js +1 -1
  12. package/admin/js/lib/image-editor.js +1 -1
  13. package/admin/js/lib/markdown-toolbar.js +2 -2
  14. package/admin/js/lib/project-context.js +1 -1
  15. package/admin/js/lib/project-quick-create.js +1 -1
  16. package/admin/js/lib/scribe-composer.js +1 -1
  17. package/admin/js/lib/server-restart.js +1 -1
  18. package/admin/js/lib/shortcode-context-menu.js +2 -2
  19. package/admin/js/lib/simple-editor.js +1 -1
  20. package/admin/js/lib/themes.js +1 -1
  21. package/admin/js/lib/timeline-builder.js +1 -1
  22. package/admin/js/templates/action-editor.html +8 -8
  23. package/admin/js/templates/api-endpoint-editor.html +7 -7
  24. package/admin/js/templates/api-endpoints.html +1 -1
  25. package/admin/js/templates/api-reference.html +1 -1
  26. package/admin/js/templates/block-editor.html +6 -6
  27. package/admin/js/templates/collection-editor.html +1 -1
  28. package/admin/js/templates/component-editor.html +2 -2
  29. package/admin/js/templates/dashboard/cache.html +3 -3
  30. package/admin/js/templates/dashboard/journeys.html +3 -3
  31. package/admin/js/templates/dashboard/kpi-strip.html +3 -3
  32. package/admin/js/templates/dashboard/top-pages.html +1 -1
  33. package/admin/js/templates/dashboard/traffic-chart.html +1 -1
  34. package/admin/js/templates/docs/api-actions.html +1 -1
  35. package/admin/js/templates/docs/api-collections.html +4 -4
  36. package/admin/js/templates/docs/api-pages.html +2 -2
  37. package/admin/js/templates/docs/api-plugins.html +1 -1
  38. package/admin/js/templates/docs/api-settings.html +2 -2
  39. package/admin/js/templates/docs/api-users.html +1 -1
  40. package/admin/js/templates/docs/components-howto.html +4 -4
  41. package/admin/js/templates/docs/components-reference.html +21 -21
  42. package/admin/js/templates/docs/components-rules.html +14 -14
  43. package/admin/js/templates/docs/components-walkthrough.html +13 -13
  44. package/admin/js/templates/docs/tutorial-crud.html +49 -49
  45. package/admin/js/templates/docs/tutorial-forms.html +4 -4
  46. package/admin/js/templates/docs/tutorial-plugin.html +10 -10
  47. package/admin/js/templates/docs/usage-actions.html +6 -6
  48. package/admin/js/templates/docs/usage-cta-shortcode.html +9 -9
  49. package/admin/js/templates/docs/usage-dconfig.html +4 -4
  50. package/admin/js/templates/docs/usage-navigation.html +1 -1
  51. package/admin/js/templates/docs/usage-pages.html +1 -1
  52. package/admin/js/templates/docs/usage-shortcodes.html +24 -24
  53. package/admin/js/templates/docs/usage-users-roles.html +3 -3
  54. package/admin/js/templates/docs/usage-views.html +4 -4
  55. package/admin/js/templates/documentation.html +1 -1
  56. package/admin/js/templates/effects.html +752 -752
  57. package/admin/js/templates/form-editor.html +5 -5
  58. package/admin/js/templates/forms.html +17 -17
  59. package/admin/js/templates/login.html +5 -5
  60. package/admin/js/templates/menu-editor.html +10 -10
  61. package/admin/js/templates/my-profile.html +17 -17
  62. package/admin/js/templates/navigation.html +11 -11
  63. package/admin/js/templates/notifications.html +1 -1
  64. package/admin/js/templates/page-editor.html +4 -4
  65. package/admin/js/templates/pro-docs.html +14 -14
  66. package/admin/js/templates/role-editor.html +70 -70
  67. package/admin/js/templates/roles.html +10 -10
  68. package/admin/js/templates/settings.html +10 -10
  69. package/admin/js/templates/tutorials.html +3 -3
  70. package/admin/js/templates/view-editor.html +15 -15
  71. package/admin/js/views/action-editor.js +1 -1
  72. package/admin/js/views/actions-list.js +1 -1
  73. package/admin/js/views/api-endpoint-editor.js +2 -2
  74. package/admin/js/views/api-endpoints.js +2 -2
  75. package/admin/js/views/api-tokens.js +3 -3
  76. package/admin/js/views/blocks.js +2 -2
  77. package/admin/js/views/collection-editor.js +1 -1
  78. package/admin/js/views/collection-entries.js +1 -1
  79. package/admin/js/views/collections.js +1 -1
  80. package/admin/js/views/component-editor.js +1 -1
  81. package/admin/js/views/components.js +4 -4
  82. package/admin/js/views/dashboard/widgets/cache.js +1 -1
  83. package/admin/js/views/dashboard/widgets/journeys.js +1 -1
  84. package/admin/js/views/dashboard/widgets/kpi-strip.js +1 -1
  85. package/admin/js/views/form-editor.js +7 -7
  86. package/admin/js/views/form-submissions.js +1 -1
  87. package/admin/js/views/forms.js +1 -1
  88. package/admin/js/views/layouts.js +1 -1
  89. package/admin/js/views/login.js +2 -2
  90. package/admin/js/views/menu-editor.js +3 -3
  91. package/admin/js/views/menu-locations.js +1 -1
  92. package/admin/js/views/menus.js +3 -3
  93. package/admin/js/views/navigation.js +8 -8
  94. package/admin/js/views/page-editor.js +40 -40
  95. package/admin/js/views/pages.js +3 -3
  96. package/admin/js/views/plugin-code.js +2 -2
  97. package/admin/js/views/plugins.js +1 -1
  98. package/admin/js/views/project-settings.js +1 -1
  99. package/admin/js/views/projects.js +1 -1
  100. package/admin/js/views/roles.js +1 -1
  101. package/admin/js/views/user-editor.js +1 -1
  102. package/admin/js/views/users.js +3 -3
  103. package/admin/js/views/view-editor.js +1 -1
  104. package/admin/js/views/view-preview.js +1 -1
  105. package/admin/js/views/views-list.js +1 -1
  106. package/bin/cli.js +8 -8
  107. package/bin/lib/config-merge.js +44 -44
  108. package/bin/update.js +16 -16
  109. package/config/plugins.json +1 -1
  110. package/package.json +2 -2
  111. package/plugins/_template/admin/views/index.js +1 -1
  112. package/plugins/_template/config.js +1 -1
  113. package/plugins/_template/plugin.js +1 -1
  114. package/plugins/analytics/admin/templates/analytics.html +3 -3
  115. package/plugins/analytics/admin/views/analytics.js +1 -1
  116. package/plugins/analytics/config.js +1 -1
  117. package/plugins/analytics/plugin.js +4 -4
  118. package/plugins/analytics/plugin.json +1 -1
  119. package/plugins/analytics/public/inject-body.html +2 -2
  120. package/plugins/analytics/public/inject-head.html +1 -1
  121. package/plugins/blog/admin/templates/blog.html +4 -4
  122. package/plugins/blog/admin/views/blog.js +3 -3
  123. package/plugins/blog/admin/views/categories.js +2 -2
  124. package/plugins/blog/admin/views/comments.js +4 -4
  125. package/plugins/blog/admin/views/post-editor.js +1 -1
  126. package/plugins/blog/plugin.js +2 -2
  127. package/plugins/blog/plugin.json +4 -4
  128. package/plugins/contacts/admin/views/contacts.js +8 -8
  129. package/plugins/contacts/plugin.js +4 -4
  130. package/plugins/contacts/plugin.json +1 -1
  131. package/plugins/invoice/admin/templates/editor.html +6 -6
  132. package/plugins/invoice/admin/templates/index.html +4 -4
  133. package/plugins/invoice/admin/views/editor.js +3 -3
  134. package/plugins/invoice/admin/views/index.js +4 -4
  135. package/plugins/invoice/admin/views/issuers.js +1 -1
  136. package/plugins/invoice/admin/views/party-view.js +3 -3
  137. package/plugins/invoice/admin/views/receivers.js +1 -1
  138. package/plugins/invoice/config.js +1 -1
  139. package/plugins/invoice/plugin.js +1 -1
  140. package/plugins/invoice/plugin.json +4 -4
  141. package/plugins/notes/admin/views/notes.js +4 -4
  142. package/plugins/notes/plugin.js +1 -1
  143. package/plugins/notes/plugin.json +1 -1
  144. package/plugins/site-search/admin/templates/site-search.html +3 -3
  145. package/plugins/site-search/admin/views/site-search.js +1 -1
  146. package/plugins/site-search/config.js +1 -1
  147. package/plugins/site-search/plugin.js +4 -4
  148. package/plugins/site-search/plugin.json +1 -1
  149. package/plugins/surveys/admin/templates/results.html +1 -1
  150. package/plugins/surveys/admin/templates/survey-editor.html +4 -4
  151. package/plugins/surveys/admin/views/audience.js +6 -6
  152. package/plugins/surveys/admin/views/results.js +3 -3
  153. package/plugins/surveys/admin/views/survey-editor.js +1 -1
  154. package/plugins/surveys/admin/views/surveys.js +2 -2
  155. package/plugins/surveys/plugin.js +1 -1
  156. package/plugins/surveys/plugin.json +4 -4
  157. package/plugins/theme-switcher/admin/views/theme-switcher.js +1 -1
  158. package/plugins/theme-switcher/plugin.json +3 -3
  159. package/plugins/theme-switcher/public/inject-body.html +28 -28
  160. package/plugins/theme-switcher/public/inject-head.html +1 -1
  161. package/plugins/todo/plugin.js +1 -1
  162. package/public/css/forms.css +1 -1
  163. package/public/js/collection-browser.js +1 -1
  164. package/public/js/collection-context.js +1 -1
  165. package/public/js/form-logic-engine.js +1 -1
  166. package/public/js/forms.js +2 -1
  167. package/public/js/site.js +1 -1
  168. package/scripts/build.js +14 -14
  169. package/scripts/create-plugin.js +2 -2
  170. package/scripts/fresh.js +2 -2
  171. package/scripts/gen-instance-secret.js +1 -1
  172. package/scripts/pro.js +12 -12
  173. package/scripts/reset.js +2 -2
  174. package/scripts/setup.js +15 -15
  175. package/scripts/users.js +5 -5
  176. package/scripts/verify-assets.mjs +6 -6
  177. package/server/config.js +1 -1
  178. package/server/middleware/auth.js +253 -253
  179. package/server/middleware/managerAuth.js +3 -3
  180. package/server/routes/api/actions.js +4 -4
  181. package/server/routes/api/api-endpoints.js +7 -7
  182. package/server/routes/api/api-tokens.js +5 -5
  183. package/server/routes/api/auth.js +309 -309
  184. package/server/routes/api/blocks.js +3 -3
  185. package/server/routes/api/collections.js +18 -18
  186. package/server/routes/api/dashboard.js +5 -5
  187. package/server/routes/api/effects.js +2 -2
  188. package/server/routes/api/endpoints-public.js +5 -5
  189. package/server/routes/api/forms.js +47 -47
  190. package/server/routes/api/menu-locations.js +3 -3
  191. package/server/routes/api/menus.js +7 -7
  192. package/server/routes/api/navigation.js +42 -42
  193. package/server/routes/api/notifications.js +2 -2
  194. package/server/routes/api/pages.js +14 -2
  195. package/server/routes/api/plugin-marketplace.js +3 -3
  196. package/server/routes/api/plugins.js +6 -6
  197. package/server/routes/api/projects.js +9 -9
  198. package/server/routes/api/scaffold.js +7 -7
  199. package/server/routes/api/settings.js +6 -6
  200. package/server/routes/api/sidebar.js +1 -1
  201. package/server/routes/api/users.js +5 -5
  202. package/server/routes/api/versions.js +1 -1
  203. package/server/routes/api/views.js +1 -1
  204. package/server/routes/docs-public.js +3 -3
  205. package/server/routes/public.js +14 -14
  206. package/server/server.js +34 -16
  207. package/server/services/actions.js +19 -19
  208. package/server/services/adapters/FileAdapter.js +2 -2
  209. package/server/services/adapters/MongoAdapter.js +5 -5
  210. package/server/services/apiEndpoints.js +15 -15
  211. package/server/services/apiTokens.js +7 -7
  212. package/server/services/blocks.js +13 -13
  213. package/server/services/cache/drivers/MemoryDriver.js +3 -3
  214. package/server/services/cache/drivers/NoneDriver.js +1 -1
  215. package/server/services/cache/index.js +5 -5
  216. package/server/services/collections.js +14 -14
  217. package/server/services/components.js +9 -9
  218. package/server/services/connectionManager.js +4 -4
  219. package/server/services/content.js +25 -2
  220. package/server/services/docs.js +14 -14
  221. package/server/services/email.js +167 -167
  222. package/server/services/filterEngine.js +6 -6
  223. package/server/services/forms.js +18 -10
  224. package/server/services/health.js +1 -1
  225. package/server/services/hooks.js +7 -7
  226. package/server/services/images.js +4 -4
  227. package/server/services/managerClient.js +1 -1
  228. package/server/services/markdown.js +79 -79
  229. package/server/services/menuRender.js +5 -5
  230. package/server/services/menus-migration.js +3 -3
  231. package/server/services/menus.js +31 -31
  232. package/server/services/permissionRegistry.js +1 -1
  233. package/server/services/pluginFiles.js +5 -5
  234. package/server/services/pluginInstaller.js +17 -17
  235. package/server/services/pluginScaffold.js +1 -1
  236. package/server/services/plugins.js +17 -17
  237. package/server/services/presetCollections.js +2 -2
  238. package/server/services/projects.js +35 -26
  239. package/server/services/recipes/contact-list.json +1 -1
  240. package/server/services/recipes/onboarding.json +8 -8
  241. package/server/services/references.js +8 -8
  242. package/server/services/renderer.js +9 -9
  243. package/server/services/roles.js +9 -9
  244. package/server/services/rowAccess.js +10 -10
  245. package/server/services/scaffolder.js +30 -30
  246. package/server/services/sidebar-migration.js +10 -10
  247. package/server/services/sitemap.js +1 -1
  248. package/server/services/userProfiles.js +199 -199
  249. package/server/services/userRoles.js +7 -7
  250. package/server/services/users.js +302 -302
  251. package/server/services/versions.js +3 -3
  252. package/server/services/viewPipeline.js +6 -6
  253. package/server/services/views.js +11 -11
  254. package/server/templates/page.html +5 -5
@@ -14,14 +14,14 @@
14
14
  <h3>Creating an Action</h3>
15
15
  <ol>
16
16
  <li>Navigate to <strong>Data → Actions</strong> and click <strong>New Action</strong>.</li>
17
- <li><strong>General tab</strong> — enter a title and select the target collection.</li>
18
- <li><strong>Trigger tab</strong> — configure the button label, icon, and optional confirmation
17
+ <li><strong>General tab</strong> - enter a title and select the target collection.</li>
18
+ <li><strong>Trigger tab</strong> - configure the button label, icon, and optional confirmation
19
19
  message.
20
20
  </li>
21
- <li><strong>Steps tab</strong> — add steps in order. Each step runs sequentially; if one fails the
21
+ <li><strong>Steps tab</strong> - add steps in order. Each step runs sequentially; if one fails the
22
22
  action stops.
23
23
  </li>
24
- <li><strong>Access tab</strong> — select which roles can trigger this action.</li>
24
+ <li><strong>Access tab</strong> - select which roles can trigger this action.</li>
25
25
  <li>Click <strong>Save Action</strong>. The button will appear on the collection's entry list.
26
26
  </li>
27
27
  </ol>
@@ -100,7 +100,7 @@
100
100
  </tr>
101
101
  </tbody>
102
102
  </table>
103
- <p><strong>Example</strong> — approve an application and notify by email:</p>
103
+ <p><strong>Example</strong> - approve an application and notify by email:</p>
104
104
  <pre class="code-block"><code>Step 1: updateField field=status value=approved
105
105
  Step 2: updateField field=approvedAt value={{now}}
106
106
  Step 3: email to={{entry.data.email}}
@@ -110,7 +110,7 @@ Step 3: email to={{entry.data.email}}
110
110
  <h3>Partial Execution</h3>
111
111
  <p>Actions are <strong>not transactional</strong>. If a step fails, the action stops and returns the
112
112
  number of steps completed so far (<code>stepsCompleted</code>). Steps that already ran are
113
- <strong>not rolled back</strong>. Design step order with this in mind — put irreversible steps
113
+ <strong>not rolled back</strong>. Design step order with this in mind - put irreversible steps
114
114
  (delete, email) last.</p>
115
115
 
116
116
  <h3>After a deleteEntry step</h3>
@@ -30,13 +30,13 @@
30
30
  <tr>
31
31
  <td><code>action</code></td>
32
32
  <td>Yes</td>
33
- <td>—</td>
33
+ <td>-</td>
34
34
  <td>Action slug</td>
35
35
  </tr>
36
36
  <tr>
37
37
  <td><code>entry</code></td>
38
38
  <td>Yes</td>
39
- <td>—</td>
39
+ <td>-</td>
40
40
  <td>Entry UUID to act on</td>
41
41
  </tr>
42
42
  <tr>
@@ -54,19 +54,19 @@
54
54
  <tr>
55
55
  <td><code>icon</code></td>
56
56
  <td>No</td>
57
- <td>—</td>
57
+ <td>-</td>
58
58
  <td>Domma icon name</td>
59
59
  </tr>
60
60
  <tr>
61
61
  <td><code>size</code></td>
62
62
  <td>No</td>
63
- <td>—</td>
63
+ <td>-</td>
64
64
  <td>sm · md · lg</td>
65
65
  </tr>
66
66
  <tr>
67
67
  <td><code>confirm</code></td>
68
68
  <td>No</td>
69
- <td>—</td>
69
+ <td>-</td>
70
70
  <td>Confirmation prompt before executing</td>
71
71
  </tr>
72
72
  </tbody>
@@ -91,8 +91,8 @@
91
91
  <tbody>
92
92
  <tr>
93
93
  <td><code>cta</code></td>
94
- <td>—</td>
95
- <td>Action slug — enables per-entry buttons</td>
94
+ <td>-</td>
95
+ <td>Action slug - enables per-entry buttons</td>
96
96
  </tr>
97
97
  <tr>
98
98
  <td><code>cta-label</code></td>
@@ -101,7 +101,7 @@
101
101
  </tr>
102
102
  <tr>
103
103
  <td><code>cta-icon</code></td>
104
- <td>—</td>
104
+ <td>-</td>
105
105
  <td>Domma icon name</td>
106
106
  </tr>
107
107
  <tr>
@@ -111,7 +111,7 @@
111
111
  </tr>
112
112
  <tr>
113
113
  <td><code>cta-confirm</code></td>
114
- <td>—</td>
114
+ <td>-</td>
115
115
  <td>Confirmation prompt</td>
116
116
  </tr>
117
117
  </tbody>
@@ -7,18 +7,18 @@
7
7
  <div class="col-12">
8
8
  <div class="docs-body">
9
9
 
10
- <p>DConfig lets you wire up declarative behaviour on any public page — no JavaScript required. Define
10
+ <p>DConfig lets you wire up declarative behaviour on any public page - no JavaScript required. Define
11
11
  event
12
12
  handlers and class toggles in JSON; the page runtime applies them automatically on load.</p>
13
13
 
14
14
  <p>DConfig can be set in two ways, and both are merged at runtime (inline shortcode wins on selector
15
15
  conflict):</p>
16
16
  <ul>
17
- <li><strong>Page editor</strong> — the <em>DConfig</em> collapsible section accepts a JSON blob
17
+ <li><strong>Page editor</strong> - the <em>DConfig</em> collapsible section accepts a JSON blob
18
18
  stored in page
19
19
  frontmatter and injected as <code>window.__CMS_DCONFIG__</code>.
20
20
  </li>
21
- <li><strong>Inline shortcode</strong> — place one or more <code>[dconfig]…[/dconfig]</code> blocks
21
+ <li><strong>Inline shortcode</strong> - place one or more <code>[dconfig]…[/dconfig]</code> blocks
22
22
  directly in
23
23
  the page body Markdown.
24
24
  </li>
@@ -116,7 +116,7 @@ Content goes here.
116
116
 
117
117
  <h3>Multiple selectors</h3>
118
118
  <p>Any number of selectors can appear in one block. Selectors are matched with
119
- <code>document.querySelector</code> — use IDs, classes, or attribute selectors.</p>
119
+ <code>document.querySelector</code> - use IDs, classes, or attribute selectors.</p>
120
120
  <pre class="code-block"><code>[dconfig]
121
121
  {
122
122
  "#show-btn": {
@@ -14,7 +14,7 @@
14
14
  <h3>Dropdowns</h3>
15
15
  <p>Nest items under a parent using the drag-and-drop tree in the Navigation editor. Child items are
16
16
  stored under
17
- the <code>items</code> key — the public navbar renders them as a dropdown.</p>
17
+ the <code>items</code> key - the public navbar renders them as a dropdown.</p>
18
18
 
19
19
  <h3>External links</h3>
20
20
  <p>Set the URL to a full <code>https://</code> address to link outside the site. Leave blank for
@@ -54,7 +54,7 @@ updatedAt: 2026-03-01 # auto-set on save
54
54
  Your Markdown content goes here.</code></pre>
55
55
 
56
56
  <h3>Drafts</h3>
57
- <p>Pages with <code>status: draft</code> are never served on the public site — they return a 404.
57
+ <p>Pages with <code>status: draft</code> are never served on the public site - they return a 404.
58
58
  Toggle status
59
59
  in the Page Editor to publish.</p>
60
60
 
@@ -23,11 +23,11 @@
23
23
  <tbody>
24
24
  <tr>
25
25
  <td><code>[grid cols="N" gap="N"]...[/grid]</code></td>
26
- <td>CSS Grid container — N columns (1–12), optional gap (1–6)</td>
26
+ <td>CSS Grid container - N columns (1-12), optional gap (1-6)</td>
27
27
  </tr>
28
28
  <tr>
29
29
  <td><code>[row gap="N"]...[/row]</code></td>
30
- <td>Flexbox row — columns share width equally</td>
30
+ <td>Flexbox row - columns share width equally</td>
31
31
  </tr>
32
32
  <tr>
33
33
  <td><code>[col span="N"]...[/col]</code></td>
@@ -47,7 +47,7 @@
47
47
  <tbody>
48
48
  <tr>
49
49
  <td><code>[card title="..."]...[/card]</code></td>
50
- <td>Styled card. Supports 6 variants, ~44 gradients and 33 layouts — see the
50
+ <td>Styled card. Supports 6 variants, ~44 gradients and 33 layouts - see the
51
51
  <strong>Cards</strong> subsection below.
52
52
  </td>
53
53
  </tr>
@@ -88,11 +88,11 @@
88
88
  </tbody>
89
89
  </table>
90
90
 
91
- <h3>Cards &mdash; variants, gradients &amp; layouts</h3>
91
+ <h3>Cards - variants, gradients &amp; layouts</h3>
92
92
  <p>The <code>[card]</code> shortcode is the most configurable component in the system. It has three
93
93
  layers you can mix freely: <strong>variant</strong> (the overall visual style), <strong>gradient</strong>
94
94
  (colour palette, used with <code>variant="gradient"</code> or any layout that accepts a gradient),
95
- and <strong>layout</strong> (the internal structure — header/body/footer, image position, sub-tags,
95
+ and <strong>layout</strong> (the internal structure - header/body/footer, image position, sub-tags,
96
96
  etc.). Every layout accepts every variant, gradient and universal attribute listed below.</p>
97
97
  <pre><code>[card variant="gradient" gradient="ocean" layout="icon-top" icon="star" title="Fast"]
98
98
  Body content in **Markdown** is supported.
@@ -109,7 +109,7 @@ Body content in **Markdown** is supported.
109
109
  <tbody>
110
110
  <tr>
111
111
  <td><code>clean</code></td>
112
- <td>Flat, minimal chrome &mdash; no border, subtle background</td>
112
+ <td>Flat, minimal chrome - no border, subtle background</td>
113
113
  </tr>
114
114
  <tr>
115
115
  <td><code>gradient</code></td>
@@ -126,7 +126,7 @@ Body content in **Markdown** is supported.
126
126
  </tr>
127
127
  <tr>
128
128
  <td><code>dark</code></td>
129
- <td>Dark background with inverted text &mdash; good on light pages</td>
129
+ <td>Dark background with inverted text - good on light pages</td>
130
130
  </tr>
131
131
  <tr>
132
132
  <td><code>glow</code></td>
@@ -134,13 +134,13 @@ Body content in **Markdown** is supported.
134
134
  </tr>
135
135
  <tr>
136
136
  <td><code>primary</code></td>
137
- <td>Legacy alias &mdash; adds <code>card-primary</code> class for backwards compatibility</td>
137
+ <td>Legacy alias - adds <code>card-primary</code> class for backwards compatibility</td>
138
138
  </tr>
139
139
  </tbody>
140
140
  </table>
141
141
 
142
142
  <h4>Built-in gradients</h4>
143
- <p>Shipped in <code>public/css/</code> &mdash; available on every install. Default when
143
+ <p>Shipped in <code>public/css/</code> - available on every install. Default when
144
144
  <code>gradient</code> is omitted: <code>indigo</code>.</p>
145
145
  <p><code>arctic</code>, <code>aurora</code>, <code>dusk</code>, <code>fire</code>, <code>forest</code>,
146
146
  <code>gold</code>, <code>indigo</code>, <code>lagoon</code>, <code>lime</code>,
@@ -148,7 +148,7 @@ Body content in **Markdown** is supported.
148
148
  <code>sunset</code></p>
149
149
 
150
150
  <h4>Project-specific gradients</h4>
151
- <p>Defined in <code>content/custom.css</code> on this site only &mdash; fresh installs will not have
151
+ <p>Defined in <code>content/custom.css</code> on this site only - fresh installs will not have
152
152
  these unless the CSS is copied over.</p>
153
153
  <p><strong>Single-tone:</strong> <code>purple</code>, <code>blue</code>, <code>green</code>,
154
154
  <code>night</code></p>
@@ -162,7 +162,7 @@ Body content in **Markdown** is supported.
162
162
  <code>silver-dark</code>, <code>charcoal-dark</code>, <code>christmas-dark</code>,
163
163
  <code>unicorn-dark</code>, <code>dreamy-dark</code>, <code>grayve-dark</code>,
164
164
  <code>mint-dark</code>, <code>wedding-dark</code></p>
165
- <p class="text-muted"><small>Gradient names are not validated &mdash; a typo falls through to the
165
+ <p class="text-muted"><small>Gradient names are not validated - a typo falls through to the
166
166
  default background with no warning. Use <code>/test-card-gradients</code> to preview every
167
167
  palette.</small></p>
168
168
 
@@ -311,7 +311,7 @@ Body content in **Markdown** is supported.
311
311
  <tr>
312
312
  <td><code>icon-top</code></td>
313
313
  <td><code>icon</code>, <code>title</code>, <code>subtitle</code></td>
314
- <td>Large centred icon above title &mdash; good for feature grids</td>
314
+ <td>Large centred icon above title - good for feature grids</td>
315
315
  </tr>
316
316
  <tr>
317
317
  <td><code>icon-inline</code></td>
@@ -387,7 +387,7 @@ Body content in **Markdown** is supported.
387
387
  <tr>
388
388
  <td><code>location-map</code></td>
389
389
  <td><code>address</code>, <code>title</code></td>
390
- <td>Placeholder map panel + address block (static &mdash; no live map)</td>
390
+ <td>Placeholder map panel + address block (static - no live map)</td>
391
391
  </tr>
392
392
  </tbody>
393
393
  </table>
@@ -407,7 +407,7 @@ Body content in **Markdown** is supported.
407
407
  <td><code>icon</code>, <code>title</code>, <code>subtitle</code>,
408
408
  <code>tags</code> (comma-separated)
409
409
  </td>
410
- <td>Circular avatar + name + role + pill tags &mdash; team / author cards</td>
410
+ <td>Circular avatar + name + role + pill tags - team / author cards</td>
411
411
  </tr>
412
412
  <tr>
413
413
  <td><code>quote-testimonial</code></td>
@@ -416,7 +416,7 @@ Body content in **Markdown** is supported.
416
416
  </tr>
417
417
  <tr>
418
418
  <td><code>rating-review</code></td>
419
- <td><code>rating</code> (0&ndash;5), <code>title</code>, <code>subtitle</code>,
419
+ <td><code>rating</code> (0-5), <code>title</code>, <code>subtitle</code>,
420
420
  <code>verified</code> (flag)
421
421
  </td>
422
422
  <td>Star rating + review body + reviewer attribution</td>
@@ -437,7 +437,7 @@ Body content in **Markdown** is supported.
437
437
  <tr>
438
438
  <td><code>stat-metric</code></td>
439
439
  <td><code>title</code> (label), <code>value</code>, <code>delta</code>,
440
- <code>progress</code> (0&ndash;100)
440
+ <code>progress</code> (0-100)
441
441
  </td>
442
442
  <td>Big-number KPI tile with delta arrow and optional progress bar</td>
443
443
  </tr>
@@ -493,12 +493,12 @@ Body content in **Markdown** is supported.
493
493
  <tr>
494
494
  <td><code>tag-cloud</code></td>
495
495
  <td><code>title</code>, <code>tags</code> (comma-separated)</td>
496
- <td>Coloured pill list &mdash; topic tags, skills, categories</td>
496
+ <td>Coloured pill list - topic tags, skills, categories</td>
497
497
  </tr>
498
498
  <tr>
499
499
  <td><code>timeline-entry</code></td>
500
500
  <td><code>title</code>, <code>subtitle</code> (date), <code>badge</code> (tag)</td>
501
- <td>Single dot-on-line timeline entry &mdash; stack several for a history list</td>
501
+ <td>Single dot-on-line timeline entry - stack several for a history list</td>
502
502
  </tr>
503
503
  </tbody>
504
504
  </table>
@@ -572,7 +572,7 @@ Body content in **Markdown** is supported.
572
572
  </table>
573
573
 
574
574
  <h4>Sub-tag reference</h4>
575
- <p>These are child tags accepted by specific layouts &mdash; they are not shortcodes in their own right
575
+ <p>These are child tags accepted by specific layouts - they are not shortcodes in their own right
576
576
  and only render inside a matching parent card.</p>
577
577
  <table class="table table-sm">
578
578
  <thead>
@@ -586,7 +586,7 @@ Body content in **Markdown** is supported.
586
586
  <tr>
587
587
  <td><code>[feature]text[/feature]</code></td>
588
588
  <td><code>pricing</code>, <code>feature-comparison</code></td>
589
- <td><code>excluded</code> (flag, comparison only) &mdash; renders as a cross instead of a tick
589
+ <td><code>excluded</code> (flag, comparison only) - renders as a cross instead of a tick
590
590
  </td>
591
591
  </tr>
592
592
  <tr>
@@ -607,7 +607,7 @@ Body content in **Markdown** is supported.
607
607
  <tr>
608
608
  <td><code>[milestone done]text[/milestone]</code></td>
609
609
  <td><code>progress-goal</code></td>
610
- <td><code>done</code> (flag) &mdash; filled dot if present, hollow otherwise</td>
610
+ <td><code>done</code> (flag) - filled dot if present, hollow otherwise</td>
611
611
  </tr>
612
612
  </tbody>
613
613
  </table>
@@ -681,7 +681,7 @@ Body content in **Markdown** is supported.
681
681
  <td><code>field=value</code> or<br><code>f1=v1,f2=v2</code></td>
682
682
  <td>Row filter (simple equality only, AND'd across comma-separated predicates). Example:
683
683
  <code>where="tab=developers"</code> or
684
- <code>where="tier=free,featured=true"</code>. No OR, no comparison operators &mdash;
684
+ <code>where="tier=free,featured=true"</code>. No OR, no comparison operators -
685
685
  use a saved View for anything more complex.
686
686
  </td>
687
687
  </tr>
@@ -703,7 +703,7 @@ Body content in **Markdown** is supported.
703
703
  <tr>
704
704
  <td><code>fields</code></td>
705
705
  <td>comma-separated field names</td>
706
- <td>Column filter &mdash; only these fields are shown (table/cards/list displays only).
706
+ <td>Column filter - only these fields are shown (table/cards/list displays only).
707
707
  </td>
708
708
  </tr>
709
709
  <tr>
@@ -776,7 +776,7 @@ Body content in **Markdown** is supported.
776
776
  </tr>
777
777
  <tr>
778
778
  <td><code>[dconfig]{...}[/dconfig]</code></td>
779
- <td>Declarative click handlers and class toggles — no JavaScript needed</td>
779
+ <td>Declarative click handlers and class toggles - no JavaScript needed</td>
780
780
  </tr>
781
781
  </tbody>
782
782
  </table>
@@ -22,7 +22,7 @@
22
22
  <tbody>
23
23
  <tr>
24
24
  <td><strong>Admin</strong></td>
25
- <td>Full access — users, plugins, settings, all content.</td>
25
+ <td>Full access - users, plugins, settings, all content.</td>
26
26
  </tr>
27
27
  <tr>
28
28
  <td><strong>Manager</strong></td>
@@ -42,11 +42,11 @@
42
42
  <h3>Authentication</h3>
43
43
  <p>The admin panel uses JWT Bearer tokens. Tokens are stored in the browser and automatically
44
44
  refreshed.
45
- Sessions expire according to <code>config/auth.json</code> — default is 24 hours.</p>
45
+ Sessions expire according to <code>config/auth.json</code> - default is 24 hours.</p>
46
46
 
47
47
  <h3>Views &amp; Actions</h3>
48
48
  <p>Views and Actions are pro-only features that require a MongoDB connection.
49
- Both roles — Admin and Manager — can create, edit, and run Views and Actions.</p>
49
+ Both roles - Admin and Manager - can create, edit, and run Views and Actions.</p>
50
50
  <table class="table table-sm">
51
51
  <thead>
52
52
  <tr>
@@ -14,16 +14,16 @@
14
14
  <h3>Creating a View</h3>
15
15
  <ol>
16
16
  <li>Navigate to <strong>Data → Views</strong> and click <strong>New View</strong>.</li>
17
- <li><strong>Source tab</strong> — enter a title, choose the primary source collection, and select
17
+ <li><strong>Source tab</strong> - enter a title, choose the primary source collection, and select
18
18
  the MongoDB connection.
19
19
  </li>
20
- <li><strong>Pipeline tab</strong> — add aggregation stages in order. Each stage has a type and a
20
+ <li><strong>Pipeline tab</strong> - add aggregation stages in order. Each stage has a type and a
21
21
  JSON config object.
22
22
  </li>
23
- <li><strong>Display tab</strong> — choose table or list mode, set page size, and optionally define
23
+ <li><strong>Display tab</strong> - choose table or list mode, set page size, and optionally define
24
24
  column definitions.
25
25
  </li>
26
- <li><strong>Access tab</strong> — select which roles can access this view and whether it is
26
+ <li><strong>Access tab</strong> - select which roles can access this view and whether it is
27
27
  publicly accessible.
28
28
  </li>
29
29
  <li>Click <strong>Save View</strong>, then use <strong>Preview</strong> to execute and inspect the
@@ -7,7 +7,7 @@
7
7
  <div class="docs-body">
8
8
 
9
9
  <p class="lead">
10
- Task-by-task reference for running a Domma CMS site. Pick a topic below — each opens as its own
10
+ Task-by-task reference for running a Domma CMS site. Pick a topic below - each opens as its own
11
11
  page, and every topic is also listed under <strong>Documentation → Usage</strong> in the sidebar.
12
12
  </p>
13
13