bitsnap-react 1.7.0 → 1.8.0

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 (85) hide show
  1. package/dist/CartProvider-5KAG5QGA.mjs +2 -0
  2. package/dist/CartProvider-7GJXW2IP.js +2 -0
  3. package/dist/CartProvider-7GJXW2IP.js.map +1 -0
  4. package/dist/catalog.js +1 -1
  5. package/dist/catalog.js.map +1 -1
  6. package/dist/catalog.mjs +1 -1
  7. package/dist/chunk-45AP7UZE.mjs +2 -0
  8. package/dist/chunk-45AP7UZE.mjs.map +1 -0
  9. package/dist/chunk-7XTDFTQU.js +4 -0
  10. package/dist/chunk-7XTDFTQU.js.map +1 -0
  11. package/dist/chunk-C6Z7LOHB.mjs +2 -0
  12. package/dist/chunk-C6Z7LOHB.mjs.map +1 -0
  13. package/dist/chunk-HB6KQT26.mjs +4 -0
  14. package/dist/chunk-HB6KQT26.mjs.map +1 -0
  15. package/dist/chunk-JSDGZ4NY.js +2 -0
  16. package/dist/chunk-JSDGZ4NY.js.map +1 -0
  17. package/dist/chunk-KOVKUJAW.mjs +2 -0
  18. package/dist/chunk-KOVKUJAW.mjs.map +1 -0
  19. package/dist/chunk-KOYBZORL.js +2 -0
  20. package/dist/chunk-KOYBZORL.js.map +1 -0
  21. package/dist/chunk-LWK4E5G5.js +2 -0
  22. package/dist/chunk-LWK4E5G5.js.map +1 -0
  23. package/dist/chunk-OJT3YO2R.mjs +2 -0
  24. package/dist/{chunk-6KQBDN7M.mjs.map → chunk-OJT3YO2R.mjs.map} +1 -1
  25. package/dist/chunk-OUYRKNZJ.mjs +2 -0
  26. package/dist/chunk-OUYRKNZJ.mjs.map +1 -0
  27. package/dist/chunk-P2YB25KZ.js +2 -0
  28. package/dist/chunk-P2YB25KZ.js.map +1 -0
  29. package/dist/chunk-T2POA6RW.js +2 -0
  30. package/dist/chunk-T2POA6RW.js.map +1 -0
  31. package/dist/chunk-VPKE2ZOR.mjs +2 -0
  32. package/dist/{chunk-6W4FCL22.mjs.map → chunk-VPKE2ZOR.mjs.map} +1 -1
  33. package/dist/chunk-WRCXZMKK.js +2 -0
  34. package/dist/chunk-WRCXZMKK.js.map +1 -0
  35. package/dist/chunk-WSM4OM72.mjs +2 -0
  36. package/dist/chunk-WSM4OM72.mjs.map +1 -0
  37. package/dist/chunk-XRNTUSBH.js +2 -0
  38. package/dist/chunk-XRNTUSBH.js.map +1 -0
  39. package/dist/chunk-Z2BKIX6F.js +2 -0
  40. package/dist/chunk-Z2BKIX6F.js.map +1 -0
  41. package/dist/course.d.mts +1872 -0
  42. package/dist/course.d.ts +1872 -0
  43. package/dist/course.js +2 -0
  44. package/dist/course.js.map +1 -0
  45. package/dist/course.mjs +2 -0
  46. package/dist/course.mjs.map +1 -0
  47. package/dist/errors.js +1 -1
  48. package/dist/errors.js.map +1 -1
  49. package/dist/index.css +1 -1
  50. package/dist/index.css.map +1 -1
  51. package/dist/index.d.mts +10 -36
  52. package/dist/index.d.ts +10 -36
  53. package/dist/index.js +1 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.mjs +1 -1
  56. package/dist/index.mjs.map +1 -1
  57. package/dist/internal.js +1 -1
  58. package/dist/internal.js.map +1 -1
  59. package/dist/methods-ITD6WFIY.mjs +2 -0
  60. package/dist/methods-JENIGNF7.js +2 -0
  61. package/dist/methods-JENIGNF7.js.map +1 -0
  62. package/dist/models.js +1 -1
  63. package/dist/models.js.map +1 -1
  64. package/dist/returns.d.mts +5 -195
  65. package/dist/returns.d.ts +5 -195
  66. package/dist/returns.js +1 -1
  67. package/dist/returns.js.map +1 -1
  68. package/dist/returns.mjs +1 -1
  69. package/dist/texts-CIEFbJTN.d.ts +196 -0
  70. package/dist/texts-tQtAGJCT.d.mts +196 -0
  71. package/dist/types-BTm_ZolC.d.ts +40 -0
  72. package/dist/types-PSBBDdQm.d.mts +40 -0
  73. package/package.json +57 -22
  74. package/dist/CartProvider-FQCDE3HZ.mjs +0 -2
  75. package/dist/chunk-3TENJTY4.mjs +0 -2
  76. package/dist/chunk-3TENJTY4.mjs.map +0 -1
  77. package/dist/chunk-4HOZFM6V.mjs +0 -2
  78. package/dist/chunk-4HOZFM6V.mjs.map +0 -1
  79. package/dist/chunk-6KQBDN7M.mjs +0 -2
  80. package/dist/chunk-6N24OFUB.mjs +0 -4
  81. package/dist/chunk-6N24OFUB.mjs.map +0 -1
  82. package/dist/chunk-6W4FCL22.mjs +0 -2
  83. package/dist/methods-J7S63RTQ.mjs +0 -2
  84. /package/dist/{CartProvider-FQCDE3HZ.mjs.map → CartProvider-5KAG5QGA.mjs.map} +0 -0
  85. /package/dist/{methods-J7S63RTQ.mjs.map → methods-ITD6WFIY.mjs.map} +0 -0
