clefbase 1.3.2 → 1.3.4

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/dist/cli.js CHANGED
@@ -34405,7 +34405,7 @@ async function runSitesList(cwd = process.cwd()) {
34405
34405
  }
34406
34406
 
34407
34407
  // package.json
34408
- var version = "1.3.2";
34408
+ var version = "1.3.4";
34409
34409
 
34410
34410
  // src/cli/index.ts
34411
34411
  var program2 = new Command();
@@ -13,77 +13,44 @@ export interface StorageFile {
13
13
  /** Present on /resolve responses */
14
14
  downloadUrl?: string;
15
15
  }
16
- /**
17
- * A reference to a file at a given path inside a bucket.
18
- *
19
- * @example
20
- * const ref = storage.ref("avatars/user-123.jpg");
21
- * const url = await ref.getDownloadURL();
22
- * await ref.delete();
23
- */
24
16
  export declare class StorageReference {
25
17
  private readonly storage;
26
18
  readonly bucket: string;
27
19
  readonly filePath: string;
28
20
  constructor(storage: ClefbaseStorage, bucket: string, filePath: string);
29
- /**
30
- * Upload a file. Accepts Buffer (Node) or File/Blob (browser).
31
- *
32
- * @example
33
- * // Node.js
34
- * await ref.upload(fs.readFileSync("photo.jpg"), { contentType: "image/jpeg" });
35
- * // Browser
36
- * await ref.upload(fileInput.files[0]);
37
- */
38
21
  upload(data: Buffer | Blob | File, opts?: {
39
22
  contentType?: string;
40
23
  metadata?: Record<string, unknown>;
41
24
  }): Promise<StorageFile>;
42
- /** Returns the public download URL for this file. */
43
25
  getDownloadURL(): Promise<string>;
44
- /** Fetch file metadata including downloadUrl. */
45
26
  getMetadata(): Promise<StorageFile>;
46
- /** Delete this file. */
47
27
  delete(): Promise<void>;
48
- /** List files under this path prefix. */
49
28
  list(opts?: {
50
29
  limit?: number;
51
30
  offset?: number;
52
31
  }): Promise<StorageFile[]>;
53
32
  }
54
- /**
55
- * A scoped helper for a named bucket.
56
- *
57
- * @example
58
- * const ref = storage.bucket("user-uploads").ref("doc.pdf");
59
- */
60
33
  export declare class BucketReference {
61
34
  private readonly storage;
62
35
  readonly name: string;
63
36
  constructor(storage: ClefbaseStorage, name: string);
64
37
  ref(filePath: string): StorageReference;
65
38
  }
