gazetta 0.2.0 → 0.4.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 (72) hide show
  1. package/admin-dist/assets/index-Bh_y1d_l.css +1 -0
  2. package/admin-dist/assets/index-DjGNi6yy.js +608 -0
  3. package/admin-dist/assets/rolldown-runtime-COnpUsM8.js +1 -0
  4. package/admin-dist/assets/vendor-primevue-BnR1c_bQ.js +2097 -0
  5. package/admin-dist/assets/vendor-react-BipDVGow.js +9 -0
  6. package/admin-dist/assets/vendor-rjsf-HKBAjOmQ.js +32 -0
  7. package/admin-dist/assets/vendor-tiptap-IyO99U4R.js +142 -0
  8. package/admin-dist/assets/vendor-vue-DSjyxCX6.js +1 -0
  9. package/admin-dist/index.html +8 -7
  10. package/dist/admin-api/index.d.ts.map +1 -1
  11. package/dist/admin-api/index.js +2 -0
  12. package/dist/admin-api/index.js.map +1 -1
  13. package/dist/admin-api/routes/compare.d.ts +4 -0
  14. package/dist/admin-api/routes/compare.d.ts.map +1 -0
  15. package/dist/admin-api/routes/compare.js +55 -0
  16. package/dist/admin-api/routes/compare.js.map +1 -0
  17. package/dist/admin-api/routes/publish.d.ts +34 -0
  18. package/dist/admin-api/routes/publish.d.ts.map +1 -1
  19. package/dist/admin-api/routes/publish.js +117 -29
  20. package/dist/admin-api/routes/publish.js.map +1 -1
  21. package/dist/cli/index.js +219 -30
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/compare.d.ts +44 -0
  24. package/dist/compare.d.ts.map +1 -0
  25. package/dist/compare.js +93 -0
  26. package/dist/compare.js.map +1 -0
  27. package/dist/editor/mount.js +71 -71
  28. package/dist/editor/mount.js.map +1 -1
  29. package/dist/hash.d.ts +16 -0
  30. package/dist/hash.d.ts.map +1 -0
  31. package/dist/hash.js +57 -0
  32. package/dist/hash.js.map +1 -0
  33. package/dist/index.d.ts +3 -4
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +3 -4
  36. package/dist/index.js.map +1 -1
  37. package/dist/manifest.d.ts.map +1 -1
  38. package/dist/publish-rendered.d.ts +3 -5
  39. package/dist/publish-rendered.d.ts.map +1 -1
  40. package/dist/publish-rendered.js +37 -5
  41. package/dist/publish-rendered.js.map +1 -1
  42. package/dist/scope.d.ts +0 -4
  43. package/dist/scope.d.ts.map +1 -1
  44. package/dist/scope.js +0 -5
  45. package/dist/scope.js.map +1 -1
  46. package/dist/targets.d.ts +0 -2
  47. package/dist/targets.d.ts.map +1 -1
  48. package/dist/targets.js +21 -10
  49. package/dist/targets.js.map +1 -1
  50. package/dist/template-loader.d.ts.map +1 -1
  51. package/dist/template-loader.js +10 -13
  52. package/dist/template-loader.js.map +1 -1
  53. package/dist/templates-scan-worker.d.ts +2 -0
  54. package/dist/templates-scan-worker.d.ts.map +1 -0
  55. package/dist/templates-scan-worker.js +42 -0
  56. package/dist/templates-scan-worker.js.map +1 -0
  57. package/dist/templates-scan.d.ts +35 -0
  58. package/dist/templates-scan.d.ts.map +1 -0
  59. package/dist/templates-scan.js +146 -0
  60. package/dist/templates-scan.js.map +1 -0
  61. package/dist/types.d.ts +10 -0
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/types.js +4 -0
  64. package/dist/types.js.map +1 -1
  65. package/package.json +8 -8
  66. package/admin-dist/assets/index-BSOUexkw.css +0 -1
  67. package/admin-dist/assets/index-KgruFGS7.js +0 -617
  68. package/admin-dist/assets/vendor-primevue-zs1PFA6i.js +0 -1597
  69. package/admin-dist/assets/vendor-react-CqfEBl6C.js +0 -49
  70. package/admin-dist/assets/vendor-rjsf-Ci-RPpeZ.js +0 -40
  71. package/admin-dist/assets/vendor-tiptap-yFEgrmP-.js +0 -158
  72. package/admin-dist/assets/vendor-vue-CeoltKL-.js +0 -29
