@fluid-app/rep-core 0.1.14 → 0.1.15

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 (311) hide show
  1. package/dist/chunk-CKQMccvm.cjs +28 -0
  2. package/dist/data-sources/DataAwareWidget.cjs +47 -56
  3. package/dist/data-sources/DataAwareWidget.cjs.map +1 -1
  4. package/dist/data-sources/DataAwareWidget.d.cts +27 -19
  5. package/dist/data-sources/DataAwareWidget.d.cts.map +1 -0
  6. package/dist/data-sources/DataAwareWidget.d.mts +38 -0
  7. package/dist/data-sources/DataAwareWidget.d.mts.map +1 -0
  8. package/dist/data-sources/DataAwareWidget.mjs +48 -0
  9. package/dist/data-sources/DataAwareWidget.mjs.map +1 -0
  10. package/dist/data-sources/ErrorState.cjs +18 -10
  11. package/dist/data-sources/ErrorState.cjs.map +1 -1
  12. package/dist/data-sources/ErrorState.d.cts +5 -3
  13. package/dist/data-sources/ErrorState.d.cts.map +1 -0
  14. package/dist/data-sources/ErrorState.d.mts +7 -0
  15. package/dist/data-sources/ErrorState.d.mts.map +1 -0
  16. package/dist/data-sources/ErrorState.mjs +18 -0
  17. package/dist/data-sources/ErrorState.mjs.map +1 -0
  18. package/dist/data-sources/context.cjs +22 -14
  19. package/dist/data-sources/context.cjs.map +1 -1
  20. package/dist/data-sources/context.d.cts +16 -10
  21. package/dist/data-sources/context.d.cts.map +1 -0
  22. package/dist/data-sources/context.d.mts +22 -0
  23. package/dist/data-sources/context.d.mts.map +1 -0
  24. package/dist/data-sources/context.mjs +21 -0
  25. package/dist/data-sources/context.mjs.map +1 -0
  26. package/dist/data-sources/fetchers/api.cjs +63 -10
  27. package/dist/data-sources/fetchers/api.cjs.map +1 -1
  28. package/dist/data-sources/fetchers/api.d.cts +4 -2
  29. package/dist/data-sources/fetchers/api.d.cts.map +1 -0
  30. package/dist/data-sources/fetchers/api.d.mts +10 -0
  31. package/dist/data-sources/fetchers/api.d.mts.map +1 -0
  32. package/dist/data-sources/fetchers/api.mjs +64 -0
  33. package/dist/data-sources/fetchers/api.mjs.map +1 -0
  34. package/dist/data-sources/fetchers/custom.cjs +106 -10
  35. package/dist/data-sources/fetchers/custom.cjs.map +1 -1
  36. package/dist/data-sources/fetchers/custom.d.cts +4 -2
  37. package/dist/data-sources/fetchers/custom.d.cts.map +1 -0
  38. package/dist/data-sources/fetchers/{custom.d.ts → custom.d.mts} +4 -2
  39. package/dist/data-sources/fetchers/custom.d.mts.map +1 -0
  40. package/dist/data-sources/fetchers/custom.mjs +107 -0
  41. package/dist/data-sources/fetchers/custom.mjs.map +1 -0
  42. package/dist/data-sources/fetchers/static.cjs +159 -14
  43. package/dist/data-sources/fetchers/static.cjs.map +1 -1
  44. package/dist/data-sources/fetchers/static.d.cts +12 -10
  45. package/dist/data-sources/fetchers/static.d.cts.map +1 -0
  46. package/dist/data-sources/fetchers/{static.d.ts → static.d.mts} +12 -10
  47. package/dist/data-sources/fetchers/static.d.mts.map +1 -0
  48. package/dist/data-sources/fetchers/static.mjs +158 -0
  49. package/dist/data-sources/fetchers/static.mjs.map +1 -0
  50. package/dist/data-sources/preview-context.cjs +15 -15
  51. package/dist/data-sources/preview-context.cjs.map +1 -1
  52. package/dist/data-sources/preview-context.d.cts +10 -6
  53. package/dist/data-sources/preview-context.d.cts.map +1 -0
  54. package/dist/data-sources/preview-context.d.mts +15 -0
  55. package/dist/data-sources/preview-context.d.mts.map +1 -0
  56. package/dist/data-sources/preview-context.mjs +18 -0
  57. package/dist/data-sources/preview-context.mjs.map +1 -0
  58. package/dist/data-sources/registry-context.cjs +51 -24
  59. package/dist/data-sources/registry-context.cjs.map +1 -1
  60. package/dist/data-sources/registry-context.d.cts +30 -22
  61. package/dist/data-sources/registry-context.d.cts.map +1 -0
  62. package/dist/data-sources/registry-context.d.mts +49 -0
  63. package/dist/data-sources/registry-context.d.mts.map +1 -0
  64. package/dist/data-sources/registry-context.mjs +49 -0
  65. package/dist/data-sources/registry-context.mjs.map +1 -0
  66. package/dist/data-sources/registry.cjs +29 -18
  67. package/dist/data-sources/registry.cjs.map +1 -1
  68. package/dist/data-sources/registry.d.cts +9 -7
  69. package/dist/data-sources/registry.d.cts.map +1 -0
  70. package/dist/data-sources/registry.d.mts +19 -0
  71. package/dist/data-sources/registry.d.mts.map +1 -0
  72. package/dist/data-sources/registry.mjs +29 -0
  73. package/dist/data-sources/registry.mjs.map +1 -0
  74. package/dist/data-sources/transformers.cjs +152 -10
  75. package/dist/data-sources/transformers.cjs.map +1 -1
  76. package/dist/data-sources/transformers.d.cts +4 -17
  77. package/dist/data-sources/transformers.d.cts.map +1 -0
  78. package/dist/data-sources/transformers.d.mts +10 -0
  79. package/dist/data-sources/transformers.d.mts.map +1 -0
  80. package/dist/data-sources/transformers.mjs +153 -0
  81. package/dist/data-sources/transformers.mjs.map +1 -0
  82. package/dist/data-sources/types.cjs +0 -4
  83. package/dist/data-sources/types.d.cts +2 -157
  84. package/dist/data-sources/types.d.mts +2 -0
  85. package/dist/data-sources/types.mjs +1 -0
  86. package/dist/data-sources/use-widget-data.cjs +109 -17
  87. package/dist/data-sources/use-widget-data.cjs.map +1 -1
  88. package/dist/data-sources/use-widget-data.d.cts +9 -8
  89. package/dist/data-sources/use-widget-data.d.cts.map +1 -0
  90. package/dist/data-sources/use-widget-data.d.mts +17 -0
  91. package/dist/data-sources/use-widget-data.d.mts.map +1 -0
  92. package/dist/data-sources/use-widget-data.mjs +109 -0
  93. package/dist/data-sources/use-widget-data.mjs.map +1 -0
  94. package/dist/index-Bxe_LIi8.d.cts +287 -0
  95. package/dist/index-Bxe_LIi8.d.cts.map +1 -0
  96. package/dist/index-CCAu2n19.d.mts +287 -0
  97. package/dist/index-CCAu2n19.d.mts.map +1 -0
  98. package/dist/registries/index.cjs +212 -127
  99. package/dist/registries/index.cjs.map +1 -1
  100. package/dist/registries/index.d.cts +146 -149
  101. package/dist/registries/index.d.cts.map +1 -0
  102. package/dist/registries/{index.d.ts → index.d.mts} +146 -149
  103. package/dist/registries/index.d.mts.map +1 -0
  104. package/dist/registries/index.mjs +229 -0
  105. package/dist/registries/index.mjs.map +1 -0
  106. package/dist/shell/AppShellLayout.cjs +47 -12
  107. package/dist/shell/AppShellLayout.cjs.map +1 -1
  108. package/dist/shell/AppShellLayout.d.cts +29 -19
  109. package/dist/shell/AppShellLayout.d.cts.map +1 -0
  110. package/dist/shell/AppShellLayout.d.mts +40 -0
  111. package/dist/shell/AppShellLayout.d.mts.map +1 -0
  112. package/dist/shell/AppShellLayout.mjs +46 -0
  113. package/dist/{chunk-45BCVWQK.cjs.map → shell/AppShellLayout.mjs.map} +1 -1
  114. package/dist/shell/ScreenHeader.cjs +44 -0
  115. package/dist/shell/ScreenHeader.cjs.map +1 -0
  116. package/dist/shell/ScreenHeader.d.cts +12 -0
  117. package/dist/shell/ScreenHeader.d.cts.map +1 -0
  118. package/dist/shell/ScreenHeader.d.mts +12 -0
  119. package/dist/shell/ScreenHeader.d.mts.map +1 -0
  120. package/dist/shell/ScreenHeader.mjs +42 -0
  121. package/dist/shell/ScreenHeader.mjs.map +1 -0
  122. package/dist/shell/ScreenHeaderContext.cjs +91 -0
  123. package/dist/shell/ScreenHeaderContext.cjs.map +1 -0
  124. package/dist/shell/ScreenHeaderContext.d.cts +36 -0
  125. package/dist/shell/ScreenHeaderContext.d.cts.map +1 -0
  126. package/dist/shell/ScreenHeaderContext.d.mts +36 -0
  127. package/dist/shell/ScreenHeaderContext.d.mts.map +1 -0
  128. package/dist/shell/ScreenHeaderContext.mjs +86 -0
  129. package/dist/shell/ScreenHeaderContext.mjs.map +1 -0
  130. package/dist/shell/ThemeModeContext.cjs +68 -18
  131. package/dist/shell/ThemeModeContext.cjs.map +1 -1
  132. package/dist/shell/ThemeModeContext.d.cts +23 -16
  133. package/dist/shell/ThemeModeContext.d.cts.map +1 -0
  134. package/dist/shell/ThemeModeContext.d.mts +34 -0
  135. package/dist/shell/ThemeModeContext.d.mts.map +1 -0
  136. package/dist/shell/ThemeModeContext.mjs +66 -0
  137. package/dist/shell/ThemeModeContext.mjs.map +1 -0
  138. package/dist/shell/index.cjs +43 -205
  139. package/dist/shell/index.d.cts +7 -43
  140. package/dist/shell/index.d.mts +7 -0
  141. package/dist/shell/index.mjs +7 -0
  142. package/dist/shell/sidebar.cjs +372 -87
  143. package/dist/shell/sidebar.cjs.map +1 -1
  144. package/dist/shell/sidebar.d.cts +38 -36
  145. package/dist/shell/sidebar.d.cts.map +1 -0
  146. package/dist/shell/{sidebar.d.ts → sidebar.d.mts} +38 -36
  147. package/dist/shell/sidebar.d.mts.map +1 -0
  148. package/dist/shell/sidebar.mjs +364 -0
  149. package/dist/{chunk-PFDBULOI.cjs.map → shell/sidebar.mjs.map} +1 -1
  150. package/dist/shell/use-mobile.cjs +49 -18
  151. package/dist/shell/use-mobile.cjs.map +1 -1
  152. package/dist/shell/use-mobile.d.cts +3 -1
  153. package/dist/shell/use-mobile.d.cts.map +1 -0
  154. package/dist/shell/{use-mobile.d.ts → use-mobile.d.mts} +3 -1
  155. package/dist/shell/use-mobile.d.mts.map +1 -0
  156. package/dist/shell/use-mobile.mjs +47 -0
  157. package/dist/shell/use-mobile.mjs.map +1 -0
  158. package/dist/theme/index.cjs +662 -549
  159. package/dist/theme/index.cjs.map +1 -1
  160. package/dist/theme/index.d.cts +32 -32
  161. package/dist/theme/index.d.cts.map +1 -0
  162. package/dist/theme/{index.d.ts → index.d.mts} +32 -32
  163. package/dist/theme/index.d.mts.map +1 -0
  164. package/dist/theme/index.mjs +727 -0
  165. package/dist/theme/index.mjs.map +1 -0
  166. package/dist/types/index.cjs +18 -72
  167. package/dist/types/index.d.cts +4 -268
  168. package/dist/types/index.d.mts +4 -0
  169. package/dist/types/index.mjs +2 -0
  170. package/dist/types-BIXtQlHB.d.cts +155 -0
  171. package/dist/types-BIXtQlHB.d.cts.map +1 -0
  172. package/dist/types-BXFX9bXp.cjs +303 -0
  173. package/dist/types-BXFX9bXp.cjs.map +1 -0
  174. package/dist/types-Bjmd7Fdx.mjs +208 -0
  175. package/dist/types-Bjmd7Fdx.mjs.map +1 -0
  176. package/dist/types-ByG6Xy3C.d.mts +85 -0
  177. package/dist/types-ByG6Xy3C.d.mts.map +1 -0
  178. package/dist/types-C5OFJy-O.d.mts +155 -0
  179. package/dist/types-C5OFJy-O.d.mts.map +1 -0
  180. package/dist/types-Ctu-Zio6.d.cts +85 -0
  181. package/dist/types-Ctu-Zio6.d.cts.map +1 -0
  182. package/dist/{widget-schema-D-ca3--K.d.ts → widget-schema--PY1uMWx.d.cts} +38 -41
  183. package/dist/widget-schema--PY1uMWx.d.cts.map +1 -0
  184. package/dist/{widget-schema-DvJdg1-B.d.cts → widget-schema-YkD5p3v4.d.mts} +38 -41
  185. package/dist/widget-schema-YkD5p3v4.d.mts.map +1 -0
  186. package/dist/widget-utils/index.cjs +96 -89
  187. package/dist/widget-utils/index.cjs.map +1 -1
  188. package/dist/widget-utils/index.d.cts +8 -6
  189. package/dist/widget-utils/index.d.cts.map +1 -0
  190. package/dist/widget-utils/{index.d.ts → index.d.mts} +8 -6
  191. package/dist/widget-utils/index.d.mts.map +1 -0
  192. package/dist/widget-utils/index.mjs +119 -0
  193. package/dist/widget-utils/index.mjs.map +1 -0
  194. package/package.json +4 -4
  195. package/dist/chunk-2SPTFZRC.js +0 -72
  196. package/dist/chunk-2SPTFZRC.js.map +0 -1
  197. package/dist/chunk-3I5Y3PEO.js +0 -23
  198. package/dist/chunk-3I5Y3PEO.js.map +0 -1
  199. package/dist/chunk-3ZRE7GX6.js +0 -620
  200. package/dist/chunk-3ZRE7GX6.js.map +0 -1
  201. package/dist/chunk-45BCVWQK.cjs +0 -38
  202. package/dist/chunk-46PUWB7C.cjs +0 -69
  203. package/dist/chunk-46PUWB7C.cjs.map +0 -1
  204. package/dist/chunk-5NYM4UTW.cjs +0 -58
  205. package/dist/chunk-5NYM4UTW.cjs.map +0 -1
  206. package/dist/chunk-B2NTWEDF.cjs +0 -130
  207. package/dist/chunk-B2NTWEDF.cjs.map +0 -1
  208. package/dist/chunk-GDY76JA6.cjs +0 -153
  209. package/dist/chunk-GDY76JA6.cjs.map +0 -1
  210. package/dist/chunk-HGVSPZEL.cjs +0 -119
  211. package/dist/chunk-HGVSPZEL.cjs.map +0 -1
  212. package/dist/chunk-HIDJYVKJ.js +0 -54
  213. package/dist/chunk-HIDJYVKJ.js.map +0 -1
  214. package/dist/chunk-KTXGU7OP.cjs +0 -136
  215. package/dist/chunk-KTXGU7OP.cjs.map +0 -1
  216. package/dist/chunk-KW5E2H5T.js +0 -128
  217. package/dist/chunk-KW5E2H5T.js.map +0 -1
  218. package/dist/chunk-LBLHDGMT.js +0 -25
  219. package/dist/chunk-LBLHDGMT.js.map +0 -1
  220. package/dist/chunk-MNVDL4FX.js +0 -134
  221. package/dist/chunk-MNVDL4FX.js.map +0 -1
  222. package/dist/chunk-MOTOSPAO.cjs +0 -15
  223. package/dist/chunk-MOTOSPAO.cjs.map +0 -1
  224. package/dist/chunk-N2K6W7FX.cjs +0 -169
  225. package/dist/chunk-N2K6W7FX.cjs.map +0 -1
  226. package/dist/chunk-PFDBULOI.cjs +0 -665
  227. package/dist/chunk-PVTQWD4I.js +0 -166
  228. package/dist/chunk-PVTQWD4I.js.map +0 -1
  229. package/dist/chunk-SJQPHJL4.cjs +0 -26
  230. package/dist/chunk-SJQPHJL4.cjs.map +0 -1
  231. package/dist/chunk-TML66UEU.js +0 -13
  232. package/dist/chunk-TML66UEU.js.map +0 -1
  233. package/dist/chunk-U3CQLX2Z.cjs +0 -28
  234. package/dist/chunk-U3CQLX2Z.cjs.map +0 -1
  235. package/dist/chunk-UUNEVOA5.js +0 -36
  236. package/dist/chunk-UUNEVOA5.js.map +0 -1
  237. package/dist/chunk-VRF7QEID.js +0 -67
  238. package/dist/chunk-VRF7QEID.js.map +0 -1
  239. package/dist/chunk-VSZWXSQA.js +0 -38
  240. package/dist/chunk-VSZWXSQA.js.map +0 -1
  241. package/dist/chunk-WYOHFNNW.js +0 -117
  242. package/dist/chunk-WYOHFNNW.js.map +0 -1
  243. package/dist/chunk-YKF5ZFF5.js +0 -136
  244. package/dist/chunk-YKF5ZFF5.js.map +0 -1
  245. package/dist/chunk-YXJMBVXO.cjs +0 -76
  246. package/dist/chunk-YXJMBVXO.cjs.map +0 -1
  247. package/dist/chunk-ZA4AE7KF.cjs +0 -42
  248. package/dist/chunk-ZA4AE7KF.cjs.map +0 -1
  249. package/dist/data-sources/DataAwareWidget.d.ts +0 -30
  250. package/dist/data-sources/DataAwareWidget.js +0 -57
  251. package/dist/data-sources/DataAwareWidget.js.map +0 -1
  252. package/dist/data-sources/ErrorState.d.ts +0 -5
  253. package/dist/data-sources/ErrorState.js +0 -3
  254. package/dist/data-sources/ErrorState.js.map +0 -1
  255. package/dist/data-sources/context.d.ts +0 -16
  256. package/dist/data-sources/context.js +0 -3
  257. package/dist/data-sources/context.js.map +0 -1
  258. package/dist/data-sources/fetchers/api.d.ts +0 -8
  259. package/dist/data-sources/fetchers/api.js +0 -3
  260. package/dist/data-sources/fetchers/api.js.map +0 -1
  261. package/dist/data-sources/fetchers/custom.js +0 -3
  262. package/dist/data-sources/fetchers/custom.js.map +0 -1
  263. package/dist/data-sources/fetchers/static.js +0 -3
  264. package/dist/data-sources/fetchers/static.js.map +0 -1
  265. package/dist/data-sources/preview-context.d.ts +0 -11
  266. package/dist/data-sources/preview-context.js +0 -18
  267. package/dist/data-sources/preview-context.js.map +0 -1
  268. package/dist/data-sources/registry-context.d.ts +0 -41
  269. package/dist/data-sources/registry-context.js +0 -9
  270. package/dist/data-sources/registry-context.js.map +0 -1
  271. package/dist/data-sources/registry.d.ts +0 -17
  272. package/dist/data-sources/registry.js +0 -7
  273. package/dist/data-sources/registry.js.map +0 -1
  274. package/dist/data-sources/transformers.d.ts +0 -23
  275. package/dist/data-sources/transformers.js +0 -3
  276. package/dist/data-sources/transformers.js.map +0 -1
  277. package/dist/data-sources/types.cjs.map +0 -1
  278. package/dist/data-sources/types.d.ts +0 -157
  279. package/dist/data-sources/types.js +0 -3
  280. package/dist/data-sources/types.js.map +0 -1
  281. package/dist/data-sources/use-widget-data.d.ts +0 -16
  282. package/dist/data-sources/use-widget-data.js +0 -10
  283. package/dist/data-sources/use-widget-data.js.map +0 -1
  284. package/dist/registries/index.js +0 -144
  285. package/dist/registries/index.js.map +0 -1
  286. package/dist/shareable-item-DkgWpwoU.d.cts +0 -21
  287. package/dist/shareable-item-DkgWpwoU.d.ts +0 -21
  288. package/dist/shell/AppShellLayout.d.ts +0 -30
  289. package/dist/shell/AppShellLayout.js +0 -5
  290. package/dist/shell/AppShellLayout.js.map +0 -1
  291. package/dist/shell/ThemeModeContext.d.ts +0 -27
  292. package/dist/shell/ThemeModeContext.js +0 -3
  293. package/dist/shell/ThemeModeContext.js.map +0 -1
  294. package/dist/shell/index.cjs.map +0 -1
  295. package/dist/shell/index.d.ts +0 -43
  296. package/dist/shell/index.js +0 -76
  297. package/dist/shell/index.js.map +0 -1
  298. package/dist/shell/sidebar.js +0 -4
  299. package/dist/shell/sidebar.js.map +0 -1
  300. package/dist/shell/use-mobile.js +0 -3
  301. package/dist/shell/use-mobile.js.map +0 -1
  302. package/dist/theme/index.js +0 -611
  303. package/dist/theme/index.js.map +0 -1
  304. package/dist/types/index.cjs.map +0 -1
  305. package/dist/types/index.d.ts +0 -268
  306. package/dist/types/index.js +0 -3
  307. package/dist/types/index.js.map +0 -1
  308. package/dist/types-CNIhy4JD.d.cts +0 -83
  309. package/dist/types-CNIhy4JD.d.ts +0 -83
  310. package/dist/widget-utils/index.js +0 -111
  311. package/dist/widget-utils/index.js.map +0 -1
