@fluid-app/portal-sdk 0.1.225 → 0.1.227

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 (56) hide show
  1. package/dist/{FluidProvider-CNzpDHOR.mjs → FluidProvider-1ny2_ye-.mjs} +43 -13
  2. package/dist/FluidProvider-1ny2_ye-.mjs.map +1 -0
  3. package/dist/{FluidProvider-DCna582u.cjs → FluidProvider-Bl8BC3N1.cjs} +43 -13
  4. package/dist/FluidProvider-Bl8BC3N1.cjs.map +1 -0
  5. package/dist/{MessagingScreen-DEt_lPGS.mjs → MessagingScreen-7VQtzmmg.mjs} +2 -2
  6. package/dist/{MessagingScreen-DEt_lPGS.mjs.map → MessagingScreen-7VQtzmmg.mjs.map} +1 -1
  7. package/dist/{MessagingScreen-BM-65fSe.cjs → MessagingScreen-BbCJ4ctF.cjs} +2 -2
  8. package/dist/{MessagingScreen-7pdCGDsA.cjs → MessagingScreen-CF2894Tr.cjs} +2 -2
  9. package/dist/{MessagingScreen-7pdCGDsA.cjs.map → MessagingScreen-CF2894Tr.cjs.map} +1 -1
  10. package/dist/{OrdersScreen-Dq-pg4aQ.cjs → OrdersScreen-BPrt9kNr.cjs} +2 -2
  11. package/dist/{OrdersScreen-Dq-pg4aQ.cjs.map → OrdersScreen-BPrt9kNr.cjs.map} +1 -1
  12. package/dist/{OrdersScreen-Dj_Bavxl.mjs → OrdersScreen-YWHy3VBL.mjs} +2 -2
  13. package/dist/{OrdersScreen-Dj_Bavxl.mjs.map → OrdersScreen-YWHy3VBL.mjs.map} +1 -1
  14. package/dist/{OrdersScreen-KG2SEc8_.cjs → OrdersScreen-knd6gnEi.cjs} +1 -1
  15. package/dist/{PortalProductsApiProvider-DzjO6yix.cjs → PortalProductsApiProvider-Bb5B1Hv5.cjs} +4 -4
  16. package/dist/{PortalProductsApiProvider-DzjO6yix.cjs.map → PortalProductsApiProvider-Bb5B1Hv5.cjs.map} +1 -1
  17. package/dist/{PortalProductsApiProvider-hhff3ssp.mjs → PortalProductsApiProvider-BeCWFRtF.mjs} +4 -4
  18. package/dist/PortalProductsApiProvider-BeCWFRtF.mjs.map +1 -0
  19. package/dist/{ProfileScreen-BUbLVaHH.mjs → ProfileScreen-BOvOpIS1.mjs} +2 -2
  20. package/dist/{ProfileScreen-BUbLVaHH.mjs.map → ProfileScreen-BOvOpIS1.mjs.map} +1 -1
  21. package/dist/{ProfileScreen-CRvTYZjQ.cjs → ProfileScreen-BT-SOUnq.cjs} +2 -2
  22. package/dist/{ProfileScreen-DQ4ahKtv.cjs → ProfileScreen-DE6Rrw23.cjs} +2 -2
  23. package/dist/{ProfileScreen-DQ4ahKtv.cjs.map → ProfileScreen-DE6Rrw23.cjs.map} +1 -1
  24. package/dist/{ShareablesScreen-DtR0PfSD.cjs → ShareablesScreen-AMlPuFFk.cjs} +328 -36
  25. package/dist/ShareablesScreen-AMlPuFFk.cjs.map +1 -0
  26. package/dist/{ShareablesScreen-DyaGwSlk.mjs → ShareablesScreen-CNARhXTE.mjs} +328 -36
  27. package/dist/ShareablesScreen-CNARhXTE.mjs.map +1 -0
  28. package/dist/{ShareablesScreen-C3JkUXfG.cjs → ShareablesScreen-DyGQ-Yo_.cjs} +2 -2
  29. package/dist/{ShopScreen-C8V_QlfB.mjs → ShopScreen-CJcGSrG4.mjs} +3 -3
  30. package/dist/{ShopScreen-C8V_QlfB.mjs.map → ShopScreen-CJcGSrG4.mjs.map} +1 -1
  31. package/dist/{ShopScreen-D_YIIi47.cjs → ShopScreen-IQ3tqLfP.cjs} +3 -3
  32. package/dist/{ShopScreen-_2S-9SvE.cjs → ShopScreen-yZUXE55P.cjs} +3 -3
  33. package/dist/{ShopScreen-_2S-9SvE.cjs.map → ShopScreen-yZUXE55P.cjs.map} +1 -1
  34. package/dist/{SubscriptionsScreen-CzqiU3hv.cjs → SubscriptionsScreen-BsOdTfJQ.cjs} +2 -2
  35. package/dist/{SubscriptionsScreen-CzqiU3hv.cjs.map → SubscriptionsScreen-BsOdTfJQ.cjs.map} +1 -1
  36. package/dist/{SubscriptionsScreen-BI5KiZX5.cjs → SubscriptionsScreen-CISCXowf.cjs} +1 -1
  37. package/dist/{SubscriptionsScreen-Bj_MwfT2.mjs → SubscriptionsScreen-mUaEWHn5.mjs} +2 -2
  38. package/dist/{SubscriptionsScreen-Bj_MwfT2.mjs.map → SubscriptionsScreen-mUaEWHn5.mjs.map} +1 -1
  39. package/dist/index.cjs +29 -20
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.mjs +29 -20
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/{portal_tenant-D6sxwKfH.mjs → portal_tenant-CFngP8OD.mjs} +10 -10
  44. package/dist/{portal_tenant-Dczq4fXP.cjs.map → portal_tenant-CFngP8OD.mjs.map} +1 -1
  45. package/dist/{portal_tenant-Dczq4fXP.cjs → portal_tenant-GpShCvG9.cjs} +17 -17
  46. package/dist/{portal_tenant-D6sxwKfH.mjs.map → portal_tenant-GpShCvG9.cjs.map} +1 -1
  47. package/dist/{portal_tenant_content-Da1Vvf0I.cjs → portal_tenant_content-Bnr0IyhM.cjs} +41 -25
  48. package/dist/{portal_tenant_content-CiwLspiV.mjs.map → portal_tenant_content-Bnr0IyhM.cjs.map} +1 -1
  49. package/dist/{portal_tenant_content-CiwLspiV.mjs → portal_tenant_content-WBAKi5Vl.mjs} +24 -14
  50. package/dist/{portal_tenant_content-Da1Vvf0I.cjs.map → portal_tenant_content-WBAKi5Vl.mjs.map} +1 -1
  51. package/package.json +12 -12
  52. package/dist/FluidProvider-CNzpDHOR.mjs.map +0 -1
  53. package/dist/FluidProvider-DCna582u.cjs.map +0 -1
  54. package/dist/PortalProductsApiProvider-hhff3ssp.mjs.map +0 -1
  55. package/dist/ShareablesScreen-DtR0PfSD.cjs.map +0 -1
  56. package/dist/ShareablesScreen-DyaGwSlk.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-9hOWP6kD.cjs");
