@oxy.so/bloom 5.1.0 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/adoption-matrix.mdx +9 -9
- package/docs/button.mdx +2 -0
- package/docs/card-form.mdx +2 -0
- package/docs/chat-composer.mdx +1 -1
- package/docs/earnings.mdx +2 -0
- package/docs/field.mdx +2 -0
- package/docs/label.mdx +2 -0
- package/docs/payment-method.mdx +2 -0
- package/docs/place-details.mdx +2 -2
- package/docs/proof-of-delivery.mdx +4 -0
- package/docs/select.mdx +2 -0
- package/lib/commonjs/button/Button.js +36 -3
- package/lib/commonjs/button/Button.js.map +1 -1
- package/lib/commonjs/button/GlyphButton.js +7 -3
- package/lib/commonjs/button/GlyphButton.js.map +1 -1
- package/lib/commonjs/card-form/shared.js +3 -2
- package/lib/commonjs/card-form/shared.js.map +1 -1
- package/lib/commonjs/chat-composer/AttachmentMenu.js +8 -227
- package/lib/commonjs/chat-composer/AttachmentMenu.js.map +1 -1
- package/lib/commonjs/chat-composer/AttachmentMenu.web.js +16 -0
- package/lib/commonjs/chat-composer/AttachmentMenu.web.js.map +1 -0
- package/lib/commonjs/chat-composer/ChatComposer.js +9 -388
- package/lib/commonjs/chat-composer/ChatComposer.js.map +1 -1
- package/lib/commonjs/chat-composer/ChatComposer.web.js +16 -0
- package/lib/commonjs/chat-composer/ChatComposer.web.js.map +1 -0
- package/lib/commonjs/chat-composer/ComposerAttachmentStrip.js +5 -200
- package/lib/commonjs/chat-composer/ComposerAttachmentStrip.js.map +1 -1
- package/lib/commonjs/chat-composer/ComposerAttachmentStrip.web.js +12 -0
- package/lib/commonjs/chat-composer/ComposerAttachmentStrip.web.js.map +1 -0
- package/lib/commonjs/chat-composer/ComposerBanner.js +5 -163
- package/lib/commonjs/chat-composer/ComposerBanner.js.map +1 -1
- package/lib/commonjs/chat-composer/ComposerBanner.web.js +12 -0
- package/lib/commonjs/chat-composer/ComposerBanner.web.js.map +1 -0
- package/lib/commonjs/chat-composer/EmojiPicker.js +6 -443
- package/lib/commonjs/chat-composer/EmojiPicker.js.map +1 -1
- package/lib/commonjs/chat-composer/EmojiPicker.web.js +14 -0
- package/lib/commonjs/chat-composer/EmojiPicker.web.js.map +1 -0
- package/lib/commonjs/chat-composer/MessageContextMenu.js +12 -102
- package/lib/commonjs/chat-composer/MessageContextMenu.js.map +1 -1
- package/lib/commonjs/chat-composer/MessageContextMenu.web.js +19 -0
- package/lib/commonjs/chat-composer/MessageContextMenu.web.js.map +1 -0
- package/lib/commonjs/chat-composer/ReactionPicker.js +6 -107
- package/lib/commonjs/chat-composer/ReactionPicker.js.map +1 -1
- package/lib/commonjs/chat-composer/ReactionPicker.web.js +14 -0
- package/lib/commonjs/chat-composer/ReactionPicker.web.js.map +1 -0
- package/lib/commonjs/chat-composer/SuggestionList.js +5 -222
- package/lib/commonjs/chat-composer/SuggestionList.js.map +1 -1
- package/lib/commonjs/chat-composer/SuggestionList.web.js +12 -0
- package/lib/commonjs/chat-composer/SuggestionList.web.js.map +1 -0
- package/lib/commonjs/chat-composer/VoiceRecorder.js +7 -263
- package/lib/commonjs/chat-composer/VoiceRecorder.js.map +1 -1
- package/lib/commonjs/chat-composer/VoiceRecorder.web.js +16 -0
- package/lib/commonjs/chat-composer/VoiceRecorder.web.js.map +1 -0
- package/lib/commonjs/chat-composer/create-attachment-menu.js +243 -0
- package/lib/commonjs/chat-composer/create-attachment-menu.js.map +1 -0
- package/lib/commonjs/chat-composer/create-chat-composer.js +400 -0
- package/lib/commonjs/chat-composer/create-chat-composer.js.map +1 -0
- package/lib/commonjs/chat-composer/create-composer-attachment-strip.js +212 -0
- package/lib/commonjs/chat-composer/create-composer-attachment-strip.js.map +1 -0
- package/lib/commonjs/chat-composer/create-composer-banner.js +176 -0
- package/lib/commonjs/chat-composer/create-composer-banner.js.map +1 -0
- package/lib/commonjs/chat-composer/create-emoji-picker.js +456 -0
- package/lib/commonjs/chat-composer/create-emoji-picker.js.map +1 -0
- package/lib/commonjs/chat-composer/create-message-context-menu.js +119 -0
- package/lib/commonjs/chat-composer/create-message-context-menu.js.map +1 -0
- package/lib/commonjs/chat-composer/create-reaction-picker.js +120 -0
- package/lib/commonjs/chat-composer/create-reaction-picker.js.map +1 -0
- package/lib/commonjs/chat-composer/create-suggestion-list.js +234 -0
- package/lib/commonjs/chat-composer/create-suggestion-list.js.map +1 -0
- package/lib/commonjs/chat-composer/create-voice-recorder.js +277 -0
- package/lib/commonjs/chat-composer/create-voice-recorder.js.map +1 -0
- package/lib/commonjs/chat-composer/index.js +9 -9
- package/lib/commonjs/chat-composer/index.web.js +18 -18
- package/lib/commonjs/chat-composer/index.web.js.map +1 -1
- package/lib/commonjs/earnings/EarningsSummary.js +12 -2
- package/lib/commonjs/earnings/EarningsSummary.js.map +1 -1
- package/lib/commonjs/field/Field.js +2 -0
- package/lib/commonjs/field/Field.js.map +1 -1
- package/lib/commonjs/item/Item.js +16 -8
- package/lib/commonjs/item/Item.js.map +1 -1
- package/lib/commonjs/job-board/JobCard.js +6 -2
- package/lib/commonjs/job-board/JobCard.js.map +1 -1
- package/lib/commonjs/label/Label.js +2 -1
- package/lib/commonjs/label/Label.js.map +1 -1
- package/lib/commonjs/listing-details/AmenityList.js +4 -3
- package/lib/commonjs/listing-details/AmenityList.js.map +1 -1
- package/lib/commonjs/mail-compose/MailComposeSurface.js +1 -1
- package/lib/commonjs/overlay/InteractionBoundary.js +28 -0
- package/lib/commonjs/overlay/InteractionBoundary.js.map +1 -0
- package/lib/commonjs/payment-method/PaymentMethodList.js +3 -2
- package/lib/commonjs/payment-method/PaymentMethodList.js.map +1 -1
- package/lib/commonjs/place-details/PlaceAmenities.js +17 -6
- package/lib/commonjs/place-details/PlaceAmenities.js.map +1 -1
- package/lib/commonjs/place-details/PlacePopularTimes.js +7 -1
- package/lib/commonjs/place-details/PlacePopularTimes.js.map +1 -1
- package/lib/commonjs/proof-of-delivery/ProofOfDelivery.js +10 -1
- package/lib/commonjs/proof-of-delivery/ProofOfDelivery.js.map +1 -1
- package/lib/commonjs/proof-of-delivery/shared.js +1 -1
- package/lib/commonjs/proof-of-delivery/shared.js.map +1 -1
- package/lib/commonjs/select/Select.js +7 -4
- package/lib/commonjs/select/Select.js.map +1 -1
- package/lib/commonjs/select/Select.web.js +7 -4
- package/lib/commonjs/select/Select.web.js.map +1 -1
- package/lib/commonjs/select/use-required-description.js +37 -0
- package/lib/commonjs/select/use-required-description.js.map +1 -0
- package/lib/module/button/Button.js +36 -3
- package/lib/module/button/Button.js.map +1 -1
- package/lib/module/button/GlyphButton.js +7 -3
- package/lib/module/button/GlyphButton.js.map +1 -1
- package/lib/module/card-form/shared.js +3 -2
- package/lib/module/card-form/shared.js.map +1 -1
- package/lib/module/chat-composer/AttachmentMenu.js +7 -226
- package/lib/module/chat-composer/AttachmentMenu.js.map +1 -1
- package/lib/module/chat-composer/AttachmentMenu.web.js +12 -0
- package/lib/module/chat-composer/AttachmentMenu.web.js.map +1 -0
- package/lib/module/chat-composer/ChatComposer.js +8 -385
- package/lib/module/chat-composer/ChatComposer.js.map +1 -1
- package/lib/module/chat-composer/ChatComposer.web.js +12 -0
- package/lib/module/chat-composer/ChatComposer.web.js.map +1 -0
- package/lib/module/chat-composer/ComposerAttachmentStrip.js +4 -196
- package/lib/module/chat-composer/ComposerAttachmentStrip.js.map +1 -1
- package/lib/module/chat-composer/ComposerAttachmentStrip.web.js +8 -0
- package/lib/module/chat-composer/ComposerAttachmentStrip.web.js.map +1 -0
- package/lib/module/chat-composer/ComposerBanner.js +4 -162
- package/lib/module/chat-composer/ComposerBanner.js.map +1 -1
- package/lib/module/chat-composer/ComposerBanner.web.js +8 -0
- package/lib/module/chat-composer/ComposerBanner.web.js.map +1 -0
- package/lib/module/chat-composer/EmojiPicker.js +5 -440
- package/lib/module/chat-composer/EmojiPicker.js.map +1 -1
- package/lib/module/chat-composer/EmojiPicker.web.js +10 -0
- package/lib/module/chat-composer/EmojiPicker.web.js.map +1 -0
- package/lib/module/chat-composer/MessageContextMenu.js +11 -99
- package/lib/module/chat-composer/MessageContextMenu.js.map +1 -1
- package/lib/module/chat-composer/MessageContextMenu.web.js +15 -0
- package/lib/module/chat-composer/MessageContextMenu.web.js.map +1 -0
- package/lib/module/chat-composer/ReactionPicker.js +5 -104
- package/lib/module/chat-composer/ReactionPicker.js.map +1 -1
- package/lib/module/chat-composer/ReactionPicker.web.js +10 -0
- package/lib/module/chat-composer/ReactionPicker.web.js.map +1 -0
- package/lib/module/chat-composer/SuggestionList.js +4 -219
- package/lib/module/chat-composer/SuggestionList.js.map +1 -1
- package/lib/module/chat-composer/SuggestionList.web.js +8 -0
- package/lib/module/chat-composer/SuggestionList.web.js.map +1 -0
- package/lib/module/chat-composer/VoiceRecorder.js +6 -260
- package/lib/module/chat-composer/VoiceRecorder.js.map +1 -1
- package/lib/module/chat-composer/VoiceRecorder.web.js +12 -0
- package/lib/module/chat-composer/VoiceRecorder.web.js.map +1 -0
- package/lib/module/chat-composer/create-attachment-menu.js +238 -0
- package/lib/module/chat-composer/create-attachment-menu.js.map +1 -0
- package/lib/module/chat-composer/create-chat-composer.js +395 -0
- package/lib/module/chat-composer/create-chat-composer.js.map +1 -0
- package/lib/module/chat-composer/create-composer-attachment-strip.js +206 -0
- package/lib/module/chat-composer/create-composer-attachment-strip.js.map +1 -0
- package/lib/module/chat-composer/create-composer-banner.js +171 -0
- package/lib/module/chat-composer/create-composer-banner.js.map +1 -0
- package/lib/module/chat-composer/create-emoji-picker.js +451 -0
- package/lib/module/chat-composer/create-emoji-picker.js.map +1 -0
- package/lib/module/chat-composer/create-message-context-menu.js +114 -0
- package/lib/module/chat-composer/create-message-context-menu.js.map +1 -0
- package/lib/module/chat-composer/create-reaction-picker.js +115 -0
- package/lib/module/chat-composer/create-reaction-picker.js.map +1 -0
- package/lib/module/chat-composer/create-suggestion-list.js +229 -0
- package/lib/module/chat-composer/create-suggestion-list.js.map +1 -0
- package/lib/module/chat-composer/create-voice-recorder.js +272 -0
- package/lib/module/chat-composer/create-voice-recorder.js.map +1 -0
- package/lib/module/chat-composer/index.js +9 -9
- package/lib/module/chat-composer/index.js.map +1 -1
- package/lib/module/chat-composer/index.web.js +9 -9
- package/lib/module/chat-composer/index.web.js.map +1 -1
- package/lib/module/earnings/EarningsSummary.js +12 -2
- package/lib/module/earnings/EarningsSummary.js.map +1 -1
- package/lib/module/field/Field.js +2 -0
- package/lib/module/field/Field.js.map +1 -1
- package/lib/module/item/Item.js +16 -8
- package/lib/module/item/Item.js.map +1 -1
- package/lib/module/job-board/JobCard.js +6 -2
- package/lib/module/job-board/JobCard.js.map +1 -1
- package/lib/module/label/Label.js +2 -1
- package/lib/module/label/Label.js.map +1 -1
- package/lib/module/listing-details/AmenityList.js +4 -3
- package/lib/module/listing-details/AmenityList.js.map +1 -1
- package/lib/module/mail-compose/MailComposeSurface.js +1 -1
- package/lib/module/mail-compose/MailComposeSurface.js.map +1 -1
- package/lib/module/overlay/InteractionBoundary.js +25 -0
- package/lib/module/overlay/InteractionBoundary.js.map +1 -0
- package/lib/module/payment-method/PaymentMethodList.js +3 -2
- package/lib/module/payment-method/PaymentMethodList.js.map +1 -1
- package/lib/module/place-details/PlaceAmenities.js +15 -4
- package/lib/module/place-details/PlaceAmenities.js.map +1 -1
- package/lib/module/place-details/PlacePopularTimes.js +7 -1
- package/lib/module/place-details/PlacePopularTimes.js.map +1 -1
- package/lib/module/proof-of-delivery/ProofOfDelivery.js +10 -1
- package/lib/module/proof-of-delivery/ProofOfDelivery.js.map +1 -1
- package/lib/module/proof-of-delivery/shared.js +1 -1
- package/lib/module/proof-of-delivery/shared.js.map +1 -1
- package/lib/module/select/Select.js +7 -4
- package/lib/module/select/Select.js.map +1 -1
- package/lib/module/select/Select.web.js +7 -4
- package/lib/module/select/Select.web.js.map +1 -1
- package/lib/module/select/use-required-description.js +33 -0
- package/lib/module/select/use-required-description.js.map +1 -0
- package/lib/typescript/commonjs/button/Button.d.ts.map +1 -1
- package/lib/typescript/commonjs/card-form/shared.d.ts +2 -1
- package/lib/typescript/commonjs/card-form/shared.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/AttachmentMenu.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/AttachmentMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/AttachmentMenu.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/AttachmentMenu.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/ChatComposer.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/ChatComposer.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/ChatComposer.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/ChatComposer.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/ComposerAttachmentStrip.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/ComposerAttachmentStrip.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/ComposerAttachmentStrip.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/ComposerAttachmentStrip.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/ComposerBanner.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/ComposerBanner.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/ComposerBanner.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/ComposerBanner.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/EmojiPicker.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/EmojiPicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/EmojiPicker.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/EmojiPicker.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/MessageContextMenu.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/MessageContextMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/MessageContextMenu.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/MessageContextMenu.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/ReactionPicker.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/ReactionPicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/ReactionPicker.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/ReactionPicker.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/SuggestionList.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/SuggestionList.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/SuggestionList.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/SuggestionList.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/VoiceRecorder.d.ts +1 -2
- package/lib/typescript/commonjs/chat-composer/VoiceRecorder.d.ts.map +1 -1
- package/lib/typescript/commonjs/chat-composer/VoiceRecorder.web.d.ts +2 -0
- package/lib/typescript/commonjs/chat-composer/VoiceRecorder.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-attachment-menu.d.ts +11 -0
- package/lib/typescript/commonjs/chat-composer/create-attachment-menu.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-chat-composer.d.ts +11 -0
- package/lib/typescript/commonjs/chat-composer/create-chat-composer.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-composer-attachment-strip.d.ts +7 -0
- package/lib/typescript/commonjs/chat-composer/create-composer-attachment-strip.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-composer-banner.d.ts +7 -0
- package/lib/typescript/commonjs/chat-composer/create-composer-banner.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-emoji-picker.d.ts +9 -0
- package/lib/typescript/commonjs/chat-composer/create-emoji-picker.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-message-context-menu.d.ts +14 -0
- package/lib/typescript/commonjs/chat-composer/create-message-context-menu.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-reaction-picker.d.ts +9 -0
- package/lib/typescript/commonjs/chat-composer/create-reaction-picker.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-suggestion-list.d.ts +7 -0
- package/lib/typescript/commonjs/chat-composer/create-suggestion-list.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/create-voice-recorder.d.ts +11 -0
- package/lib/typescript/commonjs/chat-composer/create-voice-recorder.d.ts.map +1 -0
- package/lib/typescript/commonjs/chat-composer/index.web.d.ts +9 -9
- package/lib/typescript/commonjs/chat-composer/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/earnings/EarningsSummary.d.ts.map +1 -1
- package/lib/typescript/commonjs/field/Field.d.ts +1 -1
- package/lib/typescript/commonjs/field/Field.d.ts.map +1 -1
- package/lib/typescript/commonjs/field/types.d.ts +2 -0
- package/lib/typescript/commonjs/field/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/floating/types.d.ts +1 -0
- package/lib/typescript/commonjs/floating/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/item/Item.d.ts.map +1 -1
- package/lib/typescript/commonjs/job-board/JobCard.d.ts.map +1 -1
- package/lib/typescript/commonjs/label/Label.d.ts +1 -1
- package/lib/typescript/commonjs/label/Label.d.ts.map +1 -1
- package/lib/typescript/commonjs/label/types.d.ts +2 -0
- package/lib/typescript/commonjs/label/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/listing-details/AmenityList.d.ts.map +1 -1
- package/lib/typescript/commonjs/overlay/InteractionBoundary.d.ts +7 -0
- package/lib/typescript/commonjs/overlay/InteractionBoundary.d.ts.map +1 -0
- package/lib/typescript/commonjs/payment-method/PaymentMethodList.d.ts.map +1 -1
- package/lib/typescript/commonjs/place-details/PlaceAmenities.d.ts.map +1 -1
- package/lib/typescript/commonjs/place-details/PlacePopularTimes.d.ts.map +1 -1
- package/lib/typescript/commonjs/proof-of-delivery/ProofOfDelivery.d.ts.map +1 -1
- package/lib/typescript/commonjs/select/Select.d.ts.map +1 -1
- package/lib/typescript/commonjs/select/Select.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/select/use-required-description.d.ts +7 -0
- package/lib/typescript/commonjs/select/use-required-description.d.ts.map +1 -0
- package/lib/typescript/module/button/Button.d.ts.map +1 -1
- package/lib/typescript/module/card-form/shared.d.ts +2 -1
- package/lib/typescript/module/card-form/shared.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/AttachmentMenu.d.ts +1 -2
- package/lib/typescript/module/chat-composer/AttachmentMenu.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/AttachmentMenu.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/AttachmentMenu.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/ChatComposer.d.ts +1 -2
- package/lib/typescript/module/chat-composer/ChatComposer.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/ChatComposer.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/ChatComposer.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/ComposerAttachmentStrip.d.ts +1 -2
- package/lib/typescript/module/chat-composer/ComposerAttachmentStrip.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/ComposerAttachmentStrip.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/ComposerAttachmentStrip.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/ComposerBanner.d.ts +1 -2
- package/lib/typescript/module/chat-composer/ComposerBanner.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/ComposerBanner.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/ComposerBanner.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/EmojiPicker.d.ts +1 -2
- package/lib/typescript/module/chat-composer/EmojiPicker.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/EmojiPicker.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/EmojiPicker.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/MessageContextMenu.d.ts +1 -2
- package/lib/typescript/module/chat-composer/MessageContextMenu.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/MessageContextMenu.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/MessageContextMenu.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/ReactionPicker.d.ts +1 -2
- package/lib/typescript/module/chat-composer/ReactionPicker.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/ReactionPicker.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/ReactionPicker.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/SuggestionList.d.ts +1 -2
- package/lib/typescript/module/chat-composer/SuggestionList.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/SuggestionList.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/SuggestionList.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/VoiceRecorder.d.ts +1 -2
- package/lib/typescript/module/chat-composer/VoiceRecorder.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/VoiceRecorder.web.d.ts +2 -0
- package/lib/typescript/module/chat-composer/VoiceRecorder.web.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-attachment-menu.d.ts +11 -0
- package/lib/typescript/module/chat-composer/create-attachment-menu.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-chat-composer.d.ts +11 -0
- package/lib/typescript/module/chat-composer/create-chat-composer.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-composer-attachment-strip.d.ts +7 -0
- package/lib/typescript/module/chat-composer/create-composer-attachment-strip.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-composer-banner.d.ts +7 -0
- package/lib/typescript/module/chat-composer/create-composer-banner.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-emoji-picker.d.ts +9 -0
- package/lib/typescript/module/chat-composer/create-emoji-picker.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-message-context-menu.d.ts +14 -0
- package/lib/typescript/module/chat-composer/create-message-context-menu.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-reaction-picker.d.ts +9 -0
- package/lib/typescript/module/chat-composer/create-reaction-picker.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-suggestion-list.d.ts +7 -0
- package/lib/typescript/module/chat-composer/create-suggestion-list.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/create-voice-recorder.d.ts +11 -0
- package/lib/typescript/module/chat-composer/create-voice-recorder.d.ts.map +1 -0
- package/lib/typescript/module/chat-composer/index.web.d.ts +9 -9
- package/lib/typescript/module/chat-composer/index.web.d.ts.map +1 -1
- package/lib/typescript/module/earnings/EarningsSummary.d.ts.map +1 -1
- package/lib/typescript/module/field/Field.d.ts +1 -1
- package/lib/typescript/module/field/Field.d.ts.map +1 -1
- package/lib/typescript/module/field/types.d.ts +2 -0
- package/lib/typescript/module/field/types.d.ts.map +1 -1
- package/lib/typescript/module/floating/types.d.ts +1 -0
- package/lib/typescript/module/floating/types.d.ts.map +1 -1
- package/lib/typescript/module/item/Item.d.ts.map +1 -1
- package/lib/typescript/module/job-board/JobCard.d.ts.map +1 -1
- package/lib/typescript/module/label/Label.d.ts +1 -1
- package/lib/typescript/module/label/Label.d.ts.map +1 -1
- package/lib/typescript/module/label/types.d.ts +2 -0
- package/lib/typescript/module/label/types.d.ts.map +1 -1
- package/lib/typescript/module/listing-details/AmenityList.d.ts.map +1 -1
- package/lib/typescript/module/overlay/InteractionBoundary.d.ts +7 -0
- package/lib/typescript/module/overlay/InteractionBoundary.d.ts.map +1 -0
- package/lib/typescript/module/payment-method/PaymentMethodList.d.ts.map +1 -1
- package/lib/typescript/module/place-details/PlaceAmenities.d.ts.map +1 -1
- package/lib/typescript/module/place-details/PlacePopularTimes.d.ts.map +1 -1
- package/lib/typescript/module/proof-of-delivery/ProofOfDelivery.d.ts.map +1 -1
- package/lib/typescript/module/select/Select.d.ts.map +1 -1
- package/lib/typescript/module/select/Select.web.d.ts.map +1 -1
- package/lib/typescript/module/select/use-required-description.d.ts +7 -0
- package/lib/typescript/module/select/use-required-description.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/support/adoption-matrix.ts +708 -0
- package/src/__tests__/support/card-surface.ts +17 -0
- package/src/__tests__/support/collision-fixture-barrel.ts +20 -0
- package/src/__tests__/support/commerce-harness.tsx +97 -0
- package/src/__tests__/support/composite.ts +68 -0
- package/src/__tests__/support/constructed-style-sheets.ts +68 -0
- package/src/__tests__/support/press-host.ts +30 -0
- package/src/__tests__/support/rendered-style.ts +99 -0
- package/src/__tests__/support/unread-hook-fixture.ts +33 -0
- package/src/__tests__/support/worklet-capture-fixture.tsx +28 -0
- package/src/button/Button.tsx +35 -10
- package/src/button/GlyphButton.tsx +3 -3
- package/src/card-form/shared.ts +3 -2
- package/src/chat-composer/AttachmentMenu.tsx +2 -214
- package/src/chat-composer/AttachmentMenu.web.tsx +5 -0
- package/src/chat-composer/ChatComposer.tsx +2 -459
- package/src/chat-composer/ChatComposer.web.tsx +6 -0
- package/src/chat-composer/ComposerAttachmentStrip.tsx +2 -202
- package/src/chat-composer/ComposerAttachmentStrip.web.tsx +4 -0
- package/src/chat-composer/ComposerBanner.tsx +2 -157
- package/src/chat-composer/ComposerBanner.web.tsx +4 -0
- package/src/chat-composer/EmojiPicker.tsx +2 -402
- package/src/chat-composer/EmojiPicker.web.tsx +5 -0
- package/src/chat-composer/MessageContextMenu.tsx +2 -88
- package/src/chat-composer/MessageContextMenu.web.tsx +12 -0
- package/src/chat-composer/ReactionPicker.tsx +2 -100
- package/src/chat-composer/ReactionPicker.web.tsx +5 -0
- package/src/chat-composer/SuggestionList.tsx +2 -209
- package/src/chat-composer/SuggestionList.web.tsx +4 -0
- package/src/chat-composer/VoiceRecorder.tsx +2 -287
- package/src/chat-composer/VoiceRecorder.web.tsx +6 -0
- package/src/chat-composer/create-attachment-menu.tsx +228 -0
- package/src/chat-composer/create-chat-composer.tsx +473 -0
- package/src/chat-composer/create-composer-attachment-strip.tsx +212 -0
- package/src/chat-composer/create-composer-banner.tsx +167 -0
- package/src/chat-composer/create-emoji-picker.tsx +414 -0
- package/src/chat-composer/create-message-context-menu.tsx +112 -0
- package/src/chat-composer/create-reaction-picker.tsx +112 -0
- package/src/chat-composer/create-suggestion-list.tsx +219 -0
- package/src/chat-composer/create-voice-recorder.tsx +301 -0
- package/src/chat-composer/index.web.ts +9 -9
- package/src/earnings/EarningsSummary.tsx +9 -2
- package/src/field/Field.tsx +2 -1
- package/src/field/types.ts +2 -0
- package/src/floating/types.ts +1 -0
- package/src/item/Item.tsx +16 -11
- package/src/job-board/JobCard.tsx +4 -1
- package/src/label/Label.tsx +2 -1
- package/src/label/types.ts +2 -0
- package/src/listing-details/AmenityList.tsx +4 -3
- package/src/overlay/InteractionBoundary.tsx +24 -0
- package/src/payment-method/PaymentMethodList.tsx +2 -1
- package/src/place-details/PlaceAmenities.tsx +9 -0
- package/src/place-details/PlacePopularTimes.tsx +7 -1
- package/src/proof-of-delivery/ProofOfDelivery.tsx +9 -1
- package/src/proof-of-delivery/shared.ts +1 -1
- package/src/select/Select.tsx +5 -1
- package/src/select/Select.web.tsx +5 -1
- package/src/select/use-required-description.tsx +20 -0
- package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +9346 -0
- package/src/theme/__tests__/__fixtures__/tonal-glass-primary-failures.json +69 -0
- package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
package/src/label/Label.tsx
CHANGED
|
@@ -37,6 +37,7 @@ const LabelComponent = function Label({
|
|
|
37
37
|
nativeID,
|
|
38
38
|
htmlFor,
|
|
39
39
|
required = false,
|
|
40
|
+
requiredLabel,
|
|
40
41
|
disabled = false,
|
|
41
42
|
size: sizeProp,
|
|
42
43
|
style,
|
|
@@ -69,7 +70,7 @@ const LabelComponent = function Label({
|
|
|
69
70
|
{required ? (
|
|
70
71
|
<Text
|
|
71
72
|
variant={SIZE_VARIANT[size]}
|
|
72
|
-
accessibilityLabel={messages.required}
|
|
73
|
+
accessibilityLabel={requiredLabel ?? messages.required}
|
|
73
74
|
// `gap-0.5`: an inline margin on web; a nested native
|
|
74
75
|
// `Text` ignores margins, so a thin space stands in for it there.
|
|
75
76
|
style={[{ color: palette.error }, IS_WEB ? { marginLeft: TEXT_FIELD_LEADING_GAP } : null]}>
|
package/src/label/types.ts
CHANGED
|
@@ -24,6 +24,8 @@ export interface LabelProps {
|
|
|
24
24
|
* after the label text. Defaults to `false`.
|
|
25
25
|
*/
|
|
26
26
|
required?: boolean;
|
|
27
|
+
/** Accessible name of the required marker; defaults to the current locale. */
|
|
28
|
+
requiredLabel?: string;
|
|
27
29
|
/** Visually subdued label (e.g. for optional fields). Defaults to `false`. */
|
|
28
30
|
disabled?: boolean;
|
|
29
31
|
/**
|
|
@@ -5,7 +5,7 @@ import { Button } from '../button';
|
|
|
5
5
|
import { useTheme } from '../theme/use-theme';
|
|
6
6
|
import { Text } from '../typography';
|
|
7
7
|
import { AMENITY_LIST_TWO_COLUMN_MIN_WIDTH } from './constants';
|
|
8
|
-
import {
|
|
8
|
+
import { surfaceTextOn, useSurfaceFill } from '../styles/surface-levels';
|
|
9
9
|
import { useMessages } from '../locale/messages';
|
|
10
10
|
import { LISTING_DETAILS_MESSAGES } from './messages';
|
|
11
11
|
import type { AmenityListProps } from './types';
|
|
@@ -39,7 +39,8 @@ function AmenityListComponent({
|
|
|
39
39
|
const { messages } = useMessages(LISTING_DETAILS_MESSAGES);
|
|
40
40
|
const unavailableLabel = unavailableLabelProp ?? messages.unavailable;
|
|
41
41
|
const theme = useTheme();
|
|
42
|
-
const
|
|
42
|
+
const surface = useSurfaceFill();
|
|
43
|
+
const palette = useMemo(() => surfaceTextOn(theme, surface), [theme, surface]);
|
|
43
44
|
const { width, onLayout } = useContainerWidth();
|
|
44
45
|
|
|
45
46
|
const count =
|
|
@@ -70,7 +71,7 @@ function AmenityListComponent({
|
|
|
70
71
|
}}
|
|
71
72
|
>
|
|
72
73
|
{Icon ? (
|
|
73
|
-
<Icon width={24} height={24} fill={available ? palette.text : palette.
|
|
74
|
+
<Icon width={24} height={24} fill={available ? palette.text : palette.textTertiary} />
|
|
74
75
|
) : null}
|
|
75
76
|
<View style={{ flex: 1, minWidth: 0, gap: 2 }}>
|
|
76
77
|
<Text
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { Platform, View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
/** Stops interaction with caller-owned actions, including web keyboard focus. */
|
|
5
|
+
export function InteractionBoundary({
|
|
6
|
+
disabled,
|
|
7
|
+
children,
|
|
8
|
+
}: {
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
}) {
|
|
12
|
+
return (
|
|
13
|
+
<View
|
|
14
|
+
collapsable={false}
|
|
15
|
+
style={Platform.OS === 'web' ? { display: 'contents' } : undefined}
|
|
16
|
+
pointerEvents={disabled ? 'none' : 'auto'}
|
|
17
|
+
accessibilityElementsHidden={disabled}
|
|
18
|
+
importantForAccessibility={disabled ? 'no-hide-descendants' : 'auto'}
|
|
19
|
+
{...(Platform.OS === 'web' && disabled ? { inert: true } : null)}
|
|
20
|
+
>
|
|
21
|
+
{children}
|
|
22
|
+
</View>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -210,7 +210,7 @@ function PaymentMethodListComponent({
|
|
|
210
210
|
state={entry.state}
|
|
211
211
|
stateMessage={entry.stateMessage}
|
|
212
212
|
action={entry.action}
|
|
213
|
-
disabled={isDisabled || entry.disabled === true}
|
|
213
|
+
disabled={isDisabled || entry.disabled === true || (picker && entry.state != null && entry.state !== 'ok')}
|
|
214
214
|
density={density}
|
|
215
215
|
accessibilityLabel={entry.accessibilityLabel}
|
|
216
216
|
style={entry.style}
|
|
@@ -239,6 +239,7 @@ function PaymentMethodListComponent({
|
|
|
239
239
|
aria-label={name}
|
|
240
240
|
aria-describedby={field.describedBy}
|
|
241
241
|
aria-invalid={field.invalid || undefined}
|
|
242
|
+
aria-required={field.required || undefined}
|
|
242
243
|
// A `View` has no `disabled` prop for react-native-web to derive
|
|
243
244
|
// `aria-disabled` from, and it never reads `accessibilityState`.
|
|
244
245
|
aria-disabled={isDisabled || undefined}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React, { memo, useMemo } from 'react';
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
|
|
4
|
+
import { Button } from '../button';
|
|
5
|
+
import { LISTING_DETAILS_MESSAGES } from '../listing-details/messages';
|
|
4
6
|
import { Chip } from '../chip';
|
|
5
7
|
import { AmenityList } from '../listing-details/AmenityList';
|
|
6
8
|
import type { Amenity } from '../listing-details/types';
|
|
@@ -47,6 +49,7 @@ function PlaceAmenitiesComponent({
|
|
|
47
49
|
testID,
|
|
48
50
|
}: PlaceAmenitiesProps) {
|
|
49
51
|
const { messages } = useMessages(PLACE_DETAILS_MESSAGES);
|
|
52
|
+
const { messages: listingMessages } = useMessages(LISTING_DETAILS_MESSAGES);
|
|
50
53
|
const unavailableLabel = unavailableLabelProp ?? messages.notAvailable;
|
|
51
54
|
const accessibilityLabel = accessibilityLabelProp ?? messages.amenities;
|
|
52
55
|
const theme = useTheme();
|
|
@@ -81,6 +84,7 @@ function PlaceAmenitiesComponent({
|
|
|
81
84
|
}
|
|
82
85
|
|
|
83
86
|
const shown = limit != null && limit >= 0 ? items.slice(0, limit) : items;
|
|
87
|
+
const fullCount = Math.max(total ?? items.length, items.length);
|
|
84
88
|
|
|
85
89
|
return (
|
|
86
90
|
<View
|
|
@@ -119,6 +123,11 @@ function PlaceAmenitiesComponent({
|
|
|
119
123
|
</Chip>
|
|
120
124
|
</View>
|
|
121
125
|
))}
|
|
126
|
+
{onShowAll && fullCount > shown.length ? (
|
|
127
|
+
<Button variant="secondary" onPress={onShowAll} testID={testID ? `${testID}-show-all` : undefined}>
|
|
128
|
+
{showAllLabel ? showAllLabel(fullCount) : listingMessages.showAllAmenities(fullCount)}
|
|
129
|
+
</Button>
|
|
130
|
+
) : null}
|
|
122
131
|
</View>
|
|
123
132
|
);
|
|
124
133
|
}
|
|
@@ -127,7 +127,7 @@ function PlacePopularTimesComponent({
|
|
|
127
127
|
type="radio"
|
|
128
128
|
size="small"
|
|
129
129
|
label={daysLabel}
|
|
130
|
-
value={
|
|
130
|
+
value={current?.id ?? ''}
|
|
131
131
|
onValueChange={setSelected}
|
|
132
132
|
testID={testID ? `${testID}-days` : undefined}
|
|
133
133
|
>
|
|
@@ -242,8 +242,14 @@ function PlacePopularTimesComponent({
|
|
|
242
242
|
// centred on a band that starts at the edge, and a 40-wide
|
|
243
243
|
// slot centred there would hang outside the block.
|
|
244
244
|
const left = Math.max(0, Math.min((width ?? 0) - LABEL_SLOT, centre - LABEL_SLOT / 2));
|
|
245
|
+
if (currentIndex != null && index !== currentIndex) {
|
|
246
|
+
const currentCentre = currentIndex * band + band / 2;
|
|
247
|
+
const currentLeft = Math.max(0, Math.min((width ?? 0) - LABEL_SLOT, currentCentre - LABEL_SLOT / 2));
|
|
248
|
+
if (Math.abs(left - currentLeft) < LABEL_SLOT) return null;
|
|
249
|
+
}
|
|
245
250
|
return (
|
|
246
251
|
<Text
|
|
252
|
+
testID={testID ? `${testID}-hour-${index}` : undefined}
|
|
247
253
|
key={`label-${index}`}
|
|
248
254
|
variant="caption-2-regular"
|
|
249
255
|
numberOfLines={1}
|
|
@@ -8,6 +8,7 @@ import { useControllableState } from '../hooks/use-controllable-state';
|
|
|
8
8
|
import { InputOtp } from '../input-otp';
|
|
9
9
|
import { useMessages } from '../locale/messages';
|
|
10
10
|
import { SortablePhotoGrid } from '../sortable-media';
|
|
11
|
+
import { InteractionBoundary } from '../overlay/InteractionBoundary';
|
|
11
12
|
import { useSurfaceFill } from '../styles/surface-levels';
|
|
12
13
|
import { TextFieldInput } from '../text-field';
|
|
13
14
|
import { Textarea } from '../textarea';
|
|
@@ -138,6 +139,7 @@ function ProofOfDeliveryComponent({
|
|
|
138
139
|
key={kind}
|
|
139
140
|
label={labels.recipient}
|
|
140
141
|
required={isRequired(kind)}
|
|
142
|
+
requiredLabel={labelOverrides?.required}
|
|
141
143
|
error={errorFor(kind)}
|
|
142
144
|
disabled={disabled}
|
|
143
145
|
>
|
|
@@ -157,6 +159,7 @@ function ProofOfDeliveryComponent({
|
|
|
157
159
|
key={kind}
|
|
158
160
|
label={labels.signature}
|
|
159
161
|
required={isRequired(kind)}
|
|
162
|
+
requiredLabel={labelOverrides?.required}
|
|
160
163
|
error={errorFor(kind)}
|
|
161
164
|
disabled={disabled}
|
|
162
165
|
// The pad AND the typed name: one id on two controls is invalid.
|
|
@@ -179,6 +182,7 @@ function ProofOfDeliveryComponent({
|
|
|
179
182
|
label={labels.code}
|
|
180
183
|
description={labels.codeHint}
|
|
181
184
|
required={isRequired(kind)}
|
|
185
|
+
requiredLabel={labelOverrides?.required}
|
|
182
186
|
error={errorFor(kind)}
|
|
183
187
|
disabled={disabled}
|
|
184
188
|
multiple
|
|
@@ -199,6 +203,7 @@ function ProofOfDeliveryComponent({
|
|
|
199
203
|
label={labels.photo}
|
|
200
204
|
description={labels.photoHint}
|
|
201
205
|
required={isRequired(kind)}
|
|
206
|
+
requiredLabel={labelOverrides?.required}
|
|
202
207
|
error={errorFor(kind)}
|
|
203
208
|
disabled={disabled}
|
|
204
209
|
multiple
|
|
@@ -224,6 +229,7 @@ function ProofOfDeliveryComponent({
|
|
|
224
229
|
key={kind}
|
|
225
230
|
label={labels.note}
|
|
226
231
|
required={isRequired(kind)}
|
|
232
|
+
requiredLabel={labelOverrides?.required}
|
|
227
233
|
error={errorFor(kind)}
|
|
228
234
|
disabled={disabled}
|
|
229
235
|
>
|
|
@@ -286,7 +292,9 @@ function ProofOfDeliveryComponent({
|
|
|
286
292
|
|
|
287
293
|
{summary}
|
|
288
294
|
|
|
289
|
-
{actions
|
|
295
|
+
{actions != null ? (
|
|
296
|
+
<InteractionBoundary disabled={disabled || submitting}>{actions}</InteractionBoundary>
|
|
297
|
+
) : (
|
|
290
298
|
<Button
|
|
291
299
|
variant="primary"
|
|
292
300
|
size="large"
|
|
@@ -157,7 +157,7 @@ export function isProofGiven(
|
|
|
157
157
|
case 'signature':
|
|
158
158
|
return isSignatureGiven(value.signature);
|
|
159
159
|
case 'photo':
|
|
160
|
-
return value.photos.
|
|
160
|
+
return value.photos.some((photo) => photo.status == null || photo.status === 'uploaded');
|
|
161
161
|
case 'code':
|
|
162
162
|
return value.code.length >= codeLength;
|
|
163
163
|
case 'recipient':
|
package/src/select/Select.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useRequiredDescription } from './use-required-description';
|
|
1
2
|
import { useBloomAppearance } from '../appearance';
|
|
2
3
|
import React, {
|
|
3
4
|
createContext,
|
|
@@ -149,6 +150,7 @@ export function SelectTrigger({
|
|
|
149
150
|
accessibilityLabel: label,
|
|
150
151
|
disabled: disabled === true || rootDisabled === true,
|
|
151
152
|
});
|
|
153
|
+
const requiredDescription = useRequiredDescription(membership.required, membership.describedBy);
|
|
152
154
|
const isDisabled = membership.disabled;
|
|
153
155
|
const t = palette.trigger;
|
|
154
156
|
|
|
@@ -191,11 +193,13 @@ export function SelectTrigger({
|
|
|
191
193
|
accessibilityRole: 'button',
|
|
192
194
|
'aria-haspopup': SELECT_TRIGGER_POPUP,
|
|
193
195
|
nativeID: membership.nativeID,
|
|
194
|
-
'aria-describedby':
|
|
196
|
+
'aria-describedby': requiredDescription.describedBy,
|
|
197
|
+
accessibilityHint: requiredDescription.hint,
|
|
195
198
|
'aria-invalid': membership.invalid || undefined,
|
|
196
199
|
}}>
|
|
197
200
|
{asChild ? children : field}
|
|
198
201
|
</TriggerSlot>
|
|
202
|
+
{requiredDescription.description}
|
|
199
203
|
</SelectTriggerStateContext.Provider>
|
|
200
204
|
);
|
|
201
205
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useRequiredDescription } from './use-required-description';
|
|
1
2
|
import { useBloomAppearance } from '../appearance';
|
|
2
3
|
import React, {
|
|
3
4
|
createContext,
|
|
@@ -247,6 +248,7 @@ export function SelectTrigger({
|
|
|
247
248
|
accessibilityLabel: label,
|
|
248
249
|
disabled: disabled === true || ctx.disabled === true,
|
|
249
250
|
});
|
|
251
|
+
const requiredDescription = useRequiredDescription(membership.required, membership.describedBy);
|
|
250
252
|
const isDisabled = membership.disabled;
|
|
251
253
|
useEffect(() => {
|
|
252
254
|
adoptStyleSheet(TRIGGER_STYLE_ID, TRIGGER_CSS);
|
|
@@ -333,12 +335,14 @@ export function SelectTrigger({
|
|
|
333
335
|
'aria-haspopup': SELECT_TRIGGER_POPUP,
|
|
334
336
|
'aria-expanded': ctx.isOpen,
|
|
335
337
|
nativeID: membership.nativeID,
|
|
336
|
-
'aria-describedby':
|
|
338
|
+
'aria-describedby': requiredDescription.describedBy,
|
|
339
|
+
accessibilityHint: requiredDescription.hint,
|
|
337
340
|
'aria-invalid': membership.invalid || undefined,
|
|
338
341
|
}}
|
|
339
342
|
>
|
|
340
343
|
{asChild ? children : field}
|
|
341
344
|
</TriggerSlot>
|
|
345
|
+
{requiredDescription.description}
|
|
342
346
|
</SelectTriggerStateContext.Provider>
|
|
343
347
|
);
|
|
344
348
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React, { useId } from 'react';
|
|
2
|
+
import { Platform, Text } from 'react-native';
|
|
3
|
+
import { LABEL_MESSAGES } from '../label/messages';
|
|
4
|
+
import { useMessages } from '../locale/messages';
|
|
5
|
+
|
|
6
|
+
/** A menu button cannot carry aria-required; announce the field constraint as a description. */
|
|
7
|
+
export function useRequiredDescription(required: boolean, describedBy?: string) {
|
|
8
|
+
const id = `select-required-${useId()}`;
|
|
9
|
+
const { messages } = useMessages(LABEL_MESSAGES);
|
|
10
|
+
return {
|
|
11
|
+
describedBy: [describedBy, required ? id : undefined].filter(Boolean).join(' ') || undefined,
|
|
12
|
+
hint: required ? messages.required : undefined,
|
|
13
|
+
description: required && Platform.OS === 'web' ? (
|
|
14
|
+
<Text nativeID={id} aria-hidden pointerEvents="none"
|
|
15
|
+
style={{ position: 'absolute', width: 1, height: 1, overflow: 'hidden', opacity: 0 }}>
|
|
16
|
+
{messages.required}
|
|
17
|
+
</Text>
|
|
18
|
+
) : null,
|
|
19
|
+
};
|
|
20
|
+
}
|