@@ -1,2 +0,0 @@
1
- import{a as E,b as $,c as N,d as K,e as V,f as G,h as q,j as k}from"./chunk-3TENJTY4.mjs";var dt=["root","grid","card","cardLink","image","imagePlaceholder","body","name","description","price","comparePrice","badge","actions","addToCartButton","selectButton","message","pagination","paginationButton","pageIndicator","emptyState","error","retryButton","skeleton"],ut={fontFamily:"--bitsnap-products-font-family",fontSize:"--bitsnap-products-font-size",background:"--bitsnap-products-background",surface:"--bitsnap-products-surface",foreground:"--bitsnap-products-foreground",mutedForeground:"--bitsnap-products-muted-foreground",border:"--bitsnap-products-border",buttonBackground:"--bitsnap-products-button-background",buttonForeground:"--bitsnap-products-button-foreground",buttonHoverBackground:"--bitsnap-products-button-hover-background",hoverSurface:"--bitsnap-products-hover-surface",focusRing:"--bitsnap-products-focus-ring",error:"--bitsnap-products-error",badgeBackground:"--bitsnap-products-badge-background",badgeForeground:"--bitsnap-products-badge-foreground",radius:"--bitsnap-products-radius"},lt={light:{background:"#ffffff",surface:"#f9fafb",foreground:"#18181b",mutedForeground:"#71717a",border:"#e4e4e7",buttonBackground:"#18181b",buttonForeground:"#fafafa",buttonHoverBackground:"#000000",hoverSurface:"#f4f4f5",focusRing:"#71717a",error:"#dc2626",badgeBackground:"#f4f4f5",badgeForeground:"#3f3f46",radius:"8px"},dark:{background:"#18181b",surface:"#27272a",foreground:"#fafafa",mutedForeground:"#a1a1aa",border:"#3f3f46",buttonBackground:"#fafafa",buttonForeground:"#18181b",buttonHoverBackground:"#e4e4e7",hoverSurface:"#3f3f46",focusRing:"#a1a1aa",error:"#f87171",badgeBackground:"#3f3f46",badgeForeground:"#e4e4e7",radius:"8px"}},pt=[];function Z(t){let e=V(t,{defaultTheme:"light",presets:lt,variables:ut,shadcnVariables:pt});return{theme:e.theme,tokens:e.tokens,elements:e.elements,boundaryClassName:e.theme,boundaryStyle:e.boundaryStyle}}function j(t,e){return G(t.elements,e)}function Q(t,e){try{return new Intl.NumberFormat(t,{style:"currency",currency:e,currencyDisplay:"symbol"})}catch{return}}function _(t,e,r=k){let o=t/100,n=Q(r,e)??Q(k,e);return n!=null?n.format(o):`${o.toFixed(2)} ${e}`}import{useCallback as W,useEffect as ft,useMemo as Pt,useState as B}from"react";var O=class extends Error{status;constructor(e,r){super(e),this.name="ProductListError",this.status=r}};function R(t){return t==null||!Number.isFinite(t)?24:Math.min(48,Math.max(1,Math.floor(t)))}function X(t,e){return Math.max(1,Math.ceil(t/e))}function I(t){return t.replace(/\/+$/,"")}function gt(t){let e=new URLSearchParams;e.set("limit",String(t.limit)),e.set("offset",String(t.offset)),t.locale&&e.set("locale",t.locale);let r=t.search?.trim();return r&&e.set("search",r),`${I(t.host)}/api/integrations/${encodeURIComponent(t.projectID)}/public-commerce/product-list?${e.toString()}`}function mt(t){return typeof t=="object"&&t!=null&&Array.isArray(t.items)&&typeof t.totalCount=="number"}async function J(t,e){let r=await fetch(gt(t),{method:"GET",credentials:"omit",headers:{Accept:"application/json"},signal:e});if(!r.ok)throw new O(`Could not load products (${r.status})`,r.status);let o=await r.json();if(!mt(o))throw new O("Unexpected product list response");return o}function F(t){let{projectID:e,locale:r,search:o,initialData:n}=t,[s]=B(()=>N),l=t.host??s,p=R(t.pageSize),c=JSON.stringify([e,l,r??null,o?.trim()??null,p]),[d,g]=B({queryKey:c,page:1});d.queryKey!==c&&g({queryKey:c,page:1});let[T,C]=B(0),[f,S]=B(()=>({requestKey:n!=null?`${c}|1|0`:"",data:n,error:void 0})),b=f.data?.totalCount??0,L=X(b,p),A=d.queryKey===c?d.page:1,y=b>0?Math.min(A,L):A,x=`${c}|${y}|${T}`,P=f.requestKey===x;ft(()=>{if(P)return;let m=new AbortController;return J({projectID:e,host:l,locale:r,search:o,limit:p,offset:(y-1)*p},m.signal).then(u=>{m.signal.aborted||S({requestKey:x,data:u,error:void 0})},u=>{m.signal.aborted||S(ct=>({requestKey:x,data:ct.data,error:u instanceof Error?u:new Error(String(u))}))}),()=>m.abort()},[x,P]);let v=W(m=>{let u=Math.max(1,Math.floor(m));g({queryKey:c,page:b>0?Math.min(u,L):u})},[c,b,L]),D=W(()=>C(m=>m+1),[]);return Pt(()=>({products:f.data?.items??[],totalCount:b,page:y,pageCount:L,setPage:v,isLoading:!P,error:P?f.error:void 0,refetch:D}),[f,b,y,L,v,P,D])}import{createContext as yt,useCallback as M,useContext as xt,useEffect as ot,useMemo as H,useRef as rt,useState as ht}from"react";function Y(t,e){if(t.projectID!=null&&t.projectID!==e.projectID)return{ok:!1,reason:`the page cart already belongs to project "${t.projectID}"`};let r=null,o=e.host?I(e.host):"",n=I(t.host);if(o&&o!==n){if(n!==I(t.defaultHost))return{ok:!1,reason:`the page cart already uses the host "${t.host}"`};r=o}return{ok:!0,setProjectID:t.projectID==null?e.projectID:null,setHost:r}}async function tt(t,e){let[{Bitsnap:r},{getProjectID:o,setProjectID:n}]=await Promise.all([import("./methods-J7S63RTQ.mjs"),import("./CartProvider-FQCDE3HZ.mjs")]),s=Y({projectID:o(),host:N,defaultHost:$},e);if(!s.ok)return bt(s.reason);if(s.setProjectID!=null&&n(s.setProjectID),s.setHost!=null&&K(s.setHost),await r.addProductToCart(t.cartItemId??t.id,1,void 0,{name:t.name,price:t.price,currency:t.currency})!=null)throw new Error("Could not add the product to the cart");e.showCart&&r.showCart()}function bt(t){throw console.warn(`bitsnap-react: ProductList did not add to the cart because ${t}. Pass onAddToCart to use another cart.`),new Error("The page cart belongs to another project or host")}var Lt={en:{addToCart:"Add to cart",addingToCart:"Adding\u2026",addedToCart:"Added to cart",addToCartError:"Could not add to the cart. Try again.",chooseOptions:"Choose",viewProduct:"View",unavailable:"Unavailable",subscription:"Subscription",priceFrom:"from {price}",originalPrice:"Original price",loading:"Loading products",empty:"There are no products to show.",error:"Could not load the products.",retry:"Try again",pagination:"Pagination",previousPage:"Previous",nextPage:"Next",pageOf:"Page {page} of {pageCount}"},pl:{addToCart:"Dodaj do koszyka",addingToCart:"Dodawanie\u2026",addedToCart:"Dodano do koszyka",addToCartError:"Nie uda\u0142o si\u0119 doda\u0107 do koszyka. Spr\xF3buj ponownie.",chooseOptions:"Wybierz",viewProduct:"Zobacz",unavailable:"Niedost\u0119pny",subscription:"Subskrypcja",priceFrom:"od {price}",originalPrice:"Cena przed obni\u017Ck\u0105",loading:"\u0141adowanie produkt\xF3w",empty:"Brak produkt\xF3w do wy\u015Bwietlenia.",error:"Nie uda\u0142o si\u0119 za\u0142adowa\u0107 produkt\xF3w.",retry:"Spr\xF3buj ponownie",pagination:"Paginacja",previousPage:"Poprzednia",nextPage:"Nast\u0119pna",pageOf:"Strona {page} z {pageCount}"}};function et(t,e){return q(Lt,t,e)}function U(t,e){return t.replace(/\{(\w+)\}/g,(r,o)=>o in e?String(e[o]):r)}import{Fragment as it,jsx as a,jsxs as h}from"react/jsx-runtime";var nt=yt(void 0);function w(){let t=xt(nt);if(t==null)throw new Error("ProductList parts must be rendered inside ProductList");return t}function i(t,e){let{appearance:r}=w(),o=j(r,t);return{"data-bitsnap-products-slot":t,className:E(e,o?.className),style:o?.style}}var z="inline-flex cursor-pointer items-center justify-center px-4 py-2 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:opacity-50",at=`${z} w-full`,Tt=`${at} no-underline`;function Ct({product:t,onAdd:e}){let{texts:r}=w(),[o,n]=ht("idle"),s=i("addToCartButton",at),l=i("message","mt-2 text-xs");ot(()=>{if(o!=="added")return;let d=setTimeout(()=>n("idle"),2e3);return()=>clearTimeout(d)},[o]);let p=M(async()=>{n("adding");try{await e(),n("added")}catch(d){console.error("bitsnap-react: could not add to the cart",d),n("error")}},[e]),c=o==="adding"?r.addingToCart:o==="added"?r.addedToCart:r.addToCart;return h(it,{children:[a("button",{type:"button",...s,disabled:o==="adding","aria-label":`${c}: ${t.name}`,onClick:p,children:c}),o==="error"?a("p",{...l,role:"alert",children:r.addToCartError}):null]})}function St({product:t,href:e,onAdd:r,renderItem:o}){let{texts:n,locale:s}=w(),l=i("card","relative flex flex-col overflow-hidden border transition-colors"),p=i("cardLink","flex flex-1 flex-col no-underline"),c=i("image","aspect-square w-full overflow-hidden"),d=i("imagePlaceholder","aspect-square w-full"),g=i("body","flex flex-1 flex-col gap-1 p-4"),T=i("name","text-base font-medium leading-snug"),C=i("description","line-clamp-2 text-sm"),f=i("price","mt-auto pt-2 text-base font-semibold"),S=i("comparePrice","ml-2 text-sm font-normal"),b=i("badge","absolute left-3 top-3 px-2 py-0.5 text-xs font-medium"),L=i("actions","p-4 pt-0"),A=i("selectButton",Tt),y=_(t.price,t.currency,s),x=t.compareAtPrice!=null&&t.compareAtPrice>t.price?_(t.compareAtPrice,t.currency,s):null;if(o!=null)return a("li",{...l,"data-unavailable":t.available?void 0:"",children:o(t,{href:e,price:y,compareAtPrice:x,texts:n,locale:s,addToCart:r})});let P=t.image?.thumbnailUrl??t.image?.url,v=t.available?t.isRecurring?n.subscription:null:n.unavailable;return h("li",{...l,"data-unavailable":t.available?void 0:"",children:[h("a",{...p,href:e,children:[P!=null?a("div",{...c,children:a("img",{src:P,alt:"",loading:"lazy",decoding:"async",className:"h-full w-full object-cover"})}):a("div",{...d,"aria-hidden":"true"}),h("div",{...g,children:[a("h3",{...T,children:t.name}),t.shortDescription?a("p",{...C,children:t.shortDescription}):null,h("p",{...f,children:[t.priceFrom?U(n.priceFrom,{price:y}):y,x!=null?h(it,{children:[h("span",{className:"sr-only",children:[n.originalPrice,": "]}),a("del",{...S,children:x})]}):null]})]})]}),v!=null?a("span",{...b,"data-kind":t.available?"subscription":"unavailable",children:v}):null,a("div",{...L,children:t.available?t.addToCart?a(Ct,{product:t,onAdd:r}):a("a",{...A,href:e,children:t.variantCount>1?n.chooseOptions:n.viewProduct}):a("button",{type:"button",...A,disabled:!0,children:n.unavailable})})]})}var st="m-0 grid list-none grid-cols-[repeat(auto-fill,minmax(min(100%,15rem),1fr))] gap-5 p-0";function vt({count:t,label:e}){let r=i("grid",st),o=i("skeleton","aspect-[3/4] animate-pulse");return a("div",{...r,role:"status","aria-busy":"true","aria-label":e,children:Array.from({length:t},(n,s)=>a("div",{...o,"aria-hidden":"true"},s))})}function At({page:t,pageCount:e,isLoading:r,onPage:o}){let{texts:n}=w(),s=i("pagination","mt-8 flex items-center justify-center gap-4"),l=i("paginationButton",z),p=i("pageIndicator","text-sm");return h("nav",{...s,"aria-label":n.pagination,children:[a("button",{type:"button",...l,"aria-disabled":r||t<=1,onClick:()=>{!r&&t>1&&o(t-1)},children:n.previousPage}),a("span",{...p,"aria-live":"polite",children:U(n.pageOf,{page:t,pageCount:e})}),a("button",{type:"button",...l,"aria-disabled":r||t>=e,onClick:()=>{!r&&t<e&&o(t+1)},children:n.nextPage})]})}function kt({options:t,productHref:e,renderItem:r,onAddToCart:o,showCartOnAdd:n}){let{texts:s}=w(),{products:l,page:p,pageCount:c,setPage:d,isLoading:g,error:T,refetch:C}=F(t),f=rt(null),S=rt(!1),b=M(u=>{S.current=!0,d(u)},[d]);ot(()=>{g||!S.current||(S.current=!1,f.current?.focus({preventScroll:!0}),f.current?.scrollIntoView({block:"start"}))},[g]);let L=i("grid",st),A=i("emptyState","py-12 text-center text-sm"),y=i("error","flex flex-col items-center gap-3 py-12 text-center text-sm"),x=i("retryButton",z),{projectID:P,host:v}=t,D=M(u=>()=>o!=null?Promise.resolve(o(u)):tt(u,{projectID:P,host:v,showCart:n}),[o,P,v,n]),m;return g&&l.length===0?m=a(vt,{count:Math.min(R(t.pageSize),8),label:s.loading}):T!=null?m=h("div",{...y,role:"alert",children:[a("p",{children:s.error}),a("button",{type:"button",...x,onClick:C,children:s.retry})]}):l.length===0?m=a("p",{...A,children:s.empty}):m=a("ul",{...L,"aria-busy":g||void 0,className:E(L.className,g&&"opacity-60"),children:l.map(u=>a(St,{product:u,href:e(u),onAdd:D(u),renderItem:r},u.id))}),h("div",{ref:f,tabIndex:-1,className:"p-1 outline-none scroll-mt-4",children:[m,c>1&&T==null?a(At,{page:p,pageCount:c,isLoading:g,onPage:b}):null]})}var It=t=>`/p/${encodeURIComponent(t.uniqueSlug)}`;function wt({productHref:t=It,appearance:e,texts:r,renderItem:o,onAddToCart:n,showCartOnAdd:s=!0,className:l,...p}){let c=p.locale??k,d=H(()=>Z(e),[e]),g=H(()=>et(c,r),[c,r]),T=H(()=>({appearance:d,texts:g,locale:c}),[d,g,c]),C=j(d,"root");return a(nt.Provider,{value:T,children:a("div",{"data-bitsnap-products":"root","data-bitsnap-products-slot":"root",className:E("bitsnap-react",d.boundaryClassName,l,C?.className),style:{...d.boundaryStyle,...C?.style},children:a(kt,{options:p,productHref:t,renderItem:o,onAddToCart:n,showCartOnAdd:s})})})}export{dt as a,_ as b,F as c,wt as d};
2
- //# sourceMappingURL=chunk-6W4FCL22.mjs.map
@@ -1,2 +0,0 @@
1
- import{G as a,H as b,I as c,J as d,K as e}from"./chunk-6N24OFUB.mjs";import"./chunk-4HOZFM6V.mjs";import"./chunk-3TENJTY4.mjs";import"./chunk-U6FLIRIV.mjs";export{a as Bitsnap,c as createCheckout,b as createPaymentURL,d as getReferenceIfPossible,e as injectReferenceToRequestIfNeeded};
2
- //# sourceMappingURL=methods-J7S63RTQ.mjs.map