@oxy.so/bloom 5.1.0 → 5.2.0
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/app-shell.mdx +3 -1
- package/docs/button.mdx +2 -0
- package/docs/card-form.mdx +2 -0
- package/docs/chat-composer.mdx +1 -1
- package/docs/chat-people.mdx +8 -0
- 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/docs/settings-modal.mdx +15 -0
- package/lib/commonjs/ai-chat/AiChatResizeHandle.js +166 -0
- package/lib/commonjs/ai-chat/AiChatResizeHandle.js.map +1 -0
- package/lib/commonjs/ai-chat/AiChatShell.js +6 -154
- package/lib/commonjs/ai-chat/AiChatShell.js.map +1 -1
- package/lib/commonjs/ai-chat/index.js +2 -1
- package/lib/commonjs/ai-chat/index.js.map +1 -1
- package/lib/commonjs/ai-chat/index.web.js +2 -1
- package/lib/commonjs/ai-chat/index.web.js.map +1 -1
- package/lib/commonjs/ai-chat/messages.js +15 -30
- package/lib/commonjs/ai-chat/messages.js.map +1 -1
- package/lib/commonjs/app-shell/AppShellSplit.js +2 -2
- package/lib/commonjs/app-shell/AppShellSplit.js.map +1 -1
- 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/chat-people/contact-row.js +13 -0
- package/lib/commonjs/chat-people/contact-row.js.map +1 -0
- package/lib/commonjs/chat-screen/ChatSplitLayout.js +2 -2
- package/lib/commonjs/chat-screen/ChatSplitLayout.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/locale/common-messages.js +30 -15
- package/lib/commonjs/locale/common-messages.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/commonjs/settings-modal/rows.js +37 -0
- package/lib/commonjs/settings-modal/rows.js.map +1 -0
- package/lib/module/ai-chat/AiChatResizeHandle.js +160 -0
- package/lib/module/ai-chat/AiChatResizeHandle.js.map +1 -0
- package/lib/module/ai-chat/AiChatShell.js +5 -152
- package/lib/module/ai-chat/AiChatShell.js.map +1 -1
- package/lib/module/ai-chat/index.js +2 -1
- package/lib/module/ai-chat/index.js.map +1 -1
- package/lib/module/ai-chat/index.web.js +2 -1
- package/lib/module/ai-chat/index.web.js.map +1 -1
- package/lib/module/ai-chat/messages.js +15 -30
- package/lib/module/ai-chat/messages.js.map +1 -1
- package/lib/module/app-shell/AppShellSplit.js +1 -1
- package/lib/module/app-shell/AppShellSplit.js.map +1 -1
- 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/chat-people/contact-row.js +10 -0
- package/lib/module/chat-people/contact-row.js.map +1 -0
- package/lib/module/chat-screen/ChatSplitLayout.js +1 -1
- package/lib/module/chat-screen/ChatSplitLayout.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/locale/common-messages.js +30 -15
- package/lib/module/locale/common-messages.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/module/settings-modal/rows.js +10 -0
- package/lib/module/settings-modal/rows.js.map +1 -0
- package/lib/typescript/commonjs/ai-chat/AiChatResizeHandle.d.ts +11 -0
- package/lib/typescript/commonjs/ai-chat/AiChatResizeHandle.d.ts.map +1 -0
- package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts +1 -10
- package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts.map +1 -1
- package/lib/typescript/commonjs/ai-chat/index.d.ts +2 -1
- package/lib/typescript/commonjs/ai-chat/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ai-chat/index.web.d.ts +2 -1
- package/lib/typescript/commonjs/ai-chat/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/ai-chat/messages.d.ts +0 -1
- package/lib/typescript/commonjs/ai-chat/messages.d.ts.map +1 -1
- 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/chat-people/contact-row.d.ts +9 -0
- package/lib/typescript/commonjs/chat-people/contact-row.d.ts.map +1 -0
- 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/locale/common-messages.d.ts +2 -0
- package/lib/typescript/commonjs/locale/common-messages.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/commonjs/settings-modal/rows.d.ts +9 -0
- package/lib/typescript/commonjs/settings-modal/rows.d.ts.map +1 -0
- package/lib/typescript/module/ai-chat/AiChatResizeHandle.d.ts +11 -0
- package/lib/typescript/module/ai-chat/AiChatResizeHandle.d.ts.map +1 -0
- package/lib/typescript/module/ai-chat/AiChatShell.d.ts +1 -10
- package/lib/typescript/module/ai-chat/AiChatShell.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/index.d.ts +2 -1
- package/lib/typescript/module/ai-chat/index.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/index.web.d.ts +2 -1
- package/lib/typescript/module/ai-chat/index.web.d.ts.map +1 -1
- package/lib/typescript/module/ai-chat/messages.d.ts +0 -1
- package/lib/typescript/module/ai-chat/messages.d.ts.map +1 -1
- 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/chat-people/contact-row.d.ts +9 -0
- package/lib/typescript/module/chat-people/contact-row.d.ts.map +1 -0
- 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/locale/common-messages.d.ts +2 -0
- package/lib/typescript/module/locale/common-messages.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/lib/typescript/module/settings-modal/rows.d.ts +9 -0
- package/lib/typescript/module/settings-modal/rows.d.ts.map +1 -0
- package/package.json +35 -1
- package/src/ai-chat/AiChatResizeHandle.tsx +151 -0
- package/src/ai-chat/AiChatShell.tsx +8 -143
- package/src/ai-chat/index.ts +2 -1
- package/src/ai-chat/index.web.ts +2 -1
- package/src/ai-chat/messages.ts +0 -16
- package/src/app-shell/AppShellSplit.tsx +1 -1
- 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/chat-people/contact-row.ts +8 -0
- package/src/chat-screen/ChatSplitLayout.tsx +1 -1
- 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/locale/common-messages.ts +17 -0
- 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/settings-modal/rows.ts +21 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxy.so/bloom",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"packageManager": "bun@1.3.14",
|
|
5
5
|
"description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
|
|
6
6
|
"main": "lib/commonjs/index.js",
|
|
@@ -769,6 +769,20 @@
|
|
|
769
769
|
"default": "./lib/commonjs/settings-modal/index.js"
|
|
770
770
|
}
|
|
771
771
|
},
|
|
772
|
+
"./settings-modal/rows": {
|
|
773
|
+
"react-native": {
|
|
774
|
+
"types": "./lib/typescript/module/settings-modal/rows.d.ts",
|
|
775
|
+
"default": "./src/settings-modal/rows.ts"
|
|
776
|
+
},
|
|
777
|
+
"import": {
|
|
778
|
+
"types": "./lib/typescript/module/settings-modal/rows.d.ts",
|
|
779
|
+
"default": "./lib/module/settings-modal/rows.js"
|
|
780
|
+
},
|
|
781
|
+
"require": {
|
|
782
|
+
"types": "./lib/typescript/commonjs/settings-modal/rows.d.ts",
|
|
783
|
+
"default": "./lib/commonjs/settings-modal/rows.js"
|
|
784
|
+
}
|
|
785
|
+
},
|
|
772
786
|
"./auth-card": {
|
|
773
787
|
"react-native": {
|
|
774
788
|
"types": "./lib/typescript/module/auth-card/index.d.ts",
|
|
@@ -1966,6 +1980,20 @@
|
|
|
1966
1980
|
"default": "./lib/commonjs/chat-people/index.js"
|
|
1967
1981
|
}
|
|
1968
1982
|
},
|
|
1983
|
+
"./chat-people/contact-row": {
|
|
1984
|
+
"react-native": {
|
|
1985
|
+
"types": "./lib/typescript/module/chat-people/contact-row.d.ts",
|
|
1986
|
+
"default": "./src/chat-people/contact-row.ts"
|
|
1987
|
+
},
|
|
1988
|
+
"import": {
|
|
1989
|
+
"types": "./lib/typescript/module/chat-people/contact-row.d.ts",
|
|
1990
|
+
"default": "./lib/module/chat-people/contact-row.js"
|
|
1991
|
+
},
|
|
1992
|
+
"require": {
|
|
1993
|
+
"types": "./lib/typescript/commonjs/chat-people/contact-row.d.ts",
|
|
1994
|
+
"default": "./lib/commonjs/chat-people/contact-row.js"
|
|
1995
|
+
}
|
|
1996
|
+
},
|
|
1969
1997
|
"./chat-screen": {
|
|
1970
1998
|
"react-native": {
|
|
1971
1999
|
"types": "./lib/typescript/module/chat-screen/index.d.ts",
|
|
@@ -3659,6 +3687,9 @@
|
|
|
3659
3687
|
"settings-modal": [
|
|
3660
3688
|
"./lib/typescript/module/settings-modal/index.d.ts"
|
|
3661
3689
|
],
|
|
3690
|
+
"settings-modal/rows": [
|
|
3691
|
+
"./lib/typescript/module/settings-modal/rows.d.ts"
|
|
3692
|
+
],
|
|
3662
3693
|
"auth-card": [
|
|
3663
3694
|
"./lib/typescript/module/auth-card/index.d.ts"
|
|
3664
3695
|
],
|
|
@@ -3893,6 +3924,9 @@
|
|
|
3893
3924
|
"chat-people": [
|
|
3894
3925
|
"./lib/typescript/module/chat-people/index.d.ts"
|
|
3895
3926
|
],
|
|
3927
|
+
"chat-people/contact-row": [
|
|
3928
|
+
"./lib/typescript/module/chat-people/contact-row.d.ts"
|
|
3929
|
+
],
|
|
3896
3930
|
"chat-screen": [
|
|
3897
3931
|
"./lib/typescript/module/chat-screen/index.d.ts"
|
|
3898
3932
|
],
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The divider grip between two resizable panes. Its own module because three
|
|
3
|
+
* families draw it — `AiChatShell`, `AppShell`'s `split` variant and
|
|
4
|
+
* `ChatSplitLayout` — and the two that are not the AI chat must not link the
|
|
5
|
+
* chat shell (Metro does not tree-shake): importing it from `AiChatShell` put
|
|
6
|
+
* that module, its reanimated drawers and the whole ai-chat message catalog in
|
|
7
|
+
* every app that renders an `AppShell`.
|
|
8
|
+
*/
|
|
9
|
+
import React, { useMemo, useRef, useState } from 'react';
|
|
10
|
+
import { PanResponder, View, type LayoutChangeEvent, type PointerEvent } from 'react-native';
|
|
11
|
+
|
|
12
|
+
import { useCommonMessages } from '../locale/common-messages';
|
|
13
|
+
import type { WebCssStyle } from '../styles/web-view-style';
|
|
14
|
+
import { dataHook, IS_WEB, useAiChatPalette, useAiChatWebCss } from './shared';
|
|
15
|
+
import type { AiChatResizeHandleProps } from './types';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The resize grip (`DragHandle`): a 20px strip straddling the chat's right edge
|
|
19
|
+
* (10px past it). Hovering it reveals a 15×25 grip — radius 4, 1px
|
|
20
|
+
* border-button-default, background-primary, shadow-xs, three 1×13
|
|
21
|
+
* icon-quaternary lines 2 apart — that follows the pointer along the edge
|
|
22
|
+
* (kept 13px inside it) and stays up while dragging (150ms fade). Holding and
|
|
23
|
+
* dragging reports the horizontal distance from where the drag started.
|
|
24
|
+
*/
|
|
25
|
+
export function AiChatResizeHandle({
|
|
26
|
+
onResizeStart,
|
|
27
|
+
onResize,
|
|
28
|
+
onResizeEnd,
|
|
29
|
+
label: labelProp,
|
|
30
|
+
onNudge,
|
|
31
|
+
style,
|
|
32
|
+
testID,
|
|
33
|
+
}: AiChatResizeHandleProps) {
|
|
34
|
+
useAiChatWebCss();
|
|
35
|
+
const palette = useAiChatPalette();
|
|
36
|
+
const common = useCommonMessages();
|
|
37
|
+
const label = labelProp ?? common.resizePanels;
|
|
38
|
+
const [gripY, setGripY] = useState<number | null>(null);
|
|
39
|
+
const [dragging, setDragging] = useState(false);
|
|
40
|
+
const height = useRef(0);
|
|
41
|
+
const startX = useRef(0);
|
|
42
|
+
const callbacks = useRef({ onResizeStart, onResize, onResizeEnd });
|
|
43
|
+
callbacks.current = { onResizeStart, onResize, onResizeEnd };
|
|
44
|
+
|
|
45
|
+
const track = (localY: number) => {
|
|
46
|
+
const h = height.current;
|
|
47
|
+
if (h > 0) setGripY(Math.min(h - 13, Math.max(13, localY)));
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// Native: a pan responder (web uses pointer capture below).
|
|
51
|
+
const responder = useMemo(
|
|
52
|
+
() =>
|
|
53
|
+
PanResponder.create({
|
|
54
|
+
onStartShouldSetPanResponder: () => true,
|
|
55
|
+
onMoveShouldSetPanResponder: () => true,
|
|
56
|
+
onPanResponderGrant: (event) => {
|
|
57
|
+
track(event.nativeEvent.locationY);
|
|
58
|
+
setDragging(true);
|
|
59
|
+
callbacks.current.onResizeStart?.();
|
|
60
|
+
},
|
|
61
|
+
onPanResponderMove: (_event, gesture) => callbacks.current.onResize(gesture.dx),
|
|
62
|
+
onPanResponderRelease: () => {
|
|
63
|
+
setDragging(false);
|
|
64
|
+
callbacks.current.onResizeEnd?.();
|
|
65
|
+
},
|
|
66
|
+
onPanResponderTerminate: () => {
|
|
67
|
+
setDragging(false);
|
|
68
|
+
callbacks.current.onResizeEnd?.();
|
|
69
|
+
},
|
|
70
|
+
}),
|
|
71
|
+
[],
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
type DomTarget = {
|
|
75
|
+
getBoundingClientRect: () => { top: number };
|
|
76
|
+
setPointerCapture: (id: number) => void;
|
|
77
|
+
hasPointerCapture: (id: number) => boolean;
|
|
78
|
+
};
|
|
79
|
+
const web = IS_WEB
|
|
80
|
+
? {
|
|
81
|
+
onPointerDown: (event: PointerEvent) => {
|
|
82
|
+
event.preventDefault();
|
|
83
|
+
startX.current = event.nativeEvent.clientX;
|
|
84
|
+
setDragging(true);
|
|
85
|
+
callbacks.current.onResizeStart?.();
|
|
86
|
+
(event.currentTarget as unknown as DomTarget).setPointerCapture(event.nativeEvent.pointerId);
|
|
87
|
+
},
|
|
88
|
+
onPointerMove: (event: PointerEvent) => {
|
|
89
|
+
const target = event.currentTarget as unknown as DomTarget;
|
|
90
|
+
track(event.nativeEvent.clientY - target.getBoundingClientRect().top);
|
|
91
|
+
if (target.hasPointerCapture(event.nativeEvent.pointerId)) {
|
|
92
|
+
callbacks.current.onResize(event.nativeEvent.clientX - startX.current);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
onPointerUp: () => {
|
|
96
|
+
setDragging(false);
|
|
97
|
+
callbacks.current.onResizeEnd?.();
|
|
98
|
+
},
|
|
99
|
+
onPointerCancel: () => {
|
|
100
|
+
setDragging(false);
|
|
101
|
+
callbacks.current.onResizeEnd?.();
|
|
102
|
+
},
|
|
103
|
+
onKeyDown: (event: { nativeEvent: { key: string } }) => {
|
|
104
|
+
if (event.nativeEvent.key === 'ArrowLeft') onNudge?.(-16);
|
|
105
|
+
if (event.nativeEvent.key === 'ArrowRight') onNudge?.(16);
|
|
106
|
+
},
|
|
107
|
+
tabIndex: onNudge ? (0 as const) : undefined,
|
|
108
|
+
}
|
|
109
|
+
: responder.panHandlers;
|
|
110
|
+
|
|
111
|
+
const grip: WebCssStyle = {
|
|
112
|
+
position: 'absolute',
|
|
113
|
+
...(gripY === null ? { top: '50%' } : { top: gripY }),
|
|
114
|
+
width: 15,
|
|
115
|
+
height: 25,
|
|
116
|
+
marginTop: -12.5,
|
|
117
|
+
flexDirection: 'row',
|
|
118
|
+
alignItems: 'center',
|
|
119
|
+
justifyContent: 'center',
|
|
120
|
+
gap: 2,
|
|
121
|
+
borderRadius: 4,
|
|
122
|
+
borderWidth: 1,
|
|
123
|
+
borderColor: palette.border,
|
|
124
|
+
backgroundColor: palette.primary,
|
|
125
|
+
boxShadow: palette.shadowXs,
|
|
126
|
+
...(IS_WEB ? null : { opacity: dragging ? 1 : 0 }),
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
return (
|
|
130
|
+
<View
|
|
131
|
+
{...dataHook('bloomAiChatGrip')}
|
|
132
|
+
{...web}
|
|
133
|
+
role="separator"
|
|
134
|
+
aria-orientation="vertical"
|
|
135
|
+
accessibilityLabel={label}
|
|
136
|
+
testID={testID}
|
|
137
|
+
onLayout={(event: LayoutChangeEvent) => {
|
|
138
|
+
height.current = event.nativeEvent.layout.height;
|
|
139
|
+
}}
|
|
140
|
+
style={[
|
|
141
|
+
{ position: 'absolute', top: 0, bottom: 0, right: -10, zIndex: 10, width: 20, alignItems: 'center' },
|
|
142
|
+
style,
|
|
143
|
+
]}>
|
|
144
|
+
<View {...dataHook('bloomAiChatGripPill', dragging ? 'dragging' : '')} pointerEvents="none" style={grip}>
|
|
145
|
+
{[0, 1, 2].map((line) => (
|
|
146
|
+
<View key={line} style={{ width: 1, height: 13, backgroundColor: palette.iconQuaternary }} />
|
|
147
|
+
))}
|
|
148
|
+
</View>
|
|
149
|
+
</View>
|
|
150
|
+
);
|
|
151
|
+
}
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
useWindowDimensions,
|
|
10
10
|
type GestureResponderEvent,
|
|
11
11
|
type LayoutChangeEvent,
|
|
12
|
-
type PointerEvent,
|
|
13
12
|
type ViewProps,
|
|
14
13
|
} from 'react-native';
|
|
15
14
|
import Animated, {
|
|
@@ -39,9 +38,11 @@ import {
|
|
|
39
38
|
useAiChatPalette,
|
|
40
39
|
useAiChatWebCss,
|
|
41
40
|
} from './shared';
|
|
41
|
+
import { useCommonMessages } from '../locale/common-messages';
|
|
42
42
|
import { useMessages } from '../locale/messages';
|
|
43
43
|
import { AI_CHAT_MESSAGES } from './messages';
|
|
44
|
-
import type { AiChatMobileHeaderProps,
|
|
44
|
+
import type { AiChatMobileHeaderProps, AiChatShellProps } from './types';
|
|
45
|
+
import { AiChatResizeHandle } from './AiChatResizeHandle';
|
|
45
46
|
import { clamp01 } from '../styles/clamp';
|
|
46
47
|
|
|
47
48
|
const REVEAL_EASE = Easing.bezier(0.42, 0, 0.58, 1);
|
|
@@ -90,146 +91,6 @@ const NAV_SETTLE_MIN_MS = 120;
|
|
|
90
91
|
|
|
91
92
|
|
|
92
93
|
|
|
93
|
-
// ---------------------------------------------------------------------------
|
|
94
|
-
// Resize handle
|
|
95
|
-
// ---------------------------------------------------------------------------
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* The resize grip (`DragHandle`): a 20px strip straddling the chat's right edge
|
|
99
|
-
* (10px past it). Hovering it reveals a 15×25 grip — radius 4, 1px
|
|
100
|
-
* border-button-default, background-primary, shadow-xs, three 1×13
|
|
101
|
-
* icon-quaternary lines 2 apart — that follows the pointer along the edge
|
|
102
|
-
* (kept 13px inside it) and stays up while dragging (150ms fade). Holding and
|
|
103
|
-
* dragging reports the horizontal distance from where the drag started.
|
|
104
|
-
*/
|
|
105
|
-
export function AiChatResizeHandle({
|
|
106
|
-
onResizeStart,
|
|
107
|
-
onResize,
|
|
108
|
-
onResizeEnd,
|
|
109
|
-
label: labelProp,
|
|
110
|
-
onNudge,
|
|
111
|
-
style,
|
|
112
|
-
testID,
|
|
113
|
-
}: AiChatResizeHandleProps) {
|
|
114
|
-
useAiChatWebCss();
|
|
115
|
-
const palette = useAiChatPalette();
|
|
116
|
-
const { messages } = useMessages(AI_CHAT_MESSAGES);
|
|
117
|
-
const label = labelProp ?? messages.shell.resize;
|
|
118
|
-
const [gripY, setGripY] = useState<number | null>(null);
|
|
119
|
-
const [dragging, setDragging] = useState(false);
|
|
120
|
-
const height = useRef(0);
|
|
121
|
-
const startX = useRef(0);
|
|
122
|
-
const callbacks = useRef({ onResizeStart, onResize, onResizeEnd });
|
|
123
|
-
callbacks.current = { onResizeStart, onResize, onResizeEnd };
|
|
124
|
-
|
|
125
|
-
const track = (localY: number) => {
|
|
126
|
-
const h = height.current;
|
|
127
|
-
if (h > 0) setGripY(Math.min(h - 13, Math.max(13, localY)));
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
// Native: a pan responder (web uses pointer capture below).
|
|
131
|
-
const responder = useMemo(
|
|
132
|
-
() =>
|
|
133
|
-
PanResponder.create({
|
|
134
|
-
onStartShouldSetPanResponder: () => true,
|
|
135
|
-
onMoveShouldSetPanResponder: () => true,
|
|
136
|
-
onPanResponderGrant: (event) => {
|
|
137
|
-
track(event.nativeEvent.locationY);
|
|
138
|
-
setDragging(true);
|
|
139
|
-
callbacks.current.onResizeStart?.();
|
|
140
|
-
},
|
|
141
|
-
onPanResponderMove: (_event, gesture) => callbacks.current.onResize(gesture.dx),
|
|
142
|
-
onPanResponderRelease: () => {
|
|
143
|
-
setDragging(false);
|
|
144
|
-
callbacks.current.onResizeEnd?.();
|
|
145
|
-
},
|
|
146
|
-
onPanResponderTerminate: () => {
|
|
147
|
-
setDragging(false);
|
|
148
|
-
callbacks.current.onResizeEnd?.();
|
|
149
|
-
},
|
|
150
|
-
}),
|
|
151
|
-
[],
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
type DomTarget = {
|
|
155
|
-
getBoundingClientRect: () => { top: number };
|
|
156
|
-
setPointerCapture: (id: number) => void;
|
|
157
|
-
hasPointerCapture: (id: number) => boolean;
|
|
158
|
-
};
|
|
159
|
-
const web = IS_WEB
|
|
160
|
-
? {
|
|
161
|
-
onPointerDown: (event: PointerEvent) => {
|
|
162
|
-
event.preventDefault();
|
|
163
|
-
startX.current = event.nativeEvent.clientX;
|
|
164
|
-
setDragging(true);
|
|
165
|
-
callbacks.current.onResizeStart?.();
|
|
166
|
-
(event.currentTarget as unknown as DomTarget).setPointerCapture(event.nativeEvent.pointerId);
|
|
167
|
-
},
|
|
168
|
-
onPointerMove: (event: PointerEvent) => {
|
|
169
|
-
const target = event.currentTarget as unknown as DomTarget;
|
|
170
|
-
track(event.nativeEvent.clientY - target.getBoundingClientRect().top);
|
|
171
|
-
if (target.hasPointerCapture(event.nativeEvent.pointerId)) {
|
|
172
|
-
callbacks.current.onResize(event.nativeEvent.clientX - startX.current);
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
onPointerUp: () => {
|
|
176
|
-
setDragging(false);
|
|
177
|
-
callbacks.current.onResizeEnd?.();
|
|
178
|
-
},
|
|
179
|
-
onPointerCancel: () => {
|
|
180
|
-
setDragging(false);
|
|
181
|
-
callbacks.current.onResizeEnd?.();
|
|
182
|
-
},
|
|
183
|
-
onKeyDown: (event: { nativeEvent: { key: string } }) => {
|
|
184
|
-
if (event.nativeEvent.key === 'ArrowLeft') onNudge?.(-16);
|
|
185
|
-
if (event.nativeEvent.key === 'ArrowRight') onNudge?.(16);
|
|
186
|
-
},
|
|
187
|
-
tabIndex: onNudge ? (0 as const) : undefined,
|
|
188
|
-
}
|
|
189
|
-
: responder.panHandlers;
|
|
190
|
-
|
|
191
|
-
const grip: WebCssStyle = {
|
|
192
|
-
position: 'absolute',
|
|
193
|
-
...(gripY === null ? { top: '50%' } : { top: gripY }),
|
|
194
|
-
width: 15,
|
|
195
|
-
height: 25,
|
|
196
|
-
marginTop: -12.5,
|
|
197
|
-
flexDirection: 'row',
|
|
198
|
-
alignItems: 'center',
|
|
199
|
-
justifyContent: 'center',
|
|
200
|
-
gap: 2,
|
|
201
|
-
borderRadius: 4,
|
|
202
|
-
borderWidth: 1,
|
|
203
|
-
borderColor: palette.border,
|
|
204
|
-
backgroundColor: palette.primary,
|
|
205
|
-
boxShadow: palette.shadowXs,
|
|
206
|
-
...(IS_WEB ? null : { opacity: dragging ? 1 : 0 }),
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
return (
|
|
210
|
-
<View
|
|
211
|
-
{...dataHook('bloomAiChatGrip')}
|
|
212
|
-
{...web}
|
|
213
|
-
role="separator"
|
|
214
|
-
aria-orientation="vertical"
|
|
215
|
-
accessibilityLabel={label}
|
|
216
|
-
testID={testID}
|
|
217
|
-
onLayout={(event: LayoutChangeEvent) => {
|
|
218
|
-
height.current = event.nativeEvent.layout.height;
|
|
219
|
-
}}
|
|
220
|
-
style={[
|
|
221
|
-
{ position: 'absolute', top: 0, bottom: 0, right: -10, zIndex: 10, width: 20, alignItems: 'center' },
|
|
222
|
-
style,
|
|
223
|
-
]}>
|
|
224
|
-
<View {...dataHook('bloomAiChatGripPill', dragging ? 'dragging' : '')} pointerEvents="none" style={grip}>
|
|
225
|
-
{[0, 1, 2].map((line) => (
|
|
226
|
-
<View key={line} style={{ width: 1, height: 13, backgroundColor: palette.iconQuaternary }} />
|
|
227
|
-
))}
|
|
228
|
-
</View>
|
|
229
|
-
</View>
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
94
|
// ---------------------------------------------------------------------------
|
|
234
95
|
// Mobile header
|
|
235
96
|
// ---------------------------------------------------------------------------
|
|
@@ -344,7 +205,11 @@ export function AiChatShell({
|
|
|
344
205
|
const reducedMotion = useReducedMotion();
|
|
345
206
|
const { messages } = useMessages(AI_CHAT_MESSAGES);
|
|
346
207
|
const panelLabel = panelLabelProp ?? messages.code;
|
|
347
|
-
const
|
|
208
|
+
const common = useCommonMessages();
|
|
209
|
+
const l = useMemo(
|
|
210
|
+
() => ({ ...messages.shell, resize: common.resizePanels, ...labels }),
|
|
211
|
+
[messages, common, labels],
|
|
212
|
+
);
|
|
348
213
|
const { width: windowWidth } = useWindowDimensions();
|
|
349
214
|
// Native has no document: `document` is `container` there.
|
|
350
215
|
const documentScroll = IS_WEB && scroll === 'document';
|
package/src/ai-chat/index.ts
CHANGED
|
@@ -15,7 +15,8 @@ export {
|
|
|
15
15
|
AiChatMessageLine,
|
|
16
16
|
AiChatStrong,
|
|
17
17
|
} from './AiChatMessages';
|
|
18
|
-
export {
|
|
18
|
+
export { AiChatResizeHandle } from './AiChatResizeHandle';
|
|
19
|
+
export { AiChatMobileHeader, AiChatShell } from './AiChatShell';
|
|
19
20
|
export { useAiChatChromeInsets, useAiChatShell } from './context';
|
|
20
21
|
export type { AiChatChromeInsets, AiChatShellState } from './context';
|
|
21
22
|
export type {
|
package/src/ai-chat/index.web.ts
CHANGED
|
@@ -20,7 +20,8 @@ export {
|
|
|
20
20
|
AiChatMessageLine,
|
|
21
21
|
AiChatStrong,
|
|
22
22
|
} from './AiChatMessages';
|
|
23
|
-
export {
|
|
23
|
+
export { AiChatResizeHandle } from './AiChatResizeHandle';
|
|
24
|
+
export { AiChatMobileHeader, AiChatShell } from './AiChatShell';
|
|
24
25
|
export { useAiChatChromeInsets, useAiChatShell } from './context';
|
|
25
26
|
export type { AiChatChromeInsets, AiChatShellState } from './context';
|
|
26
27
|
export type {
|
package/src/ai-chat/messages.ts
CHANGED
|
@@ -60,7 +60,6 @@ export interface AiChatMessages {
|
|
|
60
60
|
closeNavigation: string;
|
|
61
61
|
openPanel: (panel: string) => string;
|
|
62
62
|
closePanel: (panel: string) => string;
|
|
63
|
-
resize: string;
|
|
64
63
|
};
|
|
65
64
|
/** The shell's default panel name. */
|
|
66
65
|
code: string;
|
|
@@ -105,7 +104,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
105
104
|
closeNavigation: 'Close navigation',
|
|
106
105
|
openPanel: (panel) => `Open ${String(panel).toLowerCase()}`,
|
|
107
106
|
closePanel: (panel) => `Close ${String(panel).toLowerCase()}`,
|
|
108
|
-
resize: 'Resize panels',
|
|
109
107
|
},
|
|
110
108
|
code: 'Code',
|
|
111
109
|
},
|
|
@@ -145,7 +143,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
145
143
|
closeNavigation: 'Cerrar navegación',
|
|
146
144
|
openPanel: (panel) => `Abrir ${String(panel).toLowerCase()}`,
|
|
147
145
|
closePanel: (panel) => `Cerrar ${String(panel).toLowerCase()}`,
|
|
148
|
-
resize: 'Cambiar tamaño de los paneles',
|
|
149
146
|
},
|
|
150
147
|
code: 'Código',
|
|
151
148
|
},
|
|
@@ -185,7 +182,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
185
182
|
closeNavigation: 'Tanca la navegació',
|
|
186
183
|
openPanel: (panel) => `Obre ${String(panel).toLowerCase()}`,
|
|
187
184
|
closePanel: (panel) => `Tanca ${String(panel).toLowerCase()}`,
|
|
188
|
-
resize: 'Canvia la mida dels taulers',
|
|
189
185
|
},
|
|
190
186
|
code: 'Codi',
|
|
191
187
|
},
|
|
@@ -226,7 +222,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
226
222
|
closeNavigation: 'Navigation schließen',
|
|
227
223
|
openPanel: (panel) => `${panel} öffnen`,
|
|
228
224
|
closePanel: (panel) => `${panel} schließen`,
|
|
229
|
-
resize: 'Bereichsgröße ändern',
|
|
230
225
|
},
|
|
231
226
|
code: 'Code',
|
|
232
227
|
},
|
|
@@ -272,7 +267,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
272
267
|
closeNavigation: 'Fermer la navigation',
|
|
273
268
|
openPanel: (panel) => `Ouvrir le panneau ${panel}`,
|
|
274
269
|
closePanel: (panel) => `Fermer le panneau ${panel}`,
|
|
275
|
-
resize: 'Redimensionner les panneaux',
|
|
276
270
|
},
|
|
277
271
|
code: 'Code',
|
|
278
272
|
},
|
|
@@ -312,7 +306,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
312
306
|
closeNavigation: 'Chiudi navigazione',
|
|
313
307
|
openPanel: (panel) => `Apri ${String(panel).toLowerCase()}`,
|
|
314
308
|
closePanel: (panel) => `Chiudi ${String(panel).toLowerCase()}`,
|
|
315
|
-
resize: 'Ridimensiona pannelli',
|
|
316
309
|
},
|
|
317
310
|
code: 'Codice',
|
|
318
311
|
},
|
|
@@ -352,7 +345,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
352
345
|
closeNavigation: 'Fechar navegação',
|
|
353
346
|
openPanel: (panel) => `Abrir ${String(panel).toLowerCase()}`,
|
|
354
347
|
closePanel: (panel) => `Fechar ${String(panel).toLowerCase()}`,
|
|
355
|
-
resize: 'Redimensionar painéis',
|
|
356
348
|
},
|
|
357
349
|
code: 'Código',
|
|
358
350
|
},
|
|
@@ -399,7 +391,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
399
391
|
closeNavigation: 'Закрыть навигацию',
|
|
400
392
|
openPanel: (panel) => `Открыть панель «${panel}»`,
|
|
401
393
|
closePanel: (panel) => `Закрыть панель «${panel}»`,
|
|
402
|
-
resize: 'Изменить размер панелей',
|
|
403
394
|
},
|
|
404
395
|
code: 'Код',
|
|
405
396
|
},
|
|
@@ -439,7 +430,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
439
430
|
closeNavigation: 'Gezinmeyi kapat',
|
|
440
431
|
openPanel: (panel) => `${panel} panelini aç`,
|
|
441
432
|
closePanel: (panel) => `${panel} panelini kapat`,
|
|
442
|
-
resize: 'Panelleri yeniden boyutlandır',
|
|
443
433
|
},
|
|
444
434
|
code: 'Kod',
|
|
445
435
|
},
|
|
@@ -479,7 +469,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
479
469
|
closeNavigation: 'ナビゲーションを閉じる',
|
|
480
470
|
openPanel: (panel) => `${panel}を開く`,
|
|
481
471
|
closePanel: (panel) => `${panel}を閉じる`,
|
|
482
|
-
resize: 'パネルのサイズを変更',
|
|
483
472
|
},
|
|
484
473
|
code: 'コード',
|
|
485
474
|
},
|
|
@@ -519,7 +508,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
519
508
|
closeNavigation: '关闭导航',
|
|
520
509
|
openPanel: (panel) => `打开${panel}`,
|
|
521
510
|
closePanel: (panel) => `关闭${panel}`,
|
|
522
|
-
resize: '调整面板大小',
|
|
523
511
|
},
|
|
524
512
|
code: '代码',
|
|
525
513
|
},
|
|
@@ -575,7 +563,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
575
563
|
closeNavigation: 'إغلاق التنقل',
|
|
576
564
|
openPanel: (panel) => `فتح لوحة ${panel}`,
|
|
577
565
|
closePanel: (panel) => `إغلاق لوحة ${panel}`,
|
|
578
|
-
resize: 'تغيير حجم اللوحات',
|
|
579
566
|
},
|
|
580
567
|
code: 'الرمز البرمجي',
|
|
581
568
|
},
|
|
@@ -615,7 +602,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
615
602
|
closeNavigation: 'नेविगेशन बंद करें',
|
|
616
603
|
openPanel: (panel) => `${panel} खोलें`,
|
|
617
604
|
closePanel: (panel) => `${panel} बंद करें`,
|
|
618
|
-
resize: 'पैनल का आकार बदलें',
|
|
619
605
|
},
|
|
620
606
|
code: 'कोड',
|
|
621
607
|
},
|
|
@@ -655,7 +641,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
655
641
|
closeNavigation: 'নেভিগেশন বন্ধ করুন',
|
|
656
642
|
openPanel: (panel) => `${panel} খুলুন`,
|
|
657
643
|
closePanel: (panel) => `${panel} বন্ধ করুন`,
|
|
658
|
-
resize: 'প্যানেলের আকার বদলান',
|
|
659
644
|
},
|
|
660
645
|
code: 'কোড',
|
|
661
646
|
},
|
|
@@ -695,7 +680,6 @@ export const AI_CHAT_MESSAGES: MessageCatalog<AiChatMessages> = {
|
|
|
695
680
|
closeNavigation: 'Tutup navigasi',
|
|
696
681
|
openPanel: (panel) => `Buka ${String(panel).toLowerCase()}`,
|
|
697
682
|
closePanel: (panel) => `Tutup ${String(panel).toLowerCase()}`,
|
|
698
|
-
resize: 'Ubah ukuran panel',
|
|
699
683
|
},
|
|
700
684
|
code: 'Kode',
|
|
701
685
|
},
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import React, { memo, useCallback, useRef, useState } from 'react';
|
|
18
18
|
import { ScrollView, View } from 'react-native';
|
|
19
19
|
|
|
20
|
-
import { AiChatResizeHandle } from '../ai-chat/
|
|
20
|
+
import { AiChatResizeHandle } from '../ai-chat/AiChatResizeHandle';
|
|
21
21
|
import { Z_INDEX } from '../styles/z-index';
|
|
22
22
|
import { useTheme } from '../theme/use-theme';
|
|
23
23
|
|
package/src/button/Button.tsx
CHANGED
|
@@ -43,6 +43,35 @@ function isTextContent(node: React.ReactNode): boolean {
|
|
|
43
43
|
return React.isValidElement<{ children?: React.ReactNode }>(node) && node.type === React.Fragment && isTextContent(node.props.children);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
/** Keep contiguous labels together so the button's gap only separates layout nodes. */
|
|
47
|
+
function renderTextContent(node: React.ReactNode, wrap: (text: React.ReactNode) => React.ReactNode): React.ReactNode {
|
|
48
|
+
if (isTextContent(node)) return wrap(node);
|
|
49
|
+
const result: React.ReactNode[] = [];
|
|
50
|
+
let run: React.ReactNode[] = [];
|
|
51
|
+
let runKey = '';
|
|
52
|
+
const flush = () => {
|
|
53
|
+
if (run.length) result.push(<React.Fragment key={runKey}>{wrap(run)}</React.Fragment>);
|
|
54
|
+
run = [];
|
|
55
|
+
};
|
|
56
|
+
const visit = (children: React.ReactNode, path: string) => {
|
|
57
|
+
React.Children.toArray(children).forEach((child, index) => {
|
|
58
|
+
const key = `${path}/${React.isValidElement(child) ? child.key ?? index : index}`;
|
|
59
|
+
if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment) {
|
|
60
|
+
visit(child.props.children, key);
|
|
61
|
+
} else if (typeof child === 'string' || typeof child === 'number') {
|
|
62
|
+
if (!run.length) runKey = key;
|
|
63
|
+
run.push(child);
|
|
64
|
+
} else {
|
|
65
|
+
flush();
|
|
66
|
+
result.push(<React.Fragment key={key}>{child}</React.Fragment>);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
visit(node, 'content');
|
|
71
|
+
flush();
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
|
|
46
75
|
export type {
|
|
47
76
|
ButtonProps, LinkButtonProps,
|
|
48
77
|
ButtonSize,
|
|
@@ -340,16 +369,12 @@ const ButtonComponent = forwardRef<View, ButtonProps>(function ButtonComponent({
|
|
|
340
369
|
)}
|
|
341
370
|
{leading}
|
|
342
371
|
{iconNode}
|
|
343
|
-
{
|
|
344
|
-
|
|
345
|
-
variant={textVariant ?? geometry.type}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
{children}
|
|
350
|
-
</Text>
|
|
351
|
-
) : children)}
|
|
352
|
-
{isSquare && !renderLeadingIcon && !LeadingIcon && !iconNode && children != null ? children : null}
|
|
372
|
+
{children != null && (!isSquare || (!renderLeadingIcon && !LeadingIcon && !iconNode))
|
|
373
|
+
? renderTextContent(children, text => (
|
|
374
|
+
<Text variant={textVariant ?? geometry.type} numberOfLines={numberOfLines} style={[computedTextStyle, textStyle]}>
|
|
375
|
+
{text}
|
|
376
|
+
</Text>
|
|
377
|
+
)) : null}
|
|
353
378
|
{trailing}
|
|
354
379
|
{!isSquare
|
|
355
380
|
? resolveIconSlot(renderTrailingIcon, iconSize, paint.foreground, () =>
|
|
@@ -164,9 +164,9 @@ function GlyphButtonComponent(
|
|
|
164
164
|
aria-busy={busy || undefined}
|
|
165
165
|
aria-expanded={ariaExpanded}
|
|
166
166
|
{...(ariaHasPopup == null ? {} : { 'aria-haspopup': ariaHasPopup })}
|
|
167
|
-
disabled={
|
|
168
|
-
onPress={onPress}
|
|
169
|
-
onLongPress={onLongPress}
|
|
167
|
+
disabled={disabled}
|
|
168
|
+
onPress={onPress ? event => { if (!blocked) onPress(event); } : undefined}
|
|
169
|
+
onLongPress={onLongPress ? event => { if (!blocked) onLongPress(event); } : undefined}
|
|
170
170
|
onHoverIn={onHoverIn}
|
|
171
171
|
onHoverOut={onHoverOut}
|
|
172
172
|
onPressIn={onPressIn}
|
package/src/card-form/shared.ts
CHANGED
|
@@ -65,7 +65,8 @@ export function groupCardDigits(digits: string, groups: readonly number[] = DEFA
|
|
|
65
65
|
* re-groups it when the field is left.
|
|
66
66
|
*
|
|
67
67
|
* An edit that would push the number past `maxDigits` is refused outright:
|
|
68
|
-
* returning a truncated value would move the caret too.
|
|
68
|
+
* returning a truncated value would move the caret too. Deletions still work
|
|
69
|
+
* when a scheme change made the existing value longer than the new limit.
|
|
69
70
|
*/
|
|
70
71
|
export function applyCardNumberEdit(
|
|
71
72
|
previous: string,
|
|
@@ -74,8 +75,8 @@ export function applyCardNumberEdit(
|
|
|
74
75
|
maxDigits = 19,
|
|
75
76
|
): string {
|
|
76
77
|
const nextDigits = cardDigits(next);
|
|
77
|
-
if (nextDigits.length > maxDigits) return previous;
|
|
78
78
|
const previousDigits = cardDigits(previous);
|
|
79
|
+
if (nextDigits.length > maxDigits && nextDigits.length >= previousDigits.length) return previous;
|
|
79
80
|
const atEnd =
|
|
80
81
|
previousDigits.startsWith(nextDigits) || nextDigits.startsWith(previousDigits);
|
|
81
82
|
if (atEnd) return groupCardDigits(nextDigits, groups);
|