@@ -0,0 +1,35 @@
1
+ export interface TemplateInfo {
2
+ /** Template name, e.g. "hero" or "buttons/primary" */
3
+ name: string;
4
+ /** 8-char MD5 of all source files contributing to this template; '' if invalid */
5
+ hash: string;
6
+ valid: boolean;
7
+ errors: string[];
8
+ /** Files (relative to projectRoot) that contributed to the hash */
9
+ files: string[];
10
+ }
11
+ /**
12
+ * Validate and hash every template under `templatesDir`. Each template runs in
13
+ * its own worker thread for cache isolation.
14
+ *
15
+ * Templates are validated by importing them via jiti and checking for a default
16
+ * export (render function) and a `schema` export. Hashing covers the full
17
+ * relative-import graph (including `_shared/` imports), excluding `node_modules`.
18
+ *
19
+ * `projectRoot` makes hashes stable across machines (paths are relative to it).
20
+ */
21
+ export declare function scanTemplates(templatesDir: string, projectRoot: string): Promise<TemplateInfo[]>;
22
+ /**
23
+ * Re-scan a single template by name. Useful for the file watcher.
24
+ */
25
+ export declare function scanTemplate(templatesDir: string, projectRoot: string, name: string): Promise<TemplateInfo>;
26
+ /**
27
+ * Build a `Map<templateName, hash>` from scan results, excluding invalid templates
28
+ * (which have hash = ''). Used by `hashManifest` and consumers.
29
+ */
30
+ export declare function templateHashesFrom(infos: TemplateInfo[]): Map<string, string>;
31
+ /**
32
+ * Format scan errors for CLI output. Returns the number of invalid templates.
33
+ */
34
+ export declare function reportTemplateErrors(infos: TemplateInfo[]): number;
35
+ //# sourceMappingURL=templates-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-scan.d.ts","sourceRoot":"","sources":["../src/templates-scan.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAmFD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CAUzB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAYvB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CASlE"}
@@ -0,0 +1,146 @@
1
+ import { Worker } from 'node:worker_threads';
2
+ import { readdir } from 'node:fs/promises';
3
+ import { existsSync } from 'node:fs';
4
+ import { join, dirname, resolve } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ const TEMPLATE_FILES = ['index.tsx', 'index.ts', 'index.jsx', 'index.js'];
7
+ async function findEntry(dir) {
8
+ for (const f of TEMPLATE_FILES) {
9
+ const p = join(dir, f);
10
+ if (existsSync(p))
11
+ return p;
12
+ }
13
+ return null;
14
+ }
15
+ /**
16
+ * Discover all template names in a directory. Templates are subdirectories
17
+ * with an index.{ts,tsx,jsx,js} entry. Subdirectories starting with "_" are excluded
18
+ * (convention for shared code, see operations.md).
19
+ *
20
+ * Recursively descends into directories without an entry to find nested templates
21
+ * like `buttons/primary`.
22
+ */
23
+ async function discoverTemplates(templatesDir, prefix = '') {
24
+ const out = [];
25
+ let entries;
26
+ try {
27
+ entries = await readdir(templatesDir, { withFileTypes: true });
28
+ }
29
+ catch {
30
+ return out;
31
+ }
32
+ for (const e of entries) {
33
+ if (!e.isDirectory() || e.name.startsWith('_'))
34
+ continue;
35
+ const dir = join(templatesDir, e.name);
36
+ const name = prefix ? `${prefix}/${e.name}` : e.name;
37
+ const entry = await findEntry(dir);
38
+ if (entry) {
39
+ out.push({ name, entry });
40
+ }
41
+ else {
42
+ // No entry — recurse to find nested templates (e.g. buttons/primary)
43
+ const nested = await discoverTemplates(dir, name);
44
+ out.push(...nested);
45
+ }
46
+ }
47
+ return out;
48
+ }
49
+ let cachedWorkerPath = null;
50
+ function workerPath() {
51
+ if (cachedWorkerPath)
52
+ return cachedWorkerPath;
53
+ const here = dirname(fileURLToPath(import.meta.url));
54
+ // When loaded from dist/ at runtime, the worker is dist/templates-scan-worker.js.
55
+ // When loaded from src/ via vitest/tsx, the .js sibling won't exist — fall back
56
+ // to dist/, which is where it'll be after a build.
57
+ const sibling = resolve(here, './templates-scan-worker.js');
58
+ if (existsSync(sibling)) {
59
+ cachedWorkerPath = sibling;
60
+ return cachedWorkerPath;
61
+ }
62
+ // Source context (tests, dev): walk up to packages/gazetta and use dist/
63
+ const distFallback = resolve(here, '../dist/templates-scan-worker.js');
64
+ cachedWorkerPath = distFallback;
65
+ return cachedWorkerPath;
66
+ }
67
+ function scanOne(entry, projectRoot) {
68
+ return new Promise((resolveP, rejectP) => {
69
+ const w = new Worker(workerPath(), { workerData: { entry, projectRoot } });
70
+ w.once('message', (msg) => {
71
+ w.terminate();
72
+ resolveP(msg);
73
+ });
74
+ w.once('error', (err) => {
75
+ w.terminate();
76
+ rejectP(err);
77
+ });
78
+ });
79
+ }
80
+ /**
81
+ * Validate and hash every template under `templatesDir`. Each template runs in
82
+ * its own worker thread for cache isolation.
83
+ *
84
+ * Templates are validated by importing them via jiti and checking for a default
85
+ * export (render function) and a `schema` export. Hashing covers the full
86
+ * relative-import graph (including `_shared/` imports), excluding `node_modules`.
87
+ *
88
+ * `projectRoot` makes hashes stable across machines (paths are relative to it).
89
+ */
90
+ export async function scanTemplates(templatesDir, projectRoot) {
91
+ const templates = await discoverTemplates(templatesDir);
92
+ return Promise.all(templates.map(async (t) => {
93
+ try {
94
+ const out = await scanOne(t.entry, projectRoot);
95
+ return { name: t.name, ...out };
96
+ }
97
+ catch (err) {
98
+ return { name: t.name, hash: '', valid: false, errors: [`worker error: ${err.message}`], files: [] };
99
+ }
100
+ }));
101
+ }
102
+ /**
103
+ * Re-scan a single template by name. Useful for the file watcher.
104
+ */
105
+ export async function scanTemplate(templatesDir, projectRoot, name) {
106
+ const dir = join(templatesDir, name);
107
+ const entry = await findEntry(dir);
108
+ if (!entry) {
109
+ return { name, hash: '', valid: false, errors: ['no index.{ts,tsx,jsx,js} found'], files: [] };
110
+ }
111
+ try {
112
+ const out = await scanOne(entry, projectRoot);
113
+ return { name, ...out };
114
+ }
115
+ catch (err) {
116
+ return { name, hash: '', valid: false, errors: [`worker error: ${err.message}`], files: [] };
117
+ }
118
+ }
119
+ /**
120
+ * Build a `Map<templateName, hash>` from scan results, excluding invalid templates
121
+ * (which have hash = ''). Used by `hashManifest` and consumers.
122
+ */
123
+ export function templateHashesFrom(infos) {
124
+ const m = new Map();
125
+ for (const t of infos) {
126
+ if (t.valid)
127
+ m.set(t.name, t.hash);
128
+ }
129
+ return m;
130
+ }
131
+ /**
132
+ * Format scan errors for CLI output. Returns the number of invalid templates.
133
+ */
134
+ export function reportTemplateErrors(infos) {
135
+ const invalid = infos.filter(t => !t.valid);
136
+ if (!invalid.length)
137
+ return 0;
138
+ for (const t of invalid) {
139
+ console.error(`✗ Template "${t.name}" has errors:`);
140
+ for (const e of t.errors)
141
+ console.error(` · ${e}`);
142
+ }
143
+ console.error(`\n${invalid.length} of ${infos.length} templates have errors.`);
144
+ return invalid.length;
145
+ }
146
+ //# sourceMappingURL=templates-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-scan.js","sourceRoot":"","sources":["../src/templates-scan.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -96,18 +96,28 @@ export interface WorkerConfig {
96
96
  type: 'cloudflare';
