@mediquo/medicore 0.1.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/README.md +89 -0
- package/dist/components/advisor-contact/advisor-contact.d.ts +39 -0
- package/dist/components/advisor-contact/advisor-contact.js +94 -0
- package/dist/components/advisor-contact/advisor-contact.js.map +1 -0
- package/dist/components/advisor-contact/index.d.ts +1 -0
- package/dist/components/announcement/announcement-dialog.d.ts +39 -0
- package/dist/components/announcement/announcement-dialog.js +107 -0
- package/dist/components/announcement/announcement-dialog.js.map +1 -0
- package/dist/components/announcement/announcement-illustration.d.ts +9 -0
- package/dist/components/announcement/announcement-illustration.js +58 -0
- package/dist/components/announcement/announcement-illustration.js.map +1 -0
- package/dist/components/announcement/index.d.ts +2 -0
- package/dist/components/app-shell/app-shell.d.ts +74 -0
- package/dist/components/app-shell/app-shell.js +208 -0
- package/dist/components/app-shell/app-shell.js.map +1 -0
- package/dist/components/app-shell/index.d.ts +1 -0
- package/dist/components/appointment-row/appointment-row.d.ts +59 -0
- package/dist/components/appointment-row/appointment-row.js +160 -0
- package/dist/components/appointment-row/appointment-row.js.map +1 -0
- package/dist/components/appointment-row/index.d.ts +1 -0
- package/dist/components/auth-panel/auth-panel.d.ts +20 -0
- package/dist/components/auth-panel/auth-panel.js +36 -0
- package/dist/components/auth-panel/auth-panel.js.map +1 -0
- package/dist/components/auth-panel/index.d.ts +1 -0
- package/dist/components/availability-column/availability-column.d.ts +28 -0
- package/dist/components/availability-column/availability-column.js +57 -0
- package/dist/components/availability-column/availability-column.js.map +1 -0
- package/dist/components/availability-column/index.d.ts +1 -0
- package/dist/components/availability-row/availability-row.d.ts +36 -0
- package/dist/components/availability-row/availability-row.js +60 -0
- package/dist/components/availability-row/availability-row.js.map +1 -0
- package/dist/components/availability-row/index.d.ts +1 -0
- package/dist/components/avatar/avatar.d.ts +57 -0
- package/dist/components/avatar/avatar.js +115 -0
- package/dist/components/avatar/avatar.js.map +1 -0
- package/dist/components/avatar/index.d.ts +1 -0
- package/dist/components/badge/badge.d.ts +20 -0
- package/dist/components/badge/badge.js +42 -0
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/badge/index.d.ts +1 -0
- package/dist/components/banner/banner.d.ts +32 -0
- package/dist/components/banner/banner.js +93 -0
- package/dist/components/banner/banner.js.map +1 -0
- package/dist/components/banner/index.d.ts +1 -0
- package/dist/components/bottom-bar/bottom-bar.d.ts +41 -0
- package/dist/components/bottom-bar/bottom-bar.js +76 -0
- package/dist/components/bottom-bar/bottom-bar.js.map +1 -0
- package/dist/components/bottom-bar/index.d.ts +1 -0
- package/dist/components/brand-mark/brand-mark.d.ts +22 -0
- package/dist/components/brand-mark/brand-mark.js +72 -0
- package/dist/components/brand-mark/brand-mark.js.map +1 -0
- package/dist/components/brand-mark/index.d.ts +1 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +36 -0
- package/dist/components/breadcrumb/breadcrumb.js +70 -0
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/breadcrumb/index.d.ts +1 -0
- package/dist/components/button/button.d.ts +29 -0
- package/dist/components/button/button.js +104 -0
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/button/index.d.ts +1 -0
- package/dist/components/card/card.d.ts +84 -0
- package/dist/components/card/card.js +157 -0
- package/dist/components/card/card.js.map +1 -0
- package/dist/components/card/index.d.ts +1 -0
- package/dist/components/card-appointment/card-appointment.d.ts +58 -0
- package/dist/components/card-appointment/card-appointment.js +136 -0
- package/dist/components/card-appointment/card-appointment.js.map +1 -0
- package/dist/components/card-appointment/index.d.ts +1 -0
- package/dist/components/card-article/card-article.d.ts +28 -0
- package/dist/components/card-article/card-article.js +46 -0
- package/dist/components/card-article/card-article.js.map +1 -0
- package/dist/components/card-article/index.d.ts +1 -0
- package/dist/components/card-professional/card-professional.d.ts +56 -0
- package/dist/components/card-professional/card-professional.js +77 -0
- package/dist/components/card-professional/card-professional.js.map +1 -0
- package/dist/components/card-professional/index.d.ts +1 -0
- package/dist/components/card-professional-mini/card-professional-mini.d.ts +22 -0
- package/dist/components/card-professional-mini/card-professional-mini.js +37 -0
- package/dist/components/card-professional-mini/card-professional-mini.js.map +1 -0
- package/dist/components/card-professional-mini/index.d.ts +1 -0
- package/dist/components/card-program/card-program.d.ts +45 -0
- package/dist/components/card-program/card-program.js +142 -0
- package/dist/components/card-program/card-program.js.map +1 -0
- package/dist/components/card-program/index.d.ts +1 -0
- package/dist/components/card-service-option/card-service-option.d.ts +33 -0
- package/dist/components/card-service-option/card-service-option.js +49 -0
- package/dist/components/card-service-option/card-service-option.js.map +1 -0
- package/dist/components/card-service-option/index.d.ts +1 -0
- package/dist/components/card-testimonial/card-testimonial.d.ts +17 -0
- package/dist/components/card-testimonial/card-testimonial.js +36 -0
- package/dist/components/card-testimonial/card-testimonial.js.map +1 -0
- package/dist/components/card-testimonial/index.d.ts +1 -0
- package/dist/components/chat/chat-attachment.d.ts +34 -0
- package/dist/components/chat/chat-attachment.js +90 -0
- package/dist/components/chat/chat-attachment.js.map +1 -0
- package/dist/components/chat/chat-bubble.d.ts +49 -0
- package/dist/components/chat/chat-bubble.js +102 -0
- package/dist/components/chat/chat-bubble.js.map +1 -0
- package/dist/components/chat/chat-composer.d.ts +40 -0
- package/dist/components/chat/chat-composer.js +114 -0
- package/dist/components/chat/chat-composer.js.map +1 -0
- package/dist/components/chat/chat-conversation-row.d.ts +42 -0
- package/dist/components/chat/chat-conversation-row.js +104 -0
- package/dist/components/chat/chat-conversation-row.js.map +1 -0
- package/dist/components/chat/chat-date-separator.d.ts +15 -0
- package/dist/components/chat/chat-date-separator.js +29 -0
- package/dist/components/chat/chat-date-separator.js.map +1 -0
- package/dist/components/chat/chat-delivery-status.d.ts +21 -0
- package/dist/components/chat/chat-delivery-status.js +43 -0
- package/dist/components/chat/chat-delivery-status.js.map +1 -0
- package/dist/components/chat/chat-launcher.d.ts +24 -0
- package/dist/components/chat/chat-launcher.js +52 -0
- package/dist/components/chat/chat-launcher.js.map +1 -0
- package/dist/components/chat/chat-message-list.d.ts +13 -0
- package/dist/components/chat/chat-message-list.js +23 -0
- package/dist/components/chat/chat-message-list.js.map +1 -0
- package/dist/components/chat/chat-room-header.d.ts +33 -0
- package/dist/components/chat/chat-room-header.js +53 -0
- package/dist/components/chat/chat-room-header.js.map +1 -0
- package/dist/components/chat/chat-typing-indicator.d.ts +20 -0
- package/dist/components/chat/chat-typing-indicator.js +61 -0
- package/dist/components/chat/chat-typing-indicator.js.map +1 -0
- package/dist/components/chat/index.d.ts +10 -0
- package/dist/components/checkbox/checkbox-field.d.ts +25 -0
- package/dist/components/checkbox/checkbox-field.js +62 -0
- package/dist/components/checkbox/checkbox-field.js.map +1 -0
- package/dist/components/checkbox/checkbox.d.ts +28 -0
- package/dist/components/checkbox/checkbox.js +62 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/chip/chip.d.ts +60 -0
- package/dist/components/chip/chip.js +101 -0
- package/dist/components/chip/chip.js.map +1 -0
- package/dist/components/chip/index.d.ts +1 -0
- package/dist/components/date-badge/date-badge.d.ts +15 -0
- package/dist/components/date-badge/date-badge.js +35 -0
- package/dist/components/date-badge/date-badge.js.map +1 -0
- package/dist/components/date-badge/index.d.ts +1 -0
- package/dist/components/day-cell/day-cell.d.ts +45 -0
- package/dist/components/day-cell/day-cell.js +124 -0
- package/dist/components/day-cell/day-cell.js.map +1 -0
- package/dist/components/day-cell/index.d.ts +1 -0
- package/dist/components/divider/divider.d.ts +23 -0
- package/dist/components/divider/divider.js +49 -0
- package/dist/components/divider/divider.js.map +1 -0
- package/dist/components/divider/index.d.ts +1 -0
- package/dist/components/empty-state/empty-state.d.ts +53 -0
- package/dist/components/empty-state/empty-state.js +57 -0
- package/dist/components/empty-state/empty-state.js.map +1 -0
- package/dist/components/empty-state/index.d.ts +1 -0
- package/dist/components/field/field-context.d.ts +19 -0
- package/dist/components/field/field-context.js +10 -0
- package/dist/components/field/field-context.js.map +1 -0
- package/dist/components/field/field.d.ts +47 -0
- package/dist/components/field/field.js +116 -0
- package/dist/components/field/field.js.map +1 -0
- package/dist/components/field/index.d.ts +1 -0
- package/dist/components/footer/footer.d.ts +29 -0
- package/dist/components/footer/footer.js +88 -0
- package/dist/components/footer/footer.js.map +1 -0
- package/dist/components/footer/index.d.ts +1 -0
- package/dist/components/health-record/health-record.d.ts +88 -0
- package/dist/components/health-record/health-record.js +255 -0
- package/dist/components/health-record/health-record.js.map +1 -0
- package/dist/components/health-record/index.d.ts +1 -0
- package/dist/components/hero-greeting/hero-greeting.d.ts +17 -0
- package/dist/components/hero-greeting/hero-greeting.js +29 -0
- package/dist/components/hero-greeting/hero-greeting.js.map +1 -0
- package/dist/components/hero-greeting/index.d.ts +1 -0
- package/dist/components/icon-button/icon-button.d.ts +37 -0
- package/dist/components/icon-button/icon-button.js +64 -0
- package/dist/components/icon-button/icon-button.js.map +1 -0
- package/dist/components/icon-button/index.d.ts +1 -0
- package/dist/components/icon-container/icon-container.d.ts +29 -0
- package/dist/components/icon-container/icon-container.js +49 -0
- package/dist/components/icon-container/icon-container.js.map +1 -0
- package/dist/components/icon-container/index.d.ts +1 -0
- package/dist/components/included-item/included-item.d.ts +10 -0
- package/dist/components/included-item/included-item.js +37 -0
- package/dist/components/included-item/included-item.js.map +1 -0
- package/dist/components/included-item/index.d.ts +1 -0
- package/dist/components/input/control-styles.d.ts +34 -0
- package/dist/components/input/control-styles.js +36 -0
- package/dist/components/input/control-styles.js.map +1 -0
- package/dist/components/input/index.d.ts +1 -0
- package/dist/components/input/input.d.ts +35 -0
- package/dist/components/input/input.js +123 -0
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/link/index.d.ts +1 -0
- package/dist/components/link/link.d.ts +52 -0
- package/dist/components/link/link.js +94 -0
- package/dist/components/link/link.js.map +1 -0
- package/dist/components/list-row/index.d.ts +1 -0
- package/dist/components/list-row/list-row.d.ts +47 -0
- package/dist/components/list-row/list-row.js +71 -0
- package/dist/components/list-row/list-row.js.map +1 -0
- package/dist/components/logo/index.d.ts +1 -0
- package/dist/components/logo/logo.d.ts +13 -0
- package/dist/components/logo/logo.js +48 -0
- package/dist/components/logo/logo.js.map +1 -0
- package/dist/components/menu/index.d.ts +1 -0
- package/dist/components/menu/menu.d.ts +79 -0
- package/dist/components/menu/menu.js +250 -0
- package/dist/components/menu/menu.js.map +1 -0
- package/dist/components/mobile-header/index.d.ts +1 -0
- package/dist/components/mobile-header/mobile-header.d.ts +49 -0
- package/dist/components/mobile-header/mobile-header.js +84 -0
- package/dist/components/mobile-header/mobile-header.js.map +1 -0
- package/dist/components/modal/confirm-modal.d.ts +32 -0
- package/dist/components/modal/confirm-modal.js +78 -0
- package/dist/components/modal/confirm-modal.js.map +1 -0
- package/dist/components/modal/index.d.ts +2 -0
- package/dist/components/modal/modal.d.ts +103 -0
- package/dist/components/modal/modal.js +248 -0
- package/dist/components/modal/modal.js.map +1 -0
- package/dist/components/modal/use-media-query.d.ts +7 -0
- package/dist/components/modal/use-media-query.js +22 -0
- package/dist/components/modal/use-media-query.js.map +1 -0
- package/dist/components/nav-item/index.d.ts +1 -0
- package/dist/components/nav-item/nav-item.d.ts +54 -0
- package/dist/components/nav-item/nav-item.js +124 -0
- package/dist/components/nav-item/nav-item.js.map +1 -0
- package/dist/components/otp-input/index.d.ts +1 -0
- package/dist/components/otp-input/otp-input.d.ts +40 -0
- package/dist/components/otp-input/otp-input.js +152 -0
- package/dist/components/otp-input/otp-input.js.map +1 -0
- package/dist/components/page-header/index.d.ts +1 -0
- package/dist/components/page-header/page-header.d.ts +24 -0
- package/dist/components/page-header/page-header.js +41 -0
- package/dist/components/page-header/page-header.js.map +1 -0
- package/dist/components/phone-input/index.d.ts +1 -0
- package/dist/components/phone-input/phone-input.d.ts +46 -0
- package/dist/components/phone-input/phone-input.js +219 -0
- package/dist/components/phone-input/phone-input.js.map +1 -0
- package/dist/components/promo-app/index.d.ts +1 -0
- package/dist/components/promo-app/promo-app.d.ts +29 -0
- package/dist/components/promo-app/promo-app.js +51 -0
- package/dist/components/promo-app/promo-app.js.map +1 -0
- package/dist/components/radio/field-item-label.d.ts +13 -0
- package/dist/components/radio/field-item-label.js +29 -0
- package/dist/components/radio/field-item-label.js.map +1 -0
- package/dist/components/radio/index.d.ts +1 -0
- package/dist/components/radio/radio.d.ts +38 -0
- package/dist/components/radio/radio.js +90 -0
- package/dist/components/radio/radio.js.map +1 -0
- package/dist/components/radio/use-field-group-label.d.ts +7 -0
- package/dist/components/radio/use-field-group-label.js +16 -0
- package/dist/components/radio/use-field-group-label.js.map +1 -0
- package/dist/components/rating/index.d.ts +1 -0
- package/dist/components/rating/rating.d.ts +23 -0
- package/dist/components/rating/rating.js +93 -0
- package/dist/components/rating/rating.js.map +1 -0
- package/dist/components/section-header/index.d.ts +1 -0
- package/dist/components/section-header/section-header.d.ts +37 -0
- package/dist/components/section-header/section-header.js +60 -0
- package/dist/components/section-header/section-header.js.map +1 -0
- package/dist/components/segmented-control/index.d.ts +1 -0
- package/dist/components/segmented-control/segmented-control.d.ts +34 -0
- package/dist/components/segmented-control/segmented-control.js +51 -0
- package/dist/components/segmented-control/segmented-control.js.map +1 -0
- package/dist/components/select/index.d.ts +2 -0
- package/dist/components/select/native-select.d.ts +30 -0
- package/dist/components/select/native-select.js +83 -0
- package/dist/components/select/native-select.js.map +1 -0
- package/dist/components/select/select.d.ts +49 -0
- package/dist/components/select/select.js +125 -0
- package/dist/components/select/select.js.map +1 -0
- package/dist/components/selection-card/index.d.ts +1 -0
- package/dist/components/selection-card/selection-card.d.ts +31 -0
- package/dist/components/selection-card/selection-card.js +90 -0
- package/dist/components/selection-card/selection-card.js.map +1 -0
- package/dist/components/severity-indicator/index.d.ts +1 -0
- package/dist/components/severity-indicator/severity-indicator.d.ts +18 -0
- package/dist/components/severity-indicator/severity-indicator.js +64 -0
- package/dist/components/severity-indicator/severity-indicator.js.map +1 -0
- package/dist/components/severity-scale/index.d.ts +1 -0
- package/dist/components/severity-scale/severity-scale.d.ts +17 -0
- package/dist/components/severity-scale/severity-scale.js +22 -0
- package/dist/components/severity-scale/severity-scale.js.map +1 -0
- package/dist/components/sidebar/index.d.ts +1 -0
- package/dist/components/sidebar/sidebar.d.ts +99 -0
- package/dist/components/sidebar/sidebar.js +228 -0
- package/dist/components/sidebar/sidebar.js.map +1 -0
- package/dist/components/skeleton/index.d.ts +1 -0
- package/dist/components/skeleton/skeleton.d.ts +33 -0
- package/dist/components/skeleton/skeleton.js +47 -0
- package/dist/components/skeleton/skeleton.js.map +1 -0
- package/dist/components/social-button/index.d.ts +1 -0
- package/dist/components/social-button/social-button.d.ts +29 -0
- package/dist/components/social-button/social-button.js +53 -0
- package/dist/components/social-button/social-button.js.map +1 -0
- package/dist/components/spinner/index.d.ts +1 -0
- package/dist/components/spinner/spinner.d.ts +20 -0
- package/dist/components/spinner/spinner.js +54 -0
- package/dist/components/spinner/spinner.js.map +1 -0
- package/dist/components/stat-tile/index.d.ts +1 -0
- package/dist/components/stat-tile/stat-tile.d.ts +15 -0
- package/dist/components/stat-tile/stat-tile.js +28 -0
- package/dist/components/stat-tile/stat-tile.js.map +1 -0
- package/dist/components/step-indicator/index.d.ts +1 -0
- package/dist/components/step-indicator/step-indicator.d.ts +17 -0
- package/dist/components/step-indicator/step-indicator.js +35 -0
- package/dist/components/step-indicator/step-indicator.js.map +1 -0
- package/dist/components/store-badge/index.d.ts +1 -0
- package/dist/components/store-badge/store-badge.d.ts +22 -0
- package/dist/components/store-badge/store-badge.js +40 -0
- package/dist/components/store-badge/store-badge.js.map +1 -0
- package/dist/components/switch/index.d.ts +1 -0
- package/dist/components/switch/switch.d.ts +23 -0
- package/dist/components/switch/switch.js +67 -0
- package/dist/components/switch/switch.js.map +1 -0
- package/dist/components/table/index.d.ts +1 -0
- package/dist/components/table/table.d.ts +85 -0
- package/dist/components/table/table.js +175 -0
- package/dist/components/table/table.js.map +1 -0
- package/dist/components/tabs/index.d.ts +1 -0
- package/dist/components/tabs/tabs.d.ts +58 -0
- package/dist/components/tabs/tabs.js +89 -0
- package/dist/components/tabs/tabs.js.map +1 -0
- package/dist/components/textarea/index.d.ts +1 -0
- package/dist/components/textarea/textarea.d.ts +25 -0
- package/dist/components/textarea/textarea.js +79 -0
- package/dist/components/textarea/textarea.js.map +1 -0
- package/dist/components/time-slot/index.d.ts +1 -0
- package/dist/components/time-slot/time-slot.d.ts +50 -0
- package/dist/components/time-slot/time-slot.js +75 -0
- package/dist/components/time-slot/time-slot.js.map +1 -0
- package/dist/components/toast/index.d.ts +1 -0
- package/dist/components/toast/toast.d.ts +60 -0
- package/dist/components/toast/toast.js +159 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +1 -0
- package/dist/components/tooltip/tooltip.d.ts +40 -0
- package/dist/components/tooltip/tooltip.js +110 -0
- package/dist/components/tooltip/tooltip.js.map +1 -0
- package/dist/components/video/index.d.ts +4 -0
- package/dist/components/video/video-control-button.d.ts +33 -0
- package/dist/components/video/video-control-button.js +119 -0
- package/dist/components/video/video-control-button.js.map +1 -0
- package/dist/components/video/video-label.d.ts +14 -0
- package/dist/components/video/video-label.js +25 -0
- package/dist/components/video/video-label.js.map +1 -0
- package/dist/components/video/video-stage.d.ts +39 -0
- package/dist/components/video/video-stage.js +96 -0
- package/dist/components/video/video-stage.js.map +1 -0
- package/dist/components/video/video-tile.d.ts +37 -0
- package/dist/components/video/video-tile.js +61 -0
- package/dist/components/video/video-tile.js.map +1 -0
- package/dist/icons/create-icon.d.ts +18 -0
- package/dist/icons/create-icon.js +46 -0
- package/dist/icons/create-icon.js.map +1 -0
- package/dist/icons/generated/activity-heart.d.ts +1 -0
- package/dist/icons/generated/activity-heart.js +10 -0
- package/dist/icons/generated/activity-heart.js.map +1 -0
- package/dist/icons/generated/activity.d.ts +1 -0
- package/dist/icons/generated/activity.js +10 -0
- package/dist/icons/generated/activity.js.map +1 -0
- package/dist/icons/generated/alert-circle.d.ts +1 -0
- package/dist/icons/generated/alert-circle.js +10 -0
- package/dist/icons/generated/alert-circle.js.map +1 -0
- package/dist/icons/generated/alert-triangle.d.ts +1 -0
- package/dist/icons/generated/alert-triangle.js +10 -0
- package/dist/icons/generated/alert-triangle.js.map +1 -0
- package/dist/icons/generated/allergy-peanut.d.ts +1 -0
- package/dist/icons/generated/allergy-peanut.js +16 -0
- package/dist/icons/generated/allergy-peanut.js.map +1 -0
- package/dist/icons/generated/annotation-alert.d.ts +1 -0
- package/dist/icons/generated/annotation-alert.js +10 -0
- package/dist/icons/generated/annotation-alert.js.map +1 -0
- package/dist/icons/generated/annotation-check.d.ts +1 -0
- package/dist/icons/generated/annotation-check.js +10 -0
- package/dist/icons/generated/annotation-check.js.map +1 -0
- package/dist/icons/generated/annotation-info.d.ts +1 -0
- package/dist/icons/generated/annotation-info.js +10 -0
- package/dist/icons/generated/annotation-info.js.map +1 -0
- package/dist/icons/generated/annotation-question.d.ts +1 -0
- package/dist/icons/generated/annotation-question.js +10 -0
- package/dist/icons/generated/annotation-question.js.map +1 -0
- package/dist/icons/generated/annotation.d.ts +1 -0
- package/dist/icons/generated/annotation.js +10 -0
- package/dist/icons/generated/annotation.js.map +1 -0
- package/dist/icons/generated/arrow-circle-down.d.ts +1 -0
- package/dist/icons/generated/arrow-circle-down.js +10 -0
- package/dist/icons/generated/arrow-circle-down.js.map +1 -0
- package/dist/icons/generated/arrow-circle-left.d.ts +1 -0
- package/dist/icons/generated/arrow-circle-left.js +10 -0
- package/dist/icons/generated/arrow-circle-left.js.map +1 -0
- package/dist/icons/generated/arrow-circle-right.d.ts +1 -0
- package/dist/icons/generated/arrow-circle-right.js +10 -0
- package/dist/icons/generated/arrow-circle-right.js.map +1 -0
- package/dist/icons/generated/arrow-circle-up.d.ts +1 -0
- package/dist/icons/generated/arrow-circle-up.js +10 -0
- package/dist/icons/generated/arrow-circle-up.js.map +1 -0
- package/dist/icons/generated/arrow-narrow-down.d.ts +1 -0
- package/dist/icons/generated/arrow-narrow-down.js +10 -0
- package/dist/icons/generated/arrow-narrow-down.js.map +1 -0
- package/dist/icons/generated/arrow-narrow-left.d.ts +1 -0
- package/dist/icons/generated/arrow-narrow-left.js +10 -0
- package/dist/icons/generated/arrow-narrow-left.js.map +1 -0
- package/dist/icons/generated/arrow-narrow-right.d.ts +1 -0
- package/dist/icons/generated/arrow-narrow-right.js +10 -0
- package/dist/icons/generated/arrow-narrow-right.js.map +1 -0
- package/dist/icons/generated/arrow-narrow-up.d.ts +1 -0
- package/dist/icons/generated/arrow-narrow-up.js +10 -0
- package/dist/icons/generated/arrow-narrow-up.js.map +1 -0
- package/dist/icons/generated/arrow-right.d.ts +1 -0
- package/dist/icons/generated/arrow-right.js +10 -0
- package/dist/icons/generated/arrow-right.js.map +1 -0
- package/dist/icons/generated/bar-chart-01.d.ts +1 -0
- package/dist/icons/generated/bar-chart-01.js +10 -0
- package/dist/icons/generated/bar-chart-01.js.map +1 -0
- package/dist/icons/generated/bar-chart-02.d.ts +1 -0
- package/dist/icons/generated/bar-chart-02.js +10 -0
- package/dist/icons/generated/bar-chart-02.js.map +1 -0
- package/dist/icons/generated/bar-chart-03.d.ts +1 -0
- package/dist/icons/generated/bar-chart-03.js +10 -0
- package/dist/icons/generated/bar-chart-03.js.map +1 -0
- package/dist/icons/generated/bell-01.d.ts +1 -0
- package/dist/icons/generated/bell-01.js +10 -0
- package/dist/icons/generated/bell-01.js.map +1 -0
- package/dist/icons/generated/bell-02.d.ts +1 -0
- package/dist/icons/generated/bell-02.js +10 -0
- package/dist/icons/generated/bell-02.js.map +1 -0
- package/dist/icons/generated/bookmark.d.ts +1 -0
- package/dist/icons/generated/bookmark.js +10 -0
- package/dist/icons/generated/bookmark.js.map +1 -0
- package/dist/icons/generated/broken-heart.d.ts +1 -0
- package/dist/icons/generated/broken-heart.js +10 -0
- package/dist/icons/generated/broken-heart.js.map +1 -0
- package/dist/icons/generated/calendar-chat.d.ts +1 -0
- package/dist/icons/generated/calendar-chat.js +13 -0
- package/dist/icons/generated/calendar-chat.js.map +1 -0
- package/dist/icons/generated/calendar-check-01.d.ts +1 -0
- package/dist/icons/generated/calendar-check-01.js +10 -0
- package/dist/icons/generated/calendar-check-01.js.map +1 -0
- package/dist/icons/generated/calendar-check-02.d.ts +1 -0
- package/dist/icons/generated/calendar-check-02.js +10 -0
- package/dist/icons/generated/calendar-check-02.js.map +1 -0
- package/dist/icons/generated/calendar-heart-01.d.ts +1 -0
- package/dist/icons/generated/calendar-heart-01.js +10 -0
- package/dist/icons/generated/calendar-heart-01.js.map +1 -0
- package/dist/icons/generated/calendar-minus-01.d.ts +1 -0
- package/dist/icons/generated/calendar-minus-01.js +10 -0
- package/dist/icons/generated/calendar-minus-01.js.map +1 -0
- package/dist/icons/generated/calendar-minus-02.d.ts +1 -0
- package/dist/icons/generated/calendar-minus-02.js +10 -0
- package/dist/icons/generated/calendar-minus-02.js.map +1 -0
- package/dist/icons/generated/calendar-plus-01.d.ts +1 -0
- package/dist/icons/generated/calendar-plus-01.js +10 -0
- package/dist/icons/generated/calendar-plus-01.js.map +1 -0
- package/dist/icons/generated/calendar-plus-02.d.ts +1 -0
- package/dist/icons/generated/calendar-plus-02.js +10 -0
- package/dist/icons/generated/calendar-plus-02.js.map +1 -0
- package/dist/icons/generated/calendar.d.ts +1 -0
- package/dist/icons/generated/calendar.js +10 -0
- package/dist/icons/generated/calendar.js.map +1 -0
- package/dist/icons/generated/camera-01.d.ts +1 -0
- package/dist/icons/generated/camera-01.js +13 -0
- package/dist/icons/generated/camera-01.js.map +1 -0
- package/dist/icons/generated/camera-off.d.ts +1 -0
- package/dist/icons/generated/camera-off.js +10 -0
- package/dist/icons/generated/camera-off.js.map +1 -0
- package/dist/icons/generated/certificate-02.d.ts +1 -0
- package/dist/icons/generated/certificate-02.js +10 -0
- package/dist/icons/generated/certificate-02.js.map +1 -0
- package/dist/icons/generated/check-circle.d.ts +1 -0
- package/dist/icons/generated/check-circle.js +10 -0
- package/dist/icons/generated/check-circle.js.map +1 -0
- package/dist/icons/generated/check-heart.d.ts +1 -0
- package/dist/icons/generated/check-heart.js +10 -0
- package/dist/icons/generated/check-heart.js.map +1 -0
- package/dist/icons/generated/check-square.d.ts +1 -0
- package/dist/icons/generated/check-square.js +10 -0
- package/dist/icons/generated/check-square.js.map +1 -0
- package/dist/icons/generated/check-verified-02.d.ts +1 -0
- package/dist/icons/generated/check-verified-02.js +10 -0
- package/dist/icons/generated/check-verified-02.js.map +1 -0
- package/dist/icons/generated/check.d.ts +1 -0
- package/dist/icons/generated/check.js +7 -0
- package/dist/icons/generated/check.js.map +1 -0
- package/dist/icons/generated/chevron-down.d.ts +1 -0
- package/dist/icons/generated/chevron-down.js +10 -0
- package/dist/icons/generated/chevron-down.js.map +1 -0
- package/dist/icons/generated/chevron-left.d.ts +1 -0
- package/dist/icons/generated/chevron-left.js +10 -0
- package/dist/icons/generated/chevron-left.js.map +1 -0
- package/dist/icons/generated/chevron-right.d.ts +1 -0
- package/dist/icons/generated/chevron-right.js +10 -0
- package/dist/icons/generated/chevron-right.js.map +1 -0
- package/dist/icons/generated/chevron-up.d.ts +1 -0
- package/dist/icons/generated/chevron-up.js +10 -0
- package/dist/icons/generated/chevron-up.js.map +1 -0
- package/dist/icons/generated/clipboard-check.d.ts +1 -0
- package/dist/icons/generated/clipboard-check.js +10 -0
- package/dist/icons/generated/clipboard-check.js.map +1 -0
- package/dist/icons/generated/clock.d.ts +1 -0
- package/dist/icons/generated/clock.js +10 -0
- package/dist/icons/generated/clock.js.map +1 -0
- package/dist/icons/generated/copy-01.d.ts +1 -0
- package/dist/icons/generated/copy-01.js +10 -0
- package/dist/icons/generated/copy-01.js.map +1 -0
- package/dist/icons/generated/credit-card-01.d.ts +1 -0
- package/dist/icons/generated/credit-card-01.js +10 -0
- package/dist/icons/generated/credit-card-01.js.map +1 -0
- package/dist/icons/generated/credit-card-02.d.ts +1 -0
- package/dist/icons/generated/credit-card-02.js +10 -0
- package/dist/icons/generated/credit-card-02.js.map +1 -0
- package/dist/icons/generated/credit-card-check.d.ts +1 -0
- package/dist/icons/generated/credit-card-check.js +10 -0
- package/dist/icons/generated/credit-card-check.js.map +1 -0
- package/dist/icons/generated/currency-euro.d.ts +1 -0
- package/dist/icons/generated/currency-euro.js +10 -0
- package/dist/icons/generated/currency-euro.js.map +1 -0
- package/dist/icons/generated/dots-horizontal.d.ts +1 -0
- package/dist/icons/generated/dots-horizontal.js +14 -0
- package/dist/icons/generated/dots-horizontal.js.map +1 -0
- package/dist/icons/generated/dots-vertical.d.ts +1 -0
- package/dist/icons/generated/dots-vertical.js +14 -0
- package/dist/icons/generated/dots-vertical.js.map +1 -0
- package/dist/icons/generated/download-02.d.ts +1 -0
- package/dist/icons/generated/download-02.js +10 -0
- package/dist/icons/generated/download-02.js.map +1 -0
- package/dist/icons/generated/download-cloud-01.d.ts +1 -0
- package/dist/icons/generated/download-cloud-01.js +10 -0
- package/dist/icons/generated/download-cloud-01.js.map +1 -0
- package/dist/icons/generated/edit-01.d.ts +1 -0
- package/dist/icons/generated/edit-01.js +10 -0
- package/dist/icons/generated/edit-01.js.map +1 -0
- package/dist/icons/generated/edit-05.d.ts +1 -0
- package/dist/icons/generated/edit-05.js +10 -0
- package/dist/icons/generated/edit-05.js.map +1 -0
- package/dist/icons/generated/eye-off.d.ts +1 -0
- package/dist/icons/generated/eye-off.js +10 -0
- package/dist/icons/generated/eye-off.js.map +1 -0
- package/dist/icons/generated/eye.d.ts +1 -0
- package/dist/icons/generated/eye.js +13 -0
- package/dist/icons/generated/eye.js.map +1 -0
- package/dist/icons/generated/face-content.d.ts +1 -0
- package/dist/icons/generated/face-content.js +10 -0
- package/dist/icons/generated/face-content.js.map +1 -0
- package/dist/icons/generated/face-frown.d.ts +1 -0
- package/dist/icons/generated/face-frown.js +10 -0
- package/dist/icons/generated/face-frown.js.map +1 -0
- package/dist/icons/generated/face-happy.d.ts +1 -0
- package/dist/icons/generated/face-happy.js +10 -0
- package/dist/icons/generated/face-happy.js.map +1 -0
- package/dist/icons/generated/face-id.d.ts +1 -0
- package/dist/icons/generated/face-id.js +10 -0
- package/dist/icons/generated/face-id.js.map +1 -0
- package/dist/icons/generated/female.d.ts +1 -0
- package/dist/icons/generated/female.js +10 -0
- package/dist/icons/generated/female.js.map +1 -0
- package/dist/icons/generated/file-06.d.ts +1 -0
- package/dist/icons/generated/file-06.js +10 -0
- package/dist/icons/generated/file-06.js.map +1 -0
- package/dist/icons/generated/file-lock-02.d.ts +1 -0
- package/dist/icons/generated/file-lock-02.js +10 -0
- package/dist/icons/generated/file-lock-02.js.map +1 -0
- package/dist/icons/generated/filter-funnel-01.d.ts +1 -0
- package/dist/icons/generated/filter-funnel-01.js +10 -0
- package/dist/icons/generated/filter-funnel-01.js.map +1 -0
- package/dist/icons/generated/filter-lines.d.ts +1 -0
- package/dist/icons/generated/filter-lines.js +10 -0
- package/dist/icons/generated/filter-lines.js.map +1 -0
- package/dist/icons/generated/fingerprint-01.d.ts +1 -0
- package/dist/icons/generated/fingerprint-01.js +10 -0
- package/dist/icons/generated/fingerprint-01.js.map +1 -0
- package/dist/icons/generated/fingerprint-04.d.ts +1 -0
- package/dist/icons/generated/fingerprint-04.js +10 -0
- package/dist/icons/generated/fingerprint-04.js.map +1 -0
- package/dist/icons/generated/flag-01.d.ts +1 -0
- package/dist/icons/generated/flag-01.js +10 -0
- package/dist/icons/generated/flag-01.js.map +1 -0
- package/dist/icons/generated/flash-off.d.ts +1 -0
- package/dist/icons/generated/flash-off.js +10 -0
- package/dist/icons/generated/flash-off.js.map +1 -0
- package/dist/icons/generated/flash.d.ts +1 -0
- package/dist/icons/generated/flash.js +10 -0
- package/dist/icons/generated/flash.js.map +1 -0
- package/dist/icons/generated/flip-backward.d.ts +1 -0
- package/dist/icons/generated/flip-backward.js +10 -0
- package/dist/icons/generated/flip-backward.js.map +1 -0
- package/dist/icons/generated/globe-01.d.ts +1 -0
- package/dist/icons/generated/globe-01.js +10 -0
- package/dist/icons/generated/globe-01.js.map +1 -0
- package/dist/icons/generated/globe-04.d.ts +1 -0
- package/dist/icons/generated/globe-04.js +10 -0
- package/dist/icons/generated/globe-04.js.map +1 -0
- package/dist/icons/generated/heart.d.ts +1 -0
- package/dist/icons/generated/heart.js +17 -0
- package/dist/icons/generated/heart.js.map +1 -0
- package/dist/icons/generated/help-circle.d.ts +1 -0
- package/dist/icons/generated/help-circle.js +10 -0
- package/dist/icons/generated/help-circle.js.map +1 -0
- package/dist/icons/generated/help-square.d.ts +1 -0
- package/dist/icons/generated/help-square.js +10 -0
- package/dist/icons/generated/help-square.js.map +1 -0
- package/dist/icons/generated/home-02.d.ts +1 -0
- package/dist/icons/generated/home-02.js +10 -0
- package/dist/icons/generated/home-02.js.map +1 -0
- package/dist/icons/generated/hourglass-01.d.ts +1 -0
- package/dist/icons/generated/hourglass-01.js +10 -0
- package/dist/icons/generated/hourglass-01.js.map +1 -0
- package/dist/icons/generated/image-01.d.ts +1 -0
- package/dist/icons/generated/image-01.js +10 -0
- package/dist/icons/generated/image-01.js.map +1 -0
- package/dist/icons/generated/image-03.d.ts +1 -0
- package/dist/icons/generated/image-03.js +10 -0
- package/dist/icons/generated/image-03.js.map +1 -0
- package/dist/icons/generated/image-check.d.ts +1 -0
- package/dist/icons/generated/image-check.js +10 -0
- package/dist/icons/generated/image-check.js.map +1 -0
- package/dist/icons/generated/image-plus.d.ts +1 -0
- package/dist/icons/generated/image-plus.js +10 -0
- package/dist/icons/generated/image-plus.js.map +1 -0
- package/dist/icons/generated/inbox-01.d.ts +1 -0
- package/dist/icons/generated/inbox-01.js +10 -0
- package/dist/icons/generated/inbox-01.js.map +1 -0
- package/dist/icons/generated/info-circle.d.ts +1 -0
- package/dist/icons/generated/info-circle.js +10 -0
- package/dist/icons/generated/info-circle.js.map +1 -0
- package/dist/icons/generated/info-square.d.ts +1 -0
- package/dist/icons/generated/info-square.js +10 -0
- package/dist/icons/generated/info-square.js.map +1 -0
- package/dist/icons/generated/key-02.d.ts +1 -0
- package/dist/icons/generated/key-02.js +10 -0
- package/dist/icons/generated/key-02.js.map +1 -0
- package/dist/icons/generated/link-01.d.ts +1 -0
- package/dist/icons/generated/link-01.js +10 -0
- package/dist/icons/generated/link-01.js.map +1 -0
- package/dist/icons/generated/link-03.d.ts +1 -0
- package/dist/icons/generated/link-03.js +10 -0
- package/dist/icons/generated/link-03.js.map +1 -0
- package/dist/icons/generated/link-broken-01.d.ts +1 -0
- package/dist/icons/generated/link-broken-01.js +10 -0
- package/dist/icons/generated/link-broken-01.js.map +1 -0
- package/dist/icons/generated/link-external-01.d.ts +1 -0
- package/dist/icons/generated/link-external-01.js +10 -0
- package/dist/icons/generated/link-external-01.js.map +1 -0
- package/dist/icons/generated/loading-01.d.ts +1 -0
- package/dist/icons/generated/loading-01.js +10 -0
- package/dist/icons/generated/loading-01.js.map +1 -0
- package/dist/icons/generated/lock-01.d.ts +1 -0
- package/dist/icons/generated/lock-01.js +10 -0
- package/dist/icons/generated/lock-01.js.map +1 -0
- package/dist/icons/generated/lock-03.d.ts +1 -0
- package/dist/icons/generated/lock-03.js +10 -0
- package/dist/icons/generated/lock-03.js.map +1 -0
- package/dist/icons/generated/lock-unlocked-01.d.ts +1 -0
- package/dist/icons/generated/lock-unlocked-01.js +10 -0
- package/dist/icons/generated/lock-unlocked-01.js.map +1 -0
- package/dist/icons/generated/log-in-01.d.ts +1 -0
- package/dist/icons/generated/log-in-01.js +10 -0
- package/dist/icons/generated/log-in-01.js.map +1 -0
- package/dist/icons/generated/log-out-01.d.ts +1 -0
- package/dist/icons/generated/log-out-01.js +10 -0
- package/dist/icons/generated/log-out-01.js.map +1 -0
- package/dist/icons/generated/mail-01.d.ts +1 -0
- package/dist/icons/generated/mail-01.js +10 -0
- package/dist/icons/generated/mail-01.js.map +1 -0
- package/dist/icons/generated/mail-02.d.ts +1 -0
- package/dist/icons/generated/mail-02.js +10 -0
- package/dist/icons/generated/mail-02.js.map +1 -0
- package/dist/icons/generated/male.d.ts +1 -0
- package/dist/icons/generated/male.js +10 -0
- package/dist/icons/generated/male.js.map +1 -0
- package/dist/icons/generated/marker-pin-01.d.ts +1 -0
- package/dist/icons/generated/marker-pin-01.js +13 -0
- package/dist/icons/generated/marker-pin-01.js.map +1 -0
- package/dist/icons/generated/medical-circle.d.ts +1 -0
- package/dist/icons/generated/medical-circle.js +13 -0
- package/dist/icons/generated/medical-circle.js.map +1 -0
- package/dist/icons/generated/medical-cross.d.ts +1 -0
- package/dist/icons/generated/medical-cross.js +10 -0
- package/dist/icons/generated/medical-cross.js.map +1 -0
- package/dist/icons/generated/medical-square.d.ts +1 -0
- package/dist/icons/generated/medical-square.js +13 -0
- package/dist/icons/generated/medical-square.js.map +1 -0
- package/dist/icons/generated/menu-01.d.ts +1 -0
- package/dist/icons/generated/menu-01.js +10 -0
- package/dist/icons/generated/menu-01.js.map +1 -0
- package/dist/icons/generated/message-alert-square.d.ts +1 -0
- package/dist/icons/generated/message-alert-square.js +10 -0
- package/dist/icons/generated/message-alert-square.js.map +1 -0
- package/dist/icons/generated/message-check-square.d.ts +1 -0
- package/dist/icons/generated/message-check-square.js +10 -0
- package/dist/icons/generated/message-check-square.js.map +1 -0
- package/dist/icons/generated/message-notification-square.d.ts +1 -0
- package/dist/icons/generated/message-notification-square.js +10 -0
- package/dist/icons/generated/message-notification-square.js.map +1 -0
- package/dist/icons/generated/message-plus-square.d.ts +1 -0
- package/dist/icons/generated/message-plus-square.js +10 -0
- package/dist/icons/generated/message-plus-square.js.map +1 -0
- package/dist/icons/generated/message-question-square.d.ts +1 -0
- package/dist/icons/generated/message-question-square.js +10 -0
- package/dist/icons/generated/message-question-square.js.map +1 -0
- package/dist/icons/generated/message-smile-square.d.ts +1 -0
- package/dist/icons/generated/message-smile-square.js +10 -0
- package/dist/icons/generated/message-smile-square.js.map +1 -0
- package/dist/icons/generated/message-x-square.d.ts +1 -0
- package/dist/icons/generated/message-x-square.js +10 -0
- package/dist/icons/generated/message-x-square.js.map +1 -0
- package/dist/icons/generated/message.d.ts +1 -0
- package/dist/icons/generated/message.js +10 -0
- package/dist/icons/generated/message.js.map +1 -0
- package/dist/icons/generated/microphone-01.d.ts +1 -0
- package/dist/icons/generated/microphone-01.js +10 -0
- package/dist/icons/generated/microphone-01.js.map +1 -0
- package/dist/icons/generated/microphone-off-01.d.ts +1 -0
- package/dist/icons/generated/microphone-off-01.js +10 -0
- package/dist/icons/generated/microphone-off-01.js.map +1 -0
- package/dist/icons/generated/microscope.d.ts +1 -0
- package/dist/icons/generated/microscope.js +10 -0
- package/dist/icons/generated/microscope.js.map +1 -0
- package/dist/icons/generated/minus.d.ts +1 -0
- package/dist/icons/generated/minus.js +7 -0
- package/dist/icons/generated/minus.js.map +1 -0
- package/dist/icons/generated/paperclip.d.ts +1 -0
- package/dist/icons/generated/paperclip.js +10 -0
- package/dist/icons/generated/paperclip.js.map +1 -0
- package/dist/icons/generated/passport.d.ts +1 -0
- package/dist/icons/generated/passport.js +10 -0
- package/dist/icons/generated/passport.js.map +1 -0
- package/dist/icons/generated/pause-circle.d.ts +1 -0
- package/dist/icons/generated/pause-circle.js +10 -0
- package/dist/icons/generated/pause-circle.js.map +1 -0
- package/dist/icons/generated/phone-02.d.ts +1 -0
- package/dist/icons/generated/phone-02.js +10 -0
- package/dist/icons/generated/phone-02.js.map +1 -0
- package/dist/icons/generated/phone.d.ts +1 -0
- package/dist/icons/generated/phone.js +10 -0
- package/dist/icons/generated/phone.js.map +1 -0
- package/dist/icons/generated/pill.d.ts +1 -0
- package/dist/icons/generated/pill.js +10 -0
- package/dist/icons/generated/pill.js.map +1 -0
- package/dist/icons/generated/pin-01.d.ts +1 -0
- package/dist/icons/generated/pin-01.js +10 -0
- package/dist/icons/generated/pin-01.js.map +1 -0
- package/dist/icons/generated/pin-02.d.ts +1 -0
- package/dist/icons/generated/pin-02.js +10 -0
- package/dist/icons/generated/pin-02.js.map +1 -0
- package/dist/icons/generated/play.d.ts +1 -0
- package/dist/icons/generated/play.js +10 -0
- package/dist/icons/generated/play.js.map +1 -0
- package/dist/icons/generated/plus-circle.d.ts +1 -0
- package/dist/icons/generated/plus-circle.js +10 -0
- package/dist/icons/generated/plus-circle.js.map +1 -0
- package/dist/icons/generated/plus-square.d.ts +1 -0
- package/dist/icons/generated/plus-square.js +10 -0
- package/dist/icons/generated/plus-square.js.map +1 -0
- package/dist/icons/generated/plus.d.ts +1 -0
- package/dist/icons/generated/plus.js +7 -0
- package/dist/icons/generated/plus.js.map +1 -0
- package/dist/icons/generated/prescription.d.ts +1 -0
- package/dist/icons/generated/prescription.js +10 -0
- package/dist/icons/generated/prescription.js.map +1 -0
- package/dist/icons/generated/receipt-check.d.ts +1 -0
- package/dist/icons/generated/receipt-check.js +10 -0
- package/dist/icons/generated/receipt-check.js.map +1 -0
- package/dist/icons/generated/receipt.d.ts +1 -0
- package/dist/icons/generated/receipt.js +10 -0
- package/dist/icons/generated/receipt.js.map +1 -0
- package/dist/icons/generated/refresh-ccw-01.d.ts +1 -0
- package/dist/icons/generated/refresh-ccw-01.js +10 -0
- package/dist/icons/generated/refresh-ccw-01.js.map +1 -0
- package/dist/icons/generated/refresh-ccw-02.d.ts +1 -0
- package/dist/icons/generated/refresh-ccw-02.js +10 -0
- package/dist/icons/generated/refresh-ccw-02.js.map +1 -0
- package/dist/icons/generated/reverse-left.d.ts +1 -0
- package/dist/icons/generated/reverse-left.js +10 -0
- package/dist/icons/generated/reverse-left.js.map +1 -0
- package/dist/icons/generated/scan.d.ts +1 -0
- package/dist/icons/generated/scan.js +10 -0
- package/dist/icons/generated/scan.js.map +1 -0
- package/dist/icons/generated/search-lg.d.ts +1 -0
- package/dist/icons/generated/search-lg.js +10 -0
- package/dist/icons/generated/search-lg.js.map +1 -0
- package/dist/icons/generated/search-md.d.ts +1 -0
- package/dist/icons/generated/search-md.js +10 -0
- package/dist/icons/generated/search-md.js.map +1 -0
- package/dist/icons/generated/search-sm.d.ts +1 -0
- package/dist/icons/generated/search-sm.js +10 -0
- package/dist/icons/generated/search-sm.js.map +1 -0
- package/dist/icons/generated/send-01.d.ts +1 -0
- package/dist/icons/generated/send-01.js +10 -0
- package/dist/icons/generated/send-01.js.map +1 -0
- package/dist/icons/generated/settings-02.d.ts +1 -0
- package/dist/icons/generated/settings-02.js +13 -0
- package/dist/icons/generated/settings-02.js.map +1 -0
- package/dist/icons/generated/settings-04.d.ts +1 -0
- package/dist/icons/generated/settings-04.js +10 -0
- package/dist/icons/generated/settings-04.js.map +1 -0
- package/dist/icons/generated/share-01.d.ts +1 -0
- package/dist/icons/generated/share-01.js +10 -0
- package/dist/icons/generated/share-01.js.map +1 -0
- package/dist/icons/generated/share-03.d.ts +1 -0
- package/dist/icons/generated/share-03.js +10 -0
- package/dist/icons/generated/share-03.js.map +1 -0
- package/dist/icons/generated/share-06.d.ts +1 -0
- package/dist/icons/generated/share-06.js +10 -0
- package/dist/icons/generated/share-06.js.map +1 -0
- package/dist/icons/generated/share-07.d.ts +1 -0
- package/dist/icons/generated/share-07.js +10 -0
- package/dist/icons/generated/share-07.js.map +1 -0
- package/dist/icons/generated/shield-tick.d.ts +1 -0
- package/dist/icons/generated/shield-tick.js +10 -0
- package/dist/icons/generated/shield-tick.js.map +1 -0
- package/dist/icons/generated/slash-circle-01.d.ts +1 -0
- package/dist/icons/generated/slash-circle-01.js +10 -0
- package/dist/icons/generated/slash-circle-01.js.map +1 -0
- package/dist/icons/generated/star-01.d.ts +1 -0
- package/dist/icons/generated/star-01.js +10 -0
- package/dist/icons/generated/star-01.js.map +1 -0
- package/dist/icons/generated/star-04.d.ts +1 -0
- package/dist/icons/generated/star-04.js +10 -0
- package/dist/icons/generated/star-04.js.map +1 -0
- package/dist/icons/generated/star-06.d.ts +1 -0
- package/dist/icons/generated/star-06.js +10 -0
- package/dist/icons/generated/star-06.js.map +1 -0
- package/dist/icons/generated/stethoscope-doctor.d.ts +1 -0
- package/dist/icons/generated/stethoscope-doctor.js +14 -0
- package/dist/icons/generated/stethoscope-doctor.js.map +1 -0
- package/dist/icons/generated/tag-01.d.ts +1 -0
- package/dist/icons/generated/tag-01.js +10 -0
- package/dist/icons/generated/tag-01.js.map +1 -0
- package/dist/icons/generated/thumbs-down.d.ts +1 -0
- package/dist/icons/generated/thumbs-down.js +10 -0
- package/dist/icons/generated/thumbs-down.js.map +1 -0
- package/dist/icons/generated/thumbs-up.d.ts +1 -0
- package/dist/icons/generated/thumbs-up.js +10 -0
- package/dist/icons/generated/thumbs-up.js.map +1 -0
- package/dist/icons/generated/trash-01.d.ts +1 -0
- package/dist/icons/generated/trash-01.js +10 -0
- package/dist/icons/generated/trash-01.js.map +1 -0
- package/dist/icons/generated/trash-02.d.ts +1 -0
- package/dist/icons/generated/trash-02.js +10 -0
- package/dist/icons/generated/trash-02.js.map +1 -0
- package/dist/icons/generated/upload-01.d.ts +1 -0
- package/dist/icons/generated/upload-01.js +10 -0
- package/dist/icons/generated/upload-01.js.map +1 -0
- package/dist/icons/generated/user-01.d.ts +1 -0
- package/dist/icons/generated/user-01.js +10 -0
- package/dist/icons/generated/user-01.js.map +1 -0
- package/dist/icons/generated/user-03.d.ts +1 -0
- package/dist/icons/generated/user-03.js +10 -0
- package/dist/icons/generated/user-03.js.map +1 -0
- package/dist/icons/generated/user-check-01.d.ts +1 -0
- package/dist/icons/generated/user-check-01.js +10 -0
- package/dist/icons/generated/user-check-01.js.map +1 -0
- package/dist/icons/generated/user-check-02.d.ts +1 -0
- package/dist/icons/generated/user-check-02.js +10 -0
- package/dist/icons/generated/user-check-02.js.map +1 -0
- package/dist/icons/generated/user-edit.d.ts +1 -0
- package/dist/icons/generated/user-edit.js +10 -0
- package/dist/icons/generated/user-edit.js.map +1 -0
- package/dist/icons/generated/user-plus-01.d.ts +1 -0
- package/dist/icons/generated/user-plus-01.js +10 -0
- package/dist/icons/generated/user-plus-01.js.map +1 -0
- package/dist/icons/generated/user-square.d.ts +1 -0
- package/dist/icons/generated/user-square.js +10 -0
- package/dist/icons/generated/user-square.js.map +1 -0
- package/dist/icons/generated/users-02.d.ts +1 -0
- package/dist/icons/generated/users-02.js +10 -0
- package/dist/icons/generated/users-02.js.map +1 -0
- package/dist/icons/generated/video-recorder-off.d.ts +1 -0
- package/dist/icons/generated/video-recorder-off.js +10 -0
- package/dist/icons/generated/video-recorder-off.js.map +1 -0
- package/dist/icons/generated/video-recorder.d.ts +1 -0
- package/dist/icons/generated/video-recorder.js +13 -0
- package/dist/icons/generated/video-recorder.js.map +1 -0
- package/dist/icons/generated/virus.d.ts +1 -0
- package/dist/icons/generated/virus.js +10 -0
- package/dist/icons/generated/virus.js.map +1 -0
- package/dist/icons/generated/weight.d.ts +1 -0
- package/dist/icons/generated/weight.js +15 -0
- package/dist/icons/generated/weight.js.map +1 -0
- package/dist/icons/generated/x-close.d.ts +1 -0
- package/dist/icons/generated/x-close.js +10 -0
- package/dist/icons/generated/x-close.js.map +1 -0
- package/dist/icons/generated/x.d.ts +1 -0
- package/dist/icons/generated/x.js +7 -0
- package/dist/icons/generated/x.js.map +1 -0
- package/dist/icons/generated/zap.d.ts +1 -0
- package/dist/icons/generated/zap.js +10 -0
- package/dist/icons/generated/zap.js.map +1 -0
- package/dist/icons/index.d.ts +182 -0
- package/dist/icons/index.js +542 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.js +263 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cn.d.ts +2 -0
- package/dist/lib/cn.js +51 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/provider/index.d.ts +2 -0
- package/dist/provider/labels.d.ts +97 -0
- package/dist/provider/labels.js +99 -0
- package/dist/provider/labels.js.map +1 -0
- package/dist/provider/medicore-provider.d.ts +10 -0
- package/dist/provider/medicore-provider.js +19 -0
- package/dist/provider/medicore-provider.js.map +1 -0
- package/dist/styles/primitives.css +59 -0
- package/dist/styles/theme.css +15 -0
- package/dist/styles/tokens.css +253 -0
- package/dist/styles/typography.css +115 -0
- package/dist/styles/utilities.css +37 -0
- package/package.json +80 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ComponentProps, ReactNode } from "react";
|
|
2
|
+
import { type ChatDeliveryState } from "./chat-delivery-status";
|
|
3
|
+
/** `incoming`: the professional (left, `surface`) · `outgoing`: the patient (right, `brand-subtle`). */
|
|
4
|
+
export type ChatMessageDirection = "incoming" | "outgoing";
|
|
5
|
+
/** Delivery of an outgoing message. `failed` is the state the old chat didn't have. */
|
|
6
|
+
export type ChatMessageStatus = ChatDeliveryState | "failed";
|
|
7
|
+
/**
|
|
8
|
+
* The bubble shape shared by messages, attachments and the typing indicator: 12px
|
|
9
|
+
* radius with the corner on the speaker's side closed to 4 instead of a drawn tail,
|
|
10
|
+
* and a max width of 272 (a line longer than ~45 characters reads badly).
|
|
11
|
+
*/
|
|
12
|
+
export declare const chatBubbleVariants: (props?: ({
|
|
13
|
+
direction?: "incoming" | "outgoing" | null | undefined;
|
|
14
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
15
|
+
export interface ChatBubbleProps extends Omit<ComponentProps<"div">, "children"> {
|
|
16
|
+
/** Default `incoming`. */
|
|
17
|
+
direction?: ChatMessageDirection;
|
|
18
|
+
/** The message. 16px: in a medical chat people read dosage instructions. */
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
/** Visible time, "21:32". */
|
|
21
|
+
time: string;
|
|
22
|
+
/** Machine-readable moment for `<time>` (ISO 8601). */
|
|
23
|
+
dateTime?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Who wrote it, for screen readers ("Dra. Laura Martín"). Always pass it for
|
|
26
|
+
* incoming messages; outgoing ones default to "Tú".
|
|
27
|
+
*/
|
|
28
|
+
sender?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Outgoing only (an incoming message that fails never arrives). `failed` draws the
|
|
31
|
+
* red border and "No se ha enviado. Toca para reintentar." instead of the time.
|
|
32
|
+
*/
|
|
33
|
+
status?: ChatMessageStatus;
|
|
34
|
+
/** Overrides the screen-reader text of the delivery status ("Leído a las 21:34"). */
|
|
35
|
+
statusLabel?: string;
|
|
36
|
+
/** With `status="failed"`: the failure message becomes a button that retries. */
|
|
37
|
+
onRetry?: () => void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A chat message. Incoming on the left in `surface`, outgoing on the right in
|
|
41
|
+
* `brand-subtle`: the patient is always the purple one.
|
|
42
|
+
*
|
|
43
|
+
* - It shrinks with short messages and stops at 272px (`max-width`, not a width).
|
|
44
|
+
* - The outgoing time is `text-brand`, not grey: grey on `brand-subtle` is 4.45:1.
|
|
45
|
+
* - Screen readers hear who sent it and when before the text ("Dra. Laura Martín,
|
|
46
|
+
* a las 21:32: …"); the visible time is hidden from them so it isn't read twice.
|
|
47
|
+
* - Put the bubbles inside a `ChatMessageList` (`role="log"`).
|
|
48
|
+
*/
|
|
49
|
+
export declare function ChatBubble({ direction, children, time, dateTime, sender, status, statusLabel, onRetry, className, ...props }: ChatBubbleProps): React.JSX.Element;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cva } from "class-variance-authority";
|
|
3
|
+
import { AlertCircleIcon } from "../../icons/generated/alert-circle.js";
|
|
4
|
+
import { cn } from "../../lib/cn.js";
|
|
5
|
+
import { ChatDeliveryStatus } from "./chat-delivery-status.js";
|
|
6
|
+
import { useMediCoreLabels } from "../../provider/medicore-provider.js";
|
|
7
|
+
const chatBubbleVariants = cva(
|
|
8
|
+
"flex min-w-0 max-w-68 flex-col gap-1 rounded-xl",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
direction: {
|
|
12
|
+
incoming: "rounded-bl-sm bg-surface",
|
|
13
|
+
outgoing: "rounded-br-sm bg-brand-subtle"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
direction: "incoming"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
function ChatBubble({
|
|
22
|
+
direction = "incoming",
|
|
23
|
+
children,
|
|
24
|
+
time,
|
|
25
|
+
dateTime,
|
|
26
|
+
sender,
|
|
27
|
+
status,
|
|
28
|
+
statusLabel,
|
|
29
|
+
onRetry,
|
|
30
|
+
className,
|
|
31
|
+
...props
|
|
32
|
+
}) {
|
|
33
|
+
const labels = useMediCoreLabels();
|
|
34
|
+
const outgoing = direction === "outgoing";
|
|
35
|
+
const failed = outgoing && status === "failed";
|
|
36
|
+
const senderName = sender ?? (outgoing ? labels.chatYou : void 0);
|
|
37
|
+
const failure = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
38
|
+
/* @__PURE__ */ jsx(AlertCircleIcon, { size: "sm" }),
|
|
39
|
+
labels.chatFailed
|
|
40
|
+
] });
|
|
41
|
+
return /* @__PURE__ */ jsx(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
"data-slot": "chat-bubble",
|
|
45
|
+
"data-direction": direction,
|
|
46
|
+
"data-status": outgoing ? status : void 0,
|
|
47
|
+
className: cn(
|
|
48
|
+
"flex w-full",
|
|
49
|
+
outgoing ? "justify-end" : "justify-start",
|
|
50
|
+
className
|
|
51
|
+
),
|
|
52
|
+
...props,
|
|
53
|
+
children: /* @__PURE__ */ jsxs(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
className: cn(
|
|
57
|
+
chatBubbleVariants({ direction }),
|
|
58
|
+
"px-3 py-2",
|
|
59
|
+
failed && "border border-text-error"
|
|
60
|
+
),
|
|
61
|
+
children: [
|
|
62
|
+
/* @__PURE__ */ jsxs("div", { className: "whitespace-pre-line break-words text-body-default text-text-primary", children: [
|
|
63
|
+
senderName && /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
64
|
+
labels.chatMessageFrom(senderName, time),
|
|
65
|
+
" "
|
|
66
|
+
] }),
|
|
67
|
+
children
|
|
68
|
+
] }),
|
|
69
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center justify-end gap-1", children: failed ? onRetry ? /* @__PURE__ */ jsx(
|
|
70
|
+
"button",
|
|
71
|
+
{
|
|
72
|
+
type: "button",
|
|
73
|
+
onClick: onRetry,
|
|
74
|
+
className: "touch-target inline-flex cursor-pointer items-center gap-1 rounded-xs text-left text-caption-default text-text-error focus-ring",
|
|
75
|
+
children: failure
|
|
76
|
+
}
|
|
77
|
+
) : /* @__PURE__ */ jsx("p", { className: "flex items-center gap-1 text-caption-default text-text-error", children: failure }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
"time",
|
|
80
|
+
{
|
|
81
|
+
"aria-hidden": true,
|
|
82
|
+
dateTime,
|
|
83
|
+
className: cn(
|
|
84
|
+
"text-caption-default",
|
|
85
|
+
outgoing ? "text-text-brand" : "text-text-secondary"
|
|
86
|
+
),
|
|
87
|
+
children: time
|
|
88
|
+
}
|
|
89
|
+
),
|
|
90
|
+
outgoing && status && status !== "failed" && /* @__PURE__ */ jsx(ChatDeliveryStatus, { status, label: statusLabel })
|
|
91
|
+
] }) })
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
export {
|
|
99
|
+
ChatBubble,
|
|
100
|
+
chatBubbleVariants
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=chat-bubble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-bubble.js","sources":["../../../src/components/chat/chat-bubble.tsx"],"sourcesContent":["import { cva } from \"class-variance-authority\";\nimport type { ComponentProps, ReactNode } from \"react\";\n\nimport { AlertCircleIcon } from \"../../icons\";\nimport { cn } from \"../../lib/cn\";\nimport { useMediCoreLabels } from \"../../provider\";\nimport {\n type ChatDeliveryState,\n ChatDeliveryStatus,\n} from \"./chat-delivery-status\";\n\n/** `incoming`: the professional (left, `surface`) · `outgoing`: the patient (right, `brand-subtle`). */\nexport type ChatMessageDirection = \"incoming\" | \"outgoing\";\n\n/** Delivery of an outgoing message. `failed` is the state the old chat didn't have. */\nexport type ChatMessageStatus = ChatDeliveryState | \"failed\";\n\n/**\n * The bubble shape shared by messages, attachments and the typing indicator: 12px\n * radius with the corner on the speaker's side closed to 4 instead of a drawn tail,\n * and a max width of 272 (a line longer than ~45 characters reads badly).\n */\nexport const chatBubbleVariants = cva(\n \"flex min-w-0 max-w-68 flex-col gap-1 rounded-xl\",\n {\n variants: {\n direction: {\n incoming: \"rounded-bl-sm bg-surface\",\n outgoing: \"rounded-br-sm bg-brand-subtle\",\n },\n },\n defaultVariants: {\n direction: \"incoming\",\n },\n },\n);\n\nexport interface ChatBubbleProps\n extends Omit<ComponentProps<\"div\">, \"children\"> {\n /** Default `incoming`. */\n direction?: ChatMessageDirection;\n /** The message. 16px: in a medical chat people read dosage instructions. */\n children: ReactNode;\n /** Visible time, \"21:32\". */\n time: string;\n /** Machine-readable moment for `<time>` (ISO 8601). */\n dateTime?: string;\n /**\n * Who wrote it, for screen readers (\"Dra. Laura Martín\"). Always pass it for\n * incoming messages; outgoing ones default to \"Tú\".\n */\n sender?: string;\n /**\n * Outgoing only (an incoming message that fails never arrives). `failed` draws the\n * red border and \"No se ha enviado. Toca para reintentar.\" instead of the time.\n */\n status?: ChatMessageStatus;\n /** Overrides the screen-reader text of the delivery status (\"Leído a las 21:34\"). */\n statusLabel?: string;\n /** With `status=\"failed\"`: the failure message becomes a button that retries. */\n onRetry?: () => void;\n}\n\n/**\n * A chat message. Incoming on the left in `surface`, outgoing on the right in\n * `brand-subtle`: the patient is always the purple one.\n *\n * - It shrinks with short messages and stops at 272px (`max-width`, not a width).\n * - The outgoing time is `text-brand`, not grey: grey on `brand-subtle` is 4.45:1.\n * - Screen readers hear who sent it and when before the text (\"Dra. Laura Martín,\n * a las 21:32: …\"); the visible time is hidden from them so it isn't read twice.\n * - Put the bubbles inside a `ChatMessageList` (`role=\"log\"`).\n */\nexport function ChatBubble({\n direction = \"incoming\",\n children,\n time,\n dateTime,\n sender,\n status,\n statusLabel,\n onRetry,\n className,\n ...props\n}: ChatBubbleProps): React.JSX.Element {\n const labels = useMediCoreLabels();\n const outgoing = direction === \"outgoing\";\n const failed = outgoing && status === \"failed\";\n const senderName = sender ?? (outgoing ? labels.chatYou : undefined);\n\n const failure = (\n <>\n <AlertCircleIcon size=\"sm\" />\n {labels.chatFailed}\n </>\n );\n\n return (\n <div\n data-slot=\"chat-bubble\"\n data-direction={direction}\n data-status={outgoing ? status : undefined}\n className={cn(\n \"flex w-full\",\n outgoing ? \"justify-end\" : \"justify-start\",\n className,\n )}\n {...props}\n >\n <div\n className={cn(\n chatBubbleVariants({ direction }),\n \"px-3 py-2\",\n failed && \"border border-text-error\",\n )}\n >\n <div className=\"whitespace-pre-line break-words text-body-default text-text-primary\">\n {senderName && (\n <span className=\"sr-only\">\n {labels.chatMessageFrom(senderName, time)}{\" \"}\n </span>\n )}\n {children}\n </div>\n\n <div className=\"flex items-center justify-end gap-1\">\n {failed ? (\n onRetry ? (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"touch-target inline-flex cursor-pointer items-center gap-1 rounded-xs text-left text-caption-default text-text-error focus-ring\"\n >\n {failure}\n </button>\n ) : (\n <p className=\"flex items-center gap-1 text-caption-default text-text-error\">\n {failure}\n </p>\n )\n ) : (\n <>\n <time\n aria-hidden\n dateTime={dateTime}\n className={cn(\n \"text-caption-default\",\n outgoing ? \"text-text-brand\" : \"text-text-secondary\",\n )}\n >\n {time}\n </time>\n {outgoing && status && status !== \"failed\" && (\n <ChatDeliveryStatus status={status} label={statusLabel} />\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;AAsBO,MAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,WAAW;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,iBAAiB;AAAA,MACf,WAAW;AAAA,IAAA;AAAA,EACb;AAEJ;AAsCO,SAAS,WAAW;AAAA,EACzB,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAuC;AACrC,QAAM,SAAS,kBAAA;AACf,QAAM,WAAW,cAAc;AAC/B,QAAM,SAAS,YAAY,WAAW;AACtC,QAAM,aAAa,WAAW,WAAW,OAAO,UAAU;AAE1D,QAAM,UACJ,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,iBAAA,EAAgB,MAAK,KAAA,CAAK;AAAA,IAC1B,OAAO;AAAA,EAAA,GACV;AAGF,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,kBAAgB;AAAA,MAChB,eAAa,WAAW,SAAS;AAAA,MACjC,WAAW;AAAA,QACT;AAAA,QACA,WAAW,gBAAgB;AAAA,QAC3B;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT,mBAAmB,EAAE,WAAW;AAAA,YAChC;AAAA,YACA,UAAU;AAAA,UAAA;AAAA,UAGZ,UAAA;AAAA,YAAA,qBAAC,OAAA,EAAI,WAAU,uEACZ,UAAA;AAAA,cAAA,cACC,qBAAC,QAAA,EAAK,WAAU,WACb,UAAA;AAAA,gBAAA,OAAO,gBAAgB,YAAY,IAAI;AAAA,gBAAG;AAAA,cAAA,GAC7C;AAAA,cAED;AAAA,YAAA,GACH;AAAA,YAEA,oBAAC,OAAA,EAAI,WAAU,uCACZ,mBACC,UACE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,WAAU;AAAA,gBAET,UAAA;AAAA,cAAA;AAAA,YAAA,IAGH,oBAAC,KAAA,EAAE,WAAU,gEACV,UAAA,QAAA,CACH,IAGF,qBAAA,UAAA,EACE,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,eAAW;AAAA,kBACX;AAAA,kBACA,WAAW;AAAA,oBACT;AAAA,oBACA,WAAW,oBAAoB;AAAA,kBAAA;AAAA,kBAGhC,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF,YAAY,UAAU,WAAW,gCAC/B,oBAAA,EAAmB,QAAgB,OAAO,YAAA,CAAa;AAAA,YAAA,EAAA,CAE5D,EAAA,CAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type ComponentProps, type ReactNode } from "react";
|
|
2
|
+
export interface ChatComposerProps extends Omit<ComponentProps<"div">, "children" | "defaultValue"> {
|
|
3
|
+
/** Controlled text. */
|
|
4
|
+
value?: string;
|
|
5
|
+
/** Initial text when uncontrolled. */
|
|
6
|
+
defaultValue?: string;
|
|
7
|
+
onValueChange?: (value: string) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Called with the trimmed text on the send button or Enter (Shift+Enter adds a
|
|
10
|
+
* line). The field then empties (`onValueChange("")` when controlled).
|
|
11
|
+
*/
|
|
12
|
+
onSend: (message: string) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Shows the paperclip ("Adjuntar archivo"): open your file picker here — a photo of
|
|
15
|
+
* the lesion, a report, a previous prescription.
|
|
16
|
+
*/
|
|
17
|
+
onAttach?: () => void;
|
|
18
|
+
/** Defaults to "Escribe un mensaje". It is also the field's accessible name. */
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The consultation has ended and nobody would read the message: the field goes
|
|
22
|
+
* away and the composer says why, with a way out.
|
|
23
|
+
*/
|
|
24
|
+
closed?: boolean;
|
|
25
|
+
/** With `closed`. Defaults to "Esta consulta ha finalizado.". */
|
|
26
|
+
closedMessage?: ReactNode;
|
|
27
|
+
/** With `closed`: a `Link` ("Pedir otra consulta"). */
|
|
28
|
+
closedAction?: ReactNode;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Where the patient writes: attach · field · send.
|
|
32
|
+
*
|
|
33
|
+
* - Send is disabled while the field is empty and turns on as soon as there is
|
|
34
|
+
* text: an always-on send button that does nothing is a button that lies.
|
|
35
|
+
* - Attach is a paperclip, not a "+": it says exactly what it does.
|
|
36
|
+
* - The field grows with the text up to 5 lines and then scrolls; the buttons stay
|
|
37
|
+
* at the bottom, not centred.
|
|
38
|
+
* - Text at 16px: below 16 iOS zooms in when the field is focused.
|
|
39
|
+
*/
|
|
40
|
+
export declare function ChatComposer({ value, defaultValue, onValueChange, onSend, onAttach, placeholder, closed, closedMessage, closedAction, className, ...props }: ChatComposerProps): React.JSX.Element;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { PaperclipIcon } from "../../icons/generated/paperclip.js";
|
|
4
|
+
import { Send01Icon } from "../../icons/generated/send-01.js";
|
|
5
|
+
import { cn } from "../../lib/cn.js";
|
|
6
|
+
import { selfControlStates, controlPlaceholder } from "../input/control-styles.js";
|
|
7
|
+
import { useMediCoreLabels } from "../../provider/medicore-provider.js";
|
|
8
|
+
import { IconButton } from "../icon-button/icon-button.js";
|
|
9
|
+
function ChatComposer({
|
|
10
|
+
value,
|
|
11
|
+
defaultValue = "",
|
|
12
|
+
onValueChange,
|
|
13
|
+
onSend,
|
|
14
|
+
onAttach,
|
|
15
|
+
placeholder,
|
|
16
|
+
closed = false,
|
|
17
|
+
closedMessage,
|
|
18
|
+
closedAction,
|
|
19
|
+
className,
|
|
20
|
+
...props
|
|
21
|
+
}) {
|
|
22
|
+
const labels = useMediCoreLabels();
|
|
23
|
+
const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
|
|
24
|
+
const text = value ?? uncontrolledValue;
|
|
25
|
+
const canSend = text.trim().length > 0;
|
|
26
|
+
const setText = (next) => {
|
|
27
|
+
if (value === void 0) {
|
|
28
|
+
setUncontrolledValue(next);
|
|
29
|
+
}
|
|
30
|
+
onValueChange?.(next);
|
|
31
|
+
};
|
|
32
|
+
const send = () => {
|
|
33
|
+
if (!canSend) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
onSend(text.trim());
|
|
37
|
+
setText("");
|
|
38
|
+
};
|
|
39
|
+
const handleKeyDown = (event) => {
|
|
40
|
+
if (event.key === "Enter" && !event.shiftKey && !event.nativeEvent.isComposing) {
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
send();
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const fieldLabel = placeholder ?? labels.chatComposerPlaceholder;
|
|
46
|
+
return /* @__PURE__ */ jsx(
|
|
47
|
+
"div",
|
|
48
|
+
{
|
|
49
|
+
"data-slot": "chat-composer",
|
|
50
|
+
"data-closed": closed || void 0,
|
|
51
|
+
className: cn(
|
|
52
|
+
"border-border-subtle border-t bg-background p-3",
|
|
53
|
+
className
|
|
54
|
+
),
|
|
55
|
+
...props,
|
|
56
|
+
children: closed ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-1 text-center", children: [
|
|
57
|
+
/* @__PURE__ */ jsx("p", { className: "text-body-small text-text-secondary", children: closedMessage ?? labels.chatClosed }),
|
|
58
|
+
closedAction
|
|
59
|
+
] }) : /* @__PURE__ */ jsxs(
|
|
60
|
+
"form",
|
|
61
|
+
{
|
|
62
|
+
className: "flex items-end gap-2",
|
|
63
|
+
onSubmit: (event) => {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
send();
|
|
66
|
+
},
|
|
67
|
+
children: [
|
|
68
|
+
onAttach && /* @__PURE__ */ jsx(
|
|
69
|
+
IconButton,
|
|
70
|
+
{
|
|
71
|
+
variant: "ghost",
|
|
72
|
+
icon: /* @__PURE__ */ jsx(PaperclipIcon, {}),
|
|
73
|
+
"aria-label": labels.chatAttach,
|
|
74
|
+
onClick: onAttach
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
/* @__PURE__ */ jsx(
|
|
78
|
+
"textarea",
|
|
79
|
+
{
|
|
80
|
+
"data-slot": "chat-composer-field",
|
|
81
|
+
rows: 1,
|
|
82
|
+
value: text,
|
|
83
|
+
placeholder: fieldLabel,
|
|
84
|
+
"aria-label": fieldLabel,
|
|
85
|
+
onChange: (event) => setText(event.currentTarget.value),
|
|
86
|
+
onKeyDown: handleKeyDown,
|
|
87
|
+
className: cn(
|
|
88
|
+
"block max-h-36 min-h-control-md min-w-0 flex-1 resize-none overflow-y-auto field-sizing-content",
|
|
89
|
+
"rounded-3xl border border-border-input bg-surface px-4 py-2.5 text-body-default text-text-primary",
|
|
90
|
+
"ring-1 ring-transparent ring-inset transition-[border-color,box-shadow]",
|
|
91
|
+
controlPlaceholder,
|
|
92
|
+
selfControlStates
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
/* @__PURE__ */ jsx(
|
|
97
|
+
IconButton,
|
|
98
|
+
{
|
|
99
|
+
type: "submit",
|
|
100
|
+
icon: /* @__PURE__ */ jsx(Send01Icon, {}),
|
|
101
|
+
"aria-label": labels.chatSend,
|
|
102
|
+
disabled: !canSend
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
export {
|
|
112
|
+
ChatComposer
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=chat-composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-composer.js","sources":["../../../src/components/chat/chat-composer.tsx"],"sourcesContent":["import {\n type ComponentProps,\n type KeyboardEvent,\n type ReactNode,\n useState,\n} from \"react\";\n\nimport { PaperclipIcon, Send01Icon } from \"../../icons\";\nimport { cn } from \"../../lib/cn\";\nimport { useMediCoreLabels } from \"../../provider\";\nimport { IconButton } from \"../icon-button\";\nimport { controlPlaceholder, selfControlStates } from \"../input/control-styles\";\n\nexport interface ChatComposerProps\n extends Omit<ComponentProps<\"div\">, \"children\" | \"defaultValue\"> {\n /** Controlled text. */\n value?: string;\n /** Initial text when uncontrolled. */\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n /**\n * Called with the trimmed text on the send button or Enter (Shift+Enter adds a\n * line). The field then empties (`onValueChange(\"\")` when controlled).\n */\n onSend: (message: string) => void;\n /**\n * Shows the paperclip (\"Adjuntar archivo\"): open your file picker here — a photo of\n * the lesion, a report, a previous prescription.\n */\n onAttach?: () => void;\n /** Defaults to \"Escribe un mensaje\". It is also the field's accessible name. */\n placeholder?: string;\n /**\n * The consultation has ended and nobody would read the message: the field goes\n * away and the composer says why, with a way out.\n */\n closed?: boolean;\n /** With `closed`. Defaults to \"Esta consulta ha finalizado.\". */\n closedMessage?: ReactNode;\n /** With `closed`: a `Link` (\"Pedir otra consulta\"). */\n closedAction?: ReactNode;\n}\n\n/**\n * Where the patient writes: attach · field · send.\n *\n * - Send is disabled while the field is empty and turns on as soon as there is\n * text: an always-on send button that does nothing is a button that lies.\n * - Attach is a paperclip, not a \"+\": it says exactly what it does.\n * - The field grows with the text up to 5 lines and then scrolls; the buttons stay\n * at the bottom, not centred.\n * - Text at 16px: below 16 iOS zooms in when the field is focused.\n */\nexport function ChatComposer({\n value,\n defaultValue = \"\",\n onValueChange,\n onSend,\n onAttach,\n placeholder,\n closed = false,\n closedMessage,\n closedAction,\n className,\n ...props\n}: ChatComposerProps): React.JSX.Element {\n const labels = useMediCoreLabels();\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const text = value ?? uncontrolledValue;\n const canSend = text.trim().length > 0;\n\n const setText = (next: string): void => {\n if (value === undefined) {\n setUncontrolledValue(next);\n }\n onValueChange?.(next);\n };\n\n const send = (): void => {\n if (!canSend) {\n return;\n }\n onSend(text.trim());\n setText(\"\");\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>): void => {\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.nativeEvent.isComposing\n ) {\n event.preventDefault();\n send();\n }\n };\n\n const fieldLabel = placeholder ?? labels.chatComposerPlaceholder;\n\n return (\n <div\n data-slot=\"chat-composer\"\n data-closed={closed || undefined}\n className={cn(\n \"border-border-subtle border-t bg-background p-3\",\n className,\n )}\n {...props}\n >\n {closed ? (\n <div className=\"flex flex-col items-center gap-1 text-center\">\n <p className=\"text-body-small text-text-secondary\">\n {closedMessage ?? labels.chatClosed}\n </p>\n {closedAction}\n </div>\n ) : (\n <form\n className=\"flex items-end gap-2\"\n onSubmit={(event) => {\n event.preventDefault();\n send();\n }}\n >\n {onAttach && (\n <IconButton\n variant=\"ghost\"\n icon={<PaperclipIcon />}\n aria-label={labels.chatAttach}\n onClick={onAttach}\n />\n )}\n <textarea\n data-slot=\"chat-composer-field\"\n rows={1}\n value={text}\n placeholder={fieldLabel}\n aria-label={fieldLabel}\n onChange={(event) => setText(event.currentTarget.value)}\n onKeyDown={handleKeyDown}\n className={cn(\n \"block max-h-36 min-h-control-md min-w-0 flex-1 resize-none overflow-y-auto field-sizing-content\",\n \"rounded-3xl border border-border-input bg-surface px-4 py-2.5 text-body-default text-text-primary\",\n \"ring-1 ring-transparent ring-inset transition-[border-color,box-shadow]\",\n controlPlaceholder,\n selfControlStates,\n )}\n />\n <IconButton\n type=\"submit\"\n icon={<Send01Icon />}\n aria-label={labels.chatSend}\n disabled={!canSend}\n />\n </form>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAqDO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAyC;AACvC,QAAM,SAAS,kBAAA;AACf,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAS,YAAY;AACvE,QAAM,OAAO,SAAS;AACtB,QAAM,UAAU,KAAK,KAAA,EAAO,SAAS;AAErC,QAAM,UAAU,CAAC,SAAuB;AACtC,QAAI,UAAU,QAAW;AACvB,2BAAqB,IAAI;AAAA,IAC3B;AACA,oBAAgB,IAAI;AAAA,EACtB;AAEA,QAAM,OAAO,MAAY;AACvB,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,WAAO,KAAK,MAAM;AAClB,YAAQ,EAAE;AAAA,EACZ;AAEA,QAAM,gBAAgB,CAAC,UAAoD;AACzE,QACE,MAAM,QAAQ,WACd,CAAC,MAAM,YACP,CAAC,MAAM,YAAY,aACnB;AACA,YAAM,eAAA;AACN,WAAA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,eAAe,OAAO;AAEzC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,eAAa,UAAU;AAAA,MACvB,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH,UAAA,SACC,qBAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,QAAA,oBAAC,KAAA,EAAE,WAAU,uCACV,UAAA,iBAAiB,OAAO,YAC3B;AAAA,QACC;AAAA,MAAA,EAAA,CACH,IAEA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,UAAU,CAAC,UAAU;AACnB,kBAAM,eAAA;AACN,iBAAA;AAAA,UACF;AAAA,UAEC,UAAA;AAAA,YAAA,YACC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,0BAAO,eAAA,EAAc;AAAA,gBACrB,cAAY,OAAO;AAAA,gBACnB,SAAS;AAAA,cAAA;AAAA,YAAA;AAAA,YAGb;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,aAAU;AAAA,gBACV,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,aAAa;AAAA,gBACb,cAAY;AAAA,gBACZ,UAAU,CAAC,UAAU,QAAQ,MAAM,cAAc,KAAK;AAAA,gBACtD,WAAW;AAAA,gBACX,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,YAEF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,0BAAO,YAAA,EAAW;AAAA,gBAClB,cAAY,OAAO;AAAA,gBACnB,UAAU,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UACb;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
|
+
import type { ComponentProps, MouseEventHandler, ReactNode } from "react";
|
|
3
|
+
export type ChatConversationState = "read" | "unread" | "selected";
|
|
4
|
+
export interface ChatConversationRowProps extends Omit<ComponentProps<"li">, "onClick"> {
|
|
5
|
+
/** The other person: "Dra. Laura Martín". It names the link. */
|
|
6
|
+
name: ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* The last message, always: without it people have to open every chat to know if
|
|
9
|
+
* something is pending. One line.
|
|
10
|
+
*/
|
|
11
|
+
preview: ReactNode;
|
|
12
|
+
/** Time of the last message, "10:04" (or "Ayer", "lunes"). */
|
|
13
|
+
time: string;
|
|
14
|
+
/** Machine-readable moment for `<time>` (ISO 8601). */
|
|
15
|
+
dateTime?: string;
|
|
16
|
+
/** `<Avatar size={40} src alt="" />`: the name is already next to it. */
|
|
17
|
+
avatar?: ReactNode;
|
|
18
|
+
/**
|
|
19
|
+
* Unread messages. Above 0 the row is unread: the preview goes Medium in
|
|
20
|
+
* `text-primary`, the counter appears and the link's name says it ("Dra. Laura
|
|
21
|
+
* Martín, 2 mensajes sin leer").
|
|
22
|
+
*/
|
|
23
|
+
unreadCount?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Desktop, with the conversation open on the right: brand fill plus the 3px rail
|
|
26
|
+
* (`brand-subtle` on white alone is 1.14:1) and `aria-current="page"`.
|
|
27
|
+
*/
|
|
28
|
+
selected?: boolean;
|
|
29
|
+
/** The conversation's URL: the whole row is the link. */
|
|
30
|
+
href?: string;
|
|
31
|
+
/** Router links: `render={<Link to="…" />}`. */
|
|
32
|
+
render?: useRender.RenderProp;
|
|
33
|
+
onClick?: MouseEventHandler<HTMLElement>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A conversation in the chat list: avatar · name + time · last message + unread
|
|
37
|
+
* counter. It is an `<li>`: put the rows in a `<ul>`.
|
|
38
|
+
*
|
|
39
|
+
* Unread shows without colour (weight and the counter); the purple time only
|
|
40
|
+
* reinforces it. The time is `text-secondary`, never the brand's decorative hint.
|
|
41
|
+
*/
|
|
42
|
+
export declare function ChatConversationRow({ name, preview, time, dateTime, avatar, unreadCount, selected, href, render, onClick, className, ...props }: ChatConversationRowProps): React.JSX.Element;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
3
|
+
import { cn } from "../../lib/cn.js";
|
|
4
|
+
import { useMediCoreLabels } from "../../provider/medicore-provider.js";
|
|
5
|
+
import { Badge } from "../badge/badge.js";
|
|
6
|
+
function ChatConversationRow({
|
|
7
|
+
name,
|
|
8
|
+
preview,
|
|
9
|
+
time,
|
|
10
|
+
dateTime,
|
|
11
|
+
avatar,
|
|
12
|
+
unreadCount = 0,
|
|
13
|
+
selected = false,
|
|
14
|
+
href,
|
|
15
|
+
render,
|
|
16
|
+
onClick,
|
|
17
|
+
className,
|
|
18
|
+
...props
|
|
19
|
+
}) {
|
|
20
|
+
const labels = useMediCoreLabels();
|
|
21
|
+
const unread = unreadCount > 0;
|
|
22
|
+
const state = selected ? "selected" : unread ? "unread" : "read";
|
|
23
|
+
const isLink = Boolean(href || render);
|
|
24
|
+
const target = useRender({
|
|
25
|
+
render,
|
|
26
|
+
defaultTagName: isLink ? "a" : "button",
|
|
27
|
+
props: {
|
|
28
|
+
"data-slot": "chat-conversation-row-target",
|
|
29
|
+
href,
|
|
30
|
+
onClick,
|
|
31
|
+
type: isLink ? void 0 : "button",
|
|
32
|
+
"aria-current": selected ? "page" : void 0,
|
|
33
|
+
className: cn(
|
|
34
|
+
"block w-full cursor-pointer truncate text-left outline-none",
|
|
35
|
+
"after:absolute after:inset-0",
|
|
36
|
+
"focus-visible:after:outline-2 focus-visible:after:outline-border-focus focus-visible:after:-outline-offset-2"
|
|
37
|
+
),
|
|
38
|
+
children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
39
|
+
name,
|
|
40
|
+
unread && /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
41
|
+
", ",
|
|
42
|
+
labels.chatUnreadMessages(unreadCount)
|
|
43
|
+
] })
|
|
44
|
+
] })
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return /* @__PURE__ */ jsxs(
|
|
48
|
+
"li",
|
|
49
|
+
{
|
|
50
|
+
"data-slot": "chat-conversation-row",
|
|
51
|
+
"data-state": state,
|
|
52
|
+
className: cn(
|
|
53
|
+
"relative flex min-h-18 items-center gap-3 bg-background px-4 py-3 transition-colors",
|
|
54
|
+
selected ? "bg-brand-subtle" : "hover:bg-surface",
|
|
55
|
+
className
|
|
56
|
+
),
|
|
57
|
+
...props,
|
|
58
|
+
children: [
|
|
59
|
+
selected && /* @__PURE__ */ jsx(
|
|
60
|
+
"span",
|
|
61
|
+
{
|
|
62
|
+
"aria-hidden": true,
|
|
63
|
+
className: "absolute inset-y-0 left-0 w-0.75 bg-text-brand"
|
|
64
|
+
}
|
|
65
|
+
),
|
|
66
|
+
avatar,
|
|
67
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
68
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
69
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1 text-label-strong text-text-primary", children: target }),
|
|
70
|
+
/* @__PURE__ */ jsx(
|
|
71
|
+
"time",
|
|
72
|
+
{
|
|
73
|
+
dateTime,
|
|
74
|
+
className: cn(
|
|
75
|
+
"shrink-0 text-caption-default",
|
|
76
|
+
selected ? "text-text-primary" : unread ? "text-text-brand" : "text-text-secondary"
|
|
77
|
+
),
|
|
78
|
+
children: time
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
] }),
|
|
82
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
"p",
|
|
85
|
+
{
|
|
86
|
+
className: cn(
|
|
87
|
+
"min-w-0 flex-1 truncate",
|
|
88
|
+
unread ? "text-label-strong" : "text-body-small",
|
|
89
|
+
unread || selected ? "text-text-primary" : "text-text-secondary"
|
|
90
|
+
),
|
|
91
|
+
children: preview
|
|
92
|
+
}
|
|
93
|
+
),
|
|
94
|
+
unread && /* @__PURE__ */ jsx(Badge, { variant: "brand", "aria-hidden": true, children: unreadCount })
|
|
95
|
+
] })
|
|
96
|
+
] })
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
export {
|
|
102
|
+
ChatConversationRow
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=chat-conversation-row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-conversation-row.js","sources":["../../../src/components/chat/chat-conversation-row.tsx"],"sourcesContent":["import { useRender } from \"@base-ui/react/use-render\";\nimport type { ComponentProps, MouseEventHandler, ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { useMediCoreLabels } from \"../../provider\";\nimport { Badge } from \"../badge\";\n\nexport type ChatConversationState = \"read\" | \"unread\" | \"selected\";\n\nexport interface ChatConversationRowProps\n extends Omit<ComponentProps<\"li\">, \"onClick\"> {\n /** The other person: \"Dra. Laura Martín\". It names the link. */\n name: ReactNode;\n /**\n * The last message, always: without it people have to open every chat to know if\n * something is pending. One line.\n */\n preview: ReactNode;\n /** Time of the last message, \"10:04\" (or \"Ayer\", \"lunes\"). */\n time: string;\n /** Machine-readable moment for `<time>` (ISO 8601). */\n dateTime?: string;\n /** `<Avatar size={40} src alt=\"\" />`: the name is already next to it. */\n avatar?: ReactNode;\n /**\n * Unread messages. Above 0 the row is unread: the preview goes Medium in\n * `text-primary`, the counter appears and the link's name says it (\"Dra. Laura\n * Martín, 2 mensajes sin leer\").\n */\n unreadCount?: number;\n /**\n * Desktop, with the conversation open on the right: brand fill plus the 3px rail\n * (`brand-subtle` on white alone is 1.14:1) and `aria-current=\"page\"`.\n */\n selected?: boolean;\n /** The conversation's URL: the whole row is the link. */\n href?: string;\n /** Router links: `render={<Link to=\"…\" />}`. */\n render?: useRender.RenderProp;\n onClick?: MouseEventHandler<HTMLElement>;\n}\n\n/**\n * A conversation in the chat list: avatar · name + time · last message + unread\n * counter. It is an `<li>`: put the rows in a `<ul>`.\n *\n * Unread shows without colour (weight and the counter); the purple time only\n * reinforces it. The time is `text-secondary`, never the brand's decorative hint.\n */\nexport function ChatConversationRow({\n name,\n preview,\n time,\n dateTime,\n avatar,\n unreadCount = 0,\n selected = false,\n href,\n render,\n onClick,\n className,\n ...props\n}: ChatConversationRowProps): React.JSX.Element {\n const labels = useMediCoreLabels();\n const unread = unreadCount > 0;\n const state: ChatConversationState = selected\n ? \"selected\"\n : unread\n ? \"unread\"\n : \"read\";\n const isLink = Boolean(href || render);\n\n const target = useRender({\n render,\n defaultTagName: isLink ? \"a\" : \"button\",\n props: {\n \"data-slot\": \"chat-conversation-row-target\",\n href,\n onClick,\n type: isLink ? undefined : \"button\",\n \"aria-current\": selected ? \"page\" : undefined,\n className: cn(\n \"block w-full cursor-pointer truncate text-left outline-none\",\n \"after:absolute after:inset-0\",\n \"focus-visible:after:outline-2 focus-visible:after:outline-border-focus focus-visible:after:-outline-offset-2\",\n ),\n children: (\n <>\n {name}\n {unread && (\n <span className=\"sr-only\">\n , {labels.chatUnreadMessages(unreadCount)}\n </span>\n )}\n </>\n ),\n },\n });\n\n return (\n <li\n data-slot=\"chat-conversation-row\"\n data-state={state}\n className={cn(\n \"relative flex min-h-18 items-center gap-3 bg-background px-4 py-3 transition-colors\",\n selected ? \"bg-brand-subtle\" : \"hover:bg-surface\",\n className,\n )}\n {...props}\n >\n {selected && (\n <span\n aria-hidden\n className=\"absolute inset-y-0 left-0 w-0.75 bg-text-brand\"\n />\n )}\n {avatar}\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0 flex-1 text-label-strong text-text-primary\">\n {target}\n </div>\n <time\n dateTime={dateTime}\n className={cn(\n \"shrink-0 text-caption-default\",\n selected\n ? \"text-text-primary\"\n : unread\n ? \"text-text-brand\"\n : \"text-text-secondary\",\n )}\n >\n {time}\n </time>\n </div>\n <div className=\"flex items-center gap-2\">\n <p\n className={cn(\n \"min-w-0 flex-1 truncate\",\n unread ? \"text-label-strong\" : \"text-body-small\",\n unread || selected ? \"text-text-primary\" : \"text-text-secondary\",\n )}\n >\n {preview}\n </p>\n {unread && (\n <Badge variant=\"brand\" aria-hidden>\n {unreadCount}\n </Badge>\n )}\n </div>\n </div>\n </li>\n );\n}\n"],"names":[],"mappings":";;;;;AAiDO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAgD;AAC9C,QAAM,SAAS,kBAAA;AACf,QAAM,SAAS,cAAc;AAC7B,QAAM,QAA+B,WACjC,aACA,SACE,WACA;AACN,QAAM,SAAS,QAAQ,QAAQ,MAAM;AAErC,QAAM,SAAS,UAAU;AAAA,IACvB;AAAA,IACA,gBAAgB,SAAS,MAAM;AAAA,IAC/B,OAAO;AAAA,MACL,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,MAAM,SAAS,SAAY;AAAA,MAC3B,gBAAgB,WAAW,SAAS;AAAA,MACpC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,UACE,qBAAA,UAAA,EACG,UAAA;AAAA,QAAA;AAAA,QACA,UACC,qBAAC,QAAA,EAAK,WAAU,WAAU,UAAA;AAAA,UAAA;AAAA,UACrB,OAAO,mBAAmB,WAAW;AAAA,QAAA,EAAA,CAC1C;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EAEJ,CACD;AAED,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA,WAAW,oBAAoB;AAAA,QAC/B;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAGb;AAAA,QACD,qBAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,UAAA,qBAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,YAAA,oBAAC,OAAA,EAAI,WAAU,sDACZ,UAAA,QACH;AAAA,YACA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA,WAAW;AAAA,kBACT;AAAA,kBACA,WACI,sBACA,SACE,oBACA;AAAA,gBAAA;AAAA,gBAGP,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,GACF;AAAA,UACA,qBAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,SAAS,sBAAsB;AAAA,kBAC/B,UAAU,WAAW,sBAAsB;AAAA,gBAAA;AAAA,gBAG5C,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEF,UACC,oBAAC,OAAA,EAAM,SAAQ,SAAQ,eAAW,MAC/B,UAAA,YAAA,CACH;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ComponentProps, ReactNode } from "react";
|
|
2
|
+
export interface ChatDateSeparatorProps extends Omit<ComponentProps<"div">, "children"> {
|
|
3
|
+
/**
|
|
4
|
+
* "Hoy", "Ayer", or the full day from the day before yesterday on ("lunes, 28 de
|
|
5
|
+
* septiembre"). Never only the numeric date: "28/09" makes people count.
|
|
6
|
+
*/
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
/** Machine-readable day for `<time>` (`2026-09-28`). */
|
|
9
|
+
dateTime?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Date pill between messages: `text-secondary` on `surface-raised` (4.60:1).
|
|
13
|
+
* It goes inside the `ChatMessageList`, before the first message of each day.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ChatDateSeparator({ children, dateTime, className, ...props }: ChatDateSeparatorProps): React.JSX.Element;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/cn.js";
|
|
3
|
+
function ChatDateSeparator({
|
|
4
|
+
children,
|
|
5
|
+
dateTime,
|
|
6
|
+
className,
|
|
7
|
+
...props
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
"div",
|
|
11
|
+
{
|
|
12
|
+
"data-slot": "chat-date-separator",
|
|
13
|
+
className: cn("flex justify-center py-2", className),
|
|
14
|
+
...props,
|
|
15
|
+
children: /* @__PURE__ */ jsx(
|
|
16
|
+
"time",
|
|
17
|
+
{
|
|
18
|
+
dateTime,
|
|
19
|
+
className: "rounded-full bg-surface-raised px-3 py-1 text-caption-default text-text-secondary",
|
|
20
|
+
children
|
|
21
|
+
}
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
ChatDateSeparator
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=chat-date-separator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-date-separator.js","sources":["../../../src/components/chat/chat-date-separator.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\n\nexport interface ChatDateSeparatorProps\n extends Omit<ComponentProps<\"div\">, \"children\"> {\n /**\n * \"Hoy\", \"Ayer\", or the full day from the day before yesterday on (\"lunes, 28 de\n * septiembre\"). Never only the numeric date: \"28/09\" makes people count.\n */\n children: ReactNode;\n /** Machine-readable day for `<time>` (`2026-09-28`). */\n dateTime?: string;\n}\n\n/**\n * Date pill between messages: `text-secondary` on `surface-raised` (4.60:1).\n * It goes inside the `ChatMessageList`, before the first message of each day.\n */\nexport function ChatDateSeparator({\n children,\n dateTime,\n className,\n ...props\n}: ChatDateSeparatorProps): React.JSX.Element {\n return (\n <div\n data-slot=\"chat-date-separator\"\n className={cn(\"flex justify-center py-2\", className)}\n {...props}\n >\n <time\n dateTime={dateTime}\n className=\"rounded-full bg-surface-raised px-3 py-1 text-caption-default text-text-secondary\"\n >\n {children}\n </time>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAmBO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA8C;AAC5C,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,4BAA4B,SAAS;AAAA,MAClD,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,WAAU;AAAA,UAET;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ComponentProps } from "react";
|
|
2
|
+
/** `sending`: clock · `sent`: one check · `read`: two checks. */
|
|
3
|
+
export type ChatDeliveryState = "sending" | "sent" | "read";
|
|
4
|
+
export interface ChatDeliveryStatusProps extends Omit<ComponentProps<"span">, "children"> {
|
|
5
|
+
status: ChatDeliveryState;
|
|
6
|
+
/**
|
|
7
|
+
* What a screen reader hears. Defaults to "Enviando" / "Enviado" / "Leído"; pass
|
|
8
|
+
* the full sentence when you know when it was read ("Leído a las 21:34").
|
|
9
|
+
*/
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Delivery status of a message the patient sent. Sent and read differ by SHAPE
|
|
14
|
+
* (one or two checks), not by colour: both are `text-brand`, 8.49:1 on the
|
|
15
|
+
* outgoing bubble.
|
|
16
|
+
*
|
|
17
|
+
* In health "read" matters more than in a messaging app: it tells the person the
|
|
18
|
+
* professional has seen what they wrote. The state is also in text for screen
|
|
19
|
+
* readers, never only in the icon.
|
|
20
|
+
*/
|
|
21
|
+
export declare function ChatDeliveryStatus({ status, label, className, ...props }: ChatDeliveryStatusProps): React.JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { CheckIcon } from "../../icons/generated/check.js";
|
|
3
|
+
import { ClockIcon } from "../../icons/generated/clock.js";
|
|
4
|
+
import { cn } from "../../lib/cn.js";
|
|
5
|
+
import { useMediCoreLabels } from "../../provider/medicore-provider.js";
|
|
6
|
+
function ChatDeliveryStatus({
|
|
7
|
+
status,
|
|
8
|
+
label,
|
|
9
|
+
className,
|
|
10
|
+
...props
|
|
11
|
+
}) {
|
|
12
|
+
const labels = useMediCoreLabels();
|
|
13
|
+
const text = label ?? {
|
|
14
|
+
sending: labels.chatSending,
|
|
15
|
+
sent: labels.chatSent,
|
|
16
|
+
read: labels.chatRead
|
|
17
|
+
}[status];
|
|
18
|
+
return /* @__PURE__ */ jsxs(
|
|
19
|
+
"span",
|
|
20
|
+
{
|
|
21
|
+
"data-slot": "chat-delivery-status",
|
|
22
|
+
"data-status": status,
|
|
23
|
+
className: cn(
|
|
24
|
+
"relative inline-flex h-4 w-5 shrink-0 items-center justify-center text-text-brand",
|
|
25
|
+
className
|
|
26
|
+
),
|
|
27
|
+
...props,
|
|
28
|
+
children: [
|
|
29
|
+
status === "sending" && /* @__PURE__ */ jsx(ClockIcon, { size: "sm" }),
|
|
30
|
+
status === "sent" && /* @__PURE__ */ jsx(CheckIcon, { size: "sm" }),
|
|
31
|
+
status === "read" && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
32
|
+
/* @__PURE__ */ jsx(CheckIcon, { size: "sm", className: "absolute top-0 -left-px" }),
|
|
33
|
+
/* @__PURE__ */ jsx(CheckIcon, { size: "sm", className: "absolute top-0 left-1.25" })
|
|
34
|
+
] }),
|
|
35
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: text })
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
ChatDeliveryStatus
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=chat-delivery-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-delivery-status.js","sources":["../../../src/components/chat/chat-delivery-status.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { CheckIcon, ClockIcon } from \"../../icons\";\nimport { cn } from \"../../lib/cn\";\nimport { useMediCoreLabels } from \"../../provider\";\n\n/** `sending`: clock · `sent`: one check · `read`: two checks. */\nexport type ChatDeliveryState = \"sending\" | \"sent\" | \"read\";\n\nexport interface ChatDeliveryStatusProps\n extends Omit<ComponentProps<\"span\">, \"children\"> {\n status: ChatDeliveryState;\n /**\n * What a screen reader hears. Defaults to \"Enviando\" / \"Enviado\" / \"Leído\"; pass\n * the full sentence when you know when it was read (\"Leído a las 21:34\").\n */\n label?: string;\n}\n\n/**\n * Delivery status of a message the patient sent. Sent and read differ by SHAPE\n * (one or two checks), not by colour: both are `text-brand`, 8.49:1 on the\n * outgoing bubble.\n *\n * In health \"read\" matters more than in a messaging app: it tells the person the\n * professional has seen what they wrote. The state is also in text for screen\n * readers, never only in the icon.\n */\nexport function ChatDeliveryStatus({\n status,\n label,\n className,\n ...props\n}: ChatDeliveryStatusProps): React.JSX.Element {\n const labels = useMediCoreLabels();\n const text =\n label ??\n {\n sending: labels.chatSending,\n sent: labels.chatSent,\n read: labels.chatRead,\n }[status];\n\n return (\n <span\n data-slot=\"chat-delivery-status\"\n data-status={status}\n className={cn(\n \"relative inline-flex h-4 w-5 shrink-0 items-center justify-center text-text-brand\",\n className,\n )}\n {...props}\n >\n {status === \"sending\" && <ClockIcon size=\"sm\" />}\n {status === \"sent\" && <CheckIcon size=\"sm\" />}\n {status === \"read\" && (\n <>\n <CheckIcon size=\"sm\" className=\"absolute top-0 -left-px\" />\n <CheckIcon size=\"sm\" className=\"absolute top-0 left-1.25\" />\n </>\n )}\n <span className=\"sr-only\">{text}</span>\n </span>\n );\n}\n"],"names":[],"mappings":";;;;;AA4BO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA+C;AAC7C,QAAM,SAAS,kBAAA;AACf,QAAM,OACJ,SACA;AAAA,IACE,SAAS,OAAO;AAAA,IAChB,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,EAAA,EACb,MAAM;AAEV,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA,WAAW,aAAa,oBAAC,WAAA,EAAU,MAAK,MAAK;AAAA,QAC7C,WAAW,UAAU,oBAAC,WAAA,EAAU,MAAK,MAAK;AAAA,QAC1C,WAAW,UACV,qBAAA,UAAA,EACE,UAAA;AAAA,UAAA,oBAAC,WAAA,EAAU,MAAK,MAAK,WAAU,2BAA0B;AAAA,UACzD,oBAAC,WAAA,EAAU,MAAK,MAAK,WAAU,2BAAA,CAA2B;AAAA,QAAA,GAC5D;AAAA,QAEF,oBAAC,QAAA,EAAK,WAAU,WAAW,UAAA,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGtC;"}
|