@orion-studios/payload-studio 0.5.0-beta.11 → 0.5.0-beta.111

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 (77) hide show
  1. package/README.md +54 -0
  2. package/dist/admin/client.d.mts +3 -0
  3. package/dist/admin/client.d.ts +3 -0
  4. package/dist/admin/client.js +1745 -200
  5. package/dist/admin/client.mjs +1756 -214
  6. package/dist/admin/index.d.mts +2 -1
  7. package/dist/admin/index.d.ts +2 -1
  8. package/dist/admin/index.js +424 -11
  9. package/dist/admin/index.mjs +19 -1
  10. package/dist/admin-app/client.d.mts +7 -0
  11. package/dist/admin-app/client.d.ts +7 -0
  12. package/dist/admin-app/client.js +1270 -3
  13. package/dist/admin-app/client.mjs +1172 -2
  14. package/dist/admin-app/index.d.mts +1 -1
  15. package/dist/admin-app/index.d.ts +1 -1
  16. package/dist/admin-app/index.js +167 -0
  17. package/dist/admin-app/index.mjs +13 -1
  18. package/dist/admin-app/styles.css +247 -0
  19. package/dist/admin.css +8 -0
  20. package/dist/blocks/index.js +1011 -191
  21. package/dist/blocks/index.mjs +2 -2
  22. package/dist/chunk-ADIIWIYL.mjs +322 -0
  23. package/dist/{chunk-ZLLNO5FM.mjs → chunk-BET2YLAS.mjs} +104 -15
  24. package/dist/chunk-DAIZDGHL.mjs +614 -0
  25. package/dist/chunk-GKMBYYXF.mjs +776 -0
  26. package/dist/chunk-JQAHXYAM.mjs +1829 -0
  27. package/dist/chunk-OQSEJXC4.mjs +166 -0
  28. package/dist/chunk-PF3EBZXF.mjs +326 -0
  29. package/dist/chunk-ROTPP5CU.mjs +99 -0
  30. package/dist/chunk-XVH5SCBD.mjs +234 -0
  31. package/dist/chunk-ZTXJG4K5.mjs +85 -0
  32. package/dist/index-7lxTrxSG.d.mts +128 -0
  33. package/dist/index-7lxTrxSG.d.ts +128 -0
  34. package/dist/index-B7QvY3yF.d.mts +245 -0
  35. package/dist/index-BK03FiEM.d.ts +245 -0
  36. package/dist/{index-CmR6NInu.d.ts → index-BzKOThsI.d.mts} +30 -3
  37. package/dist/{index-CmR6NInu.d.mts → index-BzKOThsI.d.ts} +30 -3
  38. package/dist/{index-DbH0Ljwp.d.mts → index-D8BNfUJb.d.mts} +17 -2
  39. package/dist/{index-DbH0Ljwp.d.ts → index-DD_E2UfJ.d.ts} +17 -2
  40. package/dist/index-DUi_XND6.d.ts +193 -0
  41. package/dist/index-gLl_358v.d.mts +193 -0
  42. package/dist/index.d.mts +6 -5
  43. package/dist/index.d.ts +6 -5
  44. package/dist/index.js +2876 -460
  45. package/dist/index.mjs +12 -10
  46. package/dist/nextjs/index.d.mts +2 -1
  47. package/dist/nextjs/index.d.ts +2 -1
  48. package/dist/nextjs/index.js +497 -16
  49. package/dist/nextjs/index.mjs +8 -3
  50. package/dist/socialMedia-C05Iy-SV.d.mts +21 -0
  51. package/dist/socialMedia-C05Iy-SV.d.ts +21 -0
  52. package/dist/studio/index.d.mts +2 -1
  53. package/dist/studio/index.d.ts +2 -1
  54. package/dist/studio/index.js +171 -5
  55. package/dist/studio/index.mjs +7 -3
  56. package/dist/studio-pages/builder.css +517 -32
  57. package/dist/studio-pages/client.d.mts +75 -1
  58. package/dist/studio-pages/client.d.ts +75 -1
  59. package/dist/studio-pages/client.js +5662 -2759
  60. package/dist/studio-pages/client.mjs +5578 -2767
  61. package/dist/studio-pages/index.d.mts +4 -2
  62. package/dist/studio-pages/index.d.ts +4 -2
  63. package/dist/studio-pages/index.js +859 -71
  64. package/dist/studio-pages/index.mjs +10 -4
  65. package/package.json +35 -13
  66. package/dist/chunk-AAOHJDNS.mjs +0 -67
  67. package/dist/chunk-ETRRXURT.mjs +0 -141
  68. package/dist/chunk-J7W5EE3B.mjs +0 -278
  69. package/dist/chunk-N67KVM2S.mjs +0 -156
  70. package/dist/chunk-NESLJZFE.mjs +0 -303
  71. package/dist/chunk-U5BSPWAD.mjs +0 -1034
  72. package/dist/index-B9N5MyjF.d.mts +0 -39
  73. package/dist/index-BallJs-K.d.mts +0 -43
  74. package/dist/index-BallJs-K.d.ts +0 -43
  75. package/dist/index-DJFhANvJ.d.mts +0 -128
  76. package/dist/index-DJFhANvJ.d.ts +0 -128
  77. package/dist/index-g8tBHLKD.d.ts +0 -39