97
97
  name?: string;
98
98
  }
99
+ export type TargetEnvironment = 'local' | 'staging' | 'production';
99
100
  /** Target configuration in site.yaml */
100
101
  export interface TargetConfig {
101
102
  storage: StorageConfig;
102
103
  worker?: WorkerConfig;
103
104
  /** Publish mode — 'esi' for Workers/gazetta serve, 'static' for static hosting. Default: esi if worker configured, static otherwise. */
104
105
  publishMode?: 'esi' | 'static';
106
+ /**
107
+ * Semantic intent of this target — drives UI treatment (confirmation
108
+ * prompts, badges) and ops decisions. Default: 'local' for filesystem,
109
+ * 'production' otherwise. Override in site.yaml for shared filesystem
110
+ * mounts used as production, or for cloud targets used for staging.
111
+ */
112
+ environment?: TargetEnvironment;
105
113
  /** Base URL of the site (e.g. https://gazetta.studio) */
106
114
  siteUrl?: string;
107
115
  cache?: CacheConfig;
108
116
  }
109
117
  /** Determine publish mode for a target — centralised logic used by CLI and admin API */
110
118
  export declare function getPublishMode(target: TargetConfig): 'esi' | 'static';
119
+ /** Resolve a target's environment, applying the storage-type default */
120
+ export declare function getEnvironment(target: TargetConfig): TargetEnvironment;
111
121
  /** Site manifest (site.yaml) */