2
- const require_portal_tenant_content = require("./portal_tenant_content-Da1Vvf0I.cjs");
2
+ const require_portal_tenant_content = require("./portal_tenant_content-Bnr0IyhM.cjs");
3
3
  const require_PortalTenantClientProvider = require("./PortalTenantClientProvider-BT5Y4YyL.cjs");
4
4
  const require_src = require("./src-DpFIi-nj.cjs");
5
5
  const require_ScreenHeaderContext = require("./ScreenHeaderContext-PbjwAMeB.cjs");
@@ -11,7 +11,7 @@ const require_es = require("./es-nxOxb57F.cjs");
11
11
  const require_SearchSort = require("./SearchSort-Hwga1dIi.cjs");
12
12
  const require_dist$4 = require("./dist-5XPflEEG.cjs");
13
13
  const require_dist$5 = require("./dist-FHf4OHgt.cjs");
14
- const require_PortalProductsApiProvider = require("./PortalProductsApiProvider-DzjO6yix.cjs");
14
+ const require_PortalProductsApiProvider = require("./PortalProductsApiProvider-Bb5B1Hv5.cjs");
15
15
  let react = require("react");
16
16
  react = require_chunk.__toESM(react);
17
17
  let _tanstack_react_query = require("@tanstack/react-query");
@@ -69,6 +69,20 @@ const shareablesKeys = {
69
69
  id
70
70
  ]
71
71
  },