@@ -1,3 +1,3 @@
1
- export { A as AdminBreadcrumbItem, a as AdminBreadcrumbs, b as AdminNavItem, c as AdminPage, d as AdminRole, n as navItemIsActive, r as roleCanAccessNav } from '../index-BallJs-K.mjs';
1
+ export { A as AdminBreadcrumbItem, a as AdminBreadcrumbs, b as AdminNavIcon, c as AdminNavInput, d as AdminNavItem, e as AdminNavLinkItem, f as AdminPage, g as AdminPageLinkOption, h as AdminPageRecord, j as AdminRole, M as MediaDetailPanelProps, k as MediaListItemProps, N as NestedNavItem, l as NestedNavItemInput, m as NestedNavTree, n as buildAdminPageLinkOptions, o as buildNestedNavTree, p as getAdminNavRows, q as navItemIsActive, r as normalizeAdminNavInputs, s as normalizeNestedNavItems, t as parseAdminHeaderNavFromForm, u as roleCanAccessNav } from '../index-7lxTrxSG.mjs';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
@@ -1,3 +1,3 @@
1
- export { A as AdminBreadcrumbItem, a as AdminBreadcrumbs, b as AdminNavItem, c as AdminPage, d as AdminRole, n as navItemIsActive, r as roleCanAccessNav } from '../index-BallJs-K.js';
1
+ export { A as AdminBreadcrumbItem, a as AdminBreadcrumbs, b as AdminNavIcon, c as AdminNavInput, d as AdminNavItem, e as AdminNavLinkItem, f as AdminPage, g as AdminPageLinkOption, h as AdminPageRecord, j as AdminRole, M as MediaDetailPanelProps, k as MediaListItemProps, N as NestedNavItem, l as NestedNavItemInput, m as NestedNavTree, n as buildAdminPageLinkOptions, o as buildNestedNavTree, p as getAdminNavRows, q as navItemIsActive, r as normalizeAdminNavInputs, s as normalizeNestedNavItems, t as parseAdminHeaderNavFromForm, u as roleCanAccessNav } from '../index-7lxTrxSG.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
@@ -22,7 +22,13 @@ var admin_app_exports = {};
22
22
  __export(admin_app_exports, {
23
23
  AdminBreadcrumbs: () => AdminBreadcrumbs,
24
24
  AdminPage: () => AdminPage,
25
+ buildAdminPageLinkOptions: () => buildAdminPageLinkOptions,
26
+ buildNestedNavTree: () => buildNestedNavTree,
27
+ getAdminNavRows: () => getAdminNavRows,
25
28
  navItemIsActive: () => navItemIsActive,
29
+ normalizeAdminNavInputs: () => normalizeAdminNavInputs,
30
+ normalizeNestedNavItems: () => normalizeNestedNavItems,
31
+ parseAdminHeaderNavFromForm: () => parseAdminHeaderNavFromForm,
26
32
  roleCanAccessNav: () => roleCanAccessNav
27
33
  });
