@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 @@
|
|
|
1
|
+
{"version":3,"file":"toast.js","sources":["../../../src/components/toast/toast.tsx"],"sourcesContent":["import {\n Toast as BaseToast,\n type ToastObject,\n type UseToastManagerReturnValue,\n} from \"@base-ui/react/toast\";\nimport { cva } from \"class-variance-authority\";\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\n\nimport { AlertCircleIcon, CheckCircleIcon, InfoCircleIcon } from \"../../icons\";\nimport { cn } from \"../../lib/cn\";\nimport { useMediCoreLabels } from \"../../provider\";\nimport { Button } from \"../button\";\n\n/**\n * There is no `warning` on purpose: a warning that matters can't vanish on its own,\n * and one that can vanish wasn't a warning. Use a persistent `Banner`.\n */\nexport type ToastStatus = \"neutral\" | \"success\" | \"error\";\n\nexport interface ToastActionOptions {\n /** Defaults to the MediCore `undo` label (\"Deshacer\"). */\n label?: string;\n /** Runs on click; the toast closes right after. */\n onClick: () => void;\n}\n\nexport interface ToastOptions {\n /**\n * What happened, concrete: \"Cita guardada\", \"No se pudo guardar la cita\". Never\n * \"Operación completada con éxito\" or \"Ha ocurrido un error\".\n */\n message: ReactNode;\n /** `neutral` (default) for system state, `success` in past tense, `error` for what failed. */\n status?: ToastStatus;\n /** Undo for success, retry for errors. Leave it out when there is nothing to do. */\n action?: ToastActionOptions;\n /** The icon follows the status; pass `false` to hide it. */\n icon?: boolean;\n /** Milliseconds before it closes on its own (the provider's default otherwise). `0` keeps it open. */\n timeout?: number;\n /** Passing the id of a visible toast updates it in place. */\n id?: string;\n onClose?: () => void;\n}\n\nexport interface UseToastReturnValue {\n /** Shows a toast and returns its id. */\n toast: (options: ToastOptions) => string;\n /** Closes a toast by id, or all of them. */\n close: (id?: string) => void;\n}\n\ninterface ToastData {\n icon: boolean;\n}\n\ntype ToastApi = Pick<UseToastManagerReturnValue<ToastData>, \"add\" | \"close\">;\n\nconst ToastApiContext = createContext<ToastApi | null>(null);\n\n/**\n * Shows transient notices. Needs a `ToastProvider` above.\n *\n * ```tsx\n * const { toast } = useToast();\n * toast({ message: \"Cita guardada\", status: \"success\", action: { onClick: undo } });\n * ```\n */\nexport function useToast(): UseToastReturnValue {\n const manager = useContext(ToastApiContext);\n const labels = useMediCoreLabels();\n\n if (manager === null) {\n throw new Error(\n \"MediCore: useToast() must be used inside <ToastProvider>.\",\n );\n }\n\n const toast = useCallback(\n ({\n message,\n status = \"neutral\",\n action,\n icon = true,\n ...options\n }: ToastOptions): string => {\n let id = \"\";\n id = manager.add({\n ...options,\n title: message,\n type: status,\n // High priority is announced assertively, so only errors use it.\n priority: status === \"error\" ? \"high\" : \"low\",\n data: { icon },\n actionProps: action && {\n children: action.label ?? labels.undo,\n onClick: () => {\n action.onClick();\n manager.close(id);\n },\n },\n });\n return id;\n },\n [manager, labels.undo],\n );\n\n return useMemo(() => ({ toast, close: manager.close }), [toast, manager]);\n}\n\nexport interface ToastProviderProps {\n children?: ReactNode;\n /** Default time on screen in milliseconds. Hovering or focusing the toasts pauses it. */\n timeout?: number;\n /** Toasts visible at once; older ones are hidden until there is room. */\n limit?: number;\n /** Accessible name of the notifications region. */\n label?: string;\n}\n\n/**\n * Wrap the app once. Renders the toast region: at the bottom on mobile (full width\n * minus 16px per side) and top right on desktop (360px), at most three at a time.\n * The timer pauses on hover and keyboard focus, and F6 jumps into the region.\n */\nexport function ToastProvider({\n children,\n timeout,\n limit = 3,\n label = \"Notificaciones\",\n}: ToastProviderProps): React.JSX.Element {\n return (\n <BaseToast.Provider timeout={timeout} limit={limit}>\n <ToastApiBridge>{children}</ToastApiBridge>\n <Toaster label={label} />\n </BaseToast.Provider>\n );\n}\n\n/**\n * Hands `add`/`close` to `useToast()` without the toast list, so components that only\n * show toasts don't re-render every time one appears or goes away. They talk to the\n * provider's store directly, so a toast added from a mount effect isn't lost.\n */\nfunction ToastApiBridge({\n children,\n}: {\n children?: ReactNode;\n}): React.JSX.Element {\n const { add, close } = BaseToast.useToastManager<ToastData>();\n const api = useMemo(() => ({ add, close }), [add, close]);\n\n return (\n <ToastApiContext.Provider value={api}>{children}</ToastApiContext.Provider>\n );\n}\n\nfunction Toaster({ label }: { label: string }): React.JSX.Element {\n const { toasts } = BaseToast.useToastManager<ToastData>();\n\n return (\n <BaseToast.Portal>\n <BaseToast.Viewport\n data-slot=\"toast-viewport\"\n aria-label={label}\n className={cn(\n \"fixed inset-x-4 bottom-4 z-60 flex flex-col-reverse gap-2 outline-hidden\",\n \"md:inset-x-auto md:top-8 md:right-8 md:bottom-auto md:w-90 md:flex-col\",\n )}\n >\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} />\n ))}\n </BaseToast.Viewport>\n </BaseToast.Portal>\n );\n}\n\nconst toastVariants = cva(\n [\n \"flex items-center gap-3 rounded-lg px-4 py-3 text-text-inverse shadow-lg select-none\",\n \"[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--toast-swipe-movement-y))]\",\n \"transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none\",\n \"data-starting-style:opacity-0 data-starting-style:[transform:translateY(100%)] md:data-starting-style:[transform:translateY(-100%)]\",\n \"data-ending-style:opacity-0\",\n \"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\n \"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\n \"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))]\",\n \"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))]\",\n \"data-limited:hidden focus-ring\",\n ],\n {\n variants: {\n status: {\n neutral: \"bg-surface-inverse\",\n // success-STRONG, not the status green: white on #34C759 is 2.22:1.\n success: \"bg-success-strong\",\n error: \"bg-error-strong\",\n },\n },\n defaultVariants: {\n status: \"neutral\",\n },\n },\n);\n\nconst statusIcons = {\n neutral: InfoCircleIcon,\n success: CheckCircleIcon,\n error: AlertCircleIcon,\n} as const;\n\nfunction isToastStatus(value: string | undefined): value is ToastStatus {\n return value === \"neutral\" || value === \"success\" || value === \"error\";\n}\n\nfunction ToastItem({\n toast,\n}: {\n toast: ToastObject<ToastData>;\n}): React.JSX.Element {\n const status = isToastStatus(toast.type) ? toast.type : \"neutral\";\n const Icon = statusIcons[status];\n\n return (\n <BaseToast.Root\n toast={toast}\n data-slot=\"toast\"\n className={toastVariants({ status })}\n >\n {toast.data?.icon !== false && <Icon size=\"md\" className=\"shrink-0\" />}\n <BaseToast.Title\n render={<p />}\n className=\"min-w-0 flex-1 text-body-small\"\n />\n {/* The 36px button overflows the 12px padding so the toast stays 48px tall. */}\n <BaseToast.Action\n render={\n <Button\n variant=\"inverse-ghost\"\n size=\"small\"\n className=\"-my-1.5 underline underline-offset-2\"\n />\n }\n />\n </BaseToast.Root>\n );\n}\n"],"names":["BaseToast"],"mappings":";;;;;;;;;;AAgEA,MAAM,kBAAkB,cAA+B,IAAI;AAUpD,SAAS,WAAgC;AAC9C,QAAM,UAAU,WAAW,eAAe;AAC1C,QAAM,SAAS,kBAAA;AAEf,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,QAAQ;AAAA,IACZ,CAAC;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA,OAAO;AAAA,MACP,GAAG;AAAA,IAAA,MACuB;AAC1B,UAAI,KAAK;AACT,WAAK,QAAQ,IAAI;AAAA,QACf,GAAG;AAAA,QACH,OAAO;AAAA,QACP,MAAM;AAAA;AAAA,QAEN,UAAU,WAAW,UAAU,SAAS;AAAA,QACxC,MAAM,EAAE,KAAA;AAAA,QACR,aAAa,UAAU;AAAA,UACrB,UAAU,OAAO,SAAS,OAAO;AAAA,UACjC,SAAS,MAAM;AACb,mBAAO,QAAA;AACP,oBAAQ,MAAM,EAAE;AAAA,UAClB;AAAA,QAAA;AAAA,MACF,CACD;AACD,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS,OAAO,IAAI;AAAA,EAAA;AAGvB,SAAO,QAAQ,OAAO,EAAE,OAAO,OAAO,QAAQ,MAAA,IAAU,CAAC,OAAO,OAAO,CAAC;AAC1E;AAiBO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ;AACV,GAA0C;AACxC,SACE,qBAACA,MAAU,UAAV,EAAmB,SAAkB,OACpC,UAAA;AAAA,IAAA,oBAAC,kBAAgB,UAAS;AAAA,IAC1B,oBAAC,WAAQ,MAAA,CAAc;AAAA,EAAA,GACzB;AAEJ;AAOA,SAAS,eAAe;AAAA,EACtB;AACF,GAEsB;AACpB,QAAM,EAAE,KAAK,UAAUA,MAAU,gBAAA;AACjC,QAAM,MAAM,QAAQ,OAAO,EAAE,KAAK,UAAU,CAAC,KAAK,KAAK,CAAC;AAExD,6BACG,gBAAgB,UAAhB,EAAyB,OAAO,KAAM,UAAS;AAEpD;AAEA,SAAS,QAAQ,EAAE,SAA+C;AAChE,QAAM,EAAE,OAAA,IAAWA,MAAU,gBAAA;AAE7B,SACE,oBAACA,MAAU,QAAV,EACC,UAAA;AAAA,IAACA,MAAU;AAAA,IAAV;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAGD,UAAA,OAAO,IAAI,CAAC,8BACV,WAAA,EAAyB,MAAA,GAAV,MAAM,EAAkB,CACzC;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEA,MAAM,gBAAgB;AAAA,EACpB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,QAAQ;AAAA,QACN,SAAS;AAAA;AAAA,QAET,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,QAAQ;AAAA,IAAA;AAAA,EACV;AAEJ;AAEA,MAAM,cAAc;AAAA,EAClB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AACT;AAEA,SAAS,cAAc,OAAiD;AACtE,SAAO,UAAU,aAAa,UAAU,aAAa,UAAU;AACjE;AAEA,SAAS,UAAU;AAAA,EACjB;AACF,GAEsB;AACpB,QAAM,SAAS,cAAc,MAAM,IAAI,IAAI,MAAM,OAAO;AACxD,QAAM,OAAO,YAAY,MAAM;AAE/B,SACE;AAAA,IAACA,MAAU;AAAA,IAAV;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,WAAW,cAAc,EAAE,QAAQ;AAAA,MAElC,UAAA;AAAA,QAAA,MAAM,MAAM,SAAS,SAAS,oBAAC,QAAK,MAAK,MAAK,WAAU,WAAA,CAAW;AAAA,QACpE;AAAA,UAACA,MAAU;AAAA,UAAV;AAAA,YACC,4BAAS,KAAA,EAAE;AAAA,YACX,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAGZ;AAAA,UAACA,MAAU;AAAA,UAAV;AAAA,YACC,QACE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Tooltip, TooltipContent, type TooltipContentProps, type TooltipPlacement, type TooltipProps, TooltipProvider, type TooltipProviderProps, TooltipTrigger, type TooltipTriggerProps, } from "./tooltip";
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Tooltip as BaseTooltip } from "@base-ui/react/tooltip";
|
|
2
|
+
import { type ReactNode } from "react";
|
|
3
|
+
export type TooltipPlacement = "top" | "bottom";
|
|
4
|
+
export interface TooltipProviderProps extends BaseTooltip.Provider.Props {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Optional, around a toolbar or the whole app: once one tooltip is showing, the
|
|
8
|
+
* neighbouring ones open without waiting for the delay again.
|
|
9
|
+
*/
|
|
10
|
+
export declare function TooltipProvider(props: TooltipProviderProps): React.JSX.Element;
|
|
11
|
+
export interface TooltipProps extends Omit<BaseTooltip.Root.Props, "children"> {
|
|
12
|
+
/**
|
|
13
|
+
* Shortcut: the tooltip text. With it, `children` is the trigger element and the
|
|
14
|
+
* content is built for you: `<Tooltip label="Editar alergia"><IconButton … /></Tooltip>`.
|
|
15
|
+
*/
|
|
16
|
+
label?: string;
|
|
17
|
+
/** Used with `label`. Top by default; it flips on its own when there's no room. */
|
|
18
|
+
placement?: TooltipPlacement;
|
|
19
|
+
children?: ReactNode;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Floating label for controls without visible text — the edit, delete or download
|
|
23
|
+
* IconButtons. Only to NAME, never to explain: there is no hover on mobile, so
|
|
24
|
+
* anything the screen needs to be understood can't live here. Two or three words.
|
|
25
|
+
*
|
|
26
|
+
* It opens on hover and on keyboard focus, closes with Escape, and is linked to the
|
|
27
|
+
* trigger with `aria-describedby`. The trigger still needs its own `aria-label`: the
|
|
28
|
+
* tooltip doesn't replace it.
|
|
29
|
+
*/
|
|
30
|
+
export declare function Tooltip({ label, placement, children, open: openProp, defaultOpen, onOpenChange, ...props }: TooltipProps): React.JSX.Element;
|
|
31
|
+
export interface TooltipTriggerProps extends BaseTooltip.Trigger.Props {
|
|
32
|
+
}
|
|
33
|
+
/** The element the tooltip names. Pass it with `render={<IconButton aria-label="…" />}`. */
|
|
34
|
+
export declare function TooltipTrigger({ "aria-describedby": describedBy, ...props }: TooltipTriggerProps): React.JSX.Element;
|
|
35
|
+
export interface TooltipContentProps extends Omit<BaseTooltip.Popup.Props, "className"> {
|
|
36
|
+
placement?: TooltipPlacement;
|
|
37
|
+
className?: string;
|
|
38
|
+
}
|
|
39
|
+
/** The label: `surface-inverse` with white 12px text (16.27:1) and an arrow. */
|
|
40
|
+
export declare function TooltipContent({ placement, className, children, ...props }: TooltipContentProps): React.JSX.Element;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
|
|
3
|
+
import { useId, useState, useCallback, useMemo, isValidElement, createContext, useContext } from "react";
|
|
4
|
+
import { cn } from "../../lib/cn.js";
|
|
5
|
+
const TooltipContext = createContext(null);
|
|
6
|
+
function useTooltipContext(part) {
|
|
7
|
+
const context = useContext(TooltipContext);
|
|
8
|
+
if (context === null) {
|
|
9
|
+
throw new Error(`MediCore: <${part}> must be used inside <Tooltip>.`);
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
}
|
|
13
|
+
function TooltipProvider(props) {
|
|
14
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Provider, { ...props });
|
|
15
|
+
}
|
|
16
|
+
function Tooltip({
|
|
17
|
+
label,
|
|
18
|
+
placement,
|
|
19
|
+
children,
|
|
20
|
+
open: openProp,
|
|
21
|
+
defaultOpen = false,
|
|
22
|
+
onOpenChange,
|
|
23
|
+
...props
|
|
24
|
+
}) {
|
|
25
|
+
const id = useId();
|
|
26
|
+
const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
|
|
27
|
+
const open = openProp ?? uncontrolledOpen;
|
|
28
|
+
const handleOpenChange = useCallback(
|
|
29
|
+
(nextOpen, eventDetails) => {
|
|
30
|
+
onOpenChange?.(nextOpen, eventDetails);
|
|
31
|
+
if (!eventDetails.isCanceled) {
|
|
32
|
+
setUncontrolledOpen(nextOpen);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
[onOpenChange]
|
|
36
|
+
);
|
|
37
|
+
const context = useMemo(() => ({ id, open }), [id, open]);
|
|
38
|
+
return /* @__PURE__ */ jsx(TooltipContext.Provider, { value: context, children: /* @__PURE__ */ jsx(
|
|
39
|
+
Tooltip$1.Root,
|
|
40
|
+
{
|
|
41
|
+
open: openProp,
|
|
42
|
+
defaultOpen,
|
|
43
|
+
onOpenChange: handleOpenChange,
|
|
44
|
+
...props,
|
|
45
|
+
children: label !== void 0 && isValidElement(children) ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
46
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { render: children }),
|
|
47
|
+
/* @__PURE__ */ jsx(TooltipContent, { placement, children: label })
|
|
48
|
+
] }) : children
|
|
49
|
+
}
|
|
50
|
+
) });
|
|
51
|
+
}
|
|
52
|
+
function TooltipTrigger({
|
|
53
|
+
"aria-describedby": describedBy,
|
|
54
|
+
...props
|
|
55
|
+
}) {
|
|
56
|
+
const { id, open } = useTooltipContext("TooltipTrigger");
|
|
57
|
+
const ids = [describedBy, open ? id : void 0].filter(Boolean).join(" ");
|
|
58
|
+
return /* @__PURE__ */ jsx(
|
|
59
|
+
Tooltip$1.Trigger,
|
|
60
|
+
{
|
|
61
|
+
"data-slot": "tooltip-trigger",
|
|
62
|
+
"aria-describedby": ids === "" ? void 0 : ids,
|
|
63
|
+
...props
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
function TooltipContent({
|
|
68
|
+
placement = "top",
|
|
69
|
+
className,
|
|
70
|
+
children,
|
|
71
|
+
...props
|
|
72
|
+
}) {
|
|
73
|
+
const { id } = useTooltipContext("TooltipContent");
|
|
74
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(Tooltip$1.Positioner, { side: placement, sideOffset: 8, className: "z-70", children: /* @__PURE__ */ jsxs(
|
|
75
|
+
Tooltip$1.Popup,
|
|
76
|
+
{
|
|
77
|
+
id,
|
|
78
|
+
role: "tooltip",
|
|
79
|
+
"data-slot": "tooltip",
|
|
80
|
+
className: cn(
|
|
81
|
+
"max-w-60 rounded-md bg-surface-inverse px-2 py-1.5 text-label-small text-text-inverse",
|
|
82
|
+
"origin-(--transform-origin) transition-[opacity,scale] duration-150 ease-out",
|
|
83
|
+
"data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:opacity-0",
|
|
84
|
+
"data-instant:transition-none motion-reduce:transition-none",
|
|
85
|
+
className
|
|
86
|
+
),
|
|
87
|
+
...props,
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ jsx(
|
|
90
|
+
Tooltip$1.Arrow,
|
|
91
|
+
{
|
|
92
|
+
className: cn(
|
|
93
|
+
"h-1.5 w-2.5 bg-surface-inverse",
|
|
94
|
+
"data-[side=top]:top-full data-[side=top]:[clip-path:polygon(0_0,100%_0,50%_100%)]",
|
|
95
|
+
"data-[side=bottom]:bottom-full data-[side=bottom]:[clip-path:polygon(50%_0,100%_100%,0_100%)]"
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
),
|
|
99
|
+
children
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
) }) });
|
|
103
|
+
}
|
|
104
|
+
export {
|
|
105
|
+
Tooltip,
|
|
106
|
+
TooltipContent,
|
|
107
|
+
TooltipProvider,
|
|
108
|
+
TooltipTrigger
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.js","sources":["../../../src/components/tooltip/tooltip.tsx"],"sourcesContent":["import { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport {\n createContext,\n isValidElement,\n type ReactNode,\n useCallback,\n useContext,\n useId,\n useMemo,\n useState,\n} from \"react\";\n\nimport { cn } from \"../../lib/cn\";\n\nexport type TooltipPlacement = \"top\" | \"bottom\";\n\ninterface TooltipContextValue {\n id: string;\n open: boolean;\n}\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null);\n\nfunction useTooltipContext(part: string): TooltipContextValue {\n const context = useContext(TooltipContext);\n if (context === null) {\n throw new Error(`MediCore: <${part}> must be used inside <Tooltip>.`);\n }\n return context;\n}\n\nexport interface TooltipProviderProps extends BaseTooltip.Provider.Props {}\n\n/**\n * Optional, around a toolbar or the whole app: once one tooltip is showing, the\n * neighbouring ones open without waiting for the delay again.\n */\nexport function TooltipProvider(\n props: TooltipProviderProps,\n): React.JSX.Element {\n return <BaseTooltip.Provider {...props} />;\n}\n\nexport interface TooltipProps extends Omit<BaseTooltip.Root.Props, \"children\"> {\n /**\n * Shortcut: the tooltip text. With it, `children` is the trigger element and the\n * content is built for you: `<Tooltip label=\"Editar alergia\"><IconButton … /></Tooltip>`.\n */\n label?: string;\n /** Used with `label`. Top by default; it flips on its own when there's no room. */\n placement?: TooltipPlacement;\n children?: ReactNode;\n}\n\n/**\n * Floating label for controls without visible text — the edit, delete or download\n * IconButtons. Only to NAME, never to explain: there is no hover on mobile, so\n * anything the screen needs to be understood can't live here. Two or three words.\n *\n * It opens on hover and on keyboard focus, closes with Escape, and is linked to the\n * trigger with `aria-describedby`. The trigger still needs its own `aria-label`: the\n * tooltip doesn't replace it.\n */\nexport function Tooltip({\n label,\n placement,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n ...props\n}: TooltipProps): React.JSX.Element {\n const id = useId();\n // Mirrors Base UI's open state so the trigger only points at the popup while it exists.\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = openProp ?? uncontrolledOpen;\n\n const handleOpenChange = useCallback<\n NonNullable<BaseTooltip.Root.Props[\"onOpenChange\"]>\n >(\n (nextOpen, eventDetails) => {\n onOpenChange?.(nextOpen, eventDetails);\n if (!eventDetails.isCanceled) {\n setUncontrolledOpen(nextOpen);\n }\n },\n [onOpenChange],\n );\n\n const context = useMemo(() => ({ id, open }), [id, open]);\n\n return (\n <TooltipContext.Provider value={context}>\n <BaseTooltip.Root\n open={openProp}\n defaultOpen={defaultOpen}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {label !== undefined && isValidElement(children) ? (\n <>\n <TooltipTrigger render={children} />\n <TooltipContent placement={placement}>{label}</TooltipContent>\n </>\n ) : (\n children\n )}\n </BaseTooltip.Root>\n </TooltipContext.Provider>\n );\n}\n\nexport interface TooltipTriggerProps extends BaseTooltip.Trigger.Props {}\n\n/** The element the tooltip names. Pass it with `render={<IconButton aria-label=\"…\" />}`. */\nexport function TooltipTrigger({\n \"aria-describedby\": describedBy,\n ...props\n}: TooltipTriggerProps): React.JSX.Element {\n const { id, open } = useTooltipContext(\"TooltipTrigger\");\n const ids = [describedBy, open ? id : undefined].filter(Boolean).join(\" \");\n\n return (\n <BaseTooltip.Trigger\n data-slot=\"tooltip-trigger\"\n aria-describedby={ids === \"\" ? undefined : ids}\n {...props}\n />\n );\n}\n\nexport interface TooltipContentProps\n extends Omit<BaseTooltip.Popup.Props, \"className\"> {\n placement?: TooltipPlacement;\n className?: string;\n}\n\n/** The label: `surface-inverse` with white 12px text (16.27:1) and an arrow. */\nexport function TooltipContent({\n placement = \"top\",\n className,\n children,\n ...props\n}: TooltipContentProps): React.JSX.Element {\n const { id } = useTooltipContext(\"TooltipContent\");\n\n return (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner side={placement} sideOffset={8} className=\"z-70\">\n <BaseTooltip.Popup\n id={id}\n role=\"tooltip\"\n data-slot=\"tooltip\"\n className={cn(\n \"max-w-60 rounded-md bg-surface-inverse px-2 py-1.5 text-label-small text-text-inverse\",\n \"origin-(--transform-origin) transition-[opacity,scale] duration-150 ease-out\",\n \"data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:opacity-0\",\n \"data-instant:transition-none motion-reduce:transition-none\",\n className,\n )}\n {...props}\n >\n <BaseTooltip.Arrow\n className={cn(\n \"h-1.5 w-2.5 bg-surface-inverse\",\n \"data-[side=top]:top-full data-[side=top]:[clip-path:polygon(0_0,100%_0,50%_100%)]\",\n \"data-[side=bottom]:bottom-full data-[side=bottom]:[clip-path:polygon(50%_0,100%_100%,0_100%)]\",\n )}\n />\n {children}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n );\n}\n"],"names":["BaseTooltip"],"mappings":";;;;AAqBA,MAAM,iBAAiB,cAA0C,IAAI;AAErE,SAAS,kBAAkB,MAAmC;AAC5D,QAAM,UAAU,WAAW,cAAc;AACzC,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI,MAAM,cAAc,IAAI,kCAAkC;AAAA,EACtE;AACA,SAAO;AACT;AAQO,SAAS,gBACd,OACmB;AACnB,SAAO,oBAACA,UAAY,UAAZ,EAAsB,GAAG,MAAA,CAAO;AAC1C;AAsBO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN,cAAc;AAAA,EACd;AAAA,EACA,GAAG;AACL,GAAoC;AAClC,QAAM,KAAK,MAAA;AAEX,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,WAAW;AACpE,QAAM,OAAO,YAAY;AAEzB,QAAM,mBAAmB;AAAA,IAGvB,CAAC,UAAU,iBAAiB;AAC1B,qBAAe,UAAU,YAAY;AACrC,UAAI,CAAC,aAAa,YAAY;AAC5B,4BAAoB,QAAQ;AAAA,MAC9B;AAAA,IACF;AAAA,IACA,CAAC,YAAY;AAAA,EAAA;AAGf,QAAM,UAAU,QAAQ,OAAO,EAAE,IAAI,SAAS,CAAC,IAAI,IAAI,CAAC;AAExD,SACE,oBAAC,eAAe,UAAf,EAAwB,OAAO,SAC9B,UAAA;AAAA,IAACA,UAAY;AAAA,IAAZ;AAAA,MACC,MAAM;AAAA,MACN;AAAA,MACA,cAAc;AAAA,MACb,GAAG;AAAA,MAEH,UAAA,UAAU,UAAa,eAAe,QAAQ,IAC7C,qBAAA,UAAA,EACE,UAAA;AAAA,QAAA,oBAAC,gBAAA,EAAe,QAAQ,SAAA,CAAU;AAAA,QAClC,oBAAC,gBAAA,EAAe,WAAuB,UAAA,MAAA,CAAM;AAAA,MAAA,EAAA,CAC/C,IAEA;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;AAKO,SAAS,eAAe;AAAA,EAC7B,oBAAoB;AAAA,EACpB,GAAG;AACL,GAA2C;AACzC,QAAM,EAAE,IAAI,SAAS,kBAAkB,gBAAgB;AACvD,QAAM,MAAM,CAAC,aAAa,OAAO,KAAK,MAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEzE,SACE;AAAA,IAACA,UAAY;AAAA,IAAZ;AAAA,MACC,aAAU;AAAA,MACV,oBAAkB,QAAQ,KAAK,SAAY;AAAA,MAC1C,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AASO,SAAS,eAAe;AAAA,EAC7B,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2C;AACzC,QAAM,EAAE,GAAA,IAAO,kBAAkB,gBAAgB;AAEjD,SACE,oBAACA,UAAY,QAAZ,EACC,UAAA,oBAACA,UAAY,YAAZ,EAAuB,MAAM,WAAW,YAAY,GAAG,WAAU,QAChE,UAAA;AAAA,IAACA,UAAY;AAAA,IAAZ;AAAA,MACC;AAAA,MACA,MAAK;AAAA,MACL,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA;AAAA,UAACA,UAAY;AAAA,UAAZ;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAED;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEL,EAAA,CACF;AAEJ;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { type VideoControl, VideoControlButton, type VideoControlButtonProps, type VideoControlState, videoControlButtonVariants, } from "./video-control-button";
|
|
2
|
+
export { VideoLabel, type VideoLabelProps } from "./video-label";
|
|
3
|
+
export { VideoStage, type VideoStageLayout, type VideoStagePhase, type VideoStageProps, } from "./video-stage";
|
|
4
|
+
export { type VideoCamera, type VideoParticipant, VideoTile, type VideoTileProps, videoTileVariants, } from "./video-tile";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ComponentProps } from "react";
|
|
2
|
+
export type VideoControl = "microphone" | "camera" | "chat";
|
|
3
|
+
/** `on`: the device works · `off`: muted microphone / camera turned off. */
|
|
4
|
+
export type VideoControlState = "on" | "off";
|
|
5
|
+
export declare const videoControlButtonVariants: (props?: ({
|
|
6
|
+
state?: "off" | "on" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
export interface VideoControlButtonProps extends Omit<ComponentProps<"button">, "children" | "value"> {
|
|
9
|
+
control: VideoControl;
|
|
10
|
+
/**
|
|
11
|
+
* Microphone and camera. Controlled: pass it with `onStateChange`. `chat` has no
|
|
12
|
+
* off state: it opens the chat.
|
|
13
|
+
*/
|
|
14
|
+
state?: VideoControlState;
|
|
15
|
+
/** Uncontrolled initial state. Default `on`. */
|
|
16
|
+
defaultState?: VideoControlState;
|
|
17
|
+
onStateChange?: (state: VideoControlState) => void;
|
|
18
|
+
/** `chat` only: new messages. Shows the red dot and says it in the button's name. */
|
|
19
|
+
unreadCount?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Button over the video: microphone, camera and (on mobile) chat. 44×44 drawn:
|
|
23
|
+
* over the video there is no label next to it to extend the hit area.
|
|
24
|
+
*
|
|
25
|
+
* - On: `surface-inverse` fill. Off: `error-strong` fill AND the crossed-out icon —
|
|
26
|
+
* colour is never the only cue. White icon in both, over any image (the button
|
|
27
|
+
* is opaque).
|
|
28
|
+
* - Microphone and camera are toggle buttons (`aria-pressed`, pressed = muted /
|
|
29
|
+
* camera off) and their name says the action: "Silenciar micrófono" / "Activar
|
|
30
|
+
* micrófono", "Apagar cámara" / "Encender cámara".
|
|
31
|
+
* - Chat is a plain button: "Abrir chat, 1 mensaje nuevo".
|
|
32
|
+
*/
|
|
33
|
+
export declare function VideoControlButton({ control, state: stateProp, defaultState, onStateChange, unreadCount, className, type, ...props }: VideoControlButtonProps): React.JSX.Element;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from "@base-ui/react/button";
|
|
3
|
+
import { Toggle } from "@base-ui/react/toggle";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
import { MessageIcon } from "../../icons/generated/message.js";
|
|
7
|
+
import { Microphone01Icon } from "../../icons/generated/microphone-01.js";
|
|
8
|
+
import { MicrophoneOff01Icon } from "../../icons/generated/microphone-off-01.js";
|
|
9
|
+
import { VideoRecorderIcon } from "../../icons/generated/video-recorder.js";
|
|
10
|
+
import { VideoRecorderOffIcon } from "../../icons/generated/video-recorder-off.js";
|
|
11
|
+
import { cn } from "../../lib/cn.js";
|
|
12
|
+
import { useMediCoreLabels } from "../../provider/medicore-provider.js";
|
|
13
|
+
const videoControlButtonVariants = cva(
|
|
14
|
+
[
|
|
15
|
+
"relative inline-flex size-11 shrink-0 cursor-pointer items-center justify-center rounded-xl",
|
|
16
|
+
"text-text-inverse transition-colors focus-ring [&_svg]:size-icon-md",
|
|
17
|
+
"data-disabled:cursor-not-allowed"
|
|
18
|
+
],
|
|
19
|
+
{
|
|
20
|
+
variants: {
|
|
21
|
+
state: {
|
|
22
|
+
on: "border border-border-inverse bg-surface-inverse",
|
|
23
|
+
off: "bg-error-strong"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
defaultVariants: {
|
|
27
|
+
state: "on"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
function VideoControlButton({
|
|
32
|
+
control,
|
|
33
|
+
state: stateProp,
|
|
34
|
+
defaultState = "on",
|
|
35
|
+
onStateChange,
|
|
36
|
+
unreadCount = 0,
|
|
37
|
+
className,
|
|
38
|
+
type = "button",
|
|
39
|
+
...props
|
|
40
|
+
}) {
|
|
41
|
+
const labels = useMediCoreLabels();
|
|
42
|
+
if (control === "chat") {
|
|
43
|
+
const unread = unreadCount > 0;
|
|
44
|
+
return /* @__PURE__ */ jsxs(
|
|
45
|
+
Button,
|
|
46
|
+
{
|
|
47
|
+
"data-slot": "video-control-button",
|
|
48
|
+
"data-control": control,
|
|
49
|
+
type,
|
|
50
|
+
"aria-label": unread ? `${labels.videoOpenChat}, ${labels.chatNewMessages(unreadCount)}` : labels.videoOpenChat,
|
|
51
|
+
className: cn(videoControlButtonVariants({ state: "on" }), className),
|
|
52
|
+
...props,
|
|
53
|
+
children: [
|
|
54
|
+
/* @__PURE__ */ jsx(MessageIcon, {}),
|
|
55
|
+
unread && /* @__PURE__ */ jsx(
|
|
56
|
+
"span",
|
|
57
|
+
{
|
|
58
|
+
"data-slot": "video-control-button-unread",
|
|
59
|
+
className: "absolute top-1 right-1 size-2.5 rounded-full bg-error ring-2 ring-text-inverse"
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
return /* @__PURE__ */ jsx(
|
|
67
|
+
VideoToggle,
|
|
68
|
+
{
|
|
69
|
+
control,
|
|
70
|
+
state: stateProp,
|
|
71
|
+
defaultState,
|
|
72
|
+
onStateChange,
|
|
73
|
+
className,
|
|
74
|
+
type,
|
|
75
|
+
...props
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
function VideoToggle({
|
|
80
|
+
control,
|
|
81
|
+
state: stateProp,
|
|
82
|
+
defaultState,
|
|
83
|
+
onStateChange,
|
|
84
|
+
className,
|
|
85
|
+
...props
|
|
86
|
+
}) {
|
|
87
|
+
const labels = useMediCoreLabels();
|
|
88
|
+
const controlled = stateProp !== void 0;
|
|
89
|
+
const [uncontrolledState, setUncontrolledState] = useState(defaultState);
|
|
90
|
+
const state = stateProp ?? uncontrolledState;
|
|
91
|
+
const off = state === "off";
|
|
92
|
+
const label = control === "microphone" ? off ? labels.videoUnmuteMicrophone : labels.videoMuteMicrophone : off ? labels.videoTurnOnCamera : labels.videoTurnOffCamera;
|
|
93
|
+
const Icon = control === "microphone" ? off ? MicrophoneOff01Icon : Microphone01Icon : off ? VideoRecorderOffIcon : VideoRecorderIcon;
|
|
94
|
+
return /* @__PURE__ */ jsx(
|
|
95
|
+
Toggle,
|
|
96
|
+
{
|
|
97
|
+
"data-slot": "video-control-button",
|
|
98
|
+
"data-control": control,
|
|
99
|
+
"data-state": state,
|
|
100
|
+
pressed: off,
|
|
101
|
+
onPressedChange: (pressed) => {
|
|
102
|
+
const next = pressed ? "off" : "on";
|
|
103
|
+
if (!controlled) {
|
|
104
|
+
setUncontrolledState(next);
|
|
105
|
+
}
|
|
106
|
+
onStateChange?.(next);
|
|
107
|
+
},
|
|
108
|
+
"aria-label": label,
|
|
109
|
+
className: cn(videoControlButtonVariants({ state }), className),
|
|
110
|
+
...props,
|
|
111
|
+
children: /* @__PURE__ */ jsx(Icon, {})
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
VideoControlButton,
|
|
117
|
+
videoControlButtonVariants
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=video-control-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-control-button.js","sources":["../../../src/components/video/video-control-button.tsx"],"sourcesContent":["import { Button as BaseButton } from \"@base-ui/react/button\";\nimport { Toggle } from \"@base-ui/react/toggle\";\nimport { cva } from \"class-variance-authority\";\nimport { type ComponentProps, useState } from \"react\";\n\nimport {\n MessageIcon,\n Microphone01Icon,\n MicrophoneOff01Icon,\n VideoRecorderIcon,\n VideoRecorderOffIcon,\n} from \"../../icons\";\nimport { cn } from \"../../lib/cn\";\nimport { useMediCoreLabels } from \"../../provider\";\n\nexport type VideoControl = \"microphone\" | \"camera\" | \"chat\";\n\n/** `on`: the device works · `off`: muted microphone / camera turned off. */\nexport type VideoControlState = \"on\" | \"off\";\n\nexport const videoControlButtonVariants = cva(\n [\n \"relative inline-flex size-11 shrink-0 cursor-pointer items-center justify-center rounded-xl\",\n \"text-text-inverse transition-colors focus-ring [&_svg]:size-icon-md\",\n \"data-disabled:cursor-not-allowed\",\n ],\n {\n variants: {\n state: {\n on: \"border border-border-inverse bg-surface-inverse\",\n off: \"bg-error-strong\",\n },\n },\n defaultVariants: {\n state: \"on\",\n },\n },\n);\n\nexport interface VideoControlButtonProps\n extends Omit<ComponentProps<\"button\">, \"children\" | \"value\"> {\n control: VideoControl;\n /**\n * Microphone and camera. Controlled: pass it with `onStateChange`. `chat` has no\n * off state: it opens the chat.\n */\n state?: VideoControlState;\n /** Uncontrolled initial state. Default `on`. */\n defaultState?: VideoControlState;\n onStateChange?: (state: VideoControlState) => void;\n /** `chat` only: new messages. Shows the red dot and says it in the button's name. */\n unreadCount?: number;\n}\n\n/**\n * Button over the video: microphone, camera and (on mobile) chat. 44×44 drawn:\n * over the video there is no label next to it to extend the hit area.\n *\n * - On: `surface-inverse` fill. Off: `error-strong` fill AND the crossed-out icon —\n * colour is never the only cue. White icon in both, over any image (the button\n * is opaque).\n * - Microphone and camera are toggle buttons (`aria-pressed`, pressed = muted /\n * camera off) and their name says the action: \"Silenciar micrófono\" / \"Activar\n * micrófono\", \"Apagar cámara\" / \"Encender cámara\".\n * - Chat is a plain button: \"Abrir chat, 1 mensaje nuevo\".\n */\nexport function VideoControlButton({\n control,\n state: stateProp,\n defaultState = \"on\",\n onStateChange,\n unreadCount = 0,\n className,\n type = \"button\",\n ...props\n}: VideoControlButtonProps): React.JSX.Element {\n const labels = useMediCoreLabels();\n\n if (control === \"chat\") {\n const unread = unreadCount > 0;\n return (\n <BaseButton\n data-slot=\"video-control-button\"\n data-control={control}\n type={type}\n aria-label={\n unread\n ? `${labels.videoOpenChat}, ${labels.chatNewMessages(unreadCount)}`\n : labels.videoOpenChat\n }\n className={cn(videoControlButtonVariants({ state: \"on\" }), className)}\n {...props}\n >\n <MessageIcon />\n {unread && (\n <span\n data-slot=\"video-control-button-unread\"\n className=\"absolute top-1 right-1 size-2.5 rounded-full bg-error ring-2 ring-text-inverse\"\n />\n )}\n </BaseButton>\n );\n }\n\n return (\n <VideoToggle\n control={control}\n state={stateProp}\n defaultState={defaultState}\n onStateChange={onStateChange}\n className={className}\n type={type}\n {...props}\n />\n );\n}\n\ninterface VideoToggleProps\n extends Omit<VideoControlButtonProps, \"control\" | \"unreadCount\"> {\n control: Exclude<VideoControl, \"chat\">;\n defaultState: VideoControlState;\n}\n\nfunction VideoToggle({\n control,\n state: stateProp,\n defaultState,\n onStateChange,\n className,\n ...props\n}: VideoToggleProps): React.JSX.Element {\n const labels = useMediCoreLabels();\n const controlled = stateProp !== undefined;\n const [uncontrolledState, setUncontrolledState] = useState(defaultState);\n const state = stateProp ?? uncontrolledState;\n const off = state === \"off\";\n\n const label =\n control === \"microphone\"\n ? off\n ? labels.videoUnmuteMicrophone\n : labels.videoMuteMicrophone\n : off\n ? labels.videoTurnOnCamera\n : labels.videoTurnOffCamera;\n\n const Icon =\n control === \"microphone\"\n ? off\n ? MicrophoneOff01Icon\n : Microphone01Icon\n : off\n ? VideoRecorderOffIcon\n : VideoRecorderIcon;\n\n return (\n <Toggle\n data-slot=\"video-control-button\"\n data-control={control}\n data-state={state}\n pressed={off}\n onPressedChange={(pressed) => {\n const next: VideoControlState = pressed ? \"off\" : \"on\";\n if (!controlled) {\n setUncontrolledState(next);\n }\n onStateChange?.(next);\n }}\n aria-label={label}\n className={cn(videoControlButtonVariants({ state }), className)}\n {...props}\n >\n <Icon />\n </Toggle>\n );\n}\n"],"names":["BaseButton"],"mappings":";;;;;;;;;;;;AAoBO,MAAM,6BAA6B;AAAA,EACxC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA;AAAA,IACP;AAAA,IAEF,iBAAiB;AAAA,MACf,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AA6BO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,OAAO;AAAA,EACP,eAAe;AAAA,EACf;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAA+C;AAC7C,QAAM,SAAS,kBAAA;AAEf,MAAI,YAAY,QAAQ;AACtB,UAAM,SAAS,cAAc;AAC7B,WACE;AAAA,MAACA;AAAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACV,gBAAc;AAAA,QACd;AAAA,QACA,cACE,SACI,GAAG,OAAO,aAAa,KAAK,OAAO,gBAAgB,WAAW,CAAC,KAC/D,OAAO;AAAA,QAEb,WAAW,GAAG,2BAA2B,EAAE,OAAO,KAAA,CAAM,GAAG,SAAS;AAAA,QACnE,GAAG;AAAA,QAEJ,UAAA;AAAA,UAAA,oBAAC,aAAA,EAAY;AAAA,UACZ,UACC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAU;AAAA,cACV,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAwC;AACtC,QAAM,SAAS,kBAAA;AACf,QAAM,aAAa,cAAc;AACjC,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAS,YAAY;AACvE,QAAM,QAAQ,aAAa;AAC3B,QAAM,MAAM,UAAU;AAEtB,QAAM,QACJ,YAAY,eACR,MACE,OAAO,wBACP,OAAO,sBACT,MACE,OAAO,oBACP,OAAO;AAEf,QAAM,OACJ,YAAY,eACR,MACE,sBACA,mBACF,MACE,uBACA;AAER,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,cAAY;AAAA,MACZ,SAAS;AAAA,MACT,iBAAiB,CAAC,YAAY;AAC5B,cAAM,OAA0B,UAAU,QAAQ;AAClD,YAAI,CAAC,YAAY;AACf,+BAAqB,IAAI;AAAA,QAC3B;AACA,wBAAgB,IAAI;AAAA,MACtB;AAAA,MACA,cAAY;AAAA,MACZ,WAAW,GAAG,2BAA2B,EAAE,MAAA,CAAO,GAAG,SAAS;AAAA,MAC7D,GAAG;AAAA,MAEJ,8BAAC,MAAA,CAAA,CAAK;AAAA,IAAA;AAAA,EAAA;AAGZ;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ComponentProps } from "react";
|
|
2
|
+
export interface VideoLabelProps extends ComponentProps<"span"> {
|
|
3
|
+
/**
|
|
4
|
+
* The call's duration ("2:37"): tabular figures so it doesn't jump, and
|
|
5
|
+
* `role="timer"` without `aria-live`, so it isn't announced every second.
|
|
6
|
+
*/
|
|
7
|
+
timer?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Label over the video: the professional's name or the call's duration. Opaque
|
|
11
|
+
* `brand` fill with white text (10.32:1 light, 6.55:1 dark): legible over any
|
|
12
|
+
* image.
|
|
13
|
+
*/
|
|
14
|
+
export declare function VideoLabel({ timer, className, ...props }: VideoLabelProps): React.JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/cn.js";
|
|
3
|
+
function VideoLabel({
|
|
4
|
+
timer = false,
|
|
5
|
+
className,
|
|
6
|
+
...props
|
|
7
|
+
}) {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
"span",
|
|
10
|
+
{
|
|
11
|
+
"data-slot": "video-label",
|
|
12
|
+
role: timer ? "timer" : void 0,
|
|
13
|
+
className: cn(
|
|
14
|
+
"inline-flex w-fit shrink-0 items-center whitespace-nowrap rounded-md bg-brand px-2 py-1 text-label-strong text-text-inverse",
|
|
15
|
+
timer && "tabular-nums",
|
|
16
|
+
className
|
|
17
|
+
),
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
VideoLabel
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=video-label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-label.js","sources":["../../../src/components/video/video-label.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\n\nexport interface VideoLabelProps extends ComponentProps<\"span\"> {\n /**\n * The call's duration (\"2:37\"): tabular figures so it doesn't jump, and\n * `role=\"timer\"` without `aria-live`, so it isn't announced every second.\n */\n timer?: boolean;\n}\n\n/**\n * Label over the video: the professional's name or the call's duration. Opaque\n * `brand` fill with white text (10.32:1 light, 6.55:1 dark): legible over any\n * image.\n */\nexport function VideoLabel({\n timer = false,\n className,\n ...props\n}: VideoLabelProps): React.JSX.Element {\n return (\n <span\n data-slot=\"video-label\"\n role={timer ? \"timer\" : undefined}\n className={cn(\n \"inline-flex w-fit shrink-0 items-center whitespace-nowrap rounded-md bg-brand px-2 py-1 text-label-strong text-text-inverse\",\n timer && \"tabular-nums\",\n className,\n )}\n {...props}\n />\n );\n}\n"],"names":[],"mappings":";;AAiBO,SAAS,WAAW;AAAA,EACzB,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAuC;AACrC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAM,QAAQ,UAAU;AAAA,MACxB,WAAW;AAAA,QACT;AAAA,QACA,SAAS;AAAA,QACT;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ComponentProps, ReactNode } from "react";
|
|
2
|
+
export type VideoStageLayout = "desktop" | "mobile";
|
|
3
|
+
/** `waiting`: the waiting room (only your camera) · `in-call`: the consultation. */
|
|
4
|
+
export type VideoStagePhase = "in-call" | "waiting";
|
|
5
|
+
export interface VideoStageProps extends ComponentProps<"section"> {
|
|
6
|
+
/** Default `desktop`. `mobile` puts the video full-bleed and fills the screen. */
|
|
7
|
+
layout?: VideoStageLayout;
|
|
8
|
+
/** Default `in-call`. */
|
|
9
|
+
phase?: VideoStagePhase;
|
|
10
|
+
/** In call: `<VideoTile participant="remote" />`. It fills the stage. */
|
|
11
|
+
remote?: ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* `<VideoTile participant="self" />`. In call it is the thumbnail in the top-right
|
|
14
|
+
* corner; in the waiting room it fills the stage, so you can check you are seen
|
|
15
|
+
* and heard before the professional comes in.
|
|
16
|
+
*/
|
|
17
|
+
self: ReactNode;
|
|
18
|
+
/** In call: the professional's name, in a `VideoLabel` top-left. */
|
|
19
|
+
name?: ReactNode;
|
|
20
|
+
/** In call: the duration ("2:37"), in a timer `VideoLabel` next to the name. */
|
|
21
|
+
duration?: ReactNode;
|
|
22
|
+
/**
|
|
23
|
+
* `VideoControlButton`s: microphone and camera (plus chat on mobile). Bottom-left
|
|
24
|
+
* in call, centred in the waiting room. No hang-up button, on purpose: the
|
|
25
|
+
* professional ends the call.
|
|
26
|
+
*/
|
|
27
|
+
controls?: ReactNode;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The video call canvas, already assembled: remote video, your thumbnail, labels
|
|
31
|
+
* and controls. It is a region named "Videollamada".
|
|
32
|
+
*
|
|
33
|
+
* - Desktop: the chat lives outside the video (`ChatLauncher`).
|
|
34
|
+
* - Mobile: full-bleed, the chat opens from the canvas (`VideoControlButton
|
|
35
|
+
* control="chat"`), and the overlays keep clear of the notch and the home bar.
|
|
36
|
+
*
|
|
37
|
+
* Pending in Figma: the reconnecting state (when the signal drops).
|
|
38
|
+
*/
|
|
39
|
+
export declare function VideoStage({ layout, phase, remote, self, name, duration, controls, className, ...props }: VideoStageProps): React.JSX.Element;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/cn.js";
|
|
3
|
+
import { VideoLabel } from "./video-label.js";
|
|
4
|
+
import { useMediCoreLabels } from "../../provider/medicore-provider.js";
|
|
5
|
+
const layouts = {
|
|
6
|
+
desktop: {
|
|
7
|
+
"in-call": "aspect-[16/10] w-full rounded-2xl",
|
|
8
|
+
waiting: "aspect-video w-full rounded-xl"
|
|
9
|
+
},
|
|
10
|
+
mobile: {
|
|
11
|
+
"in-call": "h-dvh w-full",
|
|
12
|
+
waiting: "aspect-[343/460] w-full rounded-xl"
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
function VideoStage({
|
|
16
|
+
layout = "desktop",
|
|
17
|
+
phase = "in-call",
|
|
18
|
+
remote,
|
|
19
|
+
self,
|
|
20
|
+
name,
|
|
21
|
+
duration,
|
|
22
|
+
controls,
|
|
23
|
+
className,
|
|
24
|
+
...props
|
|
25
|
+
}) {
|
|
26
|
+
const labels = useMediCoreLabels();
|
|
27
|
+
const mobile = layout === "mobile";
|
|
28
|
+
const waiting = phase === "waiting";
|
|
29
|
+
return /* @__PURE__ */ jsxs(
|
|
30
|
+
"section",
|
|
31
|
+
{
|
|
32
|
+
"data-slot": "video-stage",
|
|
33
|
+
"data-layout": layout,
|
|
34
|
+
"data-phase": phase,
|
|
35
|
+
"aria-label": labels.videoCall,
|
|
36
|
+
className: cn(
|
|
37
|
+
"relative overflow-hidden bg-brand-dark",
|
|
38
|
+
layouts[layout][phase],
|
|
39
|
+
className
|
|
40
|
+
),
|
|
41
|
+
...props,
|
|
42
|
+
children: [
|
|
43
|
+
waiting ? /* @__PURE__ */ jsx("div", { className: "absolute inset-0 *:size-full", children: self }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
44
|
+
/* @__PURE__ */ jsx(
|
|
45
|
+
"div",
|
|
46
|
+
{
|
|
47
|
+
className: cn(
|
|
48
|
+
"absolute inset-0 *:size-full",
|
|
49
|
+
mobile && "*:rounded-none"
|
|
50
|
+
),
|
|
51
|
+
children: remote
|
|
52
|
+
}
|
|
53
|
+
),
|
|
54
|
+
(name || duration) && /* @__PURE__ */ jsxs(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
className: cn(
|
|
58
|
+
"absolute left-4 flex flex-wrap gap-1",
|
|
59
|
+
mobile ? "top-[calc(env(safe-area-inset-top)+--spacing(4))] max-w-[calc(100%-var(--spacing)*42)]" : "top-4 max-w-[calc(100%-var(--spacing)*57)]"
|
|
60
|
+
),
|
|
61
|
+
children: [
|
|
62
|
+
name && /* @__PURE__ */ jsx(VideoLabel, { children: name }),
|
|
63
|
+
duration && /* @__PURE__ */ jsx(VideoLabel, { timer: true, children: duration })
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
),
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
"div",
|
|
69
|
+
{
|
|
70
|
+
className: cn(
|
|
71
|
+
"absolute right-4 *:size-full",
|
|
72
|
+
mobile ? "top-[calc(env(safe-area-inset-top)+--spacing(4))] h-50 w-30" : "top-4 h-30 w-45"
|
|
73
|
+
),
|
|
74
|
+
children: self
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
] }),
|
|
78
|
+
controls && /* @__PURE__ */ jsx(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
className: cn(
|
|
82
|
+
"absolute flex gap-2",
|
|
83
|
+
waiting ? "left-1/2 -translate-x-1/2" : "left-4",
|
|
84
|
+
mobile && !waiting ? "bottom-[calc(env(safe-area-inset-bottom)+--spacing(4))]" : "bottom-4"
|
|
85
|
+
),
|
|
86
|
+
children: controls
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
export {
|
|
94
|
+
VideoStage
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=video-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-stage.js","sources":["../../../src/components/video/video-stage.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { useMediCoreLabels } from \"../../provider\";\nimport { VideoLabel } from \"./video-label\";\n\nexport type VideoStageLayout = \"desktop\" | \"mobile\";\n\n/** `waiting`: the waiting room (only your camera) · `in-call`: the consultation. */\nexport type VideoStagePhase = \"in-call\" | \"waiting\";\n\nexport interface VideoStageProps extends ComponentProps<\"section\"> {\n /** Default `desktop`. `mobile` puts the video full-bleed and fills the screen. */\n layout?: VideoStageLayout;\n /** Default `in-call`. */\n phase?: VideoStagePhase;\n /** In call: `<VideoTile participant=\"remote\" />`. It fills the stage. */\n remote?: ReactNode;\n /**\n * `<VideoTile participant=\"self\" />`. In call it is the thumbnail in the top-right\n * corner; in the waiting room it fills the stage, so you can check you are seen\n * and heard before the professional comes in.\n */\n self: ReactNode;\n /** In call: the professional's name, in a `VideoLabel` top-left. */\n name?: ReactNode;\n /** In call: the duration (\"2:37\"), in a timer `VideoLabel` next to the name. */\n duration?: ReactNode;\n /**\n * `VideoControlButton`s: microphone and camera (plus chat on mobile). Bottom-left\n * in call, centred in the waiting room. No hang-up button, on purpose: the\n * professional ends the call.\n */\n controls?: ReactNode;\n}\n\nconst layouts = {\n desktop: {\n \"in-call\": \"aspect-[16/10] w-full rounded-2xl\",\n waiting: \"aspect-video w-full rounded-xl\",\n },\n mobile: {\n \"in-call\": \"h-dvh w-full\",\n waiting: \"aspect-[343/460] w-full rounded-xl\",\n },\n} as const;\n\n/**\n * The video call canvas, already assembled: remote video, your thumbnail, labels\n * and controls. It is a region named \"Videollamada\".\n *\n * - Desktop: the chat lives outside the video (`ChatLauncher`).\n * - Mobile: full-bleed, the chat opens from the canvas (`VideoControlButton\n * control=\"chat\"`), and the overlays keep clear of the notch and the home bar.\n *\n * Pending in Figma: the reconnecting state (when the signal drops).\n */\nexport function VideoStage({\n layout = \"desktop\",\n phase = \"in-call\",\n remote,\n self,\n name,\n duration,\n controls,\n className,\n ...props\n}: VideoStageProps): React.JSX.Element {\n const labels = useMediCoreLabels();\n const mobile = layout === \"mobile\";\n const waiting = phase === \"waiting\";\n\n return (\n <section\n data-slot=\"video-stage\"\n data-layout={layout}\n data-phase={phase}\n aria-label={labels.videoCall}\n className={cn(\n \"relative overflow-hidden bg-brand-dark\",\n layouts[layout][phase],\n className,\n )}\n {...props}\n >\n {waiting ? (\n <div className=\"absolute inset-0 *:size-full\">{self}</div>\n ) : (\n <>\n <div\n className={cn(\n \"absolute inset-0 *:size-full\",\n mobile && \"*:rounded-none\",\n )}\n >\n {remote}\n </div>\n {(name || duration) && (\n <div\n className={cn(\n \"absolute left-4 flex flex-wrap gap-1\",\n mobile\n ? \"top-[calc(env(safe-area-inset-top)+--spacing(4))] max-w-[calc(100%-var(--spacing)*42)]\"\n : \"top-4 max-w-[calc(100%-var(--spacing)*57)]\",\n )}\n >\n {name && <VideoLabel>{name}</VideoLabel>}\n {duration && <VideoLabel timer>{duration}</VideoLabel>}\n </div>\n )}\n <div\n className={cn(\n \"absolute right-4 *:size-full\",\n mobile\n ? \"top-[calc(env(safe-area-inset-top)+--spacing(4))] h-50 w-30\"\n : \"top-4 h-30 w-45\",\n )}\n >\n {self}\n </div>\n </>\n )}\n {controls && (\n <div\n className={cn(\n \"absolute flex gap-2\",\n waiting ? \"left-1/2 -translate-x-1/2\" : \"left-4\",\n mobile && !waiting\n ? \"bottom-[calc(env(safe-area-inset-bottom)+--spacing(4))]\"\n : \"bottom-4\",\n )}\n >\n {controls}\n </div>\n )}\n </section>\n );\n}\n"],"names":[],"mappings":";;;;AAoCA,MAAM,UAAU;AAAA,EACd,SAAS;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,EAAA;AAAA,EAEX,QAAQ;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,EAAA;AAEb;AAYO,SAAS,WAAW;AAAA,EACzB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAuC;AACrC,QAAM,SAAS,kBAAA;AACf,QAAM,SAAS,WAAW;AAC1B,QAAM,UAAU,UAAU;AAE1B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,cAAY;AAAA,MACZ,cAAY,OAAO;AAAA,MACnB,WAAW;AAAA,QACT;AAAA,QACA,QAAQ,MAAM,EAAE,KAAK;AAAA,QACrB;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA,8BACE,OAAA,EAAI,WAAU,gCAAgC,UAAA,KAAA,CAAK,IAEpD,qBAAA,UAAA,EACE,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,UAAU;AAAA,cAAA;AAAA,cAGX,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,WAED,QAAQ,aACR;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,SACI,2FACA;AAAA,cAAA;AAAA,cAGL,UAAA;AAAA,gBAAA,QAAQ,oBAAC,cAAY,UAAA,KAAA,CAAK;AAAA,gBAC1B,YAAY,oBAAC,YAAA,EAAW,OAAK,MAAE,UAAA,SAAA,CAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAG7C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,SACI,gEACA;AAAA,cAAA;AAAA,cAGL,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,GACF;AAAA,QAED,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,UAAU,8BAA8B;AAAA,cACxC,UAAU,CAAC,UACP,4DACA;AAAA,YAAA;AAAA,YAGL,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ComponentProps, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Figma `Role`. Renamed to `participant` in code: `role` is the ARIA attribute.
|
|
4
|
+
* `remote`: the professional (large) · `self`: your camera (thumbnail).
|
|
5
|
+
*/
|
|
6
|
+
export type VideoParticipant = "remote" | "self";
|
|
7
|
+
export type VideoCamera = "on" | "off";
|
|
8
|
+
export declare const videoTileVariants: (props?: ({
|
|
9
|
+
participant?: "remote" | "self" | null | undefined;
|
|
10
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
11
|
+
export interface VideoTileProps extends ComponentProps<"div"> {
|
|
12
|
+
/** Default `remote`. */
|
|
13
|
+
participant?: VideoParticipant;
|
|
14
|
+
/**
|
|
15
|
+
* `on`: `children` (the `<video>` or an `<img>`) fills the tile, full-bleed.
|
|
16
|
+
* `off`: avatar, name and "Cámara desactivada" — without it, when the professional
|
|
17
|
+
* turns the camera off the patient sees a black box and thinks the call dropped.
|
|
18
|
+
*/
|
|
19
|
+
camera?: VideoCamera;
|
|
20
|
+
/** The stream: a `<video autoPlay playsInline muted />` or a still `<img alt="" />`. */
|
|
21
|
+
children?: ReactNode;
|
|
22
|
+
/** Camera off: `<Avatar size={56} />` for the remote, `size={40}` for yourself. */
|
|
23
|
+
avatar?: ReactNode;
|
|
24
|
+
/** Camera off, remote only: "Dra. María Rodríguez". */
|
|
25
|
+
name?: ReactNode;
|
|
26
|
+
/** Camera off: overrides "Cámara desactivada" / "Cámara apagada". */
|
|
27
|
+
status?: ReactNode;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* One video of the call. The fill is `brand-dark` with inverse text, the same in
|
|
31
|
+
* light and dark mode: the video is just as dark in both. The content is centred,
|
|
32
|
+
* so size it freely; `VideoStage` places the tiles.
|
|
33
|
+
*
|
|
34
|
+
* Mobile: the remote goes full-bleed (`className="rounded-none"`), the self view is
|
|
35
|
+
* 120×200 upright.
|
|
36
|
+
*/
|
|
37
|
+
export declare function VideoTile({ participant, camera, children, avatar, name, status, className, ...props }: VideoTileProps): React.JSX.Element;
|