@@ -1,166 +0,0 @@
1
- import { useState, useRef, useEffect } from 'react';
2
-
3
- // src/data-sources/fetchers/static.ts
4
- var STATIC_ENDPOINTS = {
5
- collections: "/company/v1/products",
6
- categories: "/company/v1/products"
7
- };
8
- var STATIC_QUERY_PARAMS = {
9
- collections: "collection_id",
10
- categories: "category_id"
11
- };
12
- function extractProducts(json) {
13
- if (Array.isArray(json.products)) {
14
- return json.products;
15
- }
16
- if (Array.isArray(json.data)) {
17
- return json.data;
18
- }
19
- if (Array.isArray(json)) {
20
- return json;
21
- }
22
- console.warn(
23
- "[extractProducts] Could not find products array. Available keys:",
24
- Object.keys(json)
25
- );
26
- return [];
27
- }
28
- async function staticFetcher(source, context) {
29
- const { staticType, selectedId } = source;
30
- if (staticType === "tags") {
31
- throw new Error(
32
- "Tags data source is not yet supported. Please select Collections or Categories instead."
33
- );
34
- }
35
- const endpoint = STATIC_ENDPOINTS[staticType];
36
- const queryParam = STATIC_QUERY_PARAMS[staticType];
37
- if (!endpoint || !queryParam) {
38
- throw new Error(
39
- `Invalid data source configuration: "${staticType}" is not a supported static source type.`
40
- );
41
- }
42
- const url = new URL(
43
- `${context.baseUrl ?? ""}${endpoint}`,
44
- context.baseUrl ? void 0 : window.location.origin
45
- );
46
- url.searchParams.set(queryParam, String(selectedId));
47
- try {
48
- const response = await fetch(url.toString(), {
49
- method: "GET",
50
- headers: {
51
- ...context.getApiHeaders?.(),
52
- "Content-Type": "application/json"
53
- },
54
- signal: context.signal
55
- });
56
- if (!response.ok) {
57
- throw new Error(
58
- `Failed to fetch products for ${staticType} ${selectedId}: ${response.status} ${response.statusText}`
59
- );
60
- }
61
- const json = await response.json();
62
- return extractProducts(json);
63
- } catch (error) {
64
- if (error instanceof Error && error.name === "AbortError") {
65
- return [];
66
- }
67
- console.error(
68
- `[staticFetcher] Error fetching ${staticType} ${selectedId}:`,
69
- error
70
- );
71
- throw error;
72
- }
73
- }
74
- var LIST_ENDPOINTS = {
75
- collections: {
76
- endpoint: "/company/v1/collections",
77
- resultKey: "collections"
78
- },
79
- categories: { endpoint: "/company/v1/categories", resultKey: "categories" },
80
- tags: { endpoint: "/company/v1/tags", resultKey: "tags" }
81
- };
82
- function useStaticSourceItems(staticType, context, params) {
83
- const [items, setItems] = useState([]);
84
- const [isLoading, setIsLoading] = useState(false);
85
- const [error, setError] = useState(null);
86
- const { baseUrl, getApiHeaders } = context;
87
- const search = params?.search;
88
- const getApiHeadersRef = useRef(getApiHeaders);
89
- getApiHeadersRef.current = getApiHeaders;
90
- useEffect(() => {
91
- if (!staticType) {
92
- setItems([]);
93
- setError(null);
94
- return;
95
- }
96
- let isCancelled = false;
97
- const abortController = new AbortController();
98
- setIsLoading(true);
99
- setError(null);
100
- const config = LIST_ENDPOINTS[staticType];
101
- const url = new URL(
102
- `${baseUrl ?? ""}${config.endpoint}`,
103
- baseUrl ? void 0 : window.location.origin
104
- );
105
- if (search) {
106
- url.searchParams.set("search", search);
107
- }
108
- fetch(url.toString(), {
109
- method: "GET",
110
- headers: {
111
- ...getApiHeadersRef.current?.(),
112
- "Content-Type": "application/json"
113
- },
114
- signal: abortController.signal
115
- }).then(async (response) => {
116
- if (!response.ok) {
117
- throw new Error(`Failed to fetch ${staticType}: ${response.status}`);
118
- }
119
- const json = await response.json();
120
- const responseItems = json[config.resultKey];
121
- if (!Array.isArray(responseItems)) {
122
- console.warn(
123
- `[useStaticSourceItems] Expected array at "${config.resultKey}" but got:`,
124
- typeof responseItems
125
- );
126
- if (!isCancelled) {
127
- setItems([]);
128
- }
129
- return;
130
- }
131
- if (!isCancelled) {
132
- setItems(
133
- responseItems.map((item) => ({
134
- id: item.id,
135
- title: item.title,
136
- imageUrl: item.image_url
137
- }))
138
- );
139
- }
140
- }).catch((err) => {
141
- if (err instanceof Error && err.name === "AbortError") {
142
- return;
143
- }
144
- console.error(
145
- `[useStaticSourceItems] Failed to fetch ${staticType}:`,
146
- err
147
- );
148
- if (isCancelled) return;
149
- setError("An unexpected error occurred. Please try again.");
150
- setItems([]);
151
- }).finally(() => {
152
- if (!isCancelled) {
153
- setIsLoading(false);
154
- }
155
- });
156
- return () => {
157
- isCancelled = true;
158
- abortController.abort();
159
- };
160
- }, [staticType, search, baseUrl]);
161
- return { items, isLoading, error };
162
- }
163
-
164
- export { staticFetcher, useStaticSourceItems };
165
- //# sourceMappingURL=chunk-PVTQWD4I.js.map
166
- //# sourceMappingURL=chunk-PVTQWD4I.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data-sources/fetchers/static.ts"],"names":[],"mappings":"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","file":"chunk-PVTQWD4I.js","sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport type {\n StaticDataSource,\n DataSourceContext,\n StaticSourceType,\n StaticItem,\n} from \"../types\";\n\n/**\n * Endpoint patterns for fetching products by static source type.\n * Tags require backend API support (not yet available).\n */\nconst STATIC_ENDPOINTS: Record<\"collections\" | \"categories\", string> = {\n collections: \"/company/v1/products\",\n categories: \"/company/v1/products\",\n};\n\n/**\n * Query parameter names for each static source type.\n */\nconst STATIC_QUERY_PARAMS: Record<\"collections\" | \"categories\", string> = {\n collections: \"collection_id\",\n categories: \"category_id\",\n};\n\n/**\n * Extract products array from API response.\n * The /company/v1/products endpoint returns { products: [...], meta: {...} }\n */\nfunction extractProducts(json: Record<string, unknown>): unknown[] {\n if (Array.isArray(json.products)) {\n return json.products;\n }\n if (Array.isArray(json.data)) {\n return json.data;\n }\n if (Array.isArray(json)) {\n return json;\n }\n console.warn(\n \"[extractProducts] Could not find products array. Available keys:\",\n Object.keys(json),\n );\n return [];\n}\n\n/**\n * Static data source fetcher.\n *\n * Fetches products filtered by collection or category ID.\n * Tags are not yet supported (requires backend API changes).\n *\n * @param source - The static data source configuration\n * @param context - The data source context with baseUrl and headers\n * @returns Array of products matching the filter criteria\n */\nexport async function staticFetcher(\n source: StaticDataSource,\n context: DataSourceContext,\n): Promise<unknown[]> {\n const { staticType, selectedId } = source;\n\n // Tags require backend API support - not yet implemented\n if (staticType === \"tags\") {\n throw new Error(\n \"Tags data source is not yet supported. Please select Collections or Categories instead.\",\n );\n }\n\n const endpoint = STATIC_ENDPOINTS[staticType];\n const queryParam = STATIC_QUERY_PARAMS[staticType];\n\n if (!endpoint || !queryParam) {\n throw new Error(\n `Invalid data source configuration: \"${staticType}\" is not a supported static source type.`,\n );\n }\n\n const url = new URL(\n `${context.baseUrl ?? \"\"}${endpoint}`,\n context.baseUrl ? undefined : window.location.origin,\n );\n url.searchParams.set(queryParam, String(selectedId));\n\n try {\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n ...context.getApiHeaders?.(),\n \"Content-Type\": \"application/json\",\n },\n signal: context.signal,\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch products for ${staticType} ${selectedId}: ${response.status} ${response.statusText}`,\n );\n }\n\n const json = await response.json();\n return extractProducts(json);\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n // Request was cancelled, don't log as error\n return [];\n }\n console.error(\n `[staticFetcher] Error fetching ${staticType} ${selectedId}:`,\n error,\n );\n throw error;\n }\n}\n\n/**\n * Endpoints for listing static source items (collections, categories, tags).\n */\nconst LIST_ENDPOINTS: Record<\n StaticSourceType,\n { endpoint: string; resultKey: string }\n> = {\n collections: {\n endpoint: \"/company/v1/collections\",\n resultKey: \"collections\",\n },\n categories: { endpoint: \"/company/v1/categories\", resultKey: \"categories\" },\n tags: { endpoint: \"/company/v1/tags\", resultKey: \"tags\" },\n};\n\n/**\n * Result type for useStaticSourceItems hook.\n */\nexport interface UseStaticSourceItemsResult {\n /** The fetched items */\n items: StaticItem[];\n /** True while items are being fetched */\n isLoading: boolean;\n /** Error message if fetch failed */\n error: string | null;\n}\n\n/**\n * React hook for fetching static source items (collections, categories).\n * Handles loading state, error state, abort on cleanup, and search filtering.\n *\n * @param staticType - The type of static source to fetch, or null to reset\n * @param context - Context with baseUrl and getApiHeaders\n * @param params - Optional search parameters\n * @returns Object with items, isLoading, and error state\n */\nexport function useStaticSourceItems(\n staticType: StaticSourceType | null,\n context: Pick<DataSourceContext, \"baseUrl\" | \"getApiHeaders\">,\n params?: { search?: string },\n): UseStaticSourceItemsResult {\n const [items, setItems] = useState<StaticItem[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Extract stable references from context to avoid dependency issues\n const { baseUrl, getApiHeaders } = context;\n const search = params?.search;\n\n // Use ref to avoid infinite re-renders when getApiHeaders changes reference\n const getApiHeadersRef = useRef(getApiHeaders);\n getApiHeadersRef.current = getApiHeaders;\n\n useEffect(() => {\n if (!staticType) {\n setItems([]);\n setError(null);\n return;\n }\n\n let isCancelled = false;\n const abortController = new AbortController();\n setIsLoading(true);\n setError(null);\n\n const config = LIST_ENDPOINTS[staticType];\n const url = new URL(\n `${baseUrl ?? \"\"}${config.endpoint}`,\n baseUrl ? undefined : window.location.origin,\n );\n\n if (search) {\n url.searchParams.set(\"search\", search);\n }\n\n fetch(url.toString(), {\n method: \"GET\",\n headers: {\n ...getApiHeadersRef.current?.(),\n \"Content-Type\": \"application/json\",\n },\n signal: abortController.signal,\n })\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`Failed to fetch ${staticType}: ${response.status}`);\n }\n const json = await response.json();\n const responseItems = json[config.resultKey] as Array<{\n id: string | number;\n title: string;\n image_url?: string;\n }>;\n\n if (!Array.isArray(responseItems)) {\n console.warn(\n `[useStaticSourceItems] Expected array at \"${config.resultKey}\" but got:`,\n typeof responseItems,\n );\n if (!isCancelled) {\n setItems([]);\n }\n return;\n }\n\n if (!isCancelled) {\n setItems(\n responseItems.map((item) => ({\n id: item.id,\n title: item.title,\n imageUrl: item.image_url,\n })),\n );\n }\n })\n .catch((err) => {\n if (err instanceof Error && err.name === \"AbortError\") {\n return;\n }\n\n // Log for debugging\n console.error(\n `[useStaticSourceItems] Failed to fetch ${staticType}:`,\n err,\n );\n\n if (isCancelled) return;\n\n setError(\"An unexpected error occurred. Please try again.\");\n setItems([]);\n })\n .finally(() => {\n if (!isCancelled) {\n setIsLoading(false);\n }\n });\n\n return () => {\n isCancelled = true;\n abortController.abort();\n };\n }, [staticType, search, baseUrl]);\n\n return { items, isLoading, error };\n}\n"]}
@@ -1,26 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var jsxRuntime = require('react/jsx-runtime');
5
-
6
- // src/data-sources/context.tsx
7
- var DataSourceContext = react.createContext({});
8
- function DataSourceProvider({
9
- baseUrl,
10
- getApiHeaders,
11
- children
12
- }) {
13
- const value = react.useMemo(
14
- () => ({ baseUrl, getApiHeaders }),
15
- [baseUrl, getApiHeaders]
16
- );
17
- return /* @__PURE__ */ jsxRuntime.jsx(DataSourceContext.Provider, { value, children });
18
- }
19
- function useDataSourceConfig() {
20
- return react.useContext(DataSourceContext);
21
- }
22
-
23
- exports.DataSourceProvider = DataSourceProvider;
24
- exports.useDataSourceConfig = useDataSourceConfig;
25
- //# sourceMappingURL=chunk-SJQPHJL4.cjs.map
26
- //# sourceMappingURL=chunk-SJQPHJL4.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data-sources/context.tsx"],"names":["createContext","useMemo","jsx","useContext"],"mappings":";;;;;;AAOA,IAAM,iBAAA,GAAoBA,mBAAA,CAAsC,EAAE,CAAA;AAQ3D,SAAS,kBAAA,CAAmB;AAAA,EACjC,OAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,KAAA,GAAQC,aAAA;AAAA,IACZ,OAAO,EAAE,OAAA,EAAS,aAAA,EAAc,CAAA;AAAA,IAChC,CAAC,SAAS,aAAa;AAAA,GACzB;AAEA,EAAA,uBACEC,cAAA,CAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,OACzB,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,mBAAA,GAA8C;AAC5D,EAAA,OAAOC,iBAAW,iBAAiB,CAAA;AACrC","file":"chunk-SJQPHJL4.cjs","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\nexport interface DataSourceContextValue {\n baseUrl?: string | undefined;\n getApiHeaders?: (() => Record<string, string>) | undefined;\n}\n\nconst DataSourceContext = createContext<DataSourceContextValue>({});\n\nexport interface DataSourceProviderProps {\n baseUrl?: string | undefined;\n getApiHeaders?: (() => Record<string, string>) | undefined;\n children: ReactNode;\n}\n\nexport function DataSourceProvider({\n baseUrl,\n getApiHeaders,\n children,\n}: DataSourceProviderProps) {\n const value = useMemo(\n () => ({ baseUrl, getApiHeaders }),\n [baseUrl, getApiHeaders],\n );\n\n return (\n <DataSourceContext.Provider value={value}>\n {children}\n </DataSourceContext.Provider>\n );\n}\n\nexport function useDataSourceConfig(): DataSourceContextValue {\n return useContext(DataSourceContext);\n}\n"]}
@@ -1,13 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
-
3
- // src/data-sources/ErrorState.tsx
4
- function ErrorState() {
5
- return /* @__PURE__ */ jsxs("div", { className: "flex min-h-[120px] flex-col items-center justify-center p-6 text-center", children: [
6
- /* @__PURE__ */ jsx("p", { className: "text-lg font-semibold", children: "Something Went Wrong" }),
7
- /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: "Please contact a company admin for help" })
8
- ] });
9
- }
10
-
11
- export { ErrorState };
12
- //# sourceMappingURL=chunk-TML66UEU.js.map
13
- //# sourceMappingURL=chunk-TML66UEU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data-sources/ErrorState.tsx"],"names":[],"mappings":";;;AAAO,SAAS,UAAA,GAAa;AAC3B,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,oBACzD,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,yCAAA,EAE7C;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-TML66UEU.js","sourcesContent":["export function ErrorState() {\n return (\n <div className=\"flex min-h-[120px] flex-col items-center justify-center p-6 text-center\">\n <p className=\"text-lg font-semibold\">Something Went Wrong</p>\n <p className=\"text-muted-foreground text-sm\">\n Please contact a company admin for help\n </p>\n </div>\n );\n}\n"]}
@@ -1,28 +0,0 @@
1
- 'use strict';
2
-
3
- var chunk46PUWB7C_cjs = require('./chunk-46PUWB7C.cjs');
4
- var chunkHGVSPZEL_cjs = require('./chunk-HGVSPZEL.cjs');
5
- var chunkN2K6W7FX_cjs = require('./chunk-N2K6W7FX.cjs');
6
- var chunkB2NTWEDF_cjs = require('./chunk-B2NTWEDF.cjs');
7
-
8
- // src/data-sources/registry.ts
9
- function createDataSourceRegistry(options) {
10
- return {
11
- fetchers: {
12
- api: chunk46PUWB7C_cjs.apiFetcher,
13
- custom: chunkHGVSPZEL_cjs.customFetcher,
14
- static: chunkN2K6W7FX_cjs.staticFetcher,
15
- ...options?.fetchers
16
- },
17
- transformers: {
18
- ...chunkB2NTWEDF_cjs.WIDGET_TRANSFORMERS,
19
- ...options?.transformers
20
- }
21
- };
22
- }
23
- var DEFAULT_DATA_SOURCE_REGISTRY = createDataSourceRegistry();
24
-
25
- exports.DEFAULT_DATA_SOURCE_REGISTRY = DEFAULT_DATA_SOURCE_REGISTRY;
26
- exports.createDataSourceRegistry = createDataSourceRegistry;
27
- //# sourceMappingURL=chunk-U3CQLX2Z.cjs.map
28
- //# sourceMappingURL=chunk-U3CQLX2Z.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data-sources/registry.ts"],"names":["apiFetcher","customFetcher","staticFetcher","WIDGET_TRANSFORMERS"],"mappings":";;;;;;;;AAsBO,SAAS,yBACd,OAAA,EACoB;AACpB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,GAAA,EAAKA,4BAAA;AAAA,MACL,MAAA,EAAQC,+BAAA;AAAA,MACR,MAAA,EAAQC,+BAAA;AAAA,MACR,GAAG,OAAA,EAAS;AAAA,KACd;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,GAAGC,qCAAA;AAAA,MACH,GAAG,OAAA,EAAS;AAAA;AACd,GACF;AACF;AAGO,IAAM,+BAA+B,wBAAA","file":"chunk-U3CQLX2Z.cjs","sourcesContent":["import type {\n DataSourceRegistry,\n DataFetcher,\n DataTransformer,\n DataSourceType,\n} from \"./types\";\nimport { apiFetcher } from \"./fetchers/api\";\nimport { customFetcher } from \"./fetchers/custom\";\nimport { staticFetcher } from \"./fetchers/static\";\nimport { WIDGET_TRANSFORMERS } from \"./transformers\";\n\nexport interface CreateDataSourceRegistryOptions {\n /** Custom fetchers to add or override */\n fetchers?: Partial<Record<DataSourceType, DataFetcher>>;\n /** Custom transform functions */\n transformers?: Record<string, DataTransformer>;\n}\n\n/**\n * Creates a data source registry with default fetchers.\n * Users can extend this with custom fetchers and transformers.\n */\nexport function createDataSourceRegistry(\n options?: CreateDataSourceRegistryOptions,\n): DataSourceRegistry {\n return {\n fetchers: {\n api: apiFetcher,\n custom: customFetcher,\n static: staticFetcher,\n ...options?.fetchers,\n } as Record<DataSourceType, DataFetcher>,\n transformers: {\n ...WIDGET_TRANSFORMERS,\n ...options?.transformers,\n },\n };\n}\n\n/** Default registry instance */\nexport const DEFAULT_DATA_SOURCE_REGISTRY = createDataSourceRegistry();\n"]}
@@ -1,36 +0,0 @@
1
- import { SidebarProvider, Sidebar, SidebarHeader, SidebarContent, SidebarFooter, SidebarInset } from './chunk-3ZRE7GX6.js';
2
- import 'react';
3
- import { jsx, jsxs } from 'react/jsx-runtime';
4
-
5
- function AppShellLayout({
6
- sidebarContent,
7
- headerContent,
8
- children,
9
- sidebarHeader,
10
- sidebarFooter,
11
- afterContent,
12
- useBottomNav = false
13
- }) {
14
- return /* @__PURE__ */ jsx(SidebarProvider, { useBottomNav, children: /* @__PURE__ */ jsxs("div", { className: "bg-muted relative flex max-h-dvh w-full overflow-hidden", children: [
15
- /* @__PURE__ */ jsxs(Sidebar, { children: [
16
- sidebarHeader && /* @__PURE__ */ jsx(SidebarHeader, { children: sidebarHeader }),
17
- /* @__PURE__ */ jsx(SidebarContent, { className: "p-4", children: sidebarContent }),
18
- sidebarFooter && /* @__PURE__ */ jsx(SidebarFooter, { children: sidebarFooter })
19
- ] }),
20
- /* @__PURE__ */ jsxs(SidebarInset, { className: "flex flex-1 flex-col overflow-hidden", children: [
21
- headerContent,
22
- /* @__PURE__ */ jsx(
23
- "div",
24
- {
25
- className: `bg-muted flex-1 overflow-hidden md:pr-4 md:pb-4 ${useBottomNav ? "max-md:pb-[calc(4rem+env(safe-area-inset-bottom))]" : ""}`,
26
- children: /* @__PURE__ */ jsx("div", { className: "scrollbar-none bg-background text-foreground h-full overflow-auto rounded-xl shadow-lg", children })
27
- }
28
- )
29
- ] }),
30
- afterContent
31
- ] }) });
32
- }
33
-
34
- export { AppShellLayout };
35
- //# sourceMappingURL=chunk-UUNEVOA5.js.map
36
- //# sourceMappingURL=chunk-UUNEVOA5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shell/AppShellLayout.tsx"],"names":[],"mappings":";;;;AAqCO,SAAS,cAAA,CAAe;AAAA,EAC7B,cAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,EAAwB;AACtB,EAAA,2BACG,eAAA,EAAA,EAAgB,YAAA,EACf,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yDAAA,EAEb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,aAAA,oBAAiB,GAAA,CAAC,iBAAe,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,sBAChD,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,KAAA,EAAO,QAAA,EAAA,cAAA,EAAe,CAAA;AAAA,MAC/C,aAAA,oBAAiB,GAAA,CAAC,aAAA,EAAA,EAAe,QAAA,EAAA,aAAA,EAAc;AAAA,KAAA,EAClD,CAAA;AAAA,oBAGA,IAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,sCAAA,EAErB,QAAA,EAAA;AAAA,MAAA,aAAA;AAAA,sBAGD,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,CAAA,gDAAA,EAAmD,YAAA,GAAe,oDAAA,GAAuD,EAAE,CAAA,CAAA;AAAA,UAEtI,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFAAA,EACZ,QAAA,EACH;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAGC;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ","file":"chunk-UUNEVOA5.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarInset,\n SidebarProvider,\n} from \"./sidebar\";\n\nexport interface AppShellLayoutProps {\n /** Navigation content rendered inside the sidebar's scrollable area */\n sidebarContent: React.ReactNode;\n /** Header content rendered above the main content area */\n headerContent: React.ReactNode;\n /** Main page content */\n children: React.ReactNode;\n /** Optional slot at the top of the sidebar (e.g. logo, search) */\n sidebarHeader?: React.ReactNode;\n /** Optional slot at the bottom of the sidebar (e.g. user info) */\n sidebarFooter?: React.ReactNode;\n /** Content rendered after SidebarInset (e.g. MobileBottomNav) */\n afterContent?: React.ReactNode;\n /** Enable bottom nav mode (hides sidebar on mobile, adds bottom padding) */\n useBottomNav?: boolean;\n}\n\n/**\n * Pure visual frame that replicates the RepApp layout:\n * - 13rem collapsible sidebar\n * - 52px header area\n * - rounded-xl bg-background shadow-lg content area with bg-muted gutters\n *\n * This component handles zero business logic — it simply provides the visual shell.\n */\nexport function AppShellLayout({\n sidebarContent,\n headerContent,\n children,\n sidebarHeader,\n sidebarFooter,\n afterContent,\n useBottomNav = false,\n}: AppShellLayoutProps) {\n return (\n <SidebarProvider useBottomNav={useBottomNav}>\n <div className=\"bg-muted relative flex max-h-dvh w-full overflow-hidden\">\n {/* Navigation Sidebar */}\n <Sidebar>\n {sidebarHeader && <SidebarHeader>{sidebarHeader}</SidebarHeader>}\n <SidebarContent className=\"p-4\">{sidebarContent}</SidebarContent>\n {sidebarFooter && <SidebarFooter>{sidebarFooter}</SidebarFooter>}\n </Sidebar>\n\n {/* Main Content Area */}\n <SidebarInset className=\"flex flex-1 flex-col overflow-hidden\">\n {/* Header */}\n {headerContent}\n\n {/* Screen Content */}\n <div\n className={`bg-muted flex-1 overflow-hidden md:pr-4 md:pb-4 ${useBottomNav ? \"max-md:pb-[calc(4rem+env(safe-area-inset-bottom))]\" : \"\"}`}\n >\n <div className=\"scrollbar-none bg-background text-foreground h-full overflow-auto rounded-xl shadow-lg\">\n {children}\n </div>\n </div>\n </SidebarInset>\n\n {/* After content (e.g. MobileBottomNav) */}\n {afterContent}\n </div>\n </SidebarProvider>\n );\n}\n"]}
@@ -1,67 +0,0 @@
1
- // src/data-sources/fetchers/api.ts
2
- function getByPath(obj, path) {
3
- return path.split(".").reduce((current, key) => {
4
- if (current && typeof current === "object" && key in current) {
5
- return current[key];
6
- }
7
- return void 0;
8
- }, obj);
9
- }
10
- function interpolateVariables(endpoint, variables) {
11
- if (!variables) return endpoint;
12
- const resolved = endpoint.replace(
13
- /\{(\w+)\}/g,
14
- (match, key) => variables[key] ?? match
15
- );
16
- const unresolved = resolved.match(/\{(\w+)\}/g);
17
- if (unresolved) {
18
- console.warn(
19
- `[DataSource] Unresolved variable placeholders in endpoint: ${unresolved.join(", ")}. Endpoint: "${endpoint}". Available variables: ${Object.keys(variables).join(", ") || "(none)"}`
20
- );
21
- }
22
- return resolved;
23
- }
24
- function resolveEndpointUrl(endpoint, baseUrl, variables) {
25
- const resolved = interpolateVariables(endpoint, variables);
26
- if (resolved.startsWith("http://") || resolved.startsWith("https://")) {
27
- return resolved;
28
- }
29
- if (baseUrl) {
30
- const base = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
31
- const path = resolved.startsWith("/") ? resolved : `/${resolved}`;
32
- return `${base}${path}`;
33
- }
34
- return resolved;
35
- }
36
- async function apiFetcher(source, context) {
37
- const { endpoint, method = "GET", headers = {}, body } = source;
38
- const mergedVariables = { ...context.variables, ...source.variables };
39
- const url = resolveEndpointUrl(endpoint, context.baseUrl, mergedVariables);
40
- const fetchOptions = {
41
- method,
42
- headers: {
43
- "content-type": "application/json",
44
- ...context.getApiHeaders?.(),
45
- ...headers
46
- },
47
- signal: context.signal
48
- };
49
- if (body && (method === "POST" || method === "PUT")) {
50
- fetchOptions.body = JSON.stringify(body);
51
- }
52
- const response = await fetch(url, fetchOptions);
53
- if (!response.ok) {
54
- throw new Error(
55
- `API request failed: ${response.status} ${response.statusText}`
56
- );
57
- }
58
- const data = await response.json();
59
- if (source.resultPath) {
60
- return getByPath(data, source.resultPath);
61
- }
62
- return data;
63
- }
64
-
65
- export { apiFetcher };
66
- //# sourceMappingURL=chunk-VRF7QEID.js.map
67
- //# sourceMappingURL=chunk-VRF7QEID.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data-sources/fetchers/api.ts"],"names":[],"mappings":"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","file":"chunk-VRF7QEID.js","sourcesContent":["import type { ApiDataSource, DataSourceContext } from \"../types\";\n\n/**\n * Extracts a value from an object using dot notation path\n * e.g., getByPath({ data: { items: [1,2,3] } }, 'data.items') => [1,2,3]\n */\nfunction getByPath(obj: unknown, path: string): unknown {\n return path.split(\".\").reduce((current, key) => {\n if (current && typeof current === \"object\" && key in current) {\n return (current as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * Replaces {variable} placeholders in an endpoint path with values from the\n * variables map. E.g., \"/reps/{rep_id}/most_shared\" with { rep_id: \"42\" }\n * becomes \"/reps/42/most_shared\".\n */\nfunction interpolateVariables(\n endpoint: string,\n variables?: Record<string, string>,\n): string {\n if (!variables) return endpoint;\n const resolved = endpoint.replace(\n /\\{(\\w+)\\}/g,\n (match, key: string) => variables[key] ?? match,\n );\n const unresolved = resolved.match(/\\{(\\w+)\\}/g);\n if (unresolved) {\n console.warn(\n `[DataSource] Unresolved variable placeholders in endpoint: ${unresolved.join(\", \")}. ` +\n `Endpoint: \"${endpoint}\". Available variables: ${Object.keys(variables).join(\", \") || \"(none)\"}`,\n );\n }\n return resolved;\n}\n\n/**\n * Resolves the full URL for an endpoint.\n * - Substitutes {variable} placeholders from context variables\n * - Absolute URLs (starting with http:// or https://) are used as-is\n * - Relative paths are prefixed with the context's baseUrl\n */\nfunction resolveEndpointUrl(\n endpoint: string,\n baseUrl?: string,\n variables?: Record<string, string>,\n): string {\n const resolved = interpolateVariables(endpoint, variables);\n\n // If endpoint is already absolute, use it directly\n if (resolved.startsWith(\"http://\") || resolved.startsWith(\"https://\")) {\n return resolved;\n }\n\n // If we have a baseUrl, prepend it to the relative endpoint\n if (baseUrl) {\n // Ensure proper joining (no double slashes)\n const base = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const path = resolved.startsWith(\"/\") ? resolved : `/${resolved}`;\n return `${base}${path}`;\n }\n\n // No baseUrl provided, return endpoint as-is (will likely fail for relative paths)\n return resolved;\n}\n\n/**\n * Default API fetcher implementation\n */\nexport async function apiFetcher(\n source: ApiDataSource,\n context: DataSourceContext,\n): Promise<unknown> {\n const { endpoint, method = \"GET\", headers = {}, body } = source;\n\n // Merge context variables with per-source variables (source overrides context)\n const mergedVariables = { ...context.variables, ...source.variables };\n\n // Resolve the full URL, substituting variables and using baseUrl for relative endpoints\n const url = resolveEndpointUrl(endpoint, context.baseUrl, mergedVariables);\n\n const fetchOptions: RequestInit = {\n method,\n headers: {\n \"content-type\": \"application/json\",\n ...context.getApiHeaders?.(),\n ...headers,\n },\n signal: context.signal,\n };\n\n if (body && (method === \"POST\" || method === \"PUT\")) {\n fetchOptions.body = JSON.stringify(body);\n }\n\n const response = await fetch(url, fetchOptions);\n\n if (!response.ok) {\n throw new Error(\n `API request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = await response.json();\n\n // Extract data at resultPath if specified\n if (source.resultPath) {\n return getByPath(data, source.resultPath);\n }\n\n return data;\n}\n"]}
@@ -1,38 +0,0 @@
1
- import { DataSourceProvider } from './chunk-3I5Y3PEO.js';
2
- import { DEFAULT_DATA_SOURCE_REGISTRY } from './chunk-LBLHDGMT.js';
3
- import { createContext, useMemo, useContext } from 'react';
4
- import { jsx } from 'react/jsx-runtime';
5
-
6
- var DataSourceRegistryContext = createContext(
7
- {
8
- registry: DEFAULT_DATA_SOURCE_REGISTRY
9
- }
10
- );
11
- function DataSourceRegistryProvider({
12
- registry,
13
- baseUrl,
14
- getApiHeaders,
15
- variables,
16
- children
17
- }) {
18
- const value = useMemo(
19
- () => ({
20
- registry: registry ?? DEFAULT_DATA_SOURCE_REGISTRY,
21
- baseUrl,
22
- getApiHeaders,
23
- variables
24
- }),
25
- [registry, baseUrl, getApiHeaders, variables]
26
- );
27
- return /* @__PURE__ */ jsx(DataSourceRegistryContext.Provider, { value, children: /* @__PURE__ */ jsx(DataSourceProvider, { baseUrl, getApiHeaders, children }) });
28
- }
29
- function useDataSourceRegistry() {
30
- return useContext(DataSourceRegistryContext).registry;
31
- }
32
- function useDataSourceRegistryConfig() {
33
- return useContext(DataSourceRegistryContext);
34
- }
35
-
36
- export { DataSourceRegistryProvider, useDataSourceRegistry, useDataSourceRegistryConfig };
37
- //# sourceMappingURL=chunk-VSZWXSQA.js.map
38
- //# sourceMappingURL=chunk-VSZWXSQA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data-sources/registry-context.tsx"],"names":[],"mappings":";;;;;AAcA,IAAM,yBAAA,GAA4B,aAAA;AAAA,EAChC;AAAA,IACE,QAAA,EAAU;AAAA;AAEd,CAAA;AAqBO,SAAS,0BAAA,CAA2B;AAAA,EACzC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAoC;AAClC,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO;AAAA,MACL,UAAU,QAAA,IAAY,4BAAA;AAAA,MACtB,OAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,OAAA,EAAS,aAAA,EAAe,SAAS;AAAA,GAC9C;AAEA,EAAA,uBACE,GAAA,CAAC,yBAAA,CAA0B,QAAA,EAA1B,EAAmC,KAAA,EAClC,8BAAC,kBAAA,EAAA,EAAmB,OAAA,EAAkB,aAAA,EACnC,QAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAKO,SAAS,qBAAA,GAA4C;AAC1D,EAAA,OAAO,UAAA,CAAW,yBAAyB,CAAA,CAAE,QAAA;AAC/C;AAKO,SAAS,2BAAA,GAA8D;AAC5E,EAAA,OAAO,WAAW,yBAAyB,CAAA;AAC7C","file":"chunk-VSZWXSQA.js","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { DataSourceRegistry } from \"./types\";\nimport { DEFAULT_DATA_SOURCE_REGISTRY } from \"./registry\";\nimport { DataSourceProvider } from \"./context\";\n\ninterface DataSourceRegistryContextValue {\n registry: DataSourceRegistry;\n baseUrl?: string | undefined;\n /** Get API headers function */\n getApiHeaders?: (() => Record<string, string>) | undefined;\n /** Dynamic variables for endpoint path substitution (e.g., { rep_id: \"123\" }) */\n variables?: Record<string, string> | undefined;\n}\n\nconst DataSourceRegistryContext = createContext<DataSourceRegistryContextValue>(\n {\n registry: DEFAULT_DATA_SOURCE_REGISTRY,\n },\n);\n\nexport interface DataSourceRegistryProviderProps {\n registry?: DataSourceRegistry | undefined;\n /** Base URL for API calls (e.g., \"https://api.fluid.app/api\") */\n baseUrl?: string | undefined;\n /**\n * Get API headers function\n */\n getApiHeaders?: (() => Record<string, string>) | undefined;\n /** Dynamic variables for endpoint path substitution (e.g., { rep_id: \"123\" }) */\n variables?: Record<string, string> | undefined;\n children: ReactNode;\n}\n\n/**\n * Provides data source registry and configuration to all descendants.\n * If no registry is provided, uses the default.\n * Also provides the shared DataSourceProvider from rep-core so that\n * rep-widgets hooks can access baseUrl and getApiHeaders.\n */\nexport function DataSourceRegistryProvider({\n registry,\n baseUrl,\n getApiHeaders,\n variables,\n children,\n}: DataSourceRegistryProviderProps) {\n const value = useMemo(\n () => ({\n registry: registry ?? DEFAULT_DATA_SOURCE_REGISTRY,\n baseUrl,\n getApiHeaders,\n variables,\n }),\n [registry, baseUrl, getApiHeaders, variables],\n );\n\n return (\n <DataSourceRegistryContext.Provider value={value}>\n <DataSourceProvider baseUrl={baseUrl} getApiHeaders={getApiHeaders}>\n {children}\n </DataSourceProvider>\n </DataSourceRegistryContext.Provider>\n );\n}\n\n/**\n * Hook to access the data source registry.\n */\nexport function useDataSourceRegistry(): DataSourceRegistry {\n return useContext(DataSourceRegistryContext).registry;\n}\n\n/**\n * Hook to access the full data source registry context (registry + config).\n */\nexport function useDataSourceRegistryConfig(): DataSourceRegistryContextValue {\n return useContext(DataSourceRegistryContext);\n}\n"]}
@@ -1,117 +0,0 @@
1
- // src/data-sources/fetchers/custom.ts
2
- var SHAREABLE_ENDPOINTS = {
3
- Medium: (id) => `/company/media/${id}`,
4
- Page: (id) => `/company/pages/${id}`,
5
- Library: (id) => `/company/libraries/${id}`,
6
- Product: (id) => `/company/v1/products/${id}`,
7
- EnrollmentPack: (id) => `/enrollment_packs/${id}`
8
- };
9
- function extractResourceData(json, shareableType) {
10
- const resource = json.resource;
11
- if (resource) {
12
- const typeKey = shareableType.toLowerCase().replace("pack", "_pack");
13
- if (resource[typeKey]) {
14
- return resource[typeKey];
15
- }
16
- if (resource.product) return resource.product;
17
- if (resource.enrollment_pack)
18
- return resource.enrollment_pack;
19
- }
20
- const directKey = shareableType.toLowerCase().replace("pack", "_pack");
21
- if (json[directKey]) {
22
- return json[directKey];
23
- }
24
- if (json.data) return json.data;
25
- if (json.medium) return json.medium;
26
- if (json.page) return json.page;
27
- if (json.library) return json.library;
28
- if (json.product) return json.product;
29
- if (json.enrollment_pack)
30
- return json.enrollment_pack;
31
- return json;
32
- }
33
- async function fetchSingleItem(item, signal, baseUrl = "", getApiHeaders) {
34
- const getEndpoint = SHAREABLE_ENDPOINTS[item.shareableType];
35
- if (!getEndpoint) {
36
- return {
37
- item,
38
- data: null,
39
- error: new Error(`Unknown shareable type: ${item.shareableType}`)
40
- };
41
- }
42
- const endpoint = `${baseUrl}${getEndpoint(item.id)}`;
43
- try {
44
- const response = await fetch(endpoint, {
45
- method: "GET",
46
- headers: {
47
- ...getApiHeaders?.(),
48
- "Content-Type": "application/json"
49
- },
50
- signal
51
- });
52
- if (!response.ok) {
53
- return {
54
- item,
55
- data: null,
56
- error: new Error(
57
- `Failed to fetch ${item.shareableType} with ID ${item.id}: ${response.status}`
58
- )
59
- };
60
- }
61
- const json = await response.json();
62
- const resourceData = extractResourceData(json, item.shareableType);
63
- if (resourceData && typeof resourceData === "object") {
64
- resourceData.shareable_type = item.shareableType;
65
- }
66
- return { item, data: resourceData };
67
- } catch (error) {
68
- return {
69
- item,
70
- data: null,
71
- error: error instanceof Error ? error : new Error(
72
- `Unknown error fetching ${item.shareableType} ${item.id}`
73
- )
74
- };
75
- }
76
- }
77
- async function customFetcher(source, context) {
78
- const { selectedItems } = source;
79
- if (!selectedItems || selectedItems.length === 0) {
80
- return [];
81
- }
82
- const results = await Promise.all(
83
- selectedItems.map(
84
- (item) => fetchSingleItem(
85
- item,
86
- context.signal,
87
- context.baseUrl,
88
- context.getApiHeaders
89
- )
90
- )
91
- );
92
- const successfulData = [];
93
- const errors = [];
94
- for (const result of results) {
95
- if (result.error) {
96
- console.warn(
97
- `[CustomFetcher] Failed to fetch ${result.item.shareableType} #${result.item.id}:`,
98
- result.error.message
99
- );
100
- errors.push(result.error);
101
- continue;
102
- }
103
- if (result.data) {
104
- successfulData.push(result.data);
105
- }
106
- }
107
- if (successfulData.length === 0 && errors.length > 0) {
108
- throw new Error(
109
- `Failed to fetch all ${errors.length} item(s): ${errors[0]?.message || "Unknown error"}`
110
- );
111
- }
112
- return successfulData;
113
- }
114
-
115
- export { customFetcher };
116
- //# sourceMappingURL=chunk-WYOHFNNW.js.map
117
- //# sourceMappingURL=chunk-WYOHFNNW.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data-sources/fetchers/custom.ts"],"names":[],"mappings":"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","file":"chunk-WYOHFNNW.js","sourcesContent":["import type {\n CustomDataSource,\n DataSourceContext,\n SelectedItem,\n ShareableType,\n} from \"../types\";\n\n/**\n * Individual resource endpoints for each shareable type.\n * These fetch single items by ID from the company API.\n */\nconst SHAREABLE_ENDPOINTS: Record<\n ShareableType,\n (id: string | number) => string\n> = {\n Medium: (id) => `/company/media/${id}`,\n Page: (id) => `/company/pages/${id}`,\n Library: (id) => `/company/libraries/${id}`,\n Product: (id) => `/company/v1/products/${id}`,\n EnrollmentPack: (id) => `/enrollment_packs/${id}`,\n};\n\n/**\n * Extract the actual resource data from various API response structures.\n * Different endpoints wrap their data differently:\n * - Product: { status, resource: { product: {...} } }\n * - EnrollmentPack: { status, resource: { enrollment_pack: {...} } }\n * - Medium/Page/Library: Direct root or { medium: {...} }\n */\nfunction extractResourceData(\n json: Record<string, unknown>,\n shareableType: ShareableType,\n): Record<string, unknown> {\n // Try nested resource structure first (Product, EnrollmentPack)\n const resource = json.resource as Record<string, unknown> | undefined;\n if (resource) {\n // Check for type-specific key within resource\n const typeKey = shareableType.toLowerCase().replace(\"pack\", \"_pack\");\n if (resource[typeKey]) {\n return resource[typeKey] as Record<string, unknown>;\n }\n // Check common keys\n if (resource.product) return resource.product as Record<string, unknown>;\n if (resource.enrollment_pack)\n return resource.enrollment_pack as Record<string, unknown>;\n }\n\n // Try direct type key (e.g., { medium: {...} })\n const directKey = shareableType.toLowerCase().replace(\"pack\", \"_pack\");\n if (json[directKey]) {\n return json[directKey] as Record<string, unknown>;\n }\n\n // Try common response shapes\n if (json.data) return json.data as Record<string, unknown>;\n if (json.medium) return json.medium as Record<string, unknown>;\n if (json.page) return json.page as Record<string, unknown>;\n if (json.library) return json.library as Record<string, unknown>;\n if (json.product) return json.product as Record<string, unknown>;\n if (json.enrollment_pack)\n return json.enrollment_pack as Record<string, unknown>;\n\n // Return as-is if no wrapper found (Library uses direct serialization)\n return json;\n}\n\n/**\n * Result from fetching a single shareable item\n */\ninterface FetchResult {\n item: SelectedItem;\n data: unknown;\n error?: Error;\n}\n\n/**\n * Fetch a single shareable item by ID from the individual resource endpoint.\n */\nasync function fetchSingleItem(\n item: SelectedItem,\n signal: AbortSignal,\n baseUrl: string = \"\",\n getApiHeaders?: () => Record<string, string>,\n): Promise<FetchResult> {\n const getEndpoint = SHAREABLE_ENDPOINTS[item.shareableType];\n if (!getEndpoint) {\n return {\n item,\n data: null,\n error: new Error(`Unknown shareable type: ${item.shareableType}`),\n };\n }\n\n const endpoint = `${baseUrl}${getEndpoint(item.id)}`;\n\n try {\n const response = await fetch(endpoint, {\n method: \"GET\",\n headers: {\n ...getApiHeaders?.(),\n \"Content-Type\": \"application/json\",\n },\n signal,\n });\n\n if (!response.ok) {\n return {\n item,\n data: null,\n error: new Error(\n `Failed to fetch ${item.shareableType} with ID ${item.id}: ${response.status}`,\n ),\n };\n }\n\n const json = await response.json();\n\n // Extract the actual resource data from the response wrapper\n const resourceData = extractResourceData(json, item.shareableType);\n\n // Add shareable_type to the response for transformer compatibility\n if (resourceData && typeof resourceData === \"object\") {\n (resourceData as Record<string, unknown>).shareable_type =\n item.shareableType;\n }\n\n return { item, data: resourceData };\n } catch (error) {\n return {\n item,\n data: null,\n error:\n error instanceof Error\n ? error\n : new Error(\n `Unknown error fetching ${item.shareableType} ${item.id}`,\n ),\n };\n }\n}\n\n/**\n * Custom fetcher that fetches selected items.\n *\n * Fetches items from individual resource endpoints using the configured\n * getApiHeaders for authentication.\n *\n * Fetches all items in parallel for performance.\n * Returns an array of successfully fetched items, preserving order.\n * Logs warnings for failed fetches but doesn't throw.\n */\nexport async function customFetcher(\n source: CustomDataSource,\n context: DataSourceContext,\n): Promise<unknown[]> {\n const { selectedItems } = source;\n if (!selectedItems || selectedItems.length === 0) {\n return [];\n }\n\n // Fallback: fetch from individual endpoints (no auth)\n const results = await Promise.all(\n selectedItems.map((item) =>\n fetchSingleItem(\n item,\n context.signal,\n context.baseUrl,\n context.getApiHeaders,\n ),\n ),\n );\n\n // Process results, collecting successful data and tracking errors\n const successfulData: unknown[] = [];\n const errors: Error[] = [];\n\n for (const result of results) {\n if (result.error) {\n console.warn(\n `[CustomFetcher] Failed to fetch ${result.item.shareableType} #${result.item.id}:`,\n result.error.message,\n );\n errors.push(result.error);\n continue;\n }\n\n if (result.data) {\n successfulData.push(result.data);\n }\n }\n\n // Throw error if all fetches failed\n if (successfulData.length === 0 && errors.length > 0) {\n throw new Error(\n `Failed to fetch all ${errors.length} item(s): ${errors[0]?.message || \"Unknown error\"}`,\n );\n }\n\n return successfulData;\n}\n"]}