28
34
  module.exports = __toCommonJS(admin_app_exports);
@@ -57,6 +63,161 @@ function AdminPage({ title, description, breadcrumbs, actions, children }) {
57
63
  ] });
58
64
  }
59
65
 
66
+ // src/admin-app/nestedNavigation.ts
67
+ var normalizeNestedNavItems = (items) => {
68
+ const deduped = [];
69
+ const seen = /* @__PURE__ */ new Set();
70
+ for (const item of items) {
71
+ const href = typeof item.href === "string" ? item.href.trim() : "";
72
+ const label = typeof item.label === "string" ? item.label.trim() : "";
73
+ const parentHref = typeof item.parentHref === "string" ? item.parentHref.trim() : "";
74
+ if (!href || !label || seen.has(href)) {
75
+ continue;
76
+ }
77
+ seen.add(href);
78
+ deduped.push({
79
+ href,
80
+ label,
81
+ ...parentHref ? { parentHref } : {}
82
+ });
83
+ }
84
+ const hrefs = new Set(deduped.map((item) => item.href));
85
+ return deduped.map((item) => ({
86
+ href: item.href,
87
+ label: item.label,
88
+ ...item.parentHref && item.parentHref !== item.href && hrefs.has(item.parentHref) ? { parentHref: item.parentHref } : {}
89
+ }));
90
+ };
91
+ var buildNestedNavTree = (items) => {
92
+ const childrenByParent = /* @__PURE__ */ new Map();
93
+ const topLevel = [];
94
+ for (const item of items) {
95
+ if (!item.parentHref) {
96
+ topLevel.push(item);
97
+ continue;
98
+ }
99
+ const children = childrenByParent.get(item.parentHref) || [];
100
+ children.push(item);
101
+ childrenByParent.set(item.parentHref, children);
102
+ }
103
+ if (topLevel.length === 0 && items.length > 0) {
104
+ return {
105
+ topLevel: items.map((item) => ({ href: item.href, label: item.label })),
106
+ childrenByParent: /* @__PURE__ */ new Map()
107
+ };
108
+ }
109
+ return { childrenByParent, topLevel };
110
+ };
111
+
112
+ // src/admin-app/navigationLinks.ts
113
+ var fallbackHomeOption = {
114
+ href: "/",
115
+ label: "Home",
116
+ title: "Home"
117
+ };
118
+ var buildAdminPageLinkOptions = (pages) => {
119
+ const options = pages.map((page) => {
120
+ const href = typeof page.path === "string" ? page.path.trim() : "";
121
+ const title = typeof page.title === "string" && page.title.trim().length > 0 ? page.title.trim() : "Untitled Page";
122
+ if (!href) {
123
+ return null;
124
+ }
125
+ const depth = href === "/" ? 0 : href.split("/").filter(Boolean).length;
126
+ const indentLevel = Math.max(depth - 1, 0);
127
+ const indent = indentLevel > 0 ? `${"\u21B3 ".repeat(indentLevel)}` : "";
128
+ return {
129
+ href,
130
+ label: `${indent}${title}`,
131
+ title
132
+ };
133
+ }).filter((option) => option !== null).sort((a, b) => {
134
+ if (a.href === "/" && b.href !== "/") return -1;
135
+ if (b.href === "/" && a.href !== "/") return 1;
136
+ return a.href.localeCompare(b.href);
137
+ });
138
+ if (options.length === 0) {
139
+ return [fallbackHomeOption];
140
+ }
141
+ return options;
142
+ };
143
+ var getAdminNavRows = (navItems, pageOptions, minRows = 6, maxRows = 20) => {
144
+ const preferredRows = Math.max(navItems.length + 2, Math.min(8, pageOptions.length));
145
+ return Math.min(Math.max(minRows, preferredRows), maxRows);
146
+ };
147
+ var normalizeAdminNavInputs = (rows, pageOptions) => {
148
+ const allowedLinks = new Map(pageOptions.map((option) => [option.href, option.title]));
149
+ const deduped = [];
150
+ const seen = /* @__PURE__ */ new Set();
151
+ for (const row of rows) {
152
+ const href = typeof row.href === "string" ? row.href.trim() : "";
153
+ const defaultLabel = allowedLinks.get(href);
154
+ const explicitLabel = typeof row.label === "string" ? row.label.trim() : "";
155
+ const parentHref = typeof row.parentHref === "string" ? row.parentHref.trim() : "";
156
+ if (!href || !defaultLabel || seen.has(href)) {
157
+ continue;
158
+ }
159
+ seen.add(href);
160
+ deduped.push({
161
+ href,
162
+ label: explicitLabel.length > 0 ? explicitLabel : defaultLabel,
163
+ ...parentHref.length > 0 ? { parentHref } : {}
164
+ });
165
+ }
166
+ const hrefs = new Set(deduped.map((item) => item.href));
167
+ const parentByHref = new Map(deduped.map((item) => [item.href, item.parentHref || ""]));
168
+ const createsCycle = (href, parentHref) => {
169
+ const visited = /* @__PURE__ */ new Set([href]);
170
+ let current = parentHref;
171
+ while (current) {
172
+ if (visited.has(current)) {
173
+ return true;
174
+ }
175
+ visited.add(current);
176
+ current = parentByHref.get(current) || "";
177
+ }
178
+ return false;
179
+ };
180
+ return deduped.map((item) => {
181
+ const parentHref = item.parentHref;
182
+ if (!parentHref || parentHref === item.href || !hrefs.has(parentHref) || createsCycle(item.href, parentHref)) {
183
+ return {
184
+ href: item.href,
185
+ label: item.label
186
+ };
187
+ }
188
+ return item;
189
+ });
190
+ };
191
+ var parseAdminHeaderNavFromForm = (formData, pageOptions, maxRows = 24) => {
192
+ const serialized = String(formData.get("navItemsState") || "").trim();
193
+ if (serialized.length > 0) {
194
+ try {
195
+ const parsed = JSON.parse(serialized);
196
+ if (Array.isArray(parsed)) {
197
+ return normalizeAdminNavInputs(parsed.slice(0, maxRows), pageOptions);
198
+ }
199
+ } catch {
200
+ }
201
+ }
202
+ const rawCount = Number(String(formData.get("navCount") || "0"));
203
+ const navCount = Number.isFinite(rawCount) ? Math.max(0, Math.min(rawCount, maxRows)) : 0;
204
+ const navRows = [];
205
+ for (let index = 0; index < navCount; index += 1) {
206
+ const href = String(formData.get(`navPage_${index}`) || "").trim();
207
+ const label = String(formData.get(`navLabel_${index}`) || "").trim();
208
+ const parentHref = String(formData.get(`navParentHref_${index}`) || "").trim();
209
+ navRows.push({
210
+ href,
211
+ label,
212
+ parentHref
213
+ });
214
+ }
215
+ if (navRows.length > 0) {
216
+ return normalizeAdminNavInputs(navRows, pageOptions);
217
+ }
218
+ return [];
219
+ };
220
+
60
221
  // src/admin-app/routeRegistry.ts
