sa2kit 1.6.69 → 1.6.72

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 (43) hide show
  1. package/dist/festivalCard/core/index.d.mts +1 -1
  2. package/dist/festivalCard/core/index.d.ts +1 -1
  3. package/dist/festivalCard/core/index.js +4 -2
  4. package/dist/festivalCard/core/index.js.map +1 -1
  5. package/dist/festivalCard/core/index.mjs +4 -2
  6. package/dist/festivalCard/core/index.mjs.map +1 -1
  7. package/dist/festivalCard/index.d.mts +3 -3
  8. package/dist/festivalCard/index.d.ts +3 -3
  9. package/dist/festivalCard/index.js +220 -119
  10. package/dist/festivalCard/index.js.map +1 -1
  11. package/dist/festivalCard/index.mjs +219 -120
  12. package/dist/festivalCard/index.mjs.map +1 -1
  13. package/dist/festivalCard/miniapp/index.d.mts +3 -3
  14. package/dist/festivalCard/miniapp/index.d.ts +3 -3
  15. package/dist/festivalCard/miniapp/index.js +51 -15
  16. package/dist/festivalCard/miniapp/index.js.map +1 -1
  17. package/dist/festivalCard/miniapp/index.mjs +51 -15
  18. package/dist/festivalCard/miniapp/index.mjs.map +1 -1
  19. package/dist/festivalCard/routes/index.d.mts +44 -0
  20. package/dist/festivalCard/routes/index.d.ts +44 -0
  21. package/dist/festivalCard/routes/index.js +268 -0
  22. package/dist/festivalCard/routes/index.js.map +1 -0
  23. package/dist/festivalCard/routes/index.mjs +263 -0
  24. package/dist/festivalCard/routes/index.mjs.map +1 -0
  25. package/dist/festivalCard/server/index.d.mts +1 -1
  26. package/dist/festivalCard/server/index.d.ts +1 -1
  27. package/dist/festivalCard/web/index.d.mts +18 -4
  28. package/dist/festivalCard/web/index.d.ts +18 -4
  29. package/dist/festivalCard/web/index.js +220 -119
  30. package/dist/festivalCard/web/index.js.map +1 -1
  31. package/dist/festivalCard/web/index.mjs +219 -120
  32. package/dist/festivalCard/web/index.mjs.map +1 -1
  33. package/dist/{festivalCardService-uSg0oNuD.d.mts → festivalCardService-CqBTVC6x.d.mts} +3 -1
  34. package/dist/{festivalCardService-C0fhTezx.d.ts → festivalCardService-iFKu0k9q.d.ts} +3 -1
  35. package/dist/index.d.mts +3 -3
  36. package/dist/index.d.ts +3 -3
  37. package/dist/index.js +220 -119
  38. package/dist/index.js.map +1 -1
  39. package/dist/index.mjs +219 -120
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/{types-B-tjQTGi.d.mts → types-D2WetAPc.d.mts} +8 -1
  42. package/dist/{types-B-tjQTGi.d.ts → types-D2WetAPc.d.ts} +8 -1
  43. package/package.json +6 -1
