@guard-rail/core 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +135 -4
  2. package/dist/adapters/supabase/db.js +33 -0
  3. package/dist/adapters/supabase/db.js.map +1 -1
  4. package/dist/cli/doctor.js +175 -6
  5. package/dist/cli/doctor.js.map +1 -1
  6. package/dist/core/adapter-types.d.ts +35 -2
  7. package/dist/core/csp.d.ts +32 -0
  8. package/dist/core/csp.js +26 -0
  9. package/dist/core/csp.js.map +1 -0
  10. package/dist/index.client.d.ts +3 -2
  11. package/dist/index.client.js +8 -1
  12. package/dist/index.client.js.map +1 -1
  13. package/dist/index.d.ts +3 -2
  14. package/dist/index.js +8 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/react/Admin.d.ts +5 -3
  17. package/dist/react/Admin.js +29 -41
  18. package/dist/react/Admin.js.map +1 -1
  19. package/dist/react/AuthDrawer.js +22 -34
  20. package/dist/react/AuthDrawer.js.map +1 -1
  21. package/dist/react/GRail/client.js +95 -56
  22. package/dist/react/GRail/client.js.map +1 -1
  23. package/dist/react/Icons.d.ts +3 -1
  24. package/dist/react/Icons.js +5 -0
  25. package/dist/react/Icons.js.map +1 -1
  26. package/dist/react/MediaPicker.js +12 -16
  27. package/dist/react/MediaPicker.js.map +1 -1
  28. package/dist/react/Repeater/client.js +12 -13
  29. package/dist/react/Repeater/client.js.map +1 -1
  30. package/dist/react/Team.d.ts +1 -7
  31. package/dist/react/Team.js +21 -46
  32. package/dist/react/Team.js.map +1 -1
  33. package/dist/react/guardrail.css +563 -0
  34. package/dist/server/actions.d.ts +19 -2
  35. package/dist/server/actions.js +35 -0
  36. package/dist/server/actions.js.map +1 -1
  37. package/package.json +11 -10
  38. package/supabase/admin/check-grants.sql +12 -3
  39. package/supabase/migrations/20261103000000_content_history.sql +211 -0
  40. package/dist/react/styles.d.ts +0 -504
  41. package/dist/react/styles.js +0 -500
  42. package/dist/react/styles.js.map +0 -1