61
222
  var roleCanAccessNav = (role, item) => {
62
223
  if (!item.roles || item.roles.length === 0) {
@@ -77,6 +238,12 @@ var navItemIsActive = (pathname, item) => {
77
238
  0 && (module.exports = {
78
239
  AdminBreadcrumbs,
79
240
  AdminPage,
241
+ buildAdminPageLinkOptions,
242
+ buildNestedNavTree,
243
+ getAdminNavRows,
80
244
  navItemIsActive,
245
+ normalizeAdminNavInputs,
246
+ normalizeNestedNavItems,
247
+ parseAdminHeaderNavFromForm,
81
248
  roleCanAccessNav
82
249
  });
@@ -1,13 +1,25 @@
1
1
  import {
2
2
  AdminBreadcrumbs,
3
3
  AdminPage,
4
+ buildAdminPageLinkOptions,
5
+ buildNestedNavTree,
6
+ getAdminNavRows,
4
7
  navItemIsActive,
8
+ normalizeAdminNavInputs,
9
+ normalizeNestedNavItems,
10
+ parseAdminHeaderNavFromForm,
5
11
  roleCanAccessNav
6
- } from "../chunk-AAOHJDNS.mjs";
12
+ } from "../chunk-XVH5SCBD.mjs";
7
13
  import "../chunk-6BWS3CLP.mjs";
8
14
  export {
9
15
  AdminBreadcrumbs,
10
16
  AdminPage,
17
+ buildAdminPageLinkOptions,
18
+ buildNestedNavTree,
19
+ getAdminNavRows,
11
20
  navItemIsActive,
21
+ normalizeAdminNavInputs,
22
+ normalizeNestedNavItems,
23
+ parseAdminHeaderNavFromForm,
12
24
  roleCanAccessNav
13
25
  };
@@ -8,6 +8,19 @@
8
8
  --orion-admin-muted: #5d6664;
9
9
  --orion-admin-card-bg: #ffffff;
10
10
  --orion-admin-card-border: #dce2e0;
11
+ --orion-admin-accent: #2563eb;
12
+ --orion-admin-accent-hover: color-mix(in srgb, var(--orion-admin-accent) 84%, black);
13
+ --orion-admin-accent-subtle: color-mix(in srgb, var(--orion-admin-accent) 10%, white);
14
+ --orion-admin-accent-soft: color-mix(in srgb, var(--orion-admin-accent) 14%, transparent);
15
+ --orion-admin-accent-border: color-mix(in srgb, var(--orion-admin-accent) 36%, transparent);
16
+ --orion-admin-selection-bg: color-mix(in srgb, var(--orion-admin-accent) 18%, white);
17
+ }
18
+
19
+ .orion-admin-shell ::selection,
20
+ .orion-admin-main ::selection,
21
+ .orion-admin-page ::selection,
22
+ .orion-admin-login-shell ::selection {
23
+ background: var(--orion-admin-selection-bg);
11
24
  }
12
25
 
13
26
  .orion-admin-shell {
@@ -101,6 +114,12 @@
101
114
  background: rgba(0, 0, 0, 0.08);
102
115
  }
103
116
 
117
+ .is-collapsed .orion-admin-nav-link {
118
+ align-items: center;
119
+ display: flex;
120
+ justify-content: center;
121
+ }
122
+
104
123
  .orion-admin-sidebar-footer {
105
124
  border-top: 1px solid var(--orion-admin-border);
106
125
  bottom: 0.9rem;
@@ -120,3 +139,231 @@
120
139
  max-width: none;
121
140
  width: 100%;
122
141
  }
142
+
143
+ .orion-admin-nav-editor {
144
+ border: 1px solid var(--orion-admin-card-border);
145
+ border-radius: 12px;
146
+ display: grid;
147
+ gap: 0.65rem;
148
+ padding: 0.75rem;
149
+ }
150
+
151
+ .orion-admin-nav-editor-head {
152
+ align-items: center;
153
+ display: flex;
154
+ justify-content: space-between;
155
+ }
156
+
157
+ .orion-admin-nav-editor-title {
158
+ font-weight: 800;
159
+ }
160
+
161
+ .orion-admin-nav-editor-add {
162
+ background: var(--orion-admin-accent);
163
+ border: 0;
164
+ border-radius: 999px;
165
+ color: #fff;
166
+ cursor: pointer;
167
+ font-size: 0.86rem;
168
+ font-weight: 800;
169
+ padding: 0.35rem 0.7rem;
170
+ }
171
+
172
+ .orion-admin-action-button {
173
+ background: var(--orion-admin-accent);
174
+ border: 0;
175
+ border-radius: 10px;
176
+ color: #fff;
177
+ cursor: pointer;
178
+ font-weight: 800;
179
+ padding: 0.55rem 0.8rem;
180
+ }
181
+
182
+ .orion-admin-nav-editor-add:hover,
183
+ .orion-admin-action-button:hover {
184
+ background: var(--orion-admin-accent-hover);
185
+ }
186
+
187
+ .orion-admin-nav-editor-help {
188
+ color: var(--orion-admin-muted);
189
+ font-size: 0.84rem;
190
+ }
191
+
192
+ .orion-admin-nav-editor-empty {
193
+ background: #f2f5f3;
194
+ border: 1px dashed var(--orion-admin-border);
195
+ border-radius: 10px;
196
+ color: var(--orion-admin-muted);
197
+ font-size: 0.9rem;
198
+ padding: 0.7rem;
199
+ }
200
+
201
+ .orion-admin-nav-editor-list {
202
+ display: grid;
203
+ gap: 0.55rem;
204
+ }
205
+
206
+ .orion-admin-nav-editor-row {
207
+ background: #fff;
208
+ border: 1px solid var(--orion-admin-border);
209
+ border-radius: 10px;
210
+ display: grid;
211
+ gap: 0.5rem;
212
+ padding: 0.65rem;
213
+ transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
214
+ }
215
+
216
+ .orion-admin-nav-editor-row.is-dragging {
217
+ border-color: var(--orion-admin-accent-border);
218
+ box-shadow: 0 10px 24px color-mix(in srgb, var(--orion-admin-accent) 16%, transparent);
219
+ transform: scale(0.996);
220
+ }
221
+
222
+ .orion-admin-nav-editor-row.is-drop-target {
223
+ border-color: color-mix(in srgb, var(--orion-admin-accent) 56%, transparent);
224
+ box-shadow: inset 0 0 0 2px var(--orion-admin-accent-soft);
225
+ }
226
+
227
+ .orion-admin-nav-editor-row-head {
228
+ align-items: center;
229
+ display: flex;
230
+ gap: 0.6rem;
231
+ }
232
+
233
+ .orion-admin-nav-editor-drag {
234
+ background: var(--orion-admin-accent-subtle);
235
+ border-radius: 999px;
236
+ color: var(--orion-admin-accent);
237
+ cursor: grab;
238
+ font-size: 0.75rem;
239
+ font-weight: 800;
240
+ padding: 0.2rem 0.5rem;
241
+ text-transform: uppercase;
242
+ user-select: none;
243
+ }
244
+
245
+ .orion-admin-nav-editor-row-index {
246
+ color: var(--orion-admin-muted);
247
+ font-size: 0.82rem;
248
+ font-weight: 700;
249
+ }
250
+
251
+ .orion-admin-nav-editor-remove {
252
+ background: #8c1f1f;
253
+ border: 0;
254
+ border-radius: 999px;
255
+ color: #fff;
256
+ cursor: pointer;
257
+ font-size: 0.8rem;
258
+ font-weight: 700;
259
+ margin-left: auto;
260
+ padding: 0.25rem 0.6rem;
261
+ }
262
+
263
+ .orion-admin-nav-editor-row-grid {
264
+ display: grid;
265
+ gap: 0.5rem;
266
+ grid-template-columns: repeat(3, minmax(0, 1fr));
267
+ }
268
+
269
+ @media (max-width: 1024px) {
270
+ .orion-admin-nav-editor-row-grid {
271
+ grid-template-columns: 1fr;
272
+ }
273
+ }
274
+
275
+ .orion-admin-media-preview {
276
+ border-radius: 10px;
277
+ display: block;
278
+ height: 68px;
279
+ object-fit: cover;
280
+ width: 68px;
281
+ }
282
+
283
+ .orion-admin-meta-table {
284
+ display: grid;
285
+ gap: 0;
286
+ padding: 0;
287
+ }
288
+
289
+ .orion-admin-meta-row {
290
+ align-items: center;
291
+ display: flex;
292
+ gap: 1rem;
293
+ justify-content: space-between;
294
+ padding: 0.6rem 1rem;
295
+ }
296
+
297
+ .orion-admin-meta-row:not(:last-child) {
298
+ border-bottom: 1px solid var(--orion-admin-card-border);
299
+ }
300
+
301
+ .orion-admin-meta-label {
302
+ color: var(--orion-admin-muted);
303
+ font-size: 0.88rem;
304
+ }
305
+
306
+ .orion-admin-meta-value {
307
+ font-size: 0.92rem;
308
+ font-weight: 700;
309
+ text-align: right;
310
+ }
311
+
312
+ .orion-admin-dropzone {
313
+ align-items: center;
314
+ border: 2px dashed var(--orion-admin-border);
315
+ border-radius: 12px;
316
+ cursor: pointer;
317
+ display: flex;
318
+ justify-content: center;
319
+ min-height: 120px;
320
+ padding: 1rem;
321
+ transition: border-color 0.15s ease, background 0.15s ease;
322
+ }
323
+
324
+ .orion-admin-dropzone:hover {
325
+ border-color: var(--orion-admin-muted);
326
+ }
327
+
328
+ .orion-admin-dropzone.is-dragging {
329
+ background: color-mix(in srgb, var(--orion-admin-accent) 7%, white);
330
+ border-color: color-mix(in srgb, var(--orion-admin-accent) 50%, transparent);
331
+ }
332
+
333
+ .orion-admin-dropzone.has-file {
334
+ border-style: solid;
335
+ }
336
+
337
+ .orion-admin-dropzone-label {
338
+ display: grid;
339
+ gap: 0.2rem;
340
+ text-align: center;
341
+ }
342
+
343
+ .orion-admin-dropzone-label strong {
344
+ font-size: 0.95rem;
345
+ }
346
+
347
+ .orion-admin-dropzone-label span {
348
+ color: var(--orion-admin-muted);
349
+ font-size: 0.85rem;
350
+ }
351
+
352
+ .orion-admin-dropzone-preview {
353
+ align-items: center;
354
+ display: flex;
355
+ gap: 0.8rem;
356
+ }
357
+
358
+ .orion-admin-dropzone-preview img {
359
+ border-radius: 8px;
360
+ height: 60px;
361
+ object-fit: cover;
362
+ width: 60px;
363
+ }
364
+
365
+ .orion-admin-dropzone-preview span {
366
+ color: var(--orion-admin-text);
367
+ font-size: 0.9rem;
368
+ font-weight: 600;
369
+ }
package/dist/admin.css CHANGED
@@ -222,6 +222,14 @@ html {
222
222
  transition: background-color 0.2s ease, color 0.2s ease;
223
223
  }
224
224
 
225
+ html[data-orion-brand] ::selection {
226
+ background: color-mix(in srgb, var(--brand-primary) 18%, white);
227
+ }
228
+
229
+ html[data-orion-brand][data-theme='dark'] ::selection {
230
+ background: color-mix(in srgb, var(--brand-primary) 26%, black);
231
+ }
232
+
225
233
  /* ============================================================
226
234
  Collapsible sections — card-like styling
227
235
  ============================================================ */