@vtex/faststore 0.0.1

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 (538) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +21 -0
  3. package/README.md +95 -0
  4. package/dist/actions.json +334 -0
  5. package/dist/catalog.json +6615 -0
  6. package/dist/client.d.ts +17 -0
  7. package/dist/client.js +8 -0
  8. package/dist/components.d.ts +87 -0
  9. package/dist/components.js +87 -0
  10. package/dist/content-types.json +684 -0
  11. package/dist/core/dist/actions/mock-action.d.ts +24 -0
  12. package/dist/core/dist/actions/mock-action.js +28 -0
  13. package/dist/core/dist/actions/mock-action.js.map +1 -0
  14. package/dist/core/dist/actions/registry.d.ts +24 -0
  15. package/dist/core/dist/actions/registry.js +28 -0
  16. package/dist/core/dist/actions/registry.js.map +1 -0
  17. package/dist/core/dist/define-component.d.ts +100 -0
  18. package/dist/core/dist/define-component.js +8 -0
  19. package/dist/core/dist/define-component.js.map +1 -0
  20. package/dist/core/dist/define-content-type.d.ts +95 -0
  21. package/dist/core/dist/define-content-type.js +283 -0
  22. package/dist/core/dist/define-content-type.js.map +1 -0
  23. package/dist/core/dist/index.d.ts +7 -0
  24. package/dist/core/dist/index.js +5 -0
  25. package/dist/core/dist/schema/generated/schema.d.ts +28 -0
  26. package/dist/core/dist/types.d.ts +1 -0
  27. package/dist/docs/access-code-field.md +100 -0
  28. package/dist/docs/access-code-sign-in.md +174 -0
  29. package/dist/docs/account-entry-point.md +155 -0
  30. package/dist/docs/address-summary.md +50 -0
  31. package/dist/docs/buy-button.md +162 -0
  32. package/dist/docs/carousel.md +105 -0
  33. package/dist/docs/cart-item.md +162 -0
  34. package/dist/docs/cart-totalizer.md +197 -0
  35. package/dist/docs/cart.md +495 -0
  36. package/dist/docs/client-preferences.md +184 -0
  37. package/dist/docs/client-profile-form.md +192 -0
  38. package/dist/docs/client-profile.md +117 -0
  39. package/dist/docs/container.md +97 -0
  40. package/dist/docs/document-field.md +97 -0
  41. package/dist/docs/email-field.md +93 -0
  42. package/dist/docs/email-identification.md +102 -0
  43. package/dist/docs/footer-copyright.md +112 -0
  44. package/dist/docs/footer-link-group.md +162 -0
  45. package/dist/docs/footer-root.md +145 -0
  46. package/dist/docs/footer-social.md +151 -0
  47. package/dist/docs/free-shipping-progress.md +87 -0
  48. package/dist/docs/gallery.md +84 -0
  49. package/dist/docs/header-root.md +150 -0
  50. package/dist/docs/identity-edit.md +88 -0
  51. package/dist/docs/identity-summary.md +106 -0
  52. package/dist/docs/incentives.md +151 -0
  53. package/dist/docs/logo.md +135 -0
  54. package/dist/docs/meter.md +67 -0
  55. package/dist/docs/navigation-link-list.md +171 -0
  56. package/dist/docs/navigation-link.md +163 -0
  57. package/dist/docs/navigation-menu.md +264 -0
  58. package/dist/docs/payment-methods.md +139 -0
  59. package/dist/docs/phone-field.md +106 -0
  60. package/dist/docs/postal-code-field.md +126 -0
  61. package/dist/docs/pricing.md +499 -0
  62. package/dist/docs/product-gallery.md +409 -0
  63. package/dist/docs/product-information.md +295 -0
  64. package/dist/docs/product-list.md +170 -0
  65. package/dist/docs/product-quantity.md +88 -0
  66. package/dist/docs/product-shelf.md +141 -0
  67. package/dist/docs/promotion.md +109 -0
  68. package/dist/docs/region.md +225 -0
  69. package/dist/docs/session.md +123 -0
  70. package/dist/docs/shipping-address.md +390 -0
  71. package/dist/docs/shipping-simulator.md +147 -0
  72. package/dist/docs/sign-in-form.md +117 -0
  73. package/dist/docs/tabs.md +176 -0
  74. package/dist/docs/toast.md +124 -0
  75. package/dist/docs/variant-selector.md +450 -0
  76. package/dist/graphql/define-subgraph.d.ts +12 -0
  77. package/dist/graphql/define-subgraph.js +15 -0
  78. package/dist/graphql/define-subgraph.js.map +1 -0
  79. package/dist/graphql/gql.d.ts +10 -0
  80. package/dist/graphql/gql.js +16 -0
  81. package/dist/graphql/gql.js.map +1 -0
  82. package/dist/graphql/types.d.ts +88 -0
  83. package/dist/graphql.d.ts +4 -0
  84. package/dist/graphql.js +3 -0
  85. package/dist/index.d.ts +19 -0
  86. package/dist/index.js +5 -0
  87. package/dist/internal/client.d.ts +24 -0
  88. package/dist/internal/client.js +23 -0
  89. package/dist/internal/content.d.ts +2 -0
  90. package/dist/internal/content.js +2 -0
  91. package/dist/internal/server.d.ts +7 -0
  92. package/dist/internal/server.js +6 -0
  93. package/dist/matter/access-code-sign-in/access-code-sign-in.d.ts +111 -0
  94. package/dist/matter/access-code-sign-in/access-code-sign-in.js +387 -0
  95. package/dist/matter/access-code-sign-in/access-code-sign-in.js.map +1 -0
  96. package/dist/matter/account-entry-point/account-entry-point.d.ts +64 -0
  97. package/dist/matter/account-entry-point/account-entry-point.js +151 -0
  98. package/dist/matter/account-entry-point/account-entry-point.js.map +1 -0
  99. package/dist/matter/breadcrumb/breadcrumb.d.ts +40 -0
  100. package/dist/matter/breadcrumb/breadcrumb.js +155 -0
  101. package/dist/matter/breadcrumb/breadcrumb.js.map +1 -0
  102. package/dist/matter/buy-button/buy-button.d.ts +95 -0
  103. package/dist/matter/buy-button/buy-button.js +259 -0
  104. package/dist/matter/buy-button/buy-button.js.map +1 -0
  105. package/dist/matter/cart/cart-namespace.d.ts +48 -0
  106. package/dist/matter/cart/cart-namespace.js +50 -0
  107. package/dist/matter/cart/cart-namespace.js.map +1 -0
  108. package/dist/matter/cart/cart.d.ts +312 -0
  109. package/dist/matter/cart/cart.js +1034 -0
  110. package/dist/matter/cart/cart.js.map +1 -0
  111. package/dist/matter/cart-item/cart-item.d.ts +103 -0
  112. package/dist/matter/cart-item/cart-item.js +672 -0
  113. package/dist/matter/cart-item/cart-item.js.map +1 -0
  114. package/dist/matter/cart-item-compositions/cart-item-compositions.d.ts +49 -0
  115. package/dist/matter/cart-item-compositions/cart-item-compositions.js +165 -0
  116. package/dist/matter/cart-item-compositions/cart-item-compositions.js.map +1 -0
  117. package/dist/matter/cart-item-customizations/cart-item-customizations.d.ts +28 -0
  118. package/dist/matter/cart-item-customizations/cart-item-customizations.js +73 -0
  119. package/dist/matter/cart-item-customizations/cart-item-customizations.js.map +1 -0
  120. package/dist/matter/cart-item-discounts/cart-item-discounts.d.ts +33 -0
  121. package/dist/matter/cart-item-discounts/cart-item-discounts.js +70 -0
  122. package/dist/matter/cart-item-discounts/cart-item-discounts.js.map +1 -0
  123. package/dist/matter/cart-item-seller-info/cart-item-seller-info.d.ts +24 -0
  124. package/dist/matter/cart-item-seller-info/cart-item-seller-info.js +54 -0
  125. package/dist/matter/cart-item-seller-info/cart-item-seller-info.js.map +1 -0
  126. package/dist/matter/cart-item-variations/cart-item-variations.d.ts +27 -0
  127. package/dist/matter/cart-item-variations/cart-item-variations.js +69 -0
  128. package/dist/matter/cart-item-variations/cart-item-variations.js.map +1 -0
  129. package/dist/matter/cart-totalizer/cart-totalizer.d.ts +78 -0
  130. package/dist/matter/cart-totalizer/cart-totalizer.js +220 -0
  131. package/dist/matter/cart-totalizer/cart-totalizer.js.map +1 -0
  132. package/dist/matter/client-preferences/client-preferences.d.ts +50 -0
  133. package/dist/matter/client-preferences/client-preferences.js +206 -0
  134. package/dist/matter/client-preferences/client-preferences.js.map +1 -0
  135. package/dist/matter/client-profile/client-profile.d.ts +59 -0
  136. package/dist/matter/client-profile/client-profile.js +185 -0
  137. package/dist/matter/client-profile/client-profile.js.map +1 -0
  138. package/dist/matter/client-profile-form/client-profile-form.d.ts +126 -0
  139. package/dist/matter/client-profile-form/client-profile-form.js +660 -0
  140. package/dist/matter/client-profile-form/client-profile-form.js.map +1 -0
  141. package/dist/matter/delivery-options/delivery-options-accordion.d.ts +30 -0
  142. package/dist/matter/delivery-options/delivery-options-accordion.js +189 -0
  143. package/dist/matter/delivery-options/delivery-options-accordion.js.map +1 -0
  144. package/dist/matter/delivery-options/delivery-options-controller.d.ts +49 -0
  145. package/dist/matter/delivery-options/delivery-options-controller.js +203 -0
  146. package/dist/matter/delivery-options/delivery-options-controller.js.map +1 -0
  147. package/dist/matter/delivery-options/delivery-options.d.ts +31 -0
  148. package/dist/matter/delivery-options/delivery-options.js +103 -0
  149. package/dist/matter/delivery-options/delivery-options.js.map +1 -0
  150. package/dist/matter/delivery-options/use-delivery-option-selection.d.ts +9 -0
  151. package/dist/matter/delivery-options/use-delivery-option-selection.js +76 -0
  152. package/dist/matter/delivery-options/use-delivery-option-selection.js.map +1 -0
  153. package/dist/matter/email-identification/email-identification.d.ts +37 -0
  154. package/dist/matter/email-identification/email-identification.js +111 -0
  155. package/dist/matter/email-identification/email-identification.js.map +1 -0
  156. package/dist/matter/free-shipping-progress/free-shipping-progress.d.ts +44 -0
  157. package/dist/matter/free-shipping-progress/free-shipping-progress.js +170 -0
  158. package/dist/matter/free-shipping-progress/free-shipping-progress.js.map +1 -0
  159. package/dist/matter/identity-edit/identity-edit.d.ts +52 -0
  160. package/dist/matter/identity-edit/identity-edit.js +148 -0
  161. package/dist/matter/identity-edit/identity-edit.js.map +1 -0
  162. package/dist/matter/identity-summary/identity-summary.d.ts +128 -0
  163. package/dist/matter/identity-summary/identity-summary.js +344 -0
  164. package/dist/matter/identity-summary/identity-summary.js.map +1 -0
  165. package/dist/matter/pricing/pricing.d.ts +162 -0
  166. package/dist/matter/pricing/pricing.js +793 -0
  167. package/dist/matter/pricing/pricing.js.map +1 -0
  168. package/dist/matter/product-gallery/product-gallery.d.ts +23 -0
  169. package/dist/matter/product-gallery/product-gallery.js +188 -0
  170. package/dist/matter/product-gallery/product-gallery.js.map +1 -0
  171. package/dist/matter/product-information/product-information.d.ts +61 -0
  172. package/dist/matter/product-information/product-information.js +355 -0
  173. package/dist/matter/product-information/product-information.js.map +1 -0
  174. package/dist/matter/product-list/product-list.d.ts +86 -0
  175. package/dist/matter/product-list/product-list.js +342 -0
  176. package/dist/matter/product-list/product-list.js.map +1 -0
  177. package/dist/matter/product-quantity/product-quantity.d.ts +50 -0
  178. package/dist/matter/product-quantity/product-quantity.js +111 -0
  179. package/dist/matter/product-quantity/product-quantity.js.map +1 -0
  180. package/dist/matter/product-shelf/product-shelf.d.ts +125 -0
  181. package/dist/matter/product-shelf/product-shelf.js +376 -0
  182. package/dist/matter/product-shelf/product-shelf.js.map +1 -0
  183. package/dist/matter/region/region.d.ts +211 -0
  184. package/dist/matter/region/region.js +579 -0
  185. package/dist/matter/region/region.js.map +1 -0
  186. package/dist/matter/session/session.d.ts +58 -0
  187. package/dist/matter/session/session.js +112 -0
  188. package/dist/matter/session/session.js.map +1 -0
  189. package/dist/matter/shipping-address/country-descriptors.js +101 -0
  190. package/dist/matter/shipping-address/country-descriptors.js.map +1 -0
  191. package/dist/matter/shipping-address/shipping-address.d.ts +284 -0
  192. package/dist/matter/shipping-address/shipping-address.js +1036 -0
  193. package/dist/matter/shipping-address/shipping-address.js.map +1 -0
  194. package/dist/matter/shipping-simulator/shipping-simulator.d.ts +143 -0
  195. package/dist/matter/shipping-simulator/shipping-simulator.js +644 -0
  196. package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -0
  197. package/dist/matter/sign-in-form/sign-in-form.d.ts +79 -0
  198. package/dist/matter/sign-in-form/sign-in-form.js +226 -0
  199. package/dist/matter/sign-in-form/sign-in-form.js.map +1 -0
  200. package/dist/matter/variant-selector/variant-selector.d.ts +183 -0
  201. package/dist/matter/variant-selector/variant-selector.js +840 -0
  202. package/dist/matter/variant-selector/variant-selector.js.map +1 -0
  203. package/dist/message-locales.json +7 -0
  204. package/dist/particles/access-code-field/access-code-field.d.ts +33 -0
  205. package/dist/particles/access-code-field/access-code-field.js +95 -0
  206. package/dist/particles/access-code-field/access-code-field.js.map +1 -0
  207. package/dist/particles/accordion/accordion.d.ts +45 -0
  208. package/dist/particles/accordion/accordion.js +156 -0
  209. package/dist/particles/accordion/accordion.js.map +1 -0
  210. package/dist/particles/address-summary/address-summary.d.ts +50 -0
  211. package/dist/particles/address-summary/address-summary.js +129 -0
  212. package/dist/particles/address-summary/address-summary.js.map +1 -0
  213. package/dist/particles/badge/badge.d.ts +10 -0
  214. package/dist/particles/badge/badge.js +27 -0
  215. package/dist/particles/badge/badge.js.map +1 -0
  216. package/dist/particles/button/button.d.ts +18 -0
  217. package/dist/particles/button/button.js +37 -0
  218. package/dist/particles/button/button.js.map +1 -0
  219. package/dist/particles/carousel/carousel.d.ts +60 -0
  220. package/dist/particles/carousel/carousel.js +335 -0
  221. package/dist/particles/carousel/carousel.js.map +1 -0
  222. package/dist/particles/checkbox/checkbox.d.ts +40 -0
  223. package/dist/particles/checkbox/checkbox.js +82 -0
  224. package/dist/particles/checkbox/checkbox.js.map +1 -0
  225. package/dist/particles/container/container.d.ts +20 -0
  226. package/dist/particles/container/container.js +36 -0
  227. package/dist/particles/container/container.js.map +1 -0
  228. package/dist/particles/dialog/dialog.d.ts +54 -0
  229. package/dist/particles/dialog/dialog.js +192 -0
  230. package/dist/particles/dialog/dialog.js.map +1 -0
  231. package/dist/particles/document-field/document-field.d.ts +61 -0
  232. package/dist/particles/document-field/document-field.js +146 -0
  233. package/dist/particles/document-field/document-field.js.map +1 -0
  234. package/dist/particles/drawer/drawer.d.ts +52 -0
  235. package/dist/particles/drawer/drawer.js +183 -0
  236. package/dist/particles/drawer/drawer.js.map +1 -0
  237. package/dist/particles/email-field/email-field.d.ts +37 -0
  238. package/dist/particles/email-field/email-field.js +106 -0
  239. package/dist/particles/email-field/email-field.js.map +1 -0
  240. package/dist/particles/field/field.d.ts +50 -0
  241. package/dist/particles/field/field.js +133 -0
  242. package/dist/particles/field/field.js.map +1 -0
  243. package/dist/particles/fieldset/fieldset.d.ts +16 -0
  244. package/dist/particles/fieldset/fieldset.js +52 -0
  245. package/dist/particles/fieldset/fieldset.js.map +1 -0
  246. package/dist/particles/footer-copyright/footer-copyright.d.ts +32 -0
  247. package/dist/particles/footer-copyright/footer-copyright.js +50 -0
  248. package/dist/particles/footer-copyright/footer-copyright.js.map +1 -0
  249. package/dist/particles/footer-link-group/footer-link-group.d.ts +66 -0
  250. package/dist/particles/footer-link-group/footer-link-group.js +154 -0
  251. package/dist/particles/footer-link-group/footer-link-group.js.map +1 -0
  252. package/dist/particles/footer-root/footer-root.d.ts +21 -0
  253. package/dist/particles/footer-root/footer-root.js +38 -0
  254. package/dist/particles/footer-root/footer-root.js.map +1 -0
  255. package/dist/particles/footer-social/footer-social.d.ts +79 -0
  256. package/dist/particles/footer-social/footer-social.js +176 -0
  257. package/dist/particles/footer-social/footer-social.js.map +1 -0
  258. package/dist/particles/gallery/gallery.d.ts +181 -0
  259. package/dist/particles/gallery/gallery.js +920 -0
  260. package/dist/particles/gallery/gallery.js.map +1 -0
  261. package/dist/particles/header-root/header-root.d.ts +21 -0
  262. package/dist/particles/header-root/header-root.js +38 -0
  263. package/dist/particles/header-root/header-root.js.map +1 -0
  264. package/dist/particles/icon/icon.d.ts +22 -0
  265. package/dist/particles/icon/icon.js +48 -0
  266. package/dist/particles/icon/icon.js.map +1 -0
  267. package/dist/particles/image/image.d.ts +13 -0
  268. package/dist/particles/image/image.js +59 -0
  269. package/dist/particles/image/image.js.map +1 -0
  270. package/dist/particles/incentives/incentives.d.ts +85 -0
  271. package/dist/particles/incentives/incentives.js +200 -0
  272. package/dist/particles/incentives/incentives.js.map +1 -0
  273. package/dist/particles/input/input.d.ts +9 -0
  274. package/dist/particles/input/input.js +28 -0
  275. package/dist/particles/input/input.js.map +1 -0
  276. package/dist/particles/logo/logo.d.ts +55 -0
  277. package/dist/particles/logo/logo.js +96 -0
  278. package/dist/particles/logo/logo.js.map +1 -0
  279. package/dist/particles/menu/menu.d.ts +103 -0
  280. package/dist/particles/menu/menu.js +409 -0
  281. package/dist/particles/menu/menu.js.map +1 -0
  282. package/dist/particles/menubar/menubar.d.ts +18 -0
  283. package/dist/particles/menubar/menubar.js +42 -0
  284. package/dist/particles/menubar/menubar.js.map +1 -0
  285. package/dist/particles/meter/meter.d.ts +36 -0
  286. package/dist/particles/meter/meter.js +132 -0
  287. package/dist/particles/meter/meter.js.map +1 -0
  288. package/dist/particles/navigation-link/navigation-link.d.ts +43 -0
  289. package/dist/particles/navigation-link/navigation-link.js +82 -0
  290. package/dist/particles/navigation-link/navigation-link.js.map +1 -0
  291. package/dist/particles/navigation-link-list/navigation-link-list.d.ts +59 -0
  292. package/dist/particles/navigation-link-list/navigation-link-list.js +103 -0
  293. package/dist/particles/navigation-link-list/navigation-link-list.js.map +1 -0
  294. package/dist/particles/navigation-menu/navigation-menu.d.ts +78 -0
  295. package/dist/particles/navigation-menu/navigation-menu.js +295 -0
  296. package/dist/particles/navigation-menu/navigation-menu.js.map +1 -0
  297. package/dist/particles/number-field/number-field.d.ts +46 -0
  298. package/dist/particles/number-field/number-field.js +169 -0
  299. package/dist/particles/number-field/number-field.js.map +1 -0
  300. package/dist/particles/password-field/password-field.d.ts +31 -0
  301. package/dist/particles/password-field/password-field.js +109 -0
  302. package/dist/particles/password-field/password-field.js.map +1 -0
  303. package/dist/particles/payment-methods/payment-methods.d.ts +72 -0
  304. package/dist/particles/payment-methods/payment-methods.js +151 -0
  305. package/dist/particles/payment-methods/payment-methods.js.map +1 -0
  306. package/dist/particles/phone-field/phone-field.d.ts +67 -0
  307. package/dist/particles/phone-field/phone-field.js +250 -0
  308. package/dist/particles/phone-field/phone-field.js.map +1 -0
  309. package/dist/particles/popover/popover.d.ts +68 -0
  310. package/dist/particles/popover/popover.js +284 -0
  311. package/dist/particles/popover/popover.js.map +1 -0
  312. package/dist/particles/postal-code-field/postal-code-field.d.ts +75 -0
  313. package/dist/particles/postal-code-field/postal-code-field.js +169 -0
  314. package/dist/particles/postal-code-field/postal-code-field.js.map +1 -0
  315. package/dist/particles/promotion/promotion.d.ts +46 -0
  316. package/dist/particles/promotion/promotion.js +78 -0
  317. package/dist/particles/promotion/promotion.js.map +1 -0
  318. package/dist/particles/quantity-selector/quantity-selector.d.ts +30 -0
  319. package/dist/particles/quantity-selector/quantity-selector.js +116 -0
  320. package/dist/particles/quantity-selector/quantity-selector.js.map +1 -0
  321. package/dist/particles/radio/radio.d.ts +36 -0
  322. package/dist/particles/radio/radio.js +76 -0
  323. package/dist/particles/radio/radio.js.map +1 -0
  324. package/dist/particles/scroll-area/scroll-area.d.ts +36 -0
  325. package/dist/particles/scroll-area/scroll-area.js +145 -0
  326. package/dist/particles/scroll-area/scroll-area.js.map +1 -0
  327. package/dist/particles/select/select.d.ts +125 -0
  328. package/dist/particles/select/select.js +478 -0
  329. package/dist/particles/select/select.js.map +1 -0
  330. package/dist/particles/separator/separator.d.ts +12 -0
  331. package/dist/particles/separator/separator.js +33 -0
  332. package/dist/particles/separator/separator.js.map +1 -0
  333. package/dist/particles/shared/input-mask.d.ts +5 -0
  334. package/dist/particles/shared/input-mask.js +58 -0
  335. package/dist/particles/shared/input-mask.js.map +1 -0
  336. package/dist/particles/spinner/spinner.d.ts +13 -0
  337. package/dist/particles/spinner/spinner.js +31 -0
  338. package/dist/particles/spinner/spinner.js.map +1 -0
  339. package/dist/particles/switch/switch.d.ts +27 -0
  340. package/dist/particles/switch/switch.js +59 -0
  341. package/dist/particles/switch/switch.js.map +1 -0
  342. package/dist/particles/tabs/tabs.d.ts +45 -0
  343. package/dist/particles/tabs/tabs.js +164 -0
  344. package/dist/particles/tabs/tabs.js.map +1 -0
  345. package/dist/particles/text/text.d.ts +24 -0
  346. package/dist/particles/text/text.js +40 -0
  347. package/dist/particles/text/text.js.map +1 -0
  348. package/dist/particles/toast/toast.d.ts +83 -0
  349. package/dist/particles/toast/toast.js +194 -0
  350. package/dist/particles/toast/toast.js.map +1 -0
  351. package/dist/particles/toggle/toggle.d.ts +26 -0
  352. package/dist/particles/toggle/toggle.js +61 -0
  353. package/dist/particles/toggle/toggle.js.map +1 -0
  354. package/dist/particles/tooltip/tooltip.d.ts +61 -0
  355. package/dist/particles/tooltip/tooltip.js +240 -0
  356. package/dist/particles/tooltip/tooltip.js.map +1 -0
  357. package/dist/schema.graphql +2953 -0
  358. package/dist/sdk/actions/cart-action-provider.d.ts +19 -0
  359. package/dist/sdk/actions/cart-action-provider.js +23 -0
  360. package/dist/sdk/actions/cart-action-provider.js.map +1 -0
  361. package/dist/sdk/actions/identity-action-provider.d.ts +15 -0
  362. package/dist/sdk/actions/identity-action-provider.js +19 -0
  363. package/dist/sdk/actions/identity-action-provider.js.map +1 -0
  364. package/dist/sdk/actions/index.d.ts +7 -0
  365. package/dist/sdk/actions/index.js +6 -0
  366. package/dist/sdk/actions/inject-actions.d.ts +14 -0
  367. package/dist/sdk/actions/inject-actions.js +36 -0
  368. package/dist/sdk/actions/inject-actions.js.map +1 -0
  369. package/dist/sdk/actions/region-action-provider.d.ts +15 -0
  370. package/dist/sdk/actions/region-action-provider.js +19 -0
  371. package/dist/sdk/actions/region-action-provider.js.map +1 -0
  372. package/dist/sdk/actions/session-action-provider.d.ts +15 -0
  373. package/dist/sdk/actions/session-action-provider.js +19 -0
  374. package/dist/sdk/actions/session-action-provider.js.map +1 -0
  375. package/dist/sdk/actions/shipping-action-provider.d.ts +15 -0
  376. package/dist/sdk/actions/shipping-action-provider.js +19 -0
  377. package/dist/sdk/actions/shipping-action-provider.js.map +1 -0
  378. package/dist/sdk/actions/types.d.ts +21 -0
  379. package/dist/sdk/cache/storefront-cache.js +35 -0
  380. package/dist/sdk/cache/storefront-cache.js.map +1 -0
  381. package/dist/sdk/cart/operations.d.ts +31 -0
  382. package/dist/sdk/cart/operations.js +215 -0
  383. package/dist/sdk/cart/operations.js.map +1 -0
  384. package/dist/sdk/cart/optimistic.d.ts +24 -0
  385. package/dist/sdk/cart/optimistic.js +164 -0
  386. package/dist/sdk/cart/optimistic.js.map +1 -0
  387. package/dist/sdk/cart/use-cart-actions.d.ts +56 -0
  388. package/dist/sdk/cart/use-cart-actions.js +348 -0
  389. package/dist/sdk/cart/use-cart-actions.js.map +1 -0
  390. package/dist/sdk/cart/use-cart-validate-on-open.js +50 -0
  391. package/dist/sdk/cart/use-cart-validate-on-open.js.map +1 -0
  392. package/dist/sdk/cart/write-gate.js +54 -0
  393. package/dist/sdk/cart/write-gate.js.map +1 -0
  394. package/dist/sdk/client/assert-api-url.js +20 -0
  395. package/dist/sdk/client/assert-api-url.js.map +1 -0
  396. package/dist/sdk/client/create-client.d.ts +23 -0
  397. package/dist/sdk/client/create-client.js +46 -0
  398. package/dist/sdk/client/create-client.js.map +1 -0
  399. package/dist/sdk/client/fetch-page-data.d.ts +39 -0
  400. package/dist/sdk/client/fetch-page-data.js +33 -0
  401. package/dist/sdk/client/fetch-page-data.js.map +1 -0
  402. package/dist/sdk/client/register-preload-query.d.ts +24 -0
  403. package/dist/sdk/client/register-preload-query.js +33 -0
  404. package/dist/sdk/client/register-preload-query.js.map +1 -0
  405. package/dist/sdk/content/create-content-runtime.d.ts +68 -0
  406. package/dist/sdk/content/create-content-runtime.js +503 -0
  407. package/dist/sdk/content/create-content-runtime.js.map +1 -0
  408. package/dist/sdk/context/headers.d.ts +15 -0
  409. package/dist/sdk/context/headers.js +21 -0
  410. package/dist/sdk/context/headers.js.map +1 -0
  411. package/dist/sdk/context/storefront-context.d.ts +11 -0
  412. package/dist/sdk/context/storefront-context.js +29 -0
  413. package/dist/sdk/context/storefront-context.js.map +1 -0
  414. package/dist/sdk/data/data-override-context.d.ts +12 -0
  415. package/dist/sdk/data/data-override-context.js +19 -0
  416. package/dist/sdk/data/data-override-context.js.map +1 -0
  417. package/dist/sdk/data/entity-subscriber.js +28 -0
  418. package/dist/sdk/data/entity-subscriber.js.map +1 -0
  419. package/dist/sdk/data/hot-data-provider.d.ts +19 -0
  420. package/dist/sdk/data/hot-data-provider.js +33 -0
  421. package/dist/sdk/data/hot-data-provider.js.map +1 -0
  422. package/dist/sdk/data/index.d.ts +8 -0
  423. package/dist/sdk/data/index.js +8 -0
  424. package/dist/sdk/data/list-item-ref-context.d.ts +20 -0
  425. package/dist/sdk/data/list-item-ref-context.js +11 -0
  426. package/dist/sdk/data/list-item-ref-context.js.map +1 -0
  427. package/dist/sdk/data/multiple-reactive-data-provider.d.ts +32 -0
  428. package/dist/sdk/data/multiple-reactive-data-provider.js +20 -0
  429. package/dist/sdk/data/multiple-reactive-data-provider.js.map +1 -0
  430. package/dist/sdk/data/page-reactive-data-root.d.ts +53 -0
  431. package/dist/sdk/data/page-reactive-data-root.js +153 -0
  432. package/dist/sdk/data/page-reactive-data-root.js.map +1 -0
  433. package/dist/sdk/data/reactive-data-provider.d.ts +25 -0
  434. package/dist/sdk/data/reactive-data-provider.js +24 -0
  435. package/dist/sdk/data/reactive-data-provider.js.map +1 -0
  436. package/dist/sdk/data/reactive-list-item-data-provider.d.ts +26 -0
  437. package/dist/sdk/data/reactive-list-item-data-provider.js +42 -0
  438. package/dist/sdk/data/reactive-list-item-data-provider.js.map +1 -0
  439. package/dist/sdk/data/use-reactive-entity.js +40 -0
  440. package/dist/sdk/data/use-reactive-entity.js.map +1 -0
  441. package/dist/sdk/format/client.d.ts +12 -0
  442. package/dist/sdk/format/client.js +20 -0
  443. package/dist/sdk/format/client.js.map +1 -0
  444. package/dist/sdk/format/formatters.d.ts +32 -0
  445. package/dist/sdk/format/formatters.js +45 -0
  446. package/dist/sdk/format/formatters.js.map +1 -0
  447. package/dist/sdk/generated/fragment-types.js +23 -0
  448. package/dist/sdk/generated/fragment-types.js.map +1 -0
  449. package/dist/sdk/generated/gql.js +51 -0
  450. package/dist/sdk/generated/gql.js.map +1 -0
  451. package/dist/sdk/generated/graphql.d.ts +622 -0
  452. package/dist/sdk/generated/graphql.js +11917 -0
  453. package/dist/sdk/generated/graphql.js.map +1 -0
  454. package/dist/sdk/graphql-tag.d.ts +10 -0
  455. package/dist/sdk/graphql-tag.js +21 -0
  456. package/dist/sdk/graphql-tag.js.map +1 -0
  457. package/dist/sdk/i18n/client.d.ts +4 -0
  458. package/dist/sdk/i18n/client.js +4 -0
  459. package/dist/sdk/i18n/locales.d.ts +8 -0
  460. package/dist/sdk/i18n/locales.js +57 -0
  461. package/dist/sdk/i18n/locales.js.map +1 -0
  462. package/dist/sdk/i18n/messages/en-US.js +24 -0
  463. package/dist/sdk/i18n/messages/en-US.js.map +1 -0
  464. package/dist/sdk/i18n/messages/en-US.json +19 -0
  465. package/dist/sdk/i18n/messages/en-US.json.d.ts +23 -0
  466. package/dist/sdk/i18n/messages/es-ES.js +24 -0
  467. package/dist/sdk/i18n/messages/es-ES.js.map +1 -0
  468. package/dist/sdk/i18n/messages/es-ES.json +19 -0
  469. package/dist/sdk/i18n/messages/pt-BR.js +24 -0
  470. package/dist/sdk/i18n/messages/pt-BR.js.map +1 -0
  471. package/dist/sdk/i18n/messages/pt-BR.json +19 -0
  472. package/dist/sdk/i18n/provider.d.ts +1 -0
  473. package/dist/sdk/i18n/provider.js +30 -0
  474. package/dist/sdk/i18n/provider.js.map +1 -0
  475. package/dist/sdk/i18n/server.d.ts +28 -0
  476. package/dist/sdk/i18n/server.js +59 -0
  477. package/dist/sdk/i18n/server.js.map +1 -0
  478. package/dist/sdk/identity/operations.d.ts +34 -0
  479. package/dist/sdk/identity/operations.js +78 -0
  480. package/dist/sdk/identity/operations.js.map +1 -0
  481. package/dist/sdk/identity/use-identity-actions.d.ts +62 -0
  482. package/dist/sdk/identity/use-identity-actions.js +180 -0
  483. package/dist/sdk/identity/use-identity-actions.js.map +1 -0
  484. package/dist/sdk/provider/index.d.ts +2 -0
  485. package/dist/sdk/provider/index.js +2 -0
  486. package/dist/sdk/provider/storefront-provider.d.ts +32 -0
  487. package/dist/sdk/provider/storefront-provider.js +111 -0
  488. package/dist/sdk/provider/storefront-provider.js.map +1 -0
  489. package/dist/sdk/region/operations.d.ts +6 -0
  490. package/dist/sdk/region/region-operations.d.ts +30 -0
  491. package/dist/sdk/region/region-operations.js +23 -0
  492. package/dist/sdk/region/region-operations.js.map +1 -0
  493. package/dist/sdk/region/use-region-actions.d.ts +23 -0
  494. package/dist/sdk/region/use-region-actions.js +66 -0
  495. package/dist/sdk/region/use-region-actions.js.map +1 -0
  496. package/dist/sdk/seller.js +11 -0
  497. package/dist/sdk/seller.js.map +1 -0
  498. package/dist/sdk/session/auth-operations.d.ts +47 -0
  499. package/dist/sdk/session/auth-operations.js +79 -0
  500. package/dist/sdk/session/auth-operations.js.map +1 -0
  501. package/dist/sdk/session/operations.d.ts +6 -0
  502. package/dist/sdk/session/use-session-actions.d.ts +27 -0
  503. package/dist/sdk/session/use-session-actions.js +126 -0
  504. package/dist/sdk/session/use-session-actions.js.map +1 -0
  505. package/dist/sdk/shipping/cart-operations.d.ts +3 -0
  506. package/dist/sdk/shipping/cart-operations.js +33 -0
  507. package/dist/sdk/shipping/cart-operations.js.map +1 -0
  508. package/dist/sdk/shipping/operations.d.ts +3 -0
  509. package/dist/sdk/shipping/operations.js +33 -0
  510. package/dist/sdk/shipping/operations.js.map +1 -0
  511. package/dist/sdk/shipping/option-select-operations.d.ts +24 -0
  512. package/dist/sdk/shipping/option-select-operations.js +45 -0
  513. package/dist/sdk/shipping/option-select-operations.js.map +1 -0
  514. package/dist/sdk/shipping/request-timeout.js +41 -0
  515. package/dist/sdk/shipping/request-timeout.js.map +1 -0
  516. package/dist/sdk/shipping/shipping-operations.d.ts +38 -0
  517. package/dist/sdk/shipping/shipping-operations.js +77 -0
  518. package/dist/sdk/shipping/shipping-operations.js.map +1 -0
  519. package/dist/sdk/shipping/use-cart-shipping-simulation.d.ts +7 -0
  520. package/dist/sdk/shipping/use-cart-shipping-simulation.js +72 -0
  521. package/dist/sdk/shipping/use-cart-shipping-simulation.js.map +1 -0
  522. package/dist/sdk/shipping/use-shipping-actions.d.ts +27 -0
  523. package/dist/sdk/shipping/use-shipping-actions.js +113 -0
  524. package/dist/sdk/shipping/use-shipping-actions.js.map +1 -0
  525. package/dist/sdk/shipping/use-shipping-simulation.d.ts +7 -0
  526. package/dist/sdk/shipping/use-shipping-simulation.js +72 -0
  527. package/dist/sdk/shipping/use-shipping-simulation.js.map +1 -0
  528. package/dist/sdk/state/cart.d.ts +42 -0
  529. package/dist/sdk/state/cart.js +64 -0
  530. package/dist/sdk/state/cart.js.map +1 -0
  531. package/dist/sdk/state/index.js +3 -0
  532. package/dist/sdk/state/variant-selector.d.ts +17 -0
  533. package/dist/sdk/state/variant-selector.js +14 -0
  534. package/dist/sdk/state/variant-selector.js.map +1 -0
  535. package/dist/utils/safe-href.js +63 -0
  536. package/dist/utils/safe-href.js.map +1 -0
  537. package/package.json +84 -0
  538. package/src/styles/tailwind.css +32 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","names":[],"sources":["../../../src/matter/pricing/pricing.tsx"],"sourcesContent":["'use client';\n\nimport { useReactiveVar } from '@apollo/client/react';\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef } from 'react';\nimport { createContext, Suspense, useContext } from 'react';\nimport { PopoverTrigger } from '../../particles/popover/popover.js';\nimport { TabsPanel, TabsTab } from '../../particles/tabs/tabs.js';\nimport { useStorefrontContext } from '../../sdk/context/storefront-context.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport { HotDataProvider } from '../../sdk/data/hot-data-provider.js';\nimport { graphql } from '../../sdk/generated/gql.js';\nimport type { VariantPricingDataFragment } from '../../sdk/generated/graphql.js';\nimport { resolveDefaultSeller } from '../../sdk/seller.js';\nimport { publishedVariantIdFor, selectedVariantVar } from '../../sdk/state/variant-selector.js';\n\n// ---------------------------------------------------------------------------\n// GraphQL Fragment\n// ---------------------------------------------------------------------------\n\nconst fragment = /* GraphQL */ `\n fragment PricingData on Query {\n productBySlug(slug: $slug) {\n __typename\n id\n variants(first: 1) {\n edges {\n node {\n sellers {\n isDefault\n offer {\n price { amount currencyCode }\n listPrice { amount currencyCode }\n spotPrice { amount currencyCode }\n installmentPlans {\n paymentMethod\n paymentType\n installments {\n count\n value { amount currencyCode }\n totalAmount { amount currencyCode }\n interestRate\n interestFree\n }\n }\n discountHighlights\n promotions {\n name\n }\n }\n }\n }\n }\n }\n }\n }\n`;\n\n// The variant offer slice, authored via graphql() so HotDataProvider gets a TypedDocumentNode.\n// Declared so codegen scans the source and emits VariantPricingDataFragment; the fragment is spread\n// into variantQuery at the GraphQL layer, so the variable is unused at runtime.\nconst _variantFragment = graphql(`\n fragment VariantPricingData on Variant {\n __typename\n id\n sellers {\n isDefault\n offer {\n price { amount currencyCode }\n listPrice { amount currencyCode }\n spotPrice { amount currencyCode }\n installmentPlans {\n paymentMethod\n paymentType\n installments {\n count\n value { amount currencyCode }\n totalAmount { amount currencyCode }\n interestRate\n interestFree\n }\n }\n discountHighlights\n promotions {\n name\n }\n }\n }\n }\n`);\n\nconst variantQuery = graphql(`\n query VariantPricingQuery($id: ID!) {\n node(id: $id) {\n __typename\n ... on Variant {\n ...VariantPricingData\n }\n }\n }\n`);\n\n// ---------------------------------------------------------------------------\n// Raw data types (shape of the fragment result)\n// ---------------------------------------------------------------------------\n\ntype MoneyValue = {\n amount: number;\n currencyCode: string;\n};\n\ntype RawPromotion = {\n name: string;\n};\n\ntype RawOffer = {\n price: MoneyValue;\n listPrice: MoneyValue;\n spotPrice: MoneyValue;\n installmentPlans: Array<{\n paymentMethod: string;\n paymentType: string;\n installments: Array<{\n count: number;\n value: MoneyValue;\n totalAmount: MoneyValue;\n interestRate: number;\n interestFree: boolean;\n }>;\n }>;\n discountHighlights: string[];\n promotions: RawPromotion[];\n};\n\ntype RawPricingData = {\n // __typename/id are optional so existing fixtures (which omit them) still typecheck; the real\n // page query always supplies id, which scopes the published variant selection to this product.\n __typename?: string;\n id?: string;\n variants: {\n edges: Array<{\n node: {\n sellers: Array<{\n isDefault: boolean;\n offer: RawOffer | null;\n }>;\n };\n }>;\n };\n};\n\ntype VariantSlice = VariantPricingDataFragment;\n\ntype NormalizedPricingOffer = {\n price: number;\n listPrice: number;\n spotPrice: number;\n currency: string;\n installmentPlans: InstallmentPlanData[];\n discountHighlights: string[];\n promotions: PromotionData[];\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype InstallmentData = {\n count: number;\n value: number;\n totalAmount: number;\n interestRate: number;\n interestFree: boolean;\n};\n\ntype InstallmentPlanData = {\n paymentMethod: string;\n paymentType: string;\n installments: InstallmentData[];\n};\n\ntype PromotionData = {\n name: string;\n};\n\ntype PricingContextData = {\n price: number;\n listPrice: number;\n spotPrice: number;\n currency: string;\n /** Undefined only for a directly-rendered view: `Intl` reads it as the platform default. */\n locale: string | undefined;\n installmentPlans: InstallmentPlanData[];\n discountHighlights: string[];\n promotions: PromotionData[];\n hasDiscount: boolean;\n hasSpotDiscount: boolean;\n discountPercentage: number;\n spotDiscountPercentage: number;\n bestInstallment: InstallmentData | null;\n};\n\ntype PricingContextValue = PricingContextData | null;\n\ntype InstallmentPlanItemContextData = {\n paymentMethod: string;\n paymentType: string;\n installments: InstallmentData[];\n bestInstallment: InstallmentData | null;\n};\n\nconst PRICING_CONTEXT_UNSET = Symbol('PricingContextUnset');\n\nexport type PricingRootProps = ComponentPropsWithRef<'div'> & {\n $data?: RawPricingData | null;\n /** Page-supplied viewed SKU; pre-selects the offer on first paint. A published swatch selection\n * wins over it once the shopper interacts. */\n selectedVariantId?: string;\n};\n\nexport type PricingSellingPriceProps = ComponentPropsWithRef<'span'>;\n\nexport type PricingListPriceProps = ComponentPropsWithRef<'span'>;\n\nexport type PricingSpotPriceProps = ComponentPropsWithRef<'span'>;\n\nexport type PricingInstallmentsProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingInstallmentPlansProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingInstallmentPlanProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingInstallmentsForPlanProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingPaymentMethodsTriggerProps = ComponentPropsWithRef<'button'>;\n\nexport type PricingPaymentMethodsListProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingPaymentMethodsTabListProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingPaymentMethodsTabPanelsProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingPaymentMethodNameProps = ComponentPropsWithRef<'span'>;\n\nexport type PricingInstallmentProps = ComponentPropsWithRef<'span'> & {\n template?: string;\n interestFreeLabel?: string;\n};\n\nexport type PricingDiscountProps = ComponentPropsWithRef<'span'> & {\n template?: string;\n format?: 'percentage' | 'absolute';\n};\n\nexport type PricingHighlightsProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingHighlightProps = ComponentPropsWithRef<'span'>;\n\nexport type PricingPromotionsProps = ComponentPropsWithRef<'div'>;\n\nexport type PricingPromotionProps = ComponentPropsWithRef<'span'> & {\n template?: string;\n};\n\nexport type PricingSpotDiscountProps = ComponentPropsWithRef<'span'> & {\n template?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nconst PricingContext = createContext<PricingContextValue | typeof PRICING_CONTEXT_UNSET>(PRICING_CONTEXT_UNSET);\n\nconst InstallmentItemContext = createContext<InstallmentData | null>(null);\n\nconst InstallmentPlanItemContext = createContext<InstallmentPlanItemContextData | null>(null);\n\nconst HighlightItemContext = createContext<string | null>(null);\n\nconst PromotionItemContext = createContext<PromotionData | null>(null);\n\nfunction usePricing(): PricingContextValue {\n const ctx = useContext(PricingContext);\n if (ctx === PRICING_CONTEXT_UNSET) {\n throw new Error('Pricing components must be used inside PricingRoot.');\n }\n return ctx;\n}\n\nfunction useInstallmentItem(): InstallmentData {\n const ctx = useContext(InstallmentItemContext);\n if (!ctx) {\n throw new Error('PricingInstallment must be used inside PricingInstallments.');\n }\n return ctx;\n}\n\nexport function useInstallmentPlanItem(\n caller = 'PricingInstallmentPlan',\n parent = 'PricingInstallmentPlans',\n): InstallmentPlanItemContextData {\n const ctx = useContext(InstallmentPlanItemContext);\n if (!ctx) {\n throw new Error(`${caller} must be used inside ${parent}.`);\n }\n return ctx;\n}\n\nfunction useHighlightItem(): string {\n const ctx = useContext(HighlightItemContext);\n if (ctx === null) {\n throw new Error('PricingHighlight must be used inside PricingHighlights.');\n }\n return ctx;\n}\n\nfunction usePromotionItem(): PromotionData {\n const ctx = useContext(PromotionItemContext);\n if (!ctx) {\n throw new Error('PricingPromotion must be used inside PricingPromotions.');\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction formatPrice(value: number, locale: string | undefined, currency: string): string {\n return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(value);\n}\n\nfunction findBestInstallment(plans: InstallmentPlanData[]): InstallmentData | null {\n const allInstallments = plans.flatMap((plan) => plan.installments);\n if (allInstallments.length === 0) return null;\n\n const interestFree = allInstallments.filter((i) => i.interestFree);\n if (interestFree.length > 0) {\n return interestFree.reduce((best, current) => (current.count > best.count ? current : best));\n }\n\n return allInstallments.reduce((best, current) => (current.count > best.count ? current : best));\n}\n\n// ---------------------------------------------------------------------------\n// Transform\n// ---------------------------------------------------------------------------\n\nfunction normalizeOffer(offer: RawOffer): NormalizedPricingOffer {\n return {\n price: offer.price.amount,\n listPrice: offer.listPrice.amount,\n spotPrice: offer.spotPrice.amount,\n currency: offer.price.currencyCode,\n installmentPlans: offer.installmentPlans.map((plan) => ({\n paymentMethod: plan.paymentMethod,\n paymentType: plan.paymentType,\n installments: plan.installments.map((inst) => ({\n count: inst.count,\n value: inst.value.amount,\n totalAmount: inst.totalAmount.amount,\n interestRate: inst.interestRate,\n interestFree: inst.interestFree,\n })),\n })),\n discountHighlights: offer.discountHighlights,\n promotions: offer.promotions.map((promotion) => ({ name: promotion.name })),\n };\n}\n\n// Resolves a variant's default seller and normalizes its offer, or null when that seller has no\n// offer. Shared by the product-level and selected-variant transforms so the default-seller + offer\n// gate lives in one place.\nfunction pricingOfferFromVariant(variant: {\n sellers: readonly { isDefault: boolean; offer: RawOffer | null }[];\n}): NormalizedPricingOffer | null {\n const seller = resolveDefaultSeller(variant.sellers);\n const offer = seller?.offer;\n if (!offer) return null;\n\n return normalizeOffer(offer);\n}\n\nfunction transformPricingData(data: RawPricingData): NormalizedPricingOffer | null {\n const edge = data.variants.edges[0];\n if (!edge) return null;\n\n return pricingOfferFromVariant(edge.node);\n}\n\nexport function transformVariantPricingData(variant: VariantSlice): NormalizedPricingOffer | null {\n return pricingOfferFromVariant(variant);\n}\n\n// ---------------------------------------------------------------------------\n// Definitions\n// ---------------------------------------------------------------------------\n\nexport const PricingRootDefinition = defineComponent<PricingRootProps>({\n name: 'PricingRoot',\n importPath: '@vtex/faststore/components',\n component: PricingRoot,\n fragment,\n fetchStrategy: 'lazy',\n skeleton: PricingSkeleton,\n editor: { label: 'Pricing', category: 'commerce' },\n schema: {\n selectedVariantId: { type: 'string', label: 'Selected Variant ID' },\n },\n guideline:\n 'Root container for the PDP pricing block; all other Pricing sub-components must be descendants of it. Automatically recomputes the offer when a shopper picks a VariantSelector swatch (it reads the published variant selection); the selectedVariantId prop is an optional pre-selection fallback. Falls back silently to the product-level offer on variant fetch error. See pricing.md.',\n});\n\nexport const PricingSellingPriceDefinition = defineComponent<PricingSellingPriceProps>({\n name: 'PricingSellingPrice',\n importPath: '@vtex/faststore/components',\n component: PricingSellingPrice,\n editor: { label: 'Selling Price', category: 'commerce' },\n schema: {},\n guideline: 'Displays the current selling price; must be a descendant of PricingRoot.',\n});\n\nexport const PricingListPriceDefinition = defineComponent<PricingListPriceProps>({\n name: 'PricingListPrice',\n importPath: '@vtex/faststore/components',\n component: PricingListPrice,\n editor: { label: 'List Price', category: 'commerce' },\n schema: {},\n guideline:\n 'Displays the original (strikethrough) list price; only renders when a discount exists. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingSpotPriceDefinition = defineComponent<PricingSpotPriceProps>({\n name: 'PricingSpotPrice',\n importPath: '@vtex/faststore/components',\n component: PricingSpotPrice,\n editor: { label: 'Spot Price', category: 'commerce' },\n schema: {},\n guideline:\n 'Displays the best cash/instant-payment price (e.g. Pix); only renders when spotPrice is lower than the selling price. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingInstallmentsDefinition = defineComponent<PricingInstallmentsProps>({\n name: 'PricingInstallments',\n importPath: '@vtex/faststore/components',\n component: PricingInstallments,\n editor: { label: 'Installments', category: 'commerce' },\n schema: {},\n guideline:\n 'Shortcut container that exposes the single best installment across all plans; use PricingInstallmentPlans instead when a per-payment-method breakdown is needed. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingInstallmentPlansDefinition = defineComponent<PricingInstallmentPlansProps>({\n name: 'PricingInstallmentPlans',\n importPath: '@vtex/faststore/components',\n component: PricingInstallmentPlans,\n editor: { label: 'Installment Plans', category: 'commerce' },\n schema: {},\n guideline:\n 'Renders one row per payment method; use PricingInstallments instead when only the single best plan is needed. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingInstallmentPlanDefinition = defineComponent<PricingInstallmentPlanProps>({\n name: 'PricingInstallmentPlan',\n importPath: '@vtex/faststore/components',\n component: PricingInstallmentPlan,\n editor: { label: 'Installment Plan', category: 'commerce' },\n schema: {},\n guideline:\n 'Renders a single plan row inside PricingInstallmentPlans; nest PricingInstallmentsForPlan inside it to list every installment tier instead of just the best one. Must be a descendant of PricingInstallmentPlans.',\n});\n\nexport const PricingInstallmentsForPlanDefinition = defineComponent<PricingInstallmentsForPlanProps>({\n name: 'PricingInstallmentsForPlan',\n importPath: '@vtex/faststore/components',\n component: PricingInstallmentsForPlan,\n editor: { label: 'Installments For Plan', category: 'commerce' },\n schema: {},\n guideline:\n 'Iterates every installment tier (1x, 2x, … Nx) of the enclosing plan; must be a descendant of PricingInstallmentPlan.',\n});\n\nexport const PricingPaymentMethodsTriggerDefinition = defineComponent<PricingPaymentMethodsTriggerProps>({\n name: 'PricingPaymentMethodsTrigger',\n importPath: '@vtex/faststore/components',\n component: PricingPaymentMethodsTrigger,\n editor: { label: 'Payment Methods Trigger', category: 'action' },\n schema: {},\n guideline: 'Button that opens the payment-methods disclosure panel; must be a descendant of PopoverRoot.',\n});\n\nexport const PricingPaymentMethodsListDefinition = defineComponent<PricingPaymentMethodsListProps>({\n name: 'PricingPaymentMethodsList',\n importPath: '@vtex/faststore/components',\n component: PricingPaymentMethodsList,\n editor: { label: 'Payment Methods List', category: 'commerce' },\n schema: {},\n guideline:\n 'Flat disclosure panel content listing every payment plan; place inside PopoverPopup, DialogPopup, or DrawerPopup. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingPaymentMethodsTabListDefinition = defineComponent<PricingPaymentMethodsTabListProps>({\n name: 'PricingPaymentMethodsTabList',\n importPath: '@vtex/faststore/components',\n component: PricingPaymentMethodsTabList,\n editor: { label: 'Payment Methods Tab List', category: 'commerce' },\n schema: {},\n guideline:\n 'Emits one tab per payment plan for the tab-grouped disclosure pattern; must be a descendant of TabsList (which is inside TabsRoot). Pair with PricingPaymentMethodsTabPanels.',\n});\n\nexport const PricingPaymentMethodsTabPanelsDefinition = defineComponent<PricingPaymentMethodsTabPanelsProps>({\n name: 'PricingPaymentMethodsTabPanels',\n importPath: '@vtex/faststore/components',\n component: PricingPaymentMethodsTabPanels,\n editor: { label: 'Payment Methods Tab Panels', category: 'commerce' },\n schema: {},\n guideline:\n 'Emits one panel per payment plan for the tab-grouped disclosure pattern; must be a sibling of TabsList under TabsRoot (not nested inside TabsList). Pair with PricingPaymentMethodsTabList.',\n});\n\nexport const PricingPaymentMethodNameDefinition = defineComponent<PricingPaymentMethodNameProps>({\n name: 'PricingPaymentMethodName',\n importPath: '@vtex/faststore/components',\n component: PricingPaymentMethodName,\n editor: { label: 'Payment Method Name', category: 'commerce' },\n schema: {},\n guideline:\n 'Renders the enclosing plan\\'s payment method name (e.g. \"Visa\", \"Pix\"); must be inside a plan context — PricingInstallmentPlan, PricingPaymentMethodsTabList, or PricingPaymentMethodsTabPanels.',\n});\n\nexport const PricingInstallmentDefinition = defineComponent<PricingInstallmentProps>({\n name: 'PricingInstallment',\n importPath: '@vtex/faststore/components',\n component: PricingInstallment,\n editor: { label: 'Installment', category: 'commerce' },\n schema: {\n template: { type: 'string', default: '{count}x de {value}', label: 'Template' },\n interestFreeLabel: { type: 'string', default: 'sem juros', label: 'Interest-free label' },\n },\n guideline:\n 'Renders a single installment line using {count} and {value} template placeholders; must be a descendant of PricingInstallments, PricingInstallmentPlan, or PricingInstallmentsForPlan.',\n});\n\nexport const PricingDiscountDefinition = defineComponent<PricingDiscountProps>({\n name: 'PricingDiscount',\n importPath: '@vtex/faststore/components',\n component: PricingDiscount,\n editor: { label: 'Discount Badge', category: 'commerce' },\n schema: {\n format: { type: ['percentage', 'absolute'] as const, default: 'percentage', label: 'Discount Format' },\n template: { type: 'string', label: 'Template' },\n },\n guideline:\n 'Discount badge for the listPrice-vs-price markdown; use PricingSpotDiscount instead for the spotPrice-vs-price (Pix/cash) percentage. The format prop switches between a percentage (-25%, default) and an absolute amount (-R$ 10,00); the template supports {percentage} and {amount} placeholders and defaults to the format-appropriate one. Recomputes automatically on swatch change. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingSpotDiscountDefinition = defineComponent<PricingSpotDiscountProps>({\n name: 'PricingSpotDiscount',\n importPath: '@vtex/faststore/components',\n component: PricingSpotDiscount,\n editor: { label: 'Spot Discount Badge', category: 'commerce' },\n schema: {\n template: { type: 'string', default: '-{percentage}%', label: 'Template' },\n },\n guideline:\n 'Discount badge for the spotPrice-vs-price (cash/Pix) percentage; use PricingDiscount instead for the listPrice-vs-price percentage. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingHighlightsDefinition = defineComponent<PricingHighlightsProps>({\n name: 'PricingHighlights',\n importPath: '@vtex/faststore/components',\n component: PricingHighlights,\n editor: { label: 'Highlights', category: 'commerce' },\n schema: {},\n guideline:\n 'Iterates the offer\\'s discount highlight labels (e.g. \"Black Friday\", \"Exclusivo\"); place PricingHighlight as a child. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingHighlightDefinition = defineComponent<PricingHighlightProps>({\n name: 'PricingHighlight',\n importPath: '@vtex/faststore/components',\n component: PricingHighlight,\n editor: { label: 'Highlight', category: 'commerce' },\n schema: {},\n guideline: 'Renders a single highlight label as a span; must be a descendant of PricingHighlights.',\n});\n\nexport const PricingPromotionsDefinition = defineComponent<PricingPromotionsProps>({\n name: 'PricingPromotions',\n importPath: '@vtex/faststore/components',\n component: PricingPromotions,\n editor: { label: 'Promotions', category: 'commerce' },\n schema: {},\n guideline:\n 'Iterates the offer\\'s structured promotions (e.g. \"Compre 3 leve 2\"); place PricingPromotion as a child. Must be a descendant of PricingRoot.',\n});\n\nexport const PricingPromotionDefinition = defineComponent<PricingPromotionProps>({\n name: 'PricingPromotion',\n importPath: '@vtex/faststore/components',\n component: PricingPromotion,\n editor: { label: 'Promotion', category: 'commerce' },\n schema: {\n template: { type: 'string', default: '{name}', label: 'Template' },\n },\n guideline:\n 'Renders a single promotion using the {name} template placeholder; must be a descendant of PricingPromotions.',\n});\n\n// ---------------------------------------------------------------------------\n// Implementations\n// ---------------------------------------------------------------------------\n\nexport function PricingRoot({ $data: $dataProp, selectedVariantId, children, ...props }: PricingRootProps) {\n const { locale, currency } = useStorefrontContext();\n const productSlice = useDataOverride($dataProp) ?? null;\n\n // The VariantSelector matter publishes the shopper's in-page selection here; reading it lets\n // pricing recompute when a swatch changes without a page navigation. Scope the published selection\n // to this product so a swatch picked on another PDP does not leak in after client-side navigation.\n // The explicit selectedVariantId prop is the pre-selection fallback; the live selection wins.\n const publishedSelection = useReactiveVar(selectedVariantVar);\n const publishedVariantId = publishedVariantIdFor(publishedSelection, productSlice?.id ?? null);\n const activeVariantId = publishedVariantId ?? selectedVariantId;\n\n if (activeVariantId) {\n return (\n <Suspense fallback={null}>\n <HotDataProvider\n query={variantQuery}\n variables={{ id: activeVariantId }}\n field=\"node\"\n fallbackData={productSlice}\n >\n <PricingProvider fallbackProductSlice={productSlice} currency={currency} locale={locale} {...props}>\n {children}\n </PricingProvider>\n </HotDataProvider>\n </Suspense>\n );\n }\n\n const transformed = productSlice ? transformPricingData(productSlice) : null;\n\n return (\n <PricingView transformed={transformed} currency={currency} locale={locale} {...props}>\n {children}\n </PricingView>\n );\n}\n\n/**\n * What `PricingRoot` hands its inner views: the container props plus the locale and currency it read\n * from the storefront context. They are internal parameters, not a public prop — `PricingRootProps`\n * no longer carries either.\n */\ntype PricingViewBaseProps = ComponentPropsWithRef<'div'> & {\n currency?: string;\n locale?: string;\n};\n\ntype PricingProviderProps = PricingViewBaseProps & {\n fallbackProductSlice: RawPricingData | null;\n};\n\n// Reads the override written by the nested HotDataProvider: a Variant node when the variant fetch\n// succeeds, or the product slice (fallbackData) on error/null. Dispatch on __typename and always\n// source the product path from the explicit fallback prop so a mis-passed Product node id can never\n// crash the variant transform.\nfunction PricingProvider({ fallbackProductSlice, ...viewProps }: PricingProviderProps) {\n const override = useDataOverride<unknown>(null);\n const overrideTypename = (override as { __typename?: string } | null)?.__typename;\n\n let transformed: NormalizedPricingOffer | null = null;\n if (overrideTypename === 'Variant') {\n transformed = transformVariantPricingData(override as VariantSlice);\n } else if (fallbackProductSlice) {\n transformed = transformPricingData(fallbackProductSlice);\n }\n\n return <PricingView transformed={transformed} {...viewProps} />;\n}\n\ntype PricingViewProps = PricingViewBaseProps & {\n transformed: NormalizedPricingOffer | null;\n};\n\nfunction PricingView({\n transformed,\n currency: currencyProp,\n locale: localeProp,\n className,\n children,\n ...props\n}: PricingViewProps) {\n let contextValue: PricingContextValue = null;\n\n if (transformed) {\n const { price, listPrice, spotPrice, installmentPlans, discountHighlights, promotions } = transformed;\n // `PricingRoot` always hands these down from the context; the offer's own currency is the same\n // channel's by construction, so it is a fallback only for a directly-rendered view.\n const currency = currencyProp ?? transformed.currency;\n // `PricingRoot` always supplies it from the context; a directly-rendered view falls back to the\n // platform default rather than a Brazilian one.\n const locale = localeProp;\n const hasDiscount = listPrice > price;\n const hasSpotDiscount = spotPrice < price;\n const discountPercentage = hasDiscount ? Math.round(((listPrice - price) / listPrice) * 100) : 0;\n const spotDiscountPercentage = hasSpotDiscount ? Math.round(((price - spotPrice) / price) * 100) : 0;\n const bestInstallment = findBestInstallment(installmentPlans);\n\n contextValue = {\n price,\n listPrice,\n spotPrice,\n currency,\n locale,\n installmentPlans,\n discountHighlights,\n promotions,\n hasDiscount,\n hasSpotDiscount,\n discountPercentage,\n spotDiscountPercentage,\n bestInstallment,\n };\n }\n\n return (\n <PricingContext value={contextValue}>\n <div {...props} className={className} data-fs-pricing=\"\">\n {children}\n </div>\n </PricingContext>\n );\n}\n\nexport function PricingSellingPrice({ className, children, ...props }: PricingSellingPriceProps) {\n const ctx = usePricing();\n if (!ctx) return null;\n\n const formatted = formatPrice(ctx.price, ctx.locale, ctx.currency);\n\n return (\n <span {...props} className={className} data-fs-pricing-selling-price=\"\">\n {children ?? formatted}\n </span>\n );\n}\n\nexport function PricingListPrice({ className, children, ...props }: PricingListPriceProps) {\n const ctx = usePricing();\n if (!ctx || !ctx.hasDiscount) return null;\n\n const formatted = formatPrice(ctx.listPrice, ctx.locale, ctx.currency);\n\n return (\n <span {...props} className={className} data-fs-pricing-list-price=\"\">\n {children ?? formatted}\n </span>\n );\n}\n\nexport function PricingSpotPrice({ className, children, ...props }: PricingSpotPriceProps) {\n const ctx = usePricing();\n if (!ctx || !ctx.hasSpotDiscount) return null;\n\n const formatted = formatPrice(ctx.spotPrice, ctx.locale, ctx.currency);\n\n return (\n <span {...props} className={className} data-fs-pricing-spot-price=\"\">\n {children ?? formatted}\n </span>\n );\n}\n\nexport function PricingInstallments({ className, children, ...props }: PricingInstallmentsProps) {\n const ctx = usePricing();\n if (!ctx || !ctx.bestInstallment) return null;\n\n return (\n <InstallmentItemContext value={ctx.bestInstallment}>\n <div {...props} className={className} data-fs-pricing-installments=\"\">\n {children}\n </div>\n </InstallmentItemContext>\n );\n}\n\nexport function PricingInstallmentPlans({ className, children, ...props }: PricingInstallmentPlansProps) {\n const ctx = usePricing();\n if (!ctx || ctx.installmentPlans.length === 0) return null;\n\n const sortedPlans = ctx.installmentPlans\n .map((plan) => ({ plan, bestInstallment: findBestInstallment([plan]) }))\n .sort((a, b) => {\n const aCount = a.bestInstallment?.count ?? Number.POSITIVE_INFINITY;\n const bCount = b.bestInstallment?.count ?? Number.POSITIVE_INFINITY;\n return aCount - bCount;\n });\n\n return (\n <div {...props} className={className} data-fs-pricing-installment-plans=\"\">\n {sortedPlans.map(({ plan, bestInstallment }, index) => (\n <InstallmentPlanItemContext\n key={`${plan.paymentType}-${plan.paymentMethod}-${index}`}\n value={{\n paymentMethod: plan.paymentMethod,\n paymentType: plan.paymentType,\n installments: plan.installments,\n bestInstallment,\n }}\n >\n {children}\n </InstallmentPlanItemContext>\n ))}\n </div>\n );\n}\n\nexport function PricingInstallmentPlan({ className, children, ...props }: PricingInstallmentPlanProps) {\n const plan = useInstallmentPlanItem();\n if (!plan.bestInstallment) return null;\n\n return (\n <InstallmentItemContext value={plan.bestInstallment}>\n <div\n {...props}\n className={className}\n data-fs-pricing-installment-plan=\"\"\n data-fs-pricing-installment-plan-type={plan.paymentType}\n >\n {children}\n </div>\n </InstallmentItemContext>\n );\n}\n\nexport function PricingInstallmentsForPlan({ className, children, ...props }: PricingInstallmentsForPlanProps) {\n const plan = useInstallmentPlanItem('PricingInstallmentsForPlan', 'PricingInstallmentPlan');\n if (plan.installments.length === 0) return null;\n\n return (\n <div {...props} className={className} data-fs-pricing-installments-for-plan=\"\">\n {plan.installments.map((installment, index) => (\n <InstallmentItemContext key={`${installment.count}-${index}`} value={installment}>\n {children}\n </InstallmentItemContext>\n ))}\n </div>\n );\n}\n\nexport function PricingPaymentMethodsTrigger({ className, children, ...props }: PricingPaymentMethodsTriggerProps) {\n return (\n <PopoverTrigger {...props} className={className} data-fs-pricing-payment-methods-trigger=\"\">\n {children}\n </PopoverTrigger>\n );\n}\n\nexport function PricingPaymentMethodsList({ className, children, ...props }: PricingPaymentMethodsListProps) {\n const ctx = usePricing();\n if (!ctx || ctx.installmentPlans.length === 0) return null;\n\n return (\n <div {...props} className={className} data-fs-pricing-payment-methods-list=\"\">\n <PricingInstallmentPlans>{children}</PricingInstallmentPlans>\n </div>\n );\n}\n\nfunction sortPlansForTabs(plans: InstallmentPlanData[]) {\n return plans\n .map((plan) => ({\n plan,\n bestInstallment: findBestInstallment([plan]),\n tabValue: `${plan.paymentType}-${plan.paymentMethod}`,\n }))\n .sort((a, b) => {\n const aCount = a.bestInstallment?.count ?? Number.POSITIVE_INFINITY;\n const bCount = b.bestInstallment?.count ?? Number.POSITIVE_INFINITY;\n return aCount - bCount;\n });\n}\n\nexport function PricingPaymentMethodsTabList({ className, children, ...props }: PricingPaymentMethodsTabListProps) {\n const ctx = usePricing();\n if (!ctx || ctx.installmentPlans.length === 0) return null;\n\n return (\n <div {...props} className={className} data-fs-pricing-payment-methods-tab-list=\"\">\n {sortPlansForTabs(ctx.installmentPlans).map(({ plan, bestInstallment, tabValue }) => (\n <InstallmentPlanItemContext\n key={tabValue}\n value={{\n paymentMethod: plan.paymentMethod,\n paymentType: plan.paymentType,\n installments: plan.installments,\n bestInstallment,\n }}\n >\n <TabsTab value={tabValue}>{children}</TabsTab>\n </InstallmentPlanItemContext>\n ))}\n </div>\n );\n}\n\nexport function PricingPaymentMethodsTabPanels({ className, children, ...props }: PricingPaymentMethodsTabPanelsProps) {\n const ctx = usePricing();\n if (!ctx || ctx.installmentPlans.length === 0) return null;\n\n return (\n <div {...props} className={className} data-fs-pricing-payment-methods-tab-panels=\"\">\n {sortPlansForTabs(ctx.installmentPlans).map(({ plan, bestInstallment, tabValue }) => (\n <InstallmentPlanItemContext\n key={tabValue}\n value={{\n paymentMethod: plan.paymentMethod,\n paymentType: plan.paymentType,\n installments: plan.installments,\n bestInstallment,\n }}\n >\n <TabsPanel value={tabValue}>{children}</TabsPanel>\n </InstallmentPlanItemContext>\n ))}\n </div>\n );\n}\n\nexport function PricingPaymentMethodName({ className, children, ...props }: PricingPaymentMethodNameProps) {\n const plan = useInstallmentPlanItem();\n\n return (\n <span {...props} className={className} data-fs-pricing-payment-method-name=\"\">\n {children ?? plan.paymentMethod}\n </span>\n );\n}\n\nexport function PricingInstallment({\n template = '{count}x de {value}',\n interestFreeLabel = 'sem juros',\n className,\n children,\n ...props\n}: PricingInstallmentProps) {\n const installment = useInstallmentItem();\n const ctx = usePricing();\n if (!ctx) return null;\n\n const formattedValue = formatPrice(installment.value, ctx.locale, ctx.currency);\n const base = template.replace('{count}', String(installment.count)).replace('{value}', formattedValue);\n const text = installment.interestFree && interestFreeLabel ? `${base} ${interestFreeLabel}` : base;\n\n return (\n <span {...props} className={className} data-fs-pricing-installment=\"\">\n {children ?? text}\n </span>\n );\n}\n\nexport function PricingDiscount({\n template,\n format = 'percentage',\n className,\n children,\n ...props\n}: PricingDiscountProps) {\n const ctx = usePricing();\n if (!ctx || !ctx.hasDiscount) return null;\n\n const amount = ctx.listPrice - ctx.price;\n const formattedAmount = formatPrice(amount, ctx.locale, ctx.currency);\n const resolvedTemplate = template ?? (format === 'absolute' ? '-{amount}' : '-{percentage}%');\n const text = resolvedTemplate\n .replaceAll('{percentage}', String(ctx.discountPercentage))\n .replaceAll('{amount}', formattedAmount);\n\n return (\n <span {...props} className={className} data-fs-pricing-discount=\"\">\n {children ?? text}\n </span>\n );\n}\n\nexport function PricingSpotDiscount({\n template = '-{percentage}%',\n className,\n children,\n ...props\n}: PricingSpotDiscountProps) {\n const ctx = usePricing();\n if (!ctx || ctx.spotDiscountPercentage <= 0) return null;\n\n const text = template.replace('{percentage}', String(ctx.spotDiscountPercentage));\n\n return (\n <span {...props} className={className} data-fs-pricing-spot-discount=\"\">\n {children ?? text}\n </span>\n );\n}\n\nexport function PricingHighlights({ className, children, ...props }: PricingHighlightsProps) {\n const ctx = usePricing();\n if (!ctx || ctx.discountHighlights.length === 0) return null;\n\n return (\n <div {...props} className={className} data-fs-pricing-highlights=\"\">\n {ctx.discountHighlights.map((highlight, index) => (\n <HighlightItemContext key={`${highlight}-${index}`} value={highlight}>\n {children}\n </HighlightItemContext>\n ))}\n </div>\n );\n}\n\nexport function PricingHighlight({ className, children, ...props }: PricingHighlightProps) {\n const highlight = useHighlightItem();\n\n return (\n <span {...props} className={className} data-fs-pricing-highlight=\"\">\n {children ?? highlight}\n </span>\n );\n}\n\nexport function PricingPromotions({ className, children, ...props }: PricingPromotionsProps) {\n const ctx = usePricing();\n if (!ctx || ctx.promotions.length === 0) return null;\n\n return (\n <div {...props} className={className} data-fs-pricing-promotions=\"\">\n {ctx.promotions.map((promotion, index) => (\n <PromotionItemContext key={`${promotion.name}-${index}`} value={promotion}>\n {children}\n </PromotionItemContext>\n ))}\n </div>\n );\n}\n\nexport function PricingPromotion({ template = '{name}', className, children, ...props }: PricingPromotionProps) {\n const promotion = usePromotionItem();\n const text = template.replace('{name}', promotion.name);\n\n return (\n <span {...props} className={className} data-fs-pricing-promotion=\"\">\n {children ?? text}\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Skeleton\n// ---------------------------------------------------------------------------\n\nexport function PricingSkeleton({ className, ...props }: ComponentPropsWithRef<'div'>) {\n return (\n <div {...props} className={className} data-fs-pricing-skeleton=\"\" aria-hidden=\"true\">\n <span data-fs-pricing-skeleton-line=\"\" />\n <span data-fs-pricing-skeleton-line=\"\" />\n </div>\n );\n}\n\nPricingRoot.Skeleton = PricingSkeleton;\n\n// ---------------------------------------------------------------------------\n// Namespace export\n// ---------------------------------------------------------------------------\n\nexport const Pricing = {\n Root: PricingRoot,\n SellingPrice: PricingSellingPrice,\n ListPrice: PricingListPrice,\n SpotPrice: PricingSpotPrice,\n Installments: PricingInstallments,\n InstallmentPlans: PricingInstallmentPlans,\n InstallmentPlan: PricingInstallmentPlan,\n InstallmentsForPlan: PricingInstallmentsForPlan,\n Installment: PricingInstallment,\n PaymentMethodsTrigger: PricingPaymentMethodsTrigger,\n PaymentMethodsList: PricingPaymentMethodsList,\n PaymentMethodsTabList: PricingPaymentMethodsTabList,\n PaymentMethodsTabPanels: PricingPaymentMethodsTabPanels,\n PaymentMethodName: PricingPaymentMethodName,\n Discount: PricingDiscount,\n SpotDiscount: PricingSpotDiscount,\n Highlights: PricingHighlights,\n Highlight: PricingHighlight,\n Promotions: PricingPromotions,\n Promotion: PricingPromotion,\n Skeleton: PricingSkeleton,\n};\n"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ComponentDefinition } from "../../core/dist/define-component.js";
