@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.
- package/CHANGELOG.md +67 -0
- package/dist/actions.json +181 -0
- package/dist/catalog.json +1595 -481
- package/dist/client.d.ts +2 -1
- package/dist/client.js +2 -1
- package/dist/components.d.ts +31 -7
- package/dist/components.js +35 -13
- package/dist/content-types.json +73 -0
- package/dist/docs/access-code-sign-in.md +1 -1
- package/dist/docs/account-access-gate.md +153 -0
- package/dist/docs/account-entry-point.md +1 -2
- package/dist/docs/account-menu.md +164 -0
- package/dist/docs/address-summary.md +24 -3
- package/dist/docs/alert-dialog.md +204 -0
- package/dist/docs/billing-address.md +284 -0
- package/dist/docs/buy-button.md +1 -1
- package/dist/docs/card-entry.md +250 -0
- package/dist/docs/cardholder-document.md +142 -0
- package/dist/docs/cart.md +1 -1
- package/dist/docs/client-preferences-fieldset.md +148 -0
- package/dist/docs/client-preferences.md +2 -1
- package/dist/docs/client-profile-fieldset.md +184 -0
- package/dist/docs/client-profile.md +1 -1
- package/dist/docs/document-field.md +58 -4
- package/dist/docs/field.md +317 -0
- package/dist/docs/form.md +307 -0
- package/dist/docs/identity-edit.md +6 -6
- package/dist/docs/identity-summary.md +5 -5
- package/dist/docs/installments.md +248 -0
- package/dist/docs/my-account-profile.md +1 -0
- package/dist/docs/order-placed-payment-summary.md +138 -0
- package/dist/docs/payment-method-badges.md +232 -0
- package/dist/docs/payment-methods.md +1 -0
- package/dist/docs/payment.md +218 -0
- package/dist/docs/phone-field.md +58 -4
- package/dist/docs/place-order.md +157 -0
- package/dist/docs/save-card.md +186 -0
- package/dist/docs/saved-cards.md +218 -0
- package/dist/docs/select.md +465 -0
- package/dist/docs/session.md +1 -1
- package/dist/docs/shipping-address.md +110 -258
- package/dist/docs/sign-in-redirect.md +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/internal/client.d.ts +3 -1
- package/dist/internal/client.js +3 -1
- package/dist/matter/access-code-sign-in/access-code-sign-in.js +9 -8
- package/dist/matter/access-code-sign-in/access-code-sign-in.js.map +1 -1
- package/dist/matter/account-access-gate/account-access-gate.d.ts +86 -0
- package/dist/matter/account-access-gate/account-access-gate.js +283 -0
- package/dist/matter/account-access-gate/account-access-gate.js.map +1 -0
- package/dist/matter/account-access-gate/sign-out-intent.d.ts +17 -0
- package/dist/matter/account-access-gate/sign-out-intent.js +62 -0
- package/dist/matter/account-access-gate/sign-out-intent.js.map +1 -0
- package/dist/matter/account-entry-point/account-entry-point.js +2 -2
- package/dist/matter/account-entry-point/account-entry-point.js.map +1 -1
- package/dist/matter/account-menu/account-menu.d.ts +88 -0
- package/dist/matter/account-menu/account-menu.js +246 -0
- package/dist/matter/account-menu/account-menu.js.map +1 -0
- package/dist/matter/billing-address/billing-address.d.ts +165 -0
- package/dist/matter/billing-address/billing-address.js +408 -0
- package/dist/matter/billing-address/billing-address.js.map +1 -0
- package/dist/matter/card-entry/card-capture.d.ts +25 -0
- package/dist/matter/card-entry/card-capture.js +25 -0
- package/dist/matter/card-entry/card-capture.js.map +1 -0
- package/dist/matter/card-entry/card-entry.d.ts +120 -0
- package/dist/matter/card-entry/card-entry.js +832 -0
- package/dist/matter/card-entry/card-entry.js.map +1 -0
- package/dist/matter/cardholder-document/cardholder-document.d.ts +45 -0
- package/dist/matter/cardholder-document/cardholder-document.js +70 -0
- package/dist/matter/cardholder-document/cardholder-document.js.map +1 -0
- package/dist/matter/cart/cart.d.ts +1 -1
- package/dist/matter/cart/cart.js +2 -2
- package/dist/matter/cart/cart.js.map +1 -1
- package/dist/matter/client-preferences/client-preferences-fieldset.d.ts +77 -0
- package/dist/matter/client-preferences/client-preferences-fieldset.js +299 -0
- package/dist/matter/client-preferences/client-preferences-fieldset.js.map +1 -0
- package/dist/matter/client-preferences/client-preferences.d.ts +3 -5
- package/dist/matter/client-preferences/client-preferences.js +6 -6
- package/dist/matter/client-preferences/client-preferences.js.map +1 -1
- package/dist/matter/client-profile/client-profile.d.ts +4 -6
- package/dist/matter/client-profile/client-profile.js +9 -6
- package/dist/matter/client-profile/client-profile.js.map +1 -1
- package/dist/matter/client-profile-form/client-profile-fieldset.d.ts +119 -0
- package/dist/matter/client-profile-form/client-profile-fieldset.js +488 -0
- package/dist/matter/client-profile-form/client-profile-fieldset.js.map +1 -0
- package/dist/matter/delivery-options/delivery-options.js.map +1 -1
- package/dist/matter/identity-edit/identity-edit.js +2 -2
- package/dist/matter/identity-edit/identity-edit.js.map +1 -1
- package/dist/matter/identity-summary/identity-summary.js +2 -2
- package/dist/matter/identity-summary/identity-summary.js.map +1 -1
- package/dist/matter/installments/installments-select.d.ts +42 -0
- package/dist/matter/installments/installments-select.js +167 -0
- package/dist/matter/installments/installments-select.js.map +1 -0
- package/dist/matter/installments/installments.d.ts +58 -0
- package/dist/matter/installments/installments.js +176 -0
- package/dist/matter/installments/installments.js.map +1 -0
- package/dist/matter/installments/use-installments-selection.d.ts +29 -0
- package/dist/matter/installments/use-installments-selection.js +95 -0
- package/dist/matter/installments/use-installments-selection.js.map +1 -0
- package/dist/matter/my-account-profile/my-account-profile.js +5 -5
- package/dist/matter/my-account-profile/my-account-profile.js.map +1 -1
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.d.ts +63 -0
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js +305 -0
- package/dist/matter/order-placed-payment-summary/order-placed-payment-summary.js.map +1 -0
- package/dist/matter/payment/payment-card-capture.d.ts +19 -0
- package/dist/matter/payment/payment-card-capture.js +129 -0
- package/dist/matter/payment/payment-card-capture.js.map +1 -0
- package/dist/matter/payment/payment-controller.d.ts +24 -0
- package/dist/matter/payment/payment-controller.js +107 -0
- package/dist/matter/payment/payment-controller.js.map +1 -0
- package/dist/matter/payment/payment-method-badges.d.ts +57 -0
- package/dist/matter/payment/payment-method-badges.js +192 -0
- package/dist/matter/payment/payment-method-badges.js.map +1 -0
- package/dist/matter/payment/payment.d.ts +89 -0
- package/dist/matter/payment/payment.js +263 -0
- package/dist/matter/payment/payment.js.map +1 -0
- package/dist/matter/payment/use-payment-method-selection.d.ts +302 -0
- package/dist/matter/payment/use-payment-method-selection.js +458 -0
- package/dist/matter/payment/use-payment-method-selection.js.map +1 -0
- package/dist/matter/payment/use-payment-submit-gate.d.ts +111 -0
- package/dist/matter/payment/use-payment-submit-gate.js +144 -0
- package/dist/matter/payment/use-payment-submit-gate.js.map +1 -0
- package/dist/matter/place-order/place-order.d.ts +74 -0
- package/dist/matter/place-order/place-order.js +379 -0
- package/dist/matter/place-order/place-order.js.map +1 -0
- package/dist/matter/product-list/product-list.d.ts +1 -0
- package/dist/matter/product-list/product-list.js.map +1 -1
- package/dist/matter/product-shelf/product-shelf.d.ts +1 -0
- package/dist/matter/product-shelf/product-shelf.js +2 -0
- package/dist/matter/product-shelf/product-shelf.js.map +1 -1
- package/dist/matter/region/region.js +1 -1
- package/dist/matter/region/region.js.map +1 -1
- package/dist/matter/save-card/save-card.d.ts +49 -0
- package/dist/matter/save-card/save-card.js +188 -0
- package/dist/matter/save-card/save-card.js.map +1 -0
- package/dist/matter/saved-cards/saved-cards.d.ts +79 -0
- package/dist/matter/saved-cards/saved-cards.js +387 -0
- package/dist/matter/saved-cards/saved-cards.js.map +1 -0
- package/dist/matter/shipping-address/country-descriptors.js +20 -10
- package/dist/matter/shipping-address/country-descriptors.js.map +1 -1
- package/dist/matter/shipping-address/shipping-address.d.ts +113 -174
- package/dist/matter/shipping-address/shipping-address.js +481 -792
- package/dist/matter/shipping-address/shipping-address.js.map +1 -1
- package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
- package/dist/matter/variant-selector/variant-selector.js +1 -1
- package/dist/particles/address-summary/address-summary.d.ts +24 -0
- package/dist/particles/address-summary/address-summary.js +83 -2
- package/dist/particles/address-summary/address-summary.js.map +1 -1
- package/dist/particles/alert-dialog/alert-dialog.d.ts +68 -0
- package/dist/particles/alert-dialog/alert-dialog.js +187 -0
- package/dist/particles/alert-dialog/alert-dialog.js.map +1 -0
- package/dist/particles/checkbox/checkbox.d.ts +7 -3
- package/dist/particles/checkbox/checkbox.js +4 -1
- package/dist/particles/checkbox/checkbox.js.map +1 -1
- package/dist/particles/document-field/document-field.d.ts +48 -5
- package/dist/particles/document-field/document-field.js +189 -32
- package/dist/particles/document-field/document-field.js.map +1 -1
- package/dist/particles/field/bound-field-registry.js +52 -0
- package/dist/particles/field/bound-field-registry.js.map +1 -0
- package/dist/particles/field/field.d.ts +116 -0
- package/dist/particles/field/field.js +497 -6
- package/dist/particles/field/field.js.map +1 -1
- package/dist/particles/fieldset/fieldset.js +2 -2
- package/dist/particles/fieldset/fieldset.js.map +1 -1
- package/dist/particles/footer-social/footer-social.js +1 -1
- package/dist/particles/form/form.d.ts +104 -0
- package/dist/particles/form/form.js +485 -0
- package/dist/particles/form/form.js.map +1 -0
- package/dist/particles/incentives/incentives.js +1 -1
- package/dist/particles/phone-field/phone-field.d.ts +38 -10
- package/dist/particles/phone-field/phone-field.js +183 -39
- package/dist/particles/phone-field/phone-field.js.map +1 -1
- package/dist/particles/postal-code-field/postal-code-field.js +2 -2
- package/dist/particles/postal-code-field/postal-code-field.js.map +1 -1
- package/dist/particles/select/field-select.d.ts +43 -0
- package/dist/particles/select/field-select.js +150 -0
- package/dist/particles/select/field-select.js.map +1 -0
- package/dist/particles/select/select.d.ts +2 -0
- package/dist/particles/select/select.js.map +1 -1
- package/dist/particles/shared/compose-refs.js +21 -0
- package/dist/particles/shared/compose-refs.js.map +1 -0
- package/dist/schema.graphql +701 -2
- package/dist/sdk/actions/analytics-action-provider.d.ts +15 -0
- package/dist/sdk/actions/analytics-action-provider.js +19 -0
- package/dist/sdk/actions/analytics-action-provider.js.map +1 -0
- package/dist/sdk/actions/cart-action-provider.d.ts +1 -1
- package/dist/sdk/actions/cart-action-provider.js +1 -1
- package/dist/sdk/actions/cart-action-provider.js.map +1 -1
- package/dist/sdk/actions/index.d.ts +3 -1
- package/dist/sdk/actions/index.js +3 -1
- package/dist/sdk/actions/payment-action-provider.d.ts +22 -0
- package/dist/sdk/actions/payment-action-provider.js +26 -0
- package/dist/sdk/actions/payment-action-provider.js.map +1 -0
- package/dist/sdk/actions/session-action-provider.d.ts +1 -1
- package/dist/sdk/actions/session-action-provider.js +1 -1
- package/dist/sdk/actions/session-action-provider.js.map +1 -1
- package/dist/sdk/actions/shipping-action-provider.d.ts +1 -1
- package/dist/sdk/actions/shipping-action-provider.js +1 -1
- package/dist/sdk/actions/shipping-action-provider.js.map +1 -1
- package/dist/sdk/actions/types.d.ts +6 -2
- package/dist/sdk/analytics/analytics-destination.d.ts +43 -0
- package/dist/sdk/analytics/analytics-destination.js +90 -0
- package/dist/sdk/analytics/analytics-destination.js.map +1 -0
- package/dist/sdk/analytics/use-analytics-actions.d.ts +57 -0
- package/dist/sdk/analytics/use-analytics-actions.js +108 -0
- package/dist/sdk/analytics/use-analytics-actions.js.map +1 -0
- package/dist/sdk/cache/storefront-cache.js +1 -1
- package/dist/sdk/cache/storefront-cache.js.map +1 -1
- package/dist/sdk/cart/operations.d.ts +4 -4
- package/dist/sdk/cart/operations.js +1 -1
- package/dist/sdk/cart/operations.js.map +1 -1
- package/dist/sdk/cart/optimistic.js +1 -1
- package/dist/sdk/cart/optimistic.js.map +1 -1
- package/dist/sdk/cart/use-cart-actions.d.ts +1 -1
- package/dist/sdk/cart/use-cart-actions.js +4 -4
- package/dist/sdk/cart/use-cart-actions.js.map +1 -1
- package/dist/sdk/cart/use-cart-validate-on-open.js +1 -1
- package/dist/sdk/cart/use-cart-validate-on-open.js.map +1 -1
- package/dist/sdk/cart/write-gate.js +1 -1
- package/dist/sdk/cart/write-gate.js.map +1 -1
- package/dist/sdk/data/entity-resolution-context.js +31 -0
- package/dist/sdk/data/entity-resolution-context.js.map +1 -0
- package/dist/sdk/data/entity-subscriber.js +18 -8
- package/dist/sdk/data/entity-subscriber.js.map +1 -1
- package/dist/sdk/data/index.js +1 -0
- package/dist/sdk/data/page-reactive-data-root.d.ts +38 -2
- package/dist/sdk/data/page-reactive-data-root.js +4 -2
- package/dist/sdk/data/page-reactive-data-root.js.map +1 -1
- package/dist/sdk/data/reactive-data-provider.d.ts +1 -1
- package/dist/sdk/data/reactive-data-provider.js +8 -4
- package/dist/sdk/data/reactive-data-provider.js.map +1 -1
- package/dist/sdk/data/reactive-list-item-data-provider.d.ts +1 -1
- package/dist/sdk/data/reactive-list-item-data-provider.js +13 -5
- package/dist/sdk/data/reactive-list-item-data-provider.js.map +1 -1
- package/dist/sdk/data/use-reactive-data-settled.js +39 -0
- package/dist/sdk/data/use-reactive-data-settled.js.map +1 -0
- package/dist/sdk/data/use-reactive-entity.js +6 -2
- package/dist/sdk/data/use-reactive-entity.js.map +1 -1
- package/dist/sdk/generated/fragment-types.js +2 -0
- package/dist/sdk/generated/fragment-types.js.map +1 -1
- package/dist/sdk/generated/gql.js +2 -1
- package/dist/sdk/generated/gql.js.map +1 -1
- package/dist/sdk/generated/graphql.js +85 -1
- package/dist/sdk/generated/graphql.js.map +1 -1
- package/dist/sdk/i18n/messages/en-US.js +3 -0
- package/dist/sdk/i18n/messages/en-US.json +3 -0
- package/dist/sdk/i18n/messages/en-US.json.d.ts +3 -0
- package/dist/sdk/i18n/messages/es-ES.js +3 -0
- package/dist/sdk/i18n/messages/es-ES.json +3 -0
- package/dist/sdk/i18n/messages/pt-BR.js +3 -0
- package/dist/sdk/i18n/messages/pt-BR.json +3 -0
- package/dist/sdk/identity/operations.js.map +1 -1
- package/dist/sdk/identity/use-identity-actions.d.ts +1 -1
- package/dist/sdk/identity/use-identity-actions.js +3 -2
- package/dist/sdk/identity/use-identity-actions.js.map +1 -1
- package/dist/sdk/payment/gateway-origin.js +35 -0
- package/dist/sdk/payment/gateway-origin.js.map +1 -0
- package/dist/sdk/payment/gateway.d.ts +85 -0
- package/dist/sdk/payment/gateway.js +183 -0
- package/dist/sdk/payment/gateway.js.map +1 -0
- package/dist/sdk/payment/operations.d.ts +52 -0
- package/dist/sdk/payment/operations.js +223 -0
- package/dist/sdk/payment/operations.js.map +1 -0
- package/dist/sdk/payment/security-code-mask.js +71 -0
- package/dist/sdk/payment/security-code-mask.js.map +1 -0
- package/dist/sdk/payment/submission-registry.d.ts +33 -0
- package/dist/sdk/payment/submission-registry.js +58 -0
- package/dist/sdk/payment/submission-registry.js.map +1 -0
- package/dist/sdk/payment/use-payment-actions.d.ts +78 -0
- package/dist/sdk/payment/use-payment-actions.js +276 -0
- package/dist/sdk/payment/use-payment-actions.js.map +1 -0
- package/dist/sdk/payment/use-place-order.d.ts +65 -0
- package/dist/sdk/payment/use-place-order.js +640 -0
- package/dist/sdk/payment/use-place-order.js.map +1 -0
- package/dist/sdk/session/auth-operations.d.ts +1 -1
- package/dist/sdk/session/auth-operations.js.map +1 -1
- package/dist/sdk/session/use-session-actions.d.ts +1 -1
- package/dist/sdk/session/use-session-actions.js.map +1 -1
- package/dist/sdk/session/use-session-revalidation.js +65 -0
- package/dist/sdk/session/use-session-revalidation.js.map +1 -0
- package/dist/sdk/shipping/option-select-operations.d.ts +1 -1
- package/dist/sdk/shipping/option-select-operations.js.map +1 -1
- package/dist/sdk/shipping/request-timeout.js +1 -1
- package/dist/sdk/shipping/request-timeout.js.map +1 -1
- package/dist/sdk/shipping/shipping-operations.d.ts +1 -1
- package/dist/sdk/shipping/shipping-operations.js.map +1 -1
- package/dist/sdk/shipping/use-shipping-actions.d.ts +2 -2
- package/dist/sdk/shipping/use-shipping-actions.js +1 -1
- package/dist/sdk/shipping/use-shipping-actions.js.map +1 -1
- package/dist/sdk/state/cart.d.ts +3 -4
- package/dist/sdk/state/cart.js +6 -7
- package/dist/sdk/state/cart.js.map +1 -1
- package/dist/utils/loggable-error-name.js +49 -0
- package/dist/utils/loggable-error-name.js.map +1 -0
- package/dist/utils/resolve-authored-copy.js +18 -0
- package/dist/utils/resolve-authored-copy.js.map +1 -0
- package/dist/utils/safe-href.js +3 -3
- package/dist/utils/safe-href.js.map +1 -1
- package/dist/utils/substitute-template.js +33 -0
- package/dist/utils/substitute-template.js.map +1 -0
- package/package.json +2 -1
- package/src/styles/tailwind.css +34 -0
- package/dist/docs/client-profile-form.md +0 -192
- package/dist/matter/client-profile-form/client-profile-form.d.ts +0 -126
- package/dist/matter/client-profile-form/client-profile-form.js +0 -662
- package/dist/matter/client-profile-form/client-profile-form.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-profile-form.js","names":["PhoneFieldParticle","DocumentFieldParticle"],"sources":["../../../src/matter/client-profile-form/client-profile-form.tsx"],"sourcesContent":["'use client';\n\nimport { defineComponent } from '@vtex/fs-core';\nimport { createContext, type FormEvent, type ReactNode, useContext, useRef, useState } from 'react';\nimport { Checkbox } from '../../particles/checkbox/checkbox.js';\nimport {\n DocumentField as DocumentFieldParticle,\n isSupportedDocumentType,\n isValidDocument,\n} from '../../particles/document-field/document-field.js';\nimport { Field } from '../../particles/field/field.js';\nimport { Fieldset } from '../../particles/fieldset/fieldset.js';\nimport { Icon } from '../../particles/icon/icon.js';\nimport type { PhoneCountry } from '../../particles/phone-field/phone-field.js';\nimport {\n PhoneField as PhoneFieldParticle,\n toE164,\n validatePhoneNumber,\n} from '../../particles/phone-field/phone-field.js';\nimport { useActionsOverride } from '../../sdk/actions/actions-override-context.js';\nimport type { ComponentActions } from '../../sdk/actions/types.js';\nimport { useDataOverride } from '../../sdk/data/data-override-context.js';\nimport type { ClientProfileUserError } from '../../sdk/identity/operations.js';\nimport { useSession } from '../session/session.js';\n\n/**\n * The `client-profile-form` compound (specs/fspg-863-client-profile-form.md) — the batched,\n * explicit-save customer-information form, decomposed into freely-composable parts. `Root` owns the\n * mechanics (a local draft across BOTH sibling identity entities, dirty tracking, format validation,\n * a single batched Save that dispatches at most one `clientProfileUpdate` and one\n * `clientPreferencesUpdate` per press carrying only touched fields, and the confirmation on a clean\n * save); it publishes no signal, so nothing outside it reacts to a completed press. The\n * field/fieldset/feedback leaves are thin, context-bound, and placed by the\n * schema author in any order/subset.\n *\n * Composability is the point: a merchant whose platform config drops a field, reorders them, or adds\n * a derived one just composes accordingly — nothing is hard-coded into a closed template. A part that\n * needs extra data declares its own `requiresContext`.\n *\n * Email is read-only (identification, not profile data — `EmailIdentificationControl`'s job). The\n * document field self-gates on `isSupportedDocumentType(documentType)`.\n */\n\n// ---------------------------------------------------------------------------\n// GraphQL Fragment — colocated on Root (ADR-0011), self-contained data root\n// ---------------------------------------------------------------------------\n\nconst fragment = /* GraphQL */ `\n fragment ClientProfileFormData on Query {\n clientProfile {\n __typename\n id\n email\n firstName\n lastName\n phone\n document\n }\n clientPreferences {\n __typename\n id\n optinNewsLetter\n savePersonalData\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** The `$data` slice forwarded by the reactive runtime — both identity sibling entities. */\nexport type ClientProfileFormData = {\n clientProfile?: {\n email?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n phone?: string | null;\n document?: string | null;\n } | null;\n clientPreferences?: {\n optinNewsLetter?: boolean | null;\n savePersonalData?: boolean | null;\n } | null;\n} | null;\n\ntype Draft = {\n firstName: string;\n lastName: string;\n phone: string;\n document: string;\n optinNewsLetter: boolean;\n savePersonalData: boolean;\n};\n\ntype FieldKey = keyof Draft;\ntype TextFieldKey = 'firstName' | 'lastName';\ntype CheckboxKey = 'optinNewsLetter' | 'savePersonalData';\ntype ValidatableFieldKey = 'phone' | 'document';\ntype FieldErrors = Partial<Record<ValidatableFieldKey, string>>;\n\nconst VALIDATION_ORDER: readonly ValidatableFieldKey[] = ['phone', 'document'];\n\n/** Shown when a write throws instead of resolving `userErrors`; the resolved case carries its own message. */\nconst SAVE_FAILED_MESSAGE = 'Unable to save your information. Please try again.';\n\nfunction stripNonDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\n// ---------------------------------------------------------------------------\n// Context — Root publishes the draft + mechanics to its field leaves\n// ---------------------------------------------------------------------------\n\ntype ClientProfileFormContextValue = {\n savedEmail: string;\n draft: Draft;\n fieldErrors: FieldErrors;\n disabled: boolean;\n readOnly: boolean;\n pending: boolean;\n serverError: string | null;\n saved: boolean;\n country: PhoneCountry;\n documentType: string | undefined;\n setText: (key: TextFieldKey, value: string) => void;\n setPhone: (value: string) => void;\n setDocument: (value: string) => void;\n setCheckbox: (key: CheckboxKey, checked: boolean) => void;\n};\n\nconst CLIENT_PROFILE_FORM_UNSET = Symbol('ClientProfileFormContextUnset');\n\nconst ClientProfileFormContext = createContext<ClientProfileFormContextValue | typeof CLIENT_PROFILE_FORM_UNSET>(\n CLIENT_PROFILE_FORM_UNSET,\n);\n\nfunction useClientProfileFormContext(): ClientProfileFormContextValue {\n const ctx = useContext(ClientProfileFormContext);\n if (ctx === CLIENT_PROFILE_FORM_UNSET) {\n throw new Error('ClientProfileForm parts must be used inside ClientProfileForm.Root.');\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport type ClientProfileFormRootProps = {\n /** Phone mask/validation country, provided to the phone leaf via context. */\n country?: PhoneCountry;\n /** Locale document type; the document leaf renders only when supported. Provided via context. */\n documentType?: string;\n className?: string;\n children?: ReactNode;\n /** `ClientProfileFormData` slice forwarded by the reactive runtime. */\n $data?: ClientProfileFormData;\n /** Compiler-injected action surface; carries `identity.clientProfileUpdate` / `clientPreferencesUpdate`. */\n $actions?: ComponentActions;\n};\n\nexport type ClientProfileFormFieldsetProps = {\n /** Visible legend; omitted (no title) when unset. */\n legend?: string;\n /** Value emitted on `data-fs-client-profile-form-section` for scoped styling (e.g. `profile`). */\n section?: string;\n className?: string;\n children?: ReactNode;\n};\n\ntype LabelledFieldProps = { label?: string; className?: string };\n\nexport type ClientProfileFormEmailFieldProps = LabelledFieldProps;\nexport type ClientProfileFormFirstNameFieldProps = LabelledFieldProps;\nexport type ClientProfileFormLastNameFieldProps = LabelledFieldProps;\nexport type ClientProfileFormPhoneFieldProps = LabelledFieldProps;\nexport type ClientProfileFormDocumentFieldProps = LabelledFieldProps;\nexport type ClientProfileFormNewsletterCheckboxProps = LabelledFieldProps;\nexport type ClientProfileFormSavePersonalDataCheckboxProps = LabelledFieldProps;\nexport type ClientProfileFormErrorProps = { className?: string };\nexport type ClientProfileFormConfirmationProps = { message?: string; className?: string };\nexport type ClientProfileFormSubmitButtonProps = { label?: string; className?: string; children?: ReactNode };\n\n// ---------------------------------------------------------------------------\n// Definitions\n// ---------------------------------------------------------------------------\n\nexport const ClientProfileFormRootDefinition = defineComponent<ClientProfileFormRootProps>({\n name: 'ClientProfileFormRoot',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormRoot,\n fragment,\n fetchStrategy: 'reactive',\n requiresContext: 'session',\n providesContext: 'client-profile-form',\n actions: { identity: ['clientProfileUpdate', 'clientPreferencesUpdate'] },\n editor: { label: 'Client Profile Form Root', category: 'action' },\n schema: {\n country: { type: 'string', default: 'US', label: 'Phone country (US or BR)' },\n documentType: { type: 'string', label: 'Document type (e.g. CPF)' },\n },\n guideline:\n 'Data root + form mechanics for the batched customer-information form: owns the draft across clientProfile + clientPreferences, dirty tracking, format-only validation (never requiredness), one batched Save (dispatches only touched fields), and the confirmation on a clean save. It reports nothing to anything outside itself. Requires a SessionRoot ancestor. Compose the field/fieldset/feedback parts as children in any order/subset. See client-profile-form.md.',\n});\n\nexport const ClientProfileFormFieldsetDefinition = defineComponent<ClientProfileFormFieldsetProps>({\n name: 'ClientProfileFormFieldset',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormFieldset,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Form Fieldset', category: 'layout' },\n schema: {\n legend: { type: 'string', label: 'Legend' },\n section: { type: 'string', label: 'Section name (data-fs hook)' },\n },\n guideline:\n 'Optional grouping wrapper: a Fieldset whose disabled state follows the form, with an optional legend and a `section` name emitted on data-fs-client-profile-form-section for scoped styling. Compose any subset of the field parts as children. Must be inside ClientProfileForm.Root.',\n});\n\n// Each field leaf is registered with its own inline `defineComponent({...})` — the native catalog\n// builder statically extracts only that literal form, so a factory helper would leave these parts out\n// of catalog.json (and thus uncomposable in a store schema). See client-profile-form.test.tsx's\n// catalog-completeness guard.\n\nexport const ClientProfileFormEmailFieldDefinition = defineComponent<ClientProfileFormEmailFieldProps>({\n name: 'ClientProfileFormEmailField',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormEmailField,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Email Field', category: 'action' },\n schema: { label: { type: 'string', default: 'Email', label: 'Label' } },\n guideline: 'Read-only email display, seeded from the profile. Must be inside ClientProfileForm.Root.',\n});\n\nexport const ClientProfileFormFirstNameFieldDefinition = defineComponent<ClientProfileFormFirstNameFieldProps>({\n name: 'ClientProfileFormFirstNameField',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormFirstNameField,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile First Name Field', category: 'action' },\n schema: { label: { type: 'string', default: 'First name', label: 'Label' } },\n guideline: 'First-name text field bound to the form draft. Must be inside ClientProfileForm.Root.',\n});\n\nexport const ClientProfileFormLastNameFieldDefinition = defineComponent<ClientProfileFormLastNameFieldProps>({\n name: 'ClientProfileFormLastNameField',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormLastNameField,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Last Name Field', category: 'action' },\n schema: { label: { type: 'string', default: 'Last name', label: 'Label' } },\n guideline: 'Last-name text field bound to the form draft. Must be inside ClientProfileForm.Root.',\n});\n\nexport const ClientProfileFormPhoneFieldDefinition = defineComponent<ClientProfileFormPhoneFieldProps>({\n name: 'ClientProfileFormPhoneField',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormPhoneField,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Phone Field', category: 'action' },\n schema: { label: { type: 'string', default: 'Phone number', label: 'Label' } },\n guideline:\n 'Country-masked phone field (country from Root); format-validated on Save. Must be inside ClientProfileForm.Root.',\n});\n\nexport const ClientProfileFormDocumentFieldDefinition = defineComponent<ClientProfileFormDocumentFieldProps>({\n name: 'ClientProfileFormDocumentField',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormDocumentField,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Document Field', category: 'action' },\n schema: { label: { type: 'string', default: 'CPF', label: 'Label' } },\n guideline:\n 'Tax-document field; self-gates on Root.documentType and check-digit-validates on Save. Must be inside ClientProfileForm.Root.',\n});\n\nexport const ClientProfileFormNewsletterCheckboxDefinition = defineComponent<ClientProfileFormNewsletterCheckboxProps>({\n name: 'ClientProfileFormNewsletterCheckbox',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormNewsletterCheckbox,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Newsletter Checkbox', category: 'action' },\n schema: { label: { type: 'string', default: 'Email me with news and offers', label: 'Label' } },\n guideline: 'Newsletter opt-in checkbox bound to the form draft. Must be inside ClientProfileForm.Root.',\n});\n\nexport const ClientProfileFormSavePersonalDataCheckboxDefinition =\n defineComponent<ClientProfileFormSavePersonalDataCheckboxProps>({\n name: 'ClientProfileFormSavePersonalDataCheckbox',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormSavePersonalDataCheckbox,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Save-Personal-Data Checkbox', category: 'action' },\n schema: { label: { type: 'string', default: 'Save my information for next time', label: 'Label' } },\n guideline: 'Save-personal-data opt-in checkbox bound to the form draft. Must be inside ClientProfileForm.Root.',\n });\n\nexport const ClientProfileFormErrorDefinition = defineComponent<ClientProfileFormErrorProps>({\n name: 'ClientProfileFormError',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormError,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Form Error', category: 'content' },\n schema: {},\n guideline:\n 'Renders the inline server error (role=\"alert\") from the last Save, or nothing. Must be inside ClientProfileForm.Root.',\n});\n\nexport const ClientProfileFormConfirmationDefinition = defineComponent<ClientProfileFormConfirmationProps>({\n name: 'ClientProfileFormConfirmation',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormConfirmation,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Form Confirmation', category: 'content' },\n schema: { message: { type: 'string', default: 'Your information has been saved.', label: 'Confirmation message' } },\n guideline:\n 'Renders the success confirmation (an <output>) after a Save with no errors, cleared on the next edit. Must be inside ClientProfileForm.Root.',\n});\n\nexport const ClientProfileFormSubmitButtonDefinition = defineComponent<ClientProfileFormSubmitButtonProps>({\n name: 'ClientProfileFormSubmitButton',\n importPath: '@vtex/faststore/components',\n component: ClientProfileFormSubmitButton,\n requiresContext: 'client-profile-form',\n editor: { label: 'Client Profile Form Submit Button', category: 'action' },\n schema: { label: { type: 'string', default: 'Save and continue', label: 'Button label' } },\n guideline:\n 'The batched-Save submit button (type=submit). Disabled while a write is in flight; renders nothing when the session is read-only. Compose an Icon + text as children, or rely on `label`. Must be inside ClientProfileForm.Root.',\n});\n\n// ---------------------------------------------------------------------------\n// Validation — field-intrinsic format only\n//\n// Which fields a shopper must fill is a business rule, and the parts of this form are composed freely\n// by the schema, so a required check here can fire for a field the page never mounted: nothing renders\n// the message, focus has nowhere to land, and Save goes dead. Requiredness waits for the RFC that\n// decides where it belongs.\n// ---------------------------------------------------------------------------\n\nfunction validateDraft(draft: Draft, country: PhoneCountry, documentType: string | undefined): FieldErrors {\n const errors: FieldErrors = {};\n\n const phoneRaw = draft.phone.trim();\n if (phoneRaw && !validatePhoneNumber(phoneRaw, country)) {\n errors.phone = 'Invalid phone number';\n }\n\n if (isSupportedDocumentType(documentType)) {\n const digits = stripNonDigits(draft.document);\n if (digits && !isValidDocument(digits, documentType)) {\n errors.document = 'Invalid document number';\n }\n }\n\n return errors;\n}\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\n/**\n * Data root + form shell. Seeds a local draft from `$data`, tracks dirty fields (background `$data`\n * refreshes only re-seed untouched fields), runs format-only validation, and on Save dispatches the\n * batched `clientProfileUpdate` / `clientPreferencesUpdate` (touched fields only), showing the\n * confirmation on success. Provides everything the field leaves need via context; renders a `<form>`\n * around its children.\n *\n * It publishes nothing. A finished press is not announced, so no section collapses as a result and\n * nothing outside this form can react to it. Whether a checkout sequences on a completed form is left to\n * the flow-of-steps RFC (#611).\n */\nexport function ClientProfileFormRoot({\n country = 'US',\n documentType,\n className,\n children,\n $data: $dataProp,\n $actions: $actionsProp,\n}: Readonly<ClientProfileFormRootProps>) {\n const $data = useDataOverride($dataProp);\n const $actions = useActionsOverride($actionsProp);\n // Also enforces the SessionRoot ancestor: useSession() throws when rendered outside one.\n const { canEditData } = useSession();\n const readOnly = !canEditData;\n\n const savedEmail = $data?.clientProfile?.email ?? '';\n const savedFirstName = $data?.clientProfile?.firstName ?? '';\n const savedLastName = $data?.clientProfile?.lastName ?? '';\n const savedPhone = $data?.clientProfile?.phone ?? '';\n const savedDocument = $data?.clientProfile?.document ?? '';\n const savedOptinNewsLetter = Boolean($data?.clientPreferences?.optinNewsLetter ?? false);\n const savedSavePersonalData = Boolean($data?.clientPreferences?.savePersonalData ?? false);\n\n const [draft, setDraft] = useState<Draft>(() => ({\n firstName: savedFirstName,\n lastName: savedLastName,\n phone: savedPhone,\n document: savedDocument,\n optinNewsLetter: savedOptinNewsLetter,\n savePersonalData: savedSavePersonalData,\n }));\n const [dirtyFields, setDirtyFields] = useState<ReadonlySet<FieldKey>>(new Set());\n const [fieldErrors, setFieldErrors] = useState<FieldErrors>({});\n const [pending, setPending] = useState(false);\n const [serverError, setServerError] = useState<string | null>(null);\n const [saved, setSaved] = useState(false);\n\n const formRef = useRef<HTMLFormElement>(null);\n\n // Re-seed pristine fields when the underlying saved entities change; dirty fields are never\n // clobbered. Runs during render (ref-comparison), so the re-seed lands in the same commit.\n const prevSavedRef = useRef({\n firstName: savedFirstName,\n lastName: savedLastName,\n phone: savedPhone,\n document: savedDocument,\n optinNewsLetter: savedOptinNewsLetter,\n savePersonalData: savedSavePersonalData,\n });\n const prevSaved = prevSavedRef.current;\n const changedKeys: FieldKey[] = [];\n if (prevSaved.firstName !== savedFirstName) changedKeys.push('firstName');\n if (prevSaved.lastName !== savedLastName) changedKeys.push('lastName');\n if (prevSaved.phone !== savedPhone) changedKeys.push('phone');\n if (prevSaved.document !== savedDocument) changedKeys.push('document');\n if (prevSaved.optinNewsLetter !== savedOptinNewsLetter) changedKeys.push('optinNewsLetter');\n if (prevSaved.savePersonalData !== savedSavePersonalData) changedKeys.push('savePersonalData');\n if (changedKeys.length > 0) {\n const nextSaved = {\n firstName: savedFirstName,\n lastName: savedLastName,\n phone: savedPhone,\n document: savedDocument,\n optinNewsLetter: savedOptinNewsLetter,\n savePersonalData: savedSavePersonalData,\n };\n // react-doctor-disable-next-line no-ref-current-in-render -- paired with the setDraft call right below, both replay together\n prevSavedRef.current = nextSaved;\n setDraft((prevDraft) => {\n let next = prevDraft;\n for (const key of changedKeys) {\n if (dirtyFields.has(key)) continue;\n if (next === prevDraft) next = { ...prevDraft };\n (next as Record<FieldKey, string | boolean>)[key] = nextSaved[key];\n }\n return next;\n });\n }\n\n const disabled = pending || readOnly;\n\n function markDirty(key: FieldKey) {\n setDirtyFields((prev) => {\n if (prev.has(key)) return prev;\n const next = new Set(prev);\n next.add(key);\n return next;\n });\n }\n\n function clearFeedback() {\n if (saved) setSaved(false);\n if (serverError) setServerError(null);\n }\n\n function clearFieldError(key: ValidatableFieldKey) {\n if (fieldErrors[key]) {\n setFieldErrors((prev) => {\n const next = { ...prev };\n delete next[key];\n return next;\n });\n }\n }\n\n function setText(key: TextFieldKey, value: string) {\n setDraft((prev) => ({ ...prev, [key]: value }));\n markDirty(key);\n clearFeedback();\n }\n\n function setPhone(value: string) {\n setDraft((prev) => ({ ...prev, phone: value }));\n markDirty('phone');\n clearFeedback();\n clearFieldError('phone');\n }\n\n function setDocument(value: string) {\n setDraft((prev) => ({ ...prev, document: value }));\n markDirty('document');\n clearFeedback();\n clearFieldError('document');\n }\n\n function setCheckbox(key: CheckboxKey, checked: boolean) {\n setDraft((prev) => ({ ...prev, [key]: checked }));\n markDirty(key);\n clearFeedback();\n }\n\n function focusField(key: ValidatableFieldKey) {\n const el = formRef.current?.querySelector<HTMLInputElement>(`[data-fs-client-profile-form-field=\"${key}\"] input`);\n el?.focus();\n }\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>) {\n event.preventDefault();\n if (readOnly || pending) return;\n\n // Validation runs before the pristine shortcut below, not after: a stored value can be malformed\n // without anything having been typed this session, and a press that reached the shortcut first would\n // confirm it as acceptable.\n const errors = validateDraft(draft, country, documentType);\n if (Object.keys(errors).length > 0) {\n setFieldErrors(errors);\n const firstInvalid = VALIDATION_ORDER.find((key) => errors[key]);\n if (firstInvalid) focusField(firstInvalid);\n return;\n }\n setFieldErrors({});\n\n // Nothing changed: dispatch nothing, which also avoids the NO_*_PROVIDED user errors. The press\n // still confirms, because a shopper who opens an already-filled form and presses Save is asking\n // whether their data is accepted, and a silent return answers nothing.\n if (dirtyFields.size === 0) {\n setServerError(null);\n setSaved(true);\n return;\n }\n\n const identity = $actions?.identity;\n if (!identity) return;\n\n const profilePayload: Record<string, string> = {};\n if (dirtyFields.has('firstName')) profilePayload.firstName = draft.firstName.trim();\n if (dirtyFields.has('lastName')) profilePayload.lastName = draft.lastName.trim();\n // toE164 is documented for values validatePhoneNumber has accepted; on a blank one it would return\n // the bare country code, writing \"+55\" over the shopper's number and then failing every later Save.\n if (dirtyFields.has('phone')) {\n profilePayload.phone = draft.phone.trim() ? toE164(draft.phone, country) : '';\n }\n if (dirtyFields.has('document')) profilePayload.document = stripNonDigits(draft.document);\n\n const preferencesPayload: Record<string, boolean> = {};\n if (dirtyFields.has('optinNewsLetter')) preferencesPayload.optinNewsLetter = draft.optinNewsLetter;\n if (dirtyFields.has('savePersonalData')) preferencesPayload.savePersonalData = draft.savePersonalData;\n\n const writes: Promise<readonly ClientProfileUserError[]>[] = [];\n if (Object.keys(profilePayload).length > 0 && identity.clientProfileUpdate) {\n writes.push(identity.clientProfileUpdate(profilePayload));\n }\n if (Object.keys(preferencesPayload).length > 0 && identity.clientPreferencesUpdate) {\n writes.push(identity.clientPreferencesUpdate(preferencesPayload));\n }\n if (writes.length === 0) return;\n\n setPending(true);\n setServerError(null);\n setSaved(false);\n try {\n const results = await Promise.all(writes);\n const allErrors = results.flat();\n if (allErrors.length > 0) {\n setServerError(allErrors[0]?.message ?? null);\n return;\n }\n setDirtyFields(new Set());\n setSaved(true);\n } catch (error) {\n // A write that throws rather than resolving userErrors would otherwise snap the form back to idle\n // with no message, losing the edit silently and escaping as an unhandled rejection. The dirty marks\n // stay, so the shopper can press Save again without retyping.\n console.error('[ClientProfileForm] profile write failed:', error);\n setServerError(SAVE_FAILED_MESSAGE);\n } finally {\n setPending(false);\n }\n }\n\n const contextValue: ClientProfileFormContextValue = {\n savedEmail,\n draft,\n fieldErrors,\n disabled,\n readOnly,\n pending,\n serverError,\n saved,\n country,\n documentType,\n setText,\n setPhone,\n setDocument,\n setCheckbox,\n };\n\n return (\n <ClientProfileFormContext.Provider value={contextValue}>\n <form\n ref={formRef}\n onSubmit={handleSubmit}\n className={className}\n data-fs-client-profile-form=\"\"\n {...(pending ? { 'data-fs-client-profile-form-pending': '' } : {})}\n {...(readOnly ? { 'data-fs-client-profile-form-readonly': '' } : {})}\n {...(saved ? { 'data-fs-client-profile-form-saved': '' } : {})}\n >\n {children}\n </form>\n </ClientProfileFormContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Fieldset (optional grouping)\n// ---------------------------------------------------------------------------\n\nexport function ClientProfileFormFieldset({ legend, section, className, children }: ClientProfileFormFieldsetProps) {\n const { disabled } = useClientProfileFormContext();\n return (\n <Fieldset.Root\n disabled={disabled}\n className={className}\n {...(section ? { 'data-fs-client-profile-form-section': section } : {})}\n >\n {legend ? <Fieldset.Legend>{legend}</Fieldset.Legend> : null}\n {children}\n </Fieldset.Root>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Field leaves\n// ---------------------------------------------------------------------------\n\nexport function ClientProfileFormEmailField({ label = 'Email', className }: ClientProfileFormEmailFieldProps) {\n const { savedEmail, disabled } = useClientProfileFormContext();\n return (\n <Field.Root className={className} data-fs-client-profile-form-field=\"email\" disabled={disabled}>\n <Field.Label>{label}</Field.Label>\n <Field.Control readOnly value={savedEmail} disabled={disabled} />\n </Field.Root>\n );\n}\n\nfunction TextField({ fieldKey, label, className }: { fieldKey: TextFieldKey; label: string; className?: string }) {\n const { draft, disabled, setText } = useClientProfileFormContext();\n const attr = fieldKey === 'firstName' ? 'first-name' : 'last-name';\n const autoComplete = fieldKey === 'firstName' ? 'given-name' : 'family-name';\n return (\n <Field.Root className={className} data-fs-client-profile-form-field={attr} disabled={disabled}>\n <Field.Label>{label}</Field.Label>\n <Field.Control\n name={fieldKey}\n autoComplete={autoComplete}\n value={draft[fieldKey]}\n onChange={(event) => setText(fieldKey, event.target.value)}\n disabled={disabled}\n />\n </Field.Root>\n );\n}\n\nexport function ClientProfileFormFirstNameField({\n label = 'First name',\n className,\n}: ClientProfileFormFirstNameFieldProps) {\n return <TextField fieldKey=\"firstName\" label={label} className={className} />;\n}\n\nexport function ClientProfileFormLastNameField({\n label = 'Last name',\n className,\n}: ClientProfileFormLastNameFieldProps) {\n return <TextField fieldKey=\"lastName\" label={label} className={className} />;\n}\n\nexport function ClientProfileFormPhoneField({ label = 'Phone number', className }: ClientProfileFormPhoneFieldProps) {\n const { draft, fieldErrors, disabled, country, setPhone } = useClientProfileFormContext();\n return (\n <div className={className} data-fs-client-profile-form-field=\"phone\">\n <PhoneFieldParticle\n label={label}\n country={country}\n value={draft.phone}\n onValueChange={setPhone}\n isDisabled={disabled}\n invalid={fieldErrors.phone ? true : undefined}\n error={fieldErrors.phone}\n />\n </div>\n );\n}\n\nexport function ClientProfileFormDocumentField({ label = 'CPF', className }: ClientProfileFormDocumentFieldProps) {\n const { draft, fieldErrors, disabled, documentType, setDocument } = useClientProfileFormContext();\n if (!isSupportedDocumentType(documentType)) return null;\n return (\n <div className={className} data-fs-client-profile-form-field=\"document\">\n <DocumentFieldParticle\n label={label}\n documentType={documentType}\n value={draft.document}\n onValueChange={setDocument}\n disabled={disabled}\n invalid={Boolean(fieldErrors.document)}\n errorMessage={fieldErrors.document ?? 'Invalid document number'}\n />\n </div>\n );\n}\n\nfunction CheckboxField({\n fieldKey,\n attr,\n label,\n className,\n}: {\n fieldKey: CheckboxKey;\n attr: string;\n label: string;\n className?: string;\n}) {\n const { draft, disabled, setCheckbox } = useClientProfileFormContext();\n return (\n <Field.Root className={className} data-fs-client-profile-form-field={attr} disabled={disabled}>\n <Field.Label>\n <Checkbox.Root\n checked={draft[fieldKey]}\n onCheckedChange={(checked) => setCheckbox(fieldKey, checked)}\n disabled={disabled}\n >\n <Checkbox.Indicator>\n <Icon name=\"checked\" />\n </Checkbox.Indicator>\n </Checkbox.Root>\n {label}\n </Field.Label>\n </Field.Root>\n );\n}\n\nexport function ClientProfileFormNewsletterCheckbox({\n label = 'Email me with news and offers',\n className,\n}: ClientProfileFormNewsletterCheckboxProps) {\n return <CheckboxField fieldKey=\"optinNewsLetter\" attr=\"newsletter\" label={label} className={className} />;\n}\n\nexport function ClientProfileFormSavePersonalDataCheckbox({\n label = 'Save my information for next time',\n className,\n}: ClientProfileFormSavePersonalDataCheckboxProps) {\n return <CheckboxField fieldKey=\"savePersonalData\" attr=\"save-personal-data\" label={label} className={className} />;\n}\n\n// ---------------------------------------------------------------------------\n// Feedback + submit\n// ---------------------------------------------------------------------------\n\nexport function ClientProfileFormError({ className }: ClientProfileFormErrorProps) {\n const { serverError } = useClientProfileFormContext();\n if (!serverError) return null;\n return (\n <div role=\"alert\" className={className} data-fs-client-profile-form-error=\"\">\n {serverError}\n </div>\n );\n}\n\nexport function ClientProfileFormConfirmation({\n message = 'Your information has been saved.',\n className,\n}: ClientProfileFormConfirmationProps) {\n const { saved } = useClientProfileFormContext();\n if (!saved) return null;\n return (\n <output className={className} data-fs-client-profile-form-confirmation=\"\">\n {message}\n </output>\n );\n}\n\nexport function ClientProfileFormSubmitButton({\n label = 'Save and continue',\n className,\n children,\n}: ClientProfileFormSubmitButtonProps) {\n const { pending, readOnly } = useClientProfileFormContext();\n if (readOnly) return null;\n return (\n <button\n type=\"submit\"\n disabled={pending}\n className={className}\n data-fs-button=\"\"\n data-fs-client-profile-form-save=\"\"\n >\n {children ?? label}\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Namespace Export\n// ---------------------------------------------------------------------------\n\nexport const ClientProfileForm = {\n Root: ClientProfileFormRoot,\n RootDefinition: ClientProfileFormRootDefinition,\n Fieldset: ClientProfileFormFieldset,\n FieldsetDefinition: ClientProfileFormFieldsetDefinition,\n EmailField: ClientProfileFormEmailField,\n EmailFieldDefinition: ClientProfileFormEmailFieldDefinition,\n FirstNameField: ClientProfileFormFirstNameField,\n FirstNameFieldDefinition: ClientProfileFormFirstNameFieldDefinition,\n LastNameField: ClientProfileFormLastNameField,\n LastNameFieldDefinition: ClientProfileFormLastNameFieldDefinition,\n PhoneField: ClientProfileFormPhoneField,\n PhoneFieldDefinition: ClientProfileFormPhoneFieldDefinition,\n DocumentField: ClientProfileFormDocumentField,\n DocumentFieldDefinition: ClientProfileFormDocumentFieldDefinition,\n NewsletterCheckbox: ClientProfileFormNewsletterCheckbox,\n NewsletterCheckboxDefinition: ClientProfileFormNewsletterCheckboxDefinition,\n SavePersonalDataCheckbox: ClientProfileFormSavePersonalDataCheckbox,\n SavePersonalDataCheckboxDefinition: ClientProfileFormSavePersonalDataCheckboxDefinition,\n Error: ClientProfileFormError,\n ErrorDefinition: ClientProfileFormErrorDefinition,\n Confirmation: ClientProfileFormConfirmation,\n ConfirmationDefinition: ClientProfileFormConfirmationDefinition,\n SubmitButton: ClientProfileFormSubmitButton,\n SubmitButtonDefinition: ClientProfileFormSubmitButtonDefinition,\n};\n"],"mappings":"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"}
|