@fluid-app/portal-sdk 0.1.98 → 0.1.100

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 (37) hide show
  1. package/dist/{MessagingScreen-DA62lyrN.mjs → MessagingScreen-84R1a-lD.mjs} +2 -1
  2. package/dist/{MessagingScreen-DTXSZ-Oa.mjs → MessagingScreen-CBuI3fu6.mjs} +1204 -1112
  3. package/dist/MessagingScreen-CBuI3fu6.mjs.map +1 -0
  4. package/dist/{MessagingScreen-5jw8KSLQ.cjs → MessagingScreen-CGS7aG1A.cjs} +1 -1
  5. package/dist/{MessagingScreen-B9CCsimy.cjs → MessagingScreen-Cgx3jwpr.cjs} +1204 -1112
  6. package/dist/MessagingScreen-Cgx3jwpr.cjs.map +1 -0
  7. package/dist/{ProductsScreen-C0o1gVNw.mjs → ProductsScreen-6J79mnIB.mjs} +2 -2
  8. package/dist/{ProductsScreen-C0o1gVNw.mjs.map → ProductsScreen-6J79mnIB.mjs.map} +1 -1
  9. package/dist/{ProductsScreen-CL16lwsI.cjs → ProductsScreen-DZnKtPBp.cjs} +2 -2
  10. package/dist/{ProductsScreen-CigOdDOU.mjs → ProductsScreen-DbHS3p4U.mjs} +6 -2
  11. package/dist/{ProductsScreen-BTrBbxX6.cjs → ProductsScreen-PJ95OcSX.cjs} +2 -2
  12. package/dist/{ProductsScreen-BTrBbxX6.cjs.map → ProductsScreen-PJ95OcSX.cjs.map} +1 -1
  13. package/dist/ShareablesScreen-CVT7u2hN.cjs +398 -0
  14. package/dist/ShareablesScreen-CVT7u2hN.cjs.map +1 -0
  15. package/dist/ShareablesScreen-Cy7w85IH.mjs +380 -0
  16. package/dist/ShareablesScreen-Cy7w85IH.mjs.map +1 -0
  17. package/dist/{ShareablesScreen-CSLB0ZXS.mjs → ShareablesScreen-DUpaH8VU.mjs} +6 -2
  18. package/dist/{ShareablesScreen-DufZz22d.cjs → ShareablesScreen-Dk5EQGMa.cjs} +2 -2
  19. package/dist/index.cjs +10 -10
  20. package/dist/index.d.cts +429 -9
  21. package/dist/index.d.cts.map +1 -1
  22. package/dist/index.d.mts +429 -9
  23. package/dist/index.d.mts.map +1 -1
  24. package/dist/index.mjs +10 -10
  25. package/dist/{src-D9jWnRlX.mjs → src-BrwLqPPh.mjs} +90 -269
  26. package/dist/src-BrwLqPPh.mjs.map +1 -0
  27. package/dist/{src-C3R03o4d.cjs → src-Dlsw83js.cjs} +95 -268
  28. package/dist/src-Dlsw83js.cjs.map +1 -0
  29. package/package.json +12 -12
  30. package/dist/MessagingScreen-B9CCsimy.cjs.map +0 -1
  31. package/dist/MessagingScreen-DTXSZ-Oa.mjs.map +0 -1
  32. package/dist/ShareablesScreen-B9c5Mw5b.mjs +0 -159
  33. package/dist/ShareablesScreen-B9c5Mw5b.mjs.map +0 -1
  34. package/dist/ShareablesScreen-Bldl8tta.cjs +0 -177
  35. package/dist/ShareablesScreen-Bldl8tta.cjs.map +0 -1
  36. package/dist/src-C3R03o4d.cjs.map +0 -1
  37. package/dist/src-D9jWnRlX.mjs.map +0 -1
