@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,250 @@
1
+ "use client";
2
+ import { defineComponent } from "../../core/dist/define-component.js";
3
+ import "../../core/dist/index.js";
4
+ import { Field } from "../field/field.js";
5
+ import { Input } from "../input/input.js";
6
+ import { useRef, useState } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/particles/phone-field/phone-field.tsx
9
+ /**
10
+ * Returns true when `value` starts with the E.164 or bare country-code prefix
11
+ * for the given country.
12
+ *
13
+ * US country code: 1 → "+1…" or "1…"
14
+ * BR country code: 55 → "+55…" or "55…"
15
+ */
16
+ function isValidCountryCode(value, country) {
17
+ switch (country) {
18
+ case "US": return value.startsWith("+1") || value.startsWith("1");
19
+ case "BR": return value.startsWith("+55") || value.startsWith("55");
20
+ default: return false;
21
+ }
22
+ }
23
+ /**
24
+ * Strips phone mask formatting from `value`.
25
+ *
26
+ * When the raw string carries a valid country-code prefix (e.g. "+55…"), the
27
+ * returned value preserves the leading "+" so callers can detect E.164 intent.
28
+ * Otherwise only digits are returned.
29
+ *
30
+ * `removePhoneMask(applyPhoneMask(raw, country), country) === raw` for all
31
+ * valid raw values that do NOT carry a country-code prefix.
32
+ */
33
+ function removePhoneMask(value, country) {
34
+ const onlyDigits = value.replace(/\D/g, "");
35
+ if (value.startsWith("+") && isValidCountryCode(value, country)) return `+${onlyDigits}`;
36
+ return onlyDigits;
37
+ }
38
+ /**
39
+ * Formats `value` into the mask pattern for `country`, applying as many mask
40
+ * characters as the digit count allows (progressive masking while typing).
41
+ *
42
+ * US: (123) 456-7890 or +1 (123) 456-7890
43
+ * BR: (11) 99999-9999 or +55 (11) 99999-9999
44
+ *
45
+ * Non-US/BR countries fall back to the US mask.
46
+ */
47
+ function applyPhoneMask(value, country) {
48
+ switch (country) {
49
+ case "US": return applyUSPhoneMask(value);
50
+ case "BR": return applyBRPhoneMask(value);
51
+ default: return applyUSPhoneMask(value);
52
+ }
53
+ }
54
+ function applyUSPhoneMask(value) {
55
+ const onlyDigits = value.replace(/\D/g, "");
56
+ if (value.startsWith("+1") && onlyDigits.length >= 11) return `+1 ${formatUSNumber(value.replace("+1", "").replace(/\D/g, ""))}`;
57
+ if (onlyDigits.startsWith("1") && onlyDigits.length === 11) return `+1 ${formatUSNumber(onlyDigits.substring(1))}`;
58
+ return formatUSNumber(onlyDigits);
59
+ }
60
+ function formatUSNumber(digits) {
61
+ const local = digits.slice(0, 10);
62
+ if (local.length === 0) return "";
63
+ if (local.length <= 3) return `(${local}`;
64
+ if (local.length <= 6) return `(${local.slice(0, 3)}) ${local.slice(3)}`;
65
+ return `(${local.slice(0, 3)}) ${local.slice(3, 6)}-${local.slice(6)}`;
66
+ }
67
+ function applyBRPhoneMask(value) {
68
+ const onlyDigits = value.replace(/\D/g, "");
69
+ if (value.startsWith("+55") && onlyDigits.length >= 12) return `+55 ${formatBRNumber(value.replace("+55", "").replace(/\D/g, ""))}`;
70
+ if (onlyDigits.startsWith("55") && (onlyDigits.length === 12 || onlyDigits.length === 13)) return `+55 ${formatBRNumber(onlyDigits.substring(2))}`;
71
+ return formatBRNumber(onlyDigits);
72
+ }
73
+ function formatBRNumber(digits) {
74
+ const local = digits.slice(0, 11);
75
+ if (local.length === 0) return "";
76
+ if (local.length <= 2) return `(${local}`;
77
+ if (local.length <= 6) return `(${local.slice(0, 2)}) ${local.slice(2)}`;
78
+ if (local.length <= 10) return `(${local.slice(0, 2)}) ${local.slice(2, 6)}-${local.slice(6)}`;
79
+ return `(${local.slice(0, 2)}) ${local.slice(2, 7)}-${local.slice(7)}`;
80
+ }
81
+ /**
82
+ * BR local part: 10 digits is a landline; 11 digits is a mobile, which must carry the mandatory
83
+ * ninth digit "9" right after the two-digit DDD (the `phone` library rule the spec's Gap-05
84
+ * reimplements — "11899998888" is mobile-shaped but not a real BR number).
85
+ */
86
+ function isValidBRLocal(digits) {
87
+ if (digits.length === 10) return true;
88
+ return digits.length === 11 && digits[2] === "9";
89
+ }
90
+ /**
91
+ * Validates a raw (unmasked) phone number string for the given country.
92
+ *
93
+ * NOTE: The spec (KD-3) calls for using the `phone` npm library for validation.
94
+ * The library is listed in Gap-05 as a new dependency to add when available.
95
+ * Until that dependency is installed, this implements an equivalent
96
+ * digit-count validation that covers all spec key-scenarios for US and BR.
97
+ * Country-code and non-country-code inputs are both handled.
98
+ *
99
+ * US valid forms:
100
+ * - 10 digits (local, e.g. "1234567890")
101
+ * - 11 raw digits with country code "1" (e.g. "11234567890")
102
+ * - E.164 "+1" + 10 digits (e.g. "+11234567890")
103
+ *
104
+ * BR valid forms:
105
+ * - 10 digits (landline, e.g. "1133334444")
106
+ * - 11 digits (mobile, e.g. "11999998888"; the ninth digit after the DDD must be "9")
107
+ * - E.164 "+55" + 10 or 11 digits (e.g. "+5511999998888")
108
+ */
109
+ function validatePhoneNumber(input, country) {
110
+ if (!input || !input.trim()) return false;
111
+ const digits = input.replace(/\D/g, "");
112
+ if (isValidCountryCode(input, country)) {
113
+ if (country === "US") {
114
+ if (digits.length === 11) return true;
115
+ } else if (digits.length === 12 || digits.length === 13) return isValidBRLocal(digits.slice(2));
116
+ }
117
+ if (country === "US") return digits.length === 10;
118
+ return isValidBRLocal(digits);
119
+ }
120
+ /**
121
+ * Normalizes a valid raw phone value to E.164 for persistence (legacy checkout parity): the
122
+ * particle emits local digits ("2015551234") or a "+"-prefixed string; the profile stores
123
+ * "+12015551234". Only call this on values `validatePhoneNumber` has already accepted — shared by
124
+ * every binding that persists a phone value (`ClientProfilePhoneControl`, `ClientProfileForm`) so
125
+ * there is exactly one normalization implementation.
126
+ */
127
+ function toE164(raw, country) {
128
+ const unmasked = removePhoneMask(raw, country);
129
+ if (unmasked.startsWith("+")) return unmasked;
130
+ const code = country === "BR" ? "55" : "1";
131
+ const localMax = country === "BR" ? 11 : 10;
132
+ return unmasked.startsWith(code) && unmasked.length > localMax ? `+${unmasked}` : `+${code}${unmasked}`;
133
+ }
134
+ const PhoneFieldDefinition = defineComponent({
135
+ name: "PhoneField",
136
+ importPath: "@vtex/faststore/components",
137
+ component: PhoneField,
138
+ editor: {
139
+ label: "Phone Field",
140
+ category: "action"
141
+ },
142
+ schema: {
143
+ country: {
144
+ type: "string",
145
+ default: "US",
146
+ label: "Country (US or BR)"
147
+ },
148
+ label: {
149
+ type: "string",
150
+ default: "Phone",
151
+ label: "Label"
152
+ },
153
+ requirement: {
154
+ type: "string",
155
+ default: "mandatory",
156
+ label: "Requirement"
157
+ },
158
+ errorInvalid: {
159
+ type: "string",
160
+ default: "Invalid phone number",
161
+ label: "Invalid error message"
162
+ },
163
+ errorRequired: {
164
+ type: "string",
165
+ default: "Phone number is required",
166
+ label: "Required error message"
167
+ }
168
+ },
169
+ guideline: "Locale-aware, business-agnostic phone number input composed from the field + input particles. Applies country masking, validates on blur, and exposes its value via onValueChange. Bind it to a data source (e.g. ClientProfilePhoneControl for checkout) to persist the value."
170
+ });
171
+ /**
172
+ * Presentational, business-agnostic phone field. Composes the `field` and `input` particles: the
173
+ * `Field.Root` owns the invalid/disabled state and the `Field.Error match` slot, while the `Input`
174
+ * particle renders the masked `<tel>` control. The particle stays reusable (checkout binding today,
175
+ * MyAccount / extensions later); a binding owns the data source and persistence.
176
+ *
177
+ * US/BR masking, blur validation, and the `data-fs-phone-field*` attributes (plus the country variant
178
+ * attribute) are kept; error strings remain props (a documented i18n divergence — the country tables
179
+ * are internal, the copy is owner-supplied).
180
+ */
181
+ function PhoneField({ value, defaultValue = "", onValueChange, country = "US", label = "Phone", isDisabled = false, placeholder, invalid, error, errorInvalid = "Invalid phone number", errorRequired = "Phone number is required", requirement = "mandatory", onBlur, className }) {
182
+ const isControlled = value !== void 0;
183
+ const [internalRaw, setInternalRaw] = useState(defaultValue);
184
+ const [localInvalid, setLocalInvalid] = useState(false);
185
+ const [localError, setLocalError] = useState("");
186
+ const prevCountryRef = useRef(country);
187
+ if (prevCountryRef.current !== country) {
188
+ prevCountryRef.current = country;
189
+ setLocalInvalid(false);
190
+ setLocalError("");
191
+ }
192
+ const rawValue = isControlled ? value : internalRaw;
193
+ const maskedValue = applyPhoneMask(rawValue, country);
194
+ const effectiveInvalid = invalid !== void 0 ? invalid : localInvalid;
195
+ const effectiveError = error !== void 0 ? error : effectiveInvalid ? localError : "";
196
+ function handleChange(event) {
197
+ if (isDisabled) return;
198
+ const raw = removePhoneMask(event.target.value, country);
199
+ if (!isControlled) setInternalRaw(raw);
200
+ onValueChange?.(raw);
201
+ }
202
+ function handleBlur(_event) {
203
+ if (isDisabled) return;
204
+ let isFieldInvalid = false;
205
+ let fieldError = "";
206
+ if (requirement === "mandatory" && !rawValue.trim()) {
207
+ isFieldInvalid = true;
208
+ fieldError = errorRequired;
209
+ } else if (rawValue.trim()) {
210
+ const valid = validatePhoneNumber(rawValue, country);
211
+ isFieldInvalid = !valid;
212
+ fieldError = valid ? "" : errorInvalid;
213
+ }
214
+ setLocalInvalid(isFieldInvalid);
215
+ setLocalError(fieldError);
216
+ onBlur?.();
217
+ }
218
+ if (requirement === "hidden") return null;
219
+ return /* @__PURE__ */ jsxs(Field.Root, {
220
+ "data-fs-phone-field-root": "",
221
+ "data-fs-phone-field-root-country": country,
222
+ className,
223
+ invalid: effectiveInvalid,
224
+ disabled: isDisabled,
225
+ children: [
226
+ /* @__PURE__ */ jsx(Field.Label, {
227
+ "data-fs-phone-field-label": "",
228
+ children: label
229
+ }),
230
+ /* @__PURE__ */ jsx(Input, {
231
+ "data-fs-phone-field-input": "",
232
+ type: "tel",
233
+ inputMode: "numeric",
234
+ value: maskedValue,
235
+ onChange: handleChange,
236
+ onBlur: handleBlur,
237
+ placeholder
238
+ }),
239
+ effectiveError ? /* @__PURE__ */ jsx(Field.Error, {
240
+ match: true,
241
+ "data-fs-phone-field-error": "",
242
+ children: effectiveError
243
+ }) : null
244
+ ]
245
+ });
246
+ }
247
+ //#endregion
248
+ export { PhoneField, PhoneFieldDefinition, applyPhoneMask, removePhoneMask, toE164, validatePhoneNumber };
249
+
250
+ //# sourceMappingURL=phone-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-field.js","names":[],"sources":["../../../src/particles/phone-field/phone-field.tsx"],"sourcesContent":["'use client';\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ChangeEvent, FocusEvent } from 'react';\nimport { useRef, useState } from 'react';\nimport { Field } from '../field/field.js';\nimport { Input } from '../input/input.js';\n\n// ---------------------------------------------------------------------------\n// Country masks\n// ---------------------------------------------------------------------------\n\n/**\n * Country codes supported by PhoneField.\n * Only US and BR are implemented; every other ISO-2 code falls back to the US\n * format (Gap-06 in the PhoneField spec).\n */\nexport type PhoneCountry = 'US' | 'BR';\n\n/**\n * Returns true when `value` starts with the E.164 or bare country-code prefix\n * for the given country.\n *\n * US country code: 1 → \"+1…\" or \"1…\"\n * BR country code: 55 → \"+55…\" or \"55…\"\n */\nfunction isValidCountryCode(value: string, country: PhoneCountry): boolean {\n switch (country) {\n case 'US':\n return value.startsWith('+1') || value.startsWith('1');\n case 'BR':\n return value.startsWith('+55') || value.startsWith('55');\n default:\n return false;\n }\n}\n\n/**\n * Strips phone mask formatting from `value`.\n *\n * When the raw string carries a valid country-code prefix (e.g. \"+55…\"), the\n * returned value preserves the leading \"+\" so callers can detect E.164 intent.\n * Otherwise only digits are returned.\n *\n * `removePhoneMask(applyPhoneMask(raw, country), country) === raw` for all\n * valid raw values that do NOT carry a country-code prefix.\n */\nexport function removePhoneMask(value: string, country: PhoneCountry): string {\n const onlyDigits = value.replace(/\\D/g, '');\n\n // Only treat as E.164 when the raw string explicitly carries a \"+\" prefix.\n // A bare digit string that starts with the country-code digits (e.g. \"1234567890\"\n // starting with \"1\") is a local number, not a country-code-prefixed one.\n if (value.startsWith('+') && isValidCountryCode(value, country)) {\n return `+${onlyDigits}`;\n }\n\n return onlyDigits;\n}\n\n/**\n * Formats `value` into the mask pattern for `country`, applying as many mask\n * characters as the digit count allows (progressive masking while typing).\n *\n * US: (123) 456-7890 or +1 (123) 456-7890\n * BR: (11) 99999-9999 or +55 (11) 99999-9999\n *\n * Non-US/BR countries fall back to the US mask.\n */\nexport function applyPhoneMask(value: string, country: PhoneCountry): string {\n switch (country) {\n case 'US':\n return applyUSPhoneMask(value);\n case 'BR':\n return applyBRPhoneMask(value);\n default:\n return applyUSPhoneMask(value);\n }\n}\n\nfunction applyUSPhoneMask(value: string): string {\n const onlyDigits = value.replace(/\\D/g, '');\n\n // E.164 with explicit \"+\" prefix and full country code\n if (value.startsWith('+1') && onlyDigits.length >= 11) {\n const local = value.replace('+1', '').replace(/\\D/g, '');\n return `+1 ${formatUSNumber(local)}`;\n }\n\n // Bare country-code prefix (e.g. \"11234567890\")\n if (onlyDigits.startsWith('1') && onlyDigits.length === 11) {\n return `+1 ${formatUSNumber(onlyDigits.substring(1))}`;\n }\n\n return formatUSNumber(onlyDigits);\n}\n\nfunction formatUSNumber(digits: string): string {\n // US local numbers cap at 10 digits — drop the overflow instead of growing the mask unbounded.\n const local = digits.slice(0, 10);\n if (local.length === 0) return '';\n if (local.length <= 3) return `(${local}`;\n if (local.length <= 6) return `(${local.slice(0, 3)}) ${local.slice(3)}`;\n return `(${local.slice(0, 3)}) ${local.slice(3, 6)}-${local.slice(6)}`;\n}\n\nfunction applyBRPhoneMask(value: string): string {\n const onlyDigits = value.replace(/\\D/g, '');\n\n // E.164 with explicit \"+55\" prefix. 12 digits is a landline (+55 + 10 local),\n // 13 is a mobile (+55 + 11 local); both strip the \"55\" country code.\n if (value.startsWith('+55') && onlyDigits.length >= 12) {\n const local = value.replace('+55', '').replace(/\\D/g, '');\n return `+55 ${formatBRNumber(local)}`;\n }\n\n // Bare country-code prefix (e.g. \"5511999998888\" mobile, \"551133334444\" landline)\n if (onlyDigits.startsWith('55') && (onlyDigits.length === 12 || onlyDigits.length === 13)) {\n return `+55 ${formatBRNumber(onlyDigits.substring(2))}`;\n }\n\n return formatBRNumber(onlyDigits);\n}\n\nfunction formatBRNumber(digits: string): string {\n // BR local numbers cap at 11 digits (mobile) — drop the overflow instead of growing the mask unbounded.\n const local = digits.slice(0, 11);\n if (local.length === 0) return '';\n if (local.length <= 2) return `(${local}`;\n if (local.length <= 6) return `(${local.slice(0, 2)}) ${local.slice(2)}`;\n // 7-10 digits: landline format (XX) XXXX-XXXX\n if (local.length <= 10) return `(${local.slice(0, 2)}) ${local.slice(2, 6)}-${local.slice(6)}`;\n // 11 digits: mobile format (XX) XXXXX-XXXX\n return `(${local.slice(0, 2)}) ${local.slice(2, 7)}-${local.slice(7)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Validation\n// ---------------------------------------------------------------------------\n\n/**\n * BR local part: 10 digits is a landline; 11 digits is a mobile, which must carry the mandatory\n * ninth digit \"9\" right after the two-digit DDD (the `phone` library rule the spec's Gap-05\n * reimplements — \"11899998888\" is mobile-shaped but not a real BR number).\n */\nfunction isValidBRLocal(digits: string): boolean {\n if (digits.length === 10) return true;\n return digits.length === 11 && digits[2] === '9';\n}\n\n/**\n * Validates a raw (unmasked) phone number string for the given country.\n *\n * NOTE: The spec (KD-3) calls for using the `phone` npm library for validation.\n * The library is listed in Gap-05 as a new dependency to add when available.\n * Until that dependency is installed, this implements an equivalent\n * digit-count validation that covers all spec key-scenarios for US and BR.\n * Country-code and non-country-code inputs are both handled.\n *\n * US valid forms:\n * - 10 digits (local, e.g. \"1234567890\")\n * - 11 raw digits with country code \"1\" (e.g. \"11234567890\")\n * - E.164 \"+1\" + 10 digits (e.g. \"+11234567890\")\n *\n * BR valid forms:\n * - 10 digits (landline, e.g. \"1133334444\")\n * - 11 digits (mobile, e.g. \"11999998888\"; the ninth digit after the DDD must be \"9\")\n * - E.164 \"+55\" + 10 or 11 digits (e.g. \"+5511999998888\")\n */\nexport function validatePhoneNumber(input: string, country: PhoneCountry): boolean {\n if (!input || !input.trim()) return false;\n\n const digits = input.replace(/\\D/g, '');\n\n if (isValidCountryCode(input, country)) {\n // Country-code branch: validate digit count including the country code digits.\n if (country === 'US') {\n // \"+1\" or \"1\" prefix + exactly 10 local digits = 11 raw digits\n if (digits.length === 11) return true;\n // Fall through: could be a 10-digit local number that starts with \"1\"\n } else {\n // BR: \"+55\" or \"55\" prefix + 10 or 11 local digits = 12 or 13 raw digits\n if (digits.length === 12 || digits.length === 13) return isValidBRLocal(digits.slice(2));\n // Fall through: could be local digits that happen to start with \"55\"\n }\n }\n\n // Local (no country code) validation\n if (country === 'US') {\n return digits.length === 10;\n }\n\n return isValidBRLocal(digits);\n}\n\n/**\n * Normalizes a valid raw phone value to E.164 for persistence (legacy checkout parity): the\n * particle emits local digits (\"2015551234\") or a \"+\"-prefixed string; the profile stores\n * \"+12015551234\". Only call this on values `validatePhoneNumber` has already accepted — shared by\n * every binding that persists a phone value (`ClientProfilePhoneControl`, `ClientProfileForm`) so\n * there is exactly one normalization implementation.\n */\nexport function toE164(raw: string, country: PhoneCountry): string {\n const unmasked = removePhoneMask(raw, country);\n if (unmasked.startsWith('+')) return unmasked;\n const code = country === 'BR' ? '55' : '1';\n const localMax = country === 'BR' ? 11 : 10;\n // A bare country-code prefix (\"12015551234\", \"5511999998888\") only needs the \"+\".\n return unmasked.startsWith(code) && unmasked.length > localMax ? `+${unmasked}` : `+${code}${unmasked}`;\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype PhoneFieldRequirement = 'mandatory' | 'optional' | 'hidden';\n\nexport type PhoneFieldProps = {\n /** Controlled raw (unmasked) phone value. */\n value?: string;\n /** Uncontrolled initial raw value. */\n defaultValue?: string;\n /** Called with the raw (unmasked) value on every change. */\n onValueChange?: (value: string) => void;\n /** Selects the phone mask and validation rule. */\n country?: PhoneCountry;\n /** Visible field label. */\n label?: string;\n /** Disables the field when true. */\n isDisabled?: boolean;\n /** Input placeholder text. */\n placeholder?: string;\n /**\n * Externally-controlled invalid state. When provided, overrides the\n * particle's internal blur-triggered validation result.\n */\n invalid?: boolean;\n /**\n * Externally-supplied error message. When provided, overrides the\n * particle's internal error string.\n */\n error?: string;\n /** Error string shown when the input format is invalid. */\n errorInvalid?: string;\n /** Error string shown when the mandatory field is left empty. */\n errorRequired?: string;\n /**\n * Controls field visibility and required validation.\n *\n * - `'mandatory'` (default): empty input blocks submission.\n * - `'optional'`: empty input is allowed; format is still checked when a\n * value is present.\n * - `'hidden'`: renders null — no DOM node is emitted.\n */\n requirement?: PhoneFieldRequirement;\n /** Called after the field loses focus (post-validation). */\n onBlur?: () => void;\n /** Additional class applied to the root element. */\n className?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Definition\n// ---------------------------------------------------------------------------\n\nexport const PhoneFieldDefinition = defineComponent<PhoneFieldProps>({\n name: 'PhoneField',\n importPath: '@vtex/faststore/components',\n component: PhoneField,\n editor: { label: 'Phone Field', category: 'action' },\n schema: {\n country: { type: 'string', default: 'US', label: 'Country (US or BR)' },\n label: { type: 'string', default: 'Phone', label: 'Label' },\n requirement: { type: 'string', default: 'mandatory', label: 'Requirement' },\n errorInvalid: { type: 'string', default: 'Invalid phone number', label: 'Invalid error message' },\n errorRequired: { type: 'string', default: 'Phone number is required', label: 'Required error message' },\n },\n guideline:\n 'Locale-aware, business-agnostic phone number input composed from the field + input particles. Applies country masking, validates on blur, and exposes its value via onValueChange. Bind it to a data source (e.g. ClientProfilePhoneControl for checkout) to persist the value.',\n});\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * Presentational, business-agnostic phone field. Composes the `field` and `input` particles: the\n * `Field.Root` owns the invalid/disabled state and the `Field.Error match` slot, while the `Input`\n * particle renders the masked `<tel>` control. The particle stays reusable (checkout binding today,\n * MyAccount / extensions later); a binding owns the data source and persistence.\n *\n * US/BR masking, blur validation, and the `data-fs-phone-field*` attributes (plus the country variant\n * attribute) are kept; error strings remain props (a documented i18n divergence — the country tables\n * are internal, the copy is owner-supplied).\n */\nexport function PhoneField({\n value,\n defaultValue = '',\n onValueChange,\n country = 'US',\n label = 'Phone',\n isDisabled = false,\n placeholder,\n invalid,\n error,\n errorInvalid = 'Invalid phone number',\n errorRequired = 'Phone number is required',\n requirement = 'mandatory',\n onBlur,\n className,\n}: PhoneFieldProps) {\n const isControlled = value !== undefined;\n\n const [internalRaw, setInternalRaw] = useState(defaultValue);\n const [localInvalid, setLocalInvalid] = useState(false);\n const [localError, setLocalError] = useState('');\n\n // Clear local validation state when country changes so the next blur\n // re-validates against the new country's rules. Done during render\n // (before paint) to avoid the useEffect trigger-dependency lint warning.\n const prevCountryRef = useRef(country);\n if (prevCountryRef.current !== country) {\n // react-doctor-disable-next-line no-ref-current-in-render -- paired with the setState calls right below, both replay together\n prevCountryRef.current = country;\n setLocalInvalid(false);\n setLocalError('');\n }\n\n const rawValue = isControlled ? (value as string) : internalRaw;\n const maskedValue = applyPhoneMask(rawValue, country);\n\n // External props take precedence over internal validation state.\n // When `invalid` is externally controlled, the error display is also fully\n // controlled: use the explicit `error` prop, or fall back to empty string so\n // no stale local error leaks through when the parent says the field is valid.\n const effectiveInvalid = invalid !== undefined ? invalid : localInvalid;\n const effectiveError = error !== undefined ? error : effectiveInvalid ? localError : '';\n\n function handleChange(event: ChangeEvent<HTMLInputElement>) {\n if (isDisabled) return;\n const raw = removePhoneMask(event.target.value, country);\n if (!isControlled) {\n setInternalRaw(raw);\n }\n onValueChange?.(raw);\n }\n\n function handleBlur(_event: FocusEvent<HTMLInputElement>) {\n if (isDisabled) return;\n\n let isFieldInvalid = false;\n let fieldError = '';\n\n if (requirement === 'mandatory' && !rawValue.trim()) {\n isFieldInvalid = true;\n fieldError = errorRequired;\n } else if (rawValue.trim()) {\n const valid = validatePhoneNumber(rawValue, country);\n isFieldInvalid = !valid;\n fieldError = valid ? '' : errorInvalid;\n }\n // optional + empty → no error, keep isFieldInvalid = false / fieldError = ''\n\n setLocalInvalid(isFieldInvalid);\n setLocalError(fieldError);\n onBlur?.();\n }\n\n if (requirement === 'hidden') return null;\n\n return (\n <Field.Root\n data-fs-phone-field-root=\"\"\n data-fs-phone-field-root-country={country}\n className={className}\n invalid={effectiveInvalid}\n disabled={isDisabled}\n >\n <Field.Label data-fs-phone-field-label=\"\">{label}</Field.Label>\n {/* The `input` particle wraps Base UI `Input`, which wires into `Field.Root` out of the box\n (no `Field.Control` wrapper needed); see the Base UI Field docs. */}\n <Input\n data-fs-phone-field-input=\"\"\n type=\"tel\"\n inputMode=\"numeric\"\n value={maskedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n />\n {effectiveError ? (\n <Field.Error match data-fs-phone-field-error=\"\">\n {effectiveError}\n </Field.Error>\n ) : null}\n </Field.Root>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAyBA,SAAS,mBAAmB,OAAe,SAAgC;CACzE,QAAQ,SAAR;EACE,KAAK,MACH,OAAO,MAAM,WAAW,IAAI,KAAK,MAAM,WAAW,GAAG;EACvD,KAAK,MACH,OAAO,MAAM,WAAW,KAAK,KAAK,MAAM,WAAW,IAAI;EACzD,SACE,OAAO;CACX;AACF;;;;;;;;;;;AAYA,SAAgB,gBAAgB,OAAe,SAA+B;CAC5E,MAAM,aAAa,MAAM,QAAQ,OAAO,EAAE;CAK1C,IAAI,MAAM,WAAW,GAAG,KAAK,mBAAmB,OAAO,OAAO,GAC5D,OAAO,IAAI;CAGb,OAAO;AACT;;;;;;;;;;AAWA,SAAgB,eAAe,OAAe,SAA+B;CAC3E,QAAQ,SAAR;EACE,KAAK,MACH,OAAO,iBAAiB,KAAK;EAC/B,KAAK,MACH,OAAO,iBAAiB,KAAK;EAC/B,SACE,OAAO,iBAAiB,KAAK;CACjC;AACF;AAEA,SAAS,iBAAiB,OAAuB;CAC/C,MAAM,aAAa,MAAM,QAAQ,OAAO,EAAE;CAG1C,IAAI,MAAM,WAAW,IAAI,KAAK,WAAW,UAAU,IAEjD,OAAO,MAAM,eADC,MAAM,QAAQ,MAAM,EAAE,CAAC,CAAC,QAAQ,OAAO,EACrB,CAAC;CAInC,IAAI,WAAW,WAAW,GAAG,KAAK,WAAW,WAAW,IACtD,OAAO,MAAM,eAAe,WAAW,UAAU,CAAC,CAAC;CAGrD,OAAO,eAAe,UAAU;AAClC;AAEA,SAAS,eAAe,QAAwB;CAE9C,MAAM,QAAQ,OAAO,MAAM,GAAG,EAAE;CAChC,IAAI,MAAM,WAAW,GAAG,OAAO;CAC/B,IAAI,MAAM,UAAU,GAAG,OAAO,IAAI;CAClC,IAAI,MAAM,UAAU,GAAG,OAAO,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,MAAM,CAAC;CACrE,OAAO,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,MAAM,CAAC;AACrE;AAEA,SAAS,iBAAiB,OAAuB;CAC/C,MAAM,aAAa,MAAM,QAAQ,OAAO,EAAE;CAI1C,IAAI,MAAM,WAAW,KAAK,KAAK,WAAW,UAAU,IAElD,OAAO,OAAO,eADA,MAAM,QAAQ,OAAO,EAAE,CAAC,CAAC,QAAQ,OAAO,EACrB,CAAC;CAIpC,IAAI,WAAW,WAAW,IAAI,MAAM,WAAW,WAAW,MAAM,WAAW,WAAW,KACpF,OAAO,OAAO,eAAe,WAAW,UAAU,CAAC,CAAC;CAGtD,OAAO,eAAe,UAAU;AAClC;AAEA,SAAS,eAAe,QAAwB;CAE9C,MAAM,QAAQ,OAAO,MAAM,GAAG,EAAE;CAChC,IAAI,MAAM,WAAW,GAAG,OAAO;CAC/B,IAAI,MAAM,UAAU,GAAG,OAAO,IAAI;CAClC,IAAI,MAAM,UAAU,GAAG,OAAO,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,MAAM,CAAC;CAErE,IAAI,MAAM,UAAU,IAAI,OAAO,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,MAAM,CAAC;CAE3F,OAAO,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,MAAM,CAAC;AACrE;;;;;;AAWA,SAAS,eAAe,QAAyB;CAC/C,IAAI,OAAO,WAAW,IAAI,OAAO;CACjC,OAAO,OAAO,WAAW,MAAM,OAAO,OAAO;AAC/C;;;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,oBAAoB,OAAe,SAAgC;CACjF,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,GAAG,OAAO;CAEpC,MAAM,SAAS,MAAM,QAAQ,OAAO,EAAE;CAEtC,IAAI,mBAAmB,OAAO,OAAO,GAAG;EAEtC,IAAI,YAAY,MAEV;OAAA,OAAO,WAAW,IAAI,OAAO;EAAA,OAIjC,IAAI,OAAO,WAAW,MAAM,OAAO,WAAW,IAAI,OAAO,eAAe,OAAO,MAAM,CAAC,CAAC;CAG3F;CAGA,IAAI,YAAY,MACd,OAAO,OAAO,WAAW;CAG3B,OAAO,eAAe,MAAM;AAC9B;;;;;;;;AASA,SAAgB,OAAO,KAAa,SAA+B;CACjE,MAAM,WAAW,gBAAgB,KAAK,OAAO;CAC7C,IAAI,SAAS,WAAW,GAAG,GAAG,OAAO;CACrC,MAAM,OAAO,YAAY,OAAO,OAAO;CACvC,MAAM,WAAW,YAAY,OAAO,KAAK;CAEzC,OAAO,SAAS,WAAW,IAAI,KAAK,SAAS,SAAS,WAAW,IAAI,aAAa,IAAI,OAAO;AAC/F;AAwDA,MAAa,uBAAuB,gBAAiC;CACnE,MAAM;CACN,YAAY;CACZ,WAAW;CACX,QAAQ;EAAE,OAAO;EAAe,UAAU;CAAS;CACnD,QAAQ;EACN,SAAS;GAAE,MAAM;GAAU,SAAS;GAAM,OAAO;EAAqB;EACtE,OAAO;GAAE,MAAM;GAAU,SAAS;GAAS,OAAO;EAAQ;EAC1D,aAAa;GAAE,MAAM;GAAU,SAAS;GAAa,OAAO;EAAc;EAC1E,cAAc;GAAE,MAAM;GAAU,SAAS;GAAwB,OAAO;EAAwB;EAChG,eAAe;GAAE,MAAM;GAAU,SAAS;GAA4B,OAAO;EAAyB;CACxG;CACA,WACE;AACJ,CAAC;;;;;;;;;;;AAgBD,SAAgB,WAAW,EACzB,OACA,eAAe,IACf,eACA,UAAU,MACV,QAAQ,SACR,aAAa,OACb,aACA,SACA,OACA,eAAe,wBACf,gBAAgB,4BAChB,cAAc,aACd,QACA,aACkB;CAClB,MAAM,eAAe,UAAU,KAAA;CAE/B,MAAM,CAAC,aAAa,kBAAkB,SAAS,YAAY;CAC3D,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,CAAC,YAAY,iBAAiB,SAAS,EAAE;CAK/C,MAAM,iBAAiB,OAAO,OAAO;CACrC,IAAI,eAAe,YAAY,SAAS;EAEtC,eAAe,UAAU;EACzB,gBAAgB,KAAK;EACrB,cAAc,EAAE;CAClB;CAEA,MAAM,WAAW,eAAgB,QAAmB;CACpD,MAAM,cAAc,eAAe,UAAU,OAAO;CAMpD,MAAM,mBAAmB,YAAY,KAAA,IAAY,UAAU;CAC3D,MAAM,iBAAiB,UAAU,KAAA,IAAY,QAAQ,mBAAmB,aAAa;CAErF,SAAS,aAAa,OAAsC;EAC1D,IAAI,YAAY;EAChB,MAAM,MAAM,gBAAgB,MAAM,OAAO,OAAO,OAAO;EACvD,IAAI,CAAC,cACH,eAAe,GAAG;EAEpB,gBAAgB,GAAG;CACrB;CAEA,SAAS,WAAW,QAAsC;EACxD,IAAI,YAAY;EAEhB,IAAI,iBAAiB;EACrB,IAAI,aAAa;EAEjB,IAAI,gBAAgB,eAAe,CAAC,SAAS,KAAK,GAAG;GACnD,iBAAiB;GACjB,aAAa;EACf,OAAO,IAAI,SAAS,KAAK,GAAG;GAC1B,MAAM,QAAQ,oBAAoB,UAAU,OAAO;GACnD,iBAAiB,CAAC;GAClB,aAAa,QAAQ,KAAK;EAC5B;EAGA,gBAAgB,cAAc;EAC9B,cAAc,UAAU;EACxB,SAAS;CACX;CAEA,IAAI,gBAAgB,UAAU,OAAO;CAErC,OACE,qBAAC,MAAM,MAAP;EACE,4BAAyB;EACzB,oCAAkC;EACvB;EACX,SAAS;EACT,UAAU;EALZ,UAAA;GAOE,oBAAC,MAAM,OAAP;IAAa,6BAA0B;IAAI,UAAA;GAAmB,CAAA;GAG9D,oBAAC,OAAD;IACE,6BAA0B;IAC1B,MAAK;IACL,WAAU;IACV,OAAO;IACP,UAAU;IACV,QAAQ;IACK;GACd,CAAA;GACA,iBACC,oBAAC,MAAM,OAAP;IAAa,OAAA;IAAM,6BAA0B;IAC1C,UAAA;GACU,CAAA,IACX;EACM;;AAEhB"}
@@ -0,0 +1,68 @@
1
+ import { ComponentDefinition } from "../../core/dist/define-component.js";
2
+ import "../../core/dist/index.js";
3
+ import { ComponentPropsWithRef, ReactNode } from "react";
4
+ //#region src/particles/popover/popover.d.ts
5
+ export type PopoverSide = 'top' | 'bottom' | 'left' | 'right';
6
+ export type PopoverAlign = 'start' | 'center' | 'end';
7
+ export type PopoverRootProps = {
8
+ defaultOpen?: boolean;
9
+ modal?: boolean;
10
+ children?: ReactNode;
11
+ };
12
+ export type PopoverTriggerProps = ComponentPropsWithRef<'button'> & {
13
+ openOnHover?: boolean;
14
+ delay?: number;
15
+ closeDelay?: number;
16
+ };
17
+ export type PopoverPortalProps = {
18
+ children?: ReactNode;
19
+ };
20
+ export type PopoverBackdropProps = ComponentPropsWithRef<'div'>;
21
+ export type PopoverPositionerProps = ComponentPropsWithRef<'div'> & {
22
+ side?: PopoverSide;
23
+ align?: PopoverAlign;
24
+ sideOffset?: number;
25
+ };
26
+ export type PopoverPopupProps = ComponentPropsWithRef<'div'>;
27
+ export type PopoverArrowProps = ComponentPropsWithRef<'div'>;
28
+ export type PopoverViewportProps = ComponentPropsWithRef<'div'>;
29
+ export type PopoverTitleProps = ComponentPropsWithRef<'h2'>;
30
+ export type PopoverDescriptionProps = ComponentPropsWithRef<'p'>;
31
+ export type PopoverCloseProps = ComponentPropsWithRef<'button'>;
32
+ export declare const PopoverRootDefinition: ComponentDefinition<PopoverRootProps>;
33
+ export declare const PopoverTriggerDefinition: ComponentDefinition<PopoverTriggerProps>;
34
+ export declare const PopoverPortalDefinition: ComponentDefinition<PopoverPortalProps>;
35
+ export declare const PopoverBackdropDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>>;
36
+ export declare const PopoverPositionerDefinition: ComponentDefinition<PopoverPositionerProps>;
37
+ export declare const PopoverPopupDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>>;
38
+ export declare const PopoverArrowDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>>;
39
+ export declare const PopoverViewportDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>>;
40
+ export declare const PopoverTitleDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>>;
41
+ export declare const PopoverDescriptionDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>>;
42
+ export declare const PopoverCloseDefinition: ComponentDefinition<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>>;
43
+ export declare function PopoverRoot({ defaultOpen, modal, children }: PopoverRootProps): import("react/jsx-runtime").JSX.Element;
44
+ export declare function PopoverTrigger({ openOnHover, delay, closeDelay, className, children, ...props }: PopoverTriggerProps): import("react/jsx-runtime").JSX.Element;
45
+ export declare function PopoverPortal({ children }: PopoverPortalProps): import("react/jsx-runtime").JSX.Element;
46
+ export declare function PopoverBackdrop({ className, children, ...props }: PopoverBackdropProps): import("react/jsx-runtime").JSX.Element;
47
+ export declare function PopoverPositioner({ side, align, sideOffset, className, children, ...props }: PopoverPositionerProps): import("react/jsx-runtime").JSX.Element;
48
+ export declare function PopoverPopup({ className, children, ...props }: PopoverPopupProps): import("react/jsx-runtime").JSX.Element;
49
+ export declare function PopoverArrow({ className, children, ...props }: PopoverArrowProps): import("react/jsx-runtime").JSX.Element;
50
+ export declare function PopoverViewport({ className, children, ...props }: PopoverViewportProps): import("react/jsx-runtime").JSX.Element;
51
+ export declare function PopoverTitle({ className, children, ...props }: PopoverTitleProps): import("react/jsx-runtime").JSX.Element;
52
+ export declare function PopoverDescription({ className, children, ...props }: PopoverDescriptionProps): import("react/jsx-runtime").JSX.Element;
53
+ export declare function PopoverClose({ className, children, ...props }: PopoverCloseProps): import("react/jsx-runtime").JSX.Element;
54
+ export declare const Popover: {
55
+ Root: typeof PopoverRoot;
56
+ Trigger: typeof PopoverTrigger;
57
+ Portal: typeof PopoverPortal;
58
+ Backdrop: typeof PopoverBackdrop;
59
+ Positioner: typeof PopoverPositioner;
60
+ Popup: typeof PopoverPopup;
61
+ Arrow: typeof PopoverArrow;
62
+ Viewport: typeof PopoverViewport;
63
+ Title: typeof PopoverTitle;
64
+ Description: typeof PopoverDescription;
65
+ Close: typeof PopoverClose;
66
+ };
67
+ //#endregion
68
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1,284 @@
1
+ "use client";
2
+ import { defineComponent } from "../../core/dist/define-component.js";
3
+ import "../../core/dist/index.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Popover } from "@base-ui/react/popover";
6
+ //#region src/particles/popover/popover.tsx
7
+ const PopoverRootDefinition = defineComponent({
8
+ name: "PopoverRoot",
9
+ importPath: "@vtex/faststore/components",
10
+ component: PopoverRoot,
11
+ editor: {
12
+ label: "Popover Root",
13
+ category: "layout"
14
+ },
15
+ schema: {
16
+ defaultOpen: {
17
+ type: "boolean",
18
+ default: false,
19
+ label: "Default Open"
20
+ },
21
+ modal: {
22
+ type: "boolean",
23
+ default: false,
24
+ label: "Modal"
25
+ }
26
+ },
27
+ guideline: "Root of an anchored overlay for rich content (forms, product previews). Manages open state and focus trapping. Compose as: PopoverRoot > (PopoverTrigger + PopoverPortal > (PopoverBackdrop + PopoverPositioner > PopoverPopup > (PopoverArrow + PopoverTitle + PopoverDescription + content + PopoverClose))). Set modal=true when content requires focus trap."
28
+ });
29
+ const PopoverTriggerDefinition = defineComponent({
30
+ name: "PopoverTrigger",
31
+ importPath: "@vtex/faststore/components",
32
+ component: PopoverTrigger,
33
+ editor: {
34
+ label: "Popover Trigger",
35
+ category: "action"
36
+ },
37
+ schema: {
38
+ openOnHover: {
39
+ type: "boolean",
40
+ default: false,
41
+ label: "Open On Hover"
42
+ },
43
+ delay: {
44
+ type: "number",
45
+ default: 300,
46
+ label: "Delay"
47
+ },
48
+ closeDelay: {
49
+ type: "number",
50
+ default: 0,
51
+ label: "Close Delay"
52
+ }
53
+ },
54
+ guideline: "Set openOnHover=true for instant preview panels on product cards or image thumbnails."
55
+ });
56
+ const PopoverPortalDefinition = defineComponent({
57
+ name: "PopoverPortal",
58
+ importPath: "@vtex/faststore/components",
59
+ component: PopoverPortal,
60
+ editor: {
61
+ label: "Popover Portal",
62
+ category: "layout"
63
+ },
64
+ schema: {},
65
+ guideline: "Teleports popover content to <body> to avoid overflow/z-index issues."
66
+ });
67
+ const PopoverBackdropDefinition = defineComponent({
68
+ name: "PopoverBackdrop",
69
+ importPath: "@vtex/faststore/components",
70
+ component: PopoverBackdrop,
71
+ editor: {
72
+ label: "Popover Backdrop",
73
+ category: "layout"
74
+ },
75
+ schema: {},
76
+ guideline: "Semi-transparent overlay rendered behind the popup when modal=true."
77
+ });
78
+ const PopoverPositionerDefinition = defineComponent({
79
+ name: "PopoverPositioner",
80
+ importPath: "@vtex/faststore/components",
81
+ component: PopoverPositioner,
82
+ editor: {
83
+ label: "Popover Positioner",
84
+ category: "layout"
85
+ },
86
+ schema: {
87
+ side: {
88
+ type: [
89
+ "top",
90
+ "bottom",
91
+ "left",
92
+ "right"
93
+ ],
94
+ default: "bottom",
95
+ label: "Side"
96
+ },
97
+ align: {
98
+ type: [
99
+ "start",
100
+ "center",
101
+ "end"
102
+ ],
103
+ default: "center",
104
+ label: "Align"
105
+ },
106
+ sideOffset: {
107
+ type: "number",
108
+ default: 0,
109
+ label: "Side Offset"
110
+ }
111
+ },
112
+ guideline: "Controls popup placement relative to the trigger."
113
+ });
114
+ const PopoverPopupDefinition = defineComponent({
115
+ name: "PopoverPopup",
116
+ importPath: "@vtex/faststore/components",
117
+ component: PopoverPopup,
118
+ editor: {
119
+ label: "Popover Popup",
120
+ category: "layout"
121
+ },
122
+ schema: {},
123
+ guideline: "Main popover content container. Always include Popover.Title for screen reader accessibility."
124
+ });
125
+ const PopoverArrowDefinition = defineComponent({
126
+ name: "PopoverArrow",
127
+ importPath: "@vtex/faststore/components",
128
+ component: PopoverArrow,
129
+ editor: {
130
+ label: "Popover Arrow",
131
+ category: "layout"
132
+ },
133
+ schema: {},
134
+ guideline: "Pointing arrow attached to the popup. Optional — omit when not using an arrow indicator."
135
+ });
136
+ const PopoverViewportDefinition = defineComponent({
137
+ name: "PopoverViewport",
138
+ importPath: "@vtex/faststore/components",
139
+ component: PopoverViewport,
140
+ editor: {
141
+ label: "Popover Viewport",
142
+ category: "layout"
143
+ },
144
+ schema: {},
145
+ guideline: "Viewport wrapper inside Popover.Popup for constraining content display area."
146
+ });
147
+ const PopoverTitleDefinition = defineComponent({
148
+ name: "PopoverTitle",
149
+ importPath: "@vtex/faststore/components",
150
+ component: PopoverTitle,
151
+ editor: {
152
+ label: "Popover Title",
153
+ category: "layout"
154
+ },
155
+ schema: {},
156
+ guideline: "Accessible heading inside Popover.Popup. Sets the accessible name of the popover dialog."
157
+ });
158
+ const PopoverDescriptionDefinition = defineComponent({
159
+ name: "PopoverDescription",
160
+ importPath: "@vtex/faststore/components",
161
+ component: PopoverDescription,
162
+ editor: {
163
+ label: "Popover Description",
164
+ category: "layout"
165
+ },
166
+ schema: {},
167
+ guideline: "Accessible description of the popover content. Announced by screen readers."
168
+ });
169
+ const PopoverCloseDefinition = defineComponent({
170
+ name: "PopoverClose",
171
+ importPath: "@vtex/faststore/components",
172
+ component: PopoverClose,
173
+ editor: {
174
+ label: "Popover Close",
175
+ category: "action"
176
+ },
177
+ schema: {},
178
+ guideline: "Button that closes the popover. Place inside Popover.Popup."
179
+ });
180
+ function PopoverRoot({ defaultOpen = false, modal = false, children }) {
181
+ return /* @__PURE__ */ jsx(Popover.Root, {
182
+ defaultOpen,
183
+ modal,
184
+ children
185
+ });
186
+ }
187
+ function PopoverTrigger({ openOnHover = false, delay = 300, closeDelay, className, children, ...props }) {
188
+ return /* @__PURE__ */ jsx(Popover.Trigger, {
189
+ ...props,
190
+ openOnHover,
191
+ delay,
192
+ closeDelay,
193
+ className,
194
+ "data-fs-popover-trigger": "",
195
+ children
196
+ });
197
+ }
198
+ function PopoverPortal({ children }) {
199
+ return /* @__PURE__ */ jsx(Popover.Portal, { children });
200
+ }
201
+ function PopoverBackdrop({ className, children, ...props }) {
202
+ return /* @__PURE__ */ jsx(Popover.Backdrop, {
203
+ ...props,
204
+ className,
205
+ "data-fs-popover-backdrop": "",
206
+ children
207
+ });
208
+ }
209
+ function PopoverPositioner({ side = "bottom", align = "center", sideOffset = 0, className, children, ...props }) {
210
+ return /* @__PURE__ */ jsx(Popover.Positioner, {
211
+ ...props,
212
+ side,
213
+ align,
214
+ sideOffset,
215
+ className,
216
+ "data-fs-popover-positioner": "",
217
+ children
218
+ });
219
+ }
220
+ function PopoverPopup({ className, children, ...props }) {
221
+ return /* @__PURE__ */ jsx(Popover.Popup, {
222
+ ...props,
223
+ className,
224
+ "data-fs-popover-popup": "",
225
+ children
226
+ });
227
+ }
228
+ function PopoverArrow({ className, children, ...props }) {
229
+ return /* @__PURE__ */ jsx(Popover.Arrow, {
230
+ ...props,
231
+ className,
232
+ "data-fs-popover-arrow": "",
233
+ children
234
+ });
235
+ }
236
+ function PopoverViewport({ className, children, ...props }) {
237
+ return /* @__PURE__ */ jsx(Popover.Viewport, {
238
+ ...props,
239
+ className,
240
+ "data-fs-popover-viewport": "",
241
+ children
242
+ });
243
+ }
244
+ function PopoverTitle({ className, children, ...props }) {
245
+ return /* @__PURE__ */ jsx(Popover.Title, {
246
+ ...props,
247
+ className,
248
+ "data-fs-popover-title": "",
249
+ children
250
+ });
251
+ }
252
+ function PopoverDescription({ className, children, ...props }) {
253
+ return /* @__PURE__ */ jsx(Popover.Description, {
254
+ ...props,
255
+ className,
256
+ "data-fs-popover-description": "",
257
+ children
258
+ });
259
+ }
260
+ function PopoverClose({ className, children, ...props }) {
261
+ return /* @__PURE__ */ jsx(Popover.Close, {
262
+ ...props,
263
+ className,
264
+ "data-fs-popover-close": "",
265
+ children
266
+ });
267
+ }
268
+ const Popover$1 = {
269
+ Root: PopoverRoot,
270
+ Trigger: PopoverTrigger,
271
+ Portal: PopoverPortal,
272
+ Backdrop: PopoverBackdrop,
273
+ Positioner: PopoverPositioner,
274
+ Popup: PopoverPopup,
275
+ Arrow: PopoverArrow,
276
+ Viewport: PopoverViewport,
277
+ Title: PopoverTitle,
278
+ Description: PopoverDescription,
279
+ Close: PopoverClose
280
+ };
281
+ //#endregion
282
+ export { Popover$1 as Popover, PopoverArrow, PopoverArrowDefinition, PopoverBackdrop, PopoverBackdropDefinition, PopoverClose, PopoverCloseDefinition, PopoverDescription, PopoverDescriptionDefinition, PopoverPopup, PopoverPopupDefinition, PopoverPortal, PopoverPortalDefinition, PopoverPositioner, PopoverPositionerDefinition, PopoverRoot, PopoverRootDefinition, PopoverTitle, PopoverTitleDefinition, PopoverTrigger, PopoverTriggerDefinition, PopoverViewport, PopoverViewportDefinition };
283
+
284
+ //# sourceMappingURL=popover.js.map