112
122
  export interface SiteManifest {
113
123
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,8DAA8D;AAC9D,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;IACnG,OAAO,CAAC,EAAE,CAAC,CAAA;IACX,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;AAE1C,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;QAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;QACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;QACpD,uEAAuE;QACvE,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,GAAG,IAAI,CAAA;IACR,OAAO,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAAA;CAC/B;AAED,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;QAC5B,KAAK,EAAE,OAAO,CAAA;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;QACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KACnC,GAAG,IAAI,CAAA;IACR,OAAO,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAAA;CAC/B;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,gBAAgB,CAAA;IACzB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;CAC9B;AAED,wGAAwG;AACxG,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,eAAe,CAAA;AAErD,gCAAgC;AAChC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;CAC9B;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;CAAG;AAE9D,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,YAAY,CAAA;IAClB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,CAAA;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAA;AAElE,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,wIAAwI;IACxI,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAC9B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,KAAK,GAAG,QAAQ,CAErE;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB,CAEtE;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CACvC;AAED,0DAA0D;AAC1D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAED,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzC"}
package/dist/types.js CHANGED
@@ -2,4 +2,8 @@
2
2
  export function getPublishMode(target) {
3
3
  return target.publishMode ?? (target.worker ? 'esi' : 'static');
4
4
  }
5
+ /** Resolve a target's environment, applying the storage-type default */
6
+ export function getEnvironment(target) {
7
+ return target.environment ?? (target.storage.type === 'filesystem' ? 'local' : 'production');
8
+ }
5
9
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA0HA,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AACjE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmIA,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AACjE,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;AAC9F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gazetta",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Stateless CMS for composable websites",
5
5
  "keywords": [
6
6
  "cms",
@@ -61,7 +61,7 @@
61
61
  "@clack/prompts": "^1.2.0",
62
62
  "@floating-ui/dom": "^1.7.6",
63
63
  "@hello-pangea/dnd": "^18.0.1",
64
- "@hono/node-server": "^1.19.0",
64
+ "@hono/node-server": "^1.19.14",
65
65
  "@rjsf/core": "^6.4.0",
66
66
  "@rjsf/utils": "^6.4.0",
67
67
  "@rjsf/validator-ajv8": "^6.4.0",
@@ -93,17 +93,17 @@
93
93
  }
94
94
  },
95
95
  "devDependencies": {
96
- "@aws-sdk/client-s3": "^3.1024.0",
96
+ "@aws-sdk/client-s3": "^3.1030.0",
97
97
  "@azure/storage-blob": "^12.31.0",
98
- "@cloudflare/workers-types": "^4.20260405.1",
98
+ "@cloudflare/workers-types": "^4.20260413.1",
99
99
  "@types/js-yaml": "^4.0.0",
100
- "@types/node": "^22.0.0",
100
+ "@types/node": "^25.6.0",
101
101
  "@types/react": "^19.2.0",
102
102
  "@types/react-dom": "^19.2.0",
103
- "@vitejs/plugin-vue": "^5.2.4",
103
+ "@vitejs/plugin-vue": "^6.0.6",
104
104
  "tsx": "^4.21.0",
105
- "typescript": "^5.8.0",
106
- "vite": "^6.4.1",
105
+ "typescript": "^6.0.2",
106
+ "vite": "^8.0.8",
107
107
  "vitest": "^4.1.0"
108
108
  }
109
109
  }