72
+ pages: {
73
+ all: ["pages"],
74
+ list: (search, sort) => [
75
+ "pages",
76
+ "list",
77
+ search,
78
+ sort
79
+ ],
80
+ detail: (id) => [
81
+ "pages",
82
+ "detail",
83
+ id
84
+ ]
85
+ },
72
86
  productMedia: {
73
87
  all: ["productMedia"],
74
88
  counts: (ids) => [
@@ -458,7 +472,7 @@ async function getProduct(client, id, options) {
458
472
  }
459
473
  //#endregion
460
474
  //#region ../../shareables/ui/src/components/MediaShare/ShareItemCard.tsx
461
- const DEFAULT_IMAGE$5 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
475
+ const DEFAULT_IMAGE$6 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
462
476
  function ShareItemCard({ title, imageUrl, href, badge, isVideo = false, subtitle = "Click to find shareable assets" }) {
463
477
  const { navigate } = useShareablesUI();
464
478
  const renderImage = useRenderImage();
@@ -480,7 +494,7 @@ function ShareItemCard({ title, imageUrl, href, badge, isVideo = false, subtitle
480
494
  className: "bg-muted relative aspect-square overflow-hidden rounded-lg",
481
495
  children: [
482
496
  renderImage({
483
- src: imageUrl || DEFAULT_IMAGE$5,
497
+ src: imageUrl || DEFAULT_IMAGE$6,
484
498
  alt: title,
485
499
  fill: true,
486
500
  className: "object-cover transition-transform group-hover:scale-105"
@@ -678,7 +692,7 @@ function ToggleButton({ active, label, onClick, children }) {
678
692
  }
679
693
  //#endregion
680
694
  //#region ../../shareables/ui/src/components/screens/ProductsScreen.tsx
681
- const PAGE_SIZE$4 = 24;
695
+ const PAGE_SIZE$5 = 24;
682
696
  const SORT_OPTIONS$1 = [
683
697
  {
684
698
  label: "Newest",
@@ -731,11 +745,11 @@ function ProductsScreen({ countryCode, fetchProducts: fetchPortalProducts, onNav
731
745
  queryKey: [
732
746
  "portal-product-catalog",
733
747
  debouncedSearch || "",
734
- PAGE_SIZE$4,
748
+ PAGE_SIZE$5,
735
749
  effectiveSort
736
750
  ],
737
751
  queryFn: async ({ pageParam }) => {
738
- return fetchPortalProducts(debouncedSearch, pageParam, PAGE_SIZE$4, effectiveSort);
752
+ return fetchPortalProducts(debouncedSearch, pageParam, PAGE_SIZE$5, effectiveSort);
739
753
  },
740
754
  getNextPageParam: (lastPage) => lastPage.meta?.pagination?.next_cursor ?? void 0,
741
755
  initialPageParam: void 0,
@@ -751,7 +765,7 @@ function ProductsScreen({ countryCode, fetchProducts: fetchPortalProducts, onNav
751
765
  if (!client) throw new Error("Unreachable: client is null");
752
766
  return (await listProducts(client, {
753
767
  page: pageParam,
754
- per_page: PAGE_SIZE$4,
768
+ per_page: PAGE_SIZE$5,
755
769
  search_query: debouncedSearch || void 0,
756
770
  sorting: {
757
771
  id: "title",
@@ -762,7 +776,7 @@ function ProductsScreen({ countryCode, fetchProducts: fetchPortalProducts, onNav
762
776
  published_stores: ["rep"]
763
777
  })).products;
764
778
  },
765
- getNextPageParam: (lastPage, allPages) => lastPage.length === PAGE_SIZE$4 ? allPages.length + 1 : void 0,
779
+ getNextPageParam: (lastPage, allPages) => lastPage.length === PAGE_SIZE$5 ? allPages.length + 1 : void 0,
766
780
  initialPageParam: 1,
767
781
  enabled: !fetchPortalProducts && !!client
768
782
  });
@@ -1633,7 +1647,7 @@ function OwnerFilterTabs({ value, onValueChange, myLabel = "Mine" }) {
1633
1647
  }
1634
1648
  //#endregion
1635
1649
  //#region ../../shareables/ui/src/components/screens/MediaListingScreen.tsx
1636
- const PAGE_SIZE$3 = 24;
1650
+ const PAGE_SIZE$4 = 24;
1637
1651
  function getMediaKindLabel(kind) {
1638
1652
  switch (kind) {
1639
1653
  case "video": return "Video";
@@ -1733,7 +1747,7 @@ function MediaListingScreen(_props) {
1733
1747
  "filter[title]": debouncedSearch || void 0,
1734
1748
  "filter[content_format]": bffKind,
1735
1749
  "page[cursor]": pageParam,
1736
- "page[limit]": PAGE_SIZE$3,
1750
+ "page[limit]": PAGE_SIZE$4,
1737
1751
  sort: bffSort
1738
1752
  });
1739
1753
  },
@@ -7028,7 +7042,7 @@ function RichTextEditor({ value, onChange, placeholder = "Start writing...", cla
7028
7042
  }
7029
7043
  //#endregion
7030
7044
  //#region ../../shareables/ui/src/components/media/MediaProductTagging.tsx
7031
- const PAGE_SIZE$2 = 25;
7045
+ const PAGE_SIZE$3 = 25;
7032
7046
  function ProductImage({ imageUrl, name }) {
7033
7047
  const [errored, setErrored] = (0, react.useState)(false);
7034
7048
  if (imageUrl && imageUrl.length > 0 && !errored) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
@@ -7062,7 +7076,7 @@ function MediaProductTagging({ products, onAddProduct, onRemoveProduct, onSearch
7062
7076
  const runSearch = (0, react.useCallback)(async (q) => {
7063
7077
  setSearching(true);
7064
7078
  try {
7065
- const { products: results, nextCursor: cursor } = await onSearchProducts(q, { limit: PAGE_SIZE$2 });
7079
+ const { products: results, nextCursor: cursor } = await onSearchProducts(q, { limit: PAGE_SIZE$3 });
7066
7080
  setSearchResults(results);
7067
7081
  setNextCursor(cursor ?? null);
7068
7082
  } catch (error) {
@@ -7083,7 +7097,7 @@ function MediaProductTagging({ products, onAddProduct, onRemoveProduct, onSearch
7083
7097
  try {
7084
7098
  const { products: results, nextCursor: cursor } = await onSearchProducts(query, {
7085
7099
  cursor: nextCursor,
7086
- limit: PAGE_SIZE$2
7100
+ limit: PAGE_SIZE$3
7087
7101
  });
7088
7102
  setSearchResults((prev) => [...prev, ...results]);
7089
7103
  setNextCursor(cursor ?? null);
@@ -8857,7 +8871,7 @@ function MediaCreateScreen({ onNavigate, onBack }) {
8857
8871
  }
8858
8872
  //#endregion
8859
8873
  //#region ../../shareables/ui/src/components/playlists/PlaylistCard.tsx
8860
- const DEFAULT_IMAGE$4 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
8874
+ const DEFAULT_IMAGE$5 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
8861
8875
  function PlaylistCard({ title, imageUrl, href, itemCount, isFavorited = false, isSelectable = false, isSelected = false, canEdit = false, onSelectionChange, onToggleFavorite, onEdit, onDelete }) {
8862
8876
  const { navigate } = useShareablesUI();
8863
8877
  const renderImage = useRenderImage();
@@ -8882,7 +8896,7 @@ function PlaylistCard({ title, imageUrl, href, itemCount, isFavorited = false, i
8882
8896
  className: "bg-muted relative aspect-square overflow-hidden rounded-lg",
8883
8897
  children: [
8884
8898
  renderImage({
8885
- src: imgError ? DEFAULT_IMAGE$4 : imageUrl || DEFAULT_IMAGE$4,
8899
+ src: imgError ? DEFAULT_IMAGE$5 : imageUrl || DEFAULT_IMAGE$5,
8886
8900
  alt: title,
8887
8901
  fill: true,
8888
8902
  className: "object-cover transition-transform group-hover:scale-105",
@@ -8997,7 +9011,7 @@ function BulkSelectionBar({ selectedCount, totalCount, onSelectAll, onClearSelec
8997
9011
  }
8998
9012
  //#endregion
8999
9013
  //#region ../../shareables/ui/src/components/screens/PlaylistsListingScreen.tsx
9000
- const PAGE_SIZE$1 = 12;
9014
+ const PAGE_SIZE$2 = 12;
9001
9015
  const GRID_CLASS = "grid grid-cols-1 gap-8 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4";
9002
9016
  function PlaylistsListingScreen(_props) {
9003
9017
  const api = useShareablesApi();
@@ -9042,7 +9056,7 @@ function PlaylistsListingScreen(_props) {
9042
9056
  const response = await api.playlists.getPlaylists({
9043
9057
  "filter[title]": debouncedSearch || void 0,
9044
9058
  "page[cursor]": pageParam,
9045
- "page[limit]": PAGE_SIZE$1,
9059
+ "page[limit]": PAGE_SIZE$2,
9046
9060
  sort: sortValue
9047
9061
  });
9048
9062
  return {
@@ -9351,7 +9365,7 @@ const NAVIGABLE_RELATEABLE_TYPES = new Set([
9351
9365
  ]);
9352
9366
  //#endregion
9353
9367
  //#region ../../shareables/ui/src/components/SharePage/TaggedProductsList.tsx
9354
- const DEFAULT_IMAGE$3 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
9368
+ const DEFAULT_IMAGE$4 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
9355
9369
  function resolvePrice(product) {
9356
9370
  let price = product.display_price || product.price;
9357
9371
  if (product.variants && product.variants.length > 0) {
@@ -9418,7 +9432,7 @@ function TaggedProductsList({ products, onProductClick }) {
9418
9432
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
9419
9433
  className: "scrollbar-none flex gap-4 overflow-x-auto pb-2",
9420
9434
  children: products.map((product, index) => {
9421
- const imageUrl = product.images?.[0]?.image_url || product.image_url || product.compressed_image_url || DEFAULT_IMAGE$3;
9435
+ const imageUrl = product.images?.[0]?.image_url || product.image_url || product.compressed_image_url || DEFAULT_IMAGE$4;
9422
9436
  const title = product.title || "Untitled";
9423
9437
  const displayPrice = resolvePrice(product);
9424
9438
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
@@ -9453,7 +9467,7 @@ function TaggedProductsList({ products, onProductClick }) {
9453
9467
  }
9454
9468
  //#endregion
9455
9469
  //#region ../../shareables/ui/src/components/SharePage/PlaylistItemsList.tsx
9456
- const DEFAULT_IMAGE$2 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
9470
+ const DEFAULT_IMAGE$3 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
9457
9471
  function getItemType(type, kind) {
9458
9472
  if (type === "Product") return "Product";
9459
9473
  if (type === "EnrollmentPack") return "Enrollment";
@@ -9511,7 +9525,7 @@ function PlaylistItemsList({ items, onSelectItem, selectedItemIndex = 0, onNavig
9511
9525
  className: "space-y-3",
9512
9526
  children: items.map((item, index) => {
9513
9527
  const relateable = item.relateable;
9514
- const imageUrl = item.image_url ?? relateable?.image_url ?? relateable?.compressed_image_url ?? DEFAULT_IMAGE$2;
9528
+ const imageUrl = item.image_url ?? relateable?.image_url ?? relateable?.compressed_image_url ?? DEFAULT_IMAGE$3;
9515
9529
  const title = item.title ?? relateable?.title ?? "Untitled";
9516
9530
  const rawPrice = relateable?.display_price || relateable?.price;
9517
9531
  const price = rawPrice && parseFloat(rawPrice.replace(/[^0-9.-]/g, "")) > 0 ? rawPrice : null;
@@ -9602,7 +9616,7 @@ function PlaylistItemsList({ items, onSelectItem, selectedItemIndex = 0, onNavig
9602
9616
  }
9603
9617
  //#endregion
9604
9618
  //#region ../../shareables/ui/src/components/screens/PlaylistDetailScreen.tsx
9605
- const DEFAULT_IMAGE$1 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
9619
+ const DEFAULT_IMAGE$2 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
9606
9620
  function PlaylistDetailScreen({ playlistId, onNavigate }) {
9607
9621
  const api = useShareablesApi();
9608
9622
  const { navigate, user, readOnly } = useShareablesUI();
@@ -9650,7 +9664,7 @@ function PlaylistDetailScreen({ playlistId, onNavigate }) {
9650
9664
  ]
9651
9665
  }) }), [displayTitle, navigate]));
9652
9666
  const selectedPlaylistItem = playlist?.items?.[selectedPlaylistItemIndex];
9653
- const displayImage = selectedPlaylistItem?.image_url ?? selectedPlaylistItem?.relateable?.image_url ?? selectedPlaylistItem?.relateable?.compressed_image_url ?? DEFAULT_IMAGE$1;
9667
+ const displayImage = selectedPlaylistItem?.image_url ?? selectedPlaylistItem?.relateable?.image_url ?? selectedPlaylistItem?.relateable?.compressed_image_url ?? DEFAULT_IMAGE$2;
9654
9668
  const displayDescription = playlist?.description || playlist?.search_engine_optimizer?.description || "";
9655
9669
  const selectedKind = selectedPlaylistItem?.kind ?? selectedPlaylistItem?.relateable?.kind;
9656
9670
  const displayVideo = selectedKind === "video" ? selectedPlaylistItem?.video_url ?? selectedPlaylistItem?.relateable?.video_url ?? void 0 : void 0;
@@ -10792,14 +10806,14 @@ function PlaylistCreateScreen({ playlistId, onBack, hideHeader, renderHeaderSlot
10792
10806
  }
10793
10807
  //#endregion
10794
10808
  //#region ../../shareables/ui/src/components/screens/FilesListingScreen.tsx
10795
- const PAGE_SIZE = 24;
10809
+ const PAGE_SIZE$1 = 24;
10796
10810
  function formatFileSize(bytes) {
10797
10811
  if (bytes < 1024) return `${bytes} B`;
10798
10812
  if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
10799
10813
  if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
10800
10814
  return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
10801
10815
  }
10802
- const DEFAULT_IMAGE = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
10816
+ const DEFAULT_IMAGE$1 = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
10803
10817
  function FilesListingScreen({ onNavigate }) {
10804
10818
  const api = useShareablesApi();
10805
10819
  const renderImage = useRenderImage();
@@ -10825,7 +10839,7 @@ function FilesListingScreen({ onNavigate }) {
10825
10839
  return await api.fileResources.getFileResources({
10826
10840
  search_query: debouncedSearch || void 0,
10827
10841
  pageParam: pageParam.toString(),
10828
- pageSize: PAGE_SIZE.toString()
10842
+ pageSize: PAGE_SIZE$1.toString()
10829
10843
  });
10830
10844
  },
10831
10845
  getNextPageParam: (lastPage) => {
@@ -10894,7 +10908,7 @@ function FilesListingScreen({ onNavigate }) {
10894
10908
  className: "bg-muted relative aspect-square overflow-hidden rounded-lg",
10895
10909
  children: [
10896
10910
  renderImage({
10897
- src: file.preview_image_url || DEFAULT_IMAGE,
10911
+ src: file.preview_image_url || DEFAULT_IMAGE$1,
10898
10912
  alt: file.filename || "Untitled File",
10899
10913
  fill: true,
10900
10914
  className: "object-cover transition-transform group-hover:scale-105"
@@ -10928,6 +10942,219 @@ function FilesListingScreen({ onNavigate }) {
10928
10942
  });
10929
10943
  }
10930
10944
  //#endregion
10945
+ //#region ../../shareables/ui/src/components/screens/PagesListingScreen.tsx
10946
+ const PAGE_SIZE = 24;
10947
+ const DEFAULT_IMAGE = "https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png";
10948
+ function toApiSort(value) {
10949
+ return value === "newest" ? void 0 : value;
10950
+ }
10951
+ function PagesListingScreen({ onNavigate }) {
10952
+ const api = useShareablesApi();
10953
+ const renderImage = useRenderImage();
10954
+ require_ScreenHeaderContext.useScreenHeaderBreadcrumbs((0, react.useMemo)(() => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Breadcrumb, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbList, {
10955
+ className: "text-lg",
10956
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbItem, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbPage, {
10957
+ className: "font-semibold",
10958
+ children: "Pages"
10959
+ }) })
10960
+ }) }), []));
10961
+ const [searchTerm, setSearchTerm] = (0, react.useState)("");
10962
+ const [debouncedSearch, setDebouncedSearch] = (0, react.useState)("");
10963
+ const [sortValue, setSortValue] = (0, react.useState)("newest");
10964
+ const observerTarget = (0, react.useRef)(null);
10965
+ (0, react.useEffect)(() => {
10966
+ const timer = setTimeout(() => setDebouncedSearch(searchTerm), 300);
10967
+ return () => clearTimeout(timer);
10968
+ }, [searchTerm]);
10969
+ const { data, isLoading, isFetchingNextPage, hasNextPage, fetchNextPage, error } = (0, _tanstack_react_query.useInfiniteQuery)({
10970
+ queryKey: shareablesKeys.pages.list(debouncedSearch, sortValue),
10971
+ queryFn: async ({ pageParam }) => {
10972
+ const response = await api.pages.listPages({
10973
+ cursor: pageParam,
10974
+ limit: PAGE_SIZE,
10975
+ "filter[title]": debouncedSearch || void 0,
10976
+ sort: toApiSort(sortValue)
10977
+ });
10978
+ return {
10979
+ pages: response.pages,
10980
+ nextCursor: response.meta.pagination?.next_cursor ?? null
10981
+ };
10982
+ },
10983
+ getNextPageParam: (lastPage) => lastPage.nextCursor ?? void 0,
10984
+ initialPageParam: void 0,
10985
+ placeholderData: _tanstack_react_query.keepPreviousData
10986
+ });
10987
+ const allPages = (0, react.useMemo)(() => data?.pages.flatMap((p) => p.pages) ?? [], [data?.pages]);
10988
+ (0, react.useEffect)(() => {
10989
+ const target = observerTarget.current;
10990
+ if (!target) return;
10991
+ const observer = new IntersectionObserver((entries) => {
10992
+ if (entries[0]?.isIntersecting && hasNextPage && !isFetchingNextPage) fetchNextPage();
10993
+ }, {
10994
+ threshold: 0,
10995
+ rootMargin: "200px"
10996
+ });
10997
+ observer.observe(target);
10998
+ return () => observer.disconnect();
10999
+ }, [
11000
+ fetchNextPage,
11001
+ hasNextPage,
11002
+ isFetchingNextPage
11003
+ ]);
11004
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShareableListLayout, {
11005
+ isLoading,
11006
+ error,
11007
+ errorMessage: "Failed to load pages. Please try again.",
11008
+ isEmpty: allPages.length === 0 && !isFetchingNextPage,
11009
+ emptyMessage: debouncedSearch ? `No pages match "${debouncedSearch}". Try a different search term.` : "No pages available.",
11010
+ filters: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11011
+ className: "flex justify-end",
11012
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11013
+ className: "w-full max-w-sm",
11014
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SearchSort.SearchSort, {
11015
+ searchValue: searchTerm,
11016
+ onSearchChange: setSearchTerm,
11017
+ placeholder: "Search pages...",
11018
+ sortOptions: [
11019
+ {
11020
+ label: "Newest first",
11021
+ value: "newest"
11022
+ },
11023
+ {
11024
+ label: "Title (A-Z)",
11025
+ value: "title_asc"
11026
+ },
11027
+ {
11028
+ label: "Title (Z-A)",
11029
+ value: "title_desc"
11030
+ }
11031
+ ],
11032
+ sortValue,
11033
+ onSortChange: (v) => setSortValue(v)
11034
+ })
11035
+ })
11036
+ }),
11037
+ footer: isFetchingNextPage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11038
+ className: "flex justify-center py-4",
11039
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "border-primary h-6 w-6 animate-spin rounded-full border-2 border-t-transparent" })
11040
+ }),
11041
+ sentinelRef: observerTarget,
11042
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11043
+ className: SHAREABLE_GRID_CLASS,
11044
+ children: allPages.map((page) => {
11045
+ const title = page.title || "Untitled Page";
11046
+ const openDetail = () => onNavigate?.("pages", String(page.id));
11047
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Card, {
11048
+ role: "button",
11049
+ tabIndex: 0,
11050
+ onClick: openDetail,
11051
+ onKeyDown: (e) => {
11052
+ if (e.key === "Enter" || e.key === " ") {
11053
+ e.preventDefault();
11054
+ openDetail();
11055
+ }
11056
+ },
11057
+ className: "group hover:bg-muted cursor-pointer gap-0 overflow-hidden rounded-lg border-0 p-0 shadow-none transition-colors",
11058
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11059
+ className: "bg-muted relative aspect-square overflow-hidden rounded-lg",
11060
+ children: [renderImage({
11061
+ src: page.image_url || DEFAULT_IMAGE,
11062
+ alt: title,
11063
+ fill: true,
11064
+ className: "object-cover transition-transform group-hover:scale-105"
11065
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Badge, {
11066
+ className: "absolute top-2 right-2 shadow-lg",
11067
+ variant: page.status === "published" ? "default" : "secondary",
11068
+ children: page.status === "published" ? "Published" : "Unpublished"
11069
+ })]
11070
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11071
+ className: "px-2 pt-2 pb-4",
11072
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
11073
+ className: "text-foreground line-clamp-2 text-sm leading-tight font-bold",
11074
+ children: title
11075
+ }), page.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11076
+ className: "text-muted-foreground mt-1 line-clamp-2 text-xs",
11077
+ children: page.description
11078
+ })]
11079
+ })]
11080
+ }, page.id);
11081
+ })
11082
+ })
11083
+ });
11084
+ }
11085
+ //#endregion
11086
+ //#region ../../shareables/ui/src/components/screens/PageDetailScreen.tsx
11087
+ function PageDetailScreen({ pageId, onBack }) {
11088
+ const api = useShareablesApi();
11089
+ const { navigate } = useShareablesUI();
11090
+ const { data: pageResponse, isLoading } = (0, _tanstack_react_query.useQuery)({
11091
+ queryKey: shareablesKeys.pages.detail(Number(pageId)),
11092
+ queryFn: () => api.pages.getPage(Number(pageId))
11093
+ });
11094
+ const page = pageResponse?.page;
11095
+ const displayTitle = page?.title || "";
11096
+ const displayImage = page?.image_url || "";
11097
+ const description = page?.description ?? "";
11098
+ const { shareLink, loading: shareLinkLoading, error: shareLinkError } = useShareLink({
11099
+ id: page?.id,
11100
+ share_link: pageResponse?.share_link ?? void 0
11101
+ }, "Page");
11102
+ require_ScreenHeaderContext.useScreenHeaderBreadcrumbs((0, react.useMemo)(() => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Breadcrumb, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.BreadcrumbList, {
11103
+ className: "text-lg",
11104
+ children: [
11105
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbItem, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbLink, {
11106
+ href: "#",
11107
+ onClick: (e) => {
11108
+ e.preventDefault();
11109
+ (onBack ?? (() => navigate("pages")))();
11110
+ },
11111
+ children: "Pages"
11112
+ }) }),
11113
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbSeparator, {}),
11114
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbItem, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbPage, {
11115
+ className: "block max-w-[60vw] truncate align-bottom font-semibold md:max-w-[60ch]",
11116
+ children: displayTitle || "Page"
11117
+ }) })
11118
+ ]
11119
+ }) }), [
11120
+ displayTitle,
11121
+ onBack,
11122
+ navigate
11123
+ ]));
11124
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShareableDetailLayout, {
11125
+ isLoading,
11126
+ notFound: !page && !isLoading,
11127
+ notFoundMessage: "Page not found or failed to load.",
11128
+ title: displayTitle,
11129
+ description,
11130
+ containerHeightClass: "md:h-[calc(95vh-140px)]",
11131
+ image: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11132
+ className: "relative h-full overflow-hidden",
11133
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SharePageImageDisplay, {
11134
+ displayImage,
11135
+ displayTitle,
11136
+ isVideo: false,
11137
+ badgeLabel: "Page",
11138
+ rounded: true,
11139
+ showBadge: false
11140
+ }), page && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Badge, {
11141
+ variant: page.status === "published" ? "default" : "secondary",
11142
+ className: "bg-background/80 text-foreground absolute top-3 right-3 z-0 inline-flex h-8 items-center rounded-full px-3 text-xs font-medium shadow-md backdrop-blur-sm",
11143
+ children: page.status === "published" ? "Published" : "Unpublished"
11144
+ })]
11145
+ }),
11146
+ actions: page && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AssetActions, {
11147
+ downloadUrl: null,
11148
+ displayTitle,
11149
+ shareLink: shareLinkError ? null : shareLink || null,
11150
+ shareLinkLoading,
11151
+ isVideo: false,
11152
+ relateableId: page.id,
11153
+ relateableType: "Page"
11154
+ })
11155
+ });
11156
+ }
11157
+ //#endregion
10931
11158
  //#region ../../shareables/ui/src/components/ShareablesApp.tsx
10932
11159
  function ShareablesApp({ screen, detailId, action, onNavigate, onBack, countryCode, fetchProducts, fetchProduct }) {
10933
11160
  const { readOnly } = useShareablesUI();
@@ -10967,6 +11194,13 @@ function ShareablesApp({ screen, detailId, action, onNavigate, onBack, countryCo
10967
11194
  case "files":
10968
11195
  content = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FilesListingScreen, { onNavigate });
10969
11196
  break;
11197
+ case "pages":
11198
+ case "page":
11199
+ content = detailId && detailId !== "new" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageDetailScreen, {
11200
+ pageId: detailId,
11201
+ onBack
11202
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PagesListingScreen, { onNavigate });
11203
+ break;
10970
11204
  default:
10971
11205
  content = detailId ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProductDetailScreen, {
10972
11206
  productId: detailId,
@@ -11736,6 +11970,63 @@ function createShareAdapter(client) {
11736
11970
  })).share.url;
11737
11971
  } };
11738
11972
  }