2
+ import "../../core/dist/index.js";
3
+ import { ProductGalleryDataFragment } from "../../sdk/generated/graphql.js";
4
+ import { GalleryMediaItem } from "../../particles/gallery/gallery.js";
5
+ import { ComponentPropsWithRef, ReactNode } from "react";
6
+ //#region src/matter/product-gallery/product-gallery.d.ts
7
+ type ProductSlice = NonNullable<ProductGalleryDataFragment['productBySlug']>;
8
+ export type ProductGalleryRootProps = ComponentPropsWithRef<'div'> & {
9
+ media?: GalleryMediaItem[];
10
+ $data?: ProductSlice | null;
11
+ defaultIndex?: number;
12
+ selectOnHover?: boolean;
13
+ thumbnailOpensFullscreen?: boolean;
14
+ selectedVariantId?: string;
15
+ children?: ReactNode;
16
+ };
17
+ export declare const ProductGalleryRootDefinition: ComponentDefinition<ProductGalleryRootProps>;
18
+ export declare function ProductGalleryRoot({ media, $data, defaultIndex, selectOnHover, thumbnailOpensFullscreen, selectedVariantId, children, ...props }: ProductGalleryRootProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare const ProductGallery: {
20
+ Root: typeof ProductGalleryRoot;
21
+ };
22
+ //#endregion
23
+ //# sourceMappingURL=product-gallery.d.ts.map
@@ -0,0 +1,188 @@
1
+ "use client";
2
+ import { defineComponent } from "../../core/dist/define-component.js";
3
+ import "../../core/dist/index.js";
4
+ import { graphql } from "../../sdk/generated/gql.js";
5
+ import { useDataOverride } from "../../sdk/data/data-override-context.js";
6
+ import { HotDataProvider } from "../../sdk/data/hot-data-provider.js";
7
+ import { publishedVariantIdFor, selectedVariantVar } from "../../sdk/state/variant-selector.js";
8
+ import { GalleryRoot } from "../../particles/gallery/gallery.js";
9
+ import { useReactiveVar } from "@apollo/client/react";
10
+ import { Suspense } from "react";
11
+ import { jsx } from "react/jsx-runtime";
12
+ //#region src/matter/product-gallery/product-gallery.tsx
13
+ const fragment = graphql(`
14
+ fragment ProductGalleryData on Query {
15
+ productBySlug(slug: $slug) {
16
+ __typename
17
+ id
18
+ media(first: 20) {
19
+ edges {
20
+ node {
21
+ ... on Image {
22
+ __typename
23
+ url
24
+ altText
25
+ }
26
+ ... on Video {
27
+ __typename
28
+ url
29
+ altText
30
+ previewImage {
31
+ url
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ `);
40
+ graphql(`
41
+ fragment VariantGalleryData on Variant {
42
+ __typename
43
+ id
44
+ images(first: 20) {
45
+ edges {
46
+ node {
47
+ __typename
48
+ url
49
+ altText
50
+ }
51
+ }
52
+ }
53
+ videos {
54
+ __typename
55
+ url
56
+ altText
57
+ previewImage {
58
+ url
59
+ }
60
+ }
61
+ }
62
+ `);
63
+ const variantQuery = graphql(`
64
+ query VariantGalleryQuery($id: ID!) {
65
+ node(id: $id) {
66
+ __typename
67
+ ... on Variant {
68
+ ...VariantGalleryData
69
+ }
70
+ }
71
+ }
72
+ `);
73
+ function transformMedia(product) {
74
+ return product.media.edges.map(({ node }) => {
75
+ if (node.__typename === "Video") return {
76
+ type: "video",
77
+ url: node.url,
78
+ altText: node.altText ?? "",
79
+ ...node.previewImage?.url ? { previewImageUrl: node.previewImage.url } : {}
80
+ };
81
+ return {
82
+ type: "image",
83
+ url: node.url,
84
+ altText: node.altText ?? ""
85
+ };
86
+ });
87
+ }
88
+ function transformVariantMedia(variant) {
89
+ const images = variant.images.edges.map(({ node }) => ({
90
+ type: "image",
91
+ url: node.url,
92
+ altText: node.altText ?? ""
93
+ }));
94
+ const videos = variant.videos.map((video) => ({
95
+ type: "video",
96
+ url: video.url,
97
+ altText: video.altText ?? "",
98
+ ...video.previewImage?.url ? { previewImageUrl: video.previewImage.url } : {}
99
+ }));
100
+ return [...images, ...videos];
101
+ }
102
+ const ProductGalleryRootDefinition = defineComponent({
103
+ name: "ProductGalleryRoot",
104
+ importPath: "@vtex/faststore/components",
105
+ component: ProductGalleryRoot,
106
+ fragment,
107
+ editor: {
108
+ label: "Product Gallery Root",
109
+ category: "commerce"
110
+ },
111
+ schema: {
112
+ defaultIndex: {
113
+ type: "number",
114
+ default: 0,
115
+ label: "Default Index"
116
+ },
117
+ selectOnHover: {
118
+ type: "boolean",
119
+ default: false,
120
+ label: "Select on Hover"
121
+ },
122
+ thumbnailOpensFullscreen: {
123
+ type: "boolean",
124
+ default: false,
125
+ label: "Thumbnail Opens Fullscreen"
126
+ },
127
+ selectedVariantId: {
128
+ type: "string",
129
+ label: "Selected Variant ID"
130
+ }
131
+ },
132
+ guideline: "PDP-only entry point for the product media gallery; use GalleryRoot instead when media comes from a custom source rather than a product query. Automatically refreshes media when a shopper picks a VariantSelector swatch (it reads the published variant selection); the selectedVariantId prop is an optional pre-selection fallback. Falls back to product media on error. See product-gallery.md."
133
+ });
134
+ function ProductGalleryRoot({ media, $data, defaultIndex = 0, selectOnHover = false, thumbnailOpensFullscreen = false, selectedVariantId, children, ...props }) {
135
+ const productSlice = $data ?? null;
136
+ const publishedSelection = useReactiveVar(selectedVariantVar);
137
+ const activeVariantId = publishedVariantIdFor(publishedSelection, productSlice?.id ?? null) ?? selectedVariantId;
138
+ if (activeVariantId) return /* @__PURE__ */ jsx(Suspense, {
139
+ fallback: null,
140
+ children: /* @__PURE__ */ jsx(HotDataProvider, {
141
+ query: variantQuery,
142
+ variables: { id: activeVariantId },
143
+ field: "node",
144
+ fallbackData: productSlice,
145
+ children: /* @__PURE__ */ jsx(VariantOrProductGallery, {
146
+ media,
147
+ fallbackProductSlice: productSlice,
148
+ defaultIndex,
149
+ selectOnHover,
150
+ thumbnailOpensFullscreen,
151
+ ...props,
152
+ children
153
+ })
154
+ })
155
+ });
156
+ const resolvedMedia = media ?? (productSlice ? transformMedia(productSlice) : []);
157
+ return /* @__PURE__ */ jsx(GalleryRoot, {
158
+ ...props,
159
+ media: resolvedMedia,
160
+ defaultIndex,
161
+ selectOnHover,
162
+ thumbnailOpensFullscreen,
163
+ "data-fs-product-gallery": "",
164
+ children
165
+ });
166
+ }
167
+ function VariantOrProductGallery({ media, fallbackProductSlice, defaultIndex = 0, selectOnHover = false, thumbnailOpensFullscreen = false, children, ...props }) {
168
+ const override = useDataOverride(null);
169
+ const overrideTypename = override?.__typename;
170
+ let resolvedMedia = [];
171
+ if (media) resolvedMedia = media;
172
+ else if (overrideTypename === "Variant") resolvedMedia = transformVariantMedia(override);
173
+ else if (fallbackProductSlice) resolvedMedia = transformMedia(fallbackProductSlice);
174
+ return /* @__PURE__ */ jsx(GalleryRoot, {
175
+ ...props,
176
+ media: resolvedMedia,
177
+ defaultIndex,
178
+ selectOnHover,
179
+ thumbnailOpensFullscreen,
180
+ "data-fs-product-gallery": "",
181
+ children
182
+ });
183
+ }
184
+ const ProductGallery = { Root: ProductGalleryRoot };
185
+ //#endregion
186
+ export { ProductGallery, ProductGalleryRoot, ProductGalleryRootDefinition, transformMedia, transformVariantMedia };
187
+
188
+ //# sourceMappingURL=product-gallery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-gallery.js","names":[],"sources":["../../../src/matter/product-gallery/product-gallery.tsx"],"sourcesContent":["'use client';\n\nimport { useReactiveVar } from '@apollo/client/react';\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { Suspense } from 'react';\nimport type { GalleryMediaItem } from '../../particles/gallery/gallery.js';\nimport { GalleryRoot } from '../../particles/gallery/gallery.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport { HotDataProvider } from '../../sdk/data/hot-data-provider.js';\nimport { graphql } from '../../sdk/generated/gql.js';\nimport type { ProductGalleryDataFragment, VariantGalleryDataFragment } from '../../sdk/generated/graphql.js';\nimport { publishedVariantIdFor, selectedVariantVar } from '../../sdk/state/variant-selector.js';\n\n// ---------------------------------------------------------------------------\n// GraphQL Fragments — typed via @graphql-codegen client-preset\n// ---------------------------------------------------------------------------\n\nconst fragment = graphql(`\n fragment ProductGalleryData on Query {\n productBySlug(slug: $slug) {\n __typename\n id\n media(first: 20) {\n edges {\n node {\n ... on Image {\n __typename\n url\n altText\n }\n ... on Video {\n __typename\n url\n altText\n previewImage {\n url\n }\n }\n }\n }\n }\n }\n }\n`);\n\n// Declared so codegen scans the source string and emits VariantGalleryDataFragment.\n// The fragment is spread into variantQuery at the GraphQL layer (...VariantGalleryData);\n// the variable itself is not referenced at runtime.\n// biome-ignore lint/correctness/noUnusedVariables: scanned by codegen\nconst _variantFragment = graphql(`\n fragment VariantGalleryData on Variant {\n __typename\n id\n images(first: 20) {\n edges {\n node {\n __typename\n url\n altText\n }\n }\n }\n videos {\n __typename\n url\n altText\n previewImage {\n url\n }\n }\n }\n`);\n\nconst variantQuery = graphql(`\n query VariantGalleryQuery($id: ID!) {\n node(id: $id) {\n __typename\n ... on Variant {\n ...VariantGalleryData\n }\n }\n }\n`);\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype ProductSlice = NonNullable<ProductGalleryDataFragment['productBySlug']>;\ntype VariantSlice = VariantGalleryDataFragment;\n\nexport type ProductGalleryRootProps = ComponentPropsWithRef<'div'> & {\n media?: GalleryMediaItem[];\n $data?: ProductSlice | null;\n defaultIndex?: number;\n selectOnHover?: boolean;\n thumbnailOpensFullscreen?: boolean;\n selectedVariantId?: string;\n children?: ReactNode;\n};\n\n// ---------------------------------------------------------------------------\n// Transforms\n// ---------------------------------------------------------------------------\n\nexport function transformMedia(product: ProductSlice): GalleryMediaItem[] {\n return product.media.edges.map(({ node }): GalleryMediaItem => {\n if (node.__typename === 'Video') {\n return {\n type: 'video',\n url: node.url,\n altText: node.altText ?? '',\n ...(node.previewImage?.url ? { previewImageUrl: node.previewImage.url } : {}),\n };\n }\n return {\n type: 'image',\n url: node.url,\n altText: node.altText ?? '',\n };\n });\n}\n\nexport function transformVariantMedia(variant: VariantSlice): GalleryMediaItem[] {\n const images = variant.images.edges.map(\n ({ node }): GalleryMediaItem => ({\n type: 'image',\n url: node.url,\n altText: node.altText ?? '',\n }),\n );\n const videos = variant.videos.map(\n (video): GalleryMediaItem => ({\n type: 'video',\n url: video.url,\n altText: video.altText ?? '',\n ...(video.previewImage?.url ? { previewImageUrl: video.previewImage.url } : {}),\n }),\n );\n return [...images, ...videos];\n}\n\n// ---------------------------------------------------------------------------\n// Definition\n// ---------------------------------------------------------------------------\n\nexport const ProductGalleryRootDefinition = defineComponent<ProductGalleryRootProps>({\n name: 'ProductGalleryRoot',\n importPath: '@vtex/faststore/components',\n component: ProductGalleryRoot,\n fragment,\n editor: { label: 'Product Gallery Root', category: 'commerce' },\n schema: {\n defaultIndex: { type: 'number', default: 0, label: 'Default Index' },\n selectOnHover: { type: 'boolean', default: false, label: 'Select on Hover' },\n thumbnailOpensFullscreen: { type: 'boolean', default: false, label: 'Thumbnail Opens Fullscreen' },\n selectedVariantId: { type: 'string', label: 'Selected Variant ID' },\n },\n guideline:\n 'PDP-only entry point for the product media gallery; use GalleryRoot instead when media comes from a custom source rather than a product query. Automatically refreshes media when a shopper picks a VariantSelector swatch (it reads the published variant selection); the selectedVariantId prop is an optional pre-selection fallback. Falls back to product media on error. See product-gallery.md.',\n});\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nexport function ProductGalleryRoot({\n media,\n $data,\n defaultIndex = 0,\n selectOnHover = false,\n thumbnailOpensFullscreen = false,\n selectedVariantId,\n children,\n ...props\n}: ProductGalleryRootProps) {\n const productSlice = $data ?? null;\n\n // The VariantSelector matter publishes the shopper's in-page selection here. Reading it lets the\n // gallery refresh its media when a swatch changes without page navigation (NFR-1). The explicit\n // `selectedVariantId` prop is the pre-selection fallback; the live selection wins once set.\n // Scope the published selection to this product so a swatch picked on another PDP does not make\n // this gallery fetch a foreign variant's media after client-side navigation.\n const publishedSelection = useReactiveVar(selectedVariantVar);\n const publishedVariantId = publishedVariantIdFor(publishedSelection, productSlice?.id ?? null);\n const activeVariantId = publishedVariantId ?? selectedVariantId;\n\n if (activeVariantId) {\n return (\n <Suspense fallback={null}>\n <HotDataProvider\n query={variantQuery}\n variables={{ id: activeVariantId }}\n field=\"node\"\n fallbackData={productSlice}\n >\n <VariantOrProductGallery\n media={media}\n fallbackProductSlice={productSlice}\n defaultIndex={defaultIndex}\n selectOnHover={selectOnHover}\n thumbnailOpensFullscreen={thumbnailOpensFullscreen}\n {...props}\n >\n {children}\n </VariantOrProductGallery>\n </HotDataProvider>\n </Suspense>\n );\n }\n\n const resolvedMedia = media ?? (productSlice ? transformMedia(productSlice) : []);\n\n return (\n <GalleryRoot\n {...props}\n media={resolvedMedia}\n defaultIndex={defaultIndex}\n selectOnHover={selectOnHover}\n thumbnailOpensFullscreen={thumbnailOpensFullscreen}\n data-fs-product-gallery=\"\"\n >\n {children}\n </GalleryRoot>\n );\n}\n\ntype VariantOrProductGalleryProps = Omit<ProductGalleryRootProps, '$data' | 'selectedVariantId'> & {\n fallbackProductSlice: ProductSlice | null;\n};\n\nfunction VariantOrProductGallery({\n media,\n fallbackProductSlice,\n defaultIndex = 0,\n selectOnHover = false,\n thumbnailOpensFullscreen = false,\n children,\n ...props\n}: VariantOrProductGalleryProps) {\n const override = useDataOverride<unknown>(null);\n const overrideTypename = (override as { __typename?: string } | null)?.__typename;\n\n let resolvedMedia: GalleryMediaItem[] = [];\n if (media) {\n resolvedMedia = media;\n } else if (overrideTypename === 'Variant') {\n resolvedMedia = transformVariantMedia(override as VariantSlice);\n } else if (fallbackProductSlice) {\n resolvedMedia = transformMedia(fallbackProductSlice);\n }\n\n return (\n <GalleryRoot\n {...props}\n media={resolvedMedia}\n defaultIndex={defaultIndex}\n selectOnHover={selectOnHover}\n thumbnailOpensFullscreen={thumbnailOpensFullscreen}\n data-fs-product-gallery=\"\"\n >\n {children}\n </GalleryRoot>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Namespace export\n// ---------------------------------------------------------------------------\n\nexport const ProductGallery = {\n Root: ProductGalleryRoot,\n};\n"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { ComponentDefinition } from "../../core/dist/define-component.js";
2
+ import "../../core/dist/index.js";
3
+ import { ProductInformationDataFragment } from "../../sdk/generated/graphql.js";
4
+ import { ComponentPropsWithRef, ComponentPropsWithoutRef } from "react";
5
+ //#region src/matter/product-information/product-information.d.ts
6
+ type ProductSlice = NonNullable<ProductInformationDataFragment['productBySlug']>;
7
+ type TitleAs = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
8
+ export type DescriptionFormat = 'auto' | 'plain' | 'html';
9
+ type Collapse = 'none' | 'showMore' | 'section';
10
+ export type ProductInformationRootProps = ComponentPropsWithRef<'div'> & {
11
+ $data?: ProductSlice | null;
12
+ };
13
+ export type ProductInformationTitleProps = Omit<ComponentPropsWithRef<'h1'>, 'children'> & {
14
+ as?: TitleAs;
15
+ separator?: string;
16
+ };
17
+ export type ProductInformationDescriptionProps = Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'dangerouslySetInnerHTML'> & {
18
+ /**
19
+ * Controls how the description renders.
20
+ * - `'auto'` (default) — prefers `descriptionHtml`; falls back to plain `description`; renders nothing when both are absent.
21
+ * - `'plain'` — strict plain text from `description`; never reads `descriptionHtml`.
22
+ * - `'html'` — strict rich HTML from `descriptionHtml` via `dangerouslySetInnerHTML`; renders nothing when absent (no fallback).
23
+ *
24
+ * Rich HTML is safe because Storefront API Core sanitizes `descriptionHtml` upstream.
25
+ *
26
+ * The rendered element follows from the resolved branch: plain text renders as `<p>`;
27
+ * rich HTML renders as `<div>` (so block-level markup inside `descriptionHtml` remains valid DOM).
28
+ * Both wrappers carry `data-fs-text=""` so project-level `Text` typography cascades automatically.
29
+ */
30
+ format?: DescriptionFormat;
31
+ collapse?: Collapse;
32
+ defaultExpanded?: boolean;
33
+ collapsedLines?: number;
34
+ moreLabel?: string;
35
+ lessLabel?: string;
36
+ };
37
+ export type ProductInformationBrandProps = Omit<ComponentPropsWithRef<'span'>, 'children'>;
38
+ export type ProductInformationSkuProps = Omit<ComponentPropsWithRef<'span'>, 'children'>;
39
+ export type ProductInformationReferenceIdProps = Omit<ComponentPropsWithRef<'span'>, 'children'>;
40
+ export declare const ProductInformationRootDefinition: ComponentDefinition<ProductInformationRootProps>;
41
+ export declare const ProductInformationTitleDefinition: ComponentDefinition<ProductInformationTitleProps>;
42
+ export declare const ProductInformationDescriptionDefinition: ComponentDefinition<ProductInformationDescriptionProps>;
43
+ export declare const ProductInformationBrandDefinition: ComponentDefinition<ProductInformationBrandProps>;
44
+ export declare const ProductInformationSkuDefinition: ComponentDefinition<ProductInformationSkuProps>;
45
+ export declare const ProductInformationReferenceIdDefinition: ComponentDefinition<ProductInformationReferenceIdProps>;
46
+ export declare function ProductInformationRoot({ $data: $dataProp, className, children, ...props }: ProductInformationRootProps): import("react/jsx-runtime").JSX.Element;
47
+ export declare function ProductInformationTitle({ as, separator, className, ...props }: ProductInformationTitleProps): import("react/jsx-runtime").JSX.Element | null;
48
+ export declare function ProductInformationDescription({ format, collapse, defaultExpanded, collapsedLines, moreLabel, lessLabel, className, ...props }: ProductInformationDescriptionProps): import("react/jsx-runtime").JSX.Element | null;
49
+ export declare function ProductInformationBrand({ className, ...props }: ProductInformationBrandProps): import("react/jsx-runtime").JSX.Element | null;
50
+ export declare function ProductInformationSku({ className, ...props }: ProductInformationSkuProps): import("react/jsx-runtime").JSX.Element | null;
51
+ export declare function ProductInformationReferenceId({ className, ...props }: ProductInformationReferenceIdProps): import("react/jsx-runtime").JSX.Element | null;
52
+ export declare const ProductInformation: {
53
+ Root: typeof ProductInformationRoot;
54
+ Title: typeof ProductInformationTitle;
55
+ Description: typeof ProductInformationDescription;
56
+ Brand: typeof ProductInformationBrand;
57
+ Sku: typeof ProductInformationSku;
58
+ ReferenceId: typeof ProductInformationReferenceId;
59
+ };
60
+ //#endregion
61
+ //# sourceMappingURL=product-information.d.ts.map