@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":"delivery-options-controller.js","names":[],"sources":["../../../src/matter/delivery-options/delivery-options-controller.tsx"],"sourcesContent":["'use client';\n\nimport { defineComponent } from '@vtex/fs-core';\nimport {\n type ComponentPropsWithRef,\n cloneElement,\n createContext,\n isValidElement,\n type ReactNode,\n useContext,\n useMemo,\n useState,\n} from 'react';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport {\n OptionItemContext,\n type ShippingOption,\n ShippingSimulatorContext,\n ShippingSimulatorOptionName,\n ShippingSimulatorOptionPrice,\n} from '../shipping-simulator/shipping-simulator.js';\nimport { DeliveryOptionsListBody } from './delivery-options.js';\nimport { type RawDeliveryOptionsData, useDeliveryOptionSelection } from './use-delivery-option-selection.js';\n\n/**\n * The collapsed delivery-option surfaces (centered modal / slide-in panel) as a controller +\n * composed particles, replacing the former monolithic `DeliveryOptionsDialog` / `DeliveryOptionsDrawer`\n * (Decision 8). The page composes a raw `DialogRoot` or `DrawerRoot` and each of its particles\n * (`DialogTrigger` / `DialogBackdrop` / `DialogPopup` …) directly as `page.json` nodes, so every part\n * is a swatch-addressable node with zero Tailwind baked into the package — the portaled backdrop/popup\n * a descendant selector could not reach in the monolith are now first-class nodes (Decision 9).\n *\n * `DeliveryOptionsController` owns state only and renders no markup: it runs the shared\n * `useDeliveryOptionSelection` engine, holds the open state, and provides both the FSPG-832\n * `ShippingSimulatorContext` and a `DeliveryOptions` selection context to its subtree, then injects\n * `open` / `onOpenChange` into its single overlay-`Root` child via `cloneElement` — the same mechanism\n * as `CartOpenOnAdd` and `ShippingAddressSavedAddressDrawerController`. A single engine behind the\n * context keeps the trigger echo (`DeliveryOptionsSummary`) and the option list (`DeliveryOptionsList`)\n * on one selection state, so even a local `mockOptions` pick reflects on the trigger.\n *\n * Selection follows the shared rule (INV-10/11): a real pick dispatches `shipping.selectOption` and\n * the surface closes only once it resolves without a `userError`; a rejected pick keeps it open with\n * the inline `role=\"alert\"`; a `mockOptions` pick updates local state and closes immediately.\n */\n\nconst fragment = /* GraphQL */ `\n fragment DeliveryOptionsControllerData on Query {\n shipping {\n id\n options {\n id\n name\n channel\n shippingEstimate {\n value\n unit\n }\n price {\n amount\n currencyCode\n }\n listPrice {\n amount\n currencyCode\n }\n }\n selectedOptionId\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Selection context — provided by DeliveryOptionsController, read by the leaves\n// ---------------------------------------------------------------------------\n\nexport type DeliveryOptionsContextValue = Readonly<{\n /** Resolved option rows (real when the fetch has any, else the `mockOptions` fallback). */\n options: ShippingOption[];\n /** Group value: the persisted `selectedOptionId` for real data, local state under mock. */\n selectedOptionId: string | null;\n /** First `userError` message from the latest real selection, or `null`. */\n selectionError: string | null;\n /** Selects an option and closes the surface once the selection resolves without a `userError`. */\n selectOption: (optionId: string) => void;\n}>;\n\nconst DELIVERY_OPTIONS_UNSET = Symbol('DeliveryOptionsContextUnset');\n\nconst DeliveryOptionsContextInternal = createContext<DeliveryOptionsContextValue | typeof DELIVERY_OPTIONS_UNSET>(\n DELIVERY_OPTIONS_UNSET,\n);\n\n/**\n * Read the delivery-option selection state from the nearest `DeliveryOptionsController`. Throws when\n * called outside a controller subtree.\n */\nexport function useDeliveryOptions(): DeliveryOptionsContextValue {\n const ctx = useContext(DeliveryOptionsContextInternal);\n if (ctx === DELIVERY_OPTIONS_UNSET) {\n throw new Error('useDeliveryOptions() must be used inside a <DeliveryOptionsController> subtree.');\n }\n return ctx;\n}\n\n// The minimal open-state shape the controller injects into its overlay-Root child; both\n// `DialogRoot` and `DrawerRoot` accept it.\ntype OverlayOpenProps = {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport type DeliveryOptionsControllerProps = {\n /** Shipping slice forwarded by the reactive runtime; `null` until shipping resolves. */\n $data?: RawDeliveryOptionsData | null;\n /** Compiler-injected action surface; carries `shipping.selectOption`. */\n $actions?: ComponentActions;\n /** Local/dev fallback rows, used only when the reactive fetch resolves no options. */\n mockOptions?: ShippingOption[];\n /** The single overlay `Root` to control — a `DialogRoot` (modal) or `DrawerRoot` (slide-in). */\n children?: ReactNode;\n};\n\nexport type DeliveryOptionsSummaryProps = ComponentPropsWithRef<'span'> & {\n /** Optional prefix shown before the summary value (e.g. \"Forma de entrega\"). */\n label?: string;\n /** Text shown while nothing is selected. */\n placeholder?: string;\n /** Separator between the selected option name and price. */\n separator?: string;\n};\n\nexport type DeliveryOptionsListProps = ComponentPropsWithRef<'div'>;\n\n// ---------------------------------------------------------------------------\n// Definitions\n// ---------------------------------------------------------------------------\n\nexport const DeliveryOptionsControllerDefinition = defineComponent<DeliveryOptionsControllerProps>({\n name: 'DeliveryOptionsController',\n importPath: '@vtex/faststore/components',\n component: DeliveryOptionsController,\n fragment,\n fetchStrategy: 'reactive',\n actions: { shipping: ['selectOption'] },\n // Its own `delivery-options` selection context, plus the reused option leaves' runtime contexts\n // (Decision 2): `shipping-simulator-option` for the leaves composed under DeliveryOptionsList, and\n // the outer `shipping-simulator` this controller also provides at runtime.\n providesContext: ['delivery-options', 'shipping-simulator', 'shipping-simulator-option'],\n editor: { label: 'Delivery Options Controller', category: 'commerce' },\n schema: {\n mockOptions: { type: 'array', label: 'Mock options (local/dev fallback, ignored once real data has options)' },\n },\n guideline:\n 'State-only controller for a collapsed delivery-option picker: wrap a single DialogRoot (centered modal) or DrawerRoot (slide-in) child and it becomes controlled — the surface opens from its trigger and closes once a real selection succeeds; a userError keeps it open. Renders no markup and bakes no styling: compose the overlay particles (DialogTrigger/DialogPortal/DialogBackdrop/DialogPopup or the Drawer equivalents) directly as page nodes, place a DeliveryOptionsSummary inside the trigger (echoes the selected name + price, or a placeholder) and a DeliveryOptionsList inside the popup (the option radio group; put the reused ShippingSimulatorOption leaves as its children). Selection dispatches $actions.shipping.selectOption; mockOptions is a local/dev-only fallback. Mirrors the CartOpenOnAdd / ShippingAddressSavedAddressDrawerController pattern.',\n});\n\nexport const DeliveryOptionsSummaryDefinition = defineComponent<DeliveryOptionsSummaryProps>({\n name: 'DeliveryOptionsSummary',\n importPath: '@vtex/faststore/components',\n component: DeliveryOptionsSummary,\n requiresContext: 'delivery-options',\n editor: { label: 'Delivery Options Summary', category: 'commerce' },\n schema: {\n label: { type: 'string', label: 'Trigger label prefix' },\n placeholder: { type: 'string', default: 'Selecionar forma de entrega', label: 'Placeholder' },\n separator: { type: 'string', default: ' — ', label: 'Summary separator' },\n },\n guideline:\n 'The collapsed picker trigger echo: renders the selected option name + price (reusing the FSPG-832 option leaves), or a placeholder while nothing is selected. Place it inside the DialogTrigger / DrawerTrigger of a DeliveryOptionsController subtree. Reads the shared selection context, so it reflects the current pick — real or mockOptions. Must be inside DeliveryOptionsController.',\n});\n\nexport const DeliveryOptionsListDefinition = defineComponent<DeliveryOptionsListProps>({\n name: 'DeliveryOptionsList',\n importPath: '@vtex/faststore/components',\n component: DeliveryOptionsList,\n requiresContext: 'delivery-options',\n editor: { label: 'Delivery Options List', category: 'commerce' },\n schema: {},\n guideline:\n 'The collapsed picker body: the whole-cart option list as a radio group bound to the selected option, plus the inline selection error (role=\"alert\"). Place it inside the DialogPopup / DrawerPopup of a DeliveryOptionsController subtree, with the reused option leaves (ShippingSimulatorOption, OptionName, OptionEstimate, OptionPrice, OptionFreeBadge) as its children template. Picking a row dispatches the selection and closes the surface on success. Must be inside DeliveryOptionsController.',\n});\n\n// ---------------------------------------------------------------------------\n// Implementations\n// ---------------------------------------------------------------------------\n\nexport function DeliveryOptionsController({ $data, $actions, mockOptions, children }: DeliveryOptionsControllerProps) {\n const { options, selectedOptionId, selectionError, selectOption, contextValue } = useDeliveryOptionSelection({\n $data,\n $actions,\n mockOptions,\n });\n const [open, setOpen] = useState(false);\n\n const delivery = useMemo<DeliveryOptionsContextValue>(\n () => ({\n options,\n selectedOptionId,\n selectionError,\n selectOption: (optionId: string) =>\n selectOption(optionId, {\n onSettled: (ok) => {\n if (ok) setOpen(false);\n },\n }),\n }),\n [options, selectedOptionId, selectionError, selectOption],\n );\n\n if (!isValidElement<OverlayOpenProps>(children)) {\n return children;\n }\n\n return (\n <ShippingSimulatorContext value={contextValue}>\n <DeliveryOptionsContextInternal value={delivery}>\n {cloneElement(children, { open, onOpenChange: (next: boolean) => setOpen(next) })}\n </DeliveryOptionsContextInternal>\n </ShippingSimulatorContext>\n );\n}\n\nexport function DeliveryOptionsSummary({\n label,\n placeholder = 'Selecionar forma de entrega',\n separator = ' — ',\n className,\n ...props\n}: DeliveryOptionsSummaryProps) {\n const { options, selectedOptionId } = useDeliveryOptions();\n const selectedOption = options.find((option) => option.id === selectedOptionId) ?? null;\n\n return (\n <span {...props} className={className} data-fs-delivery-options-summary=\"\">\n {label ? <span data-fs-delivery-options-summary-label=\"\">{label}</span> : null}\n {selectedOption ? (\n <OptionItemContext value={selectedOption}>\n <span data-fs-delivery-options-summary-value=\"\">\n <ShippingSimulatorOptionName />\n <span data-fs-delivery-options-summary-separator=\"\">{separator}</span>\n <ShippingSimulatorOptionPrice />\n </span>\n </OptionItemContext>\n ) : (\n <span data-fs-delivery-options-summary-placeholder=\"\">{placeholder}</span>\n )}\n </span>\n );\n}\n\nexport function DeliveryOptionsList({ className, children, ...props }: DeliveryOptionsListProps) {\n const { options, selectedOptionId, selectionError, selectOption } = useDeliveryOptions();\n\n return (\n <DeliveryOptionsListBody\n {...props}\n className={className}\n options={options}\n selectedOptionId={selectedOptionId}\n selectionError={selectionError}\n onSelectOption={selectOption}\n >\n {children}\n </DeliveryOptionsListBody>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAM,WAAyB;;;;;;;;;;;;;;;;;;;;;;;;;AAyC/B,MAAM,yBAAyB,OAAO,6BAA6B;AAEnE,MAAM,iCAAiC,cACrC,sBACF;;;;;AAMA,SAAgB,qBAAkD;CAChE,MAAM,MAAM,WAAW,8BAA8B;CACrD,IAAI,QAAQ,wBACV,MAAM,IAAI,MAAM,iFAAiF;CAEnG,OAAO;AACT;AAuCA,MAAa,sCAAsC,gBAAgD;CACjG,MAAM;CACN,YAAY;CACZ,WAAW;CACX;CACA,eAAe;CACf,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;CAItC,iBAAiB;EAAC;EAAoB;EAAsB;CAA2B;CACvF,QAAQ;EAAE,OAAO;EAA+B,UAAU;CAAW;CACrE,QAAQ,EACN,aAAa;EAAE,MAAM;EAAS,OAAO;CAAwE,EAC/G;CACA,WACE;AACJ,CAAC;AAED,MAAa,mCAAmC,gBAA6C;CAC3F,MAAM;CACN,YAAY;CACZ,WAAW;CACX,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAA4B,UAAU;CAAW;CAClE,QAAQ;EACN,OAAO;GAAE,MAAM;GAAU,OAAO;EAAuB;EACvD,aAAa;GAAE,MAAM;GAAU,SAAS;GAA+B,OAAO;EAAc;EAC5F,WAAW;GAAE,MAAM;GAAU,SAAS;GAAO,OAAO;EAAoB;CAC1E;CACA,WACE;AACJ,CAAC;AAED,MAAa,gCAAgC,gBAA0C;CACrF,MAAM;CACN,YAAY;CACZ,WAAW;CACX,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAAyB,UAAU;CAAW;CAC/D,QAAQ,CAAC;CACT,WACE;AACJ,CAAC;AAMD,SAAgB,0BAA0B,EAAE,OAAO,UAAU,aAAa,YAA4C;CACpH,MAAM,EAAE,SAAS,kBAAkB,gBAAgB,cAAc,iBAAiB,2BAA2B;EAC3G;EACA;EACA;CACF,CAAC;CACD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CAEtC,MAAM,WAAW,eACR;EACL;EACA;EACA;EACA,eAAe,aACb,aAAa,UAAU,EACrB,YAAY,OAAO;GACjB,IAAI,IAAI,QAAQ,KAAK;EACvB,EACF,CAAC;CACL,IACA;EAAC;EAAS;EAAkB;EAAgB;CAAY,CAC1D;CAEA,IAAI,CAAC,eAAiC,QAAQ,GAC5C,OAAO;CAGT,OACE,oBAAC,0BAAD;EAA0B,OAAO;EAC/B,UAAA,oBAAC,gCAAD;GAAgC,OAAO;GACpC,UAAA,aAAa,UAAU;IAAE;IAAM,eAAe,SAAkB,QAAQ,IAAI;GAAE,CAAC;EAClD,CAAA;CACR,CAAA;AAE9B;AAEA,SAAgB,uBAAuB,EACrC,OACA,cAAc,+BACd,YAAY,OACZ,WACA,GAAG,SAC2B;CAC9B,MAAM,EAAE,SAAS,qBAAqB,mBAAmB;CACzD,MAAM,iBAAiB,QAAQ,MAAM,WAAW,OAAO,OAAO,gBAAgB,KAAK;CAEnF,OACE,qBAAC,QAAD;EAAM,GAAI;EAAkB;EAAW,oCAAiC;EAAxE,UAAA,CACG,QAAQ,oBAAC,QAAD;GAAM,0CAAuC;GAAI,UAAA;EAAY,CAAA,IAAI,MACzE,iBACC,oBAAC,mBAAD;GAAmB,OAAO;GACxB,UAAA,qBAAC,QAAD;IAAM,0CAAuC;IAA7C,UAAA;KACE,oBAAC,6BAAD,CAA8B,CAAA;KAC9B,oBAAC,QAAD;MAAM,8CAA2C;MAAI,UAAA;KAAgB,CAAA;KACrE,oBAAC,8BAAD,CAA+B,CAAA;IAC3B;;EACW,CAAA,IAEnB,oBAAC,QAAD;GAAM,gDAA6C;GAAI,UAAA;EAAkB,CAAA,CAEvE;;AAEV;AAEA,SAAgB,oBAAoB,EAAE,WAAW,UAAU,GAAG,SAAmC;CAC/F,MAAM,EAAE,SAAS,kBAAkB,gBAAgB,iBAAiB,mBAAmB;CAEvF,OACE,oBAAC,yBAAD;EACE,GAAI;EACO;EACF;EACS;EACF;EAChB,gBAAgB;EAEf;CACsB,CAAA;AAE7B"}
@@ -0,0 +1,31 @@
1
+ import { ComponentDefinition } from "../../core/dist/define-component.js";
2
+ import "../../core/dist/index.js";
3
+ import { ShippingOption } from "../shipping-simulator/shipping-simulator.js";
4
+ import { ComponentActions } from "../../sdk/actions/types.js";
5
+ import { RawDeliveryOptionsData } from "./use-delivery-option-selection.js";
6
+ import { ComponentPropsWithRef } from "react";
7
+ //#region src/matter/delivery-options/delivery-options.d.ts
8
+ export type DeliveryOptionsRootProps = ComponentPropsWithRef<'div'> & {
9
+ /**
10
+ * Shipping slice forwarded by the reactive runtime (`ReactiveDataProvider`) — it is the value of
11
+ * the `shipping` top-level field on `DeliveryOptionsData on Query`, not the wrapping
12
+ * `{ shipping: … }` shape. Receives `null` when shipping has not yet resolved.
13
+ */
14
+ $data?: RawDeliveryOptionsData | null;
15
+ /** Compiler-injected action surface; carries `shipping.selectOption`. */
16
+ $actions?: ComponentActions;
17
+ /**
18
+ * Local/dev fallback rows, used only when the reactive fetch resolves no options — real data
19
+ * always wins the moment it has any. `Shipping.options` is non-nullable, so a genuinely empty
20
+ * cart is indistinguishable from "no data yet" at this prop's shape; setting `mockOptions` is an
21
+ * explicit per-page opt-in that accepts showing these rows in both cases. Omit on production
22
+ * pages. Selecting a mock row is handled entirely with local state and never calls
23
+ * `$actions.shipping.selectOption` — there is no real cart/address for the real mutation to act
24
+ * on, so dispatching it would only ever surface a domain error (e.g. `MISSING_SHIPPING_ADDRESS`).
25
+ */
26
+ mockOptions?: ShippingOption[];
27
+ };
28
+ export declare const DeliveryOptionsRootDefinition: ComponentDefinition<DeliveryOptionsRootProps>;
29
+ export declare function DeliveryOptionsRoot({ $data, $actions, mockOptions, className, children, ...props }: DeliveryOptionsRootProps): import("react/jsx-runtime").JSX.Element;
30
+ //#endregion
31
+ //# sourceMappingURL=delivery-options.d.ts.map
@@ -0,0 +1,103 @@
1
+ "use client";
2
+ import { defineComponent } from "../../core/dist/define-component.js";
3
+ import "../../core/dist/index.js";
4
+ import { RadioGroup, RadioRoot } from "../../particles/radio/radio.js";
5
+ import { OptionItemContext, ShippingSimulatorContext } from "../shipping-simulator/shipping-simulator.js";
6
+ import { useDeliveryOptionSelection } from "./use-delivery-option-selection.js";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ const DeliveryOptionsRootDefinition = defineComponent({
9
+ name: "DeliveryOptionsRoot",
10
+ importPath: "@vtex/faststore/components",
11
+ component: DeliveryOptionsRoot,
12
+ fragment: `
13
+ fragment DeliveryOptionsData on Query {
14
+ shipping {
15
+ id
16
+ options {
17
+ id
18
+ name
19
+ channel
20
+ shippingEstimate {
21
+ value
22
+ unit
23
+ }
24
+ price {
25
+ amount
26
+ currencyCode
27
+ }
28
+ listPrice {
29
+ amount
30
+ currencyCode
31
+ }
32
+ }
33
+ selectedOptionId
34
+ }
35
+ }
36
+ `,
37
+ fetchStrategy: "reactive",
38
+ actions: { shipping: ["selectOption"] },
39
+ editor: {
40
+ label: "Delivery Options",
41
+ category: "commerce"
42
+ },
43
+ schema: { mockOptions: {
44
+ type: "array",
45
+ label: "Mock options (local/dev fallback, ignored once real data has options)"
46
+ } },
47
+ providesContext: ["shipping-simulator", "shipping-simulator-option"],
48
+ guideline: "Root for the whole-cart delivery-option list at the delivery step: renders Shipping.options as a radio group bound to selectedOptionId, reusing the FSPG-832 option leaves (ShippingSimulatorOption, OptionName, OptionEstimate, OptionPrice, OptionFreeBadge) as the per-option template placed as children. Selecting a row dispatches $actions.shipping.selectOption. No local selection state — the group value is always the server selectedOptionId. mockOptions is a local/dev-only fallback rendered when the real fetch has no options; omit it in production."
49
+ });
50
+ /**
51
+ * The list body shared by `DeliveryOptionsRoot` (always-open) and `DeliveryOptionsList` (the
52
+ * collapsed-surface body under `DeliveryOptionsController`): the inline selection error plus the
53
+ * radio group of options, reusing the FSPG-832 option leaves as the per-option `children` template.
54
+ * It owns no data or selection engine — the caller resolves `options` / `selectedOptionId` /
55
+ * `selectionError` and supplies the `onSelect` dispatch, so both surfaces render through one
56
+ * component and cannot drift. Not registered: it renders no independently placeable part of its own
57
+ * (the `data-fs-delivery-options` container hook and the reused leaves are the addressable parts).
58
+ */
59
+ function DeliveryOptionsListBody({ options, selectedOptionId, selectionError, onSelectOption, className, children, ...props }) {
60
+ return /* @__PURE__ */ jsxs("div", {
61
+ ...props,
62
+ className,
63
+ "data-fs-delivery-options": "",
64
+ children: [selectionError ? /* @__PURE__ */ jsx("div", {
65
+ role: "alert",
66
+ "data-fs-delivery-options-error": "",
67
+ children: selectionError
68
+ }) : null, options.length > 0 ? /* @__PURE__ */ jsx(RadioGroup, {
69
+ value: selectedOptionId ?? "",
70
+ onValueChange: onSelectOption,
71
+ children: options.map((option) => /* @__PURE__ */ jsx(OptionItemContext, {
72
+ value: option,
73
+ children: /* @__PURE__ */ jsx(RadioRoot, {
74
+ value: option.id,
75
+ children
76
+ })
77
+ }, option.id))
78
+ }) : null]
79
+ });
80
+ }
81
+ function DeliveryOptionsRoot({ $data, $actions, mockOptions, className, children, ...props }) {
82
+ const { options, selectedOptionId, selectionError, selectOption, contextValue } = useDeliveryOptionSelection({
83
+ $data,
84
+ $actions,
85
+ mockOptions
86
+ });
87
+ return /* @__PURE__ */ jsx(ShippingSimulatorContext, {
88
+ value: contextValue,
89
+ children: /* @__PURE__ */ jsx(DeliveryOptionsListBody, {
90
+ ...props,
91
+ className,
92
+ options,
93
+ selectedOptionId,
94
+ selectionError,
95
+ onSelectOption: (optionId) => selectOption(optionId),
96
+ children
97
+ })
98
+ });
99
+ }
100
+ //#endregion
101
+ export { DeliveryOptionsListBody, DeliveryOptionsRoot, DeliveryOptionsRootDefinition };
102
+
103
+ //# sourceMappingURL=delivery-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-options.js","names":[],"sources":["../../../src/matter/delivery-options/delivery-options.tsx"],"sourcesContent":["'use client';\n\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef } from 'react';\nimport { RadioGroup, RadioRoot } from '../../particles/radio/radio.js';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport {\n OptionItemContext,\n type ShippingOption,\n ShippingSimulatorContext,\n} from '../shipping-simulator/shipping-simulator.js';\nimport { type RawDeliveryOptionsData, useDeliveryOptionSelection } from './use-delivery-option-selection.js';\n\n/**\n * The `DeliveryOptions` matter section (specs/delivery-options-step.md, T3 of the Single Address\n * Delivery epic). `DeliveryOptionsRoot` is a reactive Root over the persisted `Shipping` entity\n * (Decision 1) that becomes the THIRD provider of the FSPG-832 option-leaf runtime contexts —\n * `ShippingSimulatorContext` and the per-option `OptionItemContext` — alongside the two existing\n * simulator Roots (Decision 2), so `ShippingSimulatorOption` / `OptionName` / `OptionEstimate` /\n * `OptionPrice` / `OptionFreeBadge` render identically here with zero edits to those leaves.\n * `children` is the per-option template, rendered once per option inside a `RadioRoot` (radio\n * particle) whose group value is bound directly to `selectedOptionId` (Decision 5 — no local\n * selection state); changing it fires the `shipping.selectOption` action. Fields the reused leaves\n * do not read for this section (`postalCode`, `setPostalCode`, `submit`, `status`) are inert\n * defaults, satisfying the shared context type without a simulation flow. Exception: while\n * rendering `mockOptions` (no real data), selection is local-only and never dispatches the action —\n * see `mockOptions` on `DeliveryOptionsRootProps`.\n */\n\n// ---------------------------------------------------------------------------\n// GraphQL Fragment — raw template literal, matching the ShippingSimulator matter's own convention\n// (not yet migrated to the codegen `graphql()` pipeline; see codegen.ts's documents glob comment).\n//\n// Selects `shipping { id ... }` (not shown in the spec's fragment snippet) so Apollo's\n// InMemoryCache normalizes `Shipping` by id — required for `shippingOptionSelect`'s returned\n// `shipping` to update the same cache entity this fragment reads (Decision 1/Decision 5's\n// \"reactive cache, no local state\" only holds if both sides normalize to the same entity).\n// ---------------------------------------------------------------------------\n\nconst fragment = /* GraphQL */ `\n fragment DeliveryOptionsData on Query {\n shipping {\n id\n options {\n id\n name\n channel\n shippingEstimate {\n value\n unit\n }\n price {\n amount\n currencyCode\n }\n listPrice {\n amount\n currencyCode\n }\n }\n selectedOptionId\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport type DeliveryOptionsRootProps = ComponentPropsWithRef<'div'> & {\n /**\n * Shipping slice forwarded by the reactive runtime (`ReactiveDataProvider`) — it is the value of\n * the `shipping` top-level field on `DeliveryOptionsData on Query`, not the wrapping\n * `{ shipping: … }` shape. Receives `null` when shipping has not yet resolved.\n */\n $data?: RawDeliveryOptionsData | null;\n /** Compiler-injected action surface; carries `shipping.selectOption`. */\n $actions?: ComponentActions;\n /**\n * Local/dev fallback rows, used only when the reactive fetch resolves no options — real data\n * always wins the moment it has any. `Shipping.options` is non-nullable, so a genuinely empty\n * cart is indistinguishable from \"no data yet\" at this prop's shape; setting `mockOptions` is an\n * explicit per-page opt-in that accepts showing these rows in both cases. Omit on production\n * pages. Selecting a mock row is handled entirely with local state and never calls\n * `$actions.shipping.selectOption` — there is no real cart/address for the real mutation to act\n * on, so dispatching it would only ever surface a domain error (e.g. `MISSING_SHIPPING_ADDRESS`).\n */\n mockOptions?: ShippingOption[];\n};\n\n// ---------------------------------------------------------------------------\n// Definition\n// ---------------------------------------------------------------------------\n\nexport const DeliveryOptionsRootDefinition = defineComponent<DeliveryOptionsRootProps>({\n name: 'DeliveryOptionsRoot',\n importPath: '@vtex/faststore/components',\n component: DeliveryOptionsRoot,\n fragment,\n fetchStrategy: 'reactive',\n actions: { shipping: ['selectOption'] },\n editor: { label: 'Delivery Options', category: 'commerce' },\n schema: {\n mockOptions: { type: 'array', label: 'Mock options (local/dev fallback, ignored once real data has options)' },\n },\n // Re-provides the reused option leaves' runtime contexts (Decision 2): the inner\n // `shipping-simulator-option` token is required — the option leaves compose as direct children\n // here with no `ShippingSimulatorOptions` node between them — and the outer `shipping-simulator`\n // token reflects the `ShippingSimulatorContext` this Root also provides at runtime.\n providesContext: ['shipping-simulator', 'shipping-simulator-option'],\n guideline:\n 'Root for the whole-cart delivery-option list at the delivery step: renders Shipping.options as a radio group bound to selectedOptionId, reusing the FSPG-832 option leaves (ShippingSimulatorOption, OptionName, OptionEstimate, OptionPrice, OptionFreeBadge) as the per-option template placed as children. Selecting a row dispatches $actions.shipping.selectOption. No local selection state — the group value is always the server selectedOptionId. mockOptions is a local/dev-only fallback rendered when the real fetch has no options; omit it in production.',\n});\n\n// ---------------------------------------------------------------------------\n// Shared list body\n// ---------------------------------------------------------------------------\n\nexport type DeliveryOptionsListBodyProps = ComponentPropsWithRef<'div'> & {\n /** Resolved option rows (real or mock), supplied by the caller's selection engine. */\n options: ShippingOption[];\n /** Group value bound to the radio group; `null` renders nothing selected. */\n selectedOptionId: string | null;\n /** First `userError` message from the latest selection, or `null`; rendered as `role=\"alert\"`. */\n selectionError: string | null;\n /** Dispatched on a row change with the picked option id. */\n onSelectOption: (optionId: string) => void;\n};\n\n/**\n * The list body shared by `DeliveryOptionsRoot` (always-open) and `DeliveryOptionsList` (the\n * collapsed-surface body under `DeliveryOptionsController`): the inline selection error plus the\n * radio group of options, reusing the FSPG-832 option leaves as the per-option `children` template.\n * It owns no data or selection engine — the caller resolves `options` / `selectedOptionId` /\n * `selectionError` and supplies the `onSelect` dispatch, so both surfaces render through one\n * component and cannot drift. Not registered: it renders no independently placeable part of its own\n * (the `data-fs-delivery-options` container hook and the reused leaves are the addressable parts).\n */\nexport function DeliveryOptionsListBody({\n options,\n selectedOptionId,\n selectionError,\n onSelectOption,\n className,\n children,\n ...props\n}: DeliveryOptionsListBodyProps) {\n return (\n <div {...props} className={className} data-fs-delivery-options=\"\">\n {selectionError ? (\n <div role=\"alert\" data-fs-delivery-options-error=\"\">\n {selectionError}\n </div>\n ) : null}\n {options.length > 0 ? (\n <RadioGroup value={selectedOptionId ?? ''} onValueChange={onSelectOption}>\n {options.map((option) => (\n <OptionItemContext key={option.id} value={option}>\n <RadioRoot value={option.id}>{children}</RadioRoot>\n </OptionItemContext>\n ))}\n </RadioGroup>\n ) : null}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nexport function DeliveryOptionsRoot({\n $data,\n $actions,\n mockOptions,\n className,\n children,\n ...props\n}: DeliveryOptionsRootProps) {\n const { options, selectedOptionId, selectionError, selectOption, contextValue } = useDeliveryOptionSelection({\n $data,\n $actions,\n mockOptions,\n });\n\n return (\n <ShippingSimulatorContext value={contextValue}>\n <DeliveryOptionsListBody\n {...props}\n className={className}\n options={options}\n selectedOptionId={selectedOptionId}\n selectionError={selectionError}\n onSelectOption={(optionId) => selectOption(optionId)}\n >\n {children}\n </DeliveryOptionsListBody>\n </ShippingSimulatorContext>\n );\n}\n"],"mappings":";;;;;;;AA8FA,MAAa,gCAAgC,gBAA0C;CACrF,MAAM;CACN,YAAY;CACZ,WAAW;CACX;;;;;;;;;;;;;;;;;;;;;;;;;CACA,eAAe;CACf,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;CACtC,QAAQ;EAAE,OAAO;EAAoB,UAAU;CAAW;CAC1D,QAAQ,EACN,aAAa;EAAE,MAAM;EAAS,OAAO;CAAwE,EAC/G;CAKA,iBAAiB,CAAC,sBAAsB,2BAA2B;CACnE,WACE;AACJ,CAAC;;;;;;;;;;AA0BD,SAAgB,wBAAwB,EACtC,SACA,kBACA,gBACA,gBACA,WACA,UACA,GAAG,SAC4B;CAC/B,OACE,qBAAC,OAAD;EAAK,GAAI;EAAkB;EAAW,4BAAyB;EAA/D,UAAA,CACG,iBACC,oBAAC,OAAD;GAAK,MAAK;GAAQ,kCAA+B;GAC9C,UAAA;EACE,CAAA,IACH,MACH,QAAQ,SAAS,IAChB,oBAAC,YAAD;GAAY,OAAO,oBAAoB;GAAI,eAAe;GACvD,UAAA,QAAQ,KAAK,WACZ,oBAAC,mBAAD;IAAmC,OAAO;IACxC,UAAA,oBAAC,WAAD;KAAW,OAAO,OAAO;KAAK;IAAoB,CAAA;GACjC,GAFK,OAAO,EAEZ,CACpB;EACS,CAAA,IACV,IACD;;AAET;AAMA,SAAgB,oBAAoB,EAClC,OACA,UACA,aACA,WACA,UACA,GAAG,SACwB;CAC3B,MAAM,EAAE,SAAS,kBAAkB,gBAAgB,cAAc,iBAAiB,2BAA2B;EAC3G;EACA;EACA;CACF,CAAC;CAED,OACE,oBAAC,0BAAD;EAA0B,OAAO;EAC/B,UAAA,oBAAC,yBAAD;GACE,GAAI;GACO;GACF;GACS;GACF;GAChB,iBAAiB,aAAa,aAAa,QAAQ;GAElD;EACsB,CAAA;CACD,CAAA;AAE9B"}
@@ -0,0 +1,9 @@
1
+ import { ShippingOption } from "../shipping-simulator/shipping-simulator.js";
2
+ import "../../sdk/actions/types.js";
3
+ //#region src/matter/delivery-options/use-delivery-option-selection.d.ts
4
+ export type RawDeliveryOptionsData = {
5
+ options: ShippingOption[];
6
+ selectedOptionId: string | null;
7
+ };
8
+ //#endregion
9
+ //# sourceMappingURL=use-delivery-option-selection.d.ts.map
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ import { useDataOverride } from "../../sdk/data/data-override-context.js";
3
+ import { useMemo, useRef, useState } from "react";
4
+ //#region src/matter/delivery-options/use-delivery-option-selection.ts
5
+ const EMPTY_OPTIONS = [];
6
+ /**
7
+ * Shared selection engine behind `DeliveryOptionsRoot` and its collapsed variants
8
+ * (`DeliveryOptionsAccordion` / `Dialog` / `Drawer`). It owns the four behaviours the spec
9
+ * requires identically across every surface, so they cannot drift apart:
10
+ *
11
+ * - real-vs-mock option resolution — real options of any length always win (INV-8);
12
+ * - the local mock selection, reset whenever the real↔mock boundary flips so a stale mock
13
+ * choice from before a real-options interlude never reappears (Decision 7);
14
+ * - the reactive `selectedOptionId` binding (Decision 5 — no local state for real data);
15
+ * - the request-sequenced `selectOption` dispatch that resolves `userErrors` for inline display
16
+ * (US-4), guarding against an earlier click's result overwriting a later one.
17
+ *
18
+ * Callers render `selectionError` (as `role="alert"`) and wire `contextValue` themselves; the
19
+ * collapsed variants additionally use `onSettled` to close their panel only on success.
20
+ */
21
+ function useDeliveryOptionSelection({ $data: $dataProp, $actions, mockOptions }) {
22
+ const $data = useDataOverride($dataProp);
23
+ const realOptions = $data?.options;
24
+ const usingMockOptions = !realOptions?.length && !!mockOptions?.length;
25
+ const options = realOptions?.length ? realOptions : mockOptions ?? EMPTY_OPTIONS;
26
+ const [mockSelectedOptionId, setMockSelectedOptionId] = useState(null);
27
+ const [wasUsingMockOptions, setWasUsingMockOptions] = useState(usingMockOptions);
28
+ if (usingMockOptions !== wasUsingMockOptions) {
29
+ setWasUsingMockOptions(usingMockOptions);
30
+ setMockSelectedOptionId(null);
31
+ }
32
+ const selectedOptionId = usingMockOptions ? mockSelectedOptionId : $data?.selectedOptionId ?? null;
33
+ const [selectionError, setSelectionError] = useState(null);
34
+ const selectionToken = useRef(0);
35
+ function selectOption(optionId, callbacks) {
36
+ if (usingMockOptions) {
37
+ setMockSelectedOptionId(optionId);
38
+ callbacks?.onSettled?.(true);
39
+ return;
40
+ }
41
+ setSelectionError(null);
42
+ const dispatch = $actions?.shipping?.selectOption;
43
+ if (!dispatch) {
44
+ callbacks?.onSettled?.(false);
45
+ return;
46
+ }
47
+ const token = ++selectionToken.current;
48
+ dispatch(optionId).then((userErrors) => {
49
+ if (selectionToken.current !== token) return;
50
+ const [firstError] = userErrors;
51
+ if (firstError) {
52
+ setSelectionError(firstError.message);
53
+ callbacks?.onSettled?.(false);
54
+ } else callbacks?.onSettled?.(true);
55
+ });
56
+ }
57
+ return {
58
+ options,
59
+ selectedOptionId,
60
+ usingMockOptions,
61
+ selectionError,
62
+ selectOption,
63
+ contextValue: useMemo(() => ({
64
+ postalCode: "",
65
+ setPostalCode: () => {},
66
+ status: "idle",
67
+ shippingOptions: options,
68
+ userErrors: [],
69
+ submit: () => {}
70
+ }), [options])
71
+ };
72
+ }
73
+ //#endregion
74
+ export { useDeliveryOptionSelection };
75
+
76
+ //# sourceMappingURL=use-delivery-option-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-delivery-option-selection.js","names":[],"sources":["../../../src/matter/delivery-options/use-delivery-option-selection.ts"],"sourcesContent":["'use client';\n\nimport { useMemo, useRef, useState } from 'react';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport type { ShippingOption, ShippingSimulatorContextValue } from '../shipping-simulator/shipping-simulator.js';\n\n// ---------------------------------------------------------------------------\n// Raw data type (shape of the reactive fragment result). `$data` is the unwrapped\n// `Shipping` entity the reactive runtime forwards (Decision 7 / INV-7), not `{ shipping: … }`.\n// Shared by DeliveryOptionsRoot and its collapsed variants (Accordion/Dialog/Drawer), all of\n// which read the same `shipping { options … selectedOptionId }` selection.\n// ---------------------------------------------------------------------------\n\nexport type RawDeliveryOptionsData = {\n options: ShippingOption[];\n selectedOptionId: string | null;\n};\n\nconst EMPTY_OPTIONS: ShippingOption[] = [];\n\n/**\n * Joins the structural classes a collapsed variant always applies (positioning, sizing, animation)\n * with the page-supplied visual override, dropping empty slots. Keeps the visual layer out of the\n * component (Free Particle Model) while guaranteeing the overlay still positions itself.\n */\nexport function cx(...classes: Array<string | undefined>): string {\n return classes.filter(Boolean).join(' ');\n}\n\nexport type DeliveryOptionSelection = {\n /** Real options when the fetch has any, else the `mockOptions` fallback, else empty. */\n options: ShippingOption[];\n /** Group value: the persisted `selectedOptionId` for real data, local state under mock. */\n selectedOptionId: string | null;\n /** True while the mock fallback is showing (no real options + `mockOptions` present). */\n usingMockOptions: boolean;\n /** Message of the first `userError` from the latest real selection, or `null`. */\n selectionError: string | null;\n /**\n * Selects an option. Under mock data the choice is local-only and never dispatches the action.\n * Under real data it dispatches `shipping.selectOption`, request-sequenced so only the latest\n * click wins the error state. `onSettled(ok)` fires once the selection resolves — `ok` is `false`\n * when the mutation surfaced a `userError` (or no action was injected) — letting collapsed\n * variants close only on success.\n */\n selectOption: (optionId: string, callbacks?: { onSettled?: (ok: boolean) => void }) => void;\n /** The FSPG-832 simulator context value (inert simulation fields) providers must supply. */\n contextValue: ShippingSimulatorContextValue;\n};\n\n/**\n * Shared selection engine behind `DeliveryOptionsRoot` and its collapsed variants\n * (`DeliveryOptionsAccordion` / `Dialog` / `Drawer`). It owns the four behaviours the spec\n * requires identically across every surface, so they cannot drift apart:\n *\n * - real-vs-mock option resolution — real options of any length always win (INV-8);\n * - the local mock selection, reset whenever the real↔mock boundary flips so a stale mock\n * choice from before a real-options interlude never reappears (Decision 7);\n * - the reactive `selectedOptionId` binding (Decision 5 — no local state for real data);\n * - the request-sequenced `selectOption` dispatch that resolves `userErrors` for inline display\n * (US-4), guarding against an earlier click's result overwriting a later one.\n *\n * Callers render `selectionError` (as `role=\"alert\"`) and wire `contextValue` themselves; the\n * collapsed variants additionally use `onSettled` to close their panel only on success.\n */\nexport function useDeliveryOptionSelection({\n $data: $dataProp,\n $actions,\n mockOptions,\n}: {\n $data?: RawDeliveryOptionsData | null;\n $actions?: ComponentActions;\n mockOptions?: ShippingOption[];\n}): DeliveryOptionSelection {\n const $data = useDataOverride($dataProp);\n const realOptions = $data?.options;\n const usingMockOptions = !realOptions?.length && !!mockOptions?.length;\n const options = realOptions?.length ? realOptions : (mockOptions ?? EMPTY_OPTIONS);\n\n const [mockSelectedOptionId, setMockSelectedOptionId] = useState<string | null>(null);\n const [wasUsingMockOptions, setWasUsingMockOptions] = useState(usingMockOptions);\n if (usingMockOptions !== wasUsingMockOptions) {\n setWasUsingMockOptions(usingMockOptions);\n setMockSelectedOptionId(null);\n }\n const selectedOptionId = usingMockOptions ? mockSelectedOptionId : ($data?.selectedOptionId ?? null);\n\n const [selectionError, setSelectionError] = useState<string | null>(null);\n const selectionToken = useRef(0);\n\n function selectOption(optionId: string, callbacks?: { onSettled?: (ok: boolean) => void }) {\n if (usingMockOptions) {\n setMockSelectedOptionId(optionId);\n callbacks?.onSettled?.(true);\n return;\n }\n setSelectionError(null);\n const dispatch = $actions?.shipping?.selectOption;\n if (!dispatch) {\n callbacks?.onSettled?.(false);\n return;\n }\n const token = ++selectionToken.current;\n dispatch(optionId).then((userErrors) => {\n if (selectionToken.current !== token) return;\n const [firstError] = userErrors;\n if (firstError) {\n setSelectionError(firstError.message);\n callbacks?.onSettled?.(false);\n } else {\n callbacks?.onSettled?.(true);\n }\n });\n }\n\n const contextValue = useMemo<ShippingSimulatorContextValue>(\n () => ({\n postalCode: '',\n setPostalCode: () => {},\n status: 'idle',\n shippingOptions: options,\n userErrors: [],\n submit: () => {},\n }),\n [options],\n );\n\n return { options, selectedOptionId, usingMockOptions, selectionError, selectOption, contextValue };\n}\n"],"mappings":";;;;AAmBA,MAAM,gBAAkC,CAAC;;;;;;;;;;;;;;;;AA+CzC,SAAgB,2BAA2B,EACzC,OAAO,WACP,UACA,eAK0B;CAC1B,MAAM,QAAQ,gBAAgB,SAAS;CACvC,MAAM,cAAc,OAAO;CAC3B,MAAM,mBAAmB,CAAC,aAAa,UAAU,CAAC,CAAC,aAAa;CAChE,MAAM,UAAU,aAAa,SAAS,cAAe,eAAe;CAEpE,MAAM,CAAC,sBAAsB,2BAA2B,SAAwB,IAAI;CACpF,MAAM,CAAC,qBAAqB,0BAA0B,SAAS,gBAAgB;CAC/E,IAAI,qBAAqB,qBAAqB;EAC5C,uBAAuB,gBAAgB;EACvC,wBAAwB,IAAI;CAC9B;CACA,MAAM,mBAAmB,mBAAmB,uBAAwB,OAAO,oBAAoB;CAE/F,MAAM,CAAC,gBAAgB,qBAAqB,SAAwB,IAAI;CACxE,MAAM,iBAAiB,OAAO,CAAC;CAE/B,SAAS,aAAa,UAAkB,WAAmD;EACzF,IAAI,kBAAkB;GACpB,wBAAwB,QAAQ;GAChC,WAAW,YAAY,IAAI;GAC3B;EACF;EACA,kBAAkB,IAAI;EACtB,MAAM,WAAW,UAAU,UAAU;EACrC,IAAI,CAAC,UAAU;GACb,WAAW,YAAY,KAAK;GAC5B;EACF;EACA,MAAM,QAAQ,EAAE,eAAe;EAC/B,SAAS,QAAQ,CAAC,CAAC,MAAM,eAAe;GACtC,IAAI,eAAe,YAAY,OAAO;GACtC,MAAM,CAAC,cAAc;GACrB,IAAI,YAAY;IACd,kBAAkB,WAAW,OAAO;IACpC,WAAW,YAAY,KAAK;GAC9B,OACE,WAAW,YAAY,IAAI;EAE/B,CAAC;CACH;CAcA,OAAO;EAAE;EAAS;EAAkB;EAAkB;EAAgB;EAAc,cAZ/D,eACZ;GACL,YAAY;GACZ,qBAAqB,CAAC;GACtB,QAAQ;GACR,iBAAiB;GACjB,YAAY,CAAC;GACb,cAAc,CAAC;EACjB,IACA,CAAC,OAAO,CAGqF;CAAE;AACnG"}
@@ -0,0 +1,37 @@
1
+ import { ComponentDefinition } from "../../core/dist/define-component.js";
2
+ import "../../core/dist/index.js";
3
+ import { ComponentActions } from "../../sdk/actions/types.js";
4
+ import { ComponentPropsWithRef } from "react";
5
+ //#region src/matter/email-identification/email-identification.d.ts
6
+ /** ClientProfile slice forwarded by the reactive runtime — only `email` is consumed for pre-fill. */
7
+ export type EmailIdentificationSlice = {
8
+ email?: string | null;
9
+ };
10
+ export type EmailIdentificationControlProps = Omit<ComponentPropsWithRef<'div'>, 'onChange'> & {
11
+ /** Accessible label passed to the EmailField. */
12
+ label?: string;
13
+ /** Input placeholder passed to the EmailField. */
14
+ placeholder?: string;
15
+ /** Inline error text for an invalid email format (port of `checkout/form-messages.invalid-email`). */
16
+ invalidEmailMessage?: string;
17
+ /** ClientProfile slice forwarded by the reactive runtime; `null` until the entity resolves. */
18
+ $data?: EmailIdentificationSlice | null;
19
+ /** Compiler-injected action surface; carries `identity.clientProfileUpdate`. */
20
+ $actions?: ComponentActions;
21
+ };
22
+ export declare const EmailIdentificationControlDefinition: ComponentDefinition<EmailIdentificationControlProps>;
23
+ /**
24
+ * Matter that binds the presentational `EmailField` to the User Identity foundation. It reads
25
+ * `clientProfile.email` (colocated reactive fragment) for the pre-fill, reads the identification
26
+ * tri-state and `canEditData` from `useSession()` (which also enforces the `SessionRoot` ancestor),
27
+ * and on a **valid, changed** email persists only the `email` field through
28
+ * `$actions.identity.clientProfileUpdate` (async / pessimistic, Decision 1). While the write is in
29
+ * flight the field is disabled and `data-fs-email-identification-pending` is present so a
30
+ * checkout-CTA guard can block. When the session reports `canEditData: false` (identified but
31
+ * unauthenticated claimed profile — VTEX refuses the write server-side) the field renders disabled
32
+ * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline; the
33
+ * session state is never computed locally.
34
+ */
35
+ export declare function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $data: $dataProp, $actions, className, ...props }: EmailIdentificationControlProps): import("react/jsx-runtime").JSX.Element;
36
+ //#endregion
37
+ //# sourceMappingURL=email-identification.d.ts.map
@@ -0,0 +1,111 @@
1
+ "use client";
2
+ import { defineComponent } from "../../core/dist/define-component.js";
3
+ import "../../core/dist/index.js";
4
+ import { EmailField, isValidEmail } from "../../particles/email-field/email-field.js";
5
+ import { useDataOverride } from "../../sdk/data/data-override-context.js";
6
+ import { useSession } from "../session/session.js";
7
+ import { useEffect, useState } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ const EmailIdentificationControlDefinition = defineComponent({
10
+ name: "EmailIdentificationControl",
11
+ importPath: "@vtex/faststore/components",
12
+ component: EmailIdentificationControl,
13
+ fragment: `
14
+ fragment EmailIdentificationData on Query {
15
+ clientProfile {
16
+ __typename
17
+ id
18
+ email
19
+ }
20
+ }
21
+ `,
22
+ fetchStrategy: "reactive",
23
+ actions: { identity: ["clientProfileUpdate"] },
24
+ requiresContext: "session",
25
+ editor: {
26
+ label: "Email Identification",
27
+ category: "identity"
28
+ },
29
+ schema: {
30
+ label: {
31
+ type: "string",
32
+ label: "Label"
33
+ },
34
+ placeholder: {
35
+ type: "string",
36
+ label: "Placeholder"
37
+ },
38
+ invalidEmailMessage: {
39
+ type: "string",
40
+ label: "Invalid email message"
41
+ }
42
+ },
43
+ guideline: "Checkout-bound email field: pre-fills from clientProfile.email and persists a valid changed email via $actions.identity.clientProfileUpdate (anonymous→identified). Must be inside SessionRoot. See email-identification.md."
44
+ });
45
+ /**
46
+ * Matter that binds the presentational `EmailField` to the User Identity foundation. It reads
47
+ * `clientProfile.email` (colocated reactive fragment) for the pre-fill, reads the identification
48
+ * tri-state and `canEditData` from `useSession()` (which also enforces the `SessionRoot` ancestor),
49
+ * and on a **valid, changed** email persists only the `email` field through
50
+ * `$actions.identity.clientProfileUpdate` (async / pessimistic, Decision 1). While the write is in
51
+ * flight the field is disabled and `data-fs-email-identification-pending` is present so a
52
+ * checkout-CTA guard can block. When the session reports `canEditData: false` (identified but
53
+ * unauthenticated claimed profile — VTEX refuses the write server-side) the field renders disabled
54
+ * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline; the
55
+ * session state is never computed locally.
56
+ */
57
+ function EmailIdentificationControl({ label, placeholder, invalidEmailMessage, $data: $dataProp, $actions, className, ...props }) {
58
+ const $data = useDataOverride($dataProp);
59
+ const { canEditData } = useSession();
60
+ const readOnly = !canEditData;
61
+ const savedEmail = $data?.email ?? "";
62
+ const [value, setValue] = useState(savedEmail);
63
+ const [pending, setPending] = useState(false);
64
+ const [serverError, setServerError] = useState(null);
65
+ useEffect(() => {
66
+ setValue(savedEmail);
67
+ }, [savedEmail]);
68
+ function handleValueChange(next) {
69
+ setValue(next);
70
+ if (serverError) setServerError(null);
71
+ }
72
+ async function handleBlur() {
73
+ const trimmed = value.trim();
74
+ if (trimmed === "" && savedEmail !== "") {
75
+ setValue(savedEmail);
76
+ return;
77
+ }
78
+ if (!isValidEmail(trimmed)) return;
79
+ if (trimmed === savedEmail) return;
80
+ setPending(true);
81
+ setServerError(null);
82
+ try {
83
+ const errors = await $actions?.identity?.clientProfileUpdate?.({ email: trimmed }) ?? [];
84
+ if (errors.length > 0) setServerError(errors[0]?.message ?? null);
85
+ } finally {
86
+ setPending(false);
87
+ }
88
+ }
89
+ return /* @__PURE__ */ jsx("div", {
90
+ ...props,
91
+ className,
92
+ "data-fs-email-identification-control": "",
93
+ ...pending ? { "data-fs-email-identification-pending": "" } : {},
94
+ ...readOnly ? { "data-fs-email-identification-readonly": "" } : {},
95
+ children: /* @__PURE__ */ jsx(EmailField, {
96
+ label,
97
+ placeholder,
98
+ value,
99
+ disabled: pending || readOnly,
100
+ invalid: serverError != null,
101
+ errorMessage: serverError ?? invalidEmailMessage,
102
+ onValueChange: handleValueChange,
103
+ onBlur: handleBlur,
104
+ required: true
105
+ })
106
+ });
107
+ }
108
+ //#endregion
109
+ export { EmailIdentificationControl, EmailIdentificationControlDefinition };
110
+
111
+ //# sourceMappingURL=email-identification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-identification.js","names":[],"sources":["../../../src/matter/email-identification/email-identification.tsx"],"sourcesContent":["'use client';\n\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef } from 'react';\nimport { useEffect, useState } from 'react';\nimport { EmailField, isValidEmail } from '../../particles/email-field/email-field.js';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport { useSession } from '../session/session.js';\n\n// ---------------------------------------------------------------------------\n// GraphQL Fragment (colocated, ADR-0011) — reads only clientProfile.email.\n// Authored as a raw string (not the codegen graphql() factory), mirroring the ShippingSimulator\n// matter: the compiler derives the entity fragment on `clientProfile` and subscribes reactively.\n// ---------------------------------------------------------------------------\n\nconst fragment = /* GraphQL */ `\n fragment EmailIdentificationData on Query {\n clientProfile {\n __typename\n id\n email\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** ClientProfile slice forwarded by the reactive runtime — only `email` is consumed for pre-fill. */\nexport type EmailIdentificationSlice = {\n email?: string | null;\n};\n\nexport type EmailIdentificationControlProps = Omit<ComponentPropsWithRef<'div'>, 'onChange'> & {\n /** Accessible label passed to the EmailField. */\n label?: string;\n /** Input placeholder passed to the EmailField. */\n placeholder?: string;\n /** Inline error text for an invalid email format (port of `checkout/form-messages.invalid-email`). */\n invalidEmailMessage?: string;\n /** ClientProfile slice forwarded by the reactive runtime; `null` until the entity resolves. */\n $data?: EmailIdentificationSlice | null;\n /** Compiler-injected action surface; carries `identity.clientProfileUpdate`. */\n $actions?: ComponentActions;\n};\n\n// ---------------------------------------------------------------------------\n// Definition\n// ---------------------------------------------------------------------------\n\nexport const EmailIdentificationControlDefinition = defineComponent<EmailIdentificationControlProps>({\n name: 'EmailIdentificationControl',\n importPath: '@vtex/faststore/components',\n component: EmailIdentificationControl,\n fragment,\n fetchStrategy: 'reactive',\n actions: { identity: ['clientProfileUpdate'] },\n requiresContext: 'session',\n editor: { label: 'Email Identification', category: 'identity' },\n schema: {\n label: { type: 'string', label: 'Label' },\n placeholder: { type: 'string', label: 'Placeholder' },\n invalidEmailMessage: { type: 'string', label: 'Invalid email message' },\n },\n guideline:\n 'Checkout-bound email field: pre-fills from clientProfile.email and persists a valid changed email via $actions.identity.clientProfileUpdate (anonymous→identified). Must be inside SessionRoot. See email-identification.md.',\n});\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\n/**\n * Matter that binds the presentational `EmailField` to the User Identity foundation. It reads\n * `clientProfile.email` (colocated reactive fragment) for the pre-fill, reads the identification\n * tri-state and `canEditData` from `useSession()` (which also enforces the `SessionRoot` ancestor),\n * and on a **valid, changed** email persists only the `email` field through\n * `$actions.identity.clientProfileUpdate` (async / pessimistic, Decision 1). While the write is in\n * flight the field is disabled and `data-fs-email-identification-pending` is present so a\n * checkout-CTA guard can block. When the session reports `canEditData: false` (identified but\n * unauthenticated claimed profile — VTEX refuses the write server-side) the field renders disabled\n * with `data-fs-email-identification-readonly`. Server `userErrors` are surfaced inline; the\n * session state is never computed locally.\n */\nexport function EmailIdentificationControl({\n label,\n placeholder,\n invalidEmailMessage,\n $data: $dataProp,\n $actions,\n className,\n ...props\n}: EmailIdentificationControlProps) {\n const $data = useDataOverride($dataProp);\n // Also enforces the SessionRoot ancestor: useSession() throws when rendered outside one.\n const { canEditData } = useSession();\n // VTEX refuses profile edits for an identified-but-unauthenticated claimed profile; render the\n // field read-only instead of accepting a write that is doomed server-side.\n const readOnly = !canEditData;\n\n const savedEmail = $data?.email ?? '';\n const [value, setValue] = useState(savedEmail);\n const [pending, setPending] = useState(false);\n const [serverError, setServerError] = useState<string | null>(null);\n\n // Sync the pre-fill when the saved profile email resolves or changes (identified/logged-in shopper).\n // Does not fire while the shopper is typing, since `savedEmail` only changes when the profile does.\n useEffect(() => {\n setValue(savedEmail);\n }, [savedEmail]);\n\n function handleValueChange(next: string) {\n setValue(next);\n if (serverError) setServerError(null);\n }\n\n async function handleBlur() {\n const trimmed = value.trim();\n // Cleared field → re-fill with the saved email; clearing must not visually \"un-identify\"\n // (changing email = switching user is a deliberate act, done by typing a new one).\n if (trimmed === '' && savedEmail !== '') {\n setValue(savedEmail);\n return;\n }\n // Invalid format → EmailField shows its own inline error; no persist, no step advance.\n if (!isValidEmail(trimmed)) return;\n // Unchanged → nothing to persist.\n if (trimmed === savedEmail) return;\n\n setPending(true);\n setServerError(null);\n try {\n const errors = (await $actions?.identity?.clientProfileUpdate?.({ email: trimmed })) ?? [];\n if (errors.length > 0) setServerError(errors[0]?.message ?? null);\n } finally {\n setPending(false);\n }\n }\n\n return (\n <div\n {...props}\n className={className}\n data-fs-email-identification-control=\"\"\n {...(pending ? { 'data-fs-email-identification-pending': '' } : {})}\n {...(readOnly ? { 'data-fs-email-identification-readonly': '' } : {})}\n >\n <EmailField\n label={label}\n placeholder={placeholder}\n value={value}\n disabled={pending || readOnly}\n invalid={serverError != null}\n errorMessage={serverError ?? invalidEmailMessage}\n onValueChange={handleValueChange}\n onBlur={handleBlur}\n required\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAoDA,MAAa,uCAAuC,gBAAiD;CACnG,MAAM;CACN,YAAY;CACZ,WAAW;CACX;;;;;;;;;CACA,eAAe;CACf,SAAS,EAAE,UAAU,CAAC,qBAAqB,EAAE;CAC7C,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAAwB,UAAU;CAAW;CAC9D,QAAQ;EACN,OAAO;GAAE,MAAM;GAAU,OAAO;EAAQ;EACxC,aAAa;GAAE,MAAM;GAAU,OAAO;EAAc;EACpD,qBAAqB;GAAE,MAAM;GAAU,OAAO;EAAwB;CACxE;CACA,WACE;AACJ,CAAC;;;;;;;;;;;;;AAkBD,SAAgB,2BAA2B,EACzC,OACA,aACA,qBACA,OAAO,WACP,UACA,WACA,GAAG,SAC+B;CAClC,MAAM,QAAQ,gBAAgB,SAAS;CAEvC,MAAM,EAAE,gBAAgB,WAAW;CAGnC,MAAM,WAAW,CAAC;CAElB,MAAM,aAAa,OAAO,SAAS;CACnC,MAAM,CAAC,OAAO,YAAY,SAAS,UAAU;CAC7C,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,aAAa,kBAAkB,SAAwB,IAAI;CAIlE,gBAAgB;EACd,SAAS,UAAU;CACrB,GAAG,CAAC,UAAU,CAAC;CAEf,SAAS,kBAAkB,MAAc;EACvC,SAAS,IAAI;EACb,IAAI,aAAa,eAAe,IAAI;CACtC;CAEA,eAAe,aAAa;EAC1B,MAAM,UAAU,MAAM,KAAK;EAG3B,IAAI,YAAY,MAAM,eAAe,IAAI;GACvC,SAAS,UAAU;GACnB;EACF;EAEA,IAAI,CAAC,aAAa,OAAO,GAAG;EAE5B,IAAI,YAAY,YAAY;EAE5B,WAAW,IAAI;EACf,eAAe,IAAI;EACnB,IAAI;GACF,MAAM,SAAU,MAAM,UAAU,UAAU,sBAAsB,EAAE,OAAO,QAAQ,CAAC,KAAM,CAAC;GACzF,IAAI,OAAO,SAAS,GAAG,eAAe,OAAO,EAAE,EAAE,WAAW,IAAI;EAClE,UAAU;GACR,WAAW,KAAK;EAClB;CACF;CAEA,OACE,oBAAC,OAAD;EACE,GAAI;EACO;EACX,wCAAqC;EACrC,GAAK,UAAU,EAAE,wCAAwC,GAAG,IAAI,CAAC;EACjE,GAAK,WAAW,EAAE,yCAAyC,GAAG,IAAI,CAAC;EAEnE,UAAA,oBAAC,YAAD;GACS;GACM;GACN;GACP,UAAU,WAAW;GACrB,SAAS,eAAe;GACxB,cAAc,eAAe;GAC7B,eAAe;GACf,QAAQ;GACR,UAAA;EACD,CAAA;CACE,CAAA;AAET"}
@@ -0,0 +1,44 @@
1
+ import { ComponentDefinition } from "../../core/dist/define-component.js";
2
+ import "../../core/dist/index.js";
3
+ import { ComponentPropsWithRef } from "react";
4
+ //#region src/matter/free-shipping-progress/free-shipping-progress.d.ts
5
+ type MoneyValue = {
6
+ amount: number | string;
7
+ currencyCode: string;
8
+ };
9
+ type FreeShippingProgressData = {
10
+ cart?: {
11
+ id: string;
12
+ total?: MoneyValue | null;
13
+ freeShippingProgress?: {
14
+ threshold: MoneyValue | null;
15
+ remaining: MoneyValue;
16
+ qualified: boolean;
17
+ } | null;
18
+ } | null;
19
+ };
20
+ export type FreeShippingProgressRootProps = ComponentPropsWithRef<'div'> & {
21
+ threshold?: number;
22
+ remaining?: number;
23
+ qualified?: boolean;
24
+ cartTotal?: number;
25
+ $data?: FreeShippingProgressData['cart'] | null;
26
+ };
27
+ export type FreeShippingProgressBarProps = ComponentPropsWithRef<'div'>;
28
+ export type FreeShippingProgressMessageProps = ComponentPropsWithRef<'div'> & {
29
+ label?: string;
30
+ qualifiedLabel?: string;
31
+ };
32
+ export declare const FreeShippingProgressRootDefinition: ComponentDefinition<FreeShippingProgressRootProps>;
33
+ export declare const FreeShippingProgressBarDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>>;
34
+ export declare const FreeShippingProgressMessageDefinition: ComponentDefinition<FreeShippingProgressMessageProps>;
35
+ export declare function FreeShippingProgressRoot({ threshold, remaining, qualified, cartTotal, $data: $dataProp, className, children, ...props }: FreeShippingProgressRootProps): import("react/jsx-runtime").JSX.Element | null;
36
+ export declare function FreeShippingProgressBar({ className, ...props }: FreeShippingProgressBarProps): import("react/jsx-runtime").JSX.Element;
37
+ export declare function FreeShippingProgressMessage({ label, qualifiedLabel, className, children, ...props }: FreeShippingProgressMessageProps): import("react/jsx-runtime").JSX.Element;
38
+ export declare const FreeShippingProgress: {
39
+ Root: typeof FreeShippingProgressRoot;
40
+ Bar: typeof FreeShippingProgressBar;
41
+ Message: typeof FreeShippingProgressMessage;
42
+ };
43
+ //#endregion
44
+ //# sourceMappingURL=free-shipping-progress.d.ts.map