@@ -0,0 +1,263 @@
1
+ import { NextResponse } from 'next/server';
2
+
3
+ // src/festivalCard/routes/index.ts
4
+
5
+ // src/festivalCard/server/db.ts
6
+ var dbAdapter = null;
7
+ var initializeFestivalCardDb = (adapter) => {
8
+ dbAdapter = adapter;
9
+ };
10
+ var getFestivalCardDb = () => dbAdapter;
11
+
12
+ // src/festivalCard/core/defaults.ts
13
+ var DEFAULT_FESTIVAL_CARD_CONFIG = {
14
+ id: "default-festival-card",
15
+ name: "Holiday Card",
16
+ theme: "winter",
17
+ coverTitle: "Happy Holidays",
18
+ coverSubtitle: "Warm wishes for you",
19
+ background: {
20
+ colorA: "#0c1a34",
21
+ colorB: "#1f4f8a"
22
+ },
23
+ backgroundMusic: {
24
+ src: "",
25
+ loop: true,
26
+ autoPlay: false,
27
+ volume: 0.5
28
+ },
29
+ pages: [
30
+ {
31
+ id: "page-1",
32
+ title: "\u5C01\u9762",
33
+ background: { color: "#11284d" },
34
+ elements: [
35
+ {
36
+ id: "p1-text-1",
37
+ type: "text",
38
+ x: 50,
39
+ y: 20,
40
+ content: "\u65B0\u5E74\u5FEB\u4E50",
41
+ fontSize: 34,
42
+ fontWeight: 700,
43
+ align: "center",
44
+ color: "#f8fafc"
45
+ },
46
+ {
47
+ id: "p1-text-2",
48
+ type: "text",
49
+ x: 50,
50
+ y: 36,
51
+ content: "\u613F\u8FD9\u4E00\u5E74\u5E73\u5B89\u559C\u4E50",
52
+ fontSize: 18,
53
+ fontWeight: 500,
54
+ align: "center",
55
+ color: "#dbeafe"
56
+ },
57
+ {
58
+ id: "p1-image-1",
59
+ type: "image",
60
+ x: 50,
61
+ y: 68,
62
+ width: 72,
63
+ height: 42,
64
+ src: "https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80",
65
+ fit: "cover",
66
+ borderRadius: 16,
67
+ alt: "holiday",
68
+ isBackground: false
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ id: "page-2",
74
+ title: "\u795D\u798F",
75
+ background: { color: "#1a3766" },
76
+ elements: [
77
+ {
78
+ id: "p2-text-1",
79
+ type: "text",
80
+ x: 50,
81
+ y: 28,
82
+ content: "\u613F\u4F60\u65B0\u5C81\uFF1A",
83
+ fontSize: 28,
84
+ fontWeight: 700,
85
+ align: "center",
86
+ color: "#fef3c7"
87
+ },
88
+ {
89
+ id: "p2-text-2",
90
+ type: "text",
91
+ x: 50,
92
+ y: 42,
93
+ content: "\u6240\u5F97\u7686\u6240\u671F\uFF0C\u6240\u5931\u4EA6\u65E0\u788D",
94
+ fontSize: 18,
95
+ fontWeight: 500,
96
+ align: "center",
97
+ color: "#f8fafc"
98
+ },
99
+ {
100
+ id: "p2-text-3",
101
+ type: "text",
102
+ x: 50,
103
+ y: 55,
104
+ content: "\u613F\u4F60\u7684\u6BCF\u4E00\u6B65\u90FD\u8D70\u5411\u5149\u4EAE",
105
+ fontSize: 16,
106
+ fontWeight: 400,
107
+ align: "center",
108
+ color: "#dbeafe"
109
+ }
110
+ ]
111
+ },
112
+ {
113
+ id: "page-3",
114
+ title: "\u843D\u6B3E",
115
+ background: { color: "#11284d" },
116
+ elements: [
117
+ {
118
+ id: "p3-image-1",
119
+ type: "image",
120
+ x: 50,
121
+ y: 34,
122
+ width: 60,
123
+ height: 42,
124
+ src: "https://images.unsplash.com/photo-1456324504439-367cee3b3c32?auto=format&fit=crop&w=1200&q=80",
125
+ fit: "cover",
126
+ borderRadius: 14,
127
+ alt: "gift",
128
+ isBackground: false
129
+ },
130
+ {
131
+ id: "p3-text-1",
132
+ type: "text",
133
+ x: 50,
134
+ y: 72,
135
+ content: "Best wishes, from SA2Kit",
136
+ fontSize: 18,
137
+ fontWeight: 600,
138
+ align: "center",
139
+ color: "#f8fafc"
140
+ }
141
+ ]
142
+ }
143
+ ]
144
+ };
145
+
146
+ // src/festivalCard/core/normalize.ts
147
+ var ensurePage = (page, index) => ({
148
+ id: page.id || `page-${index + 1}`,
149
+ title: page.title || `\u7B2C ${index + 1} \u9875`,
150
+ elements: Array.isArray(page.elements) ? page.elements : [],
151
+ background: page.background || {}
152
+ });
153
+ var normalizeFestivalCardConfig = (config) => {
154
+ const pages = config?.pages && config.pages.length > 0 ? config.pages : DEFAULT_FESTIVAL_CARD_CONFIG.pages;
155
+ return {
156
+ ...DEFAULT_FESTIVAL_CARD_CONFIG,
157
+ ...config,
158
+ background: {
159
+ ...DEFAULT_FESTIVAL_CARD_CONFIG.background,
160
+ ...config?.background || {}
161
+ },
162
+ backgroundMusic: {
163
+ ...DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic,
164
+ ...config?.backgroundMusic || {},
165
+ src: config?.backgroundMusic?.src ?? DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic?.src ?? ""
166
+ },
167
+ pages: pages.map(ensurePage)
168
+ };
169
+ };
170
+
171
+ // src/festivalCard/services/festivalCardService.ts
172
+ var FestivalCardService = class {
173
+ constructor(options) {
174
+ this.db = options?.db || getFestivalCardDb();
175
+ }
176
+ async listConfigs() {
177
+ if (!this.db) {
178
+ return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
179
+ }
180
+ if (this.db.listConfigs) {
181
+ const list = await this.db.listConfigs();
182
+ return list.length > 0 ? list : [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
183
+ }
184
+ return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card", name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];
185
+ }
186
+ async getConfig(cardId = "default-festival-card") {
187
+ if (!this.db) return DEFAULT_FESTIVAL_CARD_CONFIG;
188
+ const config = await this.db.getConfig(cardId);
189
+ return normalizeFestivalCardConfig(config);
190
+ }
191
+ async saveConfig(cardId, config) {
192
+ const normalized = normalizeFestivalCardConfig(config);
193
+ if (!this.db) return normalized;
194
+ await this.db.saveConfig(cardId, normalized);
195
+ return normalized;
196
+ }
197
+ async deleteConfig(cardId) {
198
+ if (!this.db?.deleteConfig) return;
199
+ await this.db.deleteConfig(cardId);
200
+ }
201
+ };
202
+ var memoryStore = /* @__PURE__ */ new Map();
203
+ var defaultId = DEFAULT_FESTIVAL_CARD_CONFIG.id || "default-festival-card";
204
+ if (!memoryStore.has(defaultId)) {
205
+ memoryStore.set(defaultId, DEFAULT_FESTIVAL_CARD_CONFIG);
206
+ }
207
+
208
+ // src/festivalCard/routes/index.ts
209
+ var createService = (config) => {
210
+ if (config.db) initializeFestivalCardDb(config.db);
211
+ return new FestivalCardService({ db: config.db });
212
+ };
213
+ var createListFestivalCardsHandler = (config = {}) => {
214
+ const service = createService(config);
215
+ return async (_request) => {
216
+ try {
217
+ const data = await service.listConfigs();
218
+ return NextResponse.json({ success: true, data });
219
+ } catch (error) {
220
+ return NextResponse.json({ success: false, error: error.message }, { status: 500 });
221
+ }
222
+ };
223
+ };
224
+ var createGetFestivalCardHandler = (config = {}) => {
225
+ const service = createService(config);
226
+ return async (_request, context) => {
227
+ try {
228
+ const card = await service.getConfig(context.params.id);
229
+ return NextResponse.json({ success: true, data: card });
230
+ } catch (error) {
231
+ return NextResponse.json({ success: false, error: error.message }, { status: 500 });
232
+ }
233
+ };
234
+ };
235
+ var createUpsertFestivalCardHandler = (config = {}) => {
236
+ const service = createService(config);
237
+ return async (request, context) => {
238
+ try {
239
+ const body = await request.json();
240
+ const payload = body && typeof body === "object" && "config" in body ? body.config : void 0;
241
+ const normalized = normalizeFestivalCardConfig(payload || {});
242
+ const data = await service.saveConfig(context.params.id, normalized);
243
+ return NextResponse.json({ success: true, data });
244
+ } catch (error) {
245
+ return NextResponse.json({ success: false, error: error.message }, { status: 500 });
246
+ }
247
+ };
248
+ };
249
+ var createDeleteFestivalCardHandler = (config = {}) => {
250
+ const service = createService(config);
251
+ return async (_request, context) => {
252
+ try {
253
+ await service.deleteConfig(context.params.id);
254
+ return NextResponse.json({ success: true });
255
+ } catch (error) {
256
+ return NextResponse.json({ success: false, error: error.message }, { status: 500 });
257
+ }
258
+ };
259
+ };
260
+
261
+ export { createDeleteFestivalCardHandler, createGetFestivalCardHandler, createListFestivalCardsHandler, createUpsertFestivalCardHandler };
262
+ //# sourceMappingURL=index.mjs.map
263
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/festivalCard/server/db.ts","../../../src/festivalCard/core/defaults.ts","../../../src/festivalCard/core/normalize.ts","../../../src/festivalCard/services/festivalCardService.ts","../../../src/festivalCard/routes/index.ts"],"names":[],"mappings":";;;;;AAEA,IAAI,SAAA,GAA0C,IAAA;AAEvC,IAAM,wBAAA,GAA2B,CAAC,OAAA,KAAyC;AAChF,EAAA,SAAA,GAAY,OAAA;AACd,CAAA;AAEO,IAAM,oBAAoB,MAAoC,SAAA;;;ACN9D,IAAM,4BAAA,GAAmD;AAAA,EAC9D,EAAA,EAAI,uBAAA;AAAA,EACJ,IAAA,EAAM,cAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,UAAA,EAAY,gBAAA;AAAA,EACZ,aAAA,EAAe,qBAAA;AAAA,EACf,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,GAAA,EAAK,EAAA;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL;AAAA,MACE,EAAA,EAAI,QAAA;AAAA,MACJ,KAAA,EAAO,cAAA;AAAA,MACP,UAAA,EAAY,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,MAC/B,QAAA,EAAU;AAAA,QACR;AAAA,UACE,EAAA,EAAI,WAAA;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,CAAA,EAAG,EAAA;AAAA,UACH,CAAA,EAAG,EAAA;AAAA,UACH,OAAA,EAAS,0BAAA;AAAA,UACT,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACT;AAAA,QACA;AAAA,UACE,EAAA,EAAI,WAAA;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,CAAA,EAAG,EAAA;AAAA,UACH,CAAA,EAAG,EAAA;AAAA,UACH,OAAA,EAAS,kDAAA;AAAA,UACT,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACT;AAAA,QACA;AAAA,UACE,EAAA,EAAI,YAAA;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,CAAA,EAAG,EAAA;AAAA,UACH,CAAA,EAAG,EAAA;AAAA,UACH,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,GAAA,EAAK,+FAAA;AAAA,UACL,GAAA,EAAK,OAAA;AAAA,UACL,YAAA,EAAc,EAAA;AAAA,UACd,GAAA,EAAK,SAAA;AAAA,UACL,YAAA,EAAc;AAAA;AAChB;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,QAAA;AAAA,MACJ,KAAA,EAAO,cAAA;AAAA,MACP,UAAA,EAAY,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,MAC/B,QAAA,EAAU;AAAA,QACR;AAAA,UACE,EAAA,EAAI,WAAA;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,CAAA,EAAG,EAAA;AAAA,UACH,CAAA,EAAG,EAAA;AAAA,UACH,OAAA,EAAS,gCAAA;AAAA,UACT,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACT;AAAA,QACA;AAAA,UACE,EAAA,EAAI,WAAA;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,CAAA,EAAG,EAAA;AAAA,UACH,CAAA,EAAG,EAAA;AAAA,UACH,OAAA,EAAS,oEAAA;AAAA,UACT,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACT;AAAA,QACA;AAAA,UACE,EAAA,EAAI,WAAA;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,CAAA,EAAG,EAAA;AAAA,UACH,CAAA,EAAG,EAAA;AAAA,UACH,OAAA,EAAS,oEAAA;AAAA,UACT,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO;AAAA;AACT;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,QAAA;AAAA,MACJ,KAAA,EAAO,cAAA;AAAA,MACP,UAAA,EAAY,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,MAC/B,QAAA,EAAU;AAAA,QACR;AAAA,UACE,EAAA,EAAI,YAAA;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,CAAA,EAAG,EAAA;AAAA,UACH,CAAA,EAAG,EAAA;AAAA,UACH,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,GAAA,EAAK,+FAAA;AAAA,UACL,GAAA,EAAK,OAAA;AAAA,UACL,YAAA,EAAc,EAAA;AAAA,UACd,GAAA,EAAK,MAAA;AAAA,UACL,YAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAI,WAAA;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,CAAA,EAAG,EAAA;AAAA,UACH,CAAA,EAAG,EAAA;AAAA,UACH,OAAA,EAAS,0BAAA;AAAA,UACT,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO;AAAA;AACT;AACF;AACF;AAEJ,CAAA;;;AClIA,IAAM,UAAA,GAAa,CAAC,IAAA,EAAwB,KAAA,MAAqC;AAAA,EAC/E,EAAA,EAAI,IAAA,CAAK,EAAA,IAAM,CAAA,KAAA,EAAQ,QAAQ,CAAC,CAAA,CAAA;AAAA,EAChC,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,CAAA,OAAA,EAAK,QAAQ,CAAC,CAAA,OAAA,CAAA;AAAA,EACnC,QAAA,EAAU,MAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAA,CAAK,WAAW,EAAC;AAAA,EAC1D,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc;AACjC,CAAA,CAAA;AAEO,IAAM,2BAAA,GAA8B,CACzC,MAAA,KACuB;AACvB,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,MAAA,CAAO,MAAM,MAAA,GAAS,CAAA,GAAI,MAAA,CAAO,KAAA,GAAQ,4BAAA,CAA6B,KAAA;AAErG,EAAA,OAAO;AAAA,IACL,GAAG,4BAAA;AAAA,IACH,GAAG,MAAA;AAAA,IACH,UAAA,EAAY;AAAA,MACV,GAAG,4BAAA,CAA6B,UAAA;AAAA,MAChC,GAAI,MAAA,EAAQ,UAAA,IAAc;AAAC,KAC7B;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,GAAG,4BAAA,CAA6B,eAAA;AAAA,MAChC,GAAI,MAAA,EAAQ,eAAA,IAAmB,EAAC;AAAA,MAChC,KAAK,MAAA,EAAQ,eAAA,EAAiB,GAAA,IAAO,4BAAA,CAA6B,iBAAiB,GAAA,IAAO;AAAA,KAC5F;AAAA,IACA,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,UAAU;AAAA,GAC7B;AACF,CAAA;;;ACpBO,IAAM,sBAAN,MAA0B;AAAA,EAG/B,YAAY,OAAA,EAAsC;AAChD,IAAA,IAAA,CAAK,EAAA,GAAK,OAAA,EAAS,EAAA,IAAM,iBAAA,EAAkB;AAAA,EAC7C;AAAA,EAEA,MAAM,WAAA,GAAoD;AACxD,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,MAAA,OAAO,CAAC,EAAE,EAAA,EAAI,4BAAA,CAA6B,MAAM,uBAAA,EAAyB,IAAA,EAAM,4BAAA,CAA6B,IAAA,EAAM,CAAA;AAAA,IACrH;AAEA,IAAA,IAAI,IAAA,CAAK,GAAG,WAAA,EAAa;AACvB,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,EAAA,CAAG,WAAA,EAAY;AACvC,MAAA,OAAO,IAAA,CAAK,MAAA,GAAS,CAAA,GACjB,IAAA,GACA,CAAC,EAAE,EAAA,EAAI,4BAAA,CAA6B,EAAA,IAAM,uBAAA,EAAyB,IAAA,EAAM,4BAAA,CAA6B,MAAM,CAAA;AAAA,IAClH;AAEA,IAAA,OAAO,CAAC,EAAE,EAAA,EAAI,4BAAA,CAA6B,MAAM,uBAAA,EAAyB,IAAA,EAAM,4BAAA,CAA6B,IAAA,EAAM,CAAA;AAAA,EACrH;AAAA,EAEA,MAAM,SAAA,CAAU,MAAA,GAAS,uBAAA,EAAsD;AAC7E,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,OAAO,4BAAA;AACrB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM,CAAA;AAC7C,IAAA,OAAO,4BAA4B,MAAM,CAAA;AAAA,EAC3C;AAAA,EAEA,MAAM,UAAA,CAAW,MAAA,EAAgB,MAAA,EAAyD;AACxF,IAAA,MAAM,UAAA,GAAa,4BAA4B,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,OAAO,UAAA;AACrB,IAAA,MAAM,IAAA,CAAK,EAAA,CAAG,UAAA,CAAW,MAAA,EAAQ,UAAU,CAAA;AAC3C,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,MAAA,EAA+B;AAChD,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,YAAA,EAAc;AAC5B,IAAA,MAAM,IAAA,CAAK,EAAA,CAAG,YAAA,CAAa,MAAM,CAAA;AAAA,EACnC;AACF,CAAA;AAEA,IAAM,WAAA,uBAAkB,GAAA,EAAgC;AACxD,IAAM,SAAA,GAAY,6BAA6B,EAAA,IAAM,uBAAA;AACrD,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,SAAS,CAAA,EAAG;AAC/B,EAAA,WAAA,CAAY,GAAA,CAAI,WAAW,4BAA4B,CAAA;AACzD;;;AC3CA,IAAM,aAAA,GAAgB,CAAC,MAAA,KAAoC;AACzD,EAAA,IAAI,MAAA,CAAO,EAAA,EAAI,wBAAA,CAAyB,MAAA,CAAO,EAAE,CAAA;AACjD,EAAA,OAAO,IAAI,mBAAA,CAAoB,EAAE,EAAA,EAAI,MAAA,CAAO,IAAI,CAAA;AAClD,CAAA;AAEO,IAAM,8BAAA,GAAiC,CAAC,MAAA,GAAkC,EAAC,KAAM;AACtF,EAAA,MAAM,OAAA,GAAU,cAAc,MAAM,CAAA;AACpC,EAAA,OAAO,OAAO,QAAA,KAA0B;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,WAAA,EAAY;AACvC,MAAA,OAAO,aAAa,IAAA,CAAK,EAAE,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAQ,KAAA,CAAgB,OAAA,EAAQ,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IAC/F;AAAA,EACF,CAAA;AACF;AAEO,IAAM,4BAAA,GAA+B,CAAC,MAAA,GAAkC,EAAC,KAAM;AACpF,EAAA,MAAM,OAAA,GAAU,cAAc,MAAM,CAAA;AACpC,EAAA,OAAO,OAAO,UAAuB,OAAA,KAAwC;AAC3E,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAQ,OAAO,EAAE,CAAA;AACtD,MAAA,OAAO,aAAa,IAAA,CAAK,EAAE,SAAS,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AAAA,IACxD,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAQ,KAAA,CAAgB,OAAA,EAAQ,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IAC/F;AAAA,EACF,CAAA;AACF;AAEO,IAAM,+BAAA,GAAkC,CAAC,MAAA,GAAkC,EAAC,KAAM;AACvF,EAAA,MAAM,OAAA,GAAU,cAAc,MAAM,CAAA;AACpC,EAAA,OAAO,OAAO,SAAsB,OAAA,KAAwC;AAC1E,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAgB,MAAM,OAAA,CAAQ,IAAA,EAAK;AACzC,MAAA,MAAM,OAAA,GACJ,QAAQ,OAAO,IAAA,KAAS,YAAY,QAAA,IAAY,IAAA,GAC3C,KAA8B,MAAA,GAC/B,KAAA,CAAA;AACN,MAAA,MAAM,UAAA,GAAa,2BAAA,CAA6B,OAAA,IAAW,EAAkC,CAAA;AAC7F,MAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,WAAW,OAAA,CAAQ,MAAA,CAAO,IAAI,UAAU,CAAA;AACnE,MAAA,OAAO,aAAa,IAAA,CAAK,EAAE,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAQ,KAAA,CAAgB,OAAA,EAAQ,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IAC/F;AAAA,EACF,CAAA;AACF;AAEO,IAAM,+BAAA,GAAkC,CAAC,MAAA,GAAkC,EAAC,KAAM;AACvF,EAAA,MAAM,OAAA,GAAU,cAAc,MAAM,CAAA;AACpC,EAAA,OAAO,OAAO,UAAuB,OAAA,KAAwC;AAC3E,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,CAAQ,YAAA,CAAa,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAA;AAC5C,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,EAAE,OAAA,EAAS,MAAM,CAAA;AAAA,IAC5C,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAQ,KAAA,CAAgB,OAAA,EAAQ,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IAC/F;AAAA,EACF,CAAA;AACF","file":"index.mjs","sourcesContent":["import type { FestivalCardDbAdapter } from '../types';\n\nlet dbAdapter: FestivalCardDbAdapter | null = null;\n\nexport const initializeFestivalCardDb = (adapter: FestivalCardDbAdapter): void => {\n dbAdapter = adapter;\n};\n\nexport const getFestivalCardDb = (): FestivalCardDbAdapter | null => dbAdapter;\n","import type { FestivalCardConfig } from '../types';\n\nexport const DEFAULT_FESTIVAL_CARD_CONFIG: FestivalCardConfig = {\n id: 'default-festival-card',\n name: 'Holiday Card',\n theme: 'winter',\n coverTitle: 'Happy Holidays',\n coverSubtitle: 'Warm wishes for you',\n background: {\n colorA: '#0c1a34',\n colorB: '#1f4f8a',\n },\n backgroundMusic: {\n src: '',\n loop: true,\n autoPlay: false,\n volume: 0.5,\n },\n pages: [\n {\n id: 'page-1',\n title: '封面',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p1-text-1',\n type: 'text',\n x: 50,\n y: 20,\n content: '新年快乐',\n fontSize: 34,\n fontWeight: 700,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p1-text-2',\n type: 'text',\n x: 50,\n y: 36,\n content: '愿这一年平安喜乐',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#dbeafe',\n },\n {\n id: 'p1-image-1',\n type: 'image',\n x: 50,\n y: 68,\n width: 72,\n height: 42,\n src: 'https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 16,\n alt: 'holiday',\n isBackground: false,\n },\n ],\n },\n {\n id: 'page-2',\n title: '祝福',\n background: { color: '#1a3766' },\n elements: [\n {\n id: 'p2-text-1',\n type: 'text',\n x: 50,\n y: 28,\n content: '愿你新岁:',\n fontSize: 28,\n fontWeight: 700,\n align: 'center',\n color: '#fef3c7',\n },\n {\n id: 'p2-text-2',\n type: 'text',\n x: 50,\n y: 42,\n content: '所得皆所期,所失亦无碍',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p2-text-3',\n type: 'text',\n x: 50,\n y: 55,\n content: '愿你的每一步都走向光亮',\n fontSize: 16,\n fontWeight: 400,\n align: 'center',\n color: '#dbeafe',\n },\n ],\n },\n {\n id: 'page-3',\n title: '落款',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p3-image-1',\n type: 'image',\n x: 50,\n y: 34,\n width: 60,\n height: 42,\n src: 'https://images.unsplash.com/photo-1456324504439-367cee3b3c32?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 14,\n alt: 'gift',\n isBackground: false,\n },\n {\n id: 'p3-text-1',\n type: 'text',\n x: 50,\n y: 72,\n content: 'Best wishes, from SA2Kit',\n fontSize: 18,\n fontWeight: 600,\n align: 'center',\n color: '#f8fafc',\n },\n ],\n },\n ],\n};\n","import { DEFAULT_FESTIVAL_CARD_CONFIG } from './defaults';\nimport type { FestivalCardConfig, FestivalCardPage } from '../types';\n\nconst ensurePage = (page: FestivalCardPage, index: number): FestivalCardPage => ({\n id: page.id || `page-${index + 1}`,\n title: page.title || `第 ${index + 1} 页`,\n elements: Array.isArray(page.elements) ? page.elements : [],\n background: page.background || {},\n});\n\nexport const normalizeFestivalCardConfig = (\n config?: Partial<FestivalCardConfig> | null\n): FestivalCardConfig => {\n const pages = config?.pages && config.pages.length > 0 ? config.pages : DEFAULT_FESTIVAL_CARD_CONFIG.pages;\n\n return {\n ...DEFAULT_FESTIVAL_CARD_CONFIG,\n ...config,\n background: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.background,\n ...(config?.background || {}),\n },\n backgroundMusic: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic,\n ...(config?.backgroundMusic || {}),\n src: config?.backgroundMusic?.src ?? DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic?.src ?? '',\n },\n pages: pages.map(ensurePage),\n };\n};\n\nexport const resizeFestivalCardPages = (config: FestivalCardConfig, pageCount: number): FestivalCardConfig => {\n const safeCount = Math.max(1, Math.min(12, Math.floor(pageCount || 1)));\n const nextPages = [...config.pages];\n\n while (nextPages.length < safeCount) {\n const idx = nextPages.length;\n nextPages.push({\n id: `page-${idx + 1}`,\n title: `第 ${idx + 1} 页`,\n elements: [],\n background: {},\n });\n }\n\n return {\n ...config,\n pages: nextPages.slice(0, safeCount),\n };\n};\n","import { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig } from '../core';\nimport { getFestivalCardDb } from '../server/db';\nimport type {\n FestivalCardConfig,\n FestivalCardConfigSummary,\n FestivalCardDbAdapter,\n FestivalCardServiceOptions,\n} from '../types';\n\nexport class FestivalCardService {\n private db: FestivalCardDbAdapter | null;\n\n constructor(options?: FestivalCardServiceOptions) {\n this.db = options?.db || getFestivalCardDb();\n }\n\n async listConfigs(): Promise<FestivalCardConfigSummary[]> {\n if (!this.db) {\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n if (this.db.listConfigs) {\n const list = await this.db.listConfigs();\n return list.length > 0\n ? list\n : [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n async getConfig(cardId = 'default-festival-card'): Promise<FestivalCardConfig> {\n if (!this.db) return DEFAULT_FESTIVAL_CARD_CONFIG;\n const config = await this.db.getConfig(cardId);\n return normalizeFestivalCardConfig(config);\n }\n\n async saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig> {\n const normalized = normalizeFestivalCardConfig(config);\n if (!this.db) return normalized;\n await this.db.saveConfig(cardId, normalized);\n return normalized;\n }\n\n async deleteConfig(cardId: string): Promise<void> {\n if (!this.db?.deleteConfig) return;\n await this.db.deleteConfig(cardId);\n }\n}\n\nconst memoryStore = new Map<string, FestivalCardConfig>();\nconst defaultId = DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card';\nif (!memoryStore.has(defaultId)) {\n memoryStore.set(defaultId, DEFAULT_FESTIVAL_CARD_CONFIG);\n}\n\nexport const createInMemoryFestivalCardDb = (): FestivalCardDbAdapter => ({\n listConfigs() {\n return Promise.resolve(\n Array.from(memoryStore.entries()).map(([id, config]) => ({\n id,\n name: config.name || id,\n }))\n );\n },\n getConfig(id: string) {\n return Promise.resolve(memoryStore.get(id) || null);\n },\n saveConfig(id: string, config: FestivalCardConfig) {\n memoryStore.set(id, config);\n return Promise.resolve();\n },\n deleteConfig(id: string) {\n memoryStore.delete(id);\n return Promise.resolve();\n },\n});\n","import { NextResponse } from 'next/server';\nimport { initializeFestivalCardDb } from '../server/db';\nimport { FestivalCardService } from '../services';\nimport { normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig, FestivalCardDbAdapter } from '../types';\nimport type { NextRequest } from 'next/server';\n\nexport interface FestivalCardRouteConfig {\n db?: FestivalCardDbAdapter;\n}\n\nconst createService = (config: FestivalCardRouteConfig) => {\n if (config.db) initializeFestivalCardDb(config.db);\n return new FestivalCardService({ db: config.db });\n};\n\nexport const createListFestivalCardsHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest) => {\n try {\n const data = await service.listConfigs();\n return NextResponse.json({ success: true, data });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createGetFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest, context: { params: { id: string } }) => {\n try {\n const card = await service.getConfig(context.params.id);\n return NextResponse.json({ success: true, data: card });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createUpsertFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (request: NextRequest, context: { params: { id: string } }) => {\n try {\n const body: unknown = await request.json();\n const payload =\n body && typeof body === 'object' && 'config' in body\n ? (body as { config?: unknown }).config\n : undefined;\n const normalized = normalizeFestivalCardConfig((payload || {}) as Partial<FestivalCardConfig>);\n const data = await service.saveConfig(context.params.id, normalized);\n return NextResponse.json({ success: true, data });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n\nexport const createDeleteFestivalCardHandler = (config: FestivalCardRouteConfig = {}) => {\n const service = createService(config);\n return async (_request: NextRequest, context: { params: { id: string } }) => {\n try {\n await service.deleteConfig(context.params.id);\n return NextResponse.json({ success: true });\n } catch (error) {\n return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 });\n }\n };\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { h as FestivalCardDbAdapter } from '../../types-B-tjQTGi.mjs';
1
+ import { i as FestivalCardDbAdapter } from '../../types-D2WetAPc.mjs';
2
2
 
3
3
  declare const initializeFestivalCardDb: (adapter: FestivalCardDbAdapter) => void;
4
4
  declare const getFestivalCardDb: () => FestivalCardDbAdapter | null;
@@ -1,4 +1,4 @@
1
- import { h as FestivalCardDbAdapter } from '../../types-B-tjQTGi.js';
1
+ import { i as FestivalCardDbAdapter } from '../../types-D2WetAPc.js';
2
2
 
3
3
  declare const initializeFestivalCardDb: (adapter: FestivalCardDbAdapter) => void;
4
4
  declare const getFestivalCardDb: () => FestivalCardDbAdapter | null;
@@ -1,7 +1,7 @@
1
1
  export { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig, resizeFestivalCardPages } from '../core/index.mjs';
2
- export { F as FestivalCardService, c as createInMemoryFestivalCardDb, u as useFestivalCardConfig } from '../../festivalCardService-uSg0oNuD.mjs';
3
- import { F as FestivalCardConfig, f as FestivalCardPage } from '../../types-B-tjQTGi.mjs';
4
- export { g as FestivalCardAudioConfig, h as FestivalCardDbAdapter, e as FestivalCardElement, b as FestivalCardElementBase, a as FestivalCardElementType, d as FestivalCardImageElement, i as FestivalCardServiceOptions, c as FestivalCardTextElement } from '../../types-B-tjQTGi.mjs';
2
+ export { F as FestivalCardService, c as createInMemoryFestivalCardDb, u as useFestivalCardConfig } from '../../festivalCardService-CqBTVC6x.mjs';
3
+ import { F as FestivalCardConfig, f as FestivalCardPage } from '../../types-D2WetAPc.mjs';
4
+ export { g as FestivalCardAudioConfig, h as FestivalCardConfigSummary, i as FestivalCardDbAdapter, e as FestivalCardElement, b as FestivalCardElementBase, a as FestivalCardElementType, d as FestivalCardImageElement, j as FestivalCardServiceOptions, c as FestivalCardTextElement } from '../../types-D2WetAPc.mjs';
5
5
  import React__default from 'react';
6
6
 
7
7
  interface FestivalCardBook3DProps {
@@ -10,12 +10,26 @@ interface FestivalCardBook3DProps {
10
10
  }
11
11
  declare const FestivalCardBook3D: React__default.FC<FestivalCardBook3DProps>;
12
12
 
13
+ interface FestivalCardConfigPageProps {
14
+ apiBase?: string;
15
+ cardId?: string;
16
+ mainPagePath?: string;
17
+ }
18
+ declare const FestivalCardConfigPage: React__default.FC<FestivalCardConfigPageProps>;
19
+
13
20
  interface FestivalCardConfigEditorProps {
14
21
  value: FestivalCardConfig;
15
22
  onChange: (config: FestivalCardConfig) => void;
16
23
  }
17
24
  declare const FestivalCardConfigEditor: React__default.FC<FestivalCardConfigEditorProps>;
18
25
 
26
+ interface FestivalCardManagedPageProps {
27
+ apiBase?: string;
28
+ cardId?: string;
29
+ configPagePath?: string;
30
+ }
31
+ declare const FestivalCardManagedPage: React__default.FC<FestivalCardManagedPageProps>;
32
+
19
33
  interface FestivalCardPageRendererProps {
20
34
  page: FestivalCardPage;
21
35
  }
@@ -28,4 +42,4 @@ interface FestivalCardStudioProps {
28
42
  }
29
43
  declare const FestivalCardStudio: React__default.FC<FestivalCardStudioProps>;
30
44
 
31
- export { FestivalCardBook3D, type FestivalCardBook3DProps, FestivalCardConfig, FestivalCardConfigEditor, FestivalCardPage, FestivalCardPageRenderer, FestivalCardStudio };
45
+ export { FestivalCardBook3D, type FestivalCardBook3DProps, FestivalCardConfig, FestivalCardConfigEditor, FestivalCardConfigPage, FestivalCardManagedPage, FestivalCardPage, FestivalCardPageRenderer, FestivalCardStudio };
@@ -1,7 +1,7 @@
1
1
  export { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig, resizeFestivalCardPages } from '../core/index.js';
2
- export { F as FestivalCardService, c as createInMemoryFestivalCardDb, u as useFestivalCardConfig } from '../../festivalCardService-C0fhTezx.js';
3
- import { F as FestivalCardConfig, f as FestivalCardPage } from '../../types-B-tjQTGi.js';
4
- export { g as FestivalCardAudioConfig, h as FestivalCardDbAdapter, e as FestivalCardElement, b as FestivalCardElementBase, a as FestivalCardElementType, d as FestivalCardImageElement, i as FestivalCardServiceOptions, c as FestivalCardTextElement } from '../../types-B-tjQTGi.js';
2
+ export { F as FestivalCardService, c as createInMemoryFestivalCardDb, u as useFestivalCardConfig } from '../../festivalCardService-iFKu0k9q.js';
3
+ import { F as FestivalCardConfig, f as FestivalCardPage } from '../../types-D2WetAPc.js';
4
+ export { g as FestivalCardAudioConfig, h as FestivalCardConfigSummary, i as FestivalCardDbAdapter, e as FestivalCardElement, b as FestivalCardElementBase, a as FestivalCardElementType, d as FestivalCardImageElement, j as FestivalCardServiceOptions, c as FestivalCardTextElement } from '../../types-D2WetAPc.js';
5
5
  import React__default from 'react';
6
6
 
7
7
  interface FestivalCardBook3DProps {
@@ -10,12 +10,26 @@ interface FestivalCardBook3DProps {
10
10
  }
11
11
  declare const FestivalCardBook3D: React__default.FC<FestivalCardBook3DProps>;
12
12
 
13
+ interface FestivalCardConfigPageProps {
14
+ apiBase?: string;
15
+ cardId?: string;
16
+ mainPagePath?: string;
17
+ }
18
+ declare const FestivalCardConfigPage: React__default.FC<FestivalCardConfigPageProps>;
19
+
13
20
  interface FestivalCardConfigEditorProps {
14
21
  value: FestivalCardConfig;
15
22
  onChange: (config: FestivalCardConfig) => void;
16
23
  }
17
24
  declare const FestivalCardConfigEditor: React__default.FC<FestivalCardConfigEditorProps>;
18
25
 
26
+ interface FestivalCardManagedPageProps {
27
+ apiBase?: string;
28
+ cardId?: string;
29
+ configPagePath?: string;
30
+ }
31
+ declare const FestivalCardManagedPage: React__default.FC<FestivalCardManagedPageProps>;
32
+
19
33
  interface FestivalCardPageRendererProps {
20
34
  page: FestivalCardPage;
21
35
  }
@@ -28,4 +42,4 @@ interface FestivalCardStudioProps {
28
42
  }
29
43
  declare const FestivalCardStudio: React__default.FC<FestivalCardStudioProps>;
30
44
 
31
- export { FestivalCardBook3D, type FestivalCardBook3DProps, FestivalCardConfig, FestivalCardConfigEditor, FestivalCardPage, FestivalCardPageRenderer, FestivalCardStudio };
45
+ export { FestivalCardBook3D, type FestivalCardBook3DProps, FestivalCardConfig, FestivalCardConfigEditor, FestivalCardConfigPage, FestivalCardManagedPage, FestivalCardPage, FestivalCardPageRenderer, FestivalCardStudio };