11973
+ function mapPage(raw) {
11974
+ return {
11975
+ id: raw.id ?? 0,
11976
+ title: raw.title ?? null,
11977
+ slug: raw.slug ?? null,
11978
+ source: raw.source ?? null,
11979
+ status: raw.status ?? "unpublished",
11980
+ countries: (raw.countries ?? []).map((c) => ({
11981
+ code: c.code ?? "",
11982
+ name: c.name ?? "",
11983
+ currency_code: c.currency_code ?? "",
11984
+ states: (c.states ?? []).map((s) => ({
11985
+ code: s.code ?? "",
11986
+ name: s.name ?? ""
11987
+ }))
11988
+ })),
11989
+ description: raw.description ?? null,
11990
+ image_url: raw.image_url ?? null
11991
+ };
11992
+ }
11993
+ function mapPagesMeta(raw) {
11994
+ return {
11995
+ request_id: raw?.request_id ?? null,
11996
+ timestamp: raw?.timestamp ?? "",
11997
+ pagination: raw?.pagination ? {
11998
+ cursor: raw.pagination.cursor ?? null,
11999
+ limit: raw.pagination.limit,
12000
+ next_cursor: raw.pagination.next_cursor ?? null,
12001
+ prev_cursor: raw.pagination.prev_cursor ?? null
12002
+ } : void 0
12003
+ };
12004
+ }
12005
+ function createRawPagesAdapter(client) {
12006
+ return {
12007
+ listPages: async (params) => {
12008
+ const response = await require_portal_tenant_content.pages_list(client, {
12009
+ "page[cursor]": params?.cursor,
12010
+ "page[limit]": params?.limit,
12011
+ "filter[title]": params?.["filter[title]"],
12012
+ sort: params?.sort
12013
+ });
12014
+ return {
12015
+ pages: (response.pages ?? []).map(mapPage),
12016
+ meta: mapPagesMeta(response.meta)
12017
+ };
12018
+ },
12019
+ getPage: async (id) => {
12020
+ const response = await require_portal_tenant_content.pages_show(client, id);
12021
+ if (!response.page) throw new Error(`Page ${id} not found`);
12022
+ return {
12023
+ page: mapPage(response.page),
12024
+ share_link: response.share_link ?? null,
12025
+ meta: mapPagesMeta(response.meta)
12026
+ };
12027
+ }
12028
+ };
12029
+ }
11739
12030
  function mapDamAsset(raw) {
11740
12031
  return {
11741
12032
  id: raw.id ?? 0,
@@ -11866,7 +12157,7 @@ function mapMetricsMeta(raw) {
11866
12157
  function createMetricsAdapter(client) {
11867
12158
  return {
11868
12159
  listMediaVisited: async (params) => {
11869
- const response = await require_portal_tenant_content.content_media_metrics_visits(client, {
12160
+ const response = await require_portal_tenant_content.content_media_by_visits(client, {
11870
12161
  period: params?.period,
11871
12162
  limit: params?.limit
11872
12163
  });
@@ -11876,7 +12167,7 @@ function createMetricsAdapter(client) {
11876
12167
  };
11877
12168
  },
11878
12169
  listMediaShareVisited: async (params) => {
11879
- const response = await require_portal_tenant_content.content_media_metrics_share_visits(client, {
12170
+ const response = await require_portal_tenant_content.content_media_by_shares(client, {
11880
12171
  period: params?.period,
11881
12172
  limit: params?.limit
11882
12173
  });
@@ -11886,7 +12177,7 @@ function createMetricsAdapter(client) {
11886
12177
  };
11887
12178
  },
11888
12179
  listPlaylistsVisited: async (params) => {
11889
- const response = await require_portal_tenant_content.content_playlists_metrics_visits(client, {
12180
+ const response = await require_portal_tenant_content.content_playlists_by_visits(client, {
11890
12181
  period: params?.period,
11891
12182
  limit: params?.limit
11892
12183
  });
@@ -11896,7 +12187,7 @@ function createMetricsAdapter(client) {
11896
12187
  };
11897
12188
  },
11898
12189
  listPlaylistsShareVisited: async (params) => {
11899
- const response = await require_portal_tenant_content.content_playlists_metrics_share_visits(client, {
12190
+ const response = await require_portal_tenant_content.content_playlists_by_shares(client, {
11900
12191
  period: params?.period,
11901
12192
  limit: params?.limit
11902
12193
  });
@@ -11906,7 +12197,7 @@ function createMetricsAdapter(client) {
11906
12197
  };
11907
12198
  },
11908
12199
  listPagesVisited: async (params) => {
11909
- const response = await require_portal_tenant_content.content_pages_metrics_visits(client, {
12200
+ const response = await require_portal_tenant_content.content_pages_by_visits(client, {
11910
12201
  period: params?.period,
11911
12202
  limit: params?.limit
11912
12203
  });
@@ -11916,7 +12207,7 @@ function createMetricsAdapter(client) {
11916
12207
  };
11917
12208
  },
11918
12209
  listPagesShareVisited: async (params) => {
11919
- const response = await require_portal_tenant_content.content_pages_metrics_share_visits(client, {
12210
+ const response = await require_portal_tenant_content.content_pages_by_shares(client, {
11920
12211
  period: params?.period,
11921
12212
  limit: params?.limit
11922
12213
  });
@@ -11964,7 +12255,8 @@ function createPortalContentDomainApiAdapter(client, productsApi) {
11964
12255
  fileResources: createFileResourcesAdapter(client),
11965
12256
  share: createShareAdapter(client),
11966
12257
  productMedia: createProductMediaAdapter(productsApi),
11967
- metrics: createMetricsAdapter(client)
12258
+ metrics: createMetricsAdapter(client),
12259
+ pages: createRawPagesAdapter(client)
11968
12260
  };
11969
12261
  }
11970
12262
  /**
@@ -12219,4 +12511,4 @@ Object.defineProperty(exports, "shareablesScreenPropertySchema", {
12219
12511
  }
12220
12512
  });
12221
12513
 
12222
- //# sourceMappingURL=ShareablesScreen-DtR0PfSD.cjs.map
12514
+ //# sourceMappingURL=ShareablesScreen-AMlPuFFk.cjs.map