domma-cms 0.54.2 → 0.66.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.
- package/CLAUDE.md +151 -77
- package/README.md +4 -4
- package/admin/css/admin.css +1 -1
- package/admin/dist/domma/domma-tools.css +3 -3
- package/admin/dist/domma/domma-tools.min.js +3 -3
- package/admin/js/api.js +1 -1
- package/admin/js/app.js +3 -3
- package/admin/js/lib/page-picker.js +1 -0
- package/admin/js/lib/plugin-accent.js +1 -0
- package/admin/js/lib/plugin-chrome.js +1 -0
- package/admin/js/lib/shortcode-context-menu.js +2 -2
- package/admin/js/lib/sidebar-grouping.js +1 -1
- package/admin/js/lib/sidebar-grouping.test.js +1 -1
- package/admin/js/lib/sidebar-renderer.js +4 -4
- package/admin/js/lib/slideover-resizable.js +1 -0
- package/admin/js/templates/context-menu-editor.html +212 -0
- package/admin/js/templates/context-menus.html +16 -0
- package/admin/js/templates/menu-editor.html +19 -25
- package/admin/js/templates/plugin-code.html +1 -1
- package/{plugins/site-search/admin/templates/site-search.html → admin/js/templates/search.html} +50 -4
- package/admin/js/templates/settings.html +27 -97
- package/admin/js/templates/theme.html +173 -0
- package/admin/js/views/context-menu-editor.js +55 -0
- package/admin/js/views/context-menus.js +5 -0
- package/admin/js/views/form-editor.js +7 -7
- package/admin/js/views/index.js +1 -1
- package/admin/js/views/menu-editor.js +13 -13
- package/admin/js/views/plugin-marketplace.js +1 -1
- package/admin/js/views/plugins.js +25 -23
- package/admin/js/views/search.js +1 -0
- package/admin/js/views/settings.js +3 -3
- package/admin/js/views/theme.js +1 -0
- package/bin/cli.js +11 -2
- package/bin/lib/smtp-defaults.js +53 -0
- package/bin/update.js +13 -2
- package/config/menus/admin-sidebar.json +129 -23
- package/config/plugins.json +5 -5
- package/config/search.json +13 -0
- package/config/theme.json +18 -0
- package/package.json +12 -4
- package/plugins/_lib/admin/mail/compose-window.js +914 -0
- package/plugins/_lib/admin/mail/contacts.js +301 -0
- package/plugins/_lib/admin/mail/diagnostics-section.js +133 -0
- package/plugins/_lib/admin/mail/folder-tree.js +254 -0
- package/plugins/_lib/admin/mail/identity.js +480 -0
- package/plugins/_lib/admin/mail/image-senders-section.js +131 -0
- package/plugins/_lib/admin/mail/keyboard.js +136 -0
- package/plugins/_lib/admin/mail/mail.css +1 -0
- package/plugins/_lib/admin/mail/mail.html +71 -0
- package/plugins/_lib/admin/mail/panes.js +253 -0
- package/plugins/_lib/admin/mail/reader-view.js +4453 -0
- package/plugins/_lib/admin/mail/resizable.js +26 -0
- package/plugins/_lib/admin/mail/rules.js +343 -0
- package/plugins/_lib/admin/mail/scheduling.js +203 -0
- package/plugins/_lib/admin/mail/section-kit.js +277 -0
- package/plugins/_lib/admin/mail/templates.js +238 -0
- package/plugins/_lib/admin/mail/threads.js +200 -0
- package/plugins/_lib/admin/mail/vacation.js +269 -0
- package/plugins/_lib/admin/ui/help.css +1 -0
- package/plugins/_lib/admin/ui/help.js +174 -0
- package/plugins/_lib/admin/ui/resizable.js +151 -0
- package/plugins/_lib/dataStore.js +117 -0
- package/plugins/_lib/mail/accounts.js +919 -0
- package/plugins/_lib/mail/bodyTokens.js +101 -0
- package/plugins/_lib/mail/compose.js +256 -0
- package/plugins/_lib/mail/defaults.js +57 -0
- package/plugins/_lib/mail/diagnostics.js +154 -0
- package/plugins/_lib/mail/envelope.js +161 -0
- package/plugins/_lib/mail/folders.js +192 -0
- package/plugins/_lib/mail/handoff.js +274 -0
- package/plugins/_lib/mail/imapPool.js +293 -0
- package/plugins/_lib/mail/mbox.js +74 -0
- package/plugins/_lib/mail/pollSchedule.js +79 -0
- package/plugins/_lib/mail/poller.js +135 -0
- package/plugins/_lib/mail/priority.js +138 -0
- package/plugins/_lib/mail/readRoutes.js +680 -0
- package/plugins/_lib/mail/render.js +291 -0
- package/plugins/_lib/mail/ruleRunner.js +152 -0
- package/plugins/_lib/mail/scheduler.js +254 -0
- package/plugins/_lib/mail/secretbox.js +229 -0
- package/plugins/_lib/mail/send.js +396 -0
- package/plugins/_lib/mail/store.js +1002 -0
- package/plugins/_lib/mail/sync.js +292 -0
- package/plugins/_lib/mail/syncPlan.js +126 -0
- package/plugins/_lib/mail/syncSelection.js +82 -0
- package/plugins/_lib/mail/unsubscribe.js +183 -0
- package/plugins/_lib/mail/vacationRunner.js +114 -0
- package/plugins/_lib/mail/write.js +473 -0
- package/plugins/_lib/schemaSync.js +83 -0
- package/plugins/_template/admin/css/index.css +0 -0
- package/plugins/_template/admin/templates/index.html +4 -4
- package/plugins/_template/admin/views/index.js +7 -0
- package/plugins/analytics/admin/css/index.css +1 -0
- package/plugins/analytics/admin/templates/analytics.html +22 -13
- package/plugins/analytics/plugin.json +3 -0
- package/plugins/blog/admin/css/index.css +1 -0
- package/plugins/blog/admin/templates/blog.html +30 -18
- package/plugins/blog/admin/templates/categories.html +2 -2
- package/plugins/blog/admin/templates/comments.html +2 -2
- package/plugins/blog/admin/templates/post-editor.html +34 -34
- package/plugins/blog/admin/templates/settings.html +6 -3
- package/plugins/blog/admin/views/blog.js +8 -5
- package/plugins/blog/admin/views/categories.js +5 -10
- package/plugins/blog/admin/views/comments.js +5 -5
- package/plugins/blog/admin/views/post-editor.js +39 -20
- package/plugins/blog/admin/views/settings.js +52 -50
- package/plugins/blog/collections/categories/schema.json +7 -6
- package/plugins/blog/collections/comments/schema.json +11 -10
- package/plugins/blog/collections/posts/schema.json +14 -13
- package/plugins/blog/plugin.js +36 -13
- package/plugins/blog/plugin.json +13 -5
- package/plugins/blog/plugin.public.js +312 -0
- package/plugins/contacts/admin/css/index.css +1 -0
- package/plugins/contacts/admin/templates/contacts.html +128 -0
- package/plugins/contacts/admin/views/contacts.js +237 -4
- package/plugins/contacts/collections/user-contacts/schema.json +108 -0
- package/plugins/contacts/plugin.js +214 -27
- package/plugins/contacts/plugin.json +4 -1
- package/plugins/invoice/admin/css/index.css +1 -0
- package/plugins/invoice/admin/templates/editor.html +140 -49
- package/plugins/invoice/admin/templates/index.html +153 -23
- package/plugins/invoice/admin/templates/issuers.html +2 -5
- package/plugins/invoice/admin/templates/receivers.html +2 -5
- package/plugins/invoice/admin/views/contacts-source.js +266 -0
- package/plugins/invoice/admin/views/editor.js +366 -199
- package/plugins/invoice/admin/views/export.js +199 -0
- package/plugins/invoice/admin/views/help-content.js +61 -0
- package/plugins/invoice/admin/views/index.js +582 -94
- package/plugins/invoice/admin/views/issuers.js +24 -17
- package/plugins/invoice/admin/views/media.js +172 -0
- package/plugins/invoice/admin/views/party-view.js +305 -67
- package/plugins/invoice/admin/views/payments.js +127 -0
- package/plugins/invoice/admin/views/print.js +130 -0
- package/plugins/invoice/admin/views/receivers.js +49 -16
- package/plugins/invoice/admin/views/send.js +212 -0
- package/plugins/invoice/admin/views/settings.js +594 -0
- package/plugins/invoice/admin/views/view-lifecycle.js +33 -0
- package/plugins/invoice/collections/invoice-issuers/schema.json +77 -11
- package/plugins/invoice/collections/invoice-receivers/schema.json +10 -9
- package/plugins/invoice/collections/invoices/schema.json +19 -13
- package/plugins/invoice/config.js +27 -6
- package/plugins/invoice/pdf.js +164 -0
- package/plugins/invoice/plugin.js +1217 -44
- package/plugins/invoice/plugin.json +10 -9
- package/plugins/invoice/templates/_base.css +1 -0
- package/plugins/invoice/templates/classic-nologo.html +100 -0
- package/plugins/invoice/templates/classic.html +91 -0
- package/plugins/invoice/templates/invoice-print.html +24 -0
- package/plugins/invoice/templates/minimal.html +99 -0
- package/plugins/invoice/templates/modern-nologo.html +114 -0
- package/plugins/invoice/templates/modern.html +113 -0
- package/plugins/invoice/templates/templates.json +11 -0
- package/plugins/mail-reader/admin/views/mail.js +19 -0
- package/plugins/mail-reader/config.js +7 -0
- package/plugins/mail-reader/plugin.js +48 -0
- package/plugins/mail-reader/plugin.json +33 -0
- package/plugins/notes/admin/views/notes.js +1 -1
- package/plugins/notes/plugin.json +2 -2
- package/plugins/surveys/lib/audience.js +37 -0
- package/plugins/surveys/lib/campaigns.js +43 -0
- package/plugins/surveys/lib/ledger.js +110 -0
- package/plugins/surveys/lib/sending.js +106 -0
- package/plugins/surveys/lib/stats.js +62 -0
- package/plugins/surveys/lib/submit.js +95 -0
- package/plugins/surveys/lib/tokens.js +28 -0
- package/plugins/surveys/plugin.public.js +149 -0
- package/plugins/theme-switcher/admin/templates/theme-switcher.html +1 -1
- package/public/css/forms.css +1 -1
- package/public/css/menu-highlight.css +1 -1
- package/public/css/search.css +1 -0
- package/public/css/site.css +1 -1
- package/public/js/collection-context.js +2 -2
- package/public/js/context-menus.js +1 -0
- package/public/js/form-logic-engine.js +1 -1
- package/public/js/forms.js +2 -2
- package/public/js/menu-decor.mjs +1 -1
- package/public/js/search.js +1 -0
- package/public/js/site.js +1 -1
- package/scripts/build.js +37 -3
- package/scripts/copy-domma.js +48 -0
- package/scripts/seed.js +1996 -0
- package/scripts/setup.js +8 -0
- package/server/routes/api/collections.js +34 -0
- package/server/routes/api/context-menus.js +104 -0
- package/server/routes/api/forms.js +42 -3
- package/server/routes/api/notifications.js +69 -19
- package/server/routes/api/plugins.js +50 -6
- package/server/routes/api/search.js +43 -0
- package/server/routes/api/theme.js +69 -0
- package/server/routes/public.js +42 -7
- package/server/server.js +74 -0
- package/server/services/adapters/FileAdapter.js +6 -1
- package/server/services/content.js +26 -0
- package/server/services/contextMenus.js +477 -0
- package/server/services/email.js +29 -3
- package/server/services/health.js +23 -2
- package/server/services/markdown.js +70 -9
- package/server/services/menuRender.js +28 -4
- package/server/services/menus.js +25 -1
- package/server/services/permissionRegistry.js +24 -0
- package/server/services/pluginFiles.js +52 -11
- package/server/services/plugins.js +229 -6
- package/server/services/renderer.js +148 -22
- package/server/services/roles.js +1 -1
- package/server/services/search-migration.js +82 -0
- package/server/services/search.js +413 -0
- package/server/services/sidebar-migration.js +1 -0
- package/server/services/themeSettings.js +541 -0
- package/server/services/users.js +8 -0
- package/server/templates/page.html +4 -2
- package/plugins/contacts/data/contacts.json +0 -20
- package/plugins/notes/data/notes.json +0 -1
- package/plugins/site-search/admin/views/site-search.js +0 -116
- package/plugins/site-search/config.js +0 -15
- package/plugins/site-search/plugin.js +0 -188
- package/plugins/site-search/plugin.json +0 -40
- package/plugins/site-search/public/inject-body.html +0 -17
- package/plugins/site-search/public/inject-head.html +0 -1
- package/plugins/site-search/public/search.css +0 -1
- package/plugins/site-search/public/search.js +0 -1
- package/plugins/todo/data/todos.json +0 -1
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
<div class="page-header">
|
|
2
|
+
<h2><span data-icon="menu"></span> <span id="ctx-title">New context menu</span></h2>
|
|
3
|
+
<div class="header-actions">
|
|
4
|
+
<a class="btn btn-secondary" href="#/context-menus"><span data-icon="arrow-left"></span> Back</a>
|
|
5
|
+
<button class="btn btn-primary" id="ctx-save"><span data-icon="check"></span> Save</button>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<div id="ctx-errors" class="alert alert-danger mb-4" style="display:none;"></div>
|
|
10
|
+
|
|
11
|
+
<p class="text-muted ctx-intro">
|
|
12
|
+
A context menu is not placed on a page the way a nav menu is. It attaches to a <strong>region</strong>
|
|
13
|
+
and opens when someone right-clicks inside it. So there are two questions to answer: which region, and
|
|
14
|
+
what the menu offers. Everything else has a sensible default.
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<div class="row ctx-workspace">
|
|
18
|
+
<div class="col-8">
|
|
19
|
+
<div class="tabs" id="ctx-tabs">
|
|
20
|
+
<div class="tab-list">
|
|
21
|
+
<button class="tab-item active">Binding</button>
|
|
22
|
+
<button class="tab-item">Items</button>
|
|
23
|
+
<button class="tab-item">Appearance</button>
|
|
24
|
+
<button class="tab-item">Scope</button>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<!-- Binding ------------------------------------------------------- -->
|
|
28
|
+
<div class="tab-panel active">
|
|
29
|
+
<div class="row">
|
|
30
|
+
<div class="col-12">
|
|
31
|
+
<div class="card mb-4">
|
|
32
|
+
<div class="card-header"><h3 class="m-0">Where it binds</h3></div>
|
|
33
|
+
<div class="card-body">
|
|
34
|
+
<div class="form-group">
|
|
35
|
+
<label class="form-label" for="ctx-name">Name<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Your label for this menu in the admin list. Visitors never see it.">?</button></label>
|
|
36
|
+
<input class="form-input" id="ctx-name" type="text" placeholder="Entry actions">
|
|
37
|
+
</div>
|
|
38
|
+
<div class="form-group">
|
|
39
|
+
<label class="form-label" for="ctx-slug">Slug<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="The filename this menu is saved as. Fixed once created, because the file is the record.">?</button></label>
|
|
40
|
+
<input class="form-input" id="ctx-slug" type="text" placeholder="entry-actions">
|
|
41
|
+
<small class="text-muted">Lowercase letters, numbers and hyphens. Cannot be changed later.</small>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="form-group">
|
|
44
|
+
<label class="form-label" for="ctx-selector">Container selector<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="A CSS selector for the region, e.g. #product-grid, .entry-card or main. Right-clicks anywhere inside it are offered to this menu. body, html, * and :root are refused, because they would swallow every other menu on the page.">?</button></label>
|
|
45
|
+
<input class="form-input" id="ctx-selector" type="text" placeholder="#product-grid">
|
|
46
|
+
<small class="text-muted">The region this menu covers. Right-clicks inside it are offered to this menu.</small>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="form-group">
|
|
49
|
+
<label class="form-label" for="ctx-match">Match (optional)<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Narrows it: only claim the click when it landed on something matching this, e.g. [data-entry-id] to answer on rows but not the space between them. Blank means the whole container.">?</button></label>
|
|
50
|
+
<input class="form-input" id="ctx-match" type="text" placeholder="[data-entry-id]">
|
|
51
|
+
<small class="text-muted">Only claim right-clicks on descendants matching this. Leave empty to cover the whole container.</small>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="form-group">
|
|
54
|
+
<label class="form-label" for="ctx-exclude">Exclude (optional)<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Holes in the region. A right-click on one of these falls through to whatever encloses it, which is useful for links and inputs where the browser's own menu is more use.">?</button></label>
|
|
55
|
+
<input class="form-input" id="ctx-exclude" type="text" placeholder="a, button, input">
|
|
56
|
+
<small class="text-muted">Regions that decline, so the click falls through to whatever encloses them.</small>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<div class="col-12">
|
|
63
|
+
<div class="card mb-4">
|
|
64
|
+
<div class="card-header"><h3 class="m-0">Behaviour<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Menus can sit inside one another. A right-click picks the INNERMOST menu covering the spot clicked, never the one that happened to load first.">?</button></h3></div>
|
|
65
|
+
<div class="card-body">
|
|
66
|
+
<div class="form-group">
|
|
67
|
+
<label class="form-label" for="ctx-inherit">When nested inside another menu<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Append puts the outer menu's items after yours, Prepend before, and Stand alone shows only yours.">?</button></label>
|
|
68
|
+
<select class="form-select" id="ctx-inherit">
|
|
69
|
+
<option value="append">Show my items, then theirs (default)</option>
|
|
70
|
+
<option value="prepend">Show their items, then mine</option>
|
|
71
|
+
<option value="false">Show only my items</option>
|
|
72
|
+
</select>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="form-group">
|
|
75
|
+
<label class="form-check">
|
|
76
|
+
<input type="checkbox" id="ctx-enabled" checked> Enabled
|
|
77
|
+
</label>
|
|
78
|
+
<small class="text-muted">Turn this off to park a menu without deleting it. A disabled menu is never sent to the browser.</small>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<!-- Items --------------------------------------------------------- -->
|
|
87
|
+
<div class="tab-panel">
|
|
88
|
+
<div class="card">
|
|
89
|
+
<div class="card-header">
|
|
90
|
+
<h3 class="m-0">Items<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="What the menu offers when it opens, top to bottom. An Item does something when clicked, a Divider draws a line, a Heading labels a group. A menu whose items are all dividers and headings is refused on save, because there would be nothing to click.">?</button></h3>
|
|
91
|
+
<button class="btn btn-sm btn-secondary" id="ctx-add-item"><span data-icon="plus"></span> Add item</button>
|
|
92
|
+
</div>
|
|
93
|
+
<div class="card-body">
|
|
94
|
+
<div id="ctx-items"></div>
|
|
95
|
+
<p class="text-muted mb-0" id="ctx-items-empty">No items yet. Every menu needs at least one.</p>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<!-- Appearance ---------------------------------------------------- -->
|
|
101
|
+
<div class="tab-panel">
|
|
102
|
+
<div class="card">
|
|
103
|
+
<div class="card-header"><h3 class="m-0">Appearance<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="How the panel looks when it opens. Leave anything blank to inherit the site theme, which is usually what you want so the menu matches everything around it.">?</button></h3></div>
|
|
104
|
+
<div class="card-body">
|
|
105
|
+
<div class="row">
|
|
106
|
+
<div class="col-6">
|
|
107
|
+
<div class="form-group">
|
|
108
|
+
<label class="form-label" for="ctx-accent">Accent<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="The colour used for hover and the active item.">?</button></label>
|
|
109
|
+
<select class="form-select" id="ctx-accent">
|
|
110
|
+
<option value="">Theme default</option>
|
|
111
|
+
<option value="primary">Primary</option>
|
|
112
|
+
<option value="success">Success</option>
|
|
113
|
+
<option value="danger">Danger</option>
|
|
114
|
+
<option value="warning">Warning</option>
|
|
115
|
+
<option value="info">Info</option>
|
|
116
|
+
</select>
|
|
117
|
+
<small class="text-muted">Tints the border and hover wash. Labels keep the theme's text colour so they stay readable.</small>
|
|
118
|
+
</div>
|
|
119
|
+
<div class="form-group">
|
|
120
|
+
<label class="form-label" for="ctx-transition">Transition</label>
|
|
121
|
+
<select class="form-select" id="ctx-transition">
|
|
122
|
+
<option value="">Default (scale)</option>
|
|
123
|
+
<option value="fade">Fade</option>
|
|
124
|
+
<option value="slide">Slide</option>
|
|
125
|
+
<option value="none">None</option>
|
|
126
|
+
</select>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="form-group">
|
|
129
|
+
<label class="form-label" for="ctx-density">Density</label>
|
|
130
|
+
<select class="form-select" id="ctx-density">
|
|
131
|
+
<option value="">Comfortable</option>
|
|
132
|
+
<option value="compact">Compact</option>
|
|
133
|
+
</select>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
<div class="col-6">
|
|
137
|
+
<div class="form-group">
|
|
138
|
+
<label class="form-label" for="ctx-radius">Corner radius</label>
|
|
139
|
+
<select class="form-select" id="ctx-radius">
|
|
140
|
+
<option value="">Default</option>
|
|
141
|
+
<option value="none">Square</option>
|
|
142
|
+
<option value="sm">Small</option>
|
|
143
|
+
<option value="md">Medium</option>
|
|
144
|
+
<option value="lg">Large</option>
|
|
145
|
+
<option value="xl">Extra large</option>
|
|
146
|
+
</select>
|
|
147
|
+
</div>
|
|
148
|
+
<div class="form-group">
|
|
149
|
+
<label class="form-label" for="ctx-shadow">Shadow</label>
|
|
150
|
+
<select class="form-select" id="ctx-shadow">
|
|
151
|
+
<option value="">Default</option>
|
|
152
|
+
<option value="none">None</option>
|
|
153
|
+
<option value="sm">Small</option>
|
|
154
|
+
<option value="md">Medium</option>
|
|
155
|
+
<option value="lg">Large</option>
|
|
156
|
+
<option value="xl">Extra large</option>
|
|
157
|
+
</select>
|
|
158
|
+
</div>
|
|
159
|
+
<div class="form-group">
|
|
160
|
+
<label class="form-label" for="ctx-opacity">Opacity<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Below 100 the panel lets the page show through. Anything under about 80 gets hard to read over busy content.">?</button></label>
|
|
161
|
+
<input class="form-input" id="ctx-opacity" type="number" min="20" max="100" placeholder="100">
|
|
162
|
+
<small class="text-muted">Below 100 gives a translucent panel with a blurred backdrop. Text stays fully opaque.</small>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<!-- Scope --------------------------------------------------------- -->
|
|
171
|
+
<div class="tab-panel">
|
|
172
|
+
<div class="card">
|
|
173
|
+
<div class="card-header"><h3 class="m-0">Scope<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Which pages carry this menu. Leave BOTH blank and it applies site-wide. A menu that does not apply to a page is not sent to that page at all.">?</button></h3></div>
|
|
174
|
+
<div class="card-body">
|
|
175
|
+
<div class="row">
|
|
176
|
+
<div class="col-6">
|
|
177
|
+
<div class="form-group">
|
|
178
|
+
<label class="form-label" for="ctx-pages">Pages<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Comma separated URL paths. Supports * as a wildcard, so /shop/* covers everything under /shop. Blank means every page.">?</button></label>
|
|
179
|
+
<input class="form-input" id="ctx-pages" type="text" placeholder="/shop/*, /about">
|
|
180
|
+
<small class="text-muted">Comma separated. Supports a trailing <code>/*</code>. Leave empty for site-wide.</small>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="col-6">
|
|
184
|
+
<div class="form-group">
|
|
185
|
+
<label class="form-label" for="ctx-projects">Projects<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="Comma separated project slugs. The menu then applies only to pages belonging to those projects.">?</button></label>
|
|
186
|
+
<input class="form-input" id="ctx-projects" type="text" placeholder="core, shop">
|
|
187
|
+
<small class="text-muted">Comma separated project slugs.</small>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
</div><!-- /col-8 -->
|
|
197
|
+
|
|
198
|
+
<!-- One preview, beside the tabs rather than inside them: four copies would
|
|
199
|
+
be four elements sharing #ctx-preview, and the menu binds by selector.
|
|
200
|
+
Sticky, so it stays put while a long Items tab scrolls past it. -->
|
|
201
|
+
<div class="col-4">
|
|
202
|
+
<div class="card ctx-preview-card">
|
|
203
|
+
<div class="card-header"><h3 class="m-0">Try it<button type="button" class="ctx-help" aria-label="What is this?" data-tooltip="The real menu, built from what you have entered, updating as you type. This is the component itself rather than a drawing of it.">?</button></h3></div>
|
|
204
|
+
<div class="card-body">
|
|
205
|
+
<p class="text-muted">Right-click the panel below to see this menu as configured.</p>
|
|
206
|
+
<div id="ctx-preview" class="p-4 text-center" style="border:1px dashed var(--dm-border); border-radius:var(--dm-radius-md);">
|
|
207
|
+
Right-click to preview
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
</div><!-- /ctx-workspace -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<div class="page-header">
|
|
2
|
+
<h2><span data-icon="menu"></span> Context Menus</h2>
|
|
3
|
+
<div class="header-actions">
|
|
4
|
+
<a class="btn btn-primary" href="#/context-menus/new"><span data-icon="plus"></span> New context menu</a>
|
|
5
|
+
</div>
|
|
6
|
+
</div>
|
|
7
|
+
<p class="text-muted mb-4">
|
|
8
|
+
Right-click menus bound to a region of a page. Unlike navigation menus these have no slot -
|
|
9
|
+
they bind to a CSS selector and are resolved in the browser by whichever menu is nearest the click.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<div class="card">
|
|
13
|
+
<div class="card-body">
|
|
14
|
+
<div id="context-menus-table"></div>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
@@ -59,6 +59,17 @@
|
|
|
59
59
|
</select>
|
|
60
60
|
<small class="form-hint">Vertical stacks the items into a column - a docked side rail in the navbar slot, an indented list for <code>[menu]</code> and floating panels. Below 993px the navbar always falls back to the mobile drawer.</small>
|
|
61
61
|
</div>
|
|
62
|
+
<div class="form-group">
|
|
63
|
+
<label for="me-align">Alignment</label>
|
|
64
|
+
<select id="me-align" name="align" class="form-input">
|
|
65
|
+
<option value="">- default -</option>
|
|
66
|
+
<option value="left">Left</option>
|
|
67
|
+
<option value="centre">Centre</option>
|
|
68
|
+
<option value="right">Right</option>
|
|
69
|
+
<option value="spread">Spread evenly</option>
|
|
70
|
+
</select>
|
|
71
|
+
<small class="form-hint">Where the items sit along a horizontal menu. On the public navbar the default is <strong>centre</strong>, measured on the bar itself rather than on the room left beside the brand. A <code>[menu]</code> in the page body packs left unless you choose otherwise. Vertical menus and the mobile drawer ignore this.</small>
|
|
72
|
+
</div>
|
|
62
73
|
<div class="form-group dm-vertical-field" style="display:none">
|
|
63
74
|
<label for="me-side">Rail side</label>
|
|
64
75
|
<select id="me-side" name="side" class="form-input">
|
|
@@ -161,33 +172,16 @@
|
|
|
161
172
|
</div>
|
|
162
173
|
<div class="form-group">
|
|
163
174
|
<label for="me-highlight-hover">Hover effect</label>
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
<option value="underline">Underline</option>
|
|
169
|
-
<option value="overline">Overline</option>
|
|
170
|
-
<option value="background">Background tint</option>
|
|
171
|
-
<option value="uppercase">Uppercase</option>
|
|
172
|
-
<option value="grow">Grow</option>
|
|
173
|
-
<option value="breathe">Breathe</option>
|
|
174
|
-
<option value="glow">Glow</option>
|
|
175
|
-
</select>
|
|
176
|
-
<small class="form-hint">What an item does under the pointer. Applies wherever this menu is drawn - navbar, footer, <code>[menu]</code> and the admin sidebar.</small>
|
|
175
|
+
<!-- Options are filled from HIGHLIGHT_HOVER in menu-decor.mjs on mount,
|
|
176
|
+
so this list and the per-item editor's always match. -->
|
|
177
|
+
<select id="me-highlight-hover" name="highlightHover" class="form-input"></select>
|
|
178
|
+
<small class="form-hint">What an item does under the pointer. Applies wherever this menu is drawn - navbar, footer, <code>[menu]</code> and the admin sidebar. Any single item can override this in its own editor, under Highlighting.</small>
|
|
177
179
|
</div>
|
|
178
180
|
<div class="form-group">
|
|
179
|
-
<label for="me-highlight-active">
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
<option value="bold">Bold</option>
|
|
184
|
-
<option value="underline">Underline</option>
|
|
185
|
-
<option value="overline">Overline</option>
|
|
186
|
-
<option value="background">Background tint</option>
|
|
187
|
-
<option value="darken">Darkened</option>
|
|
188
|
-
<option value="pill">Filled pill</option>
|
|
189
|
-
</select>
|
|
190
|
-
<small class="form-hint">How the item pointing at the page you are on is marked out.</small>
|
|
181
|
+
<label for="me-highlight-active">When selected</label>
|
|
182
|
+
<!-- Filled from HIGHLIGHT_ACTIVE in menu-decor.mjs on mount. -->
|
|
183
|
+
<select id="me-highlight-active" name="highlightActive" class="form-input"></select>
|
|
184
|
+
<small class="form-hint">How the item pointing at the page you are on is marked out. Any single item can override this in its own editor, under Highlighting.</small>
|
|
191
185
|
</div>
|
|
192
186
|
<div class="form-group">
|
|
193
187
|
<label for="me-highlight-accent">Highlight colour</label>
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
<span class="pcode-current" id="pcode-current">Select a file</span>
|
|
69
69
|
<span style="flex:1"></span>
|
|
70
70
|
<button id="pcode-rename" class="btn btn-sm btn-ghost" title="Rename file" disabled><span data-icon="edit-3"></span></button>
|
|
71
|
-
<button id="pcode-delete" class="btn btn-sm btn-ghost" title="Delete file" disabled><span data-icon="trash
|
|
71
|
+
<button id="pcode-delete" class="btn btn-sm btn-ghost" title="Delete file" disabled><span data-icon="trash"></span></button>
|
|
72
72
|
<button id="pcode-saveall" class="btn btn-sm btn-ghost" disabled>Save All</button>
|
|
73
73
|
<button id="pcode-save" class="btn btn-sm btn-primary" disabled><span data-icon="save"></span> Save</button>
|
|
74
74
|
</div>
|
package/{plugins/site-search/admin/templates/site-search.html → admin/js/templates/search.html}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div class="view-header">
|
|
2
|
-
<h1><span data-icon="search"></span>
|
|
2
|
+
<h1><span data-icon="search"></span> Search</h1>
|
|
3
3
|
<div>
|
|
4
4
|
<button id="save-settings-btn" class="btn btn-primary">
|
|
5
5
|
<span data-icon="save"></span> Save
|
|
@@ -20,6 +20,16 @@
|
|
|
20
20
|
<div class="card mb-4" style="margin-top:1rem;">
|
|
21
21
|
<div class="card-body">
|
|
22
22
|
|
|
23
|
+
<div class="row mb-3">
|
|
24
|
+
<div class="col">
|
|
25
|
+
<label class="form-check-label">
|
|
26
|
+
<input id="field-enabled" type="checkbox">
|
|
27
|
+
Enable search on the public site
|
|
28
|
+
</label>
|
|
29
|
+
<span class="form-hint">When off, no search trigger, stylesheet or script is added to public pages.</span>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
23
33
|
<div class="row mb-3">
|
|
24
34
|
<div class="col">
|
|
25
35
|
<label class="form-label">Search placeholder text</label>
|
|
@@ -100,6 +110,41 @@
|
|
|
100
110
|
</div>
|
|
101
111
|
</div>
|
|
102
112
|
|
|
113
|
+
<div class="row mb-3" id="ss-size-row">
|
|
114
|
+
<div class="col">
|
|
115
|
+
<label class="form-label" for="field-icon-size">Icon size</label>
|
|
116
|
+
<div style="display:flex;align-items:center;gap:1rem;flex-wrap:wrap;">
|
|
117
|
+
<input id="field-icon-size" type="range" min="32" max="96" step="2" value="52"
|
|
118
|
+
style="flex:1 1 200px;max-width:260px;">
|
|
119
|
+
<span id="ss-size-value" class="text-sm font-mono" style="min-width:3.5rem;">52px</span>
|
|
120
|
+
</div>
|
|
121
|
+
<span class="form-hint">How big the floating button is, in pixels (32-96). The search glyph inside
|
|
122
|
+
scales with it. 44px and up is the comfortable range for tapping on a phone.</span>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
<div class="row mb-3" id="ss-radius-row">
|
|
127
|
+
<div class="col">
|
|
128
|
+
<label class="form-label" for="field-icon-radius">Icon corner radius</label>
|
|
129
|
+
<div style="display:flex;align-items:center;gap:1rem;flex-wrap:wrap;">
|
|
130
|
+
<input id="field-icon-radius" type="range" min="0" max="26" step="1" value="26"
|
|
131
|
+
style="flex:1 1 200px;max-width:260px;">
|
|
132
|
+
<span id="ss-radius-value" class="text-sm font-mono" style="min-width:3.5rem;">26px</span>
|
|
133
|
+
<span id="ss-radius-preview" aria-hidden="true"
|
|
134
|
+
style="width:52px;height:52px;display:inline-flex;align-items:center;justify-content:center;
|
|
135
|
+
background:var(--dm-surface);color:var(--dm-text);
|
|
136
|
+
border:1px solid var(--dm-border);border-radius:26px;
|
|
137
|
+
box-shadow:0 4px 16px rgba(0,0,0,.14);flex:0 0 auto;transition:border-radius .12s;">
|
|
138
|
+
<span data-icon="search" style="width:20px;height:20px;"></span>
|
|
139
|
+
</span>
|
|
140
|
+
</div>
|
|
141
|
+
<span class="form-hint">0 is a square, <span id="ss-radius-max-hint">26</span> a circle - the top of the
|
|
142
|
+
range is always half the icon size, so it moves when you change the size above. The preview is the real
|
|
143
|
+
button at its real size. Applies to the floating button in icon mode only - the navbar icon has no
|
|
144
|
+
surface to round, and the labelled variant is a pill by definition.</span>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
|
|
103
148
|
<div class="row" style="align-items:flex-start;gap:0;">
|
|
104
149
|
|
|
105
150
|
<div class="col-auto" style="margin-right:1.5rem;margin-bottom:1rem;">
|
|
@@ -175,14 +220,15 @@
|
|
|
175
220
|
<div class="tab-panel" id="tab-how-it-works">
|
|
176
221
|
<div class="card mb-4" style="margin-top:1rem;">
|
|
177
222
|
<div class="card-body">
|
|
178
|
-
<p class="text-muted mb-2">
|
|
179
|
-
it or use
|
|
180
|
-
|
|
223
|
+
<p class="text-muted mb-2">Search adds a search icon to the public navbar, or a floating button
|
|
224
|
+
if you prefer. Visitors can click it or use the keyboard shortcut to open a full-screen overlay
|
|
225
|
+
with live results.</p>
|
|
181
226
|
<ul class="text-muted" style="padding-left:1.25rem;line-height:1.8;">
|
|
182
227
|
<li>Results are weighted: title matches score highest, followed by tags, description, and page
|
|
183
228
|
content.
|
|
184
229
|
</li>
|
|
185
230
|
<li>Draft pages and private pages are excluded from results.</li>
|
|
231
|
+
<li>An authored context menu can offer "Site search" as an action, which opens the same overlay.</li>
|
|
186
232
|
<li>Use <kbd>↑</kbd> <kbd>↓</kbd> to navigate results, <kbd>↵</kbd> to open, <kbd>Esc</kbd> to
|
|
187
233
|
close.
|
|
188
234
|
</li>
|
|
@@ -30,101 +30,20 @@
|
|
|
30
30
|
</div>
|
|
31
31
|
</div>
|
|
32
32
|
<div class="row mb-3">
|
|
33
|
-
<div class="col
|
|
34
|
-
<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
<
|
|
45
|
-
<option value="Raleway">Raleway</option>
|
|
46
|
-
<option value="DM Sans">DM Sans</option>
|
|
47
|
-
<option value="Work Sans">Work Sans</option>
|
|
48
|
-
</optgroup>
|
|
49
|
-
<optgroup label="Serif">
|
|
50
|
-
<option value="Merriweather">Merriweather</option>
|
|
51
|
-
<option value="Playfair Display">Playfair Display</option>
|
|
52
|
-
<option value="Lora">Lora</option>
|
|
53
|
-
<option value="Roboto Slab">Roboto Slab</option>
|
|
54
|
-
</optgroup>
|
|
55
|
-
<optgroup label="Dyslexia-friendly">
|
|
56
|
-
<option value="Lexend">Lexend</option>
|
|
57
|
-
<option value="Atkinson Hyperlegible">Atkinson Hyperlegible</option>
|
|
58
|
-
<option value="Andika">Andika</option>
|
|
59
|
-
</optgroup>
|
|
60
|
-
<optgroup label="System">
|
|
61
|
-
<option value="system-ui">System UI (no web font)</option>
|
|
62
|
-
</optgroup>
|
|
63
|
-
</select>
|
|
64
|
-
<p class="form-hint text-muted" style="margin-top:0.4rem;font-size:0.8rem;">Applied to the public-facing
|
|
65
|
-
website body text. The dyslexia-friendly group uses wider letterforms and spacing to reduce character
|
|
66
|
-
confusion.</p>
|
|
67
|
-
</div>
|
|
68
|
-
<div class="col-3">
|
|
69
|
-
<label class="form-label">Font Size</label>
|
|
70
|
-
<select id="field-font-size" class="form-select">
|
|
71
|
-
<option value="13">13px - Compact</option>
|
|
72
|
-
<option value="14">14px - Small</option>
|
|
73
|
-
<option value="15">15px - Slightly small</option>
|
|
74
|
-
<option value="16">16px - Default</option>
|
|
75
|
-
<option value="17">17px - Slightly large</option>
|
|
76
|
-
<option value="18">18px - Large</option>
|
|
77
|
-
<option value="20">20px - Extra large</option>
|
|
78
|
-
</select>
|
|
79
|
-
<p class="form-hint text-muted" style="margin-top:0.4rem;font-size:0.8rem;">Root font size. All rem/em values
|
|
80
|
-
scale with this.</p>
|
|
81
|
-
</div>
|
|
82
|
-
</div>
|
|
83
|
-
<div class="row">
|
|
84
|
-
<div class="col-6">
|
|
85
|
-
<label class="form-label">Public Site Theme</label>
|
|
86
|
-
<select id="field-theme" class="form-select"></select>
|
|
87
|
-
<p class="form-hint text-muted" style="margin-top:0.4rem;font-size:0.8rem;">Applied to the public-facing
|
|
88
|
-
website.</p>
|
|
89
|
-
</div>
|
|
90
|
-
<div class="col-6">
|
|
91
|
-
<label class="form-label">Admin Theme</label>
|
|
92
|
-
<select id="field-admin-theme" class="form-select"></select>
|
|
93
|
-
<p class="form-hint text-muted" style="margin-top:0.4rem;font-size:0.8rem;">Applied to the admin panel.</p>
|
|
94
|
-
</div>
|
|
95
|
-
</div>
|
|
96
|
-
<!-- Auto day/night theme -->
|
|
97
|
-
<div class="row mt-3">
|
|
98
|
-
<div class="col">
|
|
99
|
-
<label class="form-check-label" style="display:flex;align-items:center;gap:.5rem;cursor:pointer;">
|
|
100
|
-
<input id="field-auto-theme-enabled" type="checkbox" class="form-check"> Enable automatic day/night
|
|
101
|
-
theme switching
|
|
102
|
-
</label>
|
|
103
|
-
<p id="auto-theme-roller-hint" class="form-hint text-muted"
|
|
104
|
-
style="display:none;margin-top:.35rem;font-size:.8rem;">Custom themes (Theme Roller) do not support
|
|
105
|
-
auto-switching.</p>
|
|
106
|
-
</div>
|
|
107
|
-
</div>
|
|
108
|
-
<div id="auto-theme-fields" class="row mt-3" style="display:none;">
|
|
109
|
-
<div class="col-6">
|
|
110
|
-
<label class="form-label">Day Theme</label>
|
|
111
|
-
<select id="field-day-theme" class="form-select"></select>
|
|
112
|
-
</div>
|
|
113
|
-
<div class="col-6">
|
|
114
|
-
<label class="form-label">Night Theme</label>
|
|
115
|
-
<select id="field-night-theme" class="form-select"></select>
|
|
116
|
-
</div>
|
|
117
|
-
<div class="col-3 mt-3">
|
|
118
|
-
<label class="form-label">Day Starts At</label>
|
|
119
|
-
<input id="field-day-start" type="time" class="form-input" value="07:00">
|
|
120
|
-
</div>
|
|
121
|
-
<div class="col-3 mt-3">
|
|
122
|
-
<label class="form-label">Night Starts At</label>
|
|
123
|
-
<input id="field-night-start" type="time" class="form-input" value="19:00">
|
|
33
|
+
<div class="col">
|
|
34
|
+
<div class="card" style="background:var(--dm-surface-raised);">
|
|
35
|
+
<div class="card-body" style="display:flex;align-items:center;gap:1rem;flex-wrap:wrap;">
|
|
36
|
+
<span data-icon="droplet"></span>
|
|
37
|
+
<div style="flex:1 1 240px;">
|
|
38
|
+
<strong>Themes, fonts and element overrides moved.</strong>
|
|
39
|
+
<p class="text-muted" style="margin:.25rem 0 0;font-size:.85rem;">
|
|
40
|
+
The site theme, admin theme, automatic day/night pair and typography now live in
|
|
41
|
+
Content › Theme, alongside per-element theme overrides.
|
|
42
|
+
</p>
|
|
43
|
+
</div>
|
|
44
|
+
<a href="#/theme" class="btn btn-ghost btn-sm">Open Theme</a>
|
|
124
45
|
</div>
|
|
125
|
-
|
|
126
|
-
<p class="form-hint text-muted" style="font-size:.8rem;">Themes switch based on each visitor's local
|
|
127
|
-
time. Any theme can be used - they need not be light/dark pairs.</p>
|
|
46
|
+
</div>
|
|
128
47
|
</div>
|
|
129
48
|
</div>
|
|
130
49
|
<div class="row mt-3">
|
|
@@ -214,6 +133,17 @@
|
|
|
214
133
|
|
|
215
134
|
<!-- Email / SMTP -->
|
|
216
135
|
<div class="tab-panel">
|
|
136
|
+
<!-- Shown by settings.js when smtp.host is empty. Without a host the CMS
|
|
137
|
+
falls back to an Ethereal test inbox, which ACCEPTS the mail and
|
|
138
|
+
reports success - so nothing anywhere else looks wrong. -->
|
|
139
|
+
<div id="smtp-unconfigured-notice" class="card mb-3" style="display:none;">
|
|
140
|
+
<div class="card-body" style="color:var(--dm-warning,#f59e0b);display:flex;align-items:flex-start;gap:.6rem;">
|
|
141
|
+
<span data-icon="warning"></span>
|
|
142
|
+
<span><strong>No SMTP host configured.</strong> Mail is going to a throwaway test inbox and will
|
|
143
|
+
<strong>not</strong> reach anyone - password resets and form notifications will look like they
|
|
144
|
+
sent. Set a host below and save.</span>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
217
147
|
<div class="row mb-3">
|
|
218
148
|
<div class="col-8">
|
|
219
149
|
<label class="form-label">SMTP Host</label>
|
|
@@ -437,7 +367,7 @@
|
|
|
437
367
|
</div>
|
|
438
368
|
|
|
439
369
|
<div class="row mb-4" style="align-items:flex-end;gap:0;">
|
|
440
|
-
<div class="col-
|
|
370
|
+
<div class="col-4">
|
|
441
371
|
<label class="form-label">Home label</label>
|
|
442
372
|
<input id="field-breadcrumbs-home-label" type="text" class="form-input" placeholder="Home">
|
|
443
373
|
</div>
|
|
@@ -479,7 +409,7 @@
|
|
|
479
409
|
</div>
|
|
480
410
|
|
|
481
411
|
<!-- Offsets -->
|
|
482
|
-
<div class="col-
|
|
412
|
+
<div class="col-3" style="margin-right:1rem;">
|
|
483
413
|
<label class="form-label" for="field-bc-offset-x">Horizontal offset</label>
|
|
484
414
|
<div style="display:flex;align-items:center;gap:.4rem;">
|
|
485
415
|
<input id="field-bc-offset-x" type="number" class="form-input" min="0" max="500" placeholder="8"
|
|
@@ -490,7 +420,7 @@
|
|
|
490
420
|
right edge.</p>
|
|
491
421
|
</div>
|
|
492
422
|
|
|
493
|
-
<div class="col-
|
|
423
|
+
<div class="col-3">
|
|
494
424
|
<label class="form-label" for="field-bc-offset-y">Vertical offset</label>
|
|
495
425
|
<div style="display:flex;align-items:center;gap:.4rem;">
|
|
496
426
|
<input id="field-bc-offset-y" type="number" class="form-input" min="0" max="500" placeholder="60"
|