@@ -1 +0,0 @@
1
- .publish-content[data-v-878d0536]{display:flex;flex-direction:column;gap:1rem}.publish-item[data-v-878d0536]{display:flex;align-items:center;gap:.5rem;font-weight:600;font-size:1rem}.publish-empty[data-v-878d0536]{color:#888;font-size:.875rem}.publish-label[data-v-878d0536]{font-size:.75rem;text-transform:uppercase;color:#888;letter-spacing:.03em}.publish-targets[data-v-878d0536]{display:flex;flex-direction:column;gap:.5rem}.publish-target[data-v-878d0536]{display:flex;align-items:center;gap:.5rem}.publish-target label[data-v-878d0536]{cursor:pointer}.publish-results[data-v-878d0536]{display:flex;flex-direction:column;gap:.5rem}.publish-result[data-v-878d0536]{display:flex;align-items:center;gap:.5rem;padding:.5rem;border-radius:6px}.publish-result.success[data-v-878d0536]{background:#052e16;color:#4ade80}.publish-result.error[data-v-878d0536]{background:#450a0a;color:#f87171}.result-target[data-v-878d0536]{font-weight:600}.result-detail[data-v-878d0536]{margin-left:auto;font-size:.875rem;opacity:.8}.fetch-content[data-v-359a5f85]{display:flex;flex-direction:column;gap:1rem}.fetch-empty[data-v-359a5f85]{color:#888;font-size:.875rem}.fetch-label[data-v-359a5f85]{font-size:.875rem;color:#aaa;margin-bottom:.5rem}.fetch-list[data-v-359a5f85]{width:100%}.fetch-result[data-v-359a5f85]{display:flex;align-items:flex-start;gap:.75rem;padding:.75rem;border-radius:6px}.fetch-result.success[data-v-359a5f85]{background:#052e16;color:#4ade80}.fetch-result.error[data-v-359a5f85]{background:#450a0a;color:#f87171}.fetch-items[data-v-359a5f85]{font-size:.75rem;opacity:.7;margin-top:.25rem}.cms-toolbar[data-v-19233328]{border-radius:0;border-left:0;border-right:0;border-top:0}.cms-logo[data-v-19233328]{font-weight:700;font-size:1.125rem;display:flex;align-items:center;gap:.5rem}.cms-site-name[data-v-19233328]{margin-left:1rem;color:#888;font-size:.875rem}.cms-btn[data-v-19233328]{margin-left:.5rem}.cms-toast[data-v-19233328]{font-size:.8125rem;display:flex;align-items:center;gap:.375rem}.cms-toast-error[data-v-19233328]{color:#dc2626}.fade-enter-active[data-v-19233328],.fade-leave-active[data-v-19233328]{transition:opacity .2s}.fade-enter-from[data-v-19233328],.fade-leave-to[data-v-19233328]{opacity:0}.unsaved-message[data-v-b86db2f5]{font-size:.875rem;color:#374151;line-height:1.5;margin:0}.unsaved-actions[data-v-b86db2f5]{display:flex;gap:.5rem;justify-content:flex-end;width:100%}*{box-sizing:border-box;margin:0;padding:0}html,body,#app,.cms-app{height:100%}body{font-family:system-ui,-apple-system,sans-serif;color:#1a1a1a;background:#fff}.dark body{color:#e4e4e7;background:#09090b}.cms-error{padding:2rem;color:#c00}.cms-loading{padding:2rem;color:#666}.global-toast{position:fixed;top:0;left:50%;transform:translate(-50%);z-index:1001;background:#fff;color:#1a1a1a;border:1px solid #e4e4e7;border-top:none;border-radius:0 0 8px 8px;padding:8px 20px;font-size:13px;font-weight:500;display:flex;align-items:center;gap:8px;box-shadow:0 4px 12px #00000014;max-width:400px}.dark .global-toast{background:#1a1a1e;color:#e8e8e8;border-color:#ffffff14;box-shadow:0 4px 12px #00000040}.toast-success{color:#16a34a}.dark .toast-success{color:#59f3a6}.toast-error{color:#dc2626}.dark .toast-error{color:#ff9ea1}.toast-link{color:inherit;text-decoration:underline}.toast-enter-active{transition:transform .2s ease-out,opacity .2s ease-out}.toast-leave-active{transition:transform .15s ease-in,opacity .15s ease-in}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(-50%) translateY(-100%)}.create-content[data-v-b4d1c25e]{display:flex;flex-direction:column;gap:1rem}.create-field[data-v-b4d1c25e]{display:flex;flex-direction:column;gap:.375rem}.create-field label[data-v-b4d1c25e]{font-size:.75rem;text-transform:uppercase;color:#888;letter-spacing:.03em}.create-input[data-v-b4d1c25e],.create-list[data-v-b4d1c25e]{width:100%}.create-hint[data-v-b4d1c25e]{font-size:.75rem;color:#666}.create-error[data-v-b4d1c25e]{color:#f87171;font-size:.875rem}.create-content[data-v-0b98775c]{display:flex;flex-direction:column;gap:1rem}.create-field[data-v-0b98775c]{display:flex;flex-direction:column;gap:.375rem}.create-field label[data-v-0b98775c]{font-size:.75rem;text-transform:uppercase;color:#888;letter-spacing:.03em}.create-input[data-v-0b98775c],.create-list[data-v-0b98775c]{width:100%}.create-error[data-v-0b98775c]{color:#f87171;font-size:.875rem}.site-tree[data-v-37e45114]{font-size:13px;line-height:22px}.section-label[data-v-37e45114]{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#9ca3af;padding:4px 8px;font-weight:600}.section-divider[data-v-37e45114]{border-top:1px solid rgba(128,128,128,.15);margin:4px 8px}.node-item[data-v-37e45114]{display:flex;align-items:center;gap:4px;height:22px;padding:0 6px;margin:0 2px;cursor:pointer;border-radius:3px}.node-item[data-v-37e45114]:hover{background:#80808014}.node-item.selected[data-v-37e45114]{background:#a78bfa26;box-shadow:inset 2px 0 #a78bfa}.node-icon[data-v-37e45114]{width:16px;text-align:center;font-size:10px;color:#999;flex-shrink:0}.node-label[data-v-37e45114]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#6b7280}.node-item.selected .node-label[data-v-37e45114],.node-item:hover .node-label[data-v-37e45114]{color:#374151}.dark{border-top-color:#27272a}.dark{background:#ffffff0d}.dark{color:#666}.dark{color:#bbb}.dark{color:#e4e4e7}.node-delete[data-v-37e45114]{opacity:0;transition:opacity .1s;flex-shrink:0}.node-item:hover .node-delete[data-v-37e45114]{opacity:1}.new-btns[data-v-37e45114]{display:flex;gap:.5rem;margin-top:8px;padding:0 6px}.add-content[data-v-f4b0672a]{display:flex;flex-direction:column;gap:1rem}.add-field[data-v-f4b0672a]{display:flex;flex-direction:column;gap:.375rem}.add-field label[data-v-f4b0672a]{font-size:.75rem;text-transform:uppercase;color:#888;letter-spacing:.03em}.add-input[data-v-f4b0672a],.add-list[data-v-f4b0672a]{width:100%}.add-error[data-v-f4b0672a]{color:#f87171;font-size:.875rem}.component-tree[data-v-6e06b8a9]{font-size:13px;line-height:22px}.empty[data-v-6e06b8a9]{color:#aaa}.node-item[data-v-6e06b8a9]{display:flex;align-items:center;gap:4px;height:22px;padding:0 6px;margin:0 2px;cursor:pointer;border-radius:3px}.node-item[data-v-6e06b8a9]:hover,.node-item.hovered[data-v-6e06b8a9]{background:#80808014}.node-item.selected[data-v-6e06b8a9]{background:#a78bfa26;box-shadow:inset 2px 0 #a78bfa}.node-root[data-v-6e06b8a9]{font-weight:600;padding:0 6px;height:26px;line-height:26px;border-radius:0;margin:0 0 2px;border-bottom:1px solid rgba(128,128,128,.15)}.node-root.selected[data-v-6e06b8a9]{background:#a78bfa1a;box-shadow:none;border-bottom-color:#a78bfa}.node-icon[data-v-6e06b8a9]{width:16px;text-align:center;font-size:10px;color:#999;flex-shrink:0}.node-label[data-v-6e06b8a9]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#6b7280}.node-item.selected .node-label[data-v-6e06b8a9],.node-item:hover .node-label[data-v-6e06b8a9],.node-item.hovered .node-label[data-v-6e06b8a9]{color:#374151}.node-root .node-label[data-v-6e06b8a9]{color:#1f2937}.node-error-icon[data-v-6e06b8a9]{color:#dc2626}.node-dirty-dot[data-v-6e06b8a9]{width:6px;height:6px;border-radius:50%;background:#d97706;flex-shrink:0}.node-revert[data-v-6e06b8a9]{opacity:0;transition:opacity .1s;width:18px;height:18px;flex-shrink:0}.node-item:hover .node-revert[data-v-6e06b8a9]{opacity:1}.node-actions[data-v-6e06b8a9]{display:flex;gap:0;opacity:0;transition:opacity .1s;flex-shrink:0}.node-item:hover .node-actions[data-v-6e06b8a9]{opacity:1}.add-btn[data-v-6e06b8a9]{margin-top:6px}.dark .component-tree .node-item:hover,.dark .component-tree .node-item.hovered{background:#ffffff0d}.dark .component-tree .node-root{border-bottom-color:#27272a}.dark .component-tree .node-icon{color:#666}.dark .component-tree .node-label{color:#bbb}.dark .component-tree .node-item.selected .node-label,.dark .component-tree .node-item:hover .node-label,.dark .component-tree .node-item.hovered .node-label,.dark .component-tree .node-root .node-label{color:#e4e4e7}.dark .component-tree .node-error-icon{color:#f87171}.dark .component-tree .node-dirty-dot{background:#f59e0b}.editor-panel h3[data-v-568555bd]{font-size:.75rem;text-transform:uppercase;color:var(--gz-text-label);margin-bottom:1rem;letter-spacing:.05em}.editor-error[data-v-568555bd]{color:var(--gz-error);font-size:.875rem;display:flex;flex-direction:column;align-items:center;padding-top:3rem;gap:.5rem;text-align:center}.editor-error .pi[data-v-568555bd]{font-size:2rem}.editor-error p[data-v-568555bd]{max-width:300px;line-height:1.5}.editor-empty[data-v-568555bd]{color:var(--gz-text-hint);font-size:.875rem;display:flex;flex-direction:column;align-items:center;padding-top:3rem}.editor-container[data-v-568555bd]{font-size:.875rem}.editor-no-schema[data-v-568555bd]{color:var(--gz-text-hint);font-size:.875rem}.preview-panel[data-v-4aacb015]{height:100%;display:flex;flex-direction:column}.preview-panel.fullscreen[data-v-4aacb015]{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000;background:#f8f8fa}.preview-empty[data-v-4aacb015]{padding:3rem 1rem 1rem;color:#aaa;font-size:.875rem;display:flex;flex-direction:column;align-items:center}.preview-toolbar[data-v-4aacb015]{display:flex;align-items:center;justify-content:space-between;padding:.375rem .5rem;border-bottom:1px solid #e5e7eb}.preview-devices[data-v-4aacb015],.preview-actions[data-v-4aacb015]{display:flex;gap:.25rem;align-items:center}.device-btn[data-v-4aacb015]{background:none;border:1px solid transparent;border-radius:4px;padding:.25rem .5rem;color:#9ca3af;cursor:pointer;font-size:.875rem}.device-btn[data-v-4aacb015]:hover{color:#374151;border-color:#d1d5db}.device-btn.active[data-v-4aacb015]{color:#a78bfa;border-color:#a78bfa}.host-page-select[data-v-4aacb015]{background:#f3f4f6;color:#374151;border:1px solid #d1d5db;border-radius:4px;padding:.2rem .4rem;font-size:.75rem;cursor:pointer}.preview-separator[data-v-4aacb015]{width:1px;height:14px;background:#d1d5db;margin-left:8px;margin-right:8px}.preview-route[data-v-4aacb015]{display:inline-flex;align-items:center;gap:6px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:9999px;padding:2px 10px;height:24px;font-size:12px;color:#6b7280;font-family:ui-monospace,monospace}.preview-route .pi[data-v-4aacb015]{font-size:10px;color:#9ca3af}.preview-frame-wrapper[data-v-4aacb015]{flex:1;display:flex;justify-content:center;overflow:auto;background:#e5e7eb}.preview-iframe[data-v-4aacb015]{flex:none;height:100%;border:0;background:#fff;transition:width .2s}.dark .preview-panel.fullscreen{background:#09090b}.dark .preview-toolbar{border-bottom-color:#27272a}.dark .device-btn{color:#71717a}.dark .device-btn:hover{color:#e4e4e7;border-color:#3f3f46}.dark .host-page-select{background:#1e1e2e;color:#e0e0e0;border-color:#3f3f46}.dark .preview-separator{background:#3f3f46}.dark .preview-route{background:#18181b;border-color:#27272a;color:#a1a1aa}.dark .preview-route .pi{color:#52525b}.dark .preview-frame-wrapper{background:#1a1a2e}.cms-editor[data-v-f9c0172b]{display:flex;height:calc(100% - 60px)}.cms-left[data-v-f9c0172b]{width:250px;flex-shrink:0;overflow:auto;border-right:1px solid #27272a}.cms-left-wide[data-v-f9c0172b]{width:55%;max-width:900px;overflow:hidden}.cms-splitter[data-v-f9c0172b]{height:100%;border:0;border-radius:0}.cms-preview[data-v-f9c0172b]{flex:1;min-width:0;overflow:hidden}.cms-panel[data-v-f9c0172b]{overflow:auto}.cms-panel-content[data-v-f9c0172b]{padding:1rem}.playground[data-v-9ffc60ee]{display:flex;height:calc(100% - 60px)}.playground-sidebar[data-v-9ffc60ee]{width:220px;flex-shrink:0;overflow-y:auto;border-right:1px solid #e5e7eb;padding:.75rem 0}.sidebar-header[data-v-9ffc60ee]{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:0 1rem;margin-bottom:.75rem;color:#6b7280}.sidebar-loading[data-v-9ffc60ee]{padding:1rem;color:#9ca3af;font-size:.8125rem}.sidebar-section[data-v-9ffc60ee]{margin-bottom:.5rem}.section-label[data-v-9ffc60ee]{font-size:.625rem;text-transform:uppercase;letter-spacing:.05em;color:#9ca3af;padding:.375rem 1rem;font-weight:600}.section-label-toggle[data-v-9ffc60ee]{cursor:pointer;display:flex;align-items:center;gap:.375rem;-webkit-user-select:none;user-select:none}.section-label-toggle[data-v-9ffc60ee]:hover{color:#6b7280}.toggle-icon[data-v-9ffc60ee]{font-size:.5rem}.sidebar-item[data-v-9ffc60ee]{display:flex;align-items:center;gap:.5rem;padding:.3125rem 1rem;cursor:pointer;font-size:.8125rem;color:#6b7280}.sidebar-item[data-v-9ffc60ee]:hover{background:#80808014;color:#374151}.sidebar-item.active[data-v-9ffc60ee]{background:#667eea1a;color:#667eea}.item-icon[data-v-9ffc60ee]{font-size:.6875rem;width:14px;text-align:center;flex-shrink:0}.item-name[data-v-9ffc60ee]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-empty[data-v-9ffc60ee]{padding:1.5rem 1rem;color:#9ca3af;font-size:.8125rem;line-height:1.6}.sidebar-empty .hint[data-v-9ffc60ee]{margin-top:.75rem}.sidebar-empty code[data-v-9ffc60ee]{font-family:monospace;font-size:.75rem;background:#8080801a;padding:1px 4px;border-radius:3px}.playground-main[data-v-9ffc60ee]{flex:1;display:flex;flex-direction:column;overflow:hidden}.main-empty[data-v-9ffc60ee]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#9ca3af;font-size:.875rem}.main-toolbar[data-v-9ffc60ee]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid #e5e7eb;font-size:.8125rem;flex-shrink:0}.toolbar-label[data-v-9ffc60ee]{flex:1;display:flex;align-items:baseline;gap:.5rem;color:#6b7280}.toolbar-type[data-v-9ffc60ee]{font-size:.6875rem;text-transform:uppercase;letter-spacing:.03em}.toolbar-label strong[data-v-9ffc60ee]{color:#374151;font-size:.875rem}.toolbar-hint[data-v-9ffc60ee]{font-size:.6875rem;color:#9ca3af;font-style:italic}.toolbar-btn[data-v-9ffc60ee]{display:flex;align-items:center;gap:.375rem;padding:.25rem .625rem;border:1px solid #e5e7eb;border-radius:6px;background:transparent;color:#6b7280;font-size:.75rem;cursor:pointer;white-space:nowrap}.toolbar-btn[data-v-9ffc60ee]:hover{background:#80808014;color:#374151}.main-body[data-v-9ffc60ee]{flex:1;display:flex;overflow:hidden}.main-content[data-v-9ffc60ee]{flex:1;overflow-y:auto;padding:1.5rem;min-width:0}.mount-container[data-v-9ffc60ee]{max-width:600px}.mount-error[data-v-9ffc60ee]{color:#dc2626;font-size:.8125rem;margin-bottom:1rem;padding:.75rem;background:#dc262614;border-radius:6px}.value-inspector[data-v-9ffc60ee]{flex:1;min-width:0;border-left:1px solid #e5e7eb;overflow-y:auto;display:flex;flex-direction:column}.inspector-header[data-v-9ffc60ee]{font-size:.625rem;text-transform:uppercase;letter-spacing:.05em;color:#9ca3af;padding:.5rem .75rem;font-weight:600;border-bottom:1px solid #e5e7eb;flex-shrink:0}.inspector-value[data-v-9ffc60ee]{font-family:JetBrains Mono,Fira Code,monospace;font-size:.75rem;line-height:1.7;padding:.75rem;color:#374151;margin:0;white-space:pre-wrap;word-break:break-word;flex:1}.inspector-value .jv-key[data-v-9ffc60ee]{color:#6b7280}.inspector-value .jv-str[data-v-9ffc60ee]{color:#16a34a}.inspector-value .jv-num[data-v-9ffc60ee]{color:#d97706}.inspector-value .jv-bool[data-v-9ffc60ee]{color:#7c3aed}.inspector-value .jv-null[data-v-9ffc60ee]{color:#9ca3af}.dark .playground-sidebar{border-right-color:#27272a}.dark .sidebar-header{color:#666}.dark .section-label{color:#555}.dark .section-label-toggle:hover{color:#999}.dark .sidebar-item{color:#bbb}.dark .sidebar-item:hover{background:#ffffff0d;color:#e4e4e7}.dark .sidebar-item.active{background:#667eea26;color:#667eea}.dark .main-toolbar{border-bottom-color:#27272a}.dark .toolbar-label{color:#999}.dark .toolbar-label strong{color:#e4e4e7}.dark .toolbar-hint{color:#555}.dark .toolbar-btn{border-color:#333;color:#999}.dark .toolbar-btn:hover{background:#ffffff0d;color:#e4e4e7}.dark .mount-error{color:#f87171;background:#f8717114}.dark .value-inspector{border-left-color:#27272a;background:#0c0c14}.dark .inspector-header{color:#666;border-bottom-color:#27272a}.dark .inspector-value{color:#e4e4e7}.dark .inspector-value .jv-key{color:#8888a0}.dark .inspector-value .jv-str{color:#4ade80}.dark .inspector-value .jv-num{color:#fbbf24}.dark .inspector-value .jv-bool{color:#a78bfa}.dark .inspector-value .jv-null{color:#52525b}