@@ -1,500 +0,0 @@
1
- const LIGHT = {
2
- bg: "#ffffff",
3
- "bg-glass": "rgba(255,255,255,0.97)",
4
- fg: "#111827",
5
- fg2: "#4b5563",
6
- muted: "#6b7280",
7
- subtle: "#9ca3af",
8
- border: "#e5e7eb",
9
- "border-strong": "#d1d5db",
10
- "border-soft": "#f3f4f6",
11
- "input-bg": "#ffffff",
12
- soft: "#f3f4f6",
13
- accent: "#2563eb",
14
- "accent-soft": "#eff6ff",
15
- "accent-text": "#1d4ed8",
16
- "primary-bg": "#111827",
17
- "primary-fg": "#ffffff",
18
- danger: "#dc2626",
19
- label: "#1e3a8a",
20
- shadow: "rgba(0,0,0,0.25)"
21
- };
22
- const DARK = {
23
- bg: "#0f1b2d",
24
- "bg-glass": "rgba(15,27,45,0.97)",
25
- fg: "#e6edf7",
26
- fg2: "#b6c4d8",
27
- muted: "#9fb0c7",
28
- subtle: "#7d8ea6",
29
- border: "rgba(148,163,184,0.22)",
30
- "border-strong": "rgba(148,163,184,0.35)",
31
- "border-soft": "rgba(148,163,184,0.14)",
32
- "input-bg": "#14243b",
33
- soft: "#1a2d49",
34
- accent: "#3b82f6",
35
- "accent-soft": "rgba(59,130,246,0.16)",
36
- "accent-text": "#93c5fd",
37
- "primary-bg": "#3b82f6",
38
- "primary-fg": "#ffffff",
39
- danger: "#f87171",
40
- label: "#dbeafe",
41
- shadow: "rgba(0,0,0,0.5)"
42
- };
43
- const v = (name) => `var(--gr-${name}, ${LIGHT[name]})`;
44
- const declare = (t) => Object.entries(t).map(([k, val]) => `--gr-${k}: ${val};`).join(" ");
45
- const THEME_CSS = `:root { ${declare(LIGHT)} }
46
- [data-guardrail] { color-scheme: light; }
47
- @media (prefers-color-scheme: dark) {
48
- :root { ${declare(DARK)} }
49
- [data-guardrail] { color-scheme: dark; }
50
- }`;
51
- const S = {
52
- banner: {
53
- position: "fixed",
54
- bottom: 0,
55
- left: 0,
56
- width: "100%",
57
- background: v("bg"),
58
- color: v("fg"),
59
- padding: "12px 16px",
60
- zIndex: 1e4,
61
- borderTop: `1px solid ${v("border")}`,
62
- fontFamily: "system-ui, -apple-system, sans-serif"
63
- },
64
- bannerForm: {
65
- display: "flex",
66
- gap: 12,
67
- justifyContent: "center",
68
- alignItems: "center",
69
- flexWrap: "wrap"
70
- },
71
- brand: {
72
- fontWeight: 900,
73
- letterSpacing: "0.15em",
74
- fontSize: 12,
75
- textTransform: "uppercase"
76
- },
77
- /** Brand plus any status/error text under it, stacked instead of sharing
78
- * the form's row — otherwise a login error reads as if it's labeling the
79
- * next field over, not feedback about the brand's own sign-in attempt. */
80
- brandStack: {
81
- display: "flex",
82
- flexDirection: "column",
83
- alignItems: "flex-start",
84
- gap: 2
85
- },
86
- error: { color: v("danger"), fontSize: 12, fontWeight: 700 },
87
- input: {
88
- border: `1px solid ${v("border-strong")}`,
89
- borderRadius: 4,
90
- padding: "6px 8px",
91
- fontSize: 13,
92
- color: v("fg"),
93
- background: v("input-bg"),
94
- outline: "none"
95
- },
96
- primaryBtn: {
97
- background: v("primary-bg"),
98
- color: v("primary-fg"),
99
- padding: "7px 16px",
100
- borderRadius: 4,
101
- fontSize: 12,
102
- fontWeight: 700,
103
- border: "none",
104
- cursor: "pointer"
105
- },
106
- toolbar: {
107
- position: "fixed",
108
- bottom: 24,
109
- left: "50%",
110
- transform: "translateX(-50%)",
111
- zIndex: 9999,
112
- background: v("bg-glass"),
113
- backdropFilter: "blur(8px)",
114
- color: v("fg"),
115
- padding: "12px 20px",
116
- borderRadius: 9999,
117
- boxShadow: `0 20px 40px ${v("shadow")}`,
118
- display: "flex",
119
- alignItems: "center",
120
- gap: 20,
121
- border: `1px solid ${v("border")}`,
122
- fontFamily: "system-ui, -apple-system, sans-serif"
123
- },
124
- dot: {
125
- display: "inline-block",
126
- width: 8,
127
- height: 8,
128
- borderRadius: "50%",
129
- background: v("accent")
130
- },
131
- toolbarLabel: {
132
- fontSize: 10,
133
- fontWeight: 900,
134
- textTransform: "uppercase",
135
- letterSpacing: "0.2em",
136
- color: v("label")
137
- },
138
- divider: { width: 1, height: 16, background: v("border-strong") },
139
- linkBtn: {
140
- fontSize: 10,
141
- fontWeight: 700,
142
- textTransform: "uppercase",
143
- letterSpacing: "0.15em",
144
- color: v("muted"),
145
- background: "none",
146
- border: "none",
147
- cursor: "pointer"
148
- },
149
- popover: {
150
- position: "fixed",
151
- bottom: 90,
152
- left: "50%",
153
- transform: "translateX(-50%)",
154
- zIndex: 10001,
155
- background: v("bg"),
156
- color: v("fg"),
157
- padding: 16,
158
- borderRadius: 8,
159
- boxShadow: `0 20px 40px ${v("shadow")}`,
160
- border: `1px solid ${v("border")}`,
161
- minWidth: 300,
162
- cursor: "default",
163
- fontFamily: "system-ui, -apple-system, sans-serif"
164
- },
165
- label: {
166
- display: "block",
167
- fontSize: 10,
168
- fontWeight: 700,
169
- color: v("subtle"),
170
- marginBottom: 4,
171
- textTransform: "uppercase"
172
- },
173
- field: {
174
- border: `1px solid ${v("border-strong")}`,
175
- borderRadius: 4,
176
- padding: "6px 8px",
177
- fontSize: 13,
178
- color: v("fg"),
179
- background: v("input-bg"),
180
- width: "100%",
181
- marginBottom: 8,
182
- boxSizing: "border-box"
183
- },
184
- row: {
185
- display: "flex",
186
- gap: 8,
187
- marginTop: 8,
188
- paddingTop: 8,
189
- borderTop: `1px solid ${v("border-soft")}`
190
- },
191
- cancelBtn: {
192
- background: v("soft"),
193
- color: v("fg2"),
194
- padding: "7px 14px",
195
- borderRadius: 4,
196
- fontSize: 12,
197
- border: "none",
198
- cursor: "pointer"
199
- },
200
- /** Anchored to the element's rect at runtime; top/left are set inline. */
201
- anchoredBar: {
202
- position: "fixed",
203
- zIndex: 10001,
204
- display: "flex",
205
- alignItems: "center",
206
- gap: 4,
207
- background: v("bg-glass"),
208
- color: v("fg"),
209
- backdropFilter: "blur(8px)",
210
- padding: 4,
211
- borderRadius: 8,
212
- boxShadow: `0 8px 24px ${v("shadow")}`,
213
- border: `1px solid ${v("border")}`,
214
- fontFamily: "system-ui, -apple-system, sans-serif"
215
- },
216
- anchoredPanel: {
217
- position: "fixed",
218
- zIndex: 10001,
219
- maxHeight: "calc(100vh - 24px)",
220
- overflowY: "auto",
221
- background: v("bg"),
222
- color: v("fg"),
223
- padding: 12,
224
- borderRadius: 8,
225
- boxShadow: `0 12px 32px ${v("shadow")}`,
226
- border: `1px solid ${v("border")}`,
227
- minWidth: 260,
228
- maxWidth: "min(340px, calc(100vw - 16px))",
229
- cursor: "default",
230
- fontFamily: "system-ui, -apple-system, sans-serif"
231
- },
232
- iconBtn: {
233
- display: "inline-flex",
234
- alignItems: "center",
235
- justifyContent: "center",
236
- width: 26,
237
- height: 26,
238
- borderRadius: 6,
239
- border: "none",
240
- background: "transparent",
241
- color: v("fg"),
242
- cursor: "pointer",
243
- padding: 0
244
- },
245
- iconBtnPrimary: {
246
- display: "inline-flex",
247
- alignItems: "center",
248
- justifyContent: "center",
249
- width: 26,
250
- height: 26,
251
- borderRadius: 6,
252
- border: "none",
253
- background: v("accent"),
254
- color: "#fff",
255
- cursor: "pointer",
256
- padding: 0
257
- },
258
- scrim: {
259
- position: "fixed",
260
- inset: 0,
261
- background: "rgba(0,0,0,0.4)",
262
- zIndex: 10002
263
- },
264
- drawer: {
265
- position: "fixed",
266
- top: 0,
267
- right: 0,
268
- height: "100%",
269
- width: "min(420px, 100vw)",
270
- background: v("bg"),
271
- color: v("fg"),
272
- zIndex: 10003,
273
- boxShadow: `-12px 0 32px ${v("shadow")}`,
274
- display: "flex",
275
- flexDirection: "column",
276
- fontFamily: "system-ui, -apple-system, sans-serif"
277
- },
278
- drawerHead: {
279
- display: "flex",
280
- alignItems: "center",
281
- justifyContent: "space-between",
282
- padding: "16px 20px",
283
- borderBottom: `1px solid ${v("border")}`
284
- },
285
- drawerTitle: { fontSize: 14, fontWeight: 800, margin: 0 },
286
- drawerBody: { padding: 20, overflowY: "auto", flex: 1 },
287
- memberRow: {
288
- display: "flex",
289
- alignItems: "center",
290
- gap: 8,
291
- padding: "10px 0",
292
- borderBottom: `1px solid ${v("border-soft")}`
293
- },
294
- memberEmail: {
295
- flex: 1,
296
- fontSize: 13,
297
- overflow: "hidden",
298
- textOverflow: "ellipsis",
299
- whiteSpace: "nowrap"
300
- },
301
- select: {
302
- border: `1px solid ${v("border-strong")}`,
303
- borderRadius: 4,
304
- padding: "4px 6px",
305
- fontSize: 12,
306
- background: v("input-bg"),
307
- color: v("fg")
308
- },
309
- badge: {
310
- fontSize: 9,
311
- fontWeight: 800,
312
- textTransform: "uppercase",
313
- letterSpacing: "0.1em",
314
- padding: "2px 6px",
315
- borderRadius: 999,
316
- background: "#fef3c7",
317
- color: "#92400e"
318
- },
319
- sectionLabel: {
320
- fontSize: 10,
321
- fontWeight: 800,
322
- textTransform: "uppercase",
323
- letterSpacing: "0.15em",
324
- color: v("subtle"),
325
- margin: "20px 0 8px"
326
- },
327
- pickerScrim: {
328
- position: "fixed",
329
- inset: 0,
330
- background: "rgba(0,0,0,0.5)",
331
- zIndex: 10010
332
- },
333
- picker: {
334
- position: "fixed",
335
- top: "50%",
336
- left: "50%",
337
- transform: "translate(-50%, -50%)",
338
- width: "min(720px, calc(100vw - 32px))",
339
- maxHeight: "min(640px, calc(100vh - 32px))",
340
- background: v("bg"),
341
- color: v("fg"),
342
- borderRadius: 12,
343
- zIndex: 10011,
344
- boxShadow: `0 24px 64px ${v("shadow")}`,
345
- display: "flex",
346
- flexDirection: "column",
347
- overflow: "hidden",
348
- fontFamily: "system-ui, -apple-system, sans-serif"
349
- },
350
- pickerGrid: {
351
- display: "grid",
352
- gridTemplateColumns: "repeat(auto-fill, minmax(120px, 1fr))",
353
- gap: 10
354
- },
355
- pickerTile: {
356
- position: "relative",
357
- aspectRatio: "1",
358
- borderRadius: 8,
359
- overflow: "hidden",
360
- border: "2px solid transparent",
361
- background: v("soft"),
362
- cursor: "pointer",
363
- padding: 0
364
- },
365
- pickerTileActive: { borderColor: v("accent") },
366
- pickerThumb: {
367
- width: "100%",
368
- height: "100%",
369
- objectFit: "cover",
370
- display: "block"
371
- },
372
- dropzone: {
373
- border: `1.5px dashed ${v("border-strong")}`,
374
- borderRadius: 8,
375
- padding: 16,
376
- textAlign: "center",
377
- fontSize: 13,
378
- color: v("muted"),
379
- marginBottom: 14,
380
- cursor: "pointer"
381
- },
382
- dropzoneActive: {
383
- borderColor: v("accent"),
384
- background: v("accent-soft"),
385
- color: v("accent-text")
386
- },
387
- previewThumb: {
388
- // maxWidth also caps what the image contributes to the panel's width. The
389
- // panel shrink-wraps its content, so an uncapped width: 100% image grew
390
- // the whole panel to the picture's natural size.
391
- width: "100%",
392
- maxWidth: 300,
393
- height: "auto",
394
- maxHeight: 200,
395
- objectFit: "contain",
396
- background: v("soft"),
397
- borderRadius: 6,
398
- display: "block",
399
- marginBottom: 8
400
- },
401
- secondaryBtn: {
402
- background: v("soft"),
403
- color: v("fg"),
404
- padding: "7px 12px",
405
- borderRadius: 4,
406
- fontSize: 12,
407
- fontWeight: 600,
408
- border: "none",
409
- cursor: "pointer",
410
- width: "100%",
411
- marginBottom: 10
412
- },
413
- /**
414
- * Edit affordance for image fields, drawn as separate fixed elements instead
415
- * of styling the <img> itself. Backgrounds (next/image `fill` behind
416
- * overlaid content) can't take an in-place affordance: it either sits under
417
- * the content and can't be clicked, or gets lifted over it and hides it.
418
- * The outline ignores the pointer so overlaid content stays interactive;
419
- * the handle is the one clickable piece.
420
- */
421
- markerOutline: {
422
- position: "fixed",
423
- zIndex: 9990,
424
- pointerEvents: "none",
425
- boxSizing: "border-box",
426
- borderRadius: 2
427
- },
428
- markerHandle: {
429
- position: "fixed",
430
- zIndex: 9991,
431
- display: "inline-flex",
432
- alignItems: "center",
433
- gap: 5,
434
- padding: "4px 9px 4px 7px",
435
- borderRadius: 6,
436
- border: "none",
437
- background: v("accent"),
438
- color: "#fff",
439
- fontSize: 11,
440
- fontWeight: 700,
441
- fontFamily: "system-ui, -apple-system, sans-serif",
442
- cursor: "pointer",
443
- boxShadow: `0 4px 12px ${v("shadow")}`
444
- },
445
- repeaterItem: {
446
- position: "relative",
447
- outline: "1px dashed #60a5fa",
448
- outlineOffset: 2
449
- },
450
- repeaterToolbar: {
451
- position: "absolute",
452
- top: 4,
453
- right: 4,
454
- zIndex: 20,
455
- display: "flex",
456
- gap: 2,
457
- background: v("bg-glass"),
458
- color: v("fg"),
459
- backdropFilter: "blur(6px)",
460
- padding: 3,
461
- borderRadius: 6,
462
- boxShadow: `0 4px 12px ${v("shadow")}`,
463
- border: `1px solid ${v("border")}`
464
- },
465
- repeaterAddRow: {
466
- display: "flex",
467
- gap: 8,
468
- alignItems: "center",
469
- marginTop: 8,
470
- fontFamily: "system-ui, -apple-system, sans-serif"
471
- },
472
- repeaterAddBtn: {
473
- display: "inline-flex",
474
- alignItems: "center",
475
- gap: 6,
476
- padding: "8px 14px",
477
- borderRadius: 6,
478
- border: `1.5px dashed ${v("accent")}`,
479
- background: "transparent",
480
- color: v("accent"),
481
- fontSize: 12,
482
- fontWeight: 700,
483
- cursor: "pointer"
484
- },
485
- repeaterSlugInput: {
486
- border: `1px solid ${v("border-strong")}`,
487
- borderRadius: 4,
488
- padding: "7px 9px",
489
- fontSize: 13,
490
- color: v("fg"),
491
- background: v("input-bg"),
492
- minWidth: 180
493
- }
494
- };
495
- export {
496
- S,
497
- THEME_CSS,
498
- v
499
- };
500
- //# sourceMappingURL=styles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/react/styles.ts"],"sourcesContent":["import type { CSSProperties } from \"react\";\n\n/**\n * Guardrail's own chrome is styled with inline styles on purpose. Utility\n * classes would make the package depend on the consumer having Tailwind *and*\n * adding node_modules/guardrail to their content globs — it would render\n * unstyled on a clean install. Developer-authored content is never touched.\n *\n * Colors are CSS variables so the chrome can follow the visitor's OS light/dark\n * preference — inline styles can't express a media query, but they can read a\n * variable that one defines. THEME_CSS (rendered once by <GRailAdmin>) sets the\n * variables; every use below carries the light value as its fallback, so the\n * chrome still renders correctly if that stylesheet is ever absent.\n */\nconst LIGHT = {\n bg: \"#ffffff\",\n \"bg-glass\": \"rgba(255,255,255,0.97)\",\n fg: \"#111827\",\n fg2: \"#4b5563\",\n muted: \"#6b7280\",\n subtle: \"#9ca3af\",\n border: \"#e5e7eb\",\n \"border-strong\": \"#d1d5db\",\n \"border-soft\": \"#f3f4f6\",\n \"input-bg\": \"#ffffff\",\n soft: \"#f3f4f6\",\n accent: \"#2563eb\",\n \"accent-soft\": \"#eff6ff\",\n \"accent-text\": \"#1d4ed8\",\n \"primary-bg\": \"#111827\",\n \"primary-fg\": \"#ffffff\",\n danger: \"#dc2626\",\n label: \"#1e3a8a\",\n shadow: \"rgba(0,0,0,0.25)\",\n} as const;\n\nconst DARK: Record<keyof typeof LIGHT, string> = {\n bg: \"#0f1b2d\",\n \"bg-glass\": \"rgba(15,27,45,0.97)\",\n fg: \"#e6edf7\",\n fg2: \"#b6c4d8\",\n muted: \"#9fb0c7\",\n subtle: \"#7d8ea6\",\n border: \"rgba(148,163,184,0.22)\",\n \"border-strong\": \"rgba(148,163,184,0.35)\",\n \"border-soft\": \"rgba(148,163,184,0.14)\",\n \"input-bg\": \"#14243b\",\n soft: \"#1a2d49\",\n accent: \"#3b82f6\",\n \"accent-soft\": \"rgba(59,130,246,0.16)\",\n \"accent-text\": \"#93c5fd\",\n \"primary-bg\": \"#3b82f6\",\n \"primary-fg\": \"#ffffff\",\n danger: \"#f87171\",\n label: \"#dbeafe\",\n shadow: \"rgba(0,0,0,0.5)\",\n};\n\n/** A themed color: reads the variable, falls back to the light value. */\nexport const v = (name: keyof typeof LIGHT) => `var(--gr-${name}, ${LIGHT[name]})`;\n\nconst declare = (t: Record<string, string>) =>\n Object.entries(t).map(([k, val]) => `--gr-${k}: ${val};`).join(\" \");\n\n/**\n * Rendered once by <GRailAdmin>. Variables go on :root so portaled chrome\n * inherits them. `color-scheme` is deliberately scoped to Guardrail's own\n * elements, never :root — that would flip the host site's form controls and\n * scrollbars too. It's what makes native controls inside the chrome (the\n * team drawer's role <select>, its dropdown list) match the palette.\n */\nexport const THEME_CSS = `:root { ${declare(LIGHT)} }\n[data-guardrail] { color-scheme: light; }\n@media (prefers-color-scheme: dark) {\n :root { ${declare(DARK)} }\n [data-guardrail] { color-scheme: dark; }\n}`;\n\nexport const S = {\n banner: {\n position: \"fixed\",\n bottom: 0,\n left: 0,\n width: \"100%\",\n background: v(\"bg\"),\n color: v(\"fg\"),\n padding: \"12px 16px\",\n zIndex: 10000,\n borderTop: `1px solid ${v(\"border\")}`,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n bannerForm: {\n display: \"flex\",\n gap: 12,\n justifyContent: \"center\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n },\n brand: {\n fontWeight: 900,\n letterSpacing: \"0.15em\",\n fontSize: 12,\n textTransform: \"uppercase\",\n },\n /** Brand plus any status/error text under it, stacked instead of sharing\n * the form's row — otherwise a login error reads as if it's labeling the\n * next field over, not feedback about the brand's own sign-in attempt. */\n brandStack: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 2,\n },\n error: { color: v(\"danger\"), fontSize: 12, fontWeight: 700 },\n input: {\n border: `1px solid ${v(\"border-strong\")}`,\n borderRadius: 4,\n padding: \"6px 8px\",\n fontSize: 13,\n color: v(\"fg\"),\n background: v(\"input-bg\"),\n outline: \"none\",\n },\n primaryBtn: {\n background: v(\"primary-bg\"),\n color: v(\"primary-fg\"),\n padding: \"7px 16px\",\n borderRadius: 4,\n fontSize: 12,\n fontWeight: 700,\n border: \"none\",\n cursor: \"pointer\",\n },\n toolbar: {\n position: \"fixed\",\n bottom: 24,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n zIndex: 9999,\n background: v(\"bg-glass\"),\n backdropFilter: \"blur(8px)\",\n color: v(\"fg\"),\n padding: \"12px 20px\",\n borderRadius: 9999,\n boxShadow: `0 20px 40px ${v(\"shadow\")}`,\n display: \"flex\",\n alignItems: \"center\",\n gap: 20,\n border: `1px solid ${v(\"border\")}`,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n dot: {\n display: \"inline-block\",\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: v(\"accent\"),\n },\n toolbarLabel: {\n fontSize: 10,\n fontWeight: 900,\n textTransform: \"uppercase\",\n letterSpacing: \"0.2em\",\n color: v(\"label\"),\n },\n divider: { width: 1, height: 16, background: v(\"border-strong\") },\n linkBtn: {\n fontSize: 10,\n fontWeight: 700,\n textTransform: \"uppercase\",\n letterSpacing: \"0.15em\",\n color: v(\"muted\"),\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n },\n popover: {\n position: \"fixed\",\n bottom: 90,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n zIndex: 10001,\n background: v(\"bg\"),\n color: v(\"fg\"),\n padding: 16,\n borderRadius: 8,\n boxShadow: `0 20px 40px ${v(\"shadow\")}`,\n border: `1px solid ${v(\"border\")}`,\n minWidth: 300,\n cursor: \"default\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n label: {\n display: \"block\",\n fontSize: 10,\n fontWeight: 700,\n color: v(\"subtle\"),\n marginBottom: 4,\n textTransform: \"uppercase\",\n },\n field: {\n border: `1px solid ${v(\"border-strong\")}`,\n borderRadius: 4,\n padding: \"6px 8px\",\n fontSize: 13,\n color: v(\"fg\"),\n background: v(\"input-bg\"),\n width: \"100%\",\n marginBottom: 8,\n boxSizing: \"border-box\",\n },\n row: {\n display: \"flex\",\n gap: 8,\n marginTop: 8,\n paddingTop: 8,\n borderTop: `1px solid ${v(\"border-soft\")}`,\n },\n cancelBtn: {\n background: v(\"soft\"),\n color: v(\"fg2\"),\n padding: \"7px 14px\",\n borderRadius: 4,\n fontSize: 12,\n border: \"none\",\n cursor: \"pointer\",\n },\n\n /** Anchored to the element's rect at runtime; top/left are set inline. */\n anchoredBar: {\n position: \"fixed\",\n zIndex: 10001,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n background: v(\"bg-glass\"),\n color: v(\"fg\"),\n backdropFilter: \"blur(8px)\",\n padding: 4,\n borderRadius: 8,\n boxShadow: `0 8px 24px ${v(\"shadow\")}`,\n border: `1px solid ${v(\"border\")}`,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n anchoredPanel: {\n position: \"fixed\",\n zIndex: 10001,\n maxHeight: \"calc(100vh - 24px)\",\n overflowY: \"auto\",\n background: v(\"bg\"),\n color: v(\"fg\"),\n padding: 12,\n borderRadius: 8,\n boxShadow: `0 12px 32px ${v(\"shadow\")}`,\n border: `1px solid ${v(\"border\")}`,\n minWidth: 260,\n maxWidth: \"min(340px, calc(100vw - 16px))\",\n cursor: \"default\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n iconBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 26,\n height: 26,\n borderRadius: 6,\n border: \"none\",\n background: \"transparent\",\n color: v(\"fg\"),\n cursor: \"pointer\",\n padding: 0,\n },\n iconBtnPrimary: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 26,\n height: 26,\n borderRadius: 6,\n border: \"none\",\n background: v(\"accent\"),\n color: \"#fff\",\n cursor: \"pointer\",\n padding: 0,\n },\n\n scrim: {\n position: \"fixed\",\n inset: 0,\n background: \"rgba(0,0,0,0.4)\",\n zIndex: 10002,\n },\n drawer: {\n position: \"fixed\",\n top: 0,\n right: 0,\n height: \"100%\",\n width: \"min(420px, 100vw)\",\n background: v(\"bg\"),\n color: v(\"fg\"),\n zIndex: 10003,\n boxShadow: `-12px 0 32px ${v(\"shadow\")}`,\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n drawerHead: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px\",\n borderBottom: `1px solid ${v(\"border\")}`,\n },\n drawerTitle: { fontSize: 14, fontWeight: 800, margin: 0 },\n drawerBody: { padding: 20, overflowY: \"auto\", flex: 1 },\n memberRow: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"10px 0\",\n borderBottom: `1px solid ${v(\"border-soft\")}`,\n },\n memberEmail: {\n flex: 1,\n fontSize: 13,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n select: {\n border: `1px solid ${v(\"border-strong\")}`,\n borderRadius: 4,\n padding: \"4px 6px\",\n fontSize: 12,\n background: v(\"input-bg\"),\n color: v(\"fg\"),\n },\n badge: {\n fontSize: 9,\n fontWeight: 800,\n textTransform: \"uppercase\",\n letterSpacing: \"0.1em\",\n padding: \"2px 6px\",\n borderRadius: 999,\n background: \"#fef3c7\",\n color: \"#92400e\",\n },\n sectionLabel: {\n fontSize: 10,\n fontWeight: 800,\n textTransform: \"uppercase\",\n letterSpacing: \"0.15em\",\n color: v(\"subtle\"),\n margin: \"20px 0 8px\",\n },\n\n pickerScrim: {\n position: \"fixed\",\n inset: 0,\n background: \"rgba(0,0,0,0.5)\",\n zIndex: 10010,\n },\n picker: {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"min(720px, calc(100vw - 32px))\",\n maxHeight: \"min(640px, calc(100vh - 32px))\",\n background: v(\"bg\"),\n color: v(\"fg\"),\n borderRadius: 12,\n zIndex: 10011,\n boxShadow: `0 24px 64px ${v(\"shadow\")}`,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n pickerGrid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(120px, 1fr))\",\n gap: 10,\n },\n pickerTile: {\n position: \"relative\",\n aspectRatio: \"1\",\n borderRadius: 8,\n overflow: \"hidden\",\n border: \"2px solid transparent\",\n background: v(\"soft\"),\n cursor: \"pointer\",\n padding: 0,\n },\n pickerTileActive: { borderColor: v(\"accent\") },\n pickerThumb: {\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n },\n dropzone: {\n border: `1.5px dashed ${v(\"border-strong\")}`,\n borderRadius: 8,\n padding: 16,\n textAlign: \"center\",\n fontSize: 13,\n color: v(\"muted\"),\n marginBottom: 14,\n cursor: \"pointer\",\n },\n dropzoneActive: {\n borderColor: v(\"accent\"),\n background: v(\"accent-soft\"),\n color: v(\"accent-text\"),\n },\n previewThumb: {\n // maxWidth also caps what the image contributes to the panel's width. The\n // panel shrink-wraps its content, so an uncapped width: 100% image grew\n // the whole panel to the picture's natural size.\n width: \"100%\",\n maxWidth: 300,\n height: \"auto\",\n maxHeight: 200,\n objectFit: \"contain\",\n background: v(\"soft\"),\n borderRadius: 6,\n display: \"block\",\n marginBottom: 8,\n },\n secondaryBtn: {\n background: v(\"soft\"),\n color: v(\"fg\"),\n padding: \"7px 12px\",\n borderRadius: 4,\n fontSize: 12,\n fontWeight: 600,\n border: \"none\",\n cursor: \"pointer\",\n width: \"100%\",\n marginBottom: 10,\n },\n\n /**\n * Edit affordance for image fields, drawn as separate fixed elements instead\n * of styling the <img> itself. Backgrounds (next/image `fill` behind\n * overlaid content) can't take an in-place affordance: it either sits under\n * the content and can't be clicked, or gets lifted over it and hides it.\n * The outline ignores the pointer so overlaid content stays interactive;\n * the handle is the one clickable piece.\n */\n markerOutline: {\n position: \"fixed\",\n zIndex: 9990,\n pointerEvents: \"none\",\n boxSizing: \"border-box\",\n borderRadius: 2,\n },\n markerHandle: {\n position: \"fixed\",\n zIndex: 9991,\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 5,\n padding: \"4px 9px 4px 7px\",\n borderRadius: 6,\n border: \"none\",\n background: v(\"accent\"),\n color: \"#fff\",\n fontSize: 11,\n fontWeight: 700,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n cursor: \"pointer\",\n boxShadow: `0 4px 12px ${v(\"shadow\")}`,\n },\n\n repeaterItem: {\n position: \"relative\",\n outline: \"1px dashed #60a5fa\",\n outlineOffset: 2,\n },\n repeaterToolbar: {\n position: \"absolute\",\n top: 4,\n right: 4,\n zIndex: 20,\n display: \"flex\",\n gap: 2,\n background: v(\"bg-glass\"),\n color: v(\"fg\"),\n backdropFilter: \"blur(6px)\",\n padding: 3,\n borderRadius: 6,\n boxShadow: `0 4px 12px ${v(\"shadow\")}`,\n border: `1px solid ${v(\"border\")}`,\n },\n repeaterAddRow: {\n display: \"flex\",\n gap: 8,\n alignItems: \"center\",\n marginTop: 8,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n },\n repeaterAddBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"8px 14px\",\n borderRadius: 6,\n border: `1.5px dashed ${v(\"accent\")}`,\n background: \"transparent\",\n color: v(\"accent\"),\n fontSize: 12,\n fontWeight: 700,\n cursor: \"pointer\",\n },\n repeaterSlugInput: {\n border: `1px solid ${v(\"border-strong\")}`,\n borderRadius: 4,\n padding: \"7px 9px\",\n fontSize: 13,\n color: v(\"fg\"),\n background: v(\"input-bg\"),\n minWidth: 180,\n },\n} satisfies Record<string, CSSProperties>;\n"],"mappings":"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","names":[]}