@hubspot/app-connect-sdk 1.0.0-alpha.23 → 1.0.0-alpha.25
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/.playwright-cli/console-2026-06-03T21-09-24-449Z.log +1 -0
- package/.playwright-cli/page-2026-06-03T21-09-25-023Z.yml +150 -0
- package/.playwright-cli/page-2026-06-03T21-09-29-262Z.png +0 -0
- package/.turbo/turbo-format$colon$check.log +1 -1
- package/.turbo/turbo-test.log +277 -125
- package/.turbo/turbo-tsdown.log +284 -275
- package/build/tsconfig.browser.tsbuildinfo +1 -1
- package/build/tsconfig.server.tsbuildinfo +1 -1
- package/dist/browser/{HubSpotAppConnect-721kYr9d.js → HubSpotAppConnect-DXwIeCvS.js} +254 -121
- package/dist/browser/HubSpotAppConnect-DXwIeCvS.js.map +1 -0
- package/dist/browser/assets/src/browser/react/components/AppConnectHeader/{AppConnectHeader.css.ts.vanilla-DpJ0aBGF.css → AppConnectHeader.css.ts.vanilla-Cy3juYhp.css} +35 -42
- package/dist/browser/assets/src/browser/react/components/Badge/Badge.css.ts.vanilla-BglQhG8I.css +43 -0
- package/dist/browser/assets/src/browser/react/components/Button/Button.css.ts.vanilla-DeSC65cA.css +153 -0
- package/dist/browser/assets/src/browser/react/components/Card/Card.css.ts.vanilla-CJYvW5f2.css +45 -0
- package/dist/browser/assets/src/browser/react/components/Checkbox/Checkbox.css.ts.vanilla-Bd1JQ2dy.css +80 -0
- package/dist/browser/assets/src/browser/react/components/ConnectButton/{ConnectButton.css.ts.vanilla-BXXMQqfA.css → ConnectButton.css.ts.vanilla-BNDbE3VP.css} +7 -3
- package/dist/browser/assets/src/browser/react/components/Input/Input.css.ts.vanilla-BazoQ0F4.css +67 -0
- package/dist/browser/assets/src/browser/react/components/Link/Link.css.ts.vanilla-DlB1-KG3.css +27 -0
- package/dist/browser/assets/src/browser/react/components/RadioGroup/RadioGroup.css.ts.vanilla-BZMFzhtJ.css +96 -0
- package/dist/browser/assets/src/browser/react/components/Select/Select.css.ts.vanilla-qnoyv6af.css +74 -0
- package/dist/browser/assets/src/browser/react/components/ShareButton/ShareButton.css.ts.vanilla-Dxuyu80-.css +6 -0
- package/dist/browser/assets/src/browser/react/components/Text/Text.css.ts.vanilla-CKHLgxoO.css +62 -0
- package/dist/browser/assets/src/browser/react/components/TextArea/TextArea.css.ts.vanilla-sAowJlZT.css +69 -0
- package/dist/browser/assets/src/browser/theme.css.ts.vanilla-Bh9J7hgH.css +28 -0
- package/dist/browser/{create-ULhURoJ_.js → create-B1fFvikp.js} +28 -7
- package/dist/browser/create-B1fFvikp.js.map +1 -0
- package/dist/browser/index.d.ts +9 -2
- package/dist/browser/index.js +12 -3
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/react/lovable.d.ts +1 -1
- package/dist/browser/react/lovable.js +3 -3
- package/dist/browser/react.d.ts +279 -3
- package/dist/browser/react.js +414 -2
- package/dist/browser/react.js.map +1 -0
- package/dist/browser/{theme.css-CJbxi5hC.js → theme.css-iQa2lUfM.js} +2 -2
- package/dist/browser/theme.css-iQa2lUfM.js.map +1 -0
- package/dist/browser/{types-C3wed8dU.d.ts → types-aHV2H3o4.d.ts} +20 -1
- package/dist/server/api-client-core/apis/auth/oauth-types.generated.d.ts +0 -12
- package/dist/server/api-client-core/apis/auth/oauth.generated.js +4 -14
- package/dist/server/api-client-core/apis/auth/oauth.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/automation/actions-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/automation/actions.generated.js +1 -59
- package/dist/server/api-client-core/apis/automation/actions.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/automation/sequences-types.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/automation/sequences.generated.js +0 -4
- package/dist/server/api-client-core/apis/automation/sequences.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/authors-types.generated.d.ts +0 -77
- package/dist/server/api-client-core/apis/cms/authors.generated.js +6 -55
- package/dist/server/api-client-core/apis/cms/authors.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/blog-settings-types.generated.d.ts +1 -37
- package/dist/server/api-client-core/apis/cms/blog-settings.generated.js +1 -7
- package/dist/server/api-client-core/apis/cms/blog-settings.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/hubdb-types.generated.d.ts +0 -133
- package/dist/server/api-client-core/apis/cms/hubdb.generated.js +0 -85
- package/dist/server/api-client-core/apis/cms/hubdb.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/media-bridge-types.generated.d.ts +0 -153
- package/dist/server/api-client-core/apis/cms/media-bridge.generated.js +7 -120
- package/dist/server/api-client-core/apis/cms/media-bridge.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/pages-types.generated.d.ts +4 -351
- package/dist/server/api-client-core/apis/cms/pages.generated.js +20 -227
- package/dist/server/api-client-core/apis/cms/pages.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/posts-types.generated.d.ts +1 -128
- package/dist/server/api-client-core/apis/cms/posts.generated.js +8 -81
- package/dist/server/api-client-core/apis/cms/posts.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/source-code-types.generated.d.ts +0 -35
- package/dist/server/api-client-core/apis/cms/source-code.generated.js +0 -29
- package/dist/server/api-client-core/apis/cms/source-code.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/tags-types.generated.d.ts +0 -77
- package/dist/server/api-client-core/apis/cms/tags.generated.js +6 -55
- package/dist/server/api-client-core/apis/cms/tags.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/url-mappings-types.generated.d.ts +0 -14
- package/dist/server/api-client-core/apis/cms/url-mappings.generated.js +0 -5
- package/dist/server/api-client-core/apis/cms/url-mappings.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/cms/url-redirects-types.generated.d.ts +0 -21
- package/dist/server/api-client-core/apis/cms/url-redirects.generated.js +1 -7
- package/dist/server/api-client-core/apis/cms/url-redirects.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.d.ts +0 -35
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js +1 -29
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/conversations/custom-channels-types.generated.d.ts +0 -52
- package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js +17 -56
- package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/conversations/visitor-identification-types.generated.d.ts +1 -11
- package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js +1 -2
- package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/conversations-types.generated.d.ts +0 -35
- package/dist/server/api-client-core/apis/conversations.generated.js +1 -16
- package/dist/server/api-client-core/apis/conversations.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/app-uninstalls-types.generated.d.ts +1 -11
- package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js +1 -2
- package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/appointments-types.generated.d.ts +2 -88
- package/dist/server/api-client-core/apis/crm/appointments.generated.js +12 -75
- package/dist/server/api-client-core/apis/crm/appointments.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/associations-schema-types.generated.d.ts +0 -42
- package/dist/server/api-client-core/apis/crm/associations-schema.generated.js +4 -46
- package/dist/server/api-client-core/apis/crm/associations-schema.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/associations-types.generated.d.ts +0 -56
- package/dist/server/api-client-core/apis/crm/associations.generated.js +13 -67
- package/dist/server/api-client-core/apis/crm/associations.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/calling-extensions-types.generated.d.ts +0 -70
- package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js +1 -29
- package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/calls-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/calls.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/calls.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/carts-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/carts.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/carts.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/commerce-payments-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/communications-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/communications.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/communications.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/companies-types.generated.d.ts +1 -79
- package/dist/server/api-client-core/apis/crm/companies.generated.js +6 -42
- package/dist/server/api-client-core/apis/crm/companies.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/contacts-types.generated.d.ts +1 -82
- package/dist/server/api-client-core/apis/crm/contacts.generated.js +6 -43
- package/dist/server/api-client-core/apis/crm/contacts.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/contracts-types.generated.d.ts +3 -76
- package/dist/server/api-client-core/apis/crm/contracts.generated.js +3 -38
- package/dist/server/api-client-core/apis/crm/contracts.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/courses-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/courses.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/courses.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/custom-objects-types.generated.d.ts +2 -81
- package/dist/server/api-client-core/apis/crm/custom-objects.generated.js +4 -63
- package/dist/server/api-client-core/apis/crm/custom-objects.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/deal-splits-types.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/deal-splits.generated.js +1 -4
- package/dist/server/api-client-core/apis/crm/deal-splits.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/deals-types.generated.d.ts +1 -79
- package/dist/server/api-client-core/apis/crm/deals.generated.js +6 -42
- package/dist/server/api-client-core/apis/crm/deals.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/discounts-types.generated.d.ts +1 -69
- package/dist/server/api-client-core/apis/crm/discounts.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/discounts.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/emails-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/emails.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/emails.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/exports-types.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/exports.generated.js +0 -1
- package/dist/server/api-client-core/apis/crm/exports.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/feedback-submissions-types.generated.d.ts +1 -23
- package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js +1 -23
- package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/fees-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/fees.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/fees.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/goal-targets-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/goal-targets.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/goal-targets.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/imports-types.generated.d.ts +0 -12
- package/dist/server/api-client-core/apis/crm/imports.generated.js +0 -5
- package/dist/server/api-client-core/apis/crm/imports.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/invoices-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/invoices.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/invoices.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/leads-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/leads.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/leads.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/line-items-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/line-items.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/line-items.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/listings-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/listings.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/listings.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/lists-types.generated.d.ts +0 -108
- package/dist/server/api-client-core/apis/crm/lists.generated.js +0 -49
- package/dist/server/api-client-core/apis/crm/lists.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/meetings-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/meetings.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/meetings.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/notes-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/notes.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/notes.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/objects-types.generated.d.ts +0 -49
- package/dist/server/api-client-core/apis/crm/objects.generated.js +5 -39
- package/dist/server/api-client-core/apis/crm/objects.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/orders-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/orders.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/orders.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/partner-clients-types.generated.d.ts +1 -37
- package/dist/server/api-client-core/apis/crm/partner-clients.generated.js +6 -36
- package/dist/server/api-client-core/apis/crm/partner-clients.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/partner-services-types.generated.d.ts +1 -37
- package/dist/server/api-client-core/apis/crm/partner-services.generated.js +6 -36
- package/dist/server/api-client-core/apis/crm/partner-services.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/pipelines-types.generated.d.ts +0 -55
- package/dist/server/api-client-core/apis/crm/pipelines.generated.js +1 -65
- package/dist/server/api-client-core/apis/crm/pipelines.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/postal-mail-types.generated.d.ts +1 -71
- package/dist/server/api-client-core/apis/crm/postal-mail.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/postal-mail.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/products-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/products.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/products.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/projects-types.generated.d.ts +1 -79
- package/dist/server/api-client-core/apis/crm/projects.generated.js +6 -42
- package/dist/server/api-client-core/apis/crm/projects.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/properties-types.generated.d.ts +0 -56
- package/dist/server/api-client-core/apis/crm/properties.generated.js +5 -45
- package/dist/server/api-client-core/apis/crm/properties.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/property-validations-types.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/property-validations.generated.js +1 -9
- package/dist/server/api-client-core/apis/crm/property-validations.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.d.ts +0 -28
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js +1 -20
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.d.ts +1 -44
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js +1 -40
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/quotes-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/quotes.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/quotes.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/schemas-types.generated.d.ts +0 -35
- package/dist/server/api-client-core/apis/crm/schemas.generated.js +1 -18
- package/dist/server/api-client-core/apis/crm/schemas.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/services-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/services.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/services.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/tasks-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/tasks.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/tasks.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/taxes-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/taxes.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/taxes.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/tickets-types.generated.d.ts +1 -79
- package/dist/server/api-client-core/apis/crm/tickets.generated.js +6 -42
- package/dist/server/api-client-core/apis/crm/tickets.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/timeline-types.generated.d.ts +2 -25
- package/dist/server/api-client-core/apis/crm/timeline.generated.js +2 -6
- package/dist/server/api-client-core/apis/crm/timeline.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/transcriptions-types.generated.d.ts +1 -21
- package/dist/server/api-client-core/apis/crm/transcriptions.generated.js +2 -6
- package/dist/server/api-client-core/apis/crm/transcriptions.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/users-types.generated.d.ts +1 -72
- package/dist/server/api-client-core/apis/crm/users.generated.js +6 -41
- package/dist/server/api-client-core/apis/crm/users.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.d.ts +0 -14
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js +1 -8
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/events/manage-event-definitions-types.generated.d.ts +0 -48
- package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js +1 -23
- package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/events/send-event-completions-types.generated.d.ts +2 -20
- package/dist/server/api-client-core/apis/events/send-event-completions.generated.js +2 -3
- package/dist/server/api-client-core/apis/events/send-event-completions.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/files-types.generated.d.ts +0 -84
- package/dist/server/api-client-core/apis/files.generated.js +2 -28
- package/dist/server/api-client-core/apis/files.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.d.ts +0 -98
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js +24 -79
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/marketing/marketing-emails-types.generated.d.ts +0 -76
- package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js +0 -27
- package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/marketing/marketing-events-types.generated.d.ts +4 -183
- package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js +6 -117
- package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/marketing/single-send-types.generated.d.ts +1 -11
- package/dist/server/api-client-core/apis/marketing/single-send.generated.js +1 -2
- package/dist/server/api-client-core/apis/marketing/single-send.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/marketing/transactional-single-send-types.generated.d.ts +1 -30
- package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js +2 -5
- package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/scheduler/meetings-types.generated.d.ts +1 -17
- package/dist/server/api-client-core/apis/scheduler/meetings.generated.js +1 -7
- package/dist/server/api-client-core/apis/scheduler/meetings.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/settings/multicurrency-types.generated.d.ts +0 -49
- package/dist/server/api-client-core/apis/settings/multicurrency.generated.js +3 -15
- package/dist/server/api-client-core/apis/settings/multicurrency.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/settings/user-provisioning-types.generated.d.ts +0 -20
- package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js +1 -11
- package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/webhooks-journal-types.generated.d.ts +0 -42
- package/dist/server/api-client-core/apis/webhooks-journal.generated.js +0 -6
- package/dist/server/api-client-core/apis/webhooks-journal.generated.js.map +1 -1
- package/dist/server/api-client-core/apis/webhooks-types.generated.d.ts +0 -84
- package/dist/server/api-client-core/apis/webhooks.generated.js +1 -31
- package/dist/server/api-client-core/apis/webhooks.generated.js.map +1 -1
- package/dist/server/hono/hubspot-connect-routes/auth-init-session.js +0 -1
- package/dist/server/hono/hubspot-connect-routes/auth-init-session.js.map +1 -1
- package/package.json +19 -4
- package/src/browser/app-connect-controller/connect-start.test.ts +198 -1
- package/src/browser/app-connect-controller/create.test.ts +116 -0
- package/src/browser/app-connect-controller/create.ts +12 -2
- package/src/browser/app-connect-controller/disconnect.test.ts +166 -0
- package/src/browser/app-connect-controller/disconnect.ts +2 -1
- package/src/browser/app-connect-controller/init.test.ts +1 -0
- package/src/browser/app-connect-controller/oauth-complete.test.ts +1 -0
- package/src/browser/app-connect-controller/oauth-popup.test.ts +1 -0
- package/src/browser/app-connect-controller/oauth-popup.ts +10 -3
- package/src/browser/app-connect-controller/refresh.test.ts +411 -0
- package/src/browser/app-connect-controller/refresh.ts +4 -1
- package/src/browser/app-connect-controller/types.ts +3 -1
- package/src/browser/app-connect-controller/utils/session-utils.test.ts +1 -0
- package/src/browser/app-connect-controller/view-state.test.ts +1 -0
- package/src/browser/app-connect-controller/view-state.ts +1 -0
- package/src/browser/index.ts +1 -0
- package/src/browser/react/components/AppConnectHeader/AppConnectHeader.css.ts +16 -24
- package/src/browser/react/components/AppConnectHeader/AppConnectHeader.test.tsx +55 -0
- package/src/browser/react/components/AppConnectHeader/AppConnectHeader.tsx +46 -17
- package/src/browser/react/components/Badge/Badge.css.ts +50 -0
- package/src/browser/react/components/Badge/Badge.test.tsx +97 -0
- package/src/browser/react/components/Badge/Badge.tsx +36 -0
- package/src/browser/react/components/Badge/index.ts +1 -0
- package/src/browser/react/components/Button/Button.css.ts +132 -11
- package/src/browser/react/components/Button/Button.test.tsx +168 -0
- package/src/browser/react/components/Button/Button.tsx +33 -5
- package/src/browser/react/components/Button/index.ts +7 -0
- package/src/browser/react/components/Card/Card.css.ts +55 -0
- package/src/browser/react/components/Card/Card.test.tsx +152 -0
- package/src/browser/react/components/Card/Card.tsx +79 -0
- package/src/browser/react/components/Card/index.ts +10 -0
- package/src/browser/react/components/Checkbox/Checkbox.css.ts +104 -0
- package/src/browser/react/components/Checkbox/Checkbox.test.tsx +76 -0
- package/src/browser/react/components/Checkbox/Checkbox.tsx +61 -0
- package/src/browser/react/components/Checkbox/index.ts +1 -0
- package/src/browser/react/components/ConnectButton/ConnectButton.css.ts +8 -3
- package/src/browser/react/components/ConnectButton/ConnectButton.tsx +10 -5
- package/src/browser/react/components/HubSpotAppConnect/HubSpotAppConnect.test.tsx +159 -0
- package/src/browser/react/components/Input/Input.css.ts +84 -0
- package/src/browser/react/components/Input/Input.test.tsx +94 -0
- package/src/browser/react/components/Input/Input.tsx +61 -0
- package/src/browser/react/components/Input/index.ts +1 -0
- package/src/browser/react/components/Link/Link.css.ts +35 -0
- package/src/browser/react/components/Link/Link.test.tsx +102 -0
- package/src/browser/react/components/Link/Link.tsx +32 -0
- package/src/browser/react/components/Link/index.ts +1 -0
- package/src/browser/react/components/RadioGroup/RadioGroup.css.ts +117 -0
- package/src/browser/react/components/RadioGroup/RadioGroup.test.tsx +95 -0
- package/src/browser/react/components/RadioGroup/RadioGroup.tsx +109 -0
- package/src/browser/react/components/RadioGroup/index.ts +5 -0
- package/src/browser/react/components/Select/Select.css.ts +95 -0
- package/src/browser/react/components/Select/Select.test.tsx +105 -0
- package/src/browser/react/components/Select/Select.tsx +84 -0
- package/src/browser/react/components/Select/index.ts +1 -0
- package/src/browser/react/components/ShareButton/ShareButton.css.ts +0 -42
- package/src/browser/react/components/ShareButton/ShareButton.tsx +5 -3
- package/src/browser/react/components/Text/Text.css.ts +26 -0
- package/src/browser/react/components/Text/Text.test.tsx +63 -0
- package/src/browser/react/components/Text/Text.tsx +61 -0
- package/src/browser/react/components/Text/index.ts +6 -0
- package/src/browser/react/components/TextArea/TextArea.css.ts +86 -0
- package/src/browser/react/components/TextArea/TextArea.test.tsx +93 -0
- package/src/browser/react/components/TextArea/TextArea.tsx +60 -0
- package/src/browser/react/components/TextArea/index.ts +1 -0
- package/src/browser/react/components/icons/BuildingIcon.tsx +27 -0
- package/src/browser/react/components/icons/PlugIcon.tsx +24 -0
- package/src/browser/react/hooks.test.tsx +116 -0
- package/src/browser/react/index.ts +67 -0
- package/src/browser/shadow-tokens.ts +7 -0
- package/src/browser/theme.css.ts +24 -3
- package/src/browser/types.ts +25 -0
- package/src/browser/typography-tokens.ts +27 -0
- package/src/browser/vitest.setup.ts +1 -0
- package/src/server/api-client-core/apis/.read-only-api-snapshot.json +2232 -0
- package/src/server/api-client-core/apis/auth/oauth-types.generated.ts +0 -12
- package/src/server/api-client-core/apis/auth/oauth.generated.ts +0 -10
- package/src/server/api-client-core/apis/automation/actions-types.generated.ts +1 -82
- package/src/server/api-client-core/apis/automation/actions.generated.ts +1 -81
- package/src/server/api-client-core/apis/automation/sequences-types.generated.ts +0 -9
- package/src/server/api-client-core/apis/automation/sequences.generated.ts +0 -5
- package/src/server/api-client-core/apis/cms/authors-types.generated.ts +0 -87
- package/src/server/api-client-core/apis/cms/authors.generated.ts +0 -55
- package/src/server/api-client-core/apis/cms/blog-settings-types.generated.ts +1 -47
- package/src/server/api-client-core/apis/cms/blog-settings.generated.ts +1 -27
- package/src/server/api-client-core/apis/cms/hubdb-types.generated.ts +0 -135
- package/src/server/api-client-core/apis/cms/hubdb.generated.ts +0 -100
- package/src/server/api-client-core/apis/cms/media-bridge-types.generated.ts +0 -191
- package/src/server/api-client-core/apis/cms/media-bridge.generated.ts +0 -147
- package/src/server/api-client-core/apis/cms/pages-types.generated.ts +4 -413
- package/src/server/api-client-core/apis/cms/pages.generated.ts +4 -270
- package/src/server/api-client-core/apis/cms/posts-types.generated.ts +1 -140
- package/src/server/api-client-core/apis/cms/posts.generated.ts +1 -91
- package/src/server/api-client-core/apis/cms/source-code-types.generated.ts +0 -35
- package/src/server/api-client-core/apis/cms/source-code.generated.ts +0 -24
- package/src/server/api-client-core/apis/cms/tags-types.generated.ts +0 -85
- package/src/server/api-client-core/apis/cms/tags.generated.ts +0 -55
- package/src/server/api-client-core/apis/cms/url-mappings-types.generated.ts +0 -14
- package/src/server/api-client-core/apis/cms/url-mappings.generated.ts +0 -9
- package/src/server/api-client-core/apis/cms/url-redirects-types.generated.ts +0 -21
- package/src/server/api-client-core/apis/cms/url-redirects.generated.ts +0 -10
- package/src/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.ts +0 -43
- package/src/server/api-client-core/apis/communication-preferences/subscriptions.generated.ts +0 -44
- package/src/server/api-client-core/apis/conversations/custom-channels-types.generated.ts +0 -54
- package/src/server/api-client-core/apis/conversations/custom-channels.generated.ts +0 -54
- package/src/server/api-client-core/apis/conversations/visitor-identification-types.generated.ts +1 -13
- package/src/server/api-client-core/apis/conversations/visitor-identification.generated.ts +1 -5
- package/src/server/api-client-core/apis/conversations-types.generated.ts +0 -41
- package/src/server/api-client-core/apis/conversations.generated.ts +0 -25
- package/src/server/api-client-core/apis/crm/app-uninstalls-types.generated.ts +1 -11
- package/src/server/api-client-core/apis/crm/app-uninstalls.generated.ts +1 -4
- package/src/server/api-client-core/apis/crm/appointments-types.generated.ts +2 -90
- package/src/server/api-client-core/apis/crm/appointments.generated.ts +2 -86
- package/src/server/api-client-core/apis/crm/associations-schema-types.generated.ts +0 -42
- package/src/server/api-client-core/apis/crm/associations-schema.generated.ts +0 -63
- package/src/server/api-client-core/apis/crm/associations-types.generated.ts +0 -60
- package/src/server/api-client-core/apis/crm/associations.generated.ts +0 -85
- package/src/server/api-client-core/apis/crm/calling-extensions-types.generated.ts +0 -90
- package/src/server/api-client-core/apis/crm/calling-extensions.generated.ts +0 -45
- package/src/server/api-client-core/apis/crm/calls-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/calls.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/carts-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/carts.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/commerce-payments-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/commerce-payments.generated.ts +1 -67
- package/src/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/commerce-subscriptions.generated.ts +1 -61
- package/src/server/api-client-core/apis/crm/communications-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/communications.generated.ts +1 -67
- package/src/server/api-client-core/apis/crm/companies-types.generated.ts +1 -79
- package/src/server/api-client-core/apis/crm/companies.generated.ts +1 -60
- package/src/server/api-client-core/apis/crm/contacts-types.generated.ts +1 -82
- package/src/server/api-client-core/apis/crm/contacts.generated.ts +1 -62
- package/src/server/api-client-core/apis/crm/contracts-types.generated.ts +3 -84
- package/src/server/api-client-core/apis/crm/contracts.generated.ts +3 -62
- package/src/server/api-client-core/apis/crm/courses-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/courses.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/custom-objects-types.generated.ts +2 -81
- package/src/server/api-client-core/apis/crm/custom-objects.generated.ts +2 -81
- package/src/server/api-client-core/apis/crm/deal-splits-types.generated.ts +0 -7
- package/src/server/api-client-core/apis/crm/deal-splits.generated.ts +0 -2
- package/src/server/api-client-core/apis/crm/deals-types.generated.ts +1 -79
- package/src/server/api-client-core/apis/crm/deals.generated.ts +1 -59
- package/src/server/api-client-core/apis/crm/discounts-types.generated.ts +1 -69
- package/src/server/api-client-core/apis/crm/discounts.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/emails-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/emails.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/exports-types.generated.ts +0 -7
- package/src/server/api-client-core/apis/crm/exports.generated.ts +0 -2
- package/src/server/api-client-core/apis/crm/feedback-submissions-types.generated.ts +1 -23
- package/src/server/api-client-core/apis/crm/feedback-submissions.generated.ts +1 -39
- package/src/server/api-client-core/apis/crm/fees-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/fees.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/goal-targets-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/goal-targets.generated.ts +1 -59
- package/src/server/api-client-core/apis/crm/imports-types.generated.ts +0 -12
- package/src/server/api-client-core/apis/crm/imports.generated.ts +0 -9
- package/src/server/api-client-core/apis/crm/invoices-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/invoices.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/leads-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/leads.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/line-items-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/line-items.generated.ts +1 -59
- package/src/server/api-client-core/apis/crm/listings-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/listings.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/lists-types.generated.ts +0 -128
- package/src/server/api-client-core/apis/crm/lists.generated.ts +0 -77
- package/src/server/api-client-core/apis/crm/meetings-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/meetings.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/notes-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/notes.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/objects-types.generated.ts +0 -49
- package/src/server/api-client-core/apis/crm/objects.generated.ts +0 -35
- package/src/server/api-client-core/apis/crm/orders-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/orders.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/partner-clients-types.generated.ts +1 -37
- package/src/server/api-client-core/apis/crm/partner-clients.generated.ts +1 -49
- package/src/server/api-client-core/apis/crm/partner-services-types.generated.ts +1 -37
- package/src/server/api-client-core/apis/crm/partner-services.generated.ts +1 -49
- package/src/server/api-client-core/apis/crm/pipelines-types.generated.ts +0 -59
- package/src/server/api-client-core/apis/crm/pipelines.generated.ts +0 -86
- package/src/server/api-client-core/apis/crm/postal-mail-types.generated.ts +1 -71
- package/src/server/api-client-core/apis/crm/postal-mail.generated.ts +2 -59
- package/src/server/api-client-core/apis/crm/products-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/products.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/projects-types.generated.ts +1 -79
- package/src/server/api-client-core/apis/crm/projects.generated.ts +1 -60
- package/src/server/api-client-core/apis/crm/properties-types.generated.ts +0 -56
- package/src/server/api-client-core/apis/crm/properties.generated.ts +0 -44
- package/src/server/api-client-core/apis/crm/property-validations-types.generated.ts +0 -9
- package/src/server/api-client-core/apis/crm/property-validations.generated.ts +0 -12
- package/src/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.ts +0 -28
- package/src/server/api-client-core/apis/crm/public-app-crm-cards.generated.ts +0 -19
- package/src/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.ts +1 -48
- package/src/server/api-client-core/apis/crm/public-app-feature-flags.generated.ts +1 -50
- package/src/server/api-client-core/apis/crm/quotes-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/quotes.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/schemas-types.generated.ts +0 -39
- package/src/server/api-client-core/apis/crm/schemas.generated.ts +0 -27
- package/src/server/api-client-core/apis/crm/services-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/services.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/tasks-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/tasks.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/taxes-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/taxes.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/tickets-types.generated.ts +1 -79
- package/src/server/api-client-core/apis/crm/tickets.generated.ts +1 -60
- package/src/server/api-client-core/apis/crm/timeline-types.generated.ts +2 -27
- package/src/server/api-client-core/apis/crm/timeline.generated.ts +2 -11
- package/src/server/api-client-core/apis/crm/transcriptions-types.generated.ts +1 -23
- package/src/server/api-client-core/apis/crm/transcriptions.generated.ts +1 -10
- package/src/server/api-client-core/apis/crm/users-types.generated.ts +1 -72
- package/src/server/api-client-core/apis/crm/users.generated.ts +1 -58
- package/src/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.ts +0 -14
- package/src/server/api-client-core/apis/crm/video-conferencing-extension.generated.ts +0 -9
- package/src/server/api-client-core/apis/events/manage-event-definitions-types.generated.ts +0 -54
- package/src/server/api-client-core/apis/events/manage-event-definitions.generated.ts +0 -39
- package/src/server/api-client-core/apis/events/send-event-completions-types.generated.ts +2 -20
- package/src/server/api-client-core/apis/events/send-event-completions.generated.ts +2 -8
- package/src/server/api-client-core/apis/files-types.generated.ts +0 -90
- package/src/server/api-client-core/apis/files.generated.ts +0 -54
- package/src/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.ts +0 -98
- package/src/server/api-client-core/apis/marketing/campaigns-public-api.generated.ts +0 -72
- package/src/server/api-client-core/apis/marketing/marketing-emails-types.generated.ts +0 -82
- package/src/server/api-client-core/apis/marketing/marketing-emails.generated.ts +0 -44
- package/src/server/api-client-core/apis/marketing/marketing-events-types.generated.ts +4 -213
- package/src/server/api-client-core/apis/marketing/marketing-events.generated.ts +4 -200
- package/src/server/api-client-core/apis/marketing/single-send-types.generated.ts +1 -11
- package/src/server/api-client-core/apis/marketing/single-send.generated.ts +1 -5
- package/src/server/api-client-core/apis/marketing/transactional-single-send-types.generated.ts +1 -32
- package/src/server/api-client-core/apis/marketing/transactional-single-send.generated.ts +1 -17
- package/src/server/api-client-core/apis/scheduler/meetings-types.generated.ts +1 -17
- package/src/server/api-client-core/apis/scheduler/meetings.generated.ts +1 -9
- package/src/server/api-client-core/apis/settings/multicurrency-types.generated.ts +0 -59
- package/src/server/api-client-core/apis/settings/multicurrency.generated.ts +0 -25
- package/src/server/api-client-core/apis/settings/user-provisioning-types.generated.ts +0 -20
- package/src/server/api-client-core/apis/settings/user-provisioning.generated.ts +0 -12
- package/src/server/api-client-core/apis/webhooks-journal-types.generated.ts +0 -54
- package/src/server/api-client-core/apis/webhooks-journal.generated.ts +0 -18
- package/src/server/api-client-core/apis/webhooks-types.generated.ts +0 -108
- package/src/server/api-client-core/apis/webhooks.generated.ts +0 -46
- package/src/server/hono/hono-request-handler.test.ts +280 -0
- package/src/server/hono/hubspot-connect-routes/auth-complete.test.ts +26 -0
- package/src/server/hono/hubspot-connect-routes/auth-init-session.ts +0 -1
- package/src/server/hono/hubspot-connect-routes/oauth-client.test.ts +296 -0
- package/src/server/hono/hubspot-connect-routes/whoami.test.ts +237 -0
- package/src/server/import-app-keys.test.ts +79 -0
- package/src/server/secure-start-core.test.ts +122 -0
- package/vitest.config.ts +21 -3
- package/dist/browser/HubSpotAppConnect-721kYr9d.js.map +0 -1
- package/dist/browser/assets/src/browser/react/components/Button/Button.css.ts.vanilla-Df16gUKx.css +0 -42
- package/dist/browser/assets/src/browser/react/components/ShareButton/ShareButton.css.ts.vanilla-CY8SC-0T.css +0 -40
- package/dist/browser/assets/src/browser/theme.css.ts.vanilla-D_GBwEeI.css +0 -12
- package/dist/browser/create-ULhURoJ_.js.map +0 -1
- package/dist/browser/theme.css-CJbxi5hC.js.map +0 -1
- package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js +0 -25
- package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js.map +0 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
|
|
4
|
+
import { RadioGroup } from './RadioGroup.tsx';
|
|
5
|
+
|
|
6
|
+
const options = [
|
|
7
|
+
{ value: 'free', label: 'Free' },
|
|
8
|
+
{ value: 'pro', label: 'Pro' },
|
|
9
|
+
{ value: 'enterprise', label: 'Enterprise', disabled: true },
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
afterEach(cleanup);
|
|
13
|
+
|
|
14
|
+
describe('RadioGroup', () => {
|
|
15
|
+
it('renders a radio input for each option', () => {
|
|
16
|
+
render(<RadioGroup name="plan" options={options} />);
|
|
17
|
+
expect(screen.getAllByRole('radio')).toHaveLength(3);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('renders each option label', () => {
|
|
21
|
+
render(<RadioGroup name="plan" options={options} />);
|
|
22
|
+
expect(screen.getByLabelText('Free')).toBeInTheDocument();
|
|
23
|
+
expect(screen.getByLabelText('Pro')).toBeInTheDocument();
|
|
24
|
+
expect(screen.getByLabelText('Enterprise')).toBeInTheDocument();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('renders group label as legend', () => {
|
|
28
|
+
render(<RadioGroup name="plan" options={options} label="Choose a plan" />);
|
|
29
|
+
expect(screen.getByText('Choose a plan')).toBeInTheDocument();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('renders hint text', () => {
|
|
33
|
+
render(
|
|
34
|
+
<RadioGroup name="plan" options={options} hint="Select one option." />
|
|
35
|
+
);
|
|
36
|
+
expect(screen.getByText('Select one option.')).toBeInTheDocument();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('renders error text', () => {
|
|
40
|
+
render(
|
|
41
|
+
<RadioGroup name="plan" options={options} error="Please select a plan." />
|
|
42
|
+
);
|
|
43
|
+
expect(screen.getByText('Please select a plan.')).toBeInTheDocument();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('hides hint when error is also provided', () => {
|
|
47
|
+
render(
|
|
48
|
+
<RadioGroup name="plan" options={options} hint="Hint" error="Error" />
|
|
49
|
+
);
|
|
50
|
+
expect(screen.queryByText('Hint')).not.toBeInTheDocument();
|
|
51
|
+
expect(screen.getByText('Error')).toBeInTheDocument();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('disables individual option', () => {
|
|
55
|
+
render(<RadioGroup name="plan" options={options} />);
|
|
56
|
+
expect(screen.getByLabelText('Enterprise')).toBeDisabled();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('disables all options when group disabled is true', () => {
|
|
60
|
+
render(<RadioGroup name="plan" options={options} disabled />);
|
|
61
|
+
screen.getAllByRole('radio').forEach((r) => expect(r).toBeDisabled());
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('respects controlled value', () => {
|
|
65
|
+
render(
|
|
66
|
+
<RadioGroup
|
|
67
|
+
name="plan"
|
|
68
|
+
options={options}
|
|
69
|
+
value="pro"
|
|
70
|
+
onChange={vi.fn()}
|
|
71
|
+
/>
|
|
72
|
+
);
|
|
73
|
+
expect(screen.getByLabelText('Pro')).toBeChecked();
|
|
74
|
+
expect(screen.getByLabelText('Free')).not.toBeChecked();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('respects defaultValue for uncontrolled usage', () => {
|
|
78
|
+
render(<RadioGroup name="plan" options={options} defaultValue="free" />);
|
|
79
|
+
expect(screen.getByLabelText('Free')).toBeChecked();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('calls onChange with the selected value string', () => {
|
|
83
|
+
const onChange = vi.fn();
|
|
84
|
+
render(<RadioGroup name="plan" options={options} onChange={onChange} />);
|
|
85
|
+
fireEvent.click(screen.getByLabelText('Pro'));
|
|
86
|
+
expect(onChange).toHaveBeenCalledWith('pro');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('forwards custom className', () => {
|
|
90
|
+
const { container } = render(
|
|
91
|
+
<RadioGroup name="plan" options={options} className="custom" />
|
|
92
|
+
);
|
|
93
|
+
expect(container.firstChild).toHaveClass('custom');
|
|
94
|
+
});
|
|
95
|
+
});
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { useId } from 'react';
|
|
2
|
+
|
|
3
|
+
import * as styles from './RadioGroup.css.ts';
|
|
4
|
+
|
|
5
|
+
export interface RadioOption {
|
|
6
|
+
value: string;
|
|
7
|
+
label: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface RadioGroupProps {
|
|
12
|
+
name: string;
|
|
13
|
+
options: RadioOption[];
|
|
14
|
+
label?: string;
|
|
15
|
+
value?: string;
|
|
16
|
+
defaultValue?: string;
|
|
17
|
+
onChange?: (value: string) => void;
|
|
18
|
+
hint?: string;
|
|
19
|
+
error?: string;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function RadioGroup({
|
|
25
|
+
name,
|
|
26
|
+
options,
|
|
27
|
+
label,
|
|
28
|
+
value,
|
|
29
|
+
defaultValue,
|
|
30
|
+
onChange,
|
|
31
|
+
hint,
|
|
32
|
+
error,
|
|
33
|
+
disabled = false,
|
|
34
|
+
className,
|
|
35
|
+
}: RadioGroupProps) {
|
|
36
|
+
const groupId = useId();
|
|
37
|
+
const descriptionId = (error ?? hint) ? `${groupId}-description` : undefined;
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<fieldset
|
|
41
|
+
className={[styles.fieldset, className].filter(Boolean).join(' ')}
|
|
42
|
+
aria-describedby={descriptionId}
|
|
43
|
+
>
|
|
44
|
+
{label && <legend className={styles.legend}>{label}</legend>}
|
|
45
|
+
<div className={styles.optionList}>
|
|
46
|
+
{options.map((option) => {
|
|
47
|
+
const optionId = `${groupId}-${option.value}`;
|
|
48
|
+
const isDisabled = disabled || option.disabled;
|
|
49
|
+
const rowClassName = [
|
|
50
|
+
styles.row,
|
|
51
|
+
isDisabled ? styles.rowDisabled : undefined,
|
|
52
|
+
]
|
|
53
|
+
.filter(Boolean)
|
|
54
|
+
.join(' ');
|
|
55
|
+
const circleClassName = [
|
|
56
|
+
styles.circle,
|
|
57
|
+
error ? styles.circleError : undefined,
|
|
58
|
+
]
|
|
59
|
+
.filter(Boolean)
|
|
60
|
+
.join(' ');
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<label
|
|
64
|
+
key={option.value}
|
|
65
|
+
className={rowClassName}
|
|
66
|
+
htmlFor={optionId}
|
|
67
|
+
>
|
|
68
|
+
<input
|
|
69
|
+
type="radio"
|
|
70
|
+
id={optionId}
|
|
71
|
+
name={name}
|
|
72
|
+
value={option.value}
|
|
73
|
+
disabled={isDisabled}
|
|
74
|
+
checked={
|
|
75
|
+
value !== undefined ? value === option.value : undefined
|
|
76
|
+
}
|
|
77
|
+
defaultChecked={
|
|
78
|
+
value === undefined && defaultValue !== undefined
|
|
79
|
+
? defaultValue === option.value
|
|
80
|
+
: undefined
|
|
81
|
+
}
|
|
82
|
+
onChange={
|
|
83
|
+
onChange
|
|
84
|
+
? (e) => {
|
|
85
|
+
if (e.target.checked) onChange(option.value);
|
|
86
|
+
}
|
|
87
|
+
: undefined
|
|
88
|
+
}
|
|
89
|
+
className={styles.nativeInput}
|
|
90
|
+
aria-invalid={error ? true : undefined}
|
|
91
|
+
/>
|
|
92
|
+
<span className={circleClassName} aria-hidden="true" />
|
|
93
|
+
<span className={styles.labelText}>{option.label}</span>
|
|
94
|
+
</label>
|
|
95
|
+
);
|
|
96
|
+
})}
|
|
97
|
+
</div>
|
|
98
|
+
{error ? (
|
|
99
|
+
<span id={descriptionId} className={styles.error}>
|
|
100
|
+
{error}
|
|
101
|
+
</span>
|
|
102
|
+
) : hint ? (
|
|
103
|
+
<span id={descriptionId} className={styles.hint}>
|
|
104
|
+
{hint}
|
|
105
|
+
</span>
|
|
106
|
+
) : null}
|
|
107
|
+
</fieldset>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { style, styleVariants } from '@vanilla-extract/css';
|
|
2
|
+
|
|
3
|
+
import { themeVars } from '../../../theme.css.ts';
|
|
4
|
+
import { fontFamily, typeScale } from '../../../typography-tokens.ts';
|
|
5
|
+
|
|
6
|
+
export const field = style({
|
|
7
|
+
display: 'flex',
|
|
8
|
+
flexDirection: 'column',
|
|
9
|
+
gap: themeVars.space[100],
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
export const label = style({
|
|
13
|
+
fontFamily: fontFamily.display,
|
|
14
|
+
fontSize: typeScale.label.fontSize,
|
|
15
|
+
lineHeight: typeScale.label.lineHeight,
|
|
16
|
+
fontWeight: typeScale.label.fontWeight,
|
|
17
|
+
color: themeVars.text.core.default,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export const wrapper = style({
|
|
21
|
+
position: 'relative',
|
|
22
|
+
display: 'block',
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Chevron encoded as inline SVG — uses a neutral gray that reads well on white
|
|
26
|
+
const chevronSvg = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")`;
|
|
27
|
+
|
|
28
|
+
export const select = style({
|
|
29
|
+
appearance: 'none',
|
|
30
|
+
WebkitAppearance: 'none',
|
|
31
|
+
margin: 0,
|
|
32
|
+
font: 'inherit',
|
|
33
|
+
fontSize: 14,
|
|
34
|
+
width: '100%',
|
|
35
|
+
minHeight: '40px',
|
|
36
|
+
paddingBlock: 0,
|
|
37
|
+
paddingInlineStart: themeVars.space[300],
|
|
38
|
+
paddingInlineEnd: themeVars.space[800],
|
|
39
|
+
fontFamily: fontFamily.display,
|
|
40
|
+
color: themeVars.text.core.default,
|
|
41
|
+
backgroundColor: themeVars.fill.surface.recessed.default,
|
|
42
|
+
borderWidth: 1,
|
|
43
|
+
borderStyle: 'solid',
|
|
44
|
+
borderColor: themeVars.border.core.disabled,
|
|
45
|
+
borderRadius: themeVars.borderRadius[300],
|
|
46
|
+
backgroundImage: chevronSvg,
|
|
47
|
+
backgroundRepeat: 'no-repeat',
|
|
48
|
+
backgroundPosition: `right ${themeVars.space[300]} center`,
|
|
49
|
+
cursor: 'pointer',
|
|
50
|
+
transition: 'border-color 120ms ease',
|
|
51
|
+
selectors: {
|
|
52
|
+
'&:hover:not(:disabled):not(:focus-visible)': {
|
|
53
|
+
borderColor: themeVars.border.core.default,
|
|
54
|
+
},
|
|
55
|
+
'&:focus-visible': {
|
|
56
|
+
outline: `2px solid ${themeVars.fill.brand.default}`,
|
|
57
|
+
outlineOffset: '2px',
|
|
58
|
+
},
|
|
59
|
+
'&:disabled': {
|
|
60
|
+
cursor: 'not-allowed',
|
|
61
|
+
backgroundColor: themeVars.fill.tertiary.disabled,
|
|
62
|
+
borderColor: themeVars.border.core.disabled,
|
|
63
|
+
color: themeVars.text.core.disabled,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
export const selectVariant = styleVariants({
|
|
69
|
+
default: {},
|
|
70
|
+
error: {
|
|
71
|
+
borderColor: themeVars.border.alert.default,
|
|
72
|
+
selectors: {
|
|
73
|
+
'&:hover:not(:disabled):not(:focus-visible)': {
|
|
74
|
+
borderColor: themeVars.border.alert.default,
|
|
75
|
+
},
|
|
76
|
+
'&:focus-visible': {
|
|
77
|
+
outline: `2px solid ${themeVars.border.alert.default}`,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
export const hint = style({
|
|
84
|
+
fontFamily: fontFamily.display,
|
|
85
|
+
fontSize: typeScale.label.fontSize,
|
|
86
|
+
lineHeight: typeScale.label.lineHeight,
|
|
87
|
+
color: themeVars.text.core.subtle,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
export const error = style({
|
|
91
|
+
fontFamily: fontFamily.display,
|
|
92
|
+
fontSize: typeScale.label.fontSize,
|
|
93
|
+
lineHeight: typeScale.label.lineHeight,
|
|
94
|
+
color: themeVars.text.alert.default,
|
|
95
|
+
});
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
|
|
4
|
+
import { Select } from './Select.tsx';
|
|
5
|
+
|
|
6
|
+
const options = [
|
|
7
|
+
{ value: 'us', label: 'United States' },
|
|
8
|
+
{ value: 'ca', label: 'Canada' },
|
|
9
|
+
{ value: 'mx', label: 'Mexico', disabled: true },
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
afterEach(cleanup);
|
|
13
|
+
|
|
14
|
+
describe('Select', () => {
|
|
15
|
+
it('renders as a <select> element', () => {
|
|
16
|
+
render(<Select options={options} />);
|
|
17
|
+
expect(screen.getByRole('combobox')).toBeInTheDocument();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('renders all options', () => {
|
|
21
|
+
render(<Select options={options} />);
|
|
22
|
+
expect(
|
|
23
|
+
screen.getByRole('option', { name: 'United States' })
|
|
24
|
+
).toBeInTheDocument();
|
|
25
|
+
expect(screen.getByRole('option', { name: 'Canada' })).toBeInTheDocument();
|
|
26
|
+
expect(screen.getByRole('option', { name: 'Mexico' })).toBeInTheDocument();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('renders a hidden disabled placeholder option', () => {
|
|
30
|
+
const { container } = render(
|
|
31
|
+
<Select options={options} placeholder="Choose a country" />
|
|
32
|
+
);
|
|
33
|
+
const placeholder = container.querySelector('option[value=""]');
|
|
34
|
+
expect(placeholder).toBeInTheDocument();
|
|
35
|
+
expect(placeholder).toBeDisabled();
|
|
36
|
+
expect(placeholder).toHaveAttribute('hidden');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('renders label and associates it with the select', () => {
|
|
40
|
+
render(<Select options={options} label="Country" />);
|
|
41
|
+
expect(screen.getByLabelText('Country')).toBeInTheDocument();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('renders hint text', () => {
|
|
45
|
+
render(
|
|
46
|
+
<Select options={options} hint="Select your country of residence." />
|
|
47
|
+
);
|
|
48
|
+
expect(
|
|
49
|
+
screen.getByText('Select your country of residence.')
|
|
50
|
+
).toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('renders error text', () => {
|
|
54
|
+
render(<Select options={options} error="Please select a country." />);
|
|
55
|
+
expect(screen.getByText('Please select a country.')).toBeInTheDocument();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('sets aria-invalid when error is provided', () => {
|
|
59
|
+
render(<Select options={options} error="Required" />);
|
|
60
|
+
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
61
|
+
'aria-invalid',
|
|
62
|
+
'true'
|
|
63
|
+
);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('hides hint when error is also provided', () => {
|
|
67
|
+
render(<Select options={options} hint="Hint" error="Error" />);
|
|
68
|
+
expect(screen.queryByText('Hint')).not.toBeInTheDocument();
|
|
69
|
+
expect(screen.getByText('Error')).toBeInTheDocument();
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('forwards disabled prop', () => {
|
|
73
|
+
render(<Select options={options} disabled />);
|
|
74
|
+
expect(screen.getByRole('combobox')).toBeDisabled();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('disables individual options', () => {
|
|
78
|
+
render(<Select options={options} />);
|
|
79
|
+
expect(screen.getByRole('option', { name: 'Mexico' })).toBeDisabled();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('merges custom className onto the select element', () => {
|
|
83
|
+
render(<Select options={options} className="custom" />);
|
|
84
|
+
expect(screen.getByRole('combobox')).toHaveClass('custom');
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('forwards data-testid', () => {
|
|
88
|
+
render(<Select options={options} data-testid="my-select" />);
|
|
89
|
+
expect(screen.getByTestId('my-select')).toBeInTheDocument();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('applies distinct className for error vs default', () => {
|
|
93
|
+
const { rerender } = render(<Select options={options} />);
|
|
94
|
+
const defaultClass = screen.getByRole('combobox').className;
|
|
95
|
+
rerender(<Select options={options} error="oops" />);
|
|
96
|
+
expect(screen.getByRole('combobox').className).not.toBe(defaultClass);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('calls onChange when selection changes', () => {
|
|
100
|
+
const onChange = vi.fn();
|
|
101
|
+
render(<Select options={options} onChange={onChange} />);
|
|
102
|
+
fireEvent.change(screen.getByRole('combobox'), { target: { value: 'ca' } });
|
|
103
|
+
expect(onChange).toHaveBeenCalledOnce();
|
|
104
|
+
});
|
|
105
|
+
});
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { useId, type SelectHTMLAttributes } from 'react';
|
|
2
|
+
|
|
3
|
+
import * as styles from './Select.css.ts';
|
|
4
|
+
|
|
5
|
+
export interface SelectOption {
|
|
6
|
+
value: string;
|
|
7
|
+
label: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface SelectProps extends Omit<
|
|
12
|
+
SelectHTMLAttributes<HTMLSelectElement>,
|
|
13
|
+
'size'
|
|
14
|
+
> {
|
|
15
|
+
label?: string;
|
|
16
|
+
hint?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
options: SelectOption[];
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function Select({
|
|
23
|
+
label,
|
|
24
|
+
hint,
|
|
25
|
+
error,
|
|
26
|
+
options,
|
|
27
|
+
placeholder,
|
|
28
|
+
id: idProp,
|
|
29
|
+
className,
|
|
30
|
+
disabled,
|
|
31
|
+
...rest
|
|
32
|
+
}: SelectProps) {
|
|
33
|
+
const generatedId = useId();
|
|
34
|
+
const id = idProp ?? generatedId;
|
|
35
|
+
const descriptionId = (error ?? hint) ? `${id}-description` : undefined;
|
|
36
|
+
|
|
37
|
+
const selectClassName = [
|
|
38
|
+
styles.select,
|
|
39
|
+
styles.selectVariant[error ? 'error' : 'default'],
|
|
40
|
+
className,
|
|
41
|
+
]
|
|
42
|
+
.filter(Boolean)
|
|
43
|
+
.join(' ');
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<div className={styles.field}>
|
|
47
|
+
{label && (
|
|
48
|
+
<label className={styles.label} htmlFor={id}>
|
|
49
|
+
{label}
|
|
50
|
+
</label>
|
|
51
|
+
)}
|
|
52
|
+
<div className={styles.wrapper}>
|
|
53
|
+
<select
|
|
54
|
+
{...rest}
|
|
55
|
+
id={id}
|
|
56
|
+
disabled={disabled}
|
|
57
|
+
className={selectClassName}
|
|
58
|
+
aria-invalid={error ? true : undefined}
|
|
59
|
+
aria-describedby={descriptionId}
|
|
60
|
+
>
|
|
61
|
+
{placeholder && (
|
|
62
|
+
<option value="" disabled hidden>
|
|
63
|
+
{placeholder}
|
|
64
|
+
</option>
|
|
65
|
+
)}
|
|
66
|
+
{options.map((opt) => (
|
|
67
|
+
<option key={opt.value} value={opt.value} disabled={opt.disabled}>
|
|
68
|
+
{opt.label}
|
|
69
|
+
</option>
|
|
70
|
+
))}
|
|
71
|
+
</select>
|
|
72
|
+
</div>
|
|
73
|
+
{error ? (
|
|
74
|
+
<span id={descriptionId} className={styles.error}>
|
|
75
|
+
{error}
|
|
76
|
+
</span>
|
|
77
|
+
) : hint ? (
|
|
78
|
+
<span id={descriptionId} className={styles.hint}>
|
|
79
|
+
{hint}
|
|
80
|
+
</span>
|
|
81
|
+
) : null}
|
|
82
|
+
</div>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Select, type SelectOption, type SelectProps } from './Select.tsx';
|
|
@@ -1,48 +1,6 @@
|
|
|
1
1
|
import { style } from '@vanilla-extract/css';
|
|
2
2
|
|
|
3
|
-
import { themeVars } from '../../../theme.css.ts';
|
|
4
|
-
|
|
5
|
-
const shareBorder = '#cbd6e2';
|
|
6
|
-
const shareText = '#33475b';
|
|
7
|
-
|
|
8
3
|
export const styles = {
|
|
9
|
-
shareButton: style({
|
|
10
|
-
flexShrink: 0,
|
|
11
|
-
appearance: 'none',
|
|
12
|
-
WebkitAppearance: 'none',
|
|
13
|
-
margin: 0,
|
|
14
|
-
fontFamily: 'inherit',
|
|
15
|
-
fontSize: 14,
|
|
16
|
-
fontWeight: 500,
|
|
17
|
-
lineHeight: 1,
|
|
18
|
-
cursor: 'pointer',
|
|
19
|
-
display: 'inline-flex',
|
|
20
|
-
alignItems: 'center',
|
|
21
|
-
justifyContent: 'center',
|
|
22
|
-
gap: themeVars.space[200],
|
|
23
|
-
padding: `8px ${themeVars.space[300]}`,
|
|
24
|
-
color: shareText,
|
|
25
|
-
backgroundColor: themeVars.fill.surface.default.default,
|
|
26
|
-
borderWidth: 1,
|
|
27
|
-
borderStyle: 'solid',
|
|
28
|
-
borderColor: shareBorder,
|
|
29
|
-
borderRadius: 100,
|
|
30
|
-
transition:
|
|
31
|
-
'background-color 120ms ease, border-color 120ms ease, color 120ms ease',
|
|
32
|
-
selectors: {
|
|
33
|
-
'&:hover:not(:disabled)': {
|
|
34
|
-
backgroundColor: '#f5f8fa',
|
|
35
|
-
},
|
|
36
|
-
'&:focus-visible': {
|
|
37
|
-
outline: `2px solid ${themeVars.border.tertiary.default}`,
|
|
38
|
-
outlineOffset: 2,
|
|
39
|
-
},
|
|
40
|
-
'&:disabled': {
|
|
41
|
-
cursor: 'not-allowed',
|
|
42
|
-
opacity: 0.55,
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
}),
|
|
46
4
|
shareIcon: style({
|
|
47
5
|
width: 16,
|
|
48
6
|
height: 16,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Button } from '../Button/Button.tsx';
|
|
1
2
|
import { ShareIcon } from '../icons/ShareIcon.tsx';
|
|
2
3
|
import { styles } from './ShareButton.css.ts';
|
|
3
4
|
|
|
@@ -31,13 +32,14 @@ export interface ShareButtonProps {
|
|
|
31
32
|
|
|
32
33
|
export function ShareButton({ pageTitle }: ShareButtonProps) {
|
|
33
34
|
return (
|
|
34
|
-
<
|
|
35
|
+
<Button
|
|
35
36
|
type="button"
|
|
36
|
-
|
|
37
|
+
variant="outline"
|
|
38
|
+
size="xs"
|
|
37
39
|
onClick={() => void shareAppConnectPage({ pageTitle })}
|
|
38
40
|
>
|
|
39
41
|
<ShareIcon className={styles.shareIcon} />
|
|
40
42
|
<span>Share</span>
|
|
41
|
-
</
|
|
43
|
+
</Button>
|
|
42
44
|
);
|
|
43
45
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { styleVariants } from '@vanilla-extract/css';
|
|
2
|
+
|
|
3
|
+
import { themeVars } from '../../../theme.css.ts';
|
|
4
|
+
import { fontFamily, typeScale } from '../../../typography-tokens.ts';
|
|
5
|
+
|
|
6
|
+
export const color = styleVariants({
|
|
7
|
+
black: { color: themeVars.text.core.default },
|
|
8
|
+
gray: { color: themeVars.text.core.subtle },
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export const variant = styleVariants({
|
|
12
|
+
display: { fontFamily: fontFamily.display, ...typeScale.display },
|
|
13
|
+
h1: { fontFamily: fontFamily.display, ...typeScale.h1 },
|
|
14
|
+
h2: { fontFamily: fontFamily.display, ...typeScale.h2 },
|
|
15
|
+
h3: { fontFamily: fontFamily.display, ...typeScale.h3 },
|
|
16
|
+
h4: { fontFamily: fontFamily.display, ...typeScale.h4 },
|
|
17
|
+
body: { fontFamily: fontFamily.system, ...typeScale.body },
|
|
18
|
+
label: { fontFamily: fontFamily.system, ...typeScale.label },
|
|
19
|
+
eyebrow: {
|
|
20
|
+
fontFamily: fontFamily.system,
|
|
21
|
+
...typeScale.eyebrow,
|
|
22
|
+
letterSpacing: '0.08em',
|
|
23
|
+
textTransform: 'uppercase',
|
|
24
|
+
},
|
|
25
|
+
mono: { fontFamily: fontFamily.mono, ...typeScale.mono },
|
|
26
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { cleanup, render, screen } from '@testing-library/react';
|
|
2
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
3
|
+
|
|
4
|
+
import { Text, type TextVariant } from './Text.tsx';
|
|
5
|
+
|
|
6
|
+
afterEach(cleanup);
|
|
7
|
+
|
|
8
|
+
describe('Text', () => {
|
|
9
|
+
it('renders body variant as <p> by default', () => {
|
|
10
|
+
render(<Text variant="body">hello</Text>);
|
|
11
|
+
expect(screen.getByText('hello').tagName).toBe('P');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const defaultElements: Array<[TextVariant, string]> = [
|
|
15
|
+
['display', 'P'],
|
|
16
|
+
['h1', 'H1'],
|
|
17
|
+
['h2', 'H2'],
|
|
18
|
+
['h3', 'H3'],
|
|
19
|
+
['h4', 'H4'],
|
|
20
|
+
['body', 'P'],
|
|
21
|
+
['label', 'SPAN'],
|
|
22
|
+
['eyebrow', 'SPAN'],
|
|
23
|
+
['mono', 'SPAN'],
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
for (const [variant, tag] of defaultElements) {
|
|
27
|
+
it(`renders ${variant} as <${tag.toLowerCase()}> by default`, () => {
|
|
28
|
+
render(<Text variant={variant}>text</Text>);
|
|
29
|
+
expect(screen.getByText('text').tagName).toBe(tag);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
it('overrides element with the as prop', () => {
|
|
34
|
+
render(
|
|
35
|
+
<Text variant="label" as="p">
|
|
36
|
+
override
|
|
37
|
+
</Text>
|
|
38
|
+
);
|
|
39
|
+
expect(screen.getByText('override').tagName).toBe('P');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('merges className with the variant class', () => {
|
|
43
|
+
render(<Text className="custom">text</Text>);
|
|
44
|
+
expect(screen.getByText('text')).toHaveClass('custom');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('forwards arbitrary HTML attributes', () => {
|
|
48
|
+
render(
|
|
49
|
+
<Text data-testid="greeting" aria-label="greeting text">
|
|
50
|
+
hi
|
|
51
|
+
</Text>
|
|
52
|
+
);
|
|
53
|
+
expect(screen.getByTestId('greeting')).toHaveAttribute(
|
|
54
|
+
'aria-label',
|
|
55
|
+
'greeting text'
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('defaults to body variant when no variant is specified', () => {
|
|
60
|
+
render(<Text>default</Text>);
|
|
61
|
+
expect(screen.getByText('default').tagName).toBe('P');
|
|
62
|
+
});
|
|
63
|
+
});
|