@occluze/tether 0.6.7 → 0.7.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 (250) hide show
  1. package/README.md +11 -11
  2. package/dist/esm/astro.js +2 -2
  3. package/dist/esm/chunks/account-UIPWJQ3Y.js +1 -0
  4. package/dist/esm/chunks/account-pages-6ROA6Y4V.js +1 -0
  5. package/dist/esm/chunks/analytics-2V632IRV.js +1 -0
  6. package/dist/esm/chunks/chunk-4GCXM764.js +1 -0
  7. package/dist/esm/chunks/chunk-56FCLJJD.js +1 -0
  8. package/dist/esm/chunks/chunk-5Z5O3767.js +1 -0
  9. package/dist/esm/chunks/chunk-6OZJCAGZ.js +1 -0
  10. package/dist/esm/chunks/chunk-A5SYCVQM.js +1 -0
  11. package/dist/esm/chunks/chunk-BA4LQJJQ.js +1 -0
  12. package/dist/esm/chunks/chunk-BFTZR4OB.js +4 -0
  13. package/dist/esm/chunks/chunk-C5JYQCWH.js +1 -0
  14. package/dist/esm/chunks/chunk-E5YO6274.js +1 -0
  15. package/dist/esm/chunks/chunk-MPDWM2NN.js +1 -0
  16. package/dist/esm/chunks/chunk-T44MUL4Y.js +1 -0
  17. package/dist/esm/chunks/chunk-YLUULATY.js +1 -0
  18. package/dist/esm/chunks/diagnose-3FEKRIEK.js +14 -0
  19. package/dist/esm/chunks/extras-6POFBNOP.js +1 -0
  20. package/dist/esm/chunks/markets-ui-FD6NI2OG.js +1 -0
  21. package/dist/esm/chunks/search-UJ73YBQ5.js +1 -0
  22. package/dist/esm/index.js +1 -1
  23. package/dist/esm/server.js +2 -1
  24. package/dist/presets/barba.esm.js +55 -39
  25. package/dist/tether.account-pages.js +781 -495
  26. package/dist/tether.account-pages.min.js +1 -1
  27. package/dist/tether.account.js +462 -381
  28. package/dist/tether.account.min.js +1 -1
  29. package/dist/tether.analytics.js +299 -194
  30. package/dist/tether.analytics.min.js +1 -1
  31. package/dist/tether.diagnose.js +354 -262
  32. package/dist/tether.diagnose.min.js +2 -2
  33. package/dist/tether.extras.js +82 -45
  34. package/dist/tether.extras.min.js +1 -1
  35. package/dist/tether.js +3653 -2116
  36. package/dist/tether.markets.js +238 -150
  37. package/dist/tether.markets.min.js +1 -1
  38. package/dist/tether.min.js +3 -3
  39. package/dist/tether.min.js.map +4 -4
  40. package/dist/tether.search.js +207 -136
  41. package/dist/tether.search.min.js +1 -1
  42. package/dist/types/server/src/shared/account-orders.d.ts +44 -0
  43. package/dist/types/server/src/shared/account-routes.d.ts +153 -0
  44. package/dist/types/server/src/shared/api-versions.d.ts +13 -0
  45. package/dist/types/server/src/shared/error-message.d.ts +2 -0
  46. package/dist/types/server/src/shared/json.d.ts +25 -0
  47. package/dist/types/server/src/shared/market-codes.d.ts +16 -0
  48. package/dist/types/src/account/addresses-view.d.ts +5 -0
  49. package/dist/types/src/account/answers.d.ts +40 -0
  50. package/dist/types/src/account/markup.d.ts +19 -0
  51. package/dist/types/src/account/operations.d.ts +41 -0
  52. package/dist/types/src/account/order-lines.d.ts +13 -0
  53. package/dist/types/src/account/order-list.d.ts +12 -0
  54. package/dist/types/src/account/order-page.d.ts +6 -0
  55. package/dist/types/src/account/page-answers.d.ts +182 -0
  56. package/dist/types/src/account/page-events.d.ts +2 -0
  57. package/dist/types/src/account/server-client.d.ts +60 -0
  58. package/dist/types/src/account/subscriptions-view.d.ts +2 -0
  59. package/dist/types/src/account-api.d.ts +18 -0
  60. package/dist/types/src/account-marks.d.ts +15 -0
  61. package/dist/types/src/account-pages.d.ts +8 -0
  62. package/dist/types/src/account.d.ts +64 -0
  63. package/dist/types/src/amounts.d.ts +12 -0
  64. package/dist/types/src/analytics-shopify.d.ts +41 -0
  65. package/dist/types/src/analytics.d.ts +2 -0
  66. package/dist/types/src/api-version.d.ts +28 -0
  67. package/dist/types/src/astro.d.ts +42 -0
  68. package/dist/types/src/cart/cart-shape.d.ts +43 -0
  69. package/dist/types/src/cart/checkout.d.ts +16 -0
  70. package/dist/types/src/cart/drawer.d.ts +18 -0
  71. package/dist/types/src/cart/mutations.d.ts +79 -0
  72. package/dist/types/src/cart/render.d.ts +17 -0
  73. package/dist/types/src/cart/store.d.ts +182 -0
  74. package/dist/types/src/cart.d.ts +106 -0
  75. package/dist/types/src/client.d.ts +100 -0
  76. package/dist/types/src/collection.d.ts +25 -0
  77. package/dist/types/src/config-sections.d.ts +40 -0
  78. package/dist/types/src/config.d.ts +185 -0
  79. package/dist/types/src/controls/cart-controls.d.ts +2 -0
  80. package/dist/types/src/controls/discount.d.ts +2 -0
  81. package/dist/types/src/controls/extras.d.ts +5 -0
  82. package/dist/types/src/controls/navigation.d.ts +12 -0
  83. package/dist/types/src/diagnose-markup.d.ts +19 -0
  84. package/dist/types/src/diagnose.d.ts +60 -0
  85. package/dist/types/src/dom.d.ts +75 -0
  86. package/dist/types/src/extras.d.ts +21 -0
  87. package/dist/types/src/fragments.d.ts +158 -0
  88. package/dist/types/src/globals.d.ts +15 -0
  89. package/dist/types/src/images.d.ts +20 -0
  90. package/dist/types/src/index.d.ts +167 -0
  91. package/dist/types/src/initial.d.ts +56 -0
  92. package/dist/types/src/lazy.d.ts +28 -0
  93. package/dist/types/src/loader.d.ts +84 -0
  94. package/dist/types/src/market-codes.d.ts +6 -0
  95. package/dist/types/src/markets-ui.d.ts +32 -0
  96. package/dist/types/src/markets.d.ts +72 -0
  97. package/dist/types/src/markup.d.ts +131 -0
  98. package/dist/types/src/mounting.d.ts +46 -0
  99. package/dist/types/src/page-market.d.ts +27 -0
  100. package/dist/types/src/presets/barba.d.ts +56 -0
  101. package/dist/types/src/product-events.d.ts +2 -0
  102. package/dist/types/src/product-render.d.ts +17 -0
  103. package/dist/types/src/product-shape.d.ts +88 -0
  104. package/dist/types/src/product-state.d.ts +110 -0
  105. package/dist/types/src/product.d.ts +66 -0
  106. package/dist/types/src/repeaters.d.ts +16 -0
  107. package/dist/types/src/search.d.ts +33 -0
  108. package/dist/types/src/selling-plans.d.ts +64 -0
  109. package/dist/types/src/server.d.ts +88 -0
  110. package/dist/types/src/shopify-values.d.ts +46 -0
  111. package/dist/types/src/status.d.ts +33 -0
  112. package/dist/types/src/storage.d.ts +12 -0
  113. package/dist/types/src/store-html.d.ts +39 -0
  114. package/dist/types/src/storefront/catalog.d.ts +38 -0
  115. package/dist/types/src/storefront/json-ld.d.ts +20 -0
  116. package/dist/types/src/variant-render.d.ts +14 -0
  117. package/package.json +42 -22
  118. package/src/account/addresses-view.ts +58 -0
  119. package/src/account/answers.ts +79 -0
  120. package/src/account/markup.ts +36 -0
  121. package/src/account/operations.ts +145 -0
  122. package/src/account/order-lines.ts +75 -0
  123. package/src/account/order-list.ts +107 -0
  124. package/src/account/order-page.ts +137 -0
  125. package/src/account/page-answers.ts +317 -0
  126. package/src/account/page-events.ts +253 -0
  127. package/src/account/server-client.ts +183 -0
  128. package/src/account/subscriptions-view.ts +115 -0
  129. package/src/account-api.ts +98 -0
  130. package/src/account-marks.ts +35 -0
  131. package/src/account-pages.ts +81 -0
  132. package/src/account.ts +284 -0
  133. package/src/amounts.ts +64 -0
  134. package/src/analytics-shopify.ts +246 -0
  135. package/src/analytics.ts +315 -0
  136. package/src/api-version.ts +79 -0
  137. package/src/astro.ts +272 -0
  138. package/src/cart/cart-shape.ts +25 -0
  139. package/src/cart/checkout.ts +101 -0
  140. package/src/cart/drawer.ts +125 -0
  141. package/src/cart/mutations.ts +237 -0
  142. package/src/cart/render.ts +266 -0
  143. package/src/cart/store.ts +279 -0
  144. package/src/cart.ts +345 -0
  145. package/src/client.ts +391 -0
  146. package/src/collection.ts +175 -0
  147. package/src/config-sections.ts +284 -0
  148. package/src/config.ts +480 -0
  149. package/src/controls/cart-controls.ts +123 -0
  150. package/src/controls/discount.ts +75 -0
  151. package/src/controls/extras.ts +54 -0
  152. package/src/controls/navigation.ts +77 -0
  153. package/src/diagnose-markup.ts +298 -0
  154. package/src/diagnose.ts +294 -0
  155. package/src/dom.ts +268 -0
  156. package/src/extras.ts +136 -0
  157. package/src/fragments.ts +261 -0
  158. package/src/globals.d.ts +15 -0
  159. package/src/images.ts +91 -0
  160. package/src/index.ts +415 -0
  161. package/src/initial.ts +101 -0
  162. package/src/lazy-iife.ts +197 -0
  163. package/src/lazy.ts +42 -0
  164. package/src/loader.ts +363 -0
  165. package/src/market-codes.ts +6 -0
  166. package/src/markets-ui.ts +227 -0
  167. package/src/markets.ts +246 -0
  168. package/src/markup.ts +127 -0
  169. package/src/mounting.ts +264 -0
  170. package/src/page-market.ts +110 -0
  171. package/src/part-integrity.ts +7 -0
  172. package/src/parts/account-pages.ts +7 -0
  173. package/src/parts/account.ts +7 -0
  174. package/src/parts/analytics.ts +7 -0
  175. package/src/parts/diagnose.ts +7 -0
  176. package/src/parts/extras.ts +7 -0
  177. package/src/parts/markets.ts +7 -0
  178. package/src/parts/search.ts +7 -0
  179. package/src/presets/barba.ts +194 -0
  180. package/src/product-events.ts +115 -0
  181. package/src/product-render.ts +218 -0
  182. package/src/product-shape.ts +49 -0
  183. package/src/product-state.ts +318 -0
  184. package/src/product.ts +308 -0
  185. package/src/repeaters.ts +161 -0
  186. package/src/search.ts +305 -0
  187. package/src/selling-plans.ts +145 -0
  188. package/src/server.ts +211 -0
  189. package/src/shopify-values.ts +91 -0
  190. package/src/status.ts +106 -0
  191. package/src/storage.ts +34 -0
  192. package/src/store-html.ts +359 -0
  193. package/src/storefront/catalog.ts +196 -0
  194. package/src/storefront/json-ld.ts +144 -0
  195. package/src/variant-render.ts +139 -0
  196. package/dist/esm/chunks/account-Q6E2TFEV.js +0 -1
  197. package/dist/esm/chunks/account-pages-UZXR4R5F.js +0 -1
  198. package/dist/esm/chunks/analytics-IJBKATUP.js +0 -1
  199. package/dist/esm/chunks/chunk-4QJKLPYR.js +0 -1
  200. package/dist/esm/chunks/chunk-64TUD3QR.js +0 -1
  201. package/dist/esm/chunks/chunk-AJLPU2JC.js +0 -4
  202. package/dist/esm/chunks/chunk-FIOZPPC5.js +0 -1
  203. package/dist/esm/chunks/chunk-K2YEQAIH.js +0 -1
  204. package/dist/esm/chunks/chunk-KIDH76B7.js +0 -1
  205. package/dist/esm/chunks/chunk-PAYT5ZD7.js +0 -1
  206. package/dist/esm/chunks/chunk-RREHGH4A.js +0 -1
  207. package/dist/esm/chunks/chunk-SSJT43CJ.js +0 -1
  208. package/dist/esm/chunks/chunk-VC46IEJQ.js +0 -1
  209. package/dist/esm/chunks/diagnose-3WVAWNTX.js +0 -14
  210. package/dist/esm/chunks/extras-7I7WJX35.js +0 -1
  211. package/dist/esm/chunks/markets-ui-545XLFTE.js +0 -1
  212. package/dist/esm/chunks/search-NILMGYXG.js +0 -1
  213. package/src/account-pages.js +0 -318
  214. package/src/account.js +0 -385
  215. package/src/analytics.js +0 -232
  216. package/src/api-version.js +0 -35
  217. package/src/astro.js +0 -101
  218. package/src/cart.js +0 -559
  219. package/src/client.js +0 -131
  220. package/src/collection.js +0 -114
  221. package/src/config.js +0 -85
  222. package/src/diagnose.js +0 -246
  223. package/src/dom.js +0 -288
  224. package/src/extras.js +0 -63
  225. package/src/fragments.js +0 -144
  226. package/src/index.js +0 -395
  227. package/src/initial.js +0 -75
  228. package/src/lazy-iife.js +0 -46
  229. package/src/lazy.js +0 -18
  230. package/src/loader.js +0 -198
  231. package/src/markets-ui.js +0 -90
  232. package/src/markets.js +0 -133
  233. package/src/mounting.js +0 -154
  234. package/src/parts/account-pages.js +0 -3
  235. package/src/parts/account.js +0 -3
  236. package/src/parts/analytics.js +0 -3
  237. package/src/parts/diagnose.js +0 -3
  238. package/src/parts/extras.js +0 -3
  239. package/src/parts/markets.js +0 -3
  240. package/src/parts/search.js +0 -3
  241. package/src/presets/barba.js +0 -100
  242. package/src/product.js +0 -570
  243. package/src/search.js +0 -153
  244. package/src/selling-plans.js +0 -94
  245. package/src/server.js +0 -252
  246. package/src/status.js +0 -66
  247. package/types/astro.d.ts +0 -17
  248. package/types/barba.d.ts +0 -16
  249. package/types/index.d.ts +0 -426
  250. package/types/server.d.ts +0 -110
