@vtex/faststore 0.0.4 → 0.0.6

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 (306) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/actions.json +181 -0
  3. package/dist/catalog.json +1595 -481
  4. package/dist/client.d.ts +2 -1
  5. package/dist/client.js +2 -1
  6. package/dist/components.d.ts +31 -7
  7. package/dist/components.js +35 -13
  8. package/dist/content-types.json +73 -0
  9. package/dist/docs/access-code-sign-in.md +1 -1
  10. package/dist/docs/account-access-gate.md +153 -0
  11. package/dist/docs/account-entry-point.md +1 -2
  12. package/dist/docs/account-menu.md +164 -0
  13. package/dist/docs/address-summary.md +24 -3
  14. package/dist/docs/alert-dialog.md +204 -0
  15. package/dist/docs/billing-address.md +284 -0
  16. package/dist/docs/buy-button.md +1 -1
  17. package/dist/docs/card-entry.md +250 -0
  18. package/dist/docs/cardholder-document.md +142 -0
  19. package/dist/docs/cart.md +1 -1
  20. package/dist/docs/client-preferences-fieldset.md +148 -0
  21. package/dist/docs/client-preferences.md +2 -1
  22. package/dist/docs/client-profile-fieldset.md +184 -0
  23. package/dist/docs/client-profile.md +1 -1
  24. package/dist/docs/document-field.md +58 -4
  25. package/dist/docs/field.md +317 -0
  26. package/dist/docs/form.md +307 -0
  27. package/dist/docs/identity-edit.md +6 -6
  28. package/dist/docs/identity-summary.md +5 -5
  29. package/dist/docs/installments.md +248 -0
  30. package/dist/docs/my-account-profile.md +1 -0
  31. package/dist/docs/order-placed-payment-summary.md +138 -0
  32. package/dist/docs/payment-method-badges.md +232 -0
  33. package/dist/docs/payment-methods.md +1 -0
  34. package/dist/docs/payment.md +218 -0
  35. package/dist/docs/phone-field.md +58 -4
  36. package/dist/docs/place-order.md +157 -0
  37. package/dist/docs/save-card.md +186 -0
  38. package/dist/docs/saved-cards.md +218 -0
  39. package/dist/docs/select.md +465 -0
  40. package/dist/docs/session.md +1 -1
  41. package/dist/docs/shipping-address.md +110 -258
  42. package/dist/docs/sign-in-redirect.md +1 -1
  43. package/dist/index.d.ts +4 -1
  44. package/dist/internal/client.d.ts +3 -1
  45. package/dist/internal/client.js +3 -1
  46. package/dist/matter/access-code-sign-in/access-code-sign-in.js +9 -8
  47. package/dist/matter/access-code-sign-in/access-code-sign-in.js.map +1 -1
  48. package/dist/matter/account-access-gate/account-access-gate.d.ts +86 -0
  49. package/dist/matter/account-access-gate/account-access-gate.js +283 -0
  50. package/dist/matter/account-access-gate/account-access-gate.js.map +1 -0
  51. package/dist/matter/account-access-gate/sign-out-intent.d.ts +17 -0
  52. package/dist/matter/account-access-gate/sign-out-intent.js +62 -0
  53. package/dist/matter/account-access-gate/sign-out-intent.js.map +1 -0
  54. package/dist/matter/account-entry-point/account-entry-point.js +2 -2
  55. package/dist/matter/account-entry-point/account-entry-point.js.map +1 -1
  56. package/dist/matter/account-menu/account-menu.d.ts +88 -0
  57. package/dist/matter/account-menu/account-menu.js +246 -0
  58. package/dist/matter/account-menu/account-menu.js.map +1 -0
  59. package/dist/matter/billing-address/billing-address.d.ts +165 -0
  60. package/dist/matter/billing-address/billing-address.js +408 -0
  61. package/dist/matter/billing-address/billing-address.js.map +1 -0
  62. package/dist/matter/card-entry/card-capture.d.ts +25 -0
  63. package/dist/matter/card-entry/card-capture.js +25 -0
  64. package/dist/matter/card-entry/card-capture.js.map +1 -0
  65. package/dist/matter/card-entry/card-entry.d.ts +120 -0
  66. package/dist/matter/card-entry/card-entry.js +832 -0
  67. package/dist/matter/card-entry/card-entry.js.map +1 -0
  68. package/dist/matter/cardholder-document/cardholder-document.d.ts +45 -0
  69. package/dist/matter/cardholder-document/cardholder-document.js +70 -0
  70. package/dist/matter/cardholder-document/cardholder-document.js.map +1 -0
  71. package/dist/matter/cart/cart.d.ts +1 -1
  72. package/dist/matter/cart/cart.js +2 -2
  73. package/dist/matter/cart/cart.js.map +1 -1
  74. package/dist/matter/client-preferences/client-preferences-fieldset.d.ts +77 -0
  75. package/dist/matter/client-preferences/client-preferences-fieldset.js +299 -0
  76. package/dist/matter/client-preferences/client-preferences-fieldset.js.map +1 -0
  77. package/dist/matter/client-preferences/client-preferences.d.ts +3 -5
  78. package/dist/matter/client-preferences/client-preferences.js +6 -6
  79. package/dist/matter/client-preferences/client-preferences.js.map +1 -1
  80. package/dist/matter/client-profile/client-profile.d.ts +4 -6
  81. package/dist/matter/client-profile/client-profile.js +9 -6
  82. package/dist/matter/client-profile/client-profile.js.map +1 -1
  83. package/dist/matter/client-profile-form/client-profile-fieldset.d.ts +119 -0
  84. package/dist/matter/client-profile-form/client-profile-fieldset.js +488 -0
  85. package/dist/matter/client-profile-form/client-profile-fieldset.js.map +1 -0
  86. package/dist/matter/delivery-options/delivery-options.js.map +1 -1
  87. package/dist/matter/identity-edit/identity-edit.js +2 -2
  88. package/dist/matter/identity-edit/identity-edit.js.map +1 -1
  89. package/dist/matter/identity-summary/identity-summary.js +2 -2
  90. package/dist/matter/identity-summary/identity-summary.js.map +1 -1
  91. package/dist/matter/installments/installments-select.d.ts +42 -0
  92. package/dist/matter/installments/installments-select.js +167 -0
  93. package/dist/matter/installments/installments-select.js.map +1 -0
  94. package/dist/matter/installments/installments.d.ts +58 -0
  95. package/dist/matter/installments/installments.js +176 -0
  96. package/dist/matter/installments/installments.js.map +1 -0
  97. package/dist/matter/installments/use-installments-selection.d.ts +29 -0
  98. package/dist/matter/installments/use-installments-selection.js +95 -0
  99. package/dist/matter/installments/use-installments-selection.js.map +1 -0
  100. package/dist/matter/my-account-profile/my-account-profile.js +5 -5
  101. package/dist/matter/my-account-profile/my-account-profile.js.map +1 -1
  102. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.d.ts +63 -0
  103. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js +305 -0
  104. package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js.map +1 -0
  105. package/dist/matter/payment/payment-card-capture.d.ts +19 -0
  106. package/dist/matter/payment/payment-card-capture.js +129 -0
  107. package/dist/matter/payment/payment-card-capture.js.map +1 -0
  108. package/dist/matter/payment/payment-controller.d.ts +24 -0
  109. package/dist/matter/payment/payment-controller.js +107 -0
  110. package/dist/matter/payment/payment-controller.js.map +1 -0
  111. package/dist/matter/payment/payment-method-badges.d.ts +57 -0
  112. package/dist/matter/payment/payment-method-badges.js +192 -0
  113. package/dist/matter/payment/payment-method-badges.js.map +1 -0
  114. package/dist/matter/payment/payment.d.ts +89 -0
  115. package/dist/matter/payment/payment.js +263 -0
  116. package/dist/matter/payment/payment.js.map +1 -0
  117. package/dist/matter/payment/use-payment-method-selection.d.ts +302 -0
  118. package/dist/matter/payment/use-payment-method-selection.js +458 -0
  119. package/dist/matter/payment/use-payment-method-selection.js.map +1 -0
  120. package/dist/matter/payment/use-payment-submit-gate.d.ts +111 -0
  121. package/dist/matter/payment/use-payment-submit-gate.js +144 -0
  122. package/dist/matter/payment/use-payment-submit-gate.js.map +1 -0
  123. package/dist/matter/place-order/place-order.d.ts +74 -0
  124. package/dist/matter/place-order/place-order.js +379 -0
  125. package/dist/matter/place-order/place-order.js.map +1 -0
  126. package/dist/matter/product-list/product-list.d.ts +1 -0
  127. package/dist/matter/product-list/product-list.js.map +1 -1
  128. package/dist/matter/product-shelf/product-shelf.d.ts +1 -0
  129. package/dist/matter/product-shelf/product-shelf.js +2 -0
  130. package/dist/matter/product-shelf/product-shelf.js.map +1 -1
  131. package/dist/matter/region/region.js +1 -1
  132. package/dist/matter/region/region.js.map +1 -1
  133. package/dist/matter/save-card/save-card.d.ts +49 -0
  134. package/dist/matter/save-card/save-card.js +188 -0
  135. package/dist/matter/save-card/save-card.js.map +1 -0
  136. package/dist/matter/saved-cards/saved-cards.d.ts +79 -0
  137. package/dist/matter/saved-cards/saved-cards.js +387 -0
  138. package/dist/matter/saved-cards/saved-cards.js.map +1 -0
  139. package/dist/matter/shipping-address/country-descriptors.js +20 -10
  140. package/dist/matter/shipping-address/country-descriptors.js.map +1 -1
  141. package/dist/matter/shipping-address/shipping-address.d.ts +113 -174
  142. package/dist/matter/shipping-address/shipping-address.js +481 -792
  143. package/dist/matter/shipping-address/shipping-address.js.map +1 -1
  144. package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
  145. package/dist/matter/variant-selector/variant-selector.js +1 -1
  146. package/dist/particles/address-summary/address-summary.d.ts +24 -0
  147. package/dist/particles/address-summary/address-summary.js +83 -2
  148. package/dist/particles/address-summary/address-summary.js.map +1 -1
  149. package/dist/particles/alert-dialog/alert-dialog.d.ts +68 -0
  150. package/dist/particles/alert-dialog/alert-dialog.js +187 -0
  151. package/dist/particles/alert-dialog/alert-dialog.js.map +1 -0
  152. package/dist/particles/checkbox/checkbox.d.ts +7 -3
  153. package/dist/particles/checkbox/checkbox.js +4 -1
  154. package/dist/particles/checkbox/checkbox.js.map +1 -1
  155. package/dist/particles/document-field/document-field.d.ts +48 -5
  156. package/dist/particles/document-field/document-field.js +189 -32
  157. package/dist/particles/document-field/document-field.js.map +1 -1
  158. package/dist/particles/field/bound-field-registry.js +52 -0
  159. package/dist/particles/field/bound-field-registry.js.map +1 -0
  160. package/dist/particles/field/field.d.ts +116 -0
  161. package/dist/particles/field/field.js +497 -6
  162. package/dist/particles/field/field.js.map +1 -1
  163. package/dist/particles/fieldset/fieldset.js +2 -2
  164. package/dist/particles/fieldset/fieldset.js.map +1 -1
  165. package/dist/particles/footer-social/footer-social.js +1 -1
  166. package/dist/particles/form/form.d.ts +104 -0
  167. package/dist/particles/form/form.js +485 -0
  168. package/dist/particles/form/form.js.map +1 -0
  169. package/dist/particles/incentives/incentives.js +1 -1
  170. package/dist/particles/phone-field/phone-field.d.ts +38 -10
  171. package/dist/particles/phone-field/phone-field.js +183 -39
  172. package/dist/particles/phone-field/phone-field.js.map +1 -1
  173. package/dist/particles/postal-code-field/postal-code-field.js +2 -2
  174. package/dist/particles/postal-code-field/postal-code-field.js.map +1 -1
  175. package/dist/particles/select/field-select.d.ts +43 -0
  176. package/dist/particles/select/field-select.js +150 -0
  177. package/dist/particles/select/field-select.js.map +1 -0
  178. package/dist/particles/select/select.d.ts +2 -0
  179. package/dist/particles/select/select.js.map +1 -1
  180. package/dist/particles/shared/compose-refs.js +21 -0
  181. package/dist/particles/shared/compose-refs.js.map +1 -0
  182. package/dist/schema.graphql +701 -2
  183. package/dist/sdk/actions/analytics-action-provider.d.ts +15 -0
  184. package/dist/sdk/actions/analytics-action-provider.js +19 -0
  185. package/dist/sdk/actions/analytics-action-provider.js.map +1 -0
  186. package/dist/sdk/actions/cart-action-provider.d.ts +1 -1
  187. package/dist/sdk/actions/cart-action-provider.js +1 -1
  188. package/dist/sdk/actions/cart-action-provider.js.map +1 -1
  189. package/dist/sdk/actions/index.d.ts +3 -1
  190. package/dist/sdk/actions/index.js +3 -1
  191. package/dist/sdk/actions/payment-action-provider.d.ts +22 -0
  192. package/dist/sdk/actions/payment-action-provider.js +26 -0
  193. package/dist/sdk/actions/payment-action-provider.js.map +1 -0
  194. package/dist/sdk/actions/session-action-provider.d.ts +1 -1
  195. package/dist/sdk/actions/session-action-provider.js +1 -1
  196. package/dist/sdk/actions/session-action-provider.js.map +1 -1
  197. package/dist/sdk/actions/shipping-action-provider.d.ts +1 -1
  198. package/dist/sdk/actions/shipping-action-provider.js +1 -1
  199. package/dist/sdk/actions/shipping-action-provider.js.map +1 -1
  200. package/dist/sdk/actions/types.d.ts +6 -2
  201. package/dist/sdk/analytics/analytics-destination.d.ts +43 -0
  202. package/dist/sdk/analytics/analytics-destination.js +90 -0
  203. package/dist/sdk/analytics/analytics-destination.js.map +1 -0
  204. package/dist/sdk/analytics/use-analytics-actions.d.ts +57 -0
  205. package/dist/sdk/analytics/use-analytics-actions.js +108 -0
  206. package/dist/sdk/analytics/use-analytics-actions.js.map +1 -0
  207. package/dist/sdk/cache/storefront-cache.js +1 -1
  208. package/dist/sdk/cache/storefront-cache.js.map +1 -1
  209. package/dist/sdk/cart/operations.d.ts +4 -4
  210. package/dist/sdk/cart/operations.js +1 -1
  211. package/dist/sdk/cart/operations.js.map +1 -1
  212. package/dist/sdk/cart/optimistic.js +1 -1
  213. package/dist/sdk/cart/optimistic.js.map +1 -1
  214. package/dist/sdk/cart/use-cart-actions.d.ts +1 -1
  215. package/dist/sdk/cart/use-cart-actions.js +4 -4
  216. package/dist/sdk/cart/use-cart-actions.js.map +1 -1
  217. package/dist/sdk/cart/use-cart-validate-on-open.js +1 -1
  218. package/dist/sdk/cart/use-cart-validate-on-open.js.map +1 -1
  219. package/dist/sdk/cart/write-gate.js +1 -1
  220. package/dist/sdk/cart/write-gate.js.map +1 -1
  221. package/dist/sdk/data/entity-resolution-context.js +31 -0
  222. package/dist/sdk/data/entity-resolution-context.js.map +1 -0
  223. package/dist/sdk/data/entity-subscriber.js +18 -8
  224. package/dist/sdk/data/entity-subscriber.js.map +1 -1
  225. package/dist/sdk/data/index.js +1 -0
  226. package/dist/sdk/data/page-reactive-data-root.d.ts +38 -2
  227. package/dist/sdk/data/page-reactive-data-root.js +4 -2
  228. package/dist/sdk/data/page-reactive-data-root.js.map +1 -1
  229. package/dist/sdk/data/reactive-data-provider.d.ts +1 -1
  230. package/dist/sdk/data/reactive-data-provider.js +8 -4
  231. package/dist/sdk/data/reactive-data-provider.js.map +1 -1
  232. package/dist/sdk/data/reactive-list-item-data-provider.d.ts +1 -1
  233. package/dist/sdk/data/reactive-list-item-data-provider.js +13 -5
  234. package/dist/sdk/data/reactive-list-item-data-provider.js.map +1 -1
  235. package/dist/sdk/data/use-reactive-data-settled.js +39 -0
  236. package/dist/sdk/data/use-reactive-data-settled.js.map +1 -0
  237. package/dist/sdk/data/use-reactive-entity.js +6 -2
  238. package/dist/sdk/data/use-reactive-entity.js.map +1 -1
  239. package/dist/sdk/generated/fragment-types.js +2 -0
  240. package/dist/sdk/generated/fragment-types.js.map +1 -1
  241. package/dist/sdk/generated/gql.js +2 -1
  242. package/dist/sdk/generated/gql.js.map +1 -1
  243. package/dist/sdk/generated/graphql.js +85 -1
  244. package/dist/sdk/generated/graphql.js.map +1 -1
  245. package/dist/sdk/i18n/messages/en-US.js +3 -0
  246. package/dist/sdk/i18n/messages/en-US.json +3 -0
  247. package/dist/sdk/i18n/messages/en-US.json.d.ts +3 -0
  248. package/dist/sdk/i18n/messages/es-ES.js +3 -0
  249. package/dist/sdk/i18n/messages/es-ES.json +3 -0
  250. package/dist/sdk/i18n/messages/pt-BR.js +3 -0
  251. package/dist/sdk/i18n/messages/pt-BR.json +3 -0
  252. package/dist/sdk/identity/operations.js.map +1 -1
  253. package/dist/sdk/identity/use-identity-actions.d.ts +1 -1
  254. package/dist/sdk/identity/use-identity-actions.js +3 -2
  255. package/dist/sdk/identity/use-identity-actions.js.map +1 -1
  256. package/dist/sdk/payment/gateway-origin.js +35 -0
  257. package/dist/sdk/payment/gateway-origin.js.map +1 -0
  258. package/dist/sdk/payment/gateway.d.ts +85 -0
  259. package/dist/sdk/payment/gateway.js +183 -0
  260. package/dist/sdk/payment/gateway.js.map +1 -0
  261. package/dist/sdk/payment/operations.d.ts +52 -0
  262. package/dist/sdk/payment/operations.js +223 -0
  263. package/dist/sdk/payment/operations.js.map +1 -0
  264. package/dist/sdk/payment/security-code-mask.js +71 -0
  265. package/dist/sdk/payment/security-code-mask.js.map +1 -0
  266. package/dist/sdk/payment/submission-registry.d.ts +33 -0
  267. package/dist/sdk/payment/submission-registry.js +58 -0
  268. package/dist/sdk/payment/submission-registry.js.map +1 -0
  269. package/dist/sdk/payment/use-payment-actions.d.ts +78 -0
  270. package/dist/sdk/payment/use-payment-actions.js +276 -0
  271. package/dist/sdk/payment/use-payment-actions.js.map +1 -0
  272. package/dist/sdk/payment/use-place-order.d.ts +65 -0
  273. package/dist/sdk/payment/use-place-order.js +640 -0
  274. package/dist/sdk/payment/use-place-order.js.map +1 -0
  275. package/dist/sdk/session/auth-operations.d.ts +1 -1
  276. package/dist/sdk/session/auth-operations.js.map +1 -1
  277. package/dist/sdk/session/use-session-actions.d.ts +1 -1
  278. package/dist/sdk/session/use-session-actions.js.map +1 -1
  279. package/dist/sdk/session/use-session-revalidation.js +65 -0
  280. package/dist/sdk/session/use-session-revalidation.js.map +1 -0
  281. package/dist/sdk/shipping/option-select-operations.d.ts +1 -1
  282. package/dist/sdk/shipping/option-select-operations.js.map +1 -1
  283. package/dist/sdk/shipping/request-timeout.js +1 -1
  284. package/dist/sdk/shipping/request-timeout.js.map +1 -1
  285. package/dist/sdk/shipping/shipping-operations.d.ts +1 -1
  286. package/dist/sdk/shipping/shipping-operations.js.map +1 -1
  287. package/dist/sdk/shipping/use-shipping-actions.d.ts +2 -2
  288. package/dist/sdk/shipping/use-shipping-actions.js +1 -1
  289. package/dist/sdk/shipping/use-shipping-actions.js.map +1 -1
  290. package/dist/sdk/state/cart.d.ts +3 -4
  291. package/dist/sdk/state/cart.js +6 -7
  292. package/dist/sdk/state/cart.js.map +1 -1
  293. package/dist/utils/loggable-error-name.js +49 -0
  294. package/dist/utils/loggable-error-name.js.map +1 -0
  295. package/dist/utils/resolve-authored-copy.js +18 -0
  296. package/dist/utils/resolve-authored-copy.js.map +1 -0
  297. package/dist/utils/safe-href.js +3 -3
  298. package/dist/utils/safe-href.js.map +1 -1
  299. package/dist/utils/substitute-template.js +33 -0
  300. package/dist/utils/substitute-template.js.map +1 -0
  301. package/package.json +2 -1
  302. package/src/styles/tailwind.css +34 -0
  303. package/dist/docs/client-profile-form.md +0 -192
  304. package/dist/matter/client-profile-form/client-profile-form.d.ts +0 -126
  305. package/dist/matter/client-profile-form/client-profile-form.js +0 -662
  306. package/dist/matter/client-profile-form/client-profile-form.js.map +0 -1
