@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,97 @@
1
+ # DocumentField
2
+
3
+ **Category:** content
4
+ **Purpose:** A presentational tax-document input that composes the `Field` particle (label + native `<input>` + inline error). It applies a locale-specific mask on every change (e.g. CPF `###.###.###-##`) and runs check-digit validation on blur/submit. It is data-agnostic — value flows through props; it consumes no GraphQL and no domain context.
5
+
6
+ ---
7
+
8
+ ## Visual cues (how to identify in an image)
9
+
10
+ - A single-line text input labelled **"CPF"** (or another tax-document name), usually on a checkout identification step, near the email/phone fields.
11
+ - Shows a masked placeholder like `000.000.000-00` and formats digits as they are typed.
12
+ - When invalid, an inline error below the input (e.g. *"Enter a valid CPF."*).
13
+
14
+ If the image shows a checkout identification step with a tax-document field, use `DocumentField`.
15
+
16
+ ---
17
+
18
+ ## When to use
19
+
20
+ - A standalone, presentational tax-document input where the host owns the value and the persistence.
21
+ - As the document field inside a profile/identification form that batches the write (the host wires value + persistence).
22
+
23
+ ## When NOT to use
24
+
25
+ - For a generic non-document text field → use the `Field` particle directly.
26
+
27
+ ---
28
+
29
+ ## Composition
30
+
31
+ `DocumentField` is a single leaf particle. Internally it renders:
32
+
33
+ ```
34
+ DocumentField (data-fs-document-field + inherited data-fs-field-root)
35
+ ├── Field.Label (data-fs-field-label; the `label` prop)
36
+ ├── Field.Control (data-fs-field-control; native <input inputmode="numeric">)
37
+ └── Field.Error (data-fs-field-error; the `errorMessage`, shown when invalid)
38
+ ```
39
+
40
+ ---
41
+
42
+ ## Props
43
+
44
+ | Prop | Type | Default | Notes |
45
+ |------|------|---------|-------|
46
+ | `value` | string | — | Controlled value. Omit for uncontrolled use. Displayed masked. |
47
+ | `defaultValue` | string | `''` | Uncontrolled initial value (pre-fill); masked on display. |
48
+ | `onValueChange` | `(value: string) => void` | — | Fires on every change with the **masked** value (no validation on change). |
49
+ | `onBlur` | `(event) => void` | — | Fires on blur, after check-digit validation runs. |
50
+ | `invalid` | boolean | `false` | Host-forced invalid state (e.g. a server error). Combined with the internal check-digit state. |
51
+ | `errorMessage` | string | — | Inline error text, shown when the field is invalid. |
52
+ | `label` | string | — | Accessible label. |
53
+ | `placeholder` | string | — | Input placeholder. |
54
+ | `disabled` | boolean | `false` | Disables the input (e.g. while a write is in flight). |
55
+ | `required` | boolean | `false` | CPF is Optional by Recommendation — default false (unlike email). |
56
+ | `name` | string | `'document'` | Field/input name. |
57
+ | `documentType` | `'CPF'` | `'CPF'` | Selects the mask + validator + digit-only input mode. |
58
+
59
+ **Masking:** applied progressively on every change; input is never blocked. Digit-only masks (CPF) strip non-digits and hint `inputMode="numeric"`.
60
+
61
+ **Validation:** the check digit is checked on blur/submit only — never per keystroke. An **empty** value is valid (the field is optional). A prior error clears while the shopper edits and is re-evaluated on the next blur.
62
+
63
+ ---
64
+
65
+ ## Accessibility
66
+
67
+ The label is associated with the input and the error is linked via `aria-describedby` automatically by the Base UI `Field` primitive (WCAG 2.1 AA). Standard text-input keyboard editing; masking/validation never blocks typing.
68
+
69
+ ---
70
+
71
+ ## Styling
72
+
73
+ `DocumentField` owns no CSS. Style it via compound swatches / Tailwind targeting the `data-fs-*` attributes:
74
+
75
+ | Target | What you style |
76
+ |---|---|
77
+ | `data-fs-document-field` | The field container (stack the label, input, error). |
78
+ | `data-fs-field-label` | The label typography. |
79
+ | `data-fs-field-control` | The input box; use `data-invalid:` for the error border. |
80
+ | `data-fs-field-error` | The inline error text (small, red). |
81
+
82
+ ---
83
+
84
+ ## Common mistakes
85
+
86
+ - **Validating on every keystroke.** Check-digit validation runs on blur/submit only.
87
+ - **Blocking input during masking.** The mask is applied progressively and never rejects a keystroke.
88
+ - **Treating an empty value as invalid.** The document is optional — blank is valid.
89
+ - **Wiring GraphQL into this particle.** It is data-agnostic; the host form owns the profile read/write.
90
+ - **Localizing via a message id.** There is no `react-intl`; pass `label` / `placeholder` / `errorMessage` as strings.
91
+
92
+ ---
93
+
94
+ ## Related
95
+
96
+ - [[email-field]] — the sibling identity field this mirrors in structure.
97
+ - [[field]] — the underlying form-field particle this composes.
@@ -0,0 +1,93 @@
1
+ # EmailField
2
+
3
+ **Category:** content
4
+ **Purpose:** A presentational email input that composes the `Field` particle (label + native `<input type="email">` + inline error) and validates the email **format** on blur/submit. It is data-agnostic — value flows through props; it consumes no GraphQL and no domain context.
5
+
6
+ ---
7
+
8
+ ## Visual cues (how to identify in an image)
9
+
10
+ - A single-line text input labelled **"Email"**, **"E-mail"**, or **"Email address"**, usually the **first field** of a checkout identification / sign-in step.
11
+ - Often shows a placeholder like `you@example.com`.
12
+ - When invalid, an inline error message below the input (e.g. *"Enter a valid email address."*).
13
+
14
+ If the image shows a checkout identification step whose first field is an email, use `EmailField` — or, for a checkout-bound field wired to the shopper profile, wrap it in `EmailIdentificationControl`.
15
+
16
+ ---
17
+
18
+ ## When to use
19
+
20
+ - A standalone, presentational email input where the host owns the value and the persistence.
21
+ - As the field rendered by `EmailIdentificationControl` (the checkout-bound wrapper).
22
+
23
+ ## When NOT to use
24
+
25
+ - When the field must read/write the shopper profile → use `EmailIdentificationControl`, which wraps this particle.
26
+ - For a generic non-email text field → use the `Field` particle directly.
27
+
28
+ ---
29
+
30
+ ## Composition
31
+
32
+ `EmailField` is a single leaf particle. Internally it renders:
33
+
34
+ ```
35
+ EmailField (data-fs-email-field + inherited data-fs-field-root)
36
+ ├── Field.Label (data-fs-field-label; the `label` prop)
37
+ ├── Field.Control (data-fs-field-control; native <input type="email">)
38
+ └── Field.Error (data-fs-field-error; the `errorMessage`, shown when invalid)
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Props
44
+
45
+ | Prop | Type | Default | Notes |
46
+ |------|------|---------|-------|
47
+ | `value` | string | — | Controlled value. Omit for uncontrolled use. |
48
+ | `defaultValue` | string | `''` | Uncontrolled initial value (pre-fill). |
49
+ | `onValueChange` | `(value: string) => void` | — | Fires on every input change (no validation on change). |
50
+ | `onBlur` | `(event) => void` | — | Fires on blur, after format validation runs. |
51
+ | `invalid` | boolean | `false` | Host-forced invalid state (e.g. a server error). Combined with the internal format-invalid state. |
52
+ | `errorMessage` | string | — | Inline error text, shown when the field is invalid. |
53
+ | `label` | string | — | Accessible label. |
54
+ | `placeholder` | string | — | Input placeholder. |
55
+ | `disabled` | boolean | `false` | Disables the input (e.g. while a write is in flight). |
56
+ | `required` | boolean | `true` | Email is Always Mandatory at the identity step. |
57
+ | `name` | string | `'email'` | Field/input name. |
58
+
59
+ **Validation:** format is checked on blur/submit only — never per keystroke. A prior format error clears while the shopper edits and is re-evaluated on the next blur.
60
+
61
+ ---
62
+
63
+ ## Accessibility
64
+
65
+ The label is associated with the input and the error is linked via `aria-describedby` automatically by the Base UI `Field` primitive (WCAG 2.1 AA). Standard text-input keyboard editing; validation never blocks typing.
66
+
67
+ ---
68
+
69
+ ## Styling
70
+
71
+ `EmailField` owns no CSS. Style it via compound swatches / Tailwind targeting the `data-fs-*` attributes:
72
+
73
+ | Target | What you style |
74
+ |---|---|
75
+ | `data-fs-email-field` | The field container (stack the label, input, error). |
76
+ | `data-fs-field-label` | The label typography. |
77
+ | `data-fs-field-control` | The input box; use `data-invalid:` for the error border. |
78
+ | `data-fs-field-error` | The inline error text (small, red). |
79
+
80
+ ---
81
+
82
+ ## Common mistakes
83
+
84
+ - **Validating on every keystroke.** Format validation runs on blur/submit only.
85
+ - **Wiring GraphQL into this particle.** It is data-agnostic; use `EmailIdentificationControl` for the checkout-bound binding.
86
+ - **Localizing via a message id.** There is no `react-intl`; pass `label` / `placeholder` / `errorMessage` as strings.
87
+
88
+ ---
89
+
90
+ ## Related
91
+
92
+ - [[email-identification]] — the checkout-bound matter that binds this particle to the shopper `ClientProfile` and persists the email.
93
+ - [[field]] — the underlying form-field particle this composes.
@@ -0,0 +1,102 @@
1
+ # EmailIdentificationControl
2
+
3
+ **Category:** identity
4
+ **Purpose:** Binds an `EmailField` to the shopper `ClientProfile`. It pre-fills from `clientProfile.email`, and on a **valid, changed** email persists only the `email` via `$actions.identity.clientProfileUpdate`, moving the session `anonymous → identified`. It reads identification state from `useSession()` and must sit inside a `SessionRoot`.
5
+
6
+ ---
7
+
8
+ ## Visual cues (how to identify in an image)
9
+
10
+ - The **email field of a checkout User Identity / sign-in step** — the first identification input.
11
+ - Same surface as `EmailField`, but in a real checkout page (not a standalone form): the value is pre-filled for a returning/identified shopper and editing it re-identifies the session.
12
+
13
+ Use `EmailIdentificationControl` (not bare `EmailField`) whenever the email must read from and write to the shopper profile.
14
+
15
+ ---
16
+
17
+ ## When to use
18
+
19
+ - The email step of the checkout User Identity flow.
20
+ - Anywhere the shopper's profile email must be read (pre-fill) and written (identification).
21
+
22
+ ## When NOT to use
23
+
24
+ - A purely presentational email input with host-owned state → use `EmailField`.
25
+ - Name / phone / document / opt-in fields → out of scope (F5–F8, separate components).
26
+ - Existing-account detection or login-vs-guest routing → decided downstream from the session state (`Signin`, FSPG-865), never here.
27
+
28
+ ---
29
+
30
+ ## Composition
31
+
32
+ ```
33
+ SessionRoot (provides the session tri-state; required ancestor)
34
+ └── EmailIdentificationControl (data-fs-email-identification-control)
35
+ └── EmailField (the presentational field; value/disabled/invalid bound)
36
+ ```
37
+
38
+ `EmailIdentificationControl` **must** have a `SessionRoot` ancestor — `useSession()` throws otherwise.
39
+
40
+ ---
41
+
42
+ ## Props
43
+
44
+ | Prop | Type | Default | Notes |
45
+ |------|------|---------|-------|
46
+ | `label` | string | — | Passed to `EmailField`. |
47
+ | `placeholder` | string | — | Passed to `EmailField`. |
48
+ | `invalidEmailMessage` | string | — | Inline error text for an invalid email format. |
49
+ | `$data` | `{ email?: string \| null } \| null` | injected | `clientProfile` slice from the reactive runtime. Not authored in schema. |
50
+ | `$actions` | injected | — | Carries `identity.clientProfileUpdate` (compiler-injected). |
51
+
52
+ **Data:** declares a colocated `fragment EmailIdentificationData on Query { clientProfile { email } }` with `fetchStrategy: 'reactive'`. The compiler merges it into the page query — no explicit `dataSources` entry needed.
53
+
54
+ **Write:** declares `actions: { identity: ['clientProfileUpdate'] }`. The write is **pessimistic/async** — it awaits the persisted result. While in flight the field is disabled and the root carries `data-fs-email-identification-pending`, so a `CartCheckoutGuard`-style guard can block the checkout CTA.
55
+
56
+ ---
57
+
58
+ ## Behavior
59
+
60
+ - **Pre-fill:** the field shows `clientProfile.email` and remains editable.
61
+ - **Valid + changed email → persist:** dispatches `$actions.identity.clientProfileUpdate({ email })`; the server-derived `isIdentified` flips true (`anonymous → identified`).
62
+ - **Unchanged email:** no write.
63
+ - **Invalid format:** the field shows its inline error; no write, no step advance.
64
+ - **Cleared field:** blurring an emptied field re-fills the saved email; no write. Clearing must not visually "un-identify" — changing email (= switching user) is a deliberate act done by typing a new one.
65
+ - **`canEditData: false`:** the field renders **disabled** and the root carries `data-fs-email-identification-readonly`. VTEX refuses profile edits for an identified-but-unauthenticated claimed profile, so the control never offers a write that is doomed server-side.
66
+ - **Server `userErrors`:** surfaced inline; the session is left unchanged.
67
+
68
+ ---
69
+
70
+ ## Canonical schema example
71
+
72
+ ```json
73
+ {
74
+ "type": "SessionRoot",
75
+ "children": [
76
+ {
77
+ "type": "EmailIdentificationControl",
78
+ "props": {
79
+ "label": "Email",
80
+ "placeholder": "you@example.com",
81
+ "invalidEmailMessage": "Enter a valid email address."
82
+ }
83
+ }
84
+ ]
85
+ }
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Common mistakes
91
+
92
+ - **Rendering it outside `SessionRoot`.** `useSession()` throws; every identity page must host a `SessionRoot`.
93
+ - **Computing identification locally.** Read it from `useSession()`; the server derives `isIdentified` from a non-empty profile email.
94
+ - **Writing more than `email`.** This control persists only the email; other profile fields are out of scope.
95
+ - **Doing an email-existence pre-check.** No lookup at entry — routing is decided downstream from the session state.
96
+
97
+ ---
98
+
99
+ ## Related
100
+
101
+ - [[email-field]] — the presentational particle this wraps.
102
+ - [[session]] — provides the identification tri-state and the required `SessionRoot` ancestor.
@@ -0,0 +1,112 @@
1
+ # FooterCopyright
2
+
3
+ **Category:** content
4
+ **Purpose:** The store's legal notice at the bottom of the footer — a single line of plain text, editable in the CMS. The copy arrives through the compiler-injected `$content` prop, backed by the `footer-copyright` content model declared next to the component; the `text` prop is the authored fallback for stores with no CMS binding.
5
+
6
+ ---
7
+
8
+ ## Visual cues (how to identify in an image)
9
+
10
+ The image is the source of truth for layout. A FooterCopyright line is present when you see:
11
+
12
+ - A **single line of fine print at the very bottom** of the page, usually centered or left-aligned in the last footer band.
13
+ - Copy that names **ownership or rights** — a `©` symbol, a year, a company or store name, *"Todos os direitos reservados"*, *"All rights reserved"*, a CNPJ or registration number.
14
+ - Smaller, lighter type than the surrounding footer content, and **no link, icon, or heading** of its own.
15
+
16
+ ---
17
+
18
+ ## When to use
19
+
20
+ - The legal or copyright line at the bottom of a footer layout.
21
+ - Any single-line legal notice a content editor owns rather than the page schema.
22
+
23
+ ## When NOT to use
24
+
25
+ - A static heading or paragraph authored in the schema → use `Text`.
26
+ - Institutional links (*Sobre nós*, *Política de privacidade*) that happen to sit on the same line → use `NavigationLink`, one per link.
27
+ - Multi-paragraph terms, or a notice that needs bold, links, or line breaks. `FooterCopyright` renders plain text only; markup in the value appears as literal characters.
28
+
29
+ ---
30
+
31
+ ## Composition
32
+
33
+ `FooterCopyright` is a standalone leaf — no sub-components, no children.
34
+
35
+ ```
36
+ FooterRoot
37
+ └─ FooterCopyright
38
+ ```
39
+
40
+ It renders one `<p data-fs-text data-fs-footer-copyright>` holding the notice. It expects to sit inside `FooterRoot`, but imposes no parent: it renders anywhere it is placed.
41
+
42
+ **Content, then prop.** The notice resolves from the CMS entry first and the `text` prop second, so a store with no CMS binding still renders its authored value and a CMS save overrides it with no deployment. When neither supplies a non-blank notice the component renders `null` (self-hide) — the page omits only this line. Non-compiler hosts (Storybook, tests) pass a typed `$content` fixture directly.
43
+
44
+ ---
45
+
46
+ ## Components
47
+
48
+ ### FooterCopyright
49
+
50
+ | Prop | Type | Required | Notes |
51
+ |-------|------|----------|-------|
52
+ | `text` | string | no | Authored fallback. Ignored when a CMS entry supplies the notice |
53
+
54
+ Content model (`footer-copyright`) fields, edited in the CMS:
55
+
56
+ | Field | Type | Required | Notes |
57
+ |-------|------|----------|-------|
58
+ | `text` | string | yes | The notice, rendered verbatim |
59
+
60
+ ---
61
+
62
+ ## Canonical schema example
63
+
64
+ ```json
65
+ {
66
+ "footer-copyright": {
67
+ "type": "FooterCopyright",
68
+ "style": ["text-[12px]", "text-[#666666]"]
69
+ }
70
+ }
71
+ ```
72
+
73
+ The element id is the content key, so name it for the section rather than its styling. Renaming it orphans the merchant's entry: the copy stays in the Content Platform while the component reads a key nobody writes.
74
+
75
+ ---
76
+
77
+ ## Common mistakes
78
+
79
+ - **Authoring the notice only as a prop when a CMS is bound.** The prop is the fallback; content editors expect the entry to win.
80
+ - **Putting markup in the notice.** `<b>`, `<a>`, and `<br>` render as literal characters — the notice is plain text by contract.
81
+ - **Expecting the year to update itself.** The notice is a merchant-authored string, not a template; nothing interpolates into it.
82
+ - **Expecting an empty placeholder without content.** A missing, malformed, or blank notice renders nothing at all.
83
+ - **Giving `FooterCopyright` children.** It is a leaf; it renders its own text node.
84
+
85
+ ---
86
+
87
+ ## Styling
88
+
89
+ `FooterCopyright` renders one DOM node you style directly. It also carries `data-fs-text`, so project-level `Text` typography cascades to it — set only what should differ from body copy, typically a smaller size and a muted color.
90
+
91
+ | Component | What you style | Plausible classes |
92
+ |---|---|---|
93
+ | `FooterCopyright` | The legal notice line | `text-[12px] leading-[1.5] text-[#666666] text-center py-[16px]` |
94
+
95
+ Styled example:
96
+
97
+ ```json
98
+ {
99
+ "footer-copyright": {
100
+ "type": "FooterCopyright",
101
+ "style": ["text-[12px]", "leading-[1.5]", "text-[#666666]", "text-center", "py-[16px]"]
102
+ }
103
+ }
104
+ ```
105
+
106
+ ---
107
+
108
+ ## Related
109
+
110
+ - [[footer-root]] — the `<footer>` landmark this line sits inside.
111
+ - [[promotion]] — the other CMS content-driven particle; same `$content` mechanics, editorial copy instead of a legal notice.
112
+ - `Text` — plain schema-authored typography, the identity this line layers so project typography cascades. It carries no `.md` of its own; read its schema from `catalog.json`.
@@ -0,0 +1,162 @@
1
+ # FooterLinkGroup
2
+
3
+ **Category:** navigation
4
+ **Purpose:** One group of institutional links in the footer — a heading and its ordered list of links, both editable in the CMS. The content arrives through the compiler-injected `$content` prop, backed by the `footer-link-group` content model declared next to the component; the `heading` and `links` props are the authored fallback for stores with no CMS binding. One element renders one group, so a footer with three groups places three elements.
5
+
6
+ ---
7
+
8
+ ## Visual cues (how to identify in an image)
9
+
10
+ The image is the source of truth for layout. A FooterLinkGroup is present when you see:
11
+
12
+ - A **short bold or uppercase heading** — *Ajuda*, *Institucional*, *Minha conta*, *Help*, *Company*, *Legal* — with a **vertical list of text links** under it.
13
+ - Usually **two to five such headed lists side by side** in a footer band. Each one is its own element, not one component holding all of them.
14
+ - On a narrow screen, the same headings as **collapsed rows with a chevron or plus sign**, one link list hidden behind each.
15
+ - Links that are **plain text, no icons** — that distinguishes it from a payment-method or social-icon row.
16
+
17
+ ---
18
+
19
+ ## When to use
20
+
21
+ - Any headed list of institutional or editorial links in a footer: help, company, legal, account.
22
+ - One instance per group. Three headings in the image means three `FooterLinkGroup` elements.
23
+
24
+ ## When NOT to use
25
+
26
+ - A **single** link that belongs to no group → use `NavigationLink`.
27
+ - A row of **social network icons** → use [[footer-social]]; those links carry glyphs and a different content model.
28
+ - A row of **payment-method icons** → use `PaymentMethods`; those are brand flags, not links.
29
+ - The **legal line** at the very bottom (`© 2026 …`) → use `FooterCopyright`.
30
+ - Main-navigation menus in the header → use `NavigationMenu`, which is a hover/focus menu rather than a static list.
31
+
32
+ ---
33
+
34
+ ## Composition
35
+
36
+ `FooterLinkGroup` is a leaf in the schema — it has no sub-components and takes no children. The links come from content, not from child elements.
37
+
38
+ ```
39
+ FooterRoot
40
+ ├─ FooterLinkGroup ← "Ajuda" (siblings, one per group; order is visual order)
41
+ ├─ FooterLinkGroup ← "Institucional"
42
+ ├─ FooterLinkGroup ← "Minha conta"
43
+ └─ FooterCopyright
44
+ ```
45
+
46
+ It renders **both responsive forms at once**, each under its own hook: an accordion (`AccordionRoot` → `AccordionItem` → `AccordionHeader` → `AccordionTrigger` + `AccordionPanel`) and a column (`<h3>` + `<ul>`). Which one a viewport shows is the store's styling decision, never a prop — see [Styling](#styling). Every link therefore appears twice in the DOM; the collapsed copy stays findable by browser find-in-page.
47
+
48
+ **Content, then prop, per field.** The heading resolves from the CMS entry first and the `heading` prop second; the list resolves the same way, independently. An entry supplying an empty list wins over an authored list — a merchant who cleared the links cleared them. When no non-blank heading or no renderable link survives, the component renders `null` (self-hide) and the footer omits just this group. Non-compiler hosts (Storybook, tests) pass a typed `$content` fixture directly.
49
+
50
+ **A malformed link still costs the whole group.** Each link's `label` and `href` are required, so the content runtime omits this component — before any prop is consulted — when the entry holds a link missing either field. One malformed link takes the group with it, which is worth knowing when a group disappears right after a CMS save. Neither top-level field is required, exactly so a half-filled entry survives in either direction: a heading with no links yet renders the authored list under the merchant's heading, and links with no heading yet render under the authored one.
51
+
52
+ ---
53
+
54
+ ## Components
55
+
56
+ ### FooterLinkGroup
57
+
58
+ | Prop | Type | Required | Notes |
59
+ |-------|------|----------|-------|
60
+ | `heading` | string | no | Authored fallback. Ignored when a CMS entry supplies a heading |
61
+ | `links` | array | no | Authored fallback list of `{ label, href, target? }`. Ignored when a CMS entry supplies `links` |
62
+
63
+ Content model (`footer-link-group`) fields, edited in the CMS:
64
+
65
+ | Field | Type | Required | Notes |
66
+ |-------|------|----------|-------|
67
+ | `heading` | string | no | The group heading and the accordion trigger's accessible name. Optional so a links-only entry falls back to the authored heading instead of omitting the group. A group with no heading resolved from either channel renders nothing |
68
+ | `links` | array | no | Ordered links. Reordering here reorders the rendered list with no deployment. Optional so a heading-only entry falls back to the authored list instead of omitting the group |
69
+ | `links[].label` | string | yes | Link text. A blank label drops that link — an anchor with no name is unusable |
70
+ | `links[].href` | string | yes | Destination. `http:`, `https:`, `mailto:`, `tel:`, or a path starting with a single `/` |
71
+ | `links[].target` | `_self` \| `_blank` | no | `_blank` opens a new tab and adds `rel="noopener noreferrer"` automatically |
72
+
73
+ ---
74
+
75
+ ## Canonical schema example
76
+
77
+ ```json
78
+ {
79
+ "footer-links-help": {
80
+ "type": "FooterLinkGroup",
81
+ "style": ["flex", "flex-col", "gap-[12px]"]
82
+ },
83
+ "footer-links-institutional": {
84
+ "type": "FooterLinkGroup",
85
+ "style": ["flex", "flex-col", "gap-[12px]"]
86
+ }
87
+ }
88
+ ```
89
+
90
+ The element id is the content key, so name it for the section rather than its styling. Renaming it orphans the merchant's entry: the links stay in the Content Platform while the component reads a key nobody writes.
91
+
92
+ ---
93
+
94
+ ## Common mistakes
95
+
96
+ - **One `FooterLinkGroup` for the whole footer.** One element renders one group. Three headings means three elements, each with its own content key.
97
+ - **`FooterLinks`, `FooterLinkList`, `FooterNav`.** The correct name is `FooterLinkGroup`.
98
+ - **Giving it children, or one child element per link.** It is a leaf; the links are content, which is what makes adding one a CMS save instead of a deployment.
99
+ - **Looking for a `variant` or `isMobile` prop to pick the accordion.** There is none. Both forms always render and the swatch pair below decides.
100
+ - **Shipping without that swatch pair.** Every link then appears twice on screen and twice to a screen reader.
101
+ - **Expecting a bare `#anchor`, a query-only `?q=1`, or a relative `faq` to link.** Only the four schemes and single-slash paths above become anchors; anything else keeps its label and renders as plain text.
102
+ - **Passing `rel` yourself for a new-tab link.** `target: "_blank"` already adds `rel="noopener noreferrer"`.
103
+
104
+ ---
105
+
106
+ ## Styling
107
+
108
+ `FooterLinkGroup` renders one root you style directly, plus per-part hooks for the two forms. The heading hook is on both `<h3>`s, so typography is authored once for either form.
109
+
110
+ **The breakpoint switch is required, not optional.** Both forms are in the DOM, so the hidden one has to be hidden with `display:none` to leave the accessibility tree:
111
+
112
+ | Hook | Class | Effect |
113
+ |---|---|---|
114
+ | `data-fs-footer-link-group-accordion` | `md:hidden` | The collapsible form, mobile only |
115
+ | `data-fs-footer-link-group-column` | `max-md:hidden` | The column form, desktop only |
116
+
117
+ Without that pair both forms are visible at once and every link is announced twice.
118
+
119
+ | Component | What you style | Plausible classes |
120
+ |---|---|---|
121
+ | `FooterLinkGroup` | Stacks the group's forms | `flex flex-col gap-[12px]` |
122
+ | `data-fs-footer-link-group-heading` | Both headings | `text-[14px] font-bold uppercase text-[#1a1a1a]` |
123
+ | `data-fs-footer-link-group-trigger` | The mobile toggle row | `flex w-full items-center justify-between py-[12px]` |
124
+ | `data-fs-footer-link-group-panel` | The region the accordion collapses | `pb-[12px]`, scoped to `[data-open]` |
125
+ | `data-fs-footer-link-group-list` | The link stack in either form | `flex flex-col gap-[8px]` |
126
+ | `data-fs-footer-link-group-item` | The row one link occupies | `py-[2px]` |
127
+ | `data-fs-footer-link-group-link` | A link | `text-[14px] text-[#666666] hover:underline` |
128
+ | `data-fs-footer-link-group-text` | A refused destination, rendered as text | `text-[14px] text-[#999999]` |
129
+
130
+ **The collapsed panel keeps its padding.** Collapsing takes the panel's content out of layout, not its box, so `pb-[12px]` on the bare hook is dead space under every closed row. Scope it to the open state, which Base UI marks with `data-open` on the panel:
131
+
132
+ ```json
133
+ "[&_[data-fs-footer-link-group-panel][data-open]]:pb-[12px]"
134
+ ```
135
+
136
+ **No indicator glyph is rendered.** The trigger holds the heading and nothing else, so the chevron or plus sign in the reference image is the store's to supply — which is also what `justify-between` above separates the heading from. Base UI marks the expanded trigger with `data-panel-open`, so one pseudo-element covers both states:
137
+
138
+ ```json
139
+ "[&_[data-fs-footer-link-group-trigger]]:after:content-['+']",
140
+ "[&_[data-fs-footer-link-group-trigger][data-panel-open]]:after:content-['-']"
141
+ ```
142
+
143
+ Styled example:
144
+
145
+ ```json
146
+ {
147
+ "footer-links-help": {
148
+ "type": "FooterLinkGroup",
149
+ "style": ["flex", "flex-col", "gap-[12px]"]
150
+ }
151
+ }
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Related
157
+
158
+ - [[footer-root]] — the `<footer>` landmark these groups sit inside.
159
+ - [[footer-copyright]] — the legal line below them; same `$content` mechanics, plain text and no links.
160
+ - [[footer-social]] — the profile-icon row; same `$content` mechanics and the same link check, one glyph per link instead of a text label.
161
+ - `Accordion` — the primitive this composes for the collapsible form; use it directly for a general-purpose disclosure. It carries no `.md` of its own; read its schema from `catalog.json`.
162
+ - `NavigationLink` — one link on its own, and the particle each link here renders. It carries no `.md` of its own; read its schema from `catalog.json`.