@@ -1 +1,2 @@
1
- import{a as D,c as R,d as j,e as k,f as P,g as b,i as B,k as H,l as Y}from"./chunks/chunk-AJLPU2JC.js";import{a as q,h as K,j as X,k as L,v as M,y as z}from"./chunks/chunk-K2YEQAIH.js";import"./chunks/chunk-VC46IEJQ.js";function G(l,{variant:c,sellingPlan:o,defaultPurchase:F="one-time",lowStock:g=5}={}){let f=l?.variants?.nodes||[],N=c?j.variant(c):null,s=N&&f.find(r=>r.id===N)||f.find(r=>r.availableForSale)||f[0]||null;if(!s)return null;let C=Object.fromEntries((s.selectedOptions||[]).map(r=>[r.name,r.value])),S=k(l),w=H(l,o),p=S.length?w||S[0]:null;p&&!P(s,p.id)&&(p=S.find(r=>P(s,r.id))||p);let U=l.requiresSellingPlan||w||F==="subscription",O=S.some(r=>P(s,r.id)),T=S.length&&U?"subscription":"one-time",m=T==="subscription"&&O,e=m?b(s,p.id):s.price,t=m&&P(s,p.id)?.priceAdjustments?.[0]?.compareAtPrice||s.compareAtPrice,n=!!(t&&parseFloat(t.amount)>parseFloat(e.amount)),a=s.quantityAvailable,d=a!=null&&a>0&&a<=g,y=m?B(s,p.id).percentage:0;return{variant:s,selected:C,purchase:T,plan:m?p:null,plans:S.map(r=>({id:r.id,name:r.name,price:b(s,r.id),savings:B(s,r.id).percentage,selected:m&&r.id===p.id,available:!!P(s,r.id)})),savings:p?B(s,p.id).percentage:0,price:e,compareAtPrice:n?t:null,available:s.availableForSale,show:{"in-stock":s.availableForSale,"out-of-stock":!s.availableForSale,backorder:!!(s.availableForSale&&s.currentlyNotInStock),"on-sale":n,"not-on-sale":!n,"has-variants":f.length>1,"single-variant":f.length===1,"low-stock":d,"plenty-in-stock":s.availableForSale&&!d,"subscription-available":O,"subscription-unavailable":!O,"subscription-only":!!l.requiresSellingPlan,"one-time-available":!l.requiresSellingPlan,"subscription-selected":m,"one-time-selected":!m,"has-savings":m?y>0:n},unavailable:Object.fromEntries((l.options||[]).map(r=>[r.name,r.optionValues.map(u=>u.name).filter(u=>I(r.name,u))])),isUnavailable:(r,u)=>I(r,u)};function I(r,u){return!f.some($=>$.availableForSale&&$.selectedOptions.every(h=>h.name===r?h.value===u:C[h.name]===h.value))}}var x=l=>typeof l=="string"&&l.startsWith("gid://");function J(l){let c=String(l??"").trim();if(!c)return null;if(x(c))return c;if(/^\d+$/.test(c))return`gid://shopify/Product/${c}`;let o=c.match(/\/products\/([^/?#]+)/);return o?o[1]:c}function Z(l,c){if(!l)return"";let o=parseFloat(l.amount);if(Number.isNaN(o))return"";try{return new Intl.NumberFormat(c||void 0,{style:"currency",currency:l.currencyCode}).format(o)}catch{return`${l.currencyCode} ${o.toFixed(2)}`}}function V(l,{productPath:c="/product",id:o}={}){return/\{(handle|id)\}/.test(c)?c.replace(/\{handle\}/g,encodeURIComponent(l||"")).replace(/\{id\}/g,encodeURIComponent(o?String(o).split("/").pop():"")):`${c.replace(/\/$/,"")}/${l}`}var W=l=>JSON.stringify(l).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029"),ee={domain:["PUBLIC_SHOPIFY_DOMAIN","PUBLIC_SHOPIFY_STORE_DOMAIN","SHOPIFY_DOMAIN"],token:["PUBLIC_SHOPIFY_STOREFRONT_TOKEN","PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN","SHOPIFY_STOREFRONT_TOKEN"]};function le(l={}){let c=Object.fromEntries(Object.entries(l).filter(([e])=>e in q||e==="fetch"||e==="pageSize"||e==="siteUrl")),o={...q,...c};for(let[e,t]of Object.entries(ee))o[e]||(o[e]=t.map(n=>l[n]).find(Boolean)||"");if(o.domain=String(o.domain||"").replace(/^https?:\/\//,"").replace(/\/.*$/,""),!o.domain||!o.token)throw new K("createStorefront needs domain and token: pass them, or import.meta.env with PUBLIC_SHOPIFY_DOMAIN and PUBLIC_SHOPIFY_STOREFRONT_TOKEN",{code:"NOT_CONFIGURED"});let F=l.pageSize||25,g=(e,t,n)=>L(o,e,t,n),f=()=>D(o);async function N(e){let t=J(e);if(!t)return null;let n=x(t)?await g(`query TetherServerProductById($id:ID!){node(id:$id){... on Product{...TetherProduct}}}${f()}`,{id:t}):await g(`query TetherServerProduct($handle:String!){product(handle:$handle){...TetherProduct}}${f()}`,{handle:t}),a=x(t)?n.node:n.product;return a&&a.id?a:null}async function s({collection:e,query:t,first:n=F,after:a=null,sortKey:d,reverse:y=!1,filters:I}={}){if(e){let u=await g(`query TetherServerCollection($handle:String!,$first:Int!,$after:String,$sortKey:ProductCollectionSortKeys,$reverse:Boolean,$filters:[ProductFilter!]){collection(handle:$handle){${R()} products(first:$first,after:$after,sortKey:$sortKey,reverse:$reverse,filters:$filters){nodes{...TetherProduct}pageInfo{hasNextPage endCursor}}}}${f()}`,{handle:e,first:n,after:a,sortKey:d||void 0,reverse:y,filters:I||void 0});if(!u.collection)return{collection:null,products:[],pageInfo:{hasNextPage:!1,endCursor:null}};let{products:$,...h}=u.collection;return{collection:h,products:$.nodes,pageInfo:$.pageInfo}}let r=await g(`query TetherServerProducts($first:Int!,$after:String,$query:String,$sortKey:ProductSortKeys,$reverse:Boolean){products(first:$first,after:$after,query:$query,sortKey:$sortKey,reverse:$reverse){nodes{...TetherProduct}pageInfo{hasNextPage endCursor}}}${f()}`,{first:n,after:a,query:t||void 0,sortKey:d||void 0,reverse:y});return{collection:null,products:r.products.nodes,pageInfo:r.products.pageInfo}}async function C(e={}){let t=[],n=null;for(let a=0;a<500;a++){let d=await s({...e,first:F,after:n});if(t.push(...d.products),!d.pageInfo.hasNextPage)break;n=d.pageInfo.endCursor}return t}async function S(e,t={}){let n=await s({...t,collection:e});return n.collection?{...n.collection,products:n.products,pageInfo:n.pageInfo}:null}async function w(){let e=[],t=null;for(let n=0;n<100;n++){let a=await g(`query TetherServerCollections($first:Int!,$after:String){collections(first:$first,after:$after){nodes{${R()}}pageInfo{hasNextPage endCursor}}}`,{first:100,after:t});if(e.push(...a.collections.nodes),!a.collections.pageInfo.hasNextPage)break;t=a.collections.pageInfo.endCursor}return e}async function p(e,t="RELATED"){let n=J(typeof e=="object"?e?.id:e),a=n?.startsWith("gid://");return(await g(`query TetherServerRecs(${a?"$id: ID!":"$handle: String!"},$intent:ProductRecommendationIntent){productRecommendations(${a?"productId: $id":"productHandle: $handle"},intent:$intent){...TetherProduct}}${f()}`,a?{id:n,intent:t}:{handle:n,intent:t})).productRecommendations||[]}function U(e,{card:t=!1,images:n=2}={}){let a=(Array.isArray(e)?e:[e]).filter(Boolean);t&&(a=a.map(y=>m(y,n)));let d={v:1,at:new Date().toISOString(),country:o.country||null,language:o.language||null,products:a};return`<script type="application/json" data-tether-hydrate>${W(d)}<\/script>`}function O(e,{url:t,brand:n}={}){if(!e)return null;let a=t||(o.siteUrl?new URL(V(e.handle,{productPath:o.productPath,id:e.id}),o.siteUrl).toString():void 0),d=i=>String(i.id).split("/").pop(),y=i=>a?`${a}${a.includes("?")?"&":"?"}variant=${d(i)}`:void 0,I=(e.description||"").trim()||void 0,r=(e.images?.nodes||[]).map(i=>i.url).filter(Boolean),u=n||e.vendor,$=i=>{if(!e.requiresSellingPlan)return i.price;let v=k(e).find(Q=>P(i,Q.id));return v?b(i,v.id):i.price},h=i=>({"@type":"Offer",price:$(i)?.amount,priceCurrency:$(i)?.currencyCode,availability:`https://schema.org/${i.availableForSale?i.currentlyNotInStock?"BackOrder":"InStock":"OutOfStock"}`,url:y(i)}),_=e.variants?.nodes||[],A=i=>JSON.parse(JSON.stringify(i));if(_.length<=1){let i=_[0];return A({"@context":"https://schema.org","@type":"Product",name:e.title,description:I,url:a,image:r,sku:i?.sku||void 0,brand:u?{"@type":"Brand",name:u}:void 0,offers:i?h(i):void 0})}let E={size:"https://schema.org/size",color:"https://schema.org/color",colour:"https://schema.org/color",material:"https://schema.org/material"};return A({"@context":"https://schema.org","@type":"ProductGroup",name:e.title,description:I,url:a,productGroupID:String(e.id).split("/").pop(),image:r,brand:u?{"@type":"Brand",name:u}:void 0,variesBy:[...new Set((e.options||[]).map(i=>E[i.name.toLowerCase()]).filter(Boolean))],hasVariant:_.map(i=>({"@type":"Product",name:`${e.title} - ${i.title}`,sku:i.sku||void 0,image:i.image?.url||r[0],...Object.fromEntries((i.selectedOptions||[]).filter(v=>E[v.name.toLowerCase()]).map(v=>[E[v.name.toLowerCase()].split("/").pop(),v.value])),offers:h(i)}))})}let T=(e,t)=>e?`<script type="application/ld+json">${W(O(e,t))}<\/script>`:"";function m(e,t=2){return{...e,description:"",descriptionHtml:"",images:{nodes:(e.images?.nodes||[]).slice(0,Math.max(1,t))},variants:{nodes:(e.variants?.nodes||[]).map(n=>({...n,image:null}))}}}return{config:o,query:g,getProduct:N,getProducts:s,allProducts:C,getCollection:S,allCollections:w,getRecommendations:p,hydrate:U,formatMoney:(e,t=o.locale)=>Z(e,t),formatPercent:(e,t=o.locale)=>M(e,t),imageUrl:z,jsonLd:T,jsonLdData:O,initialState:(e,t={})=>G(e,{defaultPurchase:o.defaultPurchase,lowStock:o.lowStock,...t}),productUrl:(e,t={})=>V(e,{productPath:o.productPath,...t}),plans:Y}}export{K as TetherError,le as createStorefront,Z as formatMoney,M as formatPercent,z as imageUrl,G as initialState,Y as plans,J as productKey,V as productUrl,X as withContext};
1
+ import{b as j,f as G,g as H}from"./chunks/chunk-T44MUL4Y.js";import{A as B,B as J,C as K,a as _,c as T,h as v,i as b,j as $,l as M,o as q,q as F,s as V}from"./chunks/chunk-BFTZR4OB.js";import{B as D,a as S,c as k,d as C,f as nt,g as P,i as L,u as U}from"./chunks/chunk-BA4LQJJQ.js";import{B as E,E as N,F as I,G as O,q as g,t as A}from"./chunks/chunk-E5YO6274.js";function Q(t,e={}){if(!t)return null;let{variant:r,sellingPlan:a,defaultPurchase:c=g.defaultPurchase,lowStock:u=g.lowStock}=e,d=G(t,{variant:r,sellingPlan:a,defaultPurchase:c}),n=H(t,{...d,quantity:1},u);if(!n)throw new S(`Product ${t.handle} has no variants`);let{selected:l,line:p}=n,i=(o,s)=>!j(t,l,o,s);return{variant:n.variant,selected:l,purchase:n.purchase.kind,plan:p.kind==="subscription"?n.plan:null,plans:v(t).map(o=>({id:o.id,name:o.name,price:$(n.variant,o.id),savings:M(n.variant,o.id).percentage,selected:p.kind==="subscription"&&o.id===p.planId,available:!!b(n.variant,o.id)})),savings:n.savings.percentage,price:n.price,compareAtPrice:n.compareAtPrice,available:n.variant.availableForSale,show:n.show,unavailable:Object.fromEntries(t.options.map(o=>[o.name,o.optionValues.map(s=>s.name).filter(s=>i(o.name,s))])),isUnavailable:i}}var rt=500,ot=100,it=100,at="query TetherServerProductById($id:ID!){node(id:$id){... on Product{...TetherProduct}}}",st="query TetherServerProduct($handle:String!){product(handle:$handle){...TetherProduct}}",lt=()=>`query TetherServerCollection($handle:String!,$first:Int!,$after:String,$sortKey:ProductCollectionSortKeys,$reverse:Boolean,$filters:[ProductFilter!]){collection(handle:$handle){${T()} products(first:$first,after:$after,sortKey:$sortKey,reverse:$reverse,filters:$filters){nodes{...TetherProduct}pageInfo{hasNextPage endCursor}}}}`,ct="query TetherServerProducts($first:Int!,$after:String,$query:String,$sortKey:ProductSortKeys,$reverse:Boolean){products(first:$first,after:$after,query:$query,sortKey:$sortKey,reverse:$reverse){nodes{...TetherProduct}pageInfo{hasNextPage endCursor}}}",ut=()=>`query TetherServerCollections($first:Int!,$after:String){collections(first:$first,after:$after){nodes{${T()}}pageInfo{hasNextPage endCursor}}}`,dt=t=>`query TetherServerRecs(${t?"$id: ID!":"$handle: String!"},$intent:ProductRecommendationIntent){productRecommendations(${t?"productId: $id":"productHandle: $handle"},intent:$intent){...TetherProduct}}`,ft=C({product:k(F)}),pt=C({node:k(V)}),mt=C({collections:{nodes:[{handle:"string"}],pageInfo:{hasNextPage:"boolean"}}});async function gt(t){let e=[],r=null;for(let a=0;a<it;a++){let c=await P(t,ut(),{first:ot,after:r},mt);if(e.push(...c.collections.nodes),!c.collections.pageInfo.hasNextPage)break;r=c.collections.pageInfo.endCursor}return e}function Y(t,e){let r=(i,o,s)=>P(t,f=>`${i}
2
+ ${_(t,f)}`,o,s);async function a(i){let o=O(i);if(!o)return null;if(o.startsWith("gid://")){let{node:f}=await r(at,{id:o},pt);return f?.id?f:null}return(await r(st,{handle:o},ft)).product}async function c(i,{first:o=e,after:s=null,sortKey:f,reverse:m=!1,filters:w}){let h=await r(lt(),{handle:i,first:o,after:s,sortKey:f||void 0,reverse:m,filters:w??void 0},B);if(!h.collection)return{collection:null,products:[],pageInfo:{hasNextPage:!1,endCursor:null}};let{products:y,...et}=h.collection;return{collection:et,products:y.nodes,pageInfo:y.pageInfo}}async function u(i={}){let{collection:o,query:s,first:f=e,after:m=null,sortKey:w,reverse:h=!1}=i;if(o)return c(o,i);let y=await r(ct,{first:f,after:m,query:s||void 0,sortKey:w||void 0,reverse:h},J);return{collection:null,products:y.products.nodes,pageInfo:y.products.pageInfo}}async function d(i={}){let o=[],s=null;for(let f=0;f<rt;f++){let m=await u({...i,first:e,after:s});if(o.push(...m.products),!m.pageInfo.hasNextPage)break;s=m.pageInfo.endCursor}return o}async function n(i,o={}){let s=await u({...o,collection:i});return s.collection?{...s.collection,products:s.products,pageInfo:s.pageInfo}:null}async function l(i,o="RELATED"){let s=O(typeof i=="object"?i?.id:i),f=s?.startsWith("gid://")??!1;return(await r(dt(f),f?{id:s,intent:o}:{handle:s,intent:o},K)).productRecommendations??[]}return{getProduct:a,getProducts:u,allProducts:d,getCollection:n,allCollections:()=>gt(t),getRecommendations:l}}var W={size:"https://schema.org/size",color:"https://schema.org/color",colour:"https://schema.org/color",material:"https://schema.org/material"},R=t=>JSON.stringify(t).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029");function z(t){return JSON.parse(JSON.stringify(t))}var X=t=>t.split("/").pop()??t;function yt(t){return t.availableForSale?t.currentlyNotInStock?"https://schema.org/BackOrder":"https://schema.org/InStock":"https://schema.org/OutOfStock"}function Pt(t,e){if(!t.requiresSellingPlan)return e.price;let r=v(t).find(a=>b(e,a.id));return(r&&$(e,r.id))??e.price}function Z(t,e,r){let a=Pt(t,e),c=r?.includes("?")?"&":"?";return{"@type":"Offer",price:a.amount,priceCurrency:a.currencyCode,availability:yt(e),url:r?`${r}${c}variant=${X(e.id)}`:void 0}}function ht(t,e,r,a){let c=e.selectedOptions.flatMap(u=>{let d=W[u.name.toLowerCase()];return d?[[d.split("/").pop()??d,u.value]]:[]});return{"@type":"Product",name:`${t.title} - ${e.title}`,sku:e.sku||void 0,image:e.image?.url||a[0],...Object.fromEntries(c),offers:Z(t,e,r)}}function St(t,{url:e},r){if(e)return e;let a=I(r.productPath,t.handle,t.id);if(!(!r.siteUrl||!a))return new URL(a,r.siteUrl).toString()}function x(t,e,r){if(!t)return null;let a=St(t,e,r),c=t.images.nodes.map(i=>i.url).filter(Boolean),u=e.brand||t.vendor,d=u?{"@type":"Brand",name:u}:void 0,n=t.description.trim()||void 0,l=t.variants.nodes;if(l.length<=1){let[i]=l;return z({"@context":"https://schema.org","@type":"Product",name:t.title,description:n,url:a,image:c,sku:i?.sku||void 0,brand:d,offers:i?Z(t,i,a):void 0})}let p=t.options.map(i=>W[i.name.toLowerCase()]).filter(Boolean);return z({"@context":"https://schema.org","@type":"ProductGroup",name:t.title,description:n,url:a,productGroupID:X(t.id),image:c,brand:d,variesBy:[...new Set(p)],hasVariant:l.map(i=>ht(t,i,a,c))})}var Ct=25,It=2,Ot=1;function vt(t,{productPath:e=g.productPath,id:r}={}){return I(e,t,r)}function tt(t,e){for(let r of e){let a=t[r];if(typeof a=="string"&&a)return a}return""}function bt(t){let e={};for(let[u,d]of Object.entries(t))u in g&&(e[u]=d);let r=typeof t.domain=="string"&&t.domain?t.domain:"",a=typeof t.token=="string"&&t.token?t.token:"",c=A({...e,domain:r||tt(t,E.domain),token:a||tt(t,E.token)});return t.fetch&&(c.fetch=t.fetch),t.pageSize!==void 0&&(c.pageSize=t.pageSize),t.siteUrl!==void 0&&(c.siteUrl=t.siteUrl),c}var $t=t=>typeof t=="number"&&Number.isInteger(t)&&t>0?t:Ct;function wt(t,e){return{...t,description:"",descriptionHtml:"",images:{nodes:t.images.nodes.slice(0,Math.max(1,e))},variants:{nodes:t.variants.nodes.map(r=>({...r,image:null}))}}}function Qt(t={}){let e=bt(t);if(!e.domain||!e.token)throw new S("createStorefront needs domain and token: pass them, or import.meta.env with PUBLIC_SHOPIFY_DOMAIN and PUBLIC_SHOPIFY_STOREFRONT_TOKEN",{code:"NOT_CONFIGURED"});let r=Y(e,$t(e.pageSize)),a={productPath:e.productPath,siteUrl:e.siteUrl};function c(n,{card:l=!1,images:p=It}={}){let i=(Array.isArray(n)?n:[n]).filter(s=>s!=null),o={v:Ot,at:new Date().toISOString(),country:e.country||null,language:e.language||null,products:l?i.map(s=>wt(s,p)):i};return`<script type="application/json" data-tether-hydrate>${R(o)}<\/script>`}function u(n,l={}){return n?`<script type="application/ld+json">${R(x(n,l,a))}<\/script>`:""}function d(n,l={}){return Q(n,{defaultPurchase:e.defaultPurchase,lowStock:e.lowStock,...l})}return{config:e,query:(n,l,p)=>P(e,n,l??{},L,p),...r,hydrate:c,formatMoney:(n,l=e.locale)=>N(n,l),formatPercent:(n,l=e.locale)=>D(n,l),imageUrl:U,jsonLd:u,jsonLdData:(n,l={})=>x(n,l,a),initialState:d,productUrl:(n,l={})=>vt(n,{productPath:e.productPath,...l}),plans:q}}export{S as TetherError,Qt as createStorefront,N as formatMoney,D as formatPercent,U as imageUrl,Q as initialState,q as plans,O as productKey,vt as productUrl,nt as withContext};
@@ -1,72 +1,88 @@
1
- // src/presets/barba.js
2
- var LINE_DURATION = 0.3;
1
+ // src/presets/barba.ts
2
+ var LINE_DURATION_SECONDS = 0.3;
3
+ var collapsed = () => ({
4
+ height: 0,
5
+ paddingTop: 0,
6
+ paddingBottom: 0,
7
+ borderBottomWidth: 0,
8
+ opacity: 0,
9
+ overflow: "hidden"
10
+ });
11
+ var ANIMATED_PROPS = "height,paddingTop,paddingBottom,borderBottomWidth,opacity,overflow";
3
12
  var reducedMotion = () => typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
13
+ var GETTER_OPTIONS = ["gsap", "lenis", "scrollTrigger"];
14
+ function checkGetters(options) {
15
+ for (const name of GETTER_OPTIONS) {
16
+ const option = options[name];
17
+ if (option !== void 0 && option !== null && typeof option !== "function") {
18
+ throw new TypeError(`barbaPreset: ${name} must be a function that returns it, such as () => ${name}`);
19
+ }
20
+ }
21
+ }
22
+ function callIfPresent(target, method) {
23
+ if (typeof target !== "object" && typeof target !== "function" || target === null) return;
24
+ const fn = Reflect.get(target, method);
25
+ if (typeof fn === "function") fn.call(target);
26
+ }
27
+ var isGsap = (value) => typeof value === "object" && value !== null && typeof Reflect.get(value, "fromTo") === "function" && typeof Reflect.get(value, "to") === "function";
4
28
  function barbaPreset(options = {}) {
29
+ checkGetters(options);
5
30
  const {
6
- gsap = () => window.gsap,
31
+ gsap = () => Reflect.get(window, "gsap"),
7
32
  lenis = null,
8
- scrollTrigger = () => window.ScrollTrigger,
33
+ scrollTrigger = () => Reflect.get(window, "ScrollTrigger"),
9
34
  lockScroll = null,
10
35
  unlockScroll = null,
11
36
  onResize = null,
12
37
  onValueChange = null,
13
38
  animateLines = true,
14
- lineDuration = LINE_DURATION
39
+ lineDuration = LINE_DURATION_SECONDS
15
40
  } = options;
16
- const get = (v) => typeof v === "function" ? v() : v;
17
41
  let locked = false;
18
- const canAnimate = (node) => animateLines && get(gsap) && !reducedMotion() && node.offsetHeight > 0;
42
+ const animator = (node) => {
43
+ if (!animateLines || reducedMotion() || node.offsetHeight <= 0) return null;
44
+ const animation = gsap();
45
+ return isGsap(animation) ? animation : null;
46
+ };
19
47
  return {
20
48
  autoMount: false,
21
49
  onLayoutChange() {
22
- get(lenis)?.resize?.();
23
- get(scrollTrigger)?.refresh?.();
50
+ callIfPresent(lenis?.(), "resize");
51
+ callIfPresent(scrollTrigger(), "refresh");
24
52
  },
25
53
  onCartOpen(drawers) {
26
- if (!locked && typeof lockScroll === "function" && drawers[0]) {
27
- lockScroll(drawers[0]);
28
- locked = true;
29
- }
54
+ const drawer = drawers[0];
55
+ if (locked || !lockScroll || !drawer) return;
56
+ lockScroll(drawer);
57
+ locked = true;
30
58
  },
31
59
  onCartClose() {
32
- if (locked && typeof unlockScroll === "function") unlockScroll();
60
+ if (locked && unlockScroll) unlockScroll();
33
61
  locked = false;
34
62
  },
35
63
  onLineEnter(node) {
36
- const g = get(gsap);
37
- if (!canAnimate(node)) return;
38
- const st = getComputedStyle(node);
39
- g.fromTo(node, {
40
- height: 0,
41
- paddingTop: 0,
42
- paddingBottom: 0,
43
- borderBottomWidth: 0,
44
- opacity: 0,
45
- overflow: "hidden"
46
- }, {
64
+ const animation = animator(node);
65
+ if (!animation) return;
66
+ const style = getComputedStyle(node);
67
+ animation.fromTo(node, collapsed(), {
47
68
  height: node.offsetHeight,
48
- paddingTop: st.paddingTop,
49
- paddingBottom: st.paddingBottom,
50
- borderBottomWidth: st.borderBottomWidth,
69
+ paddingTop: style.paddingTop,
70
+ paddingBottom: style.paddingBottom,
71
+ borderBottomWidth: style.borderBottomWidth,
51
72
  opacity: 1,
52
73
  duration: lineDuration,
53
- clearProps: "height,paddingTop,paddingBottom,borderBottomWidth,opacity,overflow",
74
+ clearProps: ANIMATED_PROPS,
54
75
  onComplete: () => onResize?.()
55
76
  });
56
77
  },
57
78
  onLineLeave(node, done) {
58
- const g = get(gsap);
59
- if (!canAnimate(node)) {
79
+ const animation = animator(node);
80
+ if (!animation) {
60
81
  done();
61
82
  return;
62
83
  }
63
- g.to(node, {
64
- height: 0,
65
- paddingTop: 0,
66
- paddingBottom: 0,
67
- borderBottomWidth: 0,
68
- opacity: 0,
69
- overflow: "hidden",
84
+ animation.to(node, {
85
+ ...collapsed(),
70
86
  duration: lineDuration,
71
87
  onComplete: () => {
72
88
  done();
@@ -74,7 +90,7 @@ function barbaPreset(options = {}) {
74
90
  }
75
91
  });
76
92
  },
77
- onValueChange: typeof onValueChange === "function" ? onValueChange : null
93
+ onValueChange
78
94
  };
79
95
  }
80
96
  var barba_default = barbaPreset;