@@ -0,0 +1,150 @@
1
+ "use client";
2
+ import { defineComponent } from "../../core/dist/define-component.js";
3
+ import "../../core/dist/index.js";
4
+ import { TEXT_FIELD_VALUE, resolveRequiredness, useBoundField, useField } from "../field/field.js";
5
+ import { Select } from "./select.js";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { useFormContext } from "react-hook-form";
8
+ //#region src/particles/select/field-select.tsx
9
+ const SELECT_DOC = "./select.md";
10
+ const FieldSelectRootDefinition = defineComponent({
11
+ name: "FieldSelectRoot",
12
+ importPath: "@vtex/faststore/components",
13
+ component: FieldSelectRoot,
14
+ requiresContext: "field",
15
+ editor: {
16
+ label: "Field Select Root",
17
+ category: "layout"
18
+ },
19
+ schema: { modal: {
20
+ type: "boolean",
21
+ default: true,
22
+ label: "Modal"
23
+ } },
24
+ guideline: "Bound select over the shipped Select particle: reads the enclosing field contract and drives Select.Root through react-hook-form. Childless, it renders the full default anatomy (trigger, value, icon, popup, list, one item per option); given children, place FieldSelect.Trigger/Value/Options among the generic Select.* parts to recompose it.",
25
+ docPath: SELECT_DOC
26
+ });
27
+ const FieldSelectTriggerDefinition = defineComponent({
28
+ name: "FieldSelectTrigger",
29
+ importPath: "@vtex/faststore/components",
30
+ component: FieldSelectTrigger,
31
+ requiresContext: "field",
32
+ editor: {
33
+ label: "Field Select Trigger",
34
+ category: "action"
35
+ },
36
+ schema: {},
37
+ guideline: "Bound select's trigger: announces the field's resolved requiredness as aria-required (never native required, so react-hook-form's validation runs instead of the browser's). A select carries no raise of its own, so the fieldset's rule is the whole of it. Place FieldSelect.Value and, optionally, Select.Icon inside it.",
38
+ docPath: SELECT_DOC
39
+ });
40
+ const FieldSelectValueDefinition = defineComponent({
41
+ name: "FieldSelectValue",
42
+ importPath: "@vtex/faststore/components",
43
+ component: FieldSelectValue,
44
+ requiresContext: "field",
45
+ editor: {
46
+ label: "Field Select Value",
47
+ category: "layout"
48
+ },
49
+ schema: {},
50
+ guideline: "Resolves the trigger's label from the field contract's options, so the chosen option's label shows on first paint instead of the raw stored value. Falls back to the raw value when nothing matches, and to the placeholder when empty.",
51
+ docPath: SELECT_DOC
52
+ });
53
+ const FieldSelectOptionsDefinition = defineComponent({
54
+ name: "FieldSelectOptions",
55
+ importPath: "@vtex/faststore/components",
56
+ component: FieldSelectOptions,
57
+ requiresContext: "field",
58
+ editor: {
59
+ label: "Field Select Options",
60
+ category: "content"
61
+ },
62
+ schema: {},
63
+ guideline: "Renders one Select.Item per field contract option, in contract order — the option list is platform data, never authored here. Pass children (e.g. a Select.ItemIndicator) to render inside every item, after its text.",
64
+ docPath: SELECT_DOC
65
+ });
66
+ function FieldSelectRoot({ modal = true, children }) {
67
+ const contract = useField();
68
+ const formContext = useFormContext();
69
+ if (contract && formContext) return /* @__PURE__ */ jsx(BoundFieldSelectRoot, {
70
+ contract,
71
+ modal,
72
+ children
73
+ });
74
+ return /* @__PURE__ */ jsx(Select.Root, {
75
+ modal,
76
+ disabled: contract?.disabled,
77
+ readOnly: contract?.readOnly,
78
+ children: children ?? /* @__PURE__ */ jsx(DefaultFieldSelectAnatomy, {})
79
+ });
80
+ }
81
+ function BoundFieldSelectRoot({ contract, modal, children }) {
82
+ const field = useBoundField(contract, TEXT_FIELD_VALUE);
83
+ return /* @__PURE__ */ jsx(Select.Root, {
84
+ value: field.value,
85
+ onValueChange: (next) => field.onChange(next ?? ""),
86
+ disabled: contract.disabled,
87
+ readOnly: contract.readOnly,
88
+ name: contract.name,
89
+ autoComplete: contract.autoComplete,
90
+ modal,
91
+ children: children ?? /* @__PURE__ */ jsx(DefaultFieldSelectAnatomy, {})
92
+ });
93
+ }
94
+ /** The nine-node default anatomy, shared by the bound and unbound paths — each part reads the
95
+ * contract for itself through `useField()`, so no data is threaded through here. */
96
+ function DefaultFieldSelectAnatomy() {
97
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(FieldSelectTrigger, { children: [/* @__PURE__ */ jsx(FieldSelectValue, {}), /* @__PURE__ */ jsx(Select.Icon, {})] }), /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Positioner, { children: /* @__PURE__ */ jsx(Select.Popup, { children: /* @__PURE__ */ jsx(Select.List, { children: /* @__PURE__ */ jsx(FieldSelectOptions, {}) }) }) }) })] });
98
+ }
99
+ function FieldSelectTrigger({ children, ...props }) {
100
+ const contract = useField();
101
+ if (contract) return /* @__PURE__ */ jsx(Select.Trigger, {
102
+ ...props,
103
+ "aria-required": resolveRequiredness(contract.rule).required || void 0,
104
+ "data-fs-field-select-trigger": "",
105
+ children
106
+ });
107
+ return /* @__PURE__ */ jsx(Select.Trigger, {
108
+ ...props,
109
+ "data-fs-field-select-trigger": "",
110
+ children
111
+ });
112
+ }
113
+ function FieldSelectValue({ placeholder, ...props }) {
114
+ const contract = useField();
115
+ if (contract) return /* @__PURE__ */ jsx(Select.Value, {
116
+ ...props,
117
+ "data-fs-field-select-value": "",
118
+ children: (value) => resolveOptionLabel(value, contract.options, placeholder ?? contract.placeholder)
119
+ });
120
+ return /* @__PURE__ */ jsx(Select.Value, {
121
+ ...props,
122
+ placeholder,
123
+ "data-fs-field-select-value": ""
124
+ });
125
+ }
126
+ function resolveOptionLabel(value, options, placeholder) {
127
+ if (!value) return placeholder;
128
+ return options?.find((option) => option.value === value)?.label ?? value;
129
+ }
130
+ function FieldSelectOptions({ className, children }) {
131
+ const contract = useField();
132
+ if (!contract?.options) return null;
133
+ return /* @__PURE__ */ jsx(Fragment, { children: contract.options.map((option) => /* @__PURE__ */ jsxs(Select.Item, {
134
+ value: option.value,
135
+ label: option.label,
136
+ className,
137
+ "data-fs-field-select-option": "",
138
+ children: [/* @__PURE__ */ jsx(Select.ItemText, { children: option.label }), children]
139
+ }, option.value)) });
140
+ }
141
+ const FieldSelect = {
142
+ Root: FieldSelectRoot,
143
+ Trigger: FieldSelectTrigger,
144
+ Value: FieldSelectValue,
145
+ Options: FieldSelectOptions
146
+ };
147
+ //#endregion
148
+ export { FieldSelect, FieldSelectOptions, FieldSelectOptionsDefinition, FieldSelectRoot, FieldSelectRootDefinition, FieldSelectTrigger, FieldSelectTriggerDefinition, FieldSelectValue, FieldSelectValueDefinition };
149
+
150
+ //# sourceMappingURL=field-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-select.js","names":[],"sources":["../../../src/particles/select/field-select.tsx"],"sourcesContent":["'use client';\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport type { FieldContract } from '../field/field.js';\nimport { resolveRequiredness, TEXT_FIELD_VALUE, useBoundField, useField } from '../field/field.js';\nimport { Select } from './select.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Binds a chosen-option field. Reads the enclosing field contract, registers with react-hook-form,\n * and drives the shipped `Select.Root`. Childless, it renders the default nine-node anatomy; given\n * children, it renders them and they bind the same way.\n */\nexport type FieldSelectRootProps = {\n /** Base UI's modal behaviour. The one authorable knob that carries no field meaning. */\n modal?: boolean;\n children?: ReactNode;\n};\n\n/** The field's requiredness and the bound select's styling hook, on the focusable control. */\nexport type FieldSelectTriggerProps = Omit<ComponentPropsWithRef<'button'>, 'dangerouslySetInnerHTML'>;\n\n/** The chosen option's label, resolved from the contract's options. */\nexport type FieldSelectValueProps = Omit<ComponentPropsWithRef<'span'>, 'children' | 'dangerouslySetInnerHTML'> & {\n placeholder?: string;\n};\n\n/** One `Select.Item` per contract option. Renders nothing when the contract carries none. */\nexport type FieldSelectOptionsProps = {\n /** Applied to every item this part renders; it renders no wrapper of its own. */\n className?: string;\n /** Rendered inside every item, after its text — e.g. a `Select.ItemIndicator`. */\n children?: ReactNode;\n};\n\n// ---------------------------------------------------------------------------\n// Definitions\n// ---------------------------------------------------------------------------\n\n// Explicit override: this file's basename doesn't match `select.md`, so the catalog builder's\n// convention-based lookup (`<basename>.md` next to the source) finds nothing here.\nconst SELECT_DOC = './select.md';\n\nexport const FieldSelectRootDefinition = defineComponent<FieldSelectRootProps>({\n name: 'FieldSelectRoot',\n importPath: '@vtex/faststore/components',\n component: FieldSelectRoot,\n requiresContext: 'field',\n editor: { label: 'Field Select Root', category: 'layout' },\n schema: {\n modal: { type: 'boolean', default: true, label: 'Modal' },\n },\n guideline:\n 'Bound select over the shipped Select particle: reads the enclosing field contract and drives Select.Root through react-hook-form. Childless, it renders the full default anatomy (trigger, value, icon, popup, list, one item per option); given children, place FieldSelect.Trigger/Value/Options among the generic Select.* parts to recompose it.',\n docPath: SELECT_DOC,\n});\n\nexport const FieldSelectTriggerDefinition = defineComponent<FieldSelectTriggerProps>({\n name: 'FieldSelectTrigger',\n importPath: '@vtex/faststore/components',\n component: FieldSelectTrigger,\n requiresContext: 'field',\n editor: { label: 'Field Select Trigger', category: 'action' },\n schema: {},\n guideline:\n \"Bound select's trigger: announces the field's resolved requiredness as aria-required (never native required, so react-hook-form's validation runs instead of the browser's). A select carries no raise of its own, so the fieldset's rule is the whole of it. Place FieldSelect.Value and, optionally, Select.Icon inside it.\",\n docPath: SELECT_DOC,\n});\n\nexport const FieldSelectValueDefinition = defineComponent<FieldSelectValueProps>({\n name: 'FieldSelectValue',\n importPath: '@vtex/faststore/components',\n component: FieldSelectValue,\n requiresContext: 'field',\n editor: { label: 'Field Select Value', category: 'layout' },\n schema: {},\n guideline:\n \"Resolves the trigger's label from the field contract's options, so the chosen option's label shows on first paint instead of the raw stored value. Falls back to the raw value when nothing matches, and to the placeholder when empty.\",\n docPath: SELECT_DOC,\n});\n\nexport const FieldSelectOptionsDefinition = defineComponent<FieldSelectOptionsProps>({\n name: 'FieldSelectOptions',\n importPath: '@vtex/faststore/components',\n component: FieldSelectOptions,\n requiresContext: 'field',\n editor: { label: 'Field Select Options', category: 'content' },\n schema: {},\n guideline:\n 'Renders one Select.Item per field contract option, in contract order — the option list is platform data, never authored here. Pass children (e.g. a Select.ItemIndicator) to render inside every item, after its text.',\n docPath: SELECT_DOC,\n});\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport function FieldSelectRoot({ modal = true, children }: FieldSelectRootProps): ReactNode {\n const contract = useField();\n const formContext = useFormContext();\n\n if (contract && formContext) {\n return (\n <BoundFieldSelectRoot contract={contract} modal={modal}>\n {children}\n </BoundFieldSelectRoot>\n );\n }\n\n return (\n <Select.Root modal={modal} disabled={contract?.disabled} readOnly={contract?.readOnly}>\n {children ?? <DefaultFieldSelectAnatomy />}\n </Select.Root>\n );\n}\n\ntype BoundFieldSelectRootProps = FieldSelectRootProps & { contract: FieldContract };\n\nfunction BoundFieldSelectRoot({ contract, modal, children }: BoundFieldSelectRootProps) {\n const field = useBoundField(contract, TEXT_FIELD_VALUE);\n\n return (\n <Select.Root\n value={field.value}\n onValueChange={(next) => field.onChange(next ?? '')}\n disabled={contract.disabled}\n readOnly={contract.readOnly}\n name={contract.name}\n autoComplete={contract.autoComplete}\n modal={modal}\n >\n {children ?? <DefaultFieldSelectAnatomy />}\n </Select.Root>\n );\n}\n\n/** The nine-node default anatomy, shared by the bound and unbound paths — each part reads the\n * contract for itself through `useField()`, so no data is threaded through here. */\nfunction DefaultFieldSelectAnatomy() {\n return (\n <>\n <FieldSelectTrigger>\n <FieldSelectValue />\n <Select.Icon />\n </FieldSelectTrigger>\n <Select.Portal>\n <Select.Positioner>\n <Select.Popup>\n <Select.List>\n <FieldSelectOptions />\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Trigger\n// ---------------------------------------------------------------------------\n\nexport function FieldSelectTrigger({ children, ...props }: FieldSelectTriggerProps): ReactNode {\n const contract = useField();\n\n if (contract) {\n // The pure resolver, not `useBoundField`'s resolved value: the trigger is not the component that\n // binds the field, so it has no bound field to read. A select carries no raise of its own, so\n // the contract's baseline is the whole of it.\n return (\n <Select.Trigger\n {...props}\n aria-required={resolveRequiredness(contract.rule).required || undefined}\n data-fs-field-select-trigger=\"\"\n >\n {children}\n </Select.Trigger>\n );\n }\n\n return (\n <Select.Trigger {...props} data-fs-field-select-trigger=\"\">\n {children}\n </Select.Trigger>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Value\n// ---------------------------------------------------------------------------\n\nexport function FieldSelectValue({ placeholder, ...props }: FieldSelectValueProps): ReactNode {\n const contract = useField();\n\n if (contract) {\n return (\n <Select.Value {...props} data-fs-field-select-value=\"\">\n {(value) => resolveOptionLabel(value, contract.options, placeholder ?? contract.placeholder)}\n </Select.Value>\n );\n }\n\n return <Select.Value {...props} placeholder={placeholder} data-fs-field-select-value=\"\" />;\n}\n\nfunction resolveOptionLabel(\n value: string | null,\n options: FieldContract['options'],\n placeholder: string | undefined,\n): ReactNode {\n if (!value) return placeholder;\n return options?.find((option) => option.value === value)?.label ?? value;\n}\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport function FieldSelectOptions({ className, children }: FieldSelectOptionsProps): ReactNode {\n const contract = useField();\n\n if (!contract?.options) return null;\n\n return (\n <>\n {contract.options.map((option) => (\n <Select.Item\n key={option.value}\n value={option.value}\n label={option.label}\n className={className}\n data-fs-field-select-option=\"\"\n >\n <Select.ItemText>{option.label}</Select.ItemText>\n {children}\n </Select.Item>\n ))}\n </>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Namespace\n// ---------------------------------------------------------------------------\n\nexport const FieldSelect = {\n Root: FieldSelectRoot,\n Trigger: FieldSelectTrigger,\n Value: FieldSelectValue,\n Options: FieldSelectOptions,\n};\n"],"mappings":";;;;;;;;AA6CA,MAAM,aAAa;AAEnB,MAAa,4BAA4B,gBAAsC;CAC7E,MAAM;CACN,YAAY;CACZ,WAAW;CACX,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAAqB,UAAU;CAAS;CACzD,QAAQ,EACN,OAAO;EAAE,MAAM;EAAW,SAAS;EAAM,OAAO;CAAQ,EAC1D;CACA,WACE;CACF,SAAS;AACX,CAAC;AAED,MAAa,+BAA+B,gBAAyC;CACnF,MAAM;CACN,YAAY;CACZ,WAAW;CACX,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAAwB,UAAU;CAAS;CAC5D,QAAQ,CAAC;CACT,WACE;CACF,SAAS;AACX,CAAC;AAED,MAAa,6BAA6B,gBAAuC;CAC/E,MAAM;CACN,YAAY;CACZ,WAAW;CACX,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAAsB,UAAU;CAAS;CAC1D,QAAQ,CAAC;CACT,WACE;CACF,SAAS;AACX,CAAC;AAED,MAAa,+BAA+B,gBAAyC;CACnF,MAAM;CACN,YAAY;CACZ,WAAW;CACX,iBAAiB;CACjB,QAAQ;EAAE,OAAO;EAAwB,UAAU;CAAU;CAC7D,QAAQ,CAAC;CACT,WACE;CACF,SAAS;AACX,CAAC;AAMD,SAAgB,gBAAgB,EAAE,QAAQ,MAAM,YAA6C;CAC3F,MAAM,WAAW,SAAS;CAC1B,MAAM,cAAc,eAAe;CAEnC,IAAI,YAAY,aACd,OACE,oBAAC,sBAAD;EAAgC;EAAiB;EAC9C;CACmB,CAAA;CAI1B,OACE,oBAAC,OAAO,MAAR;EAAoB;EAAO,UAAU,UAAU;EAAU,UAAU,UAAU;EAC1E,UAAA,YAAY,oBAAC,2BAAD,CAA4B,CAAA;CAC9B,CAAA;AAEjB;AAIA,SAAS,qBAAqB,EAAE,UAAU,OAAO,YAAuC;CACtF,MAAM,QAAQ,cAAc,UAAU,gBAAgB;CAEtD,OACE,oBAAC,OAAO,MAAR;EACE,OAAO,MAAM;EACb,gBAAgB,SAAS,MAAM,SAAS,QAAQ,EAAE;EAClD,UAAU,SAAS;EACnB,UAAU,SAAS;EACnB,MAAM,SAAS;EACf,cAAc,SAAS;EAChB;EAEN,UAAA,YAAY,oBAAC,2BAAD,CAA4B,CAAA;CAC9B,CAAA;AAEjB;;;AAIA,SAAS,4BAA4B;CACnC,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,oBAAD,EAAA,UAAA,CACE,oBAAC,kBAAD,CAAmB,CAAA,GACnB,oBAAC,OAAO,MAAR,CAAc,CAAA,CACI,EAAA,CAAA,GACpB,oBAAC,OAAO,QAAR,EAAA,UACE,oBAAC,OAAO,YAAR,EAAA,UACE,oBAAC,OAAO,OAAR,EAAA,UACE,oBAAC,OAAO,MAAR,EAAA,UACE,oBAAC,oBAAD,CAAqB,CAAA,EACV,CAAA,EACD,CAAA,EACG,CAAA,EACN,CAAA,CACf,EAAA,CAAA;AAEN;AAMA,SAAgB,mBAAmB,EAAE,UAAU,GAAG,SAA6C;CAC7F,MAAM,WAAW,SAAS;CAE1B,IAAI,UAIF,OACE,oBAAC,OAAO,SAAR;EACE,GAAI;EACJ,iBAAe,oBAAoB,SAAS,IAAI,CAAC,CAAC,YAAY,KAAA;EAC9D,gCAA6B;EAE5B;CACa,CAAA;CAIpB,OACE,oBAAC,OAAO,SAAR;EAAgB,GAAI;EAAO,gCAA6B;EACrD;CACa,CAAA;AAEpB;AAMA,SAAgB,iBAAiB,EAAE,aAAa,GAAG,SAA2C;CAC5F,MAAM,WAAW,SAAS;CAE1B,IAAI,UACF,OACE,oBAAC,OAAO,OAAR;EAAc,GAAI;EAAO,8BAA2B;EAChD,WAAA,UAAU,mBAAmB,OAAO,SAAS,SAAS,eAAe,SAAS,WAAW;CAC/E,CAAA;CAIlB,OAAO,oBAAC,OAAO,OAAR;EAAc,GAAI;EAAoB;EAAa,8BAA2B;CAAI,CAAA;AAC3F;AAEA,SAAS,mBACP,OACA,SACA,aACW;CACX,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,SAAS,MAAM,WAAW,OAAO,UAAU,KAAK,CAAC,EAAE,SAAS;AACrE;AAMA,SAAgB,mBAAmB,EAAE,WAAW,YAAgD;CAC9F,MAAM,WAAW,SAAS;CAE1B,IAAI,CAAC,UAAU,SAAS,OAAO;CAE/B,OACE,oBAAA,UAAA,EAAA,UACG,SAAS,QAAQ,KAAK,WACrB,qBAAC,OAAO,MAAR;EAEE,OAAO,OAAO;EACd,OAAO,OAAO;EACH;EACX,+BAA4B;EAL9B,UAAA,CAOE,oBAAC,OAAO,UAAR,EAAA,UAAkB,OAAO,MAAuB,CAAA,GAC/C,QACU;CARN,GAAA,OAAO,KAQD,CACd,EACD,CAAA;AAEN;AAMA,MAAa,cAAc;CACzB,MAAM;CACN,SAAS;CACT,OAAO;CACP,SAAS;AACX"}
@@ -16,6 +16,8 @@ export type SelectRootProps = {
16
16
  defaultOpen?: boolean;
17
17
  onOpenChange?: (open: boolean) => void;
18
18
  name?: string;
19
+ /** Forwarded to Base UI's hidden `<input>` — turns on browser autofill for the field. */
20
+ autoComplete?: string;
19
21
  children?: ReactNode;
20
22
  };