66
- /**
67
- * File storage service. Obtain via `getStorage(app)`.
68
- *
69
- * @example
70
- * const storage = getStorage(app);
71
- * const url = await storage.ref("products/image.jpg").getDownloadURL();
72
- * await storage.bucket("media").ref("photo.jpg").upload(buffer, { contentType: "image/jpeg" });
73
- */
74
39
  export declare class ClefbaseStorage {
75
40
  private readonly http;
76
41
  private readonly projectId;
77
42
  private readonly auth;
78
- private _defaultBucket;
43
+ /** @internal exposed so StorageImage can build URLs synchronously */
44
+ _defaultBucket: string;
45
+ /** In-memory cache: bucket name → UUID */
46
+ private _bucketIdCache;
79
47
  constructor(http: HttpClient, projectId: string, auth?: Auth | null);
80
48
  private authHeaders;
81
- /** Override the default bucket name (default: "default"). */
82
49
  setDefaultBucket(name: string): this;
83
- /** Return a reference scoped to a named bucket. */
84
50
  bucket(name: string): BucketReference;
85
- /** Return a StorageReference in the default bucket. */
86
51
  ref(filePath: string): StorageReference;
52
+ _resolveBucketId(bucketName: string): Promise<string>;
53
+ /** Synchronous direct URL — used by StorageImage to avoid a waterfall. */
87
54
  _directUrl(bucket: string, filePath: string): string;
88
55
  _resolve(bucket: string, filePath: string): Promise<StorageFile>;
89
56
  _upload(bucket: string, filePath: string, data: Buffer | Blob | File, opts?: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
@@ -35,57 +35,30 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.ClefbaseStorage = exports.BucketReference = exports.StorageReference = void 0;
37
37
  // ─── StorageReference ─────────────────────────────────────────────────────────
38
- /**
39
- * A reference to a file at a given path inside a bucket.
40
- *
41
- * @example
42
- * const ref = storage.ref("avatars/user-123.jpg");
43
- * const url = await ref.getDownloadURL();
44
- * await ref.delete();
45
- */
46
38
  class StorageReference {
47
39
  constructor(storage, bucket, filePath) {
48
40
  this.storage = storage;
49
41
  this.bucket = bucket;
50
42
  this.filePath = filePath;
51
43
  }
52
- /**
53
- * Upload a file. Accepts Buffer (Node) or File/Blob (browser).
54
- *
55
- * @example
56
- * // Node.js
57
- * await ref.upload(fs.readFileSync("photo.jpg"), { contentType: "image/jpeg" });
58
- * // Browser
59
- * await ref.upload(fileInput.files[0]);
60
- */
61
44
  async upload(data, opts) {
62
45
  return this.storage._upload(this.bucket, this.filePath, data, opts);
63
46
  }
64
- /** Returns the public download URL for this file. */
65
47
  async getDownloadURL() {
66
48
  return this.storage._directUrl(this.bucket, this.filePath);
67
49
  }
68
- /** Fetch file metadata including downloadUrl. */
69
50
  async getMetadata() {
70
51
  return this.storage._resolve(this.bucket, this.filePath);
71
52
  }
72
- /** Delete this file. */
73
53
  async delete() {
74
54
  return this.storage._delete(this.bucket, this.filePath);
75
55
  }
76
- /** List files under this path prefix. */
77
56
  async list(opts) {
78
57
  return this.storage._list(this.bucket, this.filePath, opts);
79
58
  }
80
59
  }
81
60
  exports.StorageReference = StorageReference;
82
61
  // ─── BucketReference ──────────────────────────────────────────────────────────
83
- /**
84
- * A scoped helper for a named bucket.
85
- *
86
- * @example
87
- * const ref = storage.bucket("user-uploads").ref("doc.pdf");
88
- */
89
62
  class BucketReference {
90
63
  constructor(storage, name) {
91
64
  this.storage = storage;
@@ -97,38 +70,49 @@ class BucketReference {
97
70
  }
98
71
  exports.BucketReference = BucketReference;
99
72
  // ─── ClefbaseStorage ──────────────────────────────────────────────────────────
100
- /**
101
- * File storage service. Obtain via `getStorage(app)`.
102
- *
103
- * @example
104
- * const storage = getStorage(app);
105
- * const url = await storage.ref("products/image.jpg").getDownloadURL();
106
- * await storage.bucket("media").ref("photo.jpg").upload(buffer, { contentType: "image/jpeg" });
107
- */
108
73
  class ClefbaseStorage {
109
74
  constructor(http, projectId, auth = null) {
110
75
  this.http = http;
111
76
  this.projectId = projectId;
112
77
  this.auth = auth;
78
+ /** @internal exposed so StorageImage can build URLs synchronously */
113
79
  this._defaultBucket = "default";
80
+ /** In-memory cache: bucket name → UUID */
81
+ this._bucketIdCache = new Map();
114
82
  }
115
83
  authHeaders() {
116
84
  return this.auth?.getAuthHeaders() ?? {};
117
85
  }
118
- /** Override the default bucket name (default: "default"). */
119
86
  setDefaultBucket(name) {
120
87
  this._defaultBucket = name;
121
88
  return this;
122
89
  }
123
- /** Return a reference scoped to a named bucket. */
124
90
  bucket(name) {
125
91
  return new BucketReference(this, name);
126
92
  }
127
- /** Return a StorageReference in the default bucket. */
128
93
  ref(filePath) {
129
94
  return new StorageReference(this, this._defaultBucket, filePath.replace(/^\/+/, ""));
130
95
  }
96
+ // ─── Bucket UUID resolution ───────────────────────────────────────────────
97
+ //
98
+ // The external storage router identifies buckets by UUID, not by name.
99
+ // dbId comes from the API key (set by dbApiKeyMiddleware), so we just call
100
+ // GET /buckets (no projectId needed — the key carries that context).
101
+ async _resolveBucketId(bucketName) {
102
+ const cached = this._bucketIdCache.get(bucketName);
103
+ if (cached)
104
+ return cached;
105
+ const buckets = await this.http.get("/buckets");
106
+ for (const b of buckets) {
107
+ this._bucketIdCache.set(b.name, b.id);
108
+ }
109
+ const id = this._bucketIdCache.get(bucketName);
110
+ if (!id)
111
+ throw new Error(`Storage bucket "${bucketName}" not found`);
112
+ return id;
113
+ }
131
114
  // ─── Internal methods called by StorageReference ──────────────────────────
115
+ /** Synchronous direct URL — used by StorageImage to avoid a waterfall. */
132
116
  _directUrl(bucket, filePath) {
133
117
  const cleanFile = filePath.replace(/^\/+/, "");
134
118
  const base = this.http.getBaseUrl();
@@ -139,6 +123,8 @@ class ClefbaseStorage {
139
123
  return this.http.get(`/resolve?projectId=${encodeURIComponent(this.projectId)}&path=${cleanFile}`);
140
124
  }
141
125
  async _upload(bucket, filePath, data, opts) {
126
+ // Resolve bucket name → UUID before building the URL
127
+ const bucketId = await this._resolveBucketId(bucket);
142
128
  let FormDataImpl;
143
129
  if (typeof FormData !== "undefined") {
144
130
  FormDataImpl = FormData;
@@ -147,10 +133,11 @@ class ClefbaseStorage {
147
133
  const mod = await Promise.resolve().then(() => __importStar(require("form-data")));
148
134
  FormDataImpl = mod.default;
149
135
  }
150
- const form = new FormDataImpl();
151
- const filename = filePath.split("/").pop() ?? "upload";
152
- const parts = filePath.split("/");
136
+ const cleanPath = filePath.replace(/^\/+/, "");
137
+ const filename = cleanPath.split("/").pop() ?? "upload";
138
+ const parts = cleanPath.split("/");
153
139
  const folder = parts.length > 1 ? parts.slice(0, -1).join("/") : undefined;
140
+ const form = new FormDataImpl();
154
141
  if (typeof Buffer !== "undefined" && Buffer.isBuffer(data)) {
155
142
  form.append("file", data, { filename, contentType: opts?.contentType ?? "application/octet-stream" });
156
143
  }
@@ -161,7 +148,7 @@ class ClefbaseStorage {
161
148
  form.append("folder", folder);
162
149
  if (opts?.metadata)
163
150
  form.append("metadata", JSON.stringify(opts.metadata));
164
- return this.http.request(`/buckets/${bucket}/files`, {
151
+ return this.http.request(`/buckets/${bucketId}/files`, {
165
152
  method: "POST",
166
153
  body: form,
167
154
  isFormData: true,
@@ -169,18 +156,21 @@ class ClefbaseStorage {
169
156
  });
170
157
  }
171
158
  async _delete(bucket, filePath) {
159
+ const bucketId = await this._resolveBucketId(bucket);
172
160
  const meta = await this._resolve(bucket, filePath);
173
- await this.http.delete(`/buckets/${bucket}/files/${meta.id}`, this.authHeaders());
161
+ await this.http.delete(`/buckets/${bucketId}/files/${meta.id}`, this.authHeaders());
174
162
  }
175
163
  async _list(bucket, prefix, opts) {
176
- const qs = new URLSearchParams({ projectId: this.projectId });
164
+ const bucketId = await this._resolveBucketId(bucket);
165
+ const qs = new URLSearchParams();
177
166
  if (prefix)
178
167
  qs.set("folder", prefix);
179
168
  if (opts?.limit !== undefined)
180
169
  qs.set("limit", String(opts.limit));
181
170
  if (opts?.offset !== undefined)
182
171
  qs.set("offset", String(opts.offset));
183
- const result = await this.http.get(`/buckets/${bucket}/files?${qs}`);
172
+ const query = qs.toString() ? `?${qs}` : "";
173
+ const result = await this.http.get(`/buckets/${bucketId}/files${query}`);
184
174
  return Array.isArray(result) ? result : result.data;
185
175
  }
186
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,iFAAiF;AAEjF,MAAa,gBAAgB;IAC3B,YACmB,OAAwB,EACzB,MAAc,EACd,QAAgB;QAFf,YAAO,GAAP,OAAO,CAAiB;QACzB,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAQ;IAC/B,CAAC;IAEJ,KAAK,CAAC,MAAM,CACV,IAA0B,EAC1B,IAAmE;QAEnE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAA0C;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;CACF;AA7BD,4CA6BC;AAED,iFAAiF;AAEjF,MAAa,eAAe;IAC1B,YACmB,OAAwB,EACzB,IAAY;QADX,YAAO,GAAP,OAAO,CAAiB;QACzB,SAAI,GAAJ,IAAI,CAAQ;IAC3B,CAAC;IAEJ,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;CACF;AATD,0CASC;AAED,iFAAiF;AAEjF,MAAa,eAAe;IAO1B,YACmB,IAAgB,EAChB,SAAiB,EACjB,OAAoB,IAAI;QAFxB,SAAI,GAAJ,IAAI,CAAY;QAChB,cAAS,GAAT,SAAS,CAAQ;QACjB,SAAI,GAAJ,IAAI,CAAoB;QAT3C,qEAAqE;QAC9D,mBAAc,GAAG,SAAS,CAAC;QAElC,0CAA0C;QAClC,mBAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;IAMrD,CAAC;IAEI,WAAW;QACjB,OAAO,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,6EAA6E;IAC7E,EAAE;IACF,uEAAuE;IACvE,2EAA2E;IAC3E,qEAAqE;IAErE,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAG1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAc,UAAU,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,aAAa,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,6EAA6E;IAE7E,0EAA0E;IAC1E,UAAU,CAAC,MAAc,EAAE,QAAgB;QACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,GAAG,IAAI,SAAS,SAAS,cAAc,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;IACjG,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,QAAgB;QAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,SAAS,EAAE,CAC7E,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAc,EACd,QAAgB,EAChB,IAA0B,EAC1B,IAAmE;QAEnE,qDAAqD;QACrD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,YAAgC,CAAC;QACrC,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,wDAAa,WAAW,GAAC,CAAC;YACtC,YAAY,GAAG,GAAG,CAAC,OAAwC,CAAC;QAC9D,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;QACzD,MAAM,KAAK,GAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAM,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9E,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;QAEhC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAuD,CAC3D,MAAM,EAAE,IAAI,EACZ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,0BAA0B,EAAE,CAC3E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAY,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,MAAM;YAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,EAAE,QAAQ;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE3E,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAc,YAAY,QAAQ,QAAQ,EAAE;YAClE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,QAAgB;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,IAAI,GAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CACpB,YAAY,QAAQ,UAAU,IAAI,CAAC,EAAE,EAAE,EACvC,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CACT,MAAc,EACd,MAAc,EACd,IAA0C;QAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,MAAM;YAAuB,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,IAAI,EAAE,KAAK,KAAM,SAAS;YAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS;YAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAG5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAa,YAAY,QAAQ,SAAS,KAAK,EAAE,CAAC,CAAC;QACrF,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,MAAkC,CAAC,IAAI,CAAC;IACnF,CAAC;CACF;AAxID,0CAwIC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ClefbaseTemplateOrb
3
+ *
4
+ * A floating editor panel injected into the user's React app when they run
5
+ * `clefbase template:enable`. It reads clefbase-template.json, registers the
6
+ * template with the server, and lets visitors edit the site in real-time.
7
+ *
8
+ * Import injected automatically by `clefbase template:enable` into App.tsx:
9
+ *
10
+ * import { ClefbaseTemplateOrb } from "clefbase/template";
11
+ * // ... at the bottom of App's return:
12
+ * <ClefbaseTemplateOrb />
13
+ */
14
+ export declare function ClefbaseTemplateOrb(): import("react/jsx-runtime").JSX.Element | null;
15
+ export default ClefbaseTemplateOrb;
16
+ //# sourceMappingURL=TemplateOrb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateOrb.d.ts","sourceRoot":"","sources":["../../src/template/TemplateOrb.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA0TH,wBAAgB,mBAAmB,mDAgVlC;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClefbaseTemplateOrb = ClefbaseTemplateOrb;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ /**
6
+ * ClefbaseTemplateOrb
7
+ *
8
+ * A floating editor panel injected into the user's React app when they run
9
+ * `clefbase template:enable`. It reads clefbase-template.json, registers the
10
+ * template with the server, and lets visitors edit the site in real-time.
11
+ *
12
+ * Import injected automatically by `clefbase template:enable` into App.tsx:
13
+ *
14
+ * import { ClefbaseTemplateOrb } from "clefbase/template";
15
+ * // ... at the bottom of App's return:
16
+ * <ClefbaseTemplateOrb />
17
+ */
18
+ const react_1 = require("react");
19
+ // ─── Constants ────────────────────────────────────────────────────────────────
20
+ const ORB_CONFIG_KEY = "__clefbase_template_config__";
21
+ const ORB_VALUES_KEY = "__clefbase_live_values__";
22
+ const API_TIMEOUT_MS = 10000;
23
+ // ─── Window helper — avoids the direct `window as Record<string,unknown>` cast
24
+ // that TS rejects because Window and Record<string,unknown> don't overlap. ────
25
+ function winSet(key, value) {
26
+ window[key] = value;
27
+ }
28
+ function winGet(key) {
29
+ return window[key];
30
+ }
31
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
32
+ function applyVar(cssVar, value) {
33
+ if (!cssVar || value === undefined || value === null)
34
+ return;
35
+ document.documentElement.style.setProperty(cssVar, String(value));
36
+ }
37
+ function applyAllVars(values, cssVarMap) {
38
+ for (const [key, cssVar] of Object.entries(cssVarMap)) {
39
+ if (values[key] !== undefined)
40
+ applyVar(cssVar, values[key]);
41
+ }
42
+ }
43
+ function applyToggle(field, value) {
44
+ if (field.type !== "toggle" || !field.componentSelector)
45
+ return;
46
+ const show = value === true || value === "true";
47
+ document.querySelectorAll(field.componentSelector).forEach(el => {
48
+ el.style.display = show ? "" : "none";
49
+ });
50
+ }
51
+ function applyAllToggles(values, fields) {
52
+ for (const field of fields) {
53
+ if (field.type === "toggle")
54
+ applyToggle(field, values[field.key]);
55
+ }
56
+ }
57
+ async function fetchWithTimeout(url, init) {
58
+ const ctrl = new AbortController();
59
+ const id = setTimeout(() => ctrl.abort(), API_TIMEOUT_MS);
60
+ try {
61
+ return await fetch(url, { ...init, signal: ctrl.signal });
62
+ }
63
+ finally {
64
+ clearTimeout(id);
65
+ }
66
+ }
67
+ // ─── Orb CSS ──────────────────────────────────────────────────────────────────
68
+ const ORB_CSS = `
69
+ #__cfx_orb_btn {
70
+ position: fixed; bottom: 24px; right: 24px;
71
+ width: 52px; height: 52px; border-radius: 50%;
72
+ background: var(--cfx-orb-color, #6366f1);
73
+ box-shadow: 0 4px 24px rgba(0,0,0,.35);
74
+ border: 2px solid rgba(255,255,255,.18);
75
+ cursor: pointer; z-index: 2147483646;
76
+ display: flex; align-items: center; justify-content: center;
77
+ transition: transform .2s, box-shadow .2s;
78
+ outline: none;
79
+ }
80
+ #__cfx_orb_btn:hover {
81
+ transform: scale(1.08);
82
+ box-shadow: 0 6px 32px rgba(0,0,0,.45);
83
+ }
84
+ #__cfx_orb_btn svg { width: 22px; height: 22px; }
85
+ #__cfx_panel {
86
+ position: fixed; top: 0; right: 0; height: 100vh;
87
+ width: 380px; max-width: 100vw;
88
+ background: #0d0d14;
89
+ border-left: 1px solid rgba(255,255,255,.08);
90
+ box-shadow: -8px 0 48px rgba(0,0,0,.6);
91
+ z-index: 2147483647;
92
+ display: flex; flex-direction: column; overflow: hidden;
93
+ font-family: system-ui, -apple-system, sans-serif;
94
+ transform: translateX(100%);
95
+ transition: transform .3s cubic-bezier(.4,0,.2,1);
96
+ }
97
+ #__cfx_panel.open { transform: translateX(0); }
98
+ #__cfx_panel * { box-sizing: border-box; }
99
+ .cfx-tab {
100
+ background: none; border: none;
101
+ border-bottom: 2px solid transparent;
102
+ padding: 10px 14px; color: #666;
103
+ font-size: 11px; font-weight: 500;
104
+ cursor: pointer; white-space: nowrap;
105
+ transition: color .15s, border-color .15s;
106
+ letter-spacing: .04em; text-transform: uppercase;
107
+ }
108
+ .cfx-tab:hover { color: #aaa; }
109
+ .cfx-tab.active { color: #e2e8f0; border-bottom-color: var(--cfx-orb-color, #6366f1); }
110
+ .cfx-input {
111
+ width: 100%; background: rgba(255,255,255,.06);
112
+ border: 1px solid rgba(255,255,255,.1); border-radius: 8px;
113
+ padding: 9px 12px; color: #e2e8f0; font-size: 13px; outline: none;
114
+ }
115
+ .cfx-input:focus { border-color: rgba(99,102,241,.5); }
116
+ textarea.cfx-input { resize: vertical; }
117
+ select.cfx-input { cursor: pointer; }
118
+ @keyframes cfx-spin { to { transform: rotate(360deg); } }
119
+ .cfx-spin { animation: cfx-spin 1s linear infinite; display: inline-block; }
120
+ `;
121
+ // ─── Field renderers ──────────────────────────────────────────────────────────
122
+ function FieldRow({ field, value, onChange, availableFonts, }) {
123
+ const val = value !== undefined ? value : field.defaultValue;
124
+ const label = ((0, jsx_runtime_1.jsxs)("label", { style: {
125
+ display: "block", color: "#94a3b8",
126
+ fontSize: 10, fontWeight: 600,
127
+ letterSpacing: ".06em", textTransform: "uppercase",
128
+ marginBottom: 6,
129
+ }, children: [field.label, field.description && ((0, jsx_runtime_1.jsxs)("span", { style: { fontWeight: 400, color: "#475569", textTransform: "none", letterSpacing: 0, marginLeft: 5 }, children: ["\u2014 ", field.description] }))] }));
130
+ // ReactNode imported directly from react — no React namespace needed
131
+ const wrap = (content) => ((0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: 18 }, children: [label, content] }));
132
+ if (field.type === "color")
133
+ return wrap((0, jsx_runtime_1.jsxs)("div", { style: { display: "flex", gap: 10, alignItems: "center" }, children: [(0, jsx_runtime_1.jsx)("input", { type: "color", value: String(val), onChange: (e) => onChange(field.key, e.target.value), style: { width: 44, height: 36, border: "1px solid rgba(255,255,255,.12)", borderRadius: 8, background: "none", cursor: "pointer", padding: 2 } }), (0, jsx_runtime_1.jsx)("input", { type: "text", className: "cfx-input", value: String(val), onChange: (e) => onChange(field.key, e.target.value), style: { fontFamily: "monospace", fontSize: 12 } })] }));
134
+ if (field.type === "text")
135
+ return wrap((0, jsx_runtime_1.jsx)("input", { className: "cfx-input", type: "text", value: String(val), onChange: (e) => onChange(field.key, e.target.value) }));
136
+ if (field.type === "textarea")
137
+ return wrap((0, jsx_runtime_1.jsx)("textarea", { className: "cfx-input", value: String(val), onChange: (e) => onChange(field.key, e.target.value), rows: 3 }));
138
+ if (field.type === "font")
139
+ return wrap((0, jsx_runtime_1.jsx)("select", { className: "cfx-input", value: String(val), onChange: (e) => onChange(field.key, e.target.value), children: availableFonts.map(f => ((0, jsx_runtime_1.jsx)("option", { value: f, style: { fontFamily: f }, children: f }, f))) }));
140
+ if (field.type === "select")
141
+ return wrap((0, jsx_runtime_1.jsx)("select", { className: "cfx-input", value: String(val), onChange: (e) => onChange(field.key, e.target.value), children: (field.options ?? []).map(o => ((0, jsx_runtime_1.jsx)("option", { value: o.value, children: o.label }, o.value))) }));
142
+ if (field.type === "toggle")
143
+ return wrap((0, jsx_runtime_1.jsxs)("label", { style: { display: "flex", alignItems: "center", gap: 10, cursor: "pointer" }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: val === true || val === "true", onChange: (e) => onChange(field.key, e.target.checked), style: { width: 16, height: 16, accentColor: "var(--cfx-orb-color, #6366f1)", cursor: "pointer" } }), (0, jsx_runtime_1.jsx)("span", { style: { color: "#cbd5e1", fontSize: 13 }, children: field.label })] }));
144
+ if (field.type === "number" || field.type === "spacing") {
145
+ const max = field.type === "spacing" ? 200 : 120;
146
+ return wrap((0, jsx_runtime_1.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [(0, jsx_runtime_1.jsx)("input", { type: "range", min: 0, max: max, value: Number(val), onChange: (e) => onChange(field.key, Number(e.target.value)), style: { flex: 1, accentColor: "var(--cfx-orb-color, #6366f1)" } }), (0, jsx_runtime_1.jsx)("input", { type: "number", className: "cfx-input", value: Number(val), onChange: (e) => onChange(field.key, Number(e.target.value)), style: { width: 64, textAlign: "center" } })] }));
147
+ }
148
+ if (field.type === "image")
149
+ return wrap((0, jsx_runtime_1.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: 8 }, children: [val && (0, jsx_runtime_1.jsx)("img", { src: String(val), alt: "", style: { width: "100%", maxHeight: 120, objectFit: "cover", borderRadius: 8, border: "1px solid rgba(255,255,255,.1)" } }), (0, jsx_runtime_1.jsx)("input", { className: "cfx-input", type: "url", value: String(val), onChange: (e) => onChange(field.key, e.target.value), placeholder: "Image URL" })] }));
150
+ return null;
151
+ }
152
+ // ─── Pages panel ─────────────────────────────────────────────────────────────
153
+ function PagesPanel({ pages, enabledPages, onToggle, }) {
154
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { style: { color: "#64748b", fontSize: 12, margin: "0 0 16px" }, children: "Enable or disable pages on this site." }), pages.map(page => {
155
+ const enabled = enabledPages.includes(page.slug);
156
+ return ((0, jsx_runtime_1.jsxs)("div", { style: {
157
+ display: "flex", alignItems: "center",
158
+ justifyContent: "space-between",
159
+ padding: "12px 0", borderBottom: "1px solid rgba(255,255,255,.05)",
160
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { style: { color: "#e2e8f0", fontSize: 13, fontWeight: 500 }, children: page.name }), (0, jsx_runtime_1.jsxs)("div", { style: { color: "#475569", fontSize: 11 }, children: ["/", page.slug] })] }), page.canDelete === false ? ((0, jsx_runtime_1.jsx)("span", { style: { color: "#475569", fontSize: 11, padding: "4px 10px", background: "rgba(255,255,255,.04)", borderRadius: 6 }, children: "Required" })) : ((0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: enabled, onChange: (e) => onToggle(page.slug, e.target.checked), style: { width: 16, height: 16, accentColor: "var(--cfx-orb-color, #6366f1)", cursor: "pointer" } }))] }, page.slug));
161
+ })] }));
162
+ }
163
+ // ─── Main component ───────────────────────────────────────────────────────────
164
+ function ClefbaseTemplateOrb() {
165
+ // ── Read config injected by CLI ────────────────────────────────────────────
166
+ // Use the winGet helper: direct `window as Record<string,unknown>` cast is
167
+ // rejected by TS because Window doesn't have a string index signature.
168
+ const config = winGet(ORB_CONFIG_KEY) ?? null;
169
+ if (!config)
170
+ return null; // not enabled — no-op
171
+ const { serverUrl, dbId, siteId, orbColor = "#6366f1" } = config;
172
+ const API = `${serverUrl.replace(/\/+$/, "")}/templates/editor/${dbId}/${siteId}`;
173
+ // ── State ──────────────────────────────────────────────────────────────────
174
+ const [open, setOpen] = (0, react_1.useState)(false);
175
+ const [state, setState] = (0, react_1.useState)({
176
+ phase: "idle",
177
+ template: null,
178
+ values: {},
179
+ enabledPages: [],
180
+ activeTab: "",
181
+ dirty: false,
182
+ clientLabel: "",
183
+ errorMsg: "",
184
+ });
185
+ const panelRef = (0, react_1.useRef)(null);
186
+ // ── Inject CSS once ────────────────────────────────────────────────────────
187
+ (0, react_1.useEffect)(() => {
188
+ if (document.getElementById("__cfx_orb_css__"))
189
+ return;
190
+ const s = document.createElement("style");
191
+ s.id = "__cfx_orb_css__";
192
+ s.textContent = ORB_CSS.replace(/var\(--cfx-orb-color, #6366f1\)/g, `var(--cfx-orb-color, ${orbColor})`);
193
+ document.head.appendChild(s);
194
+ document.documentElement.style.setProperty("--cfx-orb-color", orbColor);
195
+ }, [orbColor]);
196
+ // ── Load template + saved values from server ───────────────────────────────
197
+ const loadEditor = (0, react_1.useCallback)(async () => {
198
+ setState((s) => ({ ...s, phase: "loading" }));
199
+ try {
200
+ const res = await fetchWithTimeout(API, { method: "GET" });
201
+ if (!res.ok)
202
+ throw new Error(`Server error: ${res.status}`);
203
+ const data = await res.json();
204
+ const tmpl = data.template;
205
+ const values = { ...data.customization.values };
206
+ const enabled = data.customization.enabledPages.slice();
207
+ applyAllVars(values, tmpl.cssVarMap);
208
+ applyAllToggles(values, tmpl.fields);
209
+ // Load Google Fonts
210
+ if (tmpl.availableFonts?.length) {
211
+ const link = document.createElement("link");
212
+ link.rel = "stylesheet";
213
+ link.href = `https://fonts.googleapis.com/css2?${tmpl.availableFonts.map((f) => `family=${encodeURIComponent(f)}:wght@400;500;600;700`).join("&")}&display=swap`;
214
+ document.head.appendChild(link);
215
+ }
216
+ const firstSection = tmpl.fields[0]?.section ?? (tmpl.pages?.length ? "Pages" : "");
217
+ setState((s) => ({
218
+ ...s,
219
+ phase: "ready",
220
+ template: tmpl,
221
+ values,
222
+ enabledPages: enabled,
223
+ activeTab: firstSection,
224
+ dirty: false,
225
+ }));
226
+ winSet(ORB_VALUES_KEY, values);
227
+ }
228
+ catch (err) {
229
+ setState((s) => ({ ...s, phase: "error", errorMsg: err.message }));
230
+ }
231
+ }, [API]);
232
+ const handleOpen = () => {
233
+ setOpen(true);
234
+ if (state.phase === "idle" || state.phase === "error")
235
+ loadEditor();
236
+ };
237
+ // ── Field change → live preview ────────────────────────────────────────────
238
+ const handleChange = (0, react_1.useCallback)((key, value) => {
239
+ setState((s) => {
240
+ const values = { ...s.values, [key]: value };
241
+ const tmpl = s.template;
242
+ if (!tmpl)
243
+ return s;
244
+ const cssVar = tmpl.cssVarMap[key];
245
+ if (cssVar) {
246
+ const needsPx = key.toLowerCase().includes("size") || key.toLowerCase().includes("padding") || key.toLowerCase().includes("width");
247
+ applyVar(cssVar, needsPx && typeof value === "number" ? `${value}px` : value);
248
+ }
249
+ const field = tmpl.fields.find((f) => f.key === key);
250
+ if (field)
251
+ applyToggle(field, value);
252
+ winSet(ORB_VALUES_KEY, values);
253
+ return { ...s, values, dirty: true };
254
+ });
255
+ }, []);
256
+ // ── Page toggle ────────────────────────────────────────────────────────────
257
+ const handlePageToggle = (0, react_1.useCallback)((slug, enabled) => {
258
+ setState((s) => {
259
+ const enabledPages = enabled
260
+ ? [...s.enabledPages, slug]
261
+ : s.enabledPages.filter((p) => p !== slug);
262
+ return { ...s, enabledPages, dirty: true };
263
+ });
264
+ }, []);
265
+ // ── Save (draft) ───────────────────────────────────────────────────────────
266
+ const handleSave = (0, react_1.useCallback)(async () => {
267
+ setState((s) => ({ ...s, phase: "saving" }));
268
+ try {
269
+ const { values, enabledPages } = state;
270
+ await fetchWithTimeout(`${API}/save`, {
271
+ method: "POST",
272
+ headers: { "Content-Type": "application/json" },
273
+ body: JSON.stringify({ values, enabledPages }),
274
+ });
275
+ setState((s) => ({ ...s, phase: "ready", dirty: false }));
276
+ }
277
+ catch (err) {
278
+ setState((s) => ({ ...s, phase: "ready", errorMsg: err.message }));
279
+ }
280
+ }, [API, state]);
281
+ // ── Submit for review ──────────────────────────────────────────────────────
282
+ const handleSubmit = (0, react_1.useCallback)(async () => {
283
+ setState((s) => ({ ...s, phase: "submitting" }));
284
+ try {
285
+ const { values, enabledPages, clientLabel } = state;
286
+ await fetchWithTimeout(`${API}/submit`, {
287
+ method: "POST",
288
+ headers: { "Content-Type": "application/json" },
289
+ body: JSON.stringify({ values, enabledPages, clientLabel: clientLabel || "Anonymous" }),
290
+ });
291
+ setState((s) => ({ ...s, phase: "submitted" }));
292
+ }
293
+ catch (err) {
294
+ setState((s) => ({ ...s, phase: "ready", errorMsg: err.message }));
295
+ }
296
+ }, [API, state]);
297
+ // ── Reset ──────────────────────────────────────────────────────────────────
298
+ const handleReset = (0, react_1.useCallback)(() => {
299
+ if (!state.template)
300
+ return;
301
+ const defaults = {};
302
+ for (const f of state.template.fields)
303
+ defaults[f.key] = f.defaultValue;
304
+ applyAllVars(defaults, state.template.cssVarMap);
305
+ applyAllToggles(defaults, state.template.fields);
306
+ setState((s) => ({ ...s, values: defaults, dirty: true }));
307
+ }, [state.template]);
308
+ // ── Render ─────────────────────────────────────────────────────────────────
309
+ const { phase, template, values, enabledPages, activeTab, dirty, clientLabel, errorMsg } = state;
310
+ const sections = template ? [...new Set(template.fields.map((f) => f.section))] : [];
311
+ const allTabs = template ? [...sections, ...(template.pages?.length ? ["Pages"] : [])] : [];
312
+ const isBusy = phase === "loading" || phase === "saving" || phase === "submitting";
313
+ const activeFields = (template?.fields ?? []).filter((f) => f.section === activeTab);
314
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("button", { id: "__cfx_orb_btn", onClick: handleOpen, "aria-label": "Open site editor", title: "Edit this site", children: (0, jsx_runtime_1.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "white", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [(0, jsx_runtime_1.jsx)("path", { d: "M12 20h9" }), (0, jsx_runtime_1.jsx)("path", { d: "M16.5 3.5a2.121 2.121 0 013 3L7 19l-4 1 1-4 12.5-12.5z" })] }) }), (0, jsx_runtime_1.jsxs)("div", { id: "__cfx_panel", ref: panelRef, className: open ? "open" : "", children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", padding: "14px 16px", borderBottom: "1px solid rgba(255,255,255,.07)", flexShrink: 0 }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [(0, jsx_runtime_1.jsx)("div", { style: { width: 8, height: 8, borderRadius: "50%", background: "var(--cfx-orb-color, #6366f1)" } }), (0, jsx_runtime_1.jsx)("span", { style: { color: "#e2e8f0", fontSize: 13, fontWeight: 600, letterSpacing: ".01em" }, children: template?.name ?? "Site Editor" }), dirty && (0, jsx_runtime_1.jsx)("span", { style: { fontSize: 10, color: "#f59e0b", background: "rgba(245,158,11,.1)", border: "1px solid rgba(245,158,11,.25)", borderRadius: 99, padding: "1px 7px" }, children: "unsaved" })] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: "flex", gap: 6, alignItems: "center" }, children: [phase === "ready" && ((0, jsx_runtime_1.jsx)("button", { onClick: handleReset, title: "Reset to defaults", style: { background: "none", border: "1px solid rgba(255,255,255,.1)", borderRadius: 7, padding: "5px 10px", color: "#64748b", fontSize: 11, cursor: "pointer" }, children: "Reset" })), (0, jsx_runtime_1.jsx)("button", { onClick: handleSave, disabled: isBusy || !dirty, style: {
315
+ background: dirty ? "var(--cfx-orb-color, #6366f1)" : "rgba(255,255,255,.06)",
316
+ border: "none", borderRadius: 8, padding: "6px 14px",
317
+ fontSize: 12, fontWeight: 500,
318
+ color: dirty ? "#fff" : "#555",
319
+ cursor: dirty && !isBusy ? "pointer" : "not-allowed",
320
+ }, children: phase === "saving" ? (0, jsx_runtime_1.jsx)("span", { className: "cfx-spin", children: "\u21BB" }) : "Save" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => setOpen(false), "aria-label": "Close", style: { background: "none", border: "none", cursor: "pointer", color: "#555", fontSize: 18, lineHeight: 1, padding: "2px 6px" }, children: "\u00D7" })] })] }), phase === "loading" && ((0, jsx_runtime_1.jsxs)("div", { style: { flex: 1, display: "flex", alignItems: "center", justifyContent: "center", color: "#555", fontSize: 13, gap: 8 }, children: [(0, jsx_runtime_1.jsx)("span", { className: "cfx-spin", style: { fontSize: 18 }, children: "\u21BB" }), " Loading editor\u2026"] })), phase === "error" && ((0, jsx_runtime_1.jsxs)("div", { style: { flex: 1, padding: 24 }, children: [(0, jsx_runtime_1.jsx)("div", { style: { background: "rgba(239,68,68,.1)", border: "1px solid rgba(239,68,68,.25)", borderRadius: 8, padding: "12px 14px", color: "#f87171", fontSize: 13, marginBottom: 12 }, children: errorMsg }), (0, jsx_runtime_1.jsx)("button", { onClick: loadEditor, style: { background: "var(--cfx-orb-color, #6366f1)", border: "none", borderRadius: 8, padding: "8px 16px", color: "#fff", fontSize: 12, cursor: "pointer" }, children: "Retry" })] })), (phase === "ready" || phase === "saving" || phase === "submitting") && template && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { style: { display: "flex", overflowX: "auto", borderBottom: "1px solid rgba(255,255,255,.07)", flexShrink: 0, scrollbarWidth: "none" }, children: allTabs.map(tab => ((0, jsx_runtime_1.jsx)("button", { className: `cfx-tab${activeTab === tab ? " active" : ""}`, onClick: () => setState((s) => ({ ...s, activeTab: tab })), children: tab }, tab))) }), (0, jsx_runtime_1.jsx)("div", { style: { flex: 1, overflowY: "auto", padding: "18px 16px", scrollbarWidth: "thin", scrollbarColor: "rgba(255,255,255,.1) transparent" }, children: activeTab === "Pages" ? ((0, jsx_runtime_1.jsx)(PagesPanel, { pages: template.pages, enabledPages: enabledPages, onToggle: handlePageToggle })) : (activeFields.map(field => ((0, jsx_runtime_1.jsx)(FieldRow, { field: field, value: values[field.key], onChange: handleChange, availableFonts: template.availableFonts ?? [] }, field.id)))) }), phase !== "submitting" && ((0, jsx_runtime_1.jsxs)("div", { style: { padding: "14px 16px", borderTop: "1px solid rgba(255,255,255,.07)", flexShrink: 0 }, children: [(0, jsx_runtime_1.jsx)("input", { value: clientLabel, onChange: (e) => setState((s) => ({ ...s, clientLabel: e.target.value })), placeholder: "Your name (optional)", className: "cfx-input", style: { marginBottom: 10, fontSize: 12 } }), (0, jsx_runtime_1.jsx)("button", { onClick: handleSubmit, disabled: isBusy, style: { width: "100%", background: "#10b981", border: "none", borderRadius: 8, padding: "10px", color: "#fff", fontSize: 13, fontWeight: 500, cursor: isBusy ? "not-allowed" : "pointer" }, children: "\u2B06 Submit for Review" }), (0, jsx_runtime_1.jsx)("p", { style: { color: "#334155", fontSize: 11, margin: "8px 0 0", textAlign: "center" }, children: "Changes will be reviewed before going live" })] }))] })), phase === "submitted" && ((0, jsx_runtime_1.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", padding: 32, textAlign: "center" }, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontSize: 40, marginBottom: 12 }, children: "\u2713" }), (0, jsx_runtime_1.jsx)("div", { style: { color: "#4ade80", fontSize: 15, fontWeight: 600, marginBottom: 8 }, children: "Submitted!" }), (0, jsx_runtime_1.jsx)("p", { style: { color: "#475569", fontSize: 13, lineHeight: 1.6, marginBottom: 20 }, children: "The site owner will review your changes and publish them when ready." }), (0, jsx_runtime_1.jsx)("button", { onClick: () => { setState((s) => ({ ...s, phase: "idle" })); setOpen(false); }, style: { background: "rgba(255,255,255,.06)", border: "1px solid rgba(255,255,255,.1)", borderRadius: 8, padding: "8px 16px", color: "#e2e8f0", fontSize: 12, cursor: "pointer" }, children: "Close" })] }))] }), open && ((0, jsx_runtime_1.jsx)("div", { onClick: () => setOpen(false), style: { position: "fixed", inset: 0, zIndex: 2147483645, background: "rgba(0,0,0,.4)" }, className: "__cfx_backdrop__" }))] }));
321
+ }
322
+ exports.default = ClefbaseTemplateOrb;
323
+ //# sourceMappingURL=TemplateOrb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateOrb.js","sourceRoot":"","sources":["../../src/template/TemplateOrb.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * clefbase/template
3
+ *
4
+ * Import the ClefbaseTemplateOrb React component into your app.
5
+ * This is injected automatically by `clefbase template:enable`.
6
+ *
7
+ * @example
8
+ * import { ClefbaseTemplateOrb } from "clefbase/template";
9
+ *
10
+ * // In your root component's JSX:
11
+ * <ClefbaseTemplateOrb />
12
+ */
13
+ export { ClefbaseTemplateOrb } from "./TemplateOrb";
14
+ export type { TemplateConfig, TemplateField, TemplatePage, FieldType, OrbState, OrbPhase, } from "./types";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/template/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,QAAQ,GACT,MAAM,SAAS,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * clefbase/template
4
+ *
5
+ * Import the ClefbaseTemplateOrb React component into your app.
6
+ * This is injected automatically by `clefbase template:enable`.
7
+ *
8
+ * @example
9
+ * import { ClefbaseTemplateOrb } from "clefbase/template";
10
+ *
11
+ * // In your root component's JSX:
12
+ * <ClefbaseTemplateOrb />
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ClefbaseTemplateOrb = void 0;
16
+ var TemplateOrb_1 = require("./TemplateOrb");
17
+ Object.defineProperty(exports, "ClefbaseTemplateOrb", { enumerable: true, get: function () { return TemplateOrb_1.ClefbaseTemplateOrb; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/template/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,6CAAoD;AAA3C,kHAAA,mBAAmB,OAAA"}
@@ -0,0 +1,73 @@
1
+ export interface TemplateFieldOption {
2
+ label: string;
3
+ value: string;
4
+ }
5
+ export type FieldType = "color" | "text" | "textarea" | "image" | "font" | "select" | "toggle" | "number" | "spacing";
6
+ export interface TemplateField {
7
+ id: string;
8
+ key: string;
9
+ label: string;
10
+ type: FieldType;
11
+ defaultValue: unknown;
12
+ section: string;
13
+ description?: string;
14
+ options?: TemplateFieldOption[];
15
+ componentSelector?: string;
16
+ }
17
+ export interface TemplatePage {
18
+ id: string;
19
+ name: string;
20
+ slug: string;
21
+ entrypoint: string;
22
+ canDelete: boolean;
23
+ canAdd: boolean;
24
+ }
25
+ /**
26
+ * Full template config — written to clefbase-template.json by the CLI
27
+ * and read at runtime by the orb.
28
+ */
29
+ export interface TemplateConfig {
30
+ /** URL of the Clefbase server */
31
+ serverUrl: string;
32
+ /** Database / project ID */
33
+ dbId: string;
34
+ /** Hosted site ID this template controls */
35
+ siteId: string;
36
+ /** Display name */
37
+ name: string;
38
+ description?: string;
39
+ /** Color of the floating orb button */
40
+ orbColor?: string;
41
+ template: {
42
+ fields: TemplateField[];
43
+ cssVarMap: Record<string, string>;
44
+ availableFonts: string[];
45
+ pages: TemplatePage[];
46
+ };
47
+ }
48
+ export type OrbPhase = "idle" | "loading" | "ready" | "saving" | "submitting" | "submitted" | "error";
49
+ export interface ServerTemplate {
50
+ id: string;
51
+ dbId: string;
52
+ siteId: string;
53
+ name: string;
54
+ description?: string;
55
+ status: "active" | "archived";
56
+ fields: TemplateField[];
57
+ cssVarMap: Record<string, string>;
58
+ availableFonts: string[];
59
+ pages: TemplatePage[];
60
+ createdAt: string;
61
+ updatedAt: string;
62
+ }
63
+ export interface OrbState {
64
+ phase: OrbPhase;
65
+ template: ServerTemplate | null;
66
+ values: Record<string, unknown>;
67
+ enabledPages: string[];
68
+ activeTab: string;
69
+ dirty: boolean;
70
+ clientLabel: string;
71
+ errorMsg: string;
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/template/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,SAAS,GACjB,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GACvC,MAAM,GAAI,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAgB,MAAM,CAAC;IACzB,GAAG,EAAe,MAAM,CAAC;IACzB,KAAK,EAAa,MAAM,CAAC;IACzB,IAAI,EAAc,SAAS,CAAC;IAC5B,YAAY,EAAM,OAAO,CAAC;IAC1B,OAAO,EAAW,MAAM,CAAC;IACzB,WAAW,CAAC,EAAM,MAAM,CAAC;IACzB,OAAO,CAAC,EAAU,mBAAmB,EAAE,CAAC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAU,MAAM,CAAC;IACnB,IAAI,EAAQ,MAAM,CAAC;IACnB,IAAI,EAAQ,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAG,OAAO,CAAC;IACpB,MAAM,EAAM,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,SAAS,EAAI,MAAM,CAAC;IACpB,4BAA4B;IAC5B,IAAI,EAAS,MAAM,CAAC;IACpB,4CAA4C;IAC5C,MAAM,EAAO,MAAM,CAAC;IACpB,mBAAmB;IACnB,IAAI,EAAS,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,QAAQ,CAAC,EAAI,MAAM,CAAC;IAEpB,QAAQ,EAAE;QACR,MAAM,EAAU,aAAa,EAAE,CAAC;QAChC,SAAS,EAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,KAAK,EAAW,YAAY,EAAE,CAAC;KAChC,CAAC;CACH;AAID,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,SAAS,GACT,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAc,MAAM,CAAC;IACvB,IAAI,EAAY,MAAM,CAAC;IACvB,MAAM,EAAU,MAAM,CAAC;IACvB,IAAI,EAAY,MAAM,CAAC;IACvB,WAAW,CAAC,EAAI,MAAM,CAAC;IACvB,MAAM,EAAU,QAAQ,GAAG,UAAU,CAAC;IACtC,MAAM,EAAU,aAAa,EAAE,CAAC;IAChC,SAAS,EAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAW,YAAY,EAAE,CAAC;IAC/B,SAAS,EAAO,MAAM,CAAC;IACvB,SAAS,EAAO,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAS,QAAQ,CAAC;IACvB,QAAQ,EAAM,cAAc,GAAG,IAAI,CAAC;IACpC,MAAM,EAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAK,MAAM,CAAC;IACrB,KAAK,EAAS,OAAO,CAAC;IACtB,WAAW,EAAG,MAAM,CAAC;IACrB,QAAQ,EAAM,MAAM,CAAC;CACtB"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // ─── clefbase-template.json shape ────────────────────────────────────────────
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/template/types.ts"],"names":[],"mappings":";AAAA,gFAAgF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clefbase",
3
- "version": "1.3.2",
3
+ "version": "1.3.4",
4
4
  "description": "Firebase-style SDK and CLI for Clefbase — database, auth, storage, and hosting",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",