@@ -0,0 +1,380 @@
1
+ import { mt as USER_TYPES } from "./FluidProvider-CWYquEIF.mjs";
2
+ import { a as useFluidAuth, r as useSdkClient } from "./use-account-clients-Dsqx0mKw.mjs";
3
+ import { n as useCurrentUser } from "./use-current-user-BMI-LR9t.mjs";
4
+ import { n as useAppNavigation } from "./AppNavigationContext-Du3Qq0yc.mjs";
5
+ import { a as ShareablesApiProvider, i as ShareablesUIProvider, n as ShareablesApp, o as ShareablesCoreProvider, r as getFileMimeType } from "./src-BrwLqPPh.mjs";
6
+ import { n as createShareablesApiAdapter } from "./src-DryOJTBW.mjs";
7
+ import { useCallback, useMemo } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ import { z } from "zod";
10
+ //#region src/hooks/use-user-type.ts
11
+ /**
12
+ * Convenience hook for user-type checks in the portal SDK.
13
+ */
14
+ function useUserType() {
15
+ const { user } = useFluidAuth();
16
+ return useMemo(() => {
17
+ const userType = user?.user_type ?? null;
18
+ return {
19
+ userType,
20
+ isCustomer: userType === USER_TYPES.customer,
21
+ isRep: userType === USER_TYPES.rep,
22
+ isAdmin: userType === USER_TYPES.admin || userType === USER_TYPES.root_admin
23
+ };
24
+ }, [user?.user_type]);
25
+ }
26
+ //#endregion
27
+ //#region ../../file-picker/core/src/schemas/dam.ts
28
+ const damVariantSchema = z.object({
29
+ id: z.string(),
30
+ url: z.string().nullable(),
31
+ file_name: z.string(),
32
+ mime_type: z.string(),
33
+ content: z.any().nullable(),
34
+ created_at: z.string(),
35
+ updated_at: z.string(),
36
+ default: z.boolean(),
37
+ is_original: z.boolean(),
38
+ is_text: z.boolean(),
39
+ media_type: z.string(),
40
+ processing_status: z.string(),
41
+ tags: z.array(z.string())
42
+ });
43
+ const damAssetSchema = z.object({
44
+ id: z.number(),
45
+ canonical_path: z.string(),
46
+ category: z.string(),
47
+ code: z.string(),
48
+ company: z.string(),
49
+ created_at: z.string(),
50
+ default_variant_id: z.string(),
51
+ default_variant_url: z.string().optional(),
52
+ description: z.string(),
53
+ name: z.string(),
54
+ updated_at: z.string(),
55
+ variants: z.array(damVariantSchema).optional()
56
+ });
57
+ const damTreeFolderNodeSchema = z.object({
58
+ asset_code: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
59
+ name: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
60
+ category: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
61
+ variants: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional()
62
+ }).passthrough();
63
+ const damTreeSchema = z.record(z.string(), z.union([
64
+ z.lazy(() => damTreeSchema),
65
+ damAssetSchema,
66
+ damTreeFolderNodeSchema
67
+ ]));
68
+ const damQueryResponseSchema = z.object({
69
+ path: z.string(),
70
+ tree: damTreeSchema,
71
+ meta: z.object({ next_cursor: z.string().optional() }).optional()
72
+ });
73
+ z.object({ asset: z.object({
74
+ file: z.any(),
75
+ name: z.string(),
76
+ description: z.string().optional(),
77
+ tags: z.string().optional()
78
+ }) });
79
+ const damAssetCreateResponseSchema = z.object({
80
+ asset: damAssetSchema,
81
+ meta: z.object({
82
+ request_id: z.string(),
83
+ timestamp: z.string()
84
+ })
85
+ });
86
+ z.object({
87
+ placeholder_asset: z.object({
88
+ mime_type: z.string(),
89
+ name: z.string().optional(),
90
+ description: z.string().optional()
91
+ }),
92
+ skip_autotagging: z.boolean().optional()
93
+ });
94
+ z.object({
95
+ asset: z.object({
96
+ file: z.any(),
97
+ name: z.string(),
98
+ description: z.string().optional(),
99
+ tags: z.string().optional()
100
+ }).optional(),
101
+ text_asset: z.object({
102
+ file_name: z.string(),
103
+ mime_type: z.string(),
104
+ text: z.string(),
105
+ name: z.string().optional(),
106
+ description: z.string().optional(),
107
+ tags: z.string().optional()
108
+ }).optional(),
109
+ placeholder_asset: z.object({
110
+ mime_type: z.string(),
111
+ name: z.string().optional(),
112
+ description: z.string().optional()
113
+ }).optional(),
114
+ skip_autotagging: z.boolean().optional()
115
+ });
116
+ const damAssetPathCreateResponseSchema = z.object({
117
+ asset: z.object({
118
+ id: z.number(),
119
+ canonical_path: z.string(),
120
+ name: z.string()
121
+ }),
122
+ meta: z.object({
123
+ request_id: z.string(),
124
+ timestamp: z.string()
125
+ })
126
+ });
127
+ //#endregion
128
+ //#region ../../file-picker/api-client/src/client.ts
129
+ function createFilePickerClient(config) {
130
+ return {
131
+ fetchClient: config.fetchClient,
132
+ uploadStrategy: config.uploadStrategy,
133
+ unsplashAccessKey: config.unsplashAccessKey,
134
+ proxyEndpoint: config.proxyEndpoint ?? "/api/proxy-url"
135
+ };
136
+ }
137
+ //#endregion
138
+ //#region ../../file-picker/api-client/src/api/dam-assets.ts
139
+ /**
140
+ * Create a DAM asset. Text files use FormData upload; non-text files
141
+ * delegate to the provided uploadStrategy (e.g. ImageKit).
142
+ * If no uploadStrategy is provided, all files use FormData upload.
143
+ */
144
+ async function createDamAsset(fetchClient, params, uploadStrategy) {
145
+ const mimeType = getFileMimeType(params.file);
146
+ if (mimeType.startsWith("text/") || mimeType === "application/json" || mimeType === "application/xml" || params.file.name.endsWith(".txt") || params.file.name.endsWith(".json") || params.file.name.endsWith(".xml") || params.file.name.endsWith(".csv")) return createDamAssetViaFormData(fetchClient, params);
147
+ if (uploadStrategy) return uploadStrategy.uploadFile(params);
148
+ return createDamAssetViaFormData(fetchClient, params);
149
+ }
150
+ async function createDamAssetViaFormData(fetchClient, params) {
151
+ const formData = new FormData();
152
+ formData.append("asset[file]", params.file);
153
+ formData.append("asset[name]", params.name);
154
+ if (params.description) formData.append("asset[description]", params.description);
155
+ if (params.tags && params.tags.length > 0) formData.append("asset[tags]", params.tags.join(","));
156
+ const response = await fetchClient.requestWithFormData("/dam/assets", formData, { method: "POST" });
157
+ return damAssetCreateResponseSchema.parse(response);
158
+ }
159
+ async function createDamAssetPathForAssets(fetchClient, { asset_paths, code }) {
160
+ const response = await fetchClient.post(`/dam/assets/${code}/asset_paths`, { asset_paths });
161
+ return damAssetPathCreateResponseSchema.parse(response);
162
+ }
163
+ //#endregion
164
+ //#region ../../file-picker/api-client/src/api/dam-query.ts
165
+ async function queryDamAssets(fetchClient, params) {
166
+ const response = await fetchClient.post("/dam/query", params);
167
+ return damQueryResponseSchema.parse(response);
168
+ }
169
+ async function deleteDamAsset(fetchClient, code) {
170
+ return fetchClient.delete(`/dam/assets/${code}`);
171
+ }
172
+ async function discardDamAsset(fetchClient, code) {
173
+ return fetchClient.patch(`/dam/assets/${code}/discard`);
174
+ }
175
+ //#endregion
176
+ //#region ../../file-picker/api-client/src/api/unsplash.ts
177
+ const unsplashImageSchema = z.object({
178
+ id: z.string(),
179
+ urls: z.object({
180
+ raw: z.string(),
181
+ full: z.string(),
182
+ regular: z.string(),
183
+ small: z.string(),
184
+ thumb: z.string()
185
+ }),
186
+ alt_description: z.string().nullable(),
187
+ description: z.string().nullable(),
188
+ user: z.object({
189
+ name: z.string(),
190
+ username: z.string()
191
+ }),
192
+ width: z.number(),
193
+ height: z.number()
194
+ });
195
+ const unsplashSearchResponseSchema = z.object({
196
+ results: z.array(unsplashImageSchema),
197
+ total: z.number(),
198
+ total_pages: z.number()
199
+ });
200
+ /**
201
+ * Search Unsplash for photos matching a query.
202
+ */
203
+ async function searchUnsplash(query, accessKey, page = 1, perPage = 20) {
204
+ const response = await fetch(`https://api.unsplash.com/search/photos?query=${encodeURIComponent(query)}&page=${page}&per_page=${perPage}&client_id=${accessKey}`);
205
+ if (!response.ok) throw new Error("Failed to search Unsplash");
206
+ return unsplashSearchResponseSchema.parse(await response.json());
207
+ }
208
+ //#endregion
209
+ //#region ../../file-picker/api-client/src/api/url-proxy.ts
210
+ const urlProxyResponseSchema = z.object({
211
+ data: z.string(),
212
+ contentType: z.string(),
213
+ size: z.number()
214
+ });
215
+ /**
216
+ * Proxy a URL fetch through the backend to bypass CORS restrictions.
217
+ * The backend fetches the file and returns it as base64-encoded data.
218
+ *
219
+ * @param url - The URL to fetch
220
+ * @param proxyEndpoint - The proxy endpoint (defaults to "/api/proxy-url")
221
+ */
222
+ async function proxyUrlFetch(url, proxyEndpoint = "/api/proxy-url") {
223
+ const response = await fetch(proxyEndpoint, {
224
+ method: "POST",
225
+ headers: { "Content-Type": "application/json" },
226
+ body: JSON.stringify({ url })
227
+ });
228
+ if (!response.ok) {
229
+ const errorData = await response.json().catch(() => ({ error: "Failed to proxy URL fetch" }));
230
+ throw new Error(errorData.error || `HTTP ${response.status}`);
231
+ }
232
+ const data = await response.json();
233
+ return urlProxyResponseSchema.parse(data);
234
+ }
235
+ //#endregion
236
+ //#region ../../file-picker/api-client/src/create-file-picker-api.ts
237
+ /**
238
+ * Creates a FilePickerApi-compatible adapter backed by the real API client
239
+ * functions. The returned object satisfies the FilePickerApi interface
240
+ * from @fluid-app/file-picker-core via structural typing.
241
+ */
242
+ function createFilePickerApi(client) {
243
+ return {
244
+ createDamAsset: (params) => createDamAsset(client.fetchClient, params, client.uploadStrategy),
245
+ queryDamAssets: (params) => queryDamAssets(client.fetchClient, params),
246
+ searchUnsplash: (query, page, perPage) => {
247
+ if (!client.unsplashAccessKey) throw new Error("Unsplash access key not configured");
248
+ return searchUnsplash(query, client.unsplashAccessKey, page, perPage);
249
+ },
250
+ deleteDamAsset: (code) => deleteDamAsset(client.fetchClient, code),
251
+ discardDamAsset: (code) => discardDamAsset(client.fetchClient, code),
252
+ createDamAssetPathForAssets: (params) => createDamAssetPathForAssets(client.fetchClient, params),
253
+ proxyUrlFetch: (url) => proxyUrlFetch(url, client.proxyEndpoint)
254
+ };
255
+ }
256
+ //#endregion
257
+ //#region src/screens/ShareablesScreen.tsx
258
+ /**
259
+ * Parse the current shareables sub-route from the full slug.
260
+ *
261
+ * System nav slugs are "share/products", "share/media", "share/playlists".
262
+ * Detail pages append an ID: "share/products/123", "share/media/456".
263
+ *
264
+ * "share/products" → screen="products", detailId=null
265
+ * "share/products/123" → screen="products", detailId="123"
266
+ * "share/media/456" → screen="media", detailId="456"
267
+ * "share/playlists" → screen="playlists", detailId=null
268
+ * "share/playlists/789" → screen="playlists", detailId="789"
269
+ * "share/files" → screen="files", detailId=null
270
+ * "share" → screen=null (default to products)
271
+ */
272
+ function parseShareablesRoute(currentSlug) {
273
+ const slugWithoutPrefix = currentSlug.replace(/^share\/?/, "");
274
+ if (!slugWithoutPrefix) return {
275
+ screen: null,
276
+ detailId: null,
277
+ action: null
278
+ };
279
+ const parts = slugWithoutPrefix.split("/");
280
+ return {
281
+ screen: parts[0] || null,
282
+ detailId: parts[1] || null,
283
+ action: parts[2] || null
284
+ };
285
+ }
286
+ function ShareablesScreen({ background, textColor, accentColor, padding, borderRadius, ...divProps }) {
287
+ const domainClient = useSdkClient();
288
+ const { data: userData } = useCurrentUser();
289
+ const { currentSlug, navigate } = useAppNavigation();
290
+ const { isCustomer } = useUserType();
291
+ const { screen, detailId, action } = parseShareablesRoute(currentSlug);
292
+ const handleNavigate = useCallback((subScreen, id) => {
293
+ navigate(id ? `share/${subScreen}/${id}` : `share/${subScreen}`);
294
+ }, [navigate]);
295
+ const handleBack = useCallback(() => {
296
+ if (detailId && screen) navigate(`share/${screen}`);
297
+ else navigate("share/products");
298
+ }, [
299
+ navigate,
300
+ detailId,
301
+ screen
302
+ ]);
303
+ const coreConfig = useMemo(() => ({
304
+ client: domainClient,
305
+ user: userData ? { id: userData.id } : null,
306
+ repContext: true
307
+ }), [domainClient, userData]);
308
+ const shareablesApi = useMemo(() => createShareablesApiAdapter(domainClient, { repContext: true }), [domainClient]);
309
+ const filePickerApi = useMemo(() => createFilePickerApi(createFilePickerClient({ fetchClient: domainClient })), [domainClient]);
310
+ const uiConfig = useMemo(() => ({
311
+ user: userData ? {
312
+ id: userData.id,
313
+ company: userData.company ? { logo_url: userData.company.logo_url } : null
314
+ } : void 0,
315
+ affiliateId: userData?.affiliate_id ?? null,
316
+ basePath: "",
317
+ navigate: (path) => {
318
+ const cleanPath = path.replace(/^\//, "");
319
+ navigate(cleanPath.startsWith("share/") ? cleanPath : `share/${cleanPath}`);
320
+ },
321
+ showToast: (opts) => {
322
+ console.warn(`[Shareables] ${opts.type}: ${opts.title}`);
323
+ },
324
+ filePickerApi,
325
+ onToggleFavorite: async (params) => {
326
+ const affiliateId = userData?.affiliate_id;
327
+ if (!affiliateId) throw new Error("No affiliate ID");
328
+ return domainClient.post(`/user_companies/${affiliateId}/favorites/toggle.json`, {
329
+ favoriteable_id: params.favoriteableId,
330
+ favoriteable_type: params.favoriteableType
331
+ });
332
+ },
333
+ onDeletePlaylist: isCustomer ? void 0 : async (playlistId) => {
334
+ const { playlists: playlistsApi } = await import("./src-DryOJTBW.mjs").then((n) => n.t);
335
+ await playlistsApi.deletePlaylist(domainClient, playlistId);
336
+ },
337
+ readOnly: isCustomer
338
+ }), [
339
+ userData,
340
+ navigate,
341
+ filePickerApi,
342
+ domainClient,
343
+ isCustomer
344
+ ]);
345
+ return /* @__PURE__ */ jsx("div", {
346
+ ...divProps,
347
+ className: `h-full ${divProps.className ?? ""}`,
348
+ children: /* @__PURE__ */ jsx(ShareablesCoreProvider, {
349
+ config: coreConfig,
350
+ children: /* @__PURE__ */ jsx(ShareablesApiProvider, {
351
+ api: shareablesApi,
352
+ children: /* @__PURE__ */ jsx(ShareablesUIProvider, {
353
+ config: uiConfig,
354
+ children: /* @__PURE__ */ jsx(ShareablesApp, {
355
+ screen,
356
+ detailId,
357
+ action,
358
+ companyLogoUrl: userData?.company?.logo_url,
359
+ countryCode: userData?.country?.iso,
360
+ onNavigate: handleNavigate,
361
+ onBack: handleBack
362
+ })
363
+ })
364
+ })
365
+ })
366
+ });
367
+ }
368
+ const shareablesScreenPropertySchema = {
369
+ widgetType: "ShareablesScreen",
370
+ displayName: "Shareables Screen",
371
+ tabsConfig: [{
372
+ id: "styling",
373
+ label: "Styling"
374
+ }],
375
+ fields: []
376
+ };
377
+ //#endregion
378
+ export { shareablesScreenPropertySchema as n, useUserType as r, ShareablesScreen as t };
379
+
380
+ //# sourceMappingURL=ShareablesScreen-Cy7w85IH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareablesScreen-Cy7w85IH.mjs","names":[],"sources":["../src/hooks/use-user-type.ts","../../../file-picker/core/src/schemas/dam.ts","../../../file-picker/api-client/src/client.ts","../../../file-picker/api-client/src/api/dam-assets.ts","../../../file-picker/api-client/src/api/dam-query.ts","../../../file-picker/api-client/src/api/unsplash.ts","../../../file-picker/api-client/src/api/url-proxy.ts","../../../file-picker/api-client/src/create-file-picker-api.ts","../src/screens/ShareablesScreen.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useFluidAuth } from \"./use-fluid-auth\";\nimport { USER_TYPES, type UserType } from \"../auth/types\";\n\nexport interface UseUserTypeResult {\n userType: UserType | null;\n isCustomer: boolean;\n isRep: boolean;\n isAdmin: boolean;\n}\n\n/**\n * Convenience hook for user-type checks in the portal SDK.\n */\nexport function useUserType(): UseUserTypeResult {\n const { user } = useFluidAuth();\n\n return useMemo(() => {\n const userType = user?.user_type ?? null;\n return {\n userType,\n isCustomer: userType === USER_TYPES.customer,\n isRep: userType === USER_TYPES.rep,\n isAdmin:\n userType === USER_TYPES.admin || userType === USER_TYPES.root_admin,\n };\n }, [user?.user_type]);\n}\n","import { z } from \"zod\";\n\ntype DamVariantApi = {\n id: string;\n url: string | null;\n file_name: string;\n mime_type: string;\n content: any;\n created_at: string;\n updated_at: string;\n default: boolean;\n is_original: boolean;\n is_text: boolean;\n media_type: string;\n processing_status: string;\n tags: string[];\n};\n\nexport const damVariantSchema: z.ZodType<DamVariantApi> = z.object({\n id: z.string(),\n url: z.string().nullable(),\n file_name: z.string(),\n mime_type: z.string(),\n content: z.any().nullable(),\n created_at: z.string(),\n updated_at: z.string(),\n default: z.boolean(),\n is_original: z.boolean(),\n is_text: z.boolean(),\n media_type: z.string(),\n processing_status: z.string(),\n tags: z.array(z.string()),\n});\n\ntype DamAssetApi = {\n id: number;\n canonical_path: string;\n category: string;\n code: string;\n company: string;\n created_at: string;\n default_variant_id: string;\n default_variant_url?: string;\n description: string;\n name: string;\n updated_at: string;\n variants?: DamVariantApi[];\n};\n\nexport const damAssetSchema: z.ZodType<DamAssetApi> = z.object({\n id: z.number(),\n canonical_path: z.string(),\n category: z.string(),\n code: z.string(),\n company: z.string(),\n created_at: z.string(),\n default_variant_id: z.string(),\n default_variant_url: z.string().optional(),\n description: z.string(),\n name: z.string(),\n updated_at: z.string(),\n variants: z.array(damVariantSchema).optional(),\n});\n\ntype DamTreeFolderNode = {\n asset_code?: string | Record<string, unknown>;\n name?: string | Record<string, unknown>;\n category?: string | Record<string, unknown>;\n variants?: unknown[] | Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport const damTreeFolderNodeSchema: z.ZodType<DamTreeFolderNode> = z\n .object({\n asset_code: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n name: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n category: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n variants: z\n .union([z.array(z.unknown()), z.record(z.string(), z.unknown())])\n .optional(),\n })\n .passthrough();\n\nexport const damTreeSchema: z.ZodType<Record<string, any>> = z.record(\n z.string(),\n z.union([\n z.lazy(() => damTreeSchema),\n damAssetSchema,\n damTreeFolderNodeSchema,\n ]),\n);\n\ntype DamQueryResponse = {\n path: string;\n tree: Record<string, any>;\n meta?: { next_cursor?: string };\n};\n\nexport const damQueryResponseSchema: z.ZodType<DamQueryResponse> = z.object({\n path: z.string(),\n tree: damTreeSchema,\n meta: z\n .object({\n next_cursor: z.string().optional(),\n })\n .optional(),\n});\n\ntype DamAssetCreateRequest = {\n asset: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n};\n\nexport const damAssetCreateRequestSchema: z.ZodType<DamAssetCreateRequest> =\n z.object({\n asset: z.object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n }),\n });\n\ntype DamAssetCreateResponse = {\n asset: DamAssetApi;\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetCreateResponseSchema: z.ZodType<DamAssetCreateResponse> =\n z.object({\n asset: damAssetSchema,\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\n// Schema for creating asset with placeholder (for ImageKit direct upload)\ntype DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetCreateWithPlaceholderRequestSchema: z.ZodType<DamAssetCreateWithPlaceholderRequest> =\n z.object({\n placeholder_asset: z.object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n }),\n skip_autotagging: z.boolean().optional(),\n });\n\n// Schema for creating asset path without file upload (legacy)\ntype DamAssetPathCreateRequest = {\n asset?: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n text_asset?: {\n file_name: string;\n mime_type: string;\n text: string;\n name?: string;\n description?: string;\n tags?: string;\n };\n placeholder_asset?: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetPathCreateRequestSchema: z.ZodType<DamAssetPathCreateRequest> =\n z.object({\n asset: z\n .object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n text_asset: z\n .object({\n file_name: z.string(),\n mime_type: z.string(),\n text: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n placeholder_asset: z\n .object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n skip_autotagging: z.boolean().optional(),\n });\n\ntype DamAssetPathCreateResponse = {\n asset: { id: number; canonical_path: string; name: string };\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetPathCreateResponseSchema: z.ZodType<DamAssetPathCreateResponse> =\n z.object({\n asset: z.object({\n id: z.number(),\n canonical_path: z.string(),\n name: z.string(),\n }),\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\nexport type { DamVariantApi, DamAssetApi };\nexport type DamTreeApi = z.infer<typeof damTreeSchema>;\nexport type { DamQueryResponse };\nexport type { DamAssetCreateRequest };\nexport type { DamAssetCreateResponse };\nexport type { DamAssetCreateWithPlaceholderRequest };\nexport type { DamAssetPathCreateRequest };\nexport type { DamAssetPathCreateResponse };\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport type { DamAssetCreateResponse } from \"@fluid-app/file-picker-core\";\n\nexport interface DamUploadStrategy {\n uploadFile(params: {\n file: File;\n name: string;\n description?: string;\n tags?: string[];\n onProgress?: (progress: number) => void;\n companyId?: number;\n }): Promise<DamAssetCreateResponse>;\n}\n\nexport interface FilePickerClientConfig {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint?: string; // defaults to \"/api/proxy-url\"\n}\n\nexport interface FilePickerClient {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint: string;\n}\n\nexport function createFilePickerClient(\n config: FilePickerClientConfig,\n): FilePickerClient {\n return {\n fetchClient: config.fetchClient,\n uploadStrategy: config.uploadStrategy,\n unsplashAccessKey: config.unsplashAccessKey,\n proxyEndpoint: config.proxyEndpoint ?? \"/api/proxy-url\",\n };\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damAssetCreateResponseSchema,\n damAssetPathCreateResponseSchema,\n getFileMimeType,\n type CreateDamAssetParams,\n type CreateDamAssetPathForAssetsParams,\n type DamAssetCreateResponse,\n type DamAssetCreateWithPlaceholderRequest,\n type DamAssetPathCreateRequest,\n type DamAssetPathCreateResponse,\n} from \"@fluid-app/file-picker-core\";\nimport type { DamUploadStrategy } from \"../client\";\n\nexport type { CreateDamAssetParams };\n\nexport interface CreateDamAssetPathParams {\n name: string;\n description?: string;\n tags?: string[];\n companyId?: number;\n mimeType?: string;\n textContent?: string;\n fileName?: string;\n skipAutotagging?: boolean;\n}\n\n/**\n * Create a DAM asset. Text files use FormData upload; non-text files\n * delegate to the provided uploadStrategy (e.g. ImageKit).\n * If no uploadStrategy is provided, all files use FormData upload.\n */\nexport async function createDamAsset(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n uploadStrategy?: DamUploadStrategy,\n): Promise<DamAssetCreateResponse> {\n const mimeType = getFileMimeType(params.file);\n const isTextFile =\n mimeType.startsWith(\"text/\") ||\n mimeType === \"application/json\" ||\n mimeType === \"application/xml\" ||\n params.file.name.endsWith(\".txt\") ||\n params.file.name.endsWith(\".json\") ||\n params.file.name.endsWith(\".xml\") ||\n params.file.name.endsWith(\".csv\");\n\n // For text files, use traditional FormData upload\n if (isTextFile) {\n return createDamAssetViaFormData(fetchClient, params);\n }\n\n // For non-text files, use upload strategy if available\n if (uploadStrategy) {\n return uploadStrategy.uploadFile(params);\n }\n\n // Fallback to FormData upload\n return createDamAssetViaFormData(fetchClient, params);\n}\n\nasync function createDamAssetViaFormData(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n): Promise<DamAssetCreateResponse> {\n const formData = new FormData();\n formData.append(\"asset[file]\", params.file);\n formData.append(\"asset[name]\", params.name);\n\n if (params.description) {\n formData.append(\"asset[description]\", params.description);\n }\n\n if (params.tags && params.tags.length > 0) {\n formData.append(\"asset[tags]\", params.tags.join(\",\"));\n }\n\n const response = await fetchClient.requestWithFormData<unknown>(\n \"/dam/assets\",\n formData,\n { method: \"POST\" },\n );\n return damAssetCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset with placeholder for direct upload strategies\n */\nexport async function createDamAssetWithPlaceholder(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n if (!params.mimeType) {\n throw new Error(\"mimeType is required for createDamAssetWithPlaceholder\");\n }\n const requestData: DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n },\n };\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset path without file upload (legacy)\n */\nexport async function createDamAssetPath(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n const requestData: DamAssetPathCreateRequest = {};\n\n if (params.textContent && params.mimeType && params.fileName) {\n requestData.text_asset = {\n file_name: params.fileName,\n mime_type: params.mimeType,\n text: params.textContent,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n } else if (params.mimeType) {\n requestData.placeholder_asset = {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n };\n } else {\n requestData.asset = {\n file: null,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n }\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\nexport type { CreateDamAssetPathForAssetsParams } from \"@fluid-app/file-picker-core\";\n\nexport async function createDamAssetPathForAssets(\n fetchClient: FetchClientInstance,\n { asset_paths, code }: CreateDamAssetPathForAssetsParams,\n): Promise<DamAssetPathCreateResponse> {\n const response = await fetchClient.post<unknown>(\n `/dam/assets/${code}/asset_paths`,\n { asset_paths },\n );\n return damAssetPathCreateResponseSchema.parse(response);\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damQueryResponseSchema,\n type DamQueryParams,\n type DamQueryResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport async function queryDamAssets(\n fetchClient: FetchClientInstance,\n params: DamQueryParams,\n): Promise<DamQueryResponse> {\n const response = await fetchClient.post<unknown>(\"/dam/query\", params);\n return damQueryResponseSchema.parse(response);\n}\n\nexport async function deleteDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.delete(`/dam/assets/${code}`);\n}\n\nexport async function discardDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.patch(`/dam/assets/${code}/discard`);\n}\n","import { z } from \"zod\";\nimport type {\n UnsplashImage,\n UnsplashSearchResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport type { UnsplashImage, UnsplashSearchResponse };\n\nconst unsplashImageSchema: z.ZodType<UnsplashImage> = z.object({\n id: z.string(),\n urls: z.object({\n raw: z.string(),\n full: z.string(),\n regular: z.string(),\n small: z.string(),\n thumb: z.string(),\n }),\n alt_description: z.string().nullable(),\n description: z.string().nullable(),\n user: z.object({ name: z.string(), username: z.string() }),\n width: z.number(),\n height: z.number(),\n});\n\nconst unsplashSearchResponseSchema: z.ZodType<UnsplashSearchResponse> =\n z.object({\n results: z.array(unsplashImageSchema),\n total: z.number(),\n total_pages: z.number(),\n });\n\n/**\n * Search Unsplash for photos matching a query.\n */\nexport async function searchUnsplash(\n query: string,\n accessKey: string,\n page: number = 1,\n perPage: number = 20,\n): Promise<UnsplashSearchResponse> {\n const response = await fetch(\n `https://api.unsplash.com/search/photos?query=${encodeURIComponent(query)}&page=${page}&per_page=${perPage}&client_id=${accessKey}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to search Unsplash\");\n }\n\n return unsplashSearchResponseSchema.parse(await response.json());\n}\n","import { z } from \"zod\";\nimport type { UrlProxyResponse } from \"@fluid-app/file-picker-core\";\n\nexport type { UrlProxyResponse };\n\nconst urlProxyResponseSchema: z.ZodType<UrlProxyResponse> = z.object({\n data: z.string(),\n contentType: z.string(),\n size: z.number(),\n});\n\n/**\n * Proxy a URL fetch through the backend to bypass CORS restrictions.\n * The backend fetches the file and returns it as base64-encoded data.\n *\n * @param url - The URL to fetch\n * @param proxyEndpoint - The proxy endpoint (defaults to \"/api/proxy-url\")\n */\nexport async function proxyUrlFetch(\n url: string,\n proxyEndpoint: string = \"/api/proxy-url\",\n): Promise<UrlProxyResponse> {\n const response = await fetch(proxyEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ url }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({\n error: \"Failed to proxy URL fetch\",\n }));\n throw new Error(\n (errorData as { error?: string }).error || `HTTP ${response.status}`,\n );\n }\n\n const data: unknown = await response.json();\n return urlProxyResponseSchema.parse(data);\n}\n","import type { FilePickerApi } from \"@fluid-app/file-picker-core\";\nimport type { FilePickerClient } from \"./client\";\nimport { createDamAsset, createDamAssetPathForAssets } from \"./api/dam-assets\";\nimport {\n queryDamAssets,\n deleteDamAsset,\n discardDamAsset,\n} from \"./api/dam-query\";\nimport { searchUnsplash } from \"./api/unsplash\";\nimport { proxyUrlFetch } from \"./api/url-proxy\";\n\n/**\n * Creates a FilePickerApi-compatible adapter backed by the real API client\n * functions. The returned object satisfies the FilePickerApi interface\n * from @fluid-app/file-picker-core via structural typing.\n */\nexport function createFilePickerApi(client: FilePickerClient): FilePickerApi {\n return {\n createDamAsset: (params: Parameters<typeof createDamAsset>[1]) =>\n createDamAsset(client.fetchClient, params, client.uploadStrategy),\n queryDamAssets: (params: Parameters<typeof queryDamAssets>[1]) =>\n queryDamAssets(client.fetchClient, params),\n searchUnsplash: (query: string, page?: number, perPage?: number) => {\n if (!client.unsplashAccessKey) {\n throw new Error(\"Unsplash access key not configured\");\n }\n return searchUnsplash(query, client.unsplashAccessKey, page, perPage);\n },\n deleteDamAsset: (code: string) => deleteDamAsset(client.fetchClient, code),\n discardDamAsset: (code: string) =>\n discardDamAsset(client.fetchClient, code),\n createDamAssetPathForAssets: (\n params: Parameters<typeof createDamAssetPathForAssets>[1],\n ) => createDamAssetPathForAssets(client.fetchClient, params),\n proxyUrlFetch: (url: string) => proxyUrlFetch(url, client.proxyEndpoint),\n };\n}\n","import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport {\n ShareablesCoreProvider,\n ShareablesApiProvider,\n type ShareablesApi,\n} from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ShareablesApp } from \"@fluid-app/shareables-ui\";\nimport { createShareablesApiAdapter } from \"@fluid-app/shareables-api-client\";\nimport {\n createFilePickerClient,\n createFilePickerApi,\n} from \"@fluid-app/file-picker-api-client\";\nimport { useCurrentUser } from \"../hooks/use-current-user\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useSdkClient } from \"../account/use-account-clients\";\nimport { useUserType } from \"../hooks/use-user-type\";\n\ntype ShareablesScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n};\n\n/**\n * Parse the current shareables sub-route from the full slug.\n *\n * System nav slugs are \"share/products\", \"share/media\", \"share/playlists\".\n * Detail pages append an ID: \"share/products/123\", \"share/media/456\".\n *\n * \"share/products\" → screen=\"products\", detailId=null\n * \"share/products/123\" → screen=\"products\", detailId=\"123\"\n * \"share/media/456\" → screen=\"media\", detailId=\"456\"\n * \"share/playlists\" → screen=\"playlists\", detailId=null\n * \"share/playlists/789\" → screen=\"playlists\", detailId=\"789\"\n * \"share/files\" → screen=\"files\", detailId=null\n * \"share\" → screen=null (default to products)\n */\nfunction parseShareablesRoute(currentSlug: string): {\n screen: string | null;\n detailId: string | null;\n action: string | null;\n} {\n // Strip the \"share\" prefix\n const slugWithoutPrefix = currentSlug.replace(/^share\\/?/, \"\");\n if (!slugWithoutPrefix) {\n return { screen: null, detailId: null, action: null };\n }\n\n const parts = slugWithoutPrefix.split(\"/\");\n const screen = parts[0] || null;\n const detailId = parts[1] || null;\n const action = parts[2] || null;\n return { screen, detailId, action };\n}\n\nexport function ShareablesScreen({\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: ShareablesScreenProps): React.JSX.Element {\n const domainClient = useSdkClient();\n const { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\n const { isCustomer } = useUserType();\n\n const { screen, detailId, action } = parseShareablesRoute(currentSlug);\n\n const handleNavigate = useCallback(\n (subScreen: string, id?: string) => {\n const path = id ? `share/${subScreen}/${id}` : `share/${subScreen}`;\n navigate(path);\n },\n [navigate],\n );\n\n const handleBack = useCallback(() => {\n if (detailId && screen) {\n // Navigate back to the listing for the current screen\n navigate(`share/${screen}`);\n } else {\n // Navigate to the default shareables screen\n navigate(\"share/products\");\n }\n }, [navigate, detailId, screen]);\n\n const coreConfig = useMemo(\n () => ({\n client: domainClient,\n user: userData ? { id: userData.id } : null,\n repContext: true,\n }),\n [domainClient, userData],\n );\n\n const shareablesApi = useMemo<ShareablesApi>(\n () => createShareablesApiAdapter(domainClient, { repContext: true }),\n [domainClient],\n );\n\n const filePickerApi = useMemo(\n () =>\n createFilePickerApi(\n createFilePickerClient({ fetchClient: domainClient }),\n ),\n [domainClient],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: userData\n ? {\n id: userData.id,\n company: userData.company\n ? { logo_url: userData.company.logo_url }\n : null,\n }\n : undefined,\n affiliateId:\n (userData as { affiliate_id?: number } | undefined)?.affiliate_id ??\n null,\n basePath: \"\",\n navigate: (path: string) => {\n // Strip leading slash — cards generate paths like \"/share/product/123\"\n const cleanPath = path.replace(/^\\//, \"\");\n // Ensure share/ prefix — screen components pass relative paths like \"media/new\"\n const prefixed = cleanPath.startsWith(\"share/\")\n ? cleanPath\n : `share/${cleanPath}`;\n navigate(prefixed);\n },\n showToast: (opts: {\n title: string;\n type: \"success\" | \"error\" | \"warning\";\n }) => {\n console.warn(`[Shareables] ${opts.type}: ${opts.title}`);\n },\n filePickerApi,\n onToggleFavorite: async (params: {\n favoriteableId: number;\n favoriteableType: string;\n }) => {\n const affiliateId = (userData as { affiliate_id?: number } | undefined)\n ?.affiliate_id;\n if (!affiliateId) throw new Error(\"No affiliate ID\");\n return domainClient.post<{ is_favorited: boolean }>(\n `/user_companies/${affiliateId}/favorites/toggle.json`,\n {\n favoriteable_id: params.favoriteableId,\n favoriteable_type: params.favoriteableType,\n },\n );\n },\n onDeletePlaylist: isCustomer\n ? undefined\n : async (playlistId: number) => {\n const { playlists: playlistsApi } =\n await import(\"@fluid-app/shareables-api-client\");\n await playlistsApi.deletePlaylist(domainClient, playlistId);\n },\n readOnly: isCustomer,\n }),\n [userData, navigate, filePickerApi, domainClient, isCustomer],\n );\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesApiProvider api={shareablesApi}>\n <ShareablesUIProvider config={uiConfig}>\n <ShareablesApp\n screen={screen}\n detailId={detailId}\n action={action}\n companyLogoUrl={userData?.company?.logo_url}\n countryCode={userData?.country?.iso}\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesApiProvider>\n </ShareablesCoreProvider>\n </div>\n );\n}\n\nexport const shareablesScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"ShareablesScreen\",\n displayName: \"Shareables Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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"}
@@ -32,11 +32,15 @@ import "./SpacerWidget-B3zkEePP.mjs";
32
32
  import "./TableWidget-CC4XnRF2.mjs";
33
33
  import "./ToDoWidget-qyFLHU_o.mjs";
34
34
  import "./VideoWidget-CpUPsOI7.mjs";
35
+ import "./use-account-clients-Dsqx0mKw.mjs";
35
36
  import "./ScreenHeaderContext-CrdfLGKk.mjs";
36
- import { n as shareablesScreenPropertySchema, t as ShareablesScreen } from "./ShareablesScreen-B9c5Mw5b.mjs";
37
+ import "./use-fluid-api-CaSYWFuj.mjs";
38
+ import "./use-current-user-BMI-LR9t.mjs";
39
+ import { n as shareablesScreenPropertySchema, t as ShareablesScreen } from "./ShareablesScreen-Cy7w85IH.mjs";
40
+ import "./AppNavigationContext-Du3Qq0yc.mjs";
37
41
  import "./dist-NMbUD0qE.mjs";
38
42
  import "./es-BCKjXBqj.mjs";
39
43
  import "./dist-oYNtEpKP.mjs";
40
- import "./src-D9jWnRlX.mjs";
44
+ import "./src-BrwLqPPh.mjs";
41
45
  import "./sortable.esm-DSrWP4x9.mjs";
42
46
  export { ShareablesScreen, shareablesScreenPropertySchema };
@@ -34,11 +34,11 @@ require("./TableWidget-DiqQBV7-.cjs");
34
34
  require("./ToDoWidget-DZUvDwnJ.cjs");
35
35
  require("./VideoWidget-BmVIIfvM.cjs");
36
36
  require("./ScreenHeaderContext-DpVOhFzT.cjs");
37
- const require_ShareablesScreen = require("./ShareablesScreen-Bldl8tta.cjs");
37
+ const require_ShareablesScreen = require("./ShareablesScreen-CVT7u2hN.cjs");
38
38
  require("./dist-DRVtlgQ1.cjs");
39
39
  require("./es-DlWO6buB.cjs");
40
40
  require("./dist-Ck9MGRmE.cjs");
41
- require("./src-C3R03o4d.cjs");
41
+ require("./src-Dlsw83js.cjs");
42
42
  require("./dist-BSbac3uh.cjs");
43
43
  exports.ShareablesScreen = require_ShareablesScreen.ShareablesScreen;
44
44
  exports.shareablesScreenPropertySchema = require_ShareablesScreen.shareablesScreenPropertySchema;
package/dist/index.cjs CHANGED
@@ -38,10 +38,10 @@ const require_use_account_clients = require("./use-account-clients-CkDfPpCR.cjs"
38
38
  const require_ScreenHeaderContext = require("./ScreenHeaderContext-DpVOhFzT.cjs");
39
39
  const require_use_fluid_api = require("./use-fluid-api-Kw0AKvCs.cjs");
40
40
  const require_use_current_user = require("./use-current-user-LLJ1GtNB.cjs");
41
- const require_ShareablesScreen = require("./ShareablesScreen-Bldl8tta.cjs");
41
+ const require_ShareablesScreen = require("./ShareablesScreen-CVT7u2hN.cjs");
42
42
  const require_CustomersScreen = require("./CustomersScreen-9f10-_AZ.cjs");
43
43
  const require_AppNavigationContext = require("./AppNavigationContext-Agp0UkCQ.cjs");
44
- const require_MessagingScreen = require("./MessagingScreen-B9CCsimy.cjs");
44
+ const require_MessagingScreen = require("./MessagingScreen-Cgx3jwpr.cjs");
45
45
  const require_ProfileScreen = require("./ProfileScreen-DtmReqa8.cjs");
46
46
  require("./dist-DRVtlgQ1.cjs");
47
47
  require("./es-DlWO6buB.cjs");
@@ -51,9 +51,9 @@ require("./src-C_kOrGdZ.cjs");
51
51
  require("./dist-Ck9MGRmE.cjs");
52
52
  const require_OrdersScreen = require("./OrdersScreen-Bf4o3Kty.cjs");
53
53
  const require_SubscriptionsScreen = require("./SubscriptionsScreen-BrLlvFJn.cjs");
54
- require("./src-C3R03o4d.cjs");
54
+ require("./src-Dlsw83js.cjs");
55
55
  require("./dist-BSbac3uh.cjs");
56
- const require_ProductsScreen = require("./ProductsScreen-BTrBbxX6.cjs");
56
+ const require_ProductsScreen = require("./ProductsScreen-PJ95OcSX.cjs");
57
57
  const require_MySiteScreen = require("./MySiteScreen-BSFb-n7n.cjs");
58
58
  const require_ShopScreen = require("./ShopScreen-DgBjP_8D.cjs");
59
59
  require("./UpgradeScreen-DI7DK6qt.cjs");
@@ -3002,12 +3002,12 @@ function AccountManageLayout({ children }) {
3002
3002
  const ProfileScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ProfileScreen-B46jd4Ic.cjs")).then((m) => ({ default: m.ProfileScreen })));
3003
3003
  const OrdersScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./OrdersScreen-DCzYEgsP.cjs")).then((m) => ({ default: m.OrdersScreen })));
3004
3004
  const SubscriptionsScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./SubscriptionsScreen-BqOb2kYR.cjs")).then((m) => ({ default: m.SubscriptionsScreen })));
3005
- const MessagingScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./MessagingScreen-5jw8KSLQ.cjs")).then((m) => ({ default: m.MessagingScreen })));
3005
+ const MessagingScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./MessagingScreen-CGS7aG1A.cjs")).then((m) => ({ default: m.MessagingScreen })));
3006
3006
  const ContactsScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ContactsScreen-D4WQ59ib.cjs")).then((m) => ({ default: m.ContactsScreen })));
3007
3007
  const ShopScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ShopScreen-wYtLEGXo.cjs")).then((m) => ({ default: m.ShopScreen })));
3008
3008
  const CustomersScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./CustomersScreen-9f10-_AZ.cjs")).then((n) => n.CustomersScreen_exports).then((m) => ({ default: m.CustomersScreen })));
3009
- const ProductsScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ProductsScreen-CL16lwsI.cjs")).then((m) => ({ default: m.ProductsScreen })));
3010
- const ShareablesScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ShareablesScreen-DufZz22d.cjs")).then((m) => ({ default: m.ShareablesScreen })));
3009
+ const ProductsScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ProductsScreen-DZnKtPBp.cjs")).then((m) => ({ default: m.ProductsScreen })));
3010
+ const ShareablesScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ShareablesScreen-Dk5EQGMa.cjs")).then((m) => ({ default: m.ShareablesScreen })));
3011
3011
  const MySiteScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./MySiteScreen-2IzxVfpO.cjs")).then((m) => ({ default: m.MySiteScreen })));
3012
3012
  const UpgradeScreen = (0, react.lazy)(() => Promise.resolve().then(() => require("./UpgradeScreen-DfDZG52l.cjs")).then((m) => ({ default: m.UpgradeScreen })));
3013
3013
  const AppDownloadScreen = (0, react.lazy)(() => Promise.resolve().then(() => require("./AppDownloadScreen-CwLZzr-7.cjs")).then((m) => ({ default: m.AppDownloadScreen })));
@@ -4469,14 +4469,14 @@ function useContact(_contactId) {
4469
4469
  //#region src/screens/index.ts
4470
4470
  const screenPropertySchemas = {
4471
4471
  ProfileScreen: () => Promise.resolve().then(() => require("./ProfileScreen-B46jd4Ic.cjs")).then((m) => m.profileScreenPropertySchema),
4472
- MessagingScreen: () => Promise.resolve().then(() => require("./MessagingScreen-5jw8KSLQ.cjs")).then((m) => m.messagingScreenPropertySchema),
4472
+ MessagingScreen: () => Promise.resolve().then(() => require("./MessagingScreen-CGS7aG1A.cjs")).then((m) => m.messagingScreenPropertySchema),
4473
4473
  ContactsScreen: () => Promise.resolve().then(() => require("./ContactsScreen-D4WQ59ib.cjs")).then((m) => m.contactsScreenPropertySchema),
4474
4474
  OrdersScreen: () => Promise.resolve().then(() => require("./OrdersScreen-DCzYEgsP.cjs")).then((m) => m.ordersScreenPropertySchema),
4475
4475
  SubscriptionsScreen: () => Promise.resolve().then(() => require("./SubscriptionsScreen-BqOb2kYR.cjs")).then((m) => m.subscriptionsScreenPropertySchema),
4476
4476
  CustomersScreen: () => Promise.resolve().then(() => require("./CustomersScreen-9f10-_AZ.cjs")).then((n) => n.CustomersScreen_exports).then((m) => m.customersScreenPropertySchema),
4477
- ProductsScreen: () => Promise.resolve().then(() => require("./ProductsScreen-CL16lwsI.cjs")).then((m) => m.productsScreenPropertySchema),
4477
+ ProductsScreen: () => Promise.resolve().then(() => require("./ProductsScreen-DZnKtPBp.cjs")).then((m) => m.productsScreenPropertySchema),
4478
4478
  MySiteScreen: () => Promise.resolve().then(() => require("./MySiteScreen-2IzxVfpO.cjs")).then((m) => m.mySiteScreenPropertySchema),
4479
- ShareablesScreen: () => Promise.resolve().then(() => require("./ShareablesScreen-DufZz22d.cjs")).then((m) => m.shareablesScreenPropertySchema),
4479
+ ShareablesScreen: () => Promise.resolve().then(() => require("./ShareablesScreen-Dk5EQGMa.cjs")).then((m) => m.shareablesScreenPropertySchema),
4480
4480
  ShopScreen: () => Promise.resolve().then(() => require("./ShopScreen-wYtLEGXo.cjs")).then((m) => m.shopScreenPropertySchema),
4481
4481
  UpgradeScreen: () => Promise.resolve().then(() => require("./UpgradeScreen-DfDZG52l.cjs")).then((m) => m.upgradeScreenPropertySchema),
4482
4482
  AppDownloadScreen: () => Promise.resolve().then(() => require("./AppDownloadScreen-CwLZzr-7.cjs")).then((m) => m.appDownloadScreenPropertySchema)