21
23
  export type SelectLabelProps = ComponentPropsWithRef<'div'>;
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","names":["BaseSelect","Select"],"sources":["../../../src/particles/select/select.tsx"],"sourcesContent":["'use client';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport type SelectSide = 'top' | 'bottom' | 'left' | 'right';\nexport type SelectAlign = 'start' | 'center' | 'end';\n\nexport type SelectRootProps = {\n disabled?: boolean;\n modal?: boolean;\n required?: boolean;\n readOnly?: boolean;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string | null) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n name?: string;\n children?: ReactNode;\n};\n\nexport type SelectLabelProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectTriggerProps = ComponentPropsWithRef<'button'> & {\n disabled?: boolean;\n};\n\nexport type SelectValueProps = Omit<ComponentPropsWithRef<'span'>, 'children'> & {\n placeholder?: string;\n /** Rendered content, or a render function receiving the current value (Base UI resolves the\n * matching item's label automatically when omitted, but only once that item has mounted at\n * least once — e.g. after the popup has been opened — so pass a render function when the\n * label must be correct before the shopper ever opens the dropdown). */\n children?: ReactNode | ((value: string | null) => ReactNode);\n};\n\nexport type SelectIconProps = ComponentPropsWithRef<'span'>;\n\nexport type SelectPortalProps = {\n children?: ReactNode;\n};\n\nexport type SelectBackdropProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectPositionerProps = ComponentPropsWithRef<'div'> & {\n side?: SelectSide;\n align?: SelectAlign;\n sideOffset?: number;\n alignItemWithTrigger?: boolean;\n};\n\nexport type SelectScrollUpArrowProps = ComponentPropsWithRef<'div'> & {\n keepMounted?: boolean;\n};\n\nexport type SelectPopupProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectArrowProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectListProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectItemProps = ComponentPropsWithRef<'div'> & {\n value?: string;\n disabled?: boolean;\n label?: string;\n};\n\nexport type SelectItemTextProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectItemIndicatorProps = ComponentPropsWithRef<'span'> & {\n keepMounted?: boolean;\n};\n\nexport type SelectSeparatorProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectGroupProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectGroupLabelProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectScrollDownArrowProps = ComponentPropsWithRef<'div'> & {\n keepMounted?: boolean;\n};\n\nexport const SelectRootDefinition = defineComponent<SelectRootProps>({\n name: 'SelectRoot',\n importPath: '@vtex/faststore/components',\n component: SelectRoot,\n editor: { label: 'Select Root', category: 'layout' },\n schema: {\n disabled: { type: 'boolean', default: false, label: 'Disabled' },\n modal: { type: 'boolean', default: true, label: 'Modal' },\n required: { type: 'boolean', default: false, label: 'Required' },\n readOnly: { type: 'boolean', default: false, label: 'Read Only' },\n },\n guideline:\n 'Root of a select dropdown. Manages selection state, modal overlay, and form integration. Compose as: SelectRoot > (SelectLabel + SelectTrigger > (SelectValue + SelectIcon) + SelectPortal > (SelectBackdrop + SelectPositioner > SelectPopup > (SelectScrollUpArrow + SelectList > [SelectItem > (SelectItemText + SelectItemIndicator)] + SelectScrollDownArrow))). Use SelectGroup > (SelectGroupLabel + [SelectItem]) for grouped options. Set modal=false to allow interacting with background elements while open.',\n});\n\nexport const SelectLabelDefinition = defineComponent<SelectLabelProps>({\n name: 'SelectLabel',\n importPath: '@vtex/faststore/components',\n component: SelectLabel,\n editor: { label: 'Select Label', category: 'layout' },\n schema: {},\n guideline:\n 'Accessible label associated with the trigger. Always place outside Select.Trigger so screen readers announce it separately.',\n});\n\nexport const SelectTriggerDefinition = defineComponent<SelectTriggerProps>({\n name: 'SelectTrigger',\n importPath: '@vtex/faststore/components',\n component: SelectTrigger,\n editor: { label: 'Select Trigger', category: 'action' },\n schema: {\n disabled: { type: 'boolean', default: false, label: 'Disabled' },\n },\n guideline:\n 'Opens and closes the popup on click. Use data-open and data-placeholder CSS attributes for open-state and empty-state styling.',\n});\n\nexport const SelectValueDefinition = defineComponent<SelectValueProps>({\n name: 'SelectValue',\n importPath: '@vtex/faststore/components',\n component: SelectValue,\n editor: { label: 'Select Value', category: 'layout' },\n schema: {},\n guideline:\n \"Renders the selected item's text, or placeholder when nothing is selected. Style the placeholder state via [data-fs-select-value][data-placeholder].\",\n});\n\nexport const SelectIconDefinition = defineComponent<SelectIconProps>({\n name: 'SelectIcon',\n importPath: '@vtex/faststore/components',\n component: SelectIcon,\n editor: { label: 'Select Icon', category: 'layout' },\n schema: {},\n guideline:\n 'Decorative indicator (e.g. chevron) inside the trigger. Rotates or changes when the popup opens via data-open.',\n});\n\nexport const SelectPortalDefinition = defineComponent<SelectPortalProps>({\n name: 'SelectPortal',\n importPath: '@vtex/faststore/components',\n component: SelectPortal,\n editor: { label: 'Select Portal', category: 'layout' },\n schema: {},\n guideline:\n 'Teleports popup content to <body>. Always wrap Select.Positioner with this to avoid overflow/z-index issues.',\n});\n\nexport const SelectBackdropDefinition = defineComponent<SelectBackdropProps>({\n name: 'SelectBackdrop',\n importPath: '@vtex/faststore/components',\n component: SelectBackdrop,\n editor: { label: 'Select Backdrop', category: 'layout' },\n schema: {},\n guideline:\n 'Invisible overlay that closes the select when clicked outside. Required when modal=true to trap interaction.',\n});\n\nexport const SelectPositionerDefinition = defineComponent<SelectPositionerProps>({\n name: 'SelectPositioner',\n importPath: '@vtex/faststore/components',\n component: SelectPositioner,\n editor: { label: 'Select Positioner', category: 'layout' },\n schema: {\n side: { type: ['top', 'bottom', 'left', 'right'] as const, default: 'bottom', label: 'Side' },\n align: { type: ['start', 'center', 'end'] as const, default: 'center', label: 'Align' },\n sideOffset: { type: 'number', default: 0, label: 'Side Offset' },\n alignItemWithTrigger: { type: 'boolean', default: true, label: 'Align Item With Trigger' },\n },\n guideline:\n 'Positions the popup relative to the trigger. Use side and align to control placement; alignItemWithTrigger=true overlaps the trigger to align the selected item visually.',\n});\n\nexport const SelectScrollUpArrowDefinition = defineComponent<SelectScrollUpArrowProps>({\n name: 'SelectScrollUpArrow',\n importPath: '@vtex/faststore/components',\n component: SelectScrollUpArrow,\n editor: { label: 'Select Scroll Up Arrow', category: 'layout' },\n schema: {\n keepMounted: { type: 'boolean', default: false, label: 'Keep Mounted' },\n },\n guideline: 'Scrolls the list upward when hovered. Appears automatically when the list overflows at the top.',\n});\n\nexport const SelectPopupDefinition = defineComponent<SelectPopupProps>({\n name: 'SelectPopup',\n importPath: '@vtex/faststore/components',\n component: SelectPopup,\n editor: { label: 'Select Popup', category: 'layout' },\n schema: {},\n guideline: 'Visible container for the select list. Apply background, shadow, and border styles here.',\n});\n\nexport const SelectArrowDefinition = defineComponent<SelectArrowProps>({\n name: 'SelectArrow',\n importPath: '@vtex/faststore/components',\n component: SelectArrow,\n editor: { label: 'Select Arrow', category: 'layout' },\n schema: {},\n guideline:\n 'Pointing arrow attached to the popup indicating the anchor. Optional — omit when not using an arrow indicator.',\n});\n\nexport const SelectListDefinition = defineComponent<SelectListProps>({\n name: 'SelectList',\n importPath: '@vtex/faststore/components',\n component: SelectList,\n editor: { label: 'Select List', category: 'layout' },\n schema: {},\n guideline: 'Scrollable container for all Select.Item elements. Apply max-height and overflow for scrolling.',\n});\n\nexport const SelectItemDefinition = defineComponent<SelectItemProps>({\n name: 'SelectItem',\n importPath: '@vtex/faststore/components',\n component: SelectItem,\n editor: { label: 'Select Item', category: 'layout' },\n schema: {\n value: { type: 'string', label: 'Value' },\n disabled: { type: 'boolean', default: false, label: 'Disabled' },\n },\n guideline:\n 'One selectable option. Requires a unique value prop. Style selected and highlighted states via data-selected and data-highlighted attributes.',\n});\n\nexport const SelectItemTextDefinition = defineComponent<SelectItemTextProps>({\n name: 'SelectItemText',\n importPath: '@vtex/faststore/components',\n component: SelectItemText,\n editor: { label: 'Select Item Text', category: 'layout' },\n schema: {},\n guideline: 'The visible text label of an item. Base UI uses this for keyboard navigation matching.',\n});\n\nexport const SelectItemIndicatorDefinition = defineComponent<SelectItemIndicatorProps>({\n name: 'SelectItemIndicator',\n importPath: '@vtex/faststore/components',\n component: SelectItemIndicator,\n editor: { label: 'Select Item Indicator', category: 'layout' },\n schema: {\n keepMounted: { type: 'boolean', default: false, label: 'Keep Mounted' },\n },\n guideline: 'Checkmark or indicator shown only on the selected item. Set keepMounted=true to animate in/out.',\n});\n\nexport const SelectSeparatorDefinition = defineComponent<SelectSeparatorProps>({\n name: 'SelectSeparator',\n importPath: '@vtex/faststore/components',\n component: SelectSeparator,\n editor: { label: 'Select Separator', category: 'layout' },\n schema: {},\n guideline: 'Visual divider between items or groups. Use between unrelated option groups.',\n});\n\nexport const SelectGroupDefinition = defineComponent<SelectGroupProps>({\n name: 'SelectGroup',\n importPath: '@vtex/faststore/components',\n component: SelectGroup,\n editor: { label: 'Select Group', category: 'layout' },\n schema: {},\n guideline: 'Groups related items under a shared SelectGroupLabel for semantic and visual grouping.',\n});\n\nexport const SelectGroupLabelDefinition = defineComponent<SelectGroupLabelProps>({\n name: 'SelectGroupLabel',\n importPath: '@vtex/faststore/components',\n component: SelectGroupLabel,\n editor: { label: 'Select Group Label', category: 'layout' },\n schema: {},\n guideline: 'Non-interactive label for a Select.Group. Announced by screen readers as a group name.',\n});\n\nexport const SelectScrollDownArrowDefinition = defineComponent<SelectScrollDownArrowProps>({\n name: 'SelectScrollDownArrow',\n importPath: '@vtex/faststore/components',\n component: SelectScrollDownArrow,\n editor: { label: 'Select Scroll Down Arrow', category: 'layout' },\n schema: {\n keepMounted: { type: 'boolean', default: false, label: 'Keep Mounted' },\n },\n guideline: 'Scrolls the list downward when hovered. Appears when the list overflows at the bottom.',\n});\n\nexport function SelectRoot({\n disabled = false,\n modal = true,\n required = false,\n readOnly = false,\n children,\n ...props\n}: SelectRootProps) {\n return (\n <BaseSelect.Root {...props} disabled={disabled} modal={modal} required={required} readOnly={readOnly}>\n {children}\n </BaseSelect.Root>\n );\n}\n\nexport function SelectLabel({ className, children, ...props }: SelectLabelProps) {\n return (\n <BaseSelect.Label {...props} className={className} data-fs-select-label=\"\">\n {children}\n </BaseSelect.Label>\n );\n}\n\nexport function SelectTrigger({ disabled = false, className, children, ...props }: SelectTriggerProps) {\n return (\n <BaseSelect.Trigger {...props} disabled={disabled} className={className} data-fs-select-trigger=\"\">\n {children}\n </BaseSelect.Trigger>\n );\n}\n\nexport function SelectValue({ placeholder, className, children, ...props }: SelectValueProps) {\n return (\n <BaseSelect.Value {...props} placeholder={placeholder} className={className} data-fs-select-value=\"\">\n {children}\n </BaseSelect.Value>\n );\n}\n\nexport function SelectIcon({ className, children, ...props }: SelectIconProps) {\n return (\n <BaseSelect.Icon {...props} className={className} data-fs-select-icon=\"\">\n {children}\n </BaseSelect.Icon>\n );\n}\n\nexport function SelectPortal({ children }: SelectPortalProps) {\n return <BaseSelect.Portal>{children}</BaseSelect.Portal>;\n}\n\nexport function SelectBackdrop({ className, children, ...props }: SelectBackdropProps) {\n return (\n <BaseSelect.Backdrop {...props} className={className} data-fs-select-backdrop=\"\">\n {children}\n </BaseSelect.Backdrop>\n );\n}\n\nexport function SelectPositioner({\n side = 'bottom',\n align = 'center',\n sideOffset = 0,\n alignItemWithTrigger = true,\n className,\n children,\n ...props\n}: SelectPositionerProps) {\n return (\n <BaseSelect.Positioner\n {...props}\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className={className}\n data-fs-select-positioner=\"\"\n >\n {children}\n </BaseSelect.Positioner>\n );\n}\n\nexport function SelectScrollUpArrow({ keepMounted = false, className, children, ...props }: SelectScrollUpArrowProps) {\n return (\n <BaseSelect.ScrollUpArrow\n {...props}\n keepMounted={keepMounted}\n className={className}\n data-fs-select-scroll-up-arrow=\"\"\n >\n {children}\n </BaseSelect.ScrollUpArrow>\n );\n}\n\nexport function SelectPopup({ className, children, ...props }: SelectPopupProps) {\n return (\n <BaseSelect.Popup {...props} className={className} data-fs-select-popup=\"\">\n {children}\n </BaseSelect.Popup>\n );\n}\n\nexport function SelectArrow({ className, children, ...props }: SelectArrowProps) {\n return (\n <BaseSelect.Arrow {...props} className={className} data-fs-select-arrow=\"\">\n {children}\n </BaseSelect.Arrow>\n );\n}\n\nexport function SelectList({ className, children, ...props }: SelectListProps) {\n return (\n <BaseSelect.List {...props} className={className} data-fs-select-list=\"\">\n {children}\n </BaseSelect.List>\n );\n}\n\nexport function SelectItem({ value, disabled = false, label, className, children, ...props }: SelectItemProps) {\n return (\n <BaseSelect.Item\n {...props}\n value={value}\n disabled={disabled}\n label={label}\n className={className}\n data-fs-select-item=\"\"\n >\n {children}\n </BaseSelect.Item>\n );\n}\n\nexport function SelectItemText({ className, children, ...props }: SelectItemTextProps) {\n return (\n <BaseSelect.ItemText {...props} className={className} data-fs-select-item-text=\"\">\n {children}\n </BaseSelect.ItemText>\n );\n}\n\nexport function SelectItemIndicator({ keepMounted = false, className, children, ...props }: SelectItemIndicatorProps) {\n return (\n <BaseSelect.ItemIndicator\n {...props}\n keepMounted={keepMounted}\n className={className}\n data-fs-select-item-indicator=\"\"\n >\n {children}\n </BaseSelect.ItemIndicator>\n );\n}\n\nexport function SelectSeparator({ className, children, ...props }: SelectSeparatorProps) {\n return (\n <BaseSelect.Separator {...props} className={className} data-fs-select-separator=\"\">\n {children}\n </BaseSelect.Separator>\n );\n}\n\nexport function SelectGroup({ className, children, ...props }: SelectGroupProps) {\n return (\n <BaseSelect.Group {...props} className={className} data-fs-select-group=\"\">\n {children}\n </BaseSelect.Group>\n );\n}\n\nexport function SelectGroupLabel({ className, children, ...props }: SelectGroupLabelProps) {\n return (\n <BaseSelect.GroupLabel {...props} className={className} data-fs-select-group-label=\"\">\n {children}\n </BaseSelect.GroupLabel>\n );\n}\n\nexport function SelectScrollDownArrow({\n keepMounted = false,\n className,\n children,\n ...props\n}: SelectScrollDownArrowProps) {\n return (\n <BaseSelect.ScrollDownArrow\n {...props}\n keepMounted={keepMounted}\n className={className}\n data-fs-select-scroll-down-arrow=\"\"\n >\n {children}\n </BaseSelect.ScrollDownArrow>\n );\n}\n\nexport const Select = {\n Root: SelectRoot,\n Label: SelectLabel,\n Trigger: SelectTrigger,\n Value: SelectValue,\n Icon: SelectIcon,\n Portal: SelectPortal,\n Backdrop: SelectBackdrop,\n Positioner: SelectPositioner,\n ScrollUpArrow: SelectScrollUpArrow,\n Popup: SelectPopup,\n Arrow: SelectArrow,\n List: SelectList,\n Item: SelectItem,\n ItemText: SelectItemText,\n ItemIndicator: SelectItemIndicator,\n Separator: SelectSeparator,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n ScrollDownArrow: SelectScrollDownArrow,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"select.js","names":["BaseSelect","Select"],"sources":["../../../src/particles/select/select.tsx"],"sourcesContent":["'use client';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport { defineComponent } from '@vtex/fs-core';\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport type SelectSide = 'top' | 'bottom' | 'left' | 'right';\nexport type SelectAlign = 'start' | 'center' | 'end';\n\nexport type SelectRootProps = {\n disabled?: boolean;\n modal?: boolean;\n required?: boolean;\n readOnly?: boolean;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string | null) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n name?: string;\n /** Forwarded to Base UI's hidden `<input>` — turns on browser autofill for the field. */\n autoComplete?: string;\n children?: ReactNode;\n};\n\nexport type SelectLabelProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectTriggerProps = ComponentPropsWithRef<'button'> & {\n disabled?: boolean;\n};\n\nexport type SelectValueProps = Omit<ComponentPropsWithRef<'span'>, 'children'> & {\n placeholder?: string;\n /** Rendered content, or a render function receiving the current value (Base UI resolves the\n * matching item's label automatically when omitted, but only once that item has mounted at\n * least once — e.g. after the popup has been opened — so pass a render function when the\n * label must be correct before the shopper ever opens the dropdown). */\n children?: ReactNode | ((value: string | null) => ReactNode);\n};\n\nexport type SelectIconProps = ComponentPropsWithRef<'span'>;\n\nexport type SelectPortalProps = {\n children?: ReactNode;\n};\n\nexport type SelectBackdropProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectPositionerProps = ComponentPropsWithRef<'div'> & {\n side?: SelectSide;\n align?: SelectAlign;\n sideOffset?: number;\n alignItemWithTrigger?: boolean;\n};\n\nexport type SelectScrollUpArrowProps = ComponentPropsWithRef<'div'> & {\n keepMounted?: boolean;\n};\n\nexport type SelectPopupProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectArrowProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectListProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectItemProps = ComponentPropsWithRef<'div'> & {\n value?: string;\n disabled?: boolean;\n label?: string;\n};\n\nexport type SelectItemTextProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectItemIndicatorProps = ComponentPropsWithRef<'span'> & {\n keepMounted?: boolean;\n};\n\nexport type SelectSeparatorProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectGroupProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectGroupLabelProps = ComponentPropsWithRef<'div'>;\n\nexport type SelectScrollDownArrowProps = ComponentPropsWithRef<'div'> & {\n keepMounted?: boolean;\n};\n\nexport const SelectRootDefinition = defineComponent<SelectRootProps>({\n name: 'SelectRoot',\n importPath: '@vtex/faststore/components',\n component: SelectRoot,\n editor: { label: 'Select Root', category: 'layout' },\n schema: {\n disabled: { type: 'boolean', default: false, label: 'Disabled' },\n modal: { type: 'boolean', default: true, label: 'Modal' },\n required: { type: 'boolean', default: false, label: 'Required' },\n readOnly: { type: 'boolean', default: false, label: 'Read Only' },\n },\n guideline:\n 'Root of a select dropdown. Manages selection state, modal overlay, and form integration. Compose as: SelectRoot > (SelectLabel + SelectTrigger > (SelectValue + SelectIcon) + SelectPortal > (SelectBackdrop + SelectPositioner > SelectPopup > (SelectScrollUpArrow + SelectList > [SelectItem > (SelectItemText + SelectItemIndicator)] + SelectScrollDownArrow))). Use SelectGroup > (SelectGroupLabel + [SelectItem]) for grouped options. Set modal=false to allow interacting with background elements while open.',\n});\n\nexport const SelectLabelDefinition = defineComponent<SelectLabelProps>({\n name: 'SelectLabel',\n importPath: '@vtex/faststore/components',\n component: SelectLabel,\n editor: { label: 'Select Label', category: 'layout' },\n schema: {},\n guideline:\n 'Accessible label associated with the trigger. Always place outside Select.Trigger so screen readers announce it separately.',\n});\n\nexport const SelectTriggerDefinition = defineComponent<SelectTriggerProps>({\n name: 'SelectTrigger',\n importPath: '@vtex/faststore/components',\n component: SelectTrigger,\n editor: { label: 'Select Trigger', category: 'action' },\n schema: {\n disabled: { type: 'boolean', default: false, label: 'Disabled' },\n },\n guideline:\n 'Opens and closes the popup on click. Use data-open and data-placeholder CSS attributes for open-state and empty-state styling.',\n});\n\nexport const SelectValueDefinition = defineComponent<SelectValueProps>({\n name: 'SelectValue',\n importPath: '@vtex/faststore/components',\n component: SelectValue,\n editor: { label: 'Select Value', category: 'layout' },\n schema: {},\n guideline:\n \"Renders the selected item's text, or placeholder when nothing is selected. Style the placeholder state via [data-fs-select-value][data-placeholder].\",\n});\n\nexport const SelectIconDefinition = defineComponent<SelectIconProps>({\n name: 'SelectIcon',\n importPath: '@vtex/faststore/components',\n component: SelectIcon,\n editor: { label: 'Select Icon', category: 'layout' },\n schema: {},\n guideline:\n 'Decorative indicator (e.g. chevron) inside the trigger. Rotates or changes when the popup opens via data-open.',\n});\n\nexport const SelectPortalDefinition = defineComponent<SelectPortalProps>({\n name: 'SelectPortal',\n importPath: '@vtex/faststore/components',\n component: SelectPortal,\n editor: { label: 'Select Portal', category: 'layout' },\n schema: {},\n guideline:\n 'Teleports popup content to <body>. Always wrap Select.Positioner with this to avoid overflow/z-index issues.',\n});\n\nexport const SelectBackdropDefinition = defineComponent<SelectBackdropProps>({\n name: 'SelectBackdrop',\n importPath: '@vtex/faststore/components',\n component: SelectBackdrop,\n editor: { label: 'Select Backdrop', category: 'layout' },\n schema: {},\n guideline:\n 'Invisible overlay that closes the select when clicked outside. Required when modal=true to trap interaction.',\n});\n\nexport const SelectPositionerDefinition = defineComponent<SelectPositionerProps>({\n name: 'SelectPositioner',\n importPath: '@vtex/faststore/components',\n component: SelectPositioner,\n editor: { label: 'Select Positioner', category: 'layout' },\n schema: {\n side: { type: ['top', 'bottom', 'left', 'right'] as const, default: 'bottom', label: 'Side' },\n align: { type: ['start', 'center', 'end'] as const, default: 'center', label: 'Align' },\n sideOffset: { type: 'number', default: 0, label: 'Side Offset' },\n alignItemWithTrigger: { type: 'boolean', default: true, label: 'Align Item With Trigger' },\n },\n guideline:\n 'Positions the popup relative to the trigger. Use side and align to control placement; alignItemWithTrigger=true overlaps the trigger to align the selected item visually.',\n});\n\nexport const SelectScrollUpArrowDefinition = defineComponent<SelectScrollUpArrowProps>({\n name: 'SelectScrollUpArrow',\n importPath: '@vtex/faststore/components',\n component: SelectScrollUpArrow,\n editor: { label: 'Select Scroll Up Arrow', category: 'layout' },\n schema: {\n keepMounted: { type: 'boolean', default: false, label: 'Keep Mounted' },\n },\n guideline: 'Scrolls the list upward when hovered. Appears automatically when the list overflows at the top.',\n});\n\nexport const SelectPopupDefinition = defineComponent<SelectPopupProps>({\n name: 'SelectPopup',\n importPath: '@vtex/faststore/components',\n component: SelectPopup,\n editor: { label: 'Select Popup', category: 'layout' },\n schema: {},\n guideline: 'Visible container for the select list. Apply background, shadow, and border styles here.',\n});\n\nexport const SelectArrowDefinition = defineComponent<SelectArrowProps>({\n name: 'SelectArrow',\n importPath: '@vtex/faststore/components',\n component: SelectArrow,\n editor: { label: 'Select Arrow', category: 'layout' },\n schema: {},\n guideline:\n 'Pointing arrow attached to the popup indicating the anchor. Optional — omit when not using an arrow indicator.',\n});\n\nexport const SelectListDefinition = defineComponent<SelectListProps>({\n name: 'SelectList',\n importPath: '@vtex/faststore/components',\n component: SelectList,\n editor: { label: 'Select List', category: 'layout' },\n schema: {},\n guideline: 'Scrollable container for all Select.Item elements. Apply max-height and overflow for scrolling.',\n});\n\nexport const SelectItemDefinition = defineComponent<SelectItemProps>({\n name: 'SelectItem',\n importPath: '@vtex/faststore/components',\n component: SelectItem,\n editor: { label: 'Select Item', category: 'layout' },\n schema: {\n value: { type: 'string', label: 'Value' },\n disabled: { type: 'boolean', default: false, label: 'Disabled' },\n },\n guideline:\n 'One selectable option. Requires a unique value prop. Style selected and highlighted states via data-selected and data-highlighted attributes.',\n});\n\nexport const SelectItemTextDefinition = defineComponent<SelectItemTextProps>({\n name: 'SelectItemText',\n importPath: '@vtex/faststore/components',\n component: SelectItemText,\n editor: { label: 'Select Item Text', category: 'layout' },\n schema: {},\n guideline: 'The visible text label of an item. Base UI uses this for keyboard navigation matching.',\n});\n\nexport const SelectItemIndicatorDefinition = defineComponent<SelectItemIndicatorProps>({\n name: 'SelectItemIndicator',\n importPath: '@vtex/faststore/components',\n component: SelectItemIndicator,\n editor: { label: 'Select Item Indicator', category: 'layout' },\n schema: {\n keepMounted: { type: 'boolean', default: false, label: 'Keep Mounted' },\n },\n guideline: 'Checkmark or indicator shown only on the selected item. Set keepMounted=true to animate in/out.',\n});\n\nexport const SelectSeparatorDefinition = defineComponent<SelectSeparatorProps>({\n name: 'SelectSeparator',\n importPath: '@vtex/faststore/components',\n component: SelectSeparator,\n editor: { label: 'Select Separator', category: 'layout' },\n schema: {},\n guideline: 'Visual divider between items or groups. Use between unrelated option groups.',\n});\n\nexport const SelectGroupDefinition = defineComponent<SelectGroupProps>({\n name: 'SelectGroup',\n importPath: '@vtex/faststore/components',\n component: SelectGroup,\n editor: { label: 'Select Group', category: 'layout' },\n schema: {},\n guideline: 'Groups related items under a shared SelectGroupLabel for semantic and visual grouping.',\n});\n\nexport const SelectGroupLabelDefinition = defineComponent<SelectGroupLabelProps>({\n name: 'SelectGroupLabel',\n importPath: '@vtex/faststore/components',\n component: SelectGroupLabel,\n editor: { label: 'Select Group Label', category: 'layout' },\n schema: {},\n guideline: 'Non-interactive label for a Select.Group. Announced by screen readers as a group name.',\n});\n\nexport const SelectScrollDownArrowDefinition = defineComponent<SelectScrollDownArrowProps>({\n name: 'SelectScrollDownArrow',\n importPath: '@vtex/faststore/components',\n component: SelectScrollDownArrow,\n editor: { label: 'Select Scroll Down Arrow', category: 'layout' },\n schema: {\n keepMounted: { type: 'boolean', default: false, label: 'Keep Mounted' },\n },\n guideline: 'Scrolls the list downward when hovered. Appears when the list overflows at the bottom.',\n});\n\nexport function SelectRoot({\n disabled = false,\n modal = true,\n required = false,\n readOnly = false,\n children,\n ...props\n}: SelectRootProps) {\n return (\n <BaseSelect.Root {...props} disabled={disabled} modal={modal} required={required} readOnly={readOnly}>\n {children}\n </BaseSelect.Root>\n );\n}\n\nexport function SelectLabel({ className, children, ...props }: SelectLabelProps) {\n return (\n <BaseSelect.Label {...props} className={className} data-fs-select-label=\"\">\n {children}\n </BaseSelect.Label>\n );\n}\n\nexport function SelectTrigger({ disabled = false, className, children, ...props }: SelectTriggerProps) {\n return (\n <BaseSelect.Trigger {...props} disabled={disabled} className={className} data-fs-select-trigger=\"\">\n {children}\n </BaseSelect.Trigger>\n );\n}\n\nexport function SelectValue({ placeholder, className, children, ...props }: SelectValueProps) {\n return (\n <BaseSelect.Value {...props} placeholder={placeholder} className={className} data-fs-select-value=\"\">\n {children}\n </BaseSelect.Value>\n );\n}\n\nexport function SelectIcon({ className, children, ...props }: SelectIconProps) {\n return (\n <BaseSelect.Icon {...props} className={className} data-fs-select-icon=\"\">\n {children}\n </BaseSelect.Icon>\n );\n}\n\nexport function SelectPortal({ children }: SelectPortalProps) {\n return <BaseSelect.Portal>{children}</BaseSelect.Portal>;\n}\n\nexport function SelectBackdrop({ className, children, ...props }: SelectBackdropProps) {\n return (\n <BaseSelect.Backdrop {...props} className={className} data-fs-select-backdrop=\"\">\n {children}\n </BaseSelect.Backdrop>\n );\n}\n\nexport function SelectPositioner({\n side = 'bottom',\n align = 'center',\n sideOffset = 0,\n alignItemWithTrigger = true,\n className,\n children,\n ...props\n}: SelectPositionerProps) {\n return (\n <BaseSelect.Positioner\n {...props}\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className={className}\n data-fs-select-positioner=\"\"\n >\n {children}\n </BaseSelect.Positioner>\n );\n}\n\nexport function SelectScrollUpArrow({ keepMounted = false, className, children, ...props }: SelectScrollUpArrowProps) {\n return (\n <BaseSelect.ScrollUpArrow\n {...props}\n keepMounted={keepMounted}\n className={className}\n data-fs-select-scroll-up-arrow=\"\"\n >\n {children}\n </BaseSelect.ScrollUpArrow>\n );\n}\n\nexport function SelectPopup({ className, children, ...props }: SelectPopupProps) {\n return (\n <BaseSelect.Popup {...props} className={className} data-fs-select-popup=\"\">\n {children}\n </BaseSelect.Popup>\n );\n}\n\nexport function SelectArrow({ className, children, ...props }: SelectArrowProps) {\n return (\n <BaseSelect.Arrow {...props} className={className} data-fs-select-arrow=\"\">\n {children}\n </BaseSelect.Arrow>\n );\n}\n\nexport function SelectList({ className, children, ...props }: SelectListProps) {\n return (\n <BaseSelect.List {...props} className={className} data-fs-select-list=\"\">\n {children}\n </BaseSelect.List>\n );\n}\n\nexport function SelectItem({ value, disabled = false, label, className, children, ...props }: SelectItemProps) {\n return (\n <BaseSelect.Item\n {...props}\n value={value}\n disabled={disabled}\n label={label}\n className={className}\n data-fs-select-item=\"\"\n >\n {children}\n </BaseSelect.Item>\n );\n}\n\nexport function SelectItemText({ className, children, ...props }: SelectItemTextProps) {\n return (\n <BaseSelect.ItemText {...props} className={className} data-fs-select-item-text=\"\">\n {children}\n </BaseSelect.ItemText>\n );\n}\n\nexport function SelectItemIndicator({ keepMounted = false, className, children, ...props }: SelectItemIndicatorProps) {\n return (\n <BaseSelect.ItemIndicator\n {...props}\n keepMounted={keepMounted}\n className={className}\n data-fs-select-item-indicator=\"\"\n >\n {children}\n </BaseSelect.ItemIndicator>\n );\n}\n\nexport function SelectSeparator({ className, children, ...props }: SelectSeparatorProps) {\n return (\n <BaseSelect.Separator {...props} className={className} data-fs-select-separator=\"\">\n {children}\n </BaseSelect.Separator>\n );\n}\n\nexport function SelectGroup({ className, children, ...props }: SelectGroupProps) {\n return (\n <BaseSelect.Group {...props} className={className} data-fs-select-group=\"\">\n {children}\n </BaseSelect.Group>\n );\n}\n\nexport function SelectGroupLabel({ className, children, ...props }: SelectGroupLabelProps) {\n return (\n <BaseSelect.GroupLabel {...props} className={className} data-fs-select-group-label=\"\">\n {children}\n </BaseSelect.GroupLabel>\n );\n}\n\nexport function SelectScrollDownArrow({\n keepMounted = false,\n className,\n children,\n ...props\n}: SelectScrollDownArrowProps) {\n return (\n <BaseSelect.ScrollDownArrow\n {...props}\n keepMounted={keepMounted}\n className={className}\n data-fs-select-scroll-down-arrow=\"\"\n >\n {children}\n </BaseSelect.ScrollDownArrow>\n );\n}\n\nexport const Select = {\n Root: SelectRoot,\n Label: SelectLabel,\n Trigger: SelectTrigger,\n Value: SelectValue,\n Icon: SelectIcon,\n Portal: SelectPortal,\n Backdrop: SelectBackdrop,\n Positioner: SelectPositioner,\n ScrollUpArrow: SelectScrollUpArrow,\n Popup: SelectPopup,\n Arrow: SelectArrow,\n List: SelectList,\n Item: SelectItem,\n ItemText: SelectItemText,\n ItemIndicator: SelectItemIndicator,\n Separator: SelectSeparator,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n ScrollDownArrow: SelectScrollDownArrow,\n};\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { useMemo } from "react";
3
+ //#region src/particles/shared/compose-refs.ts
4
+ function setRef(ref, node) {
5
+ if (typeof ref === "function") ref(node);
6
+ else if (ref) ref.current = node;
7
+ }
8
+ /**
9
+ * Fans one element out to several refs, so a caller's ref and react-hook-form's both receive it —
10
+ * neither silently replaces the other. Memoised on the individual refs so a stable caller ref and a
11
+ * stable react-hook-form field.ref (per registered name) yield a stable callback across renders.
12
+ */
13
+ function useComposedRef(...refs) {
14
+ return useMemo(() => (node) => {
15
+ for (const ref of refs) setRef(ref, node);
16
+ }, [...refs]);
17
+ }
18
+ //#endregion
19
+ export { useComposedRef };
20
+
21
+ //# sourceMappingURL=compose-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-refs.js","names":[],"sources":["../../../src/particles/shared/compose-refs.ts"],"sourcesContent":["'use client';\nimport type { Ref, RefCallback } from 'react';\nimport { useMemo } from 'react';\n\nfunction setRef<T>(ref: Ref<T> | undefined, node: T | null): void {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n}\n\n/**\n * Fans one element out to several refs, so a caller's ref and react-hook-form's both receive it —\n * neither silently replaces the other. Memoised on the individual refs so a stable caller ref and a\n * stable react-hook-form field.ref (per registered name) yield a stable callback across renders.\n */\nexport function useComposedRef<T>(...refs: (Ref<T> | undefined)[]): RefCallback<T> {\n // `refs` is the rest-parameter array itself, always a fresh reference; spreading its elements into\n // the dependency list below compares each individual ref instead, so identity is stable when they are.\n // biome-ignore lint/correctness/useExhaustiveDependencies: deps intentionally track the individual variadic refs, not the (always-new) refs array itself\n return useMemo(\n () => (node: T | null) => {\n for (const ref of refs) {\n setRef(ref, node);\n }\n },\n [...refs],\n );\n}\n"],"mappings":";;;AAIA,SAAS,OAAU,KAAyB,MAAsB;CAChE,IAAI,OAAO,QAAQ,YACjB,IAAI,IAAI;MACH,IAAI,KACT,IAAI,UAAU;AAElB;;;;;;AAOA,SAAgB,eAAkB,GAAG,MAA8C;CAIjF,OAAO,eACE,SAAmB;EACxB,KAAK,MAAM,OAAO,MAChB,OAAO,KAAK,IAAI;CAEpB,GACA,CAAC,GAAG,IAAI,CACV;AACF"}