@elementar-rt/components 0.6.57 → 0.7.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 +7 -2
- package/fesm2022/elementar-rt-components-action-required.mjs +8 -8
- package/fesm2022/elementar-rt-components-action-required.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-alert.mjs +22 -25
- package/fesm2022/elementar-rt-components-alert.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-announcement.mjs +12 -14
- package/fesm2022/elementar-rt-components-announcement.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-avatar.mjs +34 -38
- package/fesm2022/elementar-rt-components-avatar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-badge.mjs +10 -10
- package/fesm2022/elementar-rt-components-badge.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-block-loader.mjs +10 -16
- package/fesm2022/elementar-rt-components-block-loader.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-block-state.mjs +24 -24
- package/fesm2022/elementar-rt-components-block-state.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-bottom-sheet.mjs +12 -12
- package/fesm2022/elementar-rt-components-bottom-sheet.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-brand-colors.mjs +9 -13
- package/fesm2022/elementar-rt-components-brand-colors.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-breadcrumbs.mjs +49 -53
- package/fesm2022/elementar-rt-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-button-toggle.mjs +16 -16
- package/fesm2022/elementar-rt-components-button-toggle.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-calendar.mjs +10 -10
- package/fesm2022/elementar-rt-components-calendar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-card-overlay.mjs +10 -16
- package/fesm2022/elementar-rt-components-card-overlay.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-card.mjs +18 -18
- package/fesm2022/elementar-rt-components-card.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-carousel.mjs +48 -50
- package/fesm2022/elementar-rt-components-carousel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-chips.mjs +12 -12
- package/fesm2022/elementar-rt-components-chips.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-clipboard-copy.mjs +17 -17
- package/fesm2022/elementar-rt-components-clipboard-copy.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-code-highlighter.mjs +12 -12
- package/fesm2022/elementar-rt-components-code-highlighter.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-color-picker.mjs +44 -52
- package/fesm2022/elementar-rt-components-color-picker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-color-scheme.mjs +10 -10
- package/fesm2022/elementar-rt-components-color-scheme.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-combobox.mjs +13 -13
- package/fesm2022/elementar-rt-components-combobox.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-command-bar.mjs +15 -17
- package/fesm2022/elementar-rt-components-command-bar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-comment-editor.mjs +110 -108
- package/fesm2022/elementar-rt-components-comment-editor.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-comparison-slider.mjs +16 -16
- package/fesm2022/elementar-rt-components-comparison-slider.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-confirm.mjs +7 -7
- package/fesm2022/elementar-rt-components-confirm.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-content-editor.mjs +7 -7
- package/fesm2022/elementar-rt-components-content-editor.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-content-fade.mjs +7 -7
- package/fesm2022/elementar-rt-components-content-fade.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-cookie-popup.mjs +15 -17
- package/fesm2022/elementar-rt-components-cookie-popup.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-core.mjs +68 -75
- package/fesm2022/elementar-rt-components-core.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-country-select.mjs +15 -17
- package/fesm2022/elementar-rt-components-country-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-crop.mjs +12 -12
- package/fesm2022/elementar-rt-components-crop.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-currency-select.mjs +15 -17
- package/fesm2022/elementar-rt-components-currency-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-dashboard.mjs +15 -19
- package/fesm2022/elementar-rt-components-dashboard.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-data-grid.mjs +20 -20
- package/fesm2022/elementar-rt-components-data-grid.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-data-view.mjs +38 -52
- package/fesm2022/elementar-rt-components-data-view.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-date-format-select.mjs +8 -8
- package/fesm2022/elementar-rt-components-date-format-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-datepicker.mjs +12 -12
- package/fesm2022/elementar-rt-components-datepicker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-dialog.mjs +19 -19
- package/fesm2022/elementar-rt-components-dialog.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-digit-roller.mjs +10 -10
- package/fesm2022/elementar-rt-components-digit-roller.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-divider.mjs +8 -8
- package/fesm2022/elementar-rt-components-divider.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-drawer.mjs +14 -14
- package/fesm2022/elementar-rt-components-drawer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-emoji-picker.mjs +15 -17
- package/fesm2022/elementar-rt-components-emoji-picker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-empty-state.mjs +8 -8
- package/fesm2022/elementar-rt-components-empty-state.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-expand.mjs +10 -14
- package/fesm2022/elementar-rt-components-expand.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-expansion-panel.mjs +6 -6
- package/fesm2022/elementar-rt-components-expansion-panel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-filter-builder.mjs +24 -26
- package/fesm2022/elementar-rt-components-filter-builder.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-filter-select.mjs +19 -19
- package/fesm2022/elementar-rt-components-filter-select.mjs.map +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-autocomplete-many-field.component-C2Ai6F2X.mjs → elementar-rt-components-form-renderer-autocomplete-many-field.component-DYDAWUBL.mjs} +6 -6
- package/fesm2022/{elementar-rt-components-form-renderer-autocomplete-many-field.component-C2Ai6F2X.mjs.map → elementar-rt-components-form-renderer-autocomplete-many-field.component-DYDAWUBL.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-checkbox-field.component-a0XAs0-_.mjs → elementar-rt-components-form-renderer-checkbox-field.component-DCdtWKHi.mjs} +7 -7
- package/fesm2022/{elementar-rt-components-form-renderer-checkbox-field.component-a0XAs0-_.mjs.map → elementar-rt-components-form-renderer-checkbox-field.component-DCdtWKHi.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-datepicker-field.component-CTVrrf43.mjs → elementar-rt-components-form-renderer-datepicker-field.component-D9gAkq6u.mjs} +6 -6
- package/fesm2022/{elementar-rt-components-form-renderer-datepicker-field.component-CTVrrf43.mjs.map → elementar-rt-components-form-renderer-datepicker-field.component-D9gAkq6u.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-divider-content.component-CkYa0MOQ.mjs → elementar-rt-components-form-renderer-divider-content.component-DB4F4Av6.mjs} +4 -4
- package/fesm2022/{elementar-rt-components-form-renderer-divider-content.component-CkYa0MOQ.mjs.map → elementar-rt-components-form-renderer-divider-content.component-DB4F4Av6.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-image-content.component-B5uj3hoV.mjs → elementar-rt-components-form-renderer-image-content.component-BvxbVzag.mjs} +5 -5
- package/fesm2022/{elementar-rt-components-form-renderer-image-content.component-B5uj3hoV.mjs.map → elementar-rt-components-form-renderer-image-content.component-BvxbVzag.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-input-field.component-DnaWJIK9.mjs → elementar-rt-components-form-renderer-input-field.component-BPOCpB7i.mjs} +7 -7
- package/fesm2022/{elementar-rt-components-form-renderer-input-field.component-DnaWJIK9.mjs.map → elementar-rt-components-form-renderer-input-field.component-BPOCpB7i.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-radio-group-field.component-9BLv1MsP.mjs → elementar-rt-components-form-renderer-radio-group-field.component-D65JtgyW.mjs} +7 -7
- package/fesm2022/{elementar-rt-components-form-renderer-radio-group-field.component-9BLv1MsP.mjs.map → elementar-rt-components-form-renderer-radio-group-field.component-D65JtgyW.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-select-field.component-C97pIEdh.mjs → elementar-rt-components-form-renderer-select-field.component-HgwzMHVU.mjs} +6 -6
- package/fesm2022/{elementar-rt-components-form-renderer-select-field.component-C97pIEdh.mjs.map → elementar-rt-components-form-renderer-select-field.component-HgwzMHVU.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-text-content.component-CJxCc5vX.mjs → elementar-rt-components-form-renderer-text-content.component-fHh_BaZl.mjs} +5 -5
- package/fesm2022/{elementar-rt-components-form-renderer-text-content.component-CJxCc5vX.mjs.map → elementar-rt-components-form-renderer-text-content.component-fHh_BaZl.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-textarea-field.component-CCtWiJOk.mjs → elementar-rt-components-form-renderer-textarea-field.component-CQ68jF7W.mjs} +6 -6
- package/fesm2022/{elementar-rt-components-form-renderer-textarea-field.component-CCtWiJOk.mjs.map → elementar-rt-components-form-renderer-textarea-field.component-CQ68jF7W.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-timezone-field.component-GvZgdvUX.mjs → elementar-rt-components-form-renderer-timezone-field.component-CgS9fcCV.mjs} +7 -7
- package/fesm2022/{elementar-rt-components-form-renderer-timezone-field.component-GvZgdvUX.mjs.map → elementar-rt-components-form-renderer-timezone-field.component-CgS9fcCV.mjs.map} +1 -1
- package/fesm2022/{elementar-rt-components-form-renderer-toggle-field.component-DBiIiV-9.mjs → elementar-rt-components-form-renderer-toggle-field.component-nj0FmsWA.mjs} +7 -7
- package/fesm2022/{elementar-rt-components-form-renderer-toggle-field.component-DBiIiV-9.mjs.map → elementar-rt-components-form-renderer-toggle-field.component-nj0FmsWA.mjs.map} +1 -1
- package/fesm2022/elementar-rt-components-form-renderer.mjs +36 -36
- package/fesm2022/elementar-rt-components-form-renderer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-gauge.mjs +11 -17
- package/fesm2022/elementar-rt-components-gauge.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-grid.mjs +12 -12
- package/fesm2022/elementar-rt-components-grid.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-guided-tour.mjs +12 -12
- package/fesm2022/elementar-rt-components-guided-tour.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-headless-stepper.mjs +10 -10
- package/fesm2022/elementar-rt-components-headless-stepper.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-icon.mjs +6 -6
- package/fesm2022/elementar-rt-components-icon.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-image-placeholder.mjs +10 -10
- package/fesm2022/elementar-rt-components-image-placeholder.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-image-resizer.mjs +17 -25
- package/fesm2022/elementar-rt-components-image-resizer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-image-viewer.mjs +29 -29
- package/fesm2022/elementar-rt-components-image-viewer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-image-zoom-viewer.mjs +16 -16
- package/fesm2022/elementar-rt-components-image-zoom-viewer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-incidents.mjs +55 -57
- package/fesm2022/elementar-rt-components-incidents.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-inline-text-edit.mjs +8 -10
- package/fesm2022/elementar-rt-components-inline-text-edit.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-input-mask.mjs +12 -12
- package/fesm2022/elementar-rt-components-input-mask.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-input-validator.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-kanban-board.mjs +10 -10
- package/fesm2022/elementar-rt-components-kanban-board.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-keyboard.mjs +9 -9
- package/fesm2022/elementar-rt-components-keyboard.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-layout.mjs +47 -46
- package/fesm2022/elementar-rt-components-layout.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-list.mjs +13 -13
- package/fesm2022/elementar-rt-components-list.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-logo.mjs +12 -12
- package/fesm2022/elementar-rt-components-logo.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-marquee.mjs +9 -13
- package/fesm2022/elementar-rt-components-marquee.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-menu.mjs +19 -19
- package/fesm2022/elementar-rt-components-menu.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-micro-chart.mjs +65 -111
- package/fesm2022/elementar-rt-components-micro-chart.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-multi-select.mjs +13 -13
- package/fesm2022/elementar-rt-components-multi-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-navigation.mjs +56 -66
- package/fesm2022/elementar-rt-components-navigation.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-notifications.mjs +47 -53
- package/fesm2022/elementar-rt-components-notifications.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-number-input.mjs +23 -31
- package/fesm2022/elementar-rt-components-number-input.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs +34 -34
- package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-overlay.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-page-loading-bar.mjs +5 -7
- package/fesm2022/elementar-rt-components-page-loading-bar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-paginator.mjs +12 -12
- package/fesm2022/elementar-rt-components-paginator.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-panel.mjs +25 -27
- package/fesm2022/elementar-rt-components-panel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-password-strength.mjs +35 -59
- package/fesm2022/elementar-rt-components-password-strength.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-phone-input.mjs +23 -26
- package/fesm2022/elementar-rt-components-phone-input.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-pin-input.mjs +21 -25
- package/fesm2022/elementar-rt-components-pin-input.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-popover.mjs +18 -28
- package/fesm2022/elementar-rt-components-popover.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-progress-bar.mjs +10 -10
- package/fesm2022/elementar-rt-components-progress-bar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-progress-spinner.mjs +14 -14
- package/fesm2022/elementar-rt-components-progress-spinner.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-radio-card.mjs +21 -21
- package/fesm2022/elementar-rt-components-radio-card.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-rail-nav.mjs +14 -14
- package/fesm2022/elementar-rt-components-rail-nav.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-rating.mjs +15 -15
- package/fesm2022/elementar-rt-components-rating.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-resizable-container.mjs +5 -7
- package/fesm2022/elementar-rt-components-resizable-container.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-screen-loader.mjs +5 -7
- package/fesm2022/elementar-rt-components-screen-loader.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-scroll-spy.mjs +18 -18
- package/fesm2022/elementar-rt-components-scroll-spy.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-segmented.mjs +21 -24
- package/fesm2022/elementar-rt-components-segmented.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-side-panel.mjs +18 -18
- package/fesm2022/elementar-rt-components-side-panel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-sidebar.mjs +71 -77
- package/fesm2022/elementar-rt-components-sidebar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-sidenav.mjs +15 -15
- package/fesm2022/elementar-rt-components-sidenav.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-signature-pad.mjs +17 -17
- package/fesm2022/elementar-rt-components-signature-pad.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-skeleton.mjs +17 -17
- package/fesm2022/elementar-rt-components-skeleton.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-slider.mjs +13 -13
- package/fesm2022/elementar-rt-components-slider.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-snackbar.mjs +10 -10
- package/fesm2022/elementar-rt-components-snackbar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-sort.mjs +11 -11
- package/fesm2022/elementar-rt-components-sort.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-splash-screen.mjs +17 -13
- package/fesm2022/elementar-rt-components-splash-screen.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-split-pane.mjs +10 -10
- package/fesm2022/elementar-rt-components-split-pane.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-stat-card.mjs +10 -10
- package/fesm2022/elementar-rt-components-stat-card.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-step-tracker.mjs +8 -8
- package/fesm2022/elementar-rt-components-step-tracker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-stepper.mjs +21 -23
- package/fesm2022/elementar-rt-components-stepper.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-suggestions.mjs +21 -25
- package/fesm2022/elementar-rt-components-suggestions.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-tab-panel.mjs +54 -60
- package/fesm2022/elementar-rt-components-tab-panel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-table.mjs +16 -16
- package/fesm2022/elementar-rt-components-table.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-tabs.mjs +14 -14
- package/fesm2022/elementar-rt-components-tabs.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-tag.mjs +9 -9
- package/fesm2022/elementar-rt-components-tag.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-text-editor.mjs +101 -98
- package/fesm2022/elementar-rt-components-text-editor.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-thumbnail-maker.mjs +11 -13
- package/fesm2022/elementar-rt-components-thumbnail-maker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-tiles.mjs +9 -9
- package/fesm2022/elementar-rt-components-tiles.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-timeline.mjs +39 -39
- package/fesm2022/elementar-rt-components-timeline.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-timepicker.mjs +11 -11
- package/fesm2022/elementar-rt-components-timepicker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-timezone-select.mjs +23 -29
- package/fesm2022/elementar-rt-components-timezone-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-toast.mjs +14 -14
- package/fesm2022/elementar-rt-components-toast.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-toolbar.mjs +6 -6
- package/fesm2022/elementar-rt-components-toolbar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-tooltip.mjs +14 -14
- package/fesm2022/elementar-rt-components-tooltip.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-tree.mjs +17 -17
- package/fesm2022/elementar-rt-components-tree.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-upload.mjs +80 -88
- package/fesm2022/elementar-rt-components-upload.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-video-player.mjs +22 -22
- package/fesm2022/elementar-rt-components-video-player.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-video-viewer.mjs +16 -16
- package/fesm2022/elementar-rt-components-video-viewer.mjs.map +1 -1
- package/package.json +136 -135
- package/{country-select/index.d.ts → types/elementar-rt-components-country-select.d.ts} +1 -1
- package/{currency-select/index.d.ts → types/elementar-rt-components-currency-select.d.ts} +1 -1
- package/{layout/index.d.ts → types/elementar-rt-components-layout.d.ts} +3 -1
- /package/{action-required/index.d.ts → types/elementar-rt-components-action-required.d.ts} +0 -0
- /package/{alert/index.d.ts → types/elementar-rt-components-alert.d.ts} +0 -0
- /package/{announcement/index.d.ts → types/elementar-rt-components-announcement.d.ts} +0 -0
- /package/{avatar/index.d.ts → types/elementar-rt-components-avatar.d.ts} +0 -0
- /package/{badge/index.d.ts → types/elementar-rt-components-badge.d.ts} +0 -0
- /package/{block-loader/index.d.ts → types/elementar-rt-components-block-loader.d.ts} +0 -0
- /package/{block-state/index.d.ts → types/elementar-rt-components-block-state.d.ts} +0 -0
- /package/{bottom-sheet/index.d.ts → types/elementar-rt-components-bottom-sheet.d.ts} +0 -0
- /package/{brand-colors/index.d.ts → types/elementar-rt-components-brand-colors.d.ts} +0 -0
- /package/{breadcrumbs/index.d.ts → types/elementar-rt-components-breadcrumbs.d.ts} +0 -0
- /package/{button-toggle/index.d.ts → types/elementar-rt-components-button-toggle.d.ts} +0 -0
- /package/{calendar/index.d.ts → types/elementar-rt-components-calendar.d.ts} +0 -0
- /package/{card-overlay/index.d.ts → types/elementar-rt-components-card-overlay.d.ts} +0 -0
- /package/{card/index.d.ts → types/elementar-rt-components-card.d.ts} +0 -0
- /package/{carousel/index.d.ts → types/elementar-rt-components-carousel.d.ts} +0 -0
- /package/{chips/index.d.ts → types/elementar-rt-components-chips.d.ts} +0 -0
- /package/{clipboard-copy/index.d.ts → types/elementar-rt-components-clipboard-copy.d.ts} +0 -0
- /package/{code-highlighter/index.d.ts → types/elementar-rt-components-code-highlighter.d.ts} +0 -0
- /package/{color-picker/index.d.ts → types/elementar-rt-components-color-picker.d.ts} +0 -0
- /package/{color-scheme/index.d.ts → types/elementar-rt-components-color-scheme.d.ts} +0 -0
- /package/{combobox/index.d.ts → types/elementar-rt-components-combobox.d.ts} +0 -0
- /package/{command-bar/index.d.ts → types/elementar-rt-components-command-bar.d.ts} +0 -0
- /package/{comment-editor/index.d.ts → types/elementar-rt-components-comment-editor.d.ts} +0 -0
- /package/{comparison-slider/index.d.ts → types/elementar-rt-components-comparison-slider.d.ts} +0 -0
- /package/{confirm/index.d.ts → types/elementar-rt-components-confirm.d.ts} +0 -0
- /package/{content-editor/index.d.ts → types/elementar-rt-components-content-editor.d.ts} +0 -0
- /package/{content-fade/index.d.ts → types/elementar-rt-components-content-fade.d.ts} +0 -0
- /package/{cookie-popup/index.d.ts → types/elementar-rt-components-cookie-popup.d.ts} +0 -0
- /package/{core/index.d.ts → types/elementar-rt-components-core.d.ts} +0 -0
- /package/{crop/index.d.ts → types/elementar-rt-components-crop.d.ts} +0 -0
- /package/{dashboard/index.d.ts → types/elementar-rt-components-dashboard.d.ts} +0 -0
- /package/{data-grid/index.d.ts → types/elementar-rt-components-data-grid.d.ts} +0 -0
- /package/{data-view/index.d.ts → types/elementar-rt-components-data-view.d.ts} +0 -0
- /package/{date-format-select/index.d.ts → types/elementar-rt-components-date-format-select.d.ts} +0 -0
- /package/{datepicker/index.d.ts → types/elementar-rt-components-datepicker.d.ts} +0 -0
- /package/{dialog/index.d.ts → types/elementar-rt-components-dialog.d.ts} +0 -0
- /package/{digit-roller/index.d.ts → types/elementar-rt-components-digit-roller.d.ts} +0 -0
- /package/{divider/index.d.ts → types/elementar-rt-components-divider.d.ts} +0 -0
- /package/{drawer/index.d.ts → types/elementar-rt-components-drawer.d.ts} +0 -0
- /package/{emoji-picker/index.d.ts → types/elementar-rt-components-emoji-picker.d.ts} +0 -0
- /package/{empty-state/index.d.ts → types/elementar-rt-components-empty-state.d.ts} +0 -0
- /package/{expand/index.d.ts → types/elementar-rt-components-expand.d.ts} +0 -0
- /package/{expansion-panel/index.d.ts → types/elementar-rt-components-expansion-panel.d.ts} +0 -0
- /package/{filter-builder/index.d.ts → types/elementar-rt-components-filter-builder.d.ts} +0 -0
- /package/{filter-select/index.d.ts → types/elementar-rt-components-filter-select.d.ts} +0 -0
- /package/{form-renderer/index.d.ts → types/elementar-rt-components-form-renderer.d.ts} +0 -0
- /package/{gauge/index.d.ts → types/elementar-rt-components-gauge.d.ts} +0 -0
- /package/{grid/index.d.ts → types/elementar-rt-components-grid.d.ts} +0 -0
- /package/{guided-tour/index.d.ts → types/elementar-rt-components-guided-tour.d.ts} +0 -0
- /package/{headless-stepper/index.d.ts → types/elementar-rt-components-headless-stepper.d.ts} +0 -0
- /package/{icon/index.d.ts → types/elementar-rt-components-icon.d.ts} +0 -0
- /package/{image-placeholder/index.d.ts → types/elementar-rt-components-image-placeholder.d.ts} +0 -0
- /package/{image-resizer/index.d.ts → types/elementar-rt-components-image-resizer.d.ts} +0 -0
- /package/{image-viewer/index.d.ts → types/elementar-rt-components-image-viewer.d.ts} +0 -0
- /package/{image-zoom-viewer/index.d.ts → types/elementar-rt-components-image-zoom-viewer.d.ts} +0 -0
- /package/{incidents/index.d.ts → types/elementar-rt-components-incidents.d.ts} +0 -0
- /package/{inline-text-edit/index.d.ts → types/elementar-rt-components-inline-text-edit.d.ts} +0 -0
- /package/{input-mask/index.d.ts → types/elementar-rt-components-input-mask.d.ts} +0 -0
- /package/{input-validator/index.d.ts → types/elementar-rt-components-input-validator.d.ts} +0 -0
- /package/{kanban-board/index.d.ts → types/elementar-rt-components-kanban-board.d.ts} +0 -0
- /package/{keyboard/index.d.ts → types/elementar-rt-components-keyboard.d.ts} +0 -0
- /package/{list/index.d.ts → types/elementar-rt-components-list.d.ts} +0 -0
- /package/{logo/index.d.ts → types/elementar-rt-components-logo.d.ts} +0 -0
- /package/{marquee/index.d.ts → types/elementar-rt-components-marquee.d.ts} +0 -0
- /package/{menu/index.d.ts → types/elementar-rt-components-menu.d.ts} +0 -0
- /package/{micro-chart/index.d.ts → types/elementar-rt-components-micro-chart.d.ts} +0 -0
- /package/{multi-select/index.d.ts → types/elementar-rt-components-multi-select.d.ts} +0 -0
- /package/{navigation/index.d.ts → types/elementar-rt-components-navigation.d.ts} +0 -0
- /package/{notifications/index.d.ts → types/elementar-rt-components-notifications.d.ts} +0 -0
- /package/{number-input/index.d.ts → types/elementar-rt-components-number-input.d.ts} +0 -0
- /package/{overlay-scrollbar/index.d.ts → types/elementar-rt-components-overlay-scrollbar.d.ts} +0 -0
- /package/{overlay/index.d.ts → types/elementar-rt-components-overlay.d.ts} +0 -0
- /package/{page-loading-bar/index.d.ts → types/elementar-rt-components-page-loading-bar.d.ts} +0 -0
- /package/{paginator/index.d.ts → types/elementar-rt-components-paginator.d.ts} +0 -0
- /package/{panel/index.d.ts → types/elementar-rt-components-panel.d.ts} +0 -0
- /package/{password-strength/index.d.ts → types/elementar-rt-components-password-strength.d.ts} +0 -0
- /package/{phone-input/index.d.ts → types/elementar-rt-components-phone-input.d.ts} +0 -0
- /package/{pin-input/index.d.ts → types/elementar-rt-components-pin-input.d.ts} +0 -0
- /package/{popover/index.d.ts → types/elementar-rt-components-popover.d.ts} +0 -0
- /package/{progress-bar/index.d.ts → types/elementar-rt-components-progress-bar.d.ts} +0 -0
- /package/{progress-spinner/index.d.ts → types/elementar-rt-components-progress-spinner.d.ts} +0 -0
- /package/{radio-card/index.d.ts → types/elementar-rt-components-radio-card.d.ts} +0 -0
- /package/{rail-nav/index.d.ts → types/elementar-rt-components-rail-nav.d.ts} +0 -0
- /package/{rating/index.d.ts → types/elementar-rt-components-rating.d.ts} +0 -0
- /package/{resizable-container/index.d.ts → types/elementar-rt-components-resizable-container.d.ts} +0 -0
- /package/{screen-loader/index.d.ts → types/elementar-rt-components-screen-loader.d.ts} +0 -0
- /package/{scroll-spy/index.d.ts → types/elementar-rt-components-scroll-spy.d.ts} +0 -0
- /package/{segmented/index.d.ts → types/elementar-rt-components-segmented.d.ts} +0 -0
- /package/{side-panel/index.d.ts → types/elementar-rt-components-side-panel.d.ts} +0 -0
- /package/{sidebar/index.d.ts → types/elementar-rt-components-sidebar.d.ts} +0 -0
- /package/{sidenav/index.d.ts → types/elementar-rt-components-sidenav.d.ts} +0 -0
- /package/{signature-pad/index.d.ts → types/elementar-rt-components-signature-pad.d.ts} +0 -0
- /package/{skeleton/index.d.ts → types/elementar-rt-components-skeleton.d.ts} +0 -0
- /package/{slider/index.d.ts → types/elementar-rt-components-slider.d.ts} +0 -0
- /package/{snackbar/index.d.ts → types/elementar-rt-components-snackbar.d.ts} +0 -0
- /package/{sort/index.d.ts → types/elementar-rt-components-sort.d.ts} +0 -0
- /package/{splash-screen/index.d.ts → types/elementar-rt-components-splash-screen.d.ts} +0 -0
- /package/{split-pane/index.d.ts → types/elementar-rt-components-split-pane.d.ts} +0 -0
- /package/{stat-card/index.d.ts → types/elementar-rt-components-stat-card.d.ts} +0 -0
- /package/{step-tracker/index.d.ts → types/elementar-rt-components-step-tracker.d.ts} +0 -0
- /package/{stepper/index.d.ts → types/elementar-rt-components-stepper.d.ts} +0 -0
- /package/{suggestions/index.d.ts → types/elementar-rt-components-suggestions.d.ts} +0 -0
- /package/{tab-panel/index.d.ts → types/elementar-rt-components-tab-panel.d.ts} +0 -0
- /package/{table/index.d.ts → types/elementar-rt-components-table.d.ts} +0 -0
- /package/{tabs/index.d.ts → types/elementar-rt-components-tabs.d.ts} +0 -0
- /package/{tag/index.d.ts → types/elementar-rt-components-tag.d.ts} +0 -0
- /package/{text-editor/index.d.ts → types/elementar-rt-components-text-editor.d.ts} +0 -0
- /package/{thumbnail-maker/index.d.ts → types/elementar-rt-components-thumbnail-maker.d.ts} +0 -0
- /package/{tiles/index.d.ts → types/elementar-rt-components-tiles.d.ts} +0 -0
- /package/{timeline/index.d.ts → types/elementar-rt-components-timeline.d.ts} +0 -0
- /package/{timepicker/index.d.ts → types/elementar-rt-components-timepicker.d.ts} +0 -0
- /package/{timezone-select/index.d.ts → types/elementar-rt-components-timezone-select.d.ts} +0 -0
- /package/{toast/index.d.ts → types/elementar-rt-components-toast.d.ts} +0 -0
- /package/{toolbar/index.d.ts → types/elementar-rt-components-toolbar.d.ts} +0 -0
- /package/{tooltip/index.d.ts → types/elementar-rt-components-tooltip.d.ts} +0 -0
- /package/{tree/index.d.ts → types/elementar-rt-components-tree.d.ts} +0 -0
- /package/{upload/index.d.ts → types/elementar-rt-components-upload.d.ts} +0 -0
- /package/{video-player/index.d.ts → types/elementar-rt-components-video-player.d.ts} +0 -0
- /package/{video-viewer/index.d.ts → types/elementar-rt-components-video-viewer.d.ts} +0 -0
- /package/{index.d.ts → types/elementar-rt-components.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementar-rt-components-upload.mjs","sources":["../../../projects/components/upload/src/upload-area/upload-area.component.ts","../../../projects/components/upload/src/upload-area/upload-area.component.html","../../../projects/components/upload/src/file-list/file-list.component.ts","../../../projects/components/upload/src/file-list/file-list.component.html","../../../projects/components/upload/src/file/file.component.ts","../../../projects/components/upload/src/file/file.component.html","../../../projects/components/upload/src/file-control/file-control.component.ts","../../../projects/components/upload/src/file-control/file-control.component.html","../../../projects/components/upload/src/files-grid/files-grid.component.ts","../../../projects/components/upload/src/files-grid/files-grid.component.html","../../../projects/components/upload/src/grid-file/grid-file.component.ts","../../../projects/components/upload/src/grid-file/grid-file.component.html","../../../projects/components/upload/src/upload-container/upload-container.component.ts","../../../projects/components/upload/src/upload-container/upload-container.component.html","../../../projects/components/upload/src/upload-max-file-size/upload-max-file-size.component.ts","../../../projects/components/upload/src/upload-max-file-size/upload-max-file-size.component.html","../../../projects/components/upload/src/upload-allowed-types/upload-allowed-types.component.ts","../../../projects/components/upload/src/upload-allowed-types/upload-allowed-types.component.html","../../../projects/components/upload/src/upload-trigger.directive.ts","../../../projects/components/upload/src/upload-area-icon.directive.ts","../../../projects/components/upload/src/upload-area-main-state.directive.ts","../../../projects/components/upload/src/upload-area-drop-state.directive.ts","../../../projects/components/upload/src/upload-area-invalid-state.directive.ts","../../../projects/components/upload/src/file-icon.directive.ts","../../../projects/components/upload/src/grid-file-control.directive.ts","../../../projects/components/upload/elementar-rt-components-upload.ts"],"sourcesContent":["import {\n booleanAttribute,\n Component,\n inject, input,\n output,\n Renderer2, signal,\n} from '@angular/core';\nimport { UploadFileSelectedEvent } from '../types';\n\n@Component({\n selector: 'emr-upload-area',\n exportAs: 'emrUploadArea',\n templateUrl: './upload-area.component.html',\n styleUrl: './upload-area.component.scss',\n imports: [\n ],\n host: {\n 'class': 'emr-upload-area',\n '[class.is-drop-active]': 'isDropActive()',\n '[class.is-drop-invalid]': 'isDropInvalid()',\n '[class.is-allow-hover]': 'allowHover()',\n '(dragover)': 'handleDragOver($event)',\n '(dragenter)': 'handleDragEnter($event)',\n '(dragleave)': 'handleDragLeave($event)',\n '(dragend)': 'handleDragEnd($event)',\n '(drop)': 'handleDrop($event)',\n }\n})\nexport class UploadAreaComponent {\n protected _renderer = inject(Renderer2);\n\n accept = input<string>();\n allowHover = input(true, {\n transform: booleanAttribute\n });\n multiple = input(false, {\n transform: booleanAttribute\n });\n\n readonly fileSelected = output<UploadFileSelectedEvent>();\n protected isDropActive = signal(false);\n protected isDropInvalid = signal(false);\n\n get api() {\n return {\n isDropActive: this.isDropActive()\n }\n }\n\n protected handleDragOver(event: any) {\n event.preventDefault();\n }\n\n protected handleDragEnter(event: any) {\n if (event.dataTransfer) {\n const items = event.dataTransfer.items;\n let allFilesAreValid = true;\n\n if (this.accept()) {\n const accept = (this.accept() as string).split(',');\n\n if (items && items.length > 0) {\n const draggedItems = Array.from(items);\n allFilesAreValid = draggedItems.every(\n (item: any) => item.kind === 'file' && this.isMimeTypeAllowed(item.type, accept)\n );\n }\n }\n\n this.isDropActive.set(allFilesAreValid);\n this.isDropInvalid.set(!allFilesAreValid);\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n protected handleDragLeave(event: DragEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement;\n\n if (!relatedTarget.closest('.emr-upload-area')) {\n this.isDropActive.set(false);\n this.isDropInvalid.set(false);\n }\n\n event.preventDefault();\n }\n\n protected handleDragEnd(event: any) {\n this.isDropActive.set(false);\n this.isDropInvalid.set(false);\n event.preventDefault();\n }\n\n protected handleDrop(event: DragEvent) {\n event.preventDefault();\n this.isDropActive.set(false);\n this.isDropInvalid.set(false);\n\n if (event.dataTransfer) {\n const accept = (this.accept() as string).split(',');\n const files: File[] = Array.from(event.dataTransfer?.files).filter(file => this.isMimeTypeAllowed(file.type, accept));\n\n if (files.length === 0) {\n return;\n }\n\n this.fileSelected.emit({\n multiple: this.multiple(),\n fileList: event.dataTransfer.files,\n event,\n files\n });\n }\n }\n\n private isMimeTypeAllowed(\n fileMimeType: string,\n allowedMimeTypes: string[]\n ): boolean {\n return allowedMimeTypes.some(allowedType => {\n if (allowedType === '*/*' || allowedType === '*') {\n return true;\n }\n\n if (allowedType.endsWith('/*')) {\n const baseType = allowedType.slice(0, -2);\n return fileMimeType.startsWith(`${baseType}/`);\n }\n\n return fileMimeType === allowedType;\n });\n }\n}\n","<div class=\"icon\">\n <ng-content select=\"[emrUploadAreaIcon]\"/>\n</div>\n<div class=\"content\">\n <ng-content/>\n <div class=\"state\" [class.is-active]=\"!isDropActive() && !isDropInvalid()\">\n <ng-content select=\"[emrUploadAreaMainState]\"/>\n </div>\n <div class=\"state\" [class.is-active]=\"isDropActive() && !isDropInvalid()\">\n <ng-content select=\"[emrUploadAreaDropState]\"/>\n </div>\n <div class=\"state\" [class.is-active]=\"isDropInvalid()\">\n <ng-content select=\"[emrUploadAreaInvalidState]\"/>\n </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-file-list',\n exportAs: 'emrFileList',\n templateUrl: './file-list.component.html',\n styleUrl: './file-list.component.scss',\n host: {\n 'class': 'emr-file-list'\n }\n})\nexport class FileListComponent {\n}\n","<ng-content/>\n","import { ChangeDetectionStrategy, Component, input, numberAttribute } from '@angular/core';\nimport { UploadFileState } from '../types';\n\n@Component({\n selector: 'emr-file',\n exportAs: 'emrFile',\n templateUrl: './file.component.html',\n styleUrl: './file.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'emr-file',\n '[class.has-error]': \"state() === 'error'\"\n }\n})\nexport class FileComponent {\n name = input.required();\n size = input();\n progress = input(0, {\n transform: numberAttribute\n });\n progressingMessage = input();\n errorMessage = input();\n remainingTime = input();\n state = input<UploadFileState>('uploading');\n}\n","<div class=\"content\">\n <div class=\"flex items-center min-w-0\">\n <div class=\"overflow-hidden overflow-ellipsis whitespace-nowrap grow name\">{{ name() }}</div>\n <div class=\"controls\">\n <ng-content select=\"emr-file-control,[emr-file-control]\"/>\n </div>\n </div>\n @if (size() || (state() === 'uploading' && progress())) {\n <div class=\"info\">\n @if (size()) {\n <span class=\"uppercase\">{{ size() }}</span>\n }\n @if (size() && progress()) {\n ,\n }\n @if (progress()) {\n {{ progress() }}%\n }\n @if (remainingTime()) {\n {{ remainingTime() }}\n }\n </div>\n }\n @if (progress()) {\n <div class=\"progress\">\n <div class=\"progress-bar\" [style.width.%]=\"progress()\"></div>\n </div>\n }\n @if (state() === 'error' && errorMessage()) {\n <div class=\"error\">\n {{ errorMessage() }}\n </div>\n }\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-file-control,[emr-file-control]',\n exportAs: 'emrFileControl',\n templateUrl: './file-control.component.html',\n styleUrl: './file-control.component.scss',\n host: {\n 'class': 'emr-file-control'\n }\n})\nexport class FileControlComponent {\n}\n","<ng-content></ng-content>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-files-grid',\n exportAs: 'emrFilesGrid',\n templateUrl: './files-grid.component.html',\n styleUrl: './files-grid.component.scss',\n host: {\n 'class': 'emr-files-grid'\n }\n})\nexport class FilesGridComponent {\n\n}\n","<ng-content></ng-content>\n","import { ChangeDetectionStrategy, Component, input, numberAttribute } from '@angular/core';\nimport { UploadFileState } from '../types';\nimport { GaugeComponent, GaugeValueComponent } from '@elementar-rt/components/gauge';\n\n@Component({\n selector: 'emr-grid-file',\n exportAs: 'emrGridFile',\n imports: [\n GaugeValueComponent,\n GaugeComponent\n ],\n templateUrl: './grid-file.component.html',\n styleUrl: './grid-file.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'emr-grid-file',\n '[class.has-error]': \"state() === 'error'\"\n }\n})\nexport class GridFileComponent {\n name = input.required();\n size = input();\n progress = input(0, {\n transform: numberAttribute\n });\n progressingMessage = input();\n errorMessage = input();\n remainingTime = input();\n state = input<UploadFileState>('uploading');\n}\n","<div class=\"flex items-center gap-2.5\">\n <div class=\"icon\">\n <ng-content select=\"[emrFileIcon]\"/>\n </div>\n <div>\n <div class=\"text-sm overflow-hidden text-ellipsis whitespace-nowrap max-w-[220px]\">{{ name() }}</div>\n @if (size()) {\n <div class=\"text-xs text-neutral-500 overflow-hidden text-ellipsis whitespace-nowrap max-w-[220px]\">{{ size() }}</div>\n }\n </div>\n</div>\n<div class=\"flex items-center gap-1\">\n @if (state() === 'uploading') {\n <emr-gauge class=\"size-10\" [value]=\"progress()\">\n <emr-gauge-value class=\"text-2xs\">{{ progress() }}%</emr-gauge-value>\n </emr-gauge>\n }\n\n <div class=\"controls\">\n <ng-content select=\"[emrGridFileControl]\"/>\n </div>\n</div>\n\n@if (state() === 'error' && errorMessage()) {\n <div class=\"error\">\n {{ errorMessage() }}\n </div>\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-upload-container',\n imports: [],\n templateUrl: './upload-container.component.html',\n styleUrl: './upload-container.component.scss'\n})\nexport class UploadContainerComponent {\n\n}\n","<ng-content select=\"emr-upload-area\"/>\n<div class=\"flex items-center justify-between mt-2 hints\">\n <ng-content select=\"emr-upload-allowed-types\"/>\n <ng-content select=\"emr-upload-max-file-size\"/>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-upload-max-file-size',\n imports: [],\n templateUrl: './upload-max-file-size.component.html',\n styleUrl: './upload-max-file-size.component.scss'\n})\nexport class UploadMaxFileSizeComponent {\n\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-upload-allowed-types',\n imports: [],\n templateUrl: './upload-allowed-types.component.html',\n styleUrl: './upload-allowed-types.component.scss'\n})\nexport class UploadAllowedTypesComponent {\n\n}\n","<ng-content/>\n","import {\n booleanAttribute,\n DestroyRef,\n Directive, ElementRef,\n inject,\n input, output,\n Renderer2\n} from '@angular/core';\nimport { UploadFileSelectedEvent } from './types';\nimport { fromEvent } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: '[emrUploadTrigger]',\n exportAs: 'emrUploadTrigger',\n standalone: true,\n host: {\n '(click)': '_handleClick()'\n }\n})\nexport class UploadTriggerDirective {\n private _elementRef = inject(ElementRef);\n protected _renderer = inject(Renderer2);\n protected _destroyRef = inject(DestroyRef);\n\n accept = input<string>();\n multiple = input(false, {\n transform: booleanAttribute\n });\n\n readonly fileSelected = output<UploadFileSelectedEvent>();\n\n _handleClick() {\n const element: HTMLInputElement = this._renderer.createElement('input');\n this._renderer.setAttribute(element, 'type', 'file');\n let accept = this.accept();\n\n if (!accept) {\n accept = this._elementRef.nativeElement.getAttribute('accept') || '';\n }\n\n if (accept) {\n this._renderer.setAttribute(element, 'accept', accept);\n }\n\n if (this.multiple()) {\n this._renderer.setAttribute(element, 'multiple', '');\n }\n\n fromEvent(element, 'change')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(event => {\n const files: File[] = [];\n\n if (element.files) {\n for (let i = 0; i < element.files.length; i++) {\n files.push(element.files[i]);\n }\n }\n\n this.fileSelected.emit({\n multiple: this.multiple(),\n fileList: element.files,\n event,\n files\n });\n })\n ;\n element.click();\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[emrUploadAreaIcon]'\n})\nexport class UploadAreaIconDirective {\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[emrUploadAreaMainState]'\n})\nexport class UploadAreaMainStateDirective {\n readonly templateRef = inject(TemplateRef, { optional: true });\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[emrUploadAreaDropState]'\n})\nexport class UploadAreaDropStateDirective {\n readonly templateRef = inject(TemplateRef, { optional: true });\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[emrUploadAreaInvalidState]'\n})\nexport class UploadAreaInvalidStateDirective {\n readonly templateRef = inject(TemplateRef, { optional: true });\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[emrFileIcon]'\n})\nexport class FileIconDirective {\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[emrGridFileControl]'\n})\nexport class GridFileControlDirective {\n\n constructor() { }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"elementar-rt-components-upload.mjs","sources":["../../../projects/components/upload/src/upload-area/upload-area.component.ts","../../../projects/components/upload/src/upload-area/upload-area.component.html","../../../projects/components/upload/src/file-list/file-list.component.ts","../../../projects/components/upload/src/file-list/file-list.component.html","../../../projects/components/upload/src/file/file.component.ts","../../../projects/components/upload/src/file/file.component.html","../../../projects/components/upload/src/file-control/file-control.component.ts","../../../projects/components/upload/src/file-control/file-control.component.html","../../../projects/components/upload/src/files-grid/files-grid.component.ts","../../../projects/components/upload/src/files-grid/files-grid.component.html","../../../projects/components/upload/src/grid-file/grid-file.component.ts","../../../projects/components/upload/src/grid-file/grid-file.component.html","../../../projects/components/upload/src/upload-container/upload-container.component.ts","../../../projects/components/upload/src/upload-container/upload-container.component.html","../../../projects/components/upload/src/upload-max-file-size/upload-max-file-size.component.ts","../../../projects/components/upload/src/upload-max-file-size/upload-max-file-size.component.html","../../../projects/components/upload/src/upload-allowed-types/upload-allowed-types.component.ts","../../../projects/components/upload/src/upload-allowed-types/upload-allowed-types.component.html","../../../projects/components/upload/src/upload-trigger.directive.ts","../../../projects/components/upload/src/upload-area-icon.directive.ts","../../../projects/components/upload/src/upload-area-main-state.directive.ts","../../../projects/components/upload/src/upload-area-drop-state.directive.ts","../../../projects/components/upload/src/upload-area-invalid-state.directive.ts","../../../projects/components/upload/src/file-icon.directive.ts","../../../projects/components/upload/src/grid-file-control.directive.ts","../../../projects/components/upload/elementar-rt-components-upload.ts"],"sourcesContent":["import {\n booleanAttribute,\n Component,\n inject, input,\n output,\n Renderer2, signal,\n} from '@angular/core';\nimport { UploadFileSelectedEvent } from '../types';\n\n@Component({\n selector: 'emr-upload-area',\n exportAs: 'emrUploadArea',\n templateUrl: './upload-area.component.html',\n styleUrl: './upload-area.component.scss',\n imports: [\n ],\n host: {\n 'class': 'emr-upload-area',\n '[class.is-drop-active]': 'isDropActive()',\n '[class.is-drop-invalid]': 'isDropInvalid()',\n '[class.is-allow-hover]': 'allowHover()',\n '(dragover)': 'handleDragOver($event)',\n '(dragenter)': 'handleDragEnter($event)',\n '(dragleave)': 'handleDragLeave($event)',\n '(dragend)': 'handleDragEnd($event)',\n '(drop)': 'handleDrop($event)',\n }\n})\nexport class UploadAreaComponent {\n protected _renderer = inject(Renderer2);\n\n accept = input<string>();\n allowHover = input(true, {\n transform: booleanAttribute\n });\n multiple = input(false, {\n transform: booleanAttribute\n });\n\n readonly fileSelected = output<UploadFileSelectedEvent>();\n protected isDropActive = signal(false);\n protected isDropInvalid = signal(false);\n\n get api() {\n return {\n isDropActive: this.isDropActive()\n }\n }\n\n protected handleDragOver(event: any) {\n event.preventDefault();\n }\n\n protected handleDragEnter(event: any) {\n if (event.dataTransfer) {\n const items = event.dataTransfer.items;\n let allFilesAreValid = true;\n\n if (this.accept()) {\n const accept = (this.accept() as string).split(',');\n\n if (items && items.length > 0) {\n const draggedItems = Array.from(items);\n allFilesAreValid = draggedItems.every(\n (item: any) => item.kind === 'file' && this.isMimeTypeAllowed(item.type, accept)\n );\n }\n }\n\n this.isDropActive.set(allFilesAreValid);\n this.isDropInvalid.set(!allFilesAreValid);\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n protected handleDragLeave(event: DragEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement;\n\n if (!relatedTarget.closest('.emr-upload-area')) {\n this.isDropActive.set(false);\n this.isDropInvalid.set(false);\n }\n\n event.preventDefault();\n }\n\n protected handleDragEnd(event: any) {\n this.isDropActive.set(false);\n this.isDropInvalid.set(false);\n event.preventDefault();\n }\n\n protected handleDrop(event: DragEvent) {\n event.preventDefault();\n this.isDropActive.set(false);\n this.isDropInvalid.set(false);\n\n if (event.dataTransfer) {\n // `accept` is optional; unlike handleDragEnter, this used to split it\n // unconditionally, throwing on every drop when no accept was configured.\n const accept = this.accept() ? (this.accept() as string).split(',') : ['*/*'];\n const files: File[] = Array.from(event.dataTransfer?.files).filter(file => this.isMimeTypeAllowed(file.type, accept));\n\n if (files.length === 0) {\n return;\n }\n\n this.fileSelected.emit({\n multiple: this.multiple(),\n fileList: event.dataTransfer.files,\n event,\n files\n });\n }\n }\n\n private isMimeTypeAllowed(\n fileMimeType: string,\n allowedMimeTypes: string[]\n ): boolean {\n return allowedMimeTypes.some(allowedType => {\n if (allowedType === '*/*' || allowedType === '*') {\n return true;\n }\n\n if (allowedType.endsWith('/*')) {\n const baseType = allowedType.slice(0, -2);\n return fileMimeType.startsWith(`${baseType}/`);\n }\n\n return fileMimeType === allowedType;\n });\n }\n}\n","<div class=\"icon\">\n <ng-content select=\"[emrUploadAreaIcon]\"/>\n</div>\n<div class=\"content\">\n <ng-content/>\n <div class=\"state\" [class.is-active]=\"!isDropActive() && !isDropInvalid()\">\n <ng-content select=\"[emrUploadAreaMainState]\"/>\n </div>\n <div class=\"state\" [class.is-active]=\"isDropActive() && !isDropInvalid()\">\n <ng-content select=\"[emrUploadAreaDropState]\"/>\n </div>\n <div class=\"state\" [class.is-active]=\"isDropInvalid()\">\n <ng-content select=\"[emrUploadAreaInvalidState]\"/>\n </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-file-list',\n exportAs: 'emrFileList',\n templateUrl: './file-list.component.html',\n styleUrl: './file-list.component.scss',\n host: {\n 'class': 'emr-file-list'\n }\n})\nexport class FileListComponent {\n}\n","<ng-content/>\n","import { ChangeDetectionStrategy, Component, input, numberAttribute } from '@angular/core';\nimport { UploadFileState } from '../types';\n\n@Component({\n selector: 'emr-file',\n exportAs: 'emrFile',\n templateUrl: './file.component.html',\n styleUrl: './file.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'emr-file',\n '[class.has-error]': \"state() === 'error'\"\n }\n})\nexport class FileComponent {\n name = input.required();\n size = input();\n progress = input(0, {\n transform: numberAttribute\n });\n progressingMessage = input();\n errorMessage = input();\n remainingTime = input();\n state = input<UploadFileState>('uploading');\n}\n","<div class=\"content\">\n <div class=\"flex items-center min-w-0\">\n <div class=\"overflow-hidden overflow-ellipsis whitespace-nowrap grow name\">{{ name() }}</div>\n <div class=\"controls\">\n <ng-content select=\"emr-file-control,[emr-file-control]\"/>\n </div>\n </div>\n @if (size() || (state() === 'uploading' && progress())) {\n <div class=\"info\">\n @if (size()) {\n <span class=\"uppercase\">{{ size() }}</span>\n }\n @if (size() && progress()) {\n ,\n }\n @if (progress()) {\n {{ progress() }}%\n }\n @if (remainingTime()) {\n {{ remainingTime() }}\n }\n </div>\n }\n @if (progress()) {\n <div class=\"progress\">\n <div class=\"progress-bar\" [style.width.%]=\"progress()\"></div>\n </div>\n }\n @if (state() === 'error' && errorMessage()) {\n <div class=\"error\">\n {{ errorMessage() }}\n </div>\n }\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-file-control,[emr-file-control]',\n exportAs: 'emrFileControl',\n templateUrl: './file-control.component.html',\n styleUrl: './file-control.component.scss',\n host: {\n 'class': 'emr-file-control'\n }\n})\nexport class FileControlComponent {\n}\n","<ng-content></ng-content>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-files-grid',\n exportAs: 'emrFilesGrid',\n templateUrl: './files-grid.component.html',\n styleUrl: './files-grid.component.scss',\n host: {\n 'class': 'emr-files-grid'\n }\n})\nexport class FilesGridComponent {\n\n}\n","<ng-content></ng-content>\n","import { ChangeDetectionStrategy, Component, input, numberAttribute } from '@angular/core';\nimport { UploadFileState } from '../types';\nimport { GaugeComponent, GaugeValueComponent } from '@elementar-rt/components/gauge';\n\n@Component({\n selector: 'emr-grid-file',\n exportAs: 'emrGridFile',\n imports: [\n GaugeValueComponent,\n GaugeComponent\n ],\n templateUrl: './grid-file.component.html',\n styleUrl: './grid-file.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'emr-grid-file',\n '[class.has-error]': \"state() === 'error'\"\n }\n})\nexport class GridFileComponent {\n name = input.required();\n size = input();\n progress = input(0, {\n transform: numberAttribute\n });\n progressingMessage = input();\n errorMessage = input();\n remainingTime = input();\n state = input<UploadFileState>('uploading');\n}\n","<div class=\"flex items-center gap-2.5\">\n <div class=\"icon\">\n <ng-content select=\"[emrFileIcon]\"/>\n </div>\n <div>\n <div class=\"text-sm overflow-hidden text-ellipsis whitespace-nowrap max-w-[220px]\">{{ name() }}</div>\n @if (size()) {\n <div class=\"text-xs text-neutral-500 overflow-hidden text-ellipsis whitespace-nowrap max-w-[220px]\">{{ size() }}</div>\n }\n </div>\n</div>\n<div class=\"flex items-center gap-1\">\n @if (state() === 'uploading') {\n <emr-gauge class=\"size-10\" [value]=\"progress()\">\n <emr-gauge-value class=\"text-2xs\">{{ progress() }}%</emr-gauge-value>\n </emr-gauge>\n }\n\n <div class=\"controls\">\n <ng-content select=\"[emrGridFileControl]\"/>\n </div>\n</div>\n\n@if (state() === 'error' && errorMessage()) {\n <div class=\"error\">\n {{ errorMessage() }}\n </div>\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-upload-container',\n imports: [],\n templateUrl: './upload-container.component.html',\n styleUrl: './upload-container.component.scss'\n})\nexport class UploadContainerComponent {\n\n}\n","<ng-content select=\"emr-upload-area\"/>\n<div class=\"flex items-center justify-between mt-2 hints\">\n <ng-content select=\"emr-upload-allowed-types\"/>\n <ng-content select=\"emr-upload-max-file-size\"/>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-upload-max-file-size',\n imports: [],\n templateUrl: './upload-max-file-size.component.html',\n styleUrl: './upload-max-file-size.component.scss'\n})\nexport class UploadMaxFileSizeComponent {\n\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-upload-allowed-types',\n imports: [],\n templateUrl: './upload-allowed-types.component.html',\n styleUrl: './upload-allowed-types.component.scss'\n})\nexport class UploadAllowedTypesComponent {\n\n}\n","<ng-content/>\n","import {\n booleanAttribute,\n DestroyRef,\n Directive, ElementRef,\n inject,\n input, output,\n Renderer2\n} from '@angular/core';\nimport { UploadFileSelectedEvent } from './types';\nimport { fromEvent } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: '[emrUploadTrigger]',\n exportAs: 'emrUploadTrigger',\n standalone: true,\n host: {\n '(click)': '_handleClick()'\n }\n})\nexport class UploadTriggerDirective {\n private _elementRef = inject(ElementRef);\n protected _renderer = inject(Renderer2);\n protected _destroyRef = inject(DestroyRef);\n\n accept = input<string>();\n multiple = input(false, {\n transform: booleanAttribute\n });\n\n readonly fileSelected = output<UploadFileSelectedEvent>();\n\n _handleClick() {\n const element: HTMLInputElement = this._renderer.createElement('input');\n this._renderer.setAttribute(element, 'type', 'file');\n let accept = this.accept();\n\n if (!accept) {\n accept = this._elementRef.nativeElement.getAttribute('accept') || '';\n }\n\n if (accept) {\n this._renderer.setAttribute(element, 'accept', accept);\n }\n\n if (this.multiple()) {\n this._renderer.setAttribute(element, 'multiple', '');\n }\n\n fromEvent(element, 'change')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(event => {\n const files: File[] = [];\n\n if (element.files) {\n for (let i = 0; i < element.files.length; i++) {\n files.push(element.files[i]);\n }\n }\n\n this.fileSelected.emit({\n multiple: this.multiple(),\n fileList: element.files,\n event,\n files\n });\n })\n ;\n element.click();\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[emrUploadAreaIcon]'\n})\nexport class UploadAreaIconDirective {\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[emrUploadAreaMainState]'\n})\nexport class UploadAreaMainStateDirective {\n readonly templateRef = inject(TemplateRef, { optional: true });\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[emrUploadAreaDropState]'\n})\nexport class UploadAreaDropStateDirective {\n readonly templateRef = inject(TemplateRef, { optional: true });\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[emrUploadAreaInvalidState]'\n})\nexport class UploadAreaInvalidStateDirective {\n readonly templateRef = inject(TemplateRef, { optional: true });\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[emrFileIcon]'\n})\nexport class FileIconDirective {\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[emrGridFileControl]'\n})\nexport class GridFileControlDirective {\n\n constructor() { }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,28 +2,28 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { input, booleanAttribute, viewChild, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
class VideoPlayerComponent {
|
|
5
|
-
src = input('', ...(ngDevMode ? [{ debugName: "src" }] : []));
|
|
6
|
-
poster = input('', ...(ngDevMode ? [{ debugName: "poster" }] : []));
|
|
7
|
-
autoplay = input(false, ...(ngDevMode ?
|
|
8
|
-
loop = input(false, ...(ngDevMode ?
|
|
9
|
-
chapters = input([], ...(ngDevMode ? [{ debugName: "chapters" }] : []));
|
|
10
|
-
_videoEl = viewChild('videoEl', ...(ngDevMode ? [{ debugName: "_videoEl" }] : []));
|
|
11
|
-
_playing = signal(false, ...(ngDevMode ? [{ debugName: "_playing" }] : []));
|
|
12
|
-
_muted = signal(false, ...(ngDevMode ? [{ debugName: "_muted" }] : []));
|
|
13
|
-
_volume = signal(1, ...(ngDevMode ? [{ debugName: "_volume" }] : []));
|
|
14
|
-
_currentTime = signal(0, ...(ngDevMode ? [{ debugName: "_currentTime" }] : []));
|
|
15
|
-
_duration = signal(0, ...(ngDevMode ? [{ debugName: "_duration" }] : []));
|
|
16
|
-
_buffered = signal(0, ...(ngDevMode ? [{ debugName: "_buffered" }] : []));
|
|
17
|
-
_speed = signal(1, ...(ngDevMode ? [{ debugName: "_speed" }] : []));
|
|
18
|
-
_showSpeedMenu = signal(false, ...(ngDevMode ? [{ debugName: "_showSpeedMenu" }] : []));
|
|
19
|
-
_fullscreen = signal(false, ...(ngDevMode ? [{ debugName: "_fullscreen" }] : []));
|
|
20
|
-
_progress = computed(() => this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_progress" }] : []));
|
|
21
|
-
_bufferedPct = computed(() => this._duration() > 0 ? (this._buffered() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_bufferedPct" }] : []));
|
|
5
|
+
src = input('', ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
6
|
+
poster = input('', ...(ngDevMode ? [{ debugName: "poster" }] : /* istanbul ignore next */ []));
|
|
7
|
+
autoplay = input(false, { ...(ngDevMode ? { debugName: "autoplay" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
8
|
+
loop = input(false, { ...(ngDevMode ? { debugName: "loop" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
9
|
+
chapters = input([], ...(ngDevMode ? [{ debugName: "chapters" }] : /* istanbul ignore next */ []));
|
|
10
|
+
_videoEl = viewChild('videoEl', ...(ngDevMode ? [{ debugName: "_videoEl" }] : /* istanbul ignore next */ []));
|
|
11
|
+
_playing = signal(false, ...(ngDevMode ? [{ debugName: "_playing" }] : /* istanbul ignore next */ []));
|
|
12
|
+
_muted = signal(false, ...(ngDevMode ? [{ debugName: "_muted" }] : /* istanbul ignore next */ []));
|
|
13
|
+
_volume = signal(1, ...(ngDevMode ? [{ debugName: "_volume" }] : /* istanbul ignore next */ []));
|
|
14
|
+
_currentTime = signal(0, ...(ngDevMode ? [{ debugName: "_currentTime" }] : /* istanbul ignore next */ []));
|
|
15
|
+
_duration = signal(0, ...(ngDevMode ? [{ debugName: "_duration" }] : /* istanbul ignore next */ []));
|
|
16
|
+
_buffered = signal(0, ...(ngDevMode ? [{ debugName: "_buffered" }] : /* istanbul ignore next */ []));
|
|
17
|
+
_speed = signal(1, ...(ngDevMode ? [{ debugName: "_speed" }] : /* istanbul ignore next */ []));
|
|
18
|
+
_showSpeedMenu = signal(false, ...(ngDevMode ? [{ debugName: "_showSpeedMenu" }] : /* istanbul ignore next */ []));
|
|
19
|
+
_fullscreen = signal(false, ...(ngDevMode ? [{ debugName: "_fullscreen" }] : /* istanbul ignore next */ []));
|
|
20
|
+
_progress = computed(() => this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_progress" }] : /* istanbul ignore next */ []));
|
|
21
|
+
_bufferedPct = computed(() => this._duration() > 0 ? (this._buffered() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_bufferedPct" }] : /* istanbul ignore next */ []));
|
|
22
22
|
_currentChapter = computed(() => {
|
|
23
23
|
const t = this._currentTime();
|
|
24
24
|
const chapters = [...this.chapters()].sort((a, b) => b.time - a.time);
|
|
25
25
|
return chapters.find(c => t >= c.time)?.label ?? '';
|
|
26
|
-
}, ...(ngDevMode ? [{ debugName: "_currentChapter" }] : []));
|
|
26
|
+
}, ...(ngDevMode ? [{ debugName: "_currentChapter" }] : /* istanbul ignore next */ []));
|
|
27
27
|
_speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
|
|
28
28
|
ngAfterViewInit() {
|
|
29
29
|
const v = this._videoEl()?.nativeElement;
|
|
@@ -128,12 +128,12 @@ class VideoPlayerComponent {
|
|
|
128
128
|
_video() {
|
|
129
129
|
return this._videoEl()?.nativeElement ?? null;
|
|
130
130
|
}
|
|
131
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
132
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
131
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: VideoPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
132
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: VideoPlayerComponent, isStandalone: true, selector: "emr-video-player", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, poster: { classPropertyName: "poster", publicName: "poster", isSignal: true, isRequired: false, transformFunction: null }, autoplay: { classPropertyName: "autoplay", publicName: "autoplay", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, chapters: { classPropertyName: "chapters", publicName: "chapters", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_videoEl", first: true, predicate: ["videoEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"vp-container\">\n <video\n #videoEl\n class=\"vp-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [loop]=\"loop()\"\n [muted]=\"_muted()\"\n (timeupdate)=\"_onTimeUpdate()\"\n (play)=\"_onPlay()\"\n (pause)=\"_onPause()\"\n (loadedmetadata)=\"_onLoadedMetadata()\"\n (click)=\"_togglePlay()\"\n ></video>\n\n @if (_currentChapter()) {\n <div class=\"vp-chapter-badge\">{{ _currentChapter() }}</div>\n }\n\n <div class=\"vp-controls\">\n <!-- Progress bar -->\n <div class=\"vp-progress-wrap\">\n <div class=\"vp-buffered\" [style.width.%]=\"_bufferedPct()\"></div>\n <input\n type=\"range\" class=\"vp-seek\"\n min=\"0\" max=\"100\" step=\"0.1\"\n [value]=\"_progress()\"\n (input)=\"_onSeek($event)\"\n />\n @for (ch of chapters(); track ch.time) {\n <div class=\"vp-chapter-marker\" [style.left.%]=\"_chapterOffset(ch)\" [title]=\"ch.label\"></div>\n }\n </div>\n\n <!-- Bottom bar -->\n <div class=\"vp-bar\">\n <div class=\"vp-bar-left\">\n <!-- Play/Pause -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePlay()\" [attr.aria-label]=\"_playing() ? 'Pause' : 'Play'\">\n @if (_playing()) {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><polygon points=\"5 3 19 12 5 21 5 3\"/></svg>\n }\n </button>\n\n <!-- Volume -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleMute()\" aria-label=\"Mute\">\n @if (_muted() || _volume() === 0) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>\n }\n </button>\n <input type=\"range\" class=\"vp-volume\" min=\"0\" max=\"1\" step=\"0.05\" [value]=\"_volume()\" (input)=\"_onVolumeChange($event)\" aria-label=\"Volume\" />\n\n <!-- Time -->\n <span class=\"vp-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n </div>\n\n <div class=\"vp-bar-right\">\n <!-- Speed -->\n <div class=\"vp-speed-wrap\">\n <button type=\"button\" class=\"vp-btn vp-speed-btn\" (click)=\"_showSpeedMenu.set(!_showSpeedMenu())\">\n {{ _speed() }}\u00D7\n </button>\n @if (_showSpeedMenu()) {\n <div class=\"vp-speed-menu\">\n @for (s of _speeds; track s) {\n <button type=\"button\" class=\"vp-speed-opt\" [attr.data-active]=\"_speed() === s || null\" (click)=\"_setSpeed(s)\">{{ s }}\u00D7</button>\n }\n </div>\n }\n </div>\n\n <!-- PiP -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePiP()\" aria-label=\"Picture in picture\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><rect x=\"12\" y=\"10\" width=\"8\" height=\"6\" rx=\"1\" fill=\"currentColor\"/></svg>\n </button>\n\n <!-- Fullscreen -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleFullscreen()\" aria-label=\"Fullscreen\">\n @if (_fullscreen()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>\n }\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.vp-container{position:relative;background:#000;border-radius:.75rem;overflow:hidden;aspect-ratio:16/9}.vp-container:hover .vp-controls{opacity:1}.vp-video{width:100%;height:100%;object-fit:contain;cursor:pointer;display:block}.vp-chapter-badge{position:absolute;top:calc(var(--spacing, .25rem) * 3);left:calc(var(--spacing, .25rem) * 3);background:#0009;color:#fff;font-size:.75rem;font-weight:600;padding:calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);border-radius:9999px}.vp-controls{position:absolute;bottom:0;left:0;right:0;padding:calc(var(--spacing, .25rem) * 4) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 2);background:linear-gradient(transparent,#000000b3);opacity:0;transition:opacity .2s ease;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.vp-progress-wrap{position:relative;height:calc(var(--spacing, .25rem) * 4);display:flex;align-items:center}.vp-buffered{position:absolute;left:0;height:3px;background:#ffffff4d;border-radius:9999px;pointer-events:none;z-index:0}.vp-seek{width:100%;position:relative;z-index:1;accent-color:var(--color-primary);cursor:pointer;background:transparent;height:3px}.vp-chapter-marker{position:absolute;width:2px;height:calc(var(--spacing, .25rem) * 2.5);background:#fff9;border-radius:1px;z-index:2;pointer-events:none;transform:translate(-50%)}.vp-bar{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.vp-bar-left,.vp-bar-right{display:flex;align-items:center;gap:var(--spacing, .25rem)}.vp-btn{width:calc(var(--spacing, .25rem) * 8);height:calc(var(--spacing, .25rem) * 8);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:#fff;border-radius:.375rem}.vp-btn:hover{background:#ffffff26}.vp-btn svg{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4)}.vp-volume{width:calc(var(--spacing, .25rem) * 20);accent-color:var(--color-primary);cursor:pointer}.vp-time{font-size:.75rem;color:#ffffffd9;white-space:nowrap;font-variant-numeric:tabular-nums}.vp-speed-wrap{position:relative}.vp-speed-btn{font-size:.75rem;font-weight:700;width:auto;padding:0 calc(var(--spacing, .25rem) * 1.5);min-width:calc(var(--spacing, .25rem) * 9)}.vp-speed-menu{position:absolute;bottom:calc(100% + calc(var(--spacing, .25rem) * 2));right:0;background:var(--color-surface-container-high);border:1px solid var(--color-outline-variant);border-radius:.5rem;overflow:hidden;display:flex;flex-direction:column;min-width:calc(var(--spacing, .25rem) * 16);box-shadow:0 4px 16px #0000004d}.vp-speed-opt{font-size:.875rem;padding:calc(var(--spacing, .25rem) * 1.5) calc(var(--spacing, .25rem) * 3);background:transparent;border:none;cursor:pointer;text-align:center;color:var(--color-on-surface)}.vp-speed-opt:hover{background:var(--color-surface-container)}.vp-speed-opt[data-active]{color:var(--color-primary);font-weight:600}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
133
133
|
}
|
|
134
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: VideoPlayerComponent, decorators: [{
|
|
135
135
|
type: Component,
|
|
136
|
-
args: [{ selector: 'emr-video-player', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"vp-container\">\n <video\n #videoEl\n class=\"vp-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [loop]=\"loop()\"\n [muted]=\"_muted()\"\n (timeupdate)=\"_onTimeUpdate()\"\n (play)=\"_onPlay()\"\n (pause)=\"_onPause()\"\n (loadedmetadata)=\"_onLoadedMetadata()\"\n (click)=\"_togglePlay()\"\n ></video>\n\n @if (_currentChapter()) {\n <div class=\"vp-chapter-badge\">{{ _currentChapter() }}</div>\n }\n\n <div class=\"vp-controls\">\n <!-- Progress bar -->\n <div class=\"vp-progress-wrap\">\n <div class=\"vp-buffered\" [style.width.%]=\"_bufferedPct()\"></div>\n <input\n type=\"range\" class=\"vp-seek\"\n min=\"0\" max=\"100\" step=\"0.1\"\n [value]=\"_progress()\"\n (input)=\"_onSeek($event)\"\n />\n @for (ch of chapters(); track ch.time) {\n <div class=\"vp-chapter-marker\" [style.left.%]=\"_chapterOffset(ch)\" [title]=\"ch.label\"></div>\n }\n </div>\n\n <!-- Bottom bar -->\n <div class=\"vp-bar\">\n <div class=\"vp-bar-left\">\n <!-- Play/Pause -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePlay()\" [attr.aria-label]=\"_playing() ? 'Pause' : 'Play'\">\n @if (_playing()) {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><polygon points=\"5 3 19 12 5 21 5 3\"/></svg>\n }\n </button>\n\n <!-- Volume -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleMute()\" aria-label=\"Mute\">\n @if (_muted() || _volume() === 0) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>\n }\n </button>\n <input type=\"range\" class=\"vp-volume\" min=\"0\" max=\"1\" step=\"0.05\" [value]=\"_volume()\" (input)=\"_onVolumeChange($event)\" aria-label=\"Volume\" />\n\n <!-- Time -->\n <span class=\"vp-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n </div>\n\n <div class=\"vp-bar-right\">\n <!-- Speed -->\n <div class=\"vp-speed-wrap\">\n <button type=\"button\" class=\"vp-btn vp-speed-btn\" (click)=\"_showSpeedMenu.set(!_showSpeedMenu())\">\n {{ _speed() }}\u00D7\n </button>\n @if (_showSpeedMenu()) {\n <div class=\"vp-speed-menu\">\n @for (s of _speeds; track s) {\n <button type=\"button\" class=\"vp-speed-opt\" [attr.data-active]=\"_speed() === s || null\" (click)=\"_setSpeed(s)\">{{ s }}\u00D7</button>\n }\n </div>\n }\n </div>\n\n <!-- PiP -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePiP()\" aria-label=\"Picture in picture\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><rect x=\"12\" y=\"10\" width=\"8\" height=\"6\" rx=\"1\" fill=\"currentColor\"/></svg>\n </button>\n\n <!-- Fullscreen -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleFullscreen()\" aria-label=\"Fullscreen\">\n @if (_fullscreen()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>\n }\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.vp-container{position:relative;background:#000;border-radius:.75rem;overflow:hidden;aspect-ratio:16/9}.vp-container:hover .vp-controls{opacity:1}.vp-video{width:100%;height:100%;object-fit:contain;cursor:pointer;display:block}.vp-chapter-badge{position:absolute;top:calc(var(--spacing, .25rem) * 3);left:calc(var(--spacing, .25rem) * 3);background:#0009;color:#fff;font-size:.75rem;font-weight:600;padding:calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);border-radius:9999px}.vp-controls{position:absolute;bottom:0;left:0;right:0;padding:calc(var(--spacing, .25rem) * 4) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 2);background:linear-gradient(transparent,#000000b3);opacity:0;transition:opacity .2s ease;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.vp-progress-wrap{position:relative;height:calc(var(--spacing, .25rem) * 4);display:flex;align-items:center}.vp-buffered{position:absolute;left:0;height:3px;background:#ffffff4d;border-radius:9999px;pointer-events:none;z-index:0}.vp-seek{width:100%;position:relative;z-index:1;accent-color:var(--color-primary);cursor:pointer;background:transparent;height:3px}.vp-chapter-marker{position:absolute;width:2px;height:calc(var(--spacing, .25rem) * 2.5);background:#fff9;border-radius:1px;z-index:2;pointer-events:none;transform:translate(-50%)}.vp-bar{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.vp-bar-left,.vp-bar-right{display:flex;align-items:center;gap:var(--spacing, .25rem)}.vp-btn{width:calc(var(--spacing, .25rem) * 8);height:calc(var(--spacing, .25rem) * 8);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:#fff;border-radius:.375rem}.vp-btn:hover{background:#ffffff26}.vp-btn svg{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4)}.vp-volume{width:calc(var(--spacing, .25rem) * 20);accent-color:var(--color-primary);cursor:pointer}.vp-time{font-size:.75rem;color:#ffffffd9;white-space:nowrap;font-variant-numeric:tabular-nums}.vp-speed-wrap{position:relative}.vp-speed-btn{font-size:.75rem;font-weight:700;width:auto;padding:0 calc(var(--spacing, .25rem) * 1.5);min-width:calc(var(--spacing, .25rem) * 9)}.vp-speed-menu{position:absolute;bottom:calc(100% + calc(var(--spacing, .25rem) * 2));right:0;background:var(--color-surface-container-high);border:1px solid var(--color-outline-variant);border-radius:.5rem;overflow:hidden;display:flex;flex-direction:column;min-width:calc(var(--spacing, .25rem) * 16);box-shadow:0 4px 16px #0000004d}.vp-speed-opt{font-size:.875rem;padding:calc(var(--spacing, .25rem) * 1.5) calc(var(--spacing, .25rem) * 3);background:transparent;border:none;cursor:pointer;text-align:center;color:var(--color-on-surface)}.vp-speed-opt:hover{background:var(--color-surface-container)}.vp-speed-opt[data-active]{color:var(--color-primary);font-weight:600}\n/*! tailwindcss v4.3.
|
|
136
|
+
args: [{ selector: 'emr-video-player', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"vp-container\">\n <video\n #videoEl\n class=\"vp-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [loop]=\"loop()\"\n [muted]=\"_muted()\"\n (timeupdate)=\"_onTimeUpdate()\"\n (play)=\"_onPlay()\"\n (pause)=\"_onPause()\"\n (loadedmetadata)=\"_onLoadedMetadata()\"\n (click)=\"_togglePlay()\"\n ></video>\n\n @if (_currentChapter()) {\n <div class=\"vp-chapter-badge\">{{ _currentChapter() }}</div>\n }\n\n <div class=\"vp-controls\">\n <!-- Progress bar -->\n <div class=\"vp-progress-wrap\">\n <div class=\"vp-buffered\" [style.width.%]=\"_bufferedPct()\"></div>\n <input\n type=\"range\" class=\"vp-seek\"\n min=\"0\" max=\"100\" step=\"0.1\"\n [value]=\"_progress()\"\n (input)=\"_onSeek($event)\"\n />\n @for (ch of chapters(); track ch.time) {\n <div class=\"vp-chapter-marker\" [style.left.%]=\"_chapterOffset(ch)\" [title]=\"ch.label\"></div>\n }\n </div>\n\n <!-- Bottom bar -->\n <div class=\"vp-bar\">\n <div class=\"vp-bar-left\">\n <!-- Play/Pause -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePlay()\" [attr.aria-label]=\"_playing() ? 'Pause' : 'Play'\">\n @if (_playing()) {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><polygon points=\"5 3 19 12 5 21 5 3\"/></svg>\n }\n </button>\n\n <!-- Volume -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleMute()\" aria-label=\"Mute\">\n @if (_muted() || _volume() === 0) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>\n }\n </button>\n <input type=\"range\" class=\"vp-volume\" min=\"0\" max=\"1\" step=\"0.05\" [value]=\"_volume()\" (input)=\"_onVolumeChange($event)\" aria-label=\"Volume\" />\n\n <!-- Time -->\n <span class=\"vp-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n </div>\n\n <div class=\"vp-bar-right\">\n <!-- Speed -->\n <div class=\"vp-speed-wrap\">\n <button type=\"button\" class=\"vp-btn vp-speed-btn\" (click)=\"_showSpeedMenu.set(!_showSpeedMenu())\">\n {{ _speed() }}\u00D7\n </button>\n @if (_showSpeedMenu()) {\n <div class=\"vp-speed-menu\">\n @for (s of _speeds; track s) {\n <button type=\"button\" class=\"vp-speed-opt\" [attr.data-active]=\"_speed() === s || null\" (click)=\"_setSpeed(s)\">{{ s }}\u00D7</button>\n }\n </div>\n }\n </div>\n\n <!-- PiP -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePiP()\" aria-label=\"Picture in picture\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><rect x=\"12\" y=\"10\" width=\"8\" height=\"6\" rx=\"1\" fill=\"currentColor\"/></svg>\n </button>\n\n <!-- Fullscreen -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleFullscreen()\" aria-label=\"Fullscreen\">\n @if (_fullscreen()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>\n }\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.vp-container{position:relative;background:#000;border-radius:.75rem;overflow:hidden;aspect-ratio:16/9}.vp-container:hover .vp-controls{opacity:1}.vp-video{width:100%;height:100%;object-fit:contain;cursor:pointer;display:block}.vp-chapter-badge{position:absolute;top:calc(var(--spacing, .25rem) * 3);left:calc(var(--spacing, .25rem) * 3);background:#0009;color:#fff;font-size:.75rem;font-weight:600;padding:calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);border-radius:9999px}.vp-controls{position:absolute;bottom:0;left:0;right:0;padding:calc(var(--spacing, .25rem) * 4) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 2);background:linear-gradient(transparent,#000000b3);opacity:0;transition:opacity .2s ease;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.vp-progress-wrap{position:relative;height:calc(var(--spacing, .25rem) * 4);display:flex;align-items:center}.vp-buffered{position:absolute;left:0;height:3px;background:#ffffff4d;border-radius:9999px;pointer-events:none;z-index:0}.vp-seek{width:100%;position:relative;z-index:1;accent-color:var(--color-primary);cursor:pointer;background:transparent;height:3px}.vp-chapter-marker{position:absolute;width:2px;height:calc(var(--spacing, .25rem) * 2.5);background:#fff9;border-radius:1px;z-index:2;pointer-events:none;transform:translate(-50%)}.vp-bar{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.vp-bar-left,.vp-bar-right{display:flex;align-items:center;gap:var(--spacing, .25rem)}.vp-btn{width:calc(var(--spacing, .25rem) * 8);height:calc(var(--spacing, .25rem) * 8);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:#fff;border-radius:.375rem}.vp-btn:hover{background:#ffffff26}.vp-btn svg{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4)}.vp-volume{width:calc(var(--spacing, .25rem) * 20);accent-color:var(--color-primary);cursor:pointer}.vp-time{font-size:.75rem;color:#ffffffd9;white-space:nowrap;font-variant-numeric:tabular-nums}.vp-speed-wrap{position:relative}.vp-speed-btn{font-size:.75rem;font-weight:700;width:auto;padding:0 calc(var(--spacing, .25rem) * 1.5);min-width:calc(var(--spacing, .25rem) * 9)}.vp-speed-menu{position:absolute;bottom:calc(100% + calc(var(--spacing, .25rem) * 2));right:0;background:var(--color-surface-container-high);border:1px solid var(--color-outline-variant);border-radius:.5rem;overflow:hidden;display:flex;flex-direction:column;min-width:calc(var(--spacing, .25rem) * 16);box-shadow:0 4px 16px #0000004d}.vp-speed-opt{font-size:.875rem;padding:calc(var(--spacing, .25rem) * 1.5) calc(var(--spacing, .25rem) * 3);background:transparent;border:none;cursor:pointer;text-align:center;color:var(--color-on-surface)}.vp-speed-opt:hover{background:var(--color-surface-container)}.vp-speed-opt[data-active]{color:var(--color-primary);font-weight:600}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
137
137
|
}], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], poster: [{ type: i0.Input, args: [{ isSignal: true, alias: "poster", required: false }] }], autoplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoplay", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], chapters: [{ type: i0.Input, args: [{ isSignal: true, alias: "chapters", required: false }] }], _videoEl: [{ type: i0.ViewChild, args: ['videoEl', { isSignal: true }] }] } });
|
|
138
138
|
|
|
139
139
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementar-rt-components-video-player.mjs","sources":["../../../projects/components/video-player/src/video-player/video-player.component.ts","../../../projects/components/video-player/src/video-player/video-player.component.html","../../../projects/components/video-player/elementar-rt-components-video-player.ts"],"sourcesContent":["import {\n Component, input, signal, computed, ChangeDetectionStrategy,\n booleanAttribute, viewChild, ElementRef, AfterViewInit, OnDestroy\n} from '@angular/core';\n\nexport interface VideoChapter {\n time: number;\n label: string;\n}\n\n@Component({\n selector: 'emr-video-player',\n standalone: true,\n templateUrl: './video-player.component.html',\n styleUrl: './video-player.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VideoPlayerComponent implements AfterViewInit, OnDestroy {\n src = input('');\n poster = input('');\n autoplay = input(false, { transform: booleanAttribute });\n loop = input(false, { transform: booleanAttribute });\n chapters = input<VideoChapter[]>([]);\n\n protected _videoEl = viewChild<ElementRef<HTMLVideoElement>>('videoEl');\n\n protected _playing = signal(false);\n protected _muted = signal(false);\n protected _volume = signal(1);\n protected _currentTime = signal(0);\n protected _duration = signal(0);\n protected _buffered = signal(0);\n protected _speed = signal(1);\n protected _showSpeedMenu = signal(false);\n protected _fullscreen = signal(false);\n\n protected _progress = computed(() =>\n this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0\n );\n\n protected _bufferedPct = computed(() =>\n this._duration() > 0 ? (this._buffered() / this._duration()) * 100 : 0\n );\n\n protected _currentChapter = computed(() => {\n const t = this._currentTime();\n const chapters = [...this.chapters()].sort((a, b) => b.time - a.time);\n return chapters.find(c => t >= c.time)?.label ?? '';\n });\n\n protected readonly _speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n\n ngAfterViewInit(): void {\n const v = this._videoEl()?.nativeElement;\n if (v && this.autoplay()) { v.play().catch(() => {}); }\n }\n\n ngOnDestroy(): void {}\n\n protected _togglePlay(): void {\n const v = this._video();\n if (!v) return;\n if (this._playing()) { v.pause(); } else { v.play().catch(() => {}); }\n }\n\n protected _toggleMute(): void {\n const v = this._video();\n if (!v) return;\n v.muted = !v.muted;\n this._muted.set(v.muted);\n }\n\n protected _onVolumeChange(e: Event): void {\n const v = this._video();\n if (!v) return;\n const vol = parseFloat((e.target as HTMLInputElement).value);\n v.volume = vol;\n v.muted = vol === 0;\n this._volume.set(vol);\n this._muted.set(v.muted);\n }\n\n protected _onSeek(e: Event): void {\n const v = this._video();\n if (!v) return;\n const pct = parseFloat((e.target as HTMLInputElement).value);\n v.currentTime = (pct / 100) * this._duration();\n }\n\n protected _setSpeed(s: number): void {\n const v = this._video();\n if (!v) return;\n v.playbackRate = s;\n this._speed.set(s);\n this._showSpeedMenu.set(false);\n }\n\n protected _togglePiP(): void {\n const v = this._video();\n if (!v) return;\n if (document.pictureInPictureElement) {\n document.exitPictureInPicture().catch(() => {});\n } else {\n v.requestPictureInPicture().catch(() => {});\n }\n }\n\n protected _toggleFullscreen(): void {\n const el = document.querySelector('.vp-container') as HTMLElement;\n if (!el) return;\n if (document.fullscreenElement) {\n document.exitFullscreen().then(() => this._fullscreen.set(false)).catch(() => {});\n } else {\n el.requestFullscreen().then(() => this._fullscreen.set(true)).catch(() => {});\n }\n }\n\n protected _onTimeUpdate(): void {\n const v = this._video();\n if (!v) return;\n this._currentTime.set(v.currentTime);\n if (v.buffered.length > 0) this._buffered.set(v.buffered.end(v.buffered.length - 1));\n }\n\n protected _onPlay(): void { this._playing.set(true); }\n protected _onPause(): void { this._playing.set(false); }\n protected _onLoadedMetadata(): void {\n const v = this._video();\n if (v) this._duration.set(v.duration);\n }\n\n protected _formatTime(s: number): string {\n if (!s || isNaN(s)) return '0:00';\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n const sec = Math.floor(s % 60);\n if (h > 0) return `${h}:${m.toString().padStart(2, '0')}:${sec.toString().padStart(2, '0')}`;\n return `${m}:${sec.toString().padStart(2, '0')}`;\n }\n\n protected _chapterOffset(chapter: VideoChapter): number {\n return this._duration() > 0 ? (chapter.time / this._duration()) * 100 : 0;\n }\n\n private _video(): HTMLVideoElement | null {\n return this._videoEl()?.nativeElement ?? null;\n }\n}\n","<div class=\"vp-container\">\n <video\n #videoEl\n class=\"vp-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [loop]=\"loop()\"\n [muted]=\"_muted()\"\n (timeupdate)=\"_onTimeUpdate()\"\n (play)=\"_onPlay()\"\n (pause)=\"_onPause()\"\n (loadedmetadata)=\"_onLoadedMetadata()\"\n (click)=\"_togglePlay()\"\n ></video>\n\n @if (_currentChapter()) {\n <div class=\"vp-chapter-badge\">{{ _currentChapter() }}</div>\n }\n\n <div class=\"vp-controls\">\n <!-- Progress bar -->\n <div class=\"vp-progress-wrap\">\n <div class=\"vp-buffered\" [style.width.%]=\"_bufferedPct()\"></div>\n <input\n type=\"range\" class=\"vp-seek\"\n min=\"0\" max=\"100\" step=\"0.1\"\n [value]=\"_progress()\"\n (input)=\"_onSeek($event)\"\n />\n @for (ch of chapters(); track ch.time) {\n <div class=\"vp-chapter-marker\" [style.left.%]=\"_chapterOffset(ch)\" [title]=\"ch.label\"></div>\n }\n </div>\n\n <!-- Bottom bar -->\n <div class=\"vp-bar\">\n <div class=\"vp-bar-left\">\n <!-- Play/Pause -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePlay()\" [attr.aria-label]=\"_playing() ? 'Pause' : 'Play'\">\n @if (_playing()) {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><polygon points=\"5 3 19 12 5 21 5 3\"/></svg>\n }\n </button>\n\n <!-- Volume -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleMute()\" aria-label=\"Mute\">\n @if (_muted() || _volume() === 0) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>\n }\n </button>\n <input type=\"range\" class=\"vp-volume\" min=\"0\" max=\"1\" step=\"0.05\" [value]=\"_volume()\" (input)=\"_onVolumeChange($event)\" aria-label=\"Volume\" />\n\n <!-- Time -->\n <span class=\"vp-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n </div>\n\n <div class=\"vp-bar-right\">\n <!-- Speed -->\n <div class=\"vp-speed-wrap\">\n <button type=\"button\" class=\"vp-btn vp-speed-btn\" (click)=\"_showSpeedMenu.set(!_showSpeedMenu())\">\n {{ _speed() }}×\n </button>\n @if (_showSpeedMenu()) {\n <div class=\"vp-speed-menu\">\n @for (s of _speeds; track s) {\n <button type=\"button\" class=\"vp-speed-opt\" [attr.data-active]=\"_speed() === s || null\" (click)=\"_setSpeed(s)\">{{ s }}×</button>\n }\n </div>\n }\n </div>\n\n <!-- PiP -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePiP()\" aria-label=\"Picture in picture\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><rect x=\"12\" y=\"10\" width=\"8\" height=\"6\" rx=\"1\" fill=\"currentColor\"/></svg>\n </button>\n\n <!-- Fullscreen -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleFullscreen()\" aria-label=\"Fullscreen\">\n @if (_fullscreen()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>\n }\n </button>\n </div>\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"elementar-rt-components-video-player.mjs","sources":["../../../projects/components/video-player/src/video-player/video-player.component.ts","../../../projects/components/video-player/src/video-player/video-player.component.html","../../../projects/components/video-player/elementar-rt-components-video-player.ts"],"sourcesContent":["import {\n Component, input, signal, computed, ChangeDetectionStrategy,\n booleanAttribute, viewChild, ElementRef, AfterViewInit, OnDestroy\n} from '@angular/core';\n\nexport interface VideoChapter {\n time: number;\n label: string;\n}\n\n@Component({\n selector: 'emr-video-player',\n standalone: true,\n templateUrl: './video-player.component.html',\n styleUrl: './video-player.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VideoPlayerComponent implements AfterViewInit, OnDestroy {\n src = input('');\n poster = input('');\n autoplay = input(false, { transform: booleanAttribute });\n loop = input(false, { transform: booleanAttribute });\n chapters = input<VideoChapter[]>([]);\n\n protected _videoEl = viewChild<ElementRef<HTMLVideoElement>>('videoEl');\n\n protected _playing = signal(false);\n protected _muted = signal(false);\n protected _volume = signal(1);\n protected _currentTime = signal(0);\n protected _duration = signal(0);\n protected _buffered = signal(0);\n protected _speed = signal(1);\n protected _showSpeedMenu = signal(false);\n protected _fullscreen = signal(false);\n\n protected _progress = computed(() =>\n this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0\n );\n\n protected _bufferedPct = computed(() =>\n this._duration() > 0 ? (this._buffered() / this._duration()) * 100 : 0\n );\n\n protected _currentChapter = computed(() => {\n const t = this._currentTime();\n const chapters = [...this.chapters()].sort((a, b) => b.time - a.time);\n return chapters.find(c => t >= c.time)?.label ?? '';\n });\n\n protected readonly _speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n\n ngAfterViewInit(): void {\n const v = this._videoEl()?.nativeElement;\n if (v && this.autoplay()) { v.play().catch(() => {}); }\n }\n\n ngOnDestroy(): void {}\n\n protected _togglePlay(): void {\n const v = this._video();\n if (!v) return;\n if (this._playing()) { v.pause(); } else { v.play().catch(() => {}); }\n }\n\n protected _toggleMute(): void {\n const v = this._video();\n if (!v) return;\n v.muted = !v.muted;\n this._muted.set(v.muted);\n }\n\n protected _onVolumeChange(e: Event): void {\n const v = this._video();\n if (!v) return;\n const vol = parseFloat((e.target as HTMLInputElement).value);\n v.volume = vol;\n v.muted = vol === 0;\n this._volume.set(vol);\n this._muted.set(v.muted);\n }\n\n protected _onSeek(e: Event): void {\n const v = this._video();\n if (!v) return;\n const pct = parseFloat((e.target as HTMLInputElement).value);\n v.currentTime = (pct / 100) * this._duration();\n }\n\n protected _setSpeed(s: number): void {\n const v = this._video();\n if (!v) return;\n v.playbackRate = s;\n this._speed.set(s);\n this._showSpeedMenu.set(false);\n }\n\n protected _togglePiP(): void {\n const v = this._video();\n if (!v) return;\n if (document.pictureInPictureElement) {\n document.exitPictureInPicture().catch(() => {});\n } else {\n v.requestPictureInPicture().catch(() => {});\n }\n }\n\n protected _toggleFullscreen(): void {\n const el = document.querySelector('.vp-container') as HTMLElement;\n if (!el) return;\n if (document.fullscreenElement) {\n document.exitFullscreen().then(() => this._fullscreen.set(false)).catch(() => {});\n } else {\n el.requestFullscreen().then(() => this._fullscreen.set(true)).catch(() => {});\n }\n }\n\n protected _onTimeUpdate(): void {\n const v = this._video();\n if (!v) return;\n this._currentTime.set(v.currentTime);\n if (v.buffered.length > 0) this._buffered.set(v.buffered.end(v.buffered.length - 1));\n }\n\n protected _onPlay(): void { this._playing.set(true); }\n protected _onPause(): void { this._playing.set(false); }\n protected _onLoadedMetadata(): void {\n const v = this._video();\n if (v) this._duration.set(v.duration);\n }\n\n protected _formatTime(s: number): string {\n if (!s || isNaN(s)) return '0:00';\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n const sec = Math.floor(s % 60);\n if (h > 0) return `${h}:${m.toString().padStart(2, '0')}:${sec.toString().padStart(2, '0')}`;\n return `${m}:${sec.toString().padStart(2, '0')}`;\n }\n\n protected _chapterOffset(chapter: VideoChapter): number {\n return this._duration() > 0 ? (chapter.time / this._duration()) * 100 : 0;\n }\n\n private _video(): HTMLVideoElement | null {\n return this._videoEl()?.nativeElement ?? null;\n }\n}\n","<div class=\"vp-container\">\n <video\n #videoEl\n class=\"vp-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [loop]=\"loop()\"\n [muted]=\"_muted()\"\n (timeupdate)=\"_onTimeUpdate()\"\n (play)=\"_onPlay()\"\n (pause)=\"_onPause()\"\n (loadedmetadata)=\"_onLoadedMetadata()\"\n (click)=\"_togglePlay()\"\n ></video>\n\n @if (_currentChapter()) {\n <div class=\"vp-chapter-badge\">{{ _currentChapter() }}</div>\n }\n\n <div class=\"vp-controls\">\n <!-- Progress bar -->\n <div class=\"vp-progress-wrap\">\n <div class=\"vp-buffered\" [style.width.%]=\"_bufferedPct()\"></div>\n <input\n type=\"range\" class=\"vp-seek\"\n min=\"0\" max=\"100\" step=\"0.1\"\n [value]=\"_progress()\"\n (input)=\"_onSeek($event)\"\n />\n @for (ch of chapters(); track ch.time) {\n <div class=\"vp-chapter-marker\" [style.left.%]=\"_chapterOffset(ch)\" [title]=\"ch.label\"></div>\n }\n </div>\n\n <!-- Bottom bar -->\n <div class=\"vp-bar\">\n <div class=\"vp-bar-left\">\n <!-- Play/Pause -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePlay()\" [attr.aria-label]=\"_playing() ? 'Pause' : 'Play'\">\n @if (_playing()) {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><polygon points=\"5 3 19 12 5 21 5 3\"/></svg>\n }\n </button>\n\n <!-- Volume -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleMute()\" aria-label=\"Mute\">\n @if (_muted() || _volume() === 0) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>\n }\n </button>\n <input type=\"range\" class=\"vp-volume\" min=\"0\" max=\"1\" step=\"0.05\" [value]=\"_volume()\" (input)=\"_onVolumeChange($event)\" aria-label=\"Volume\" />\n\n <!-- Time -->\n <span class=\"vp-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n </div>\n\n <div class=\"vp-bar-right\">\n <!-- Speed -->\n <div class=\"vp-speed-wrap\">\n <button type=\"button\" class=\"vp-btn vp-speed-btn\" (click)=\"_showSpeedMenu.set(!_showSpeedMenu())\">\n {{ _speed() }}×\n </button>\n @if (_showSpeedMenu()) {\n <div class=\"vp-speed-menu\">\n @for (s of _speeds; track s) {\n <button type=\"button\" class=\"vp-speed-opt\" [attr.data-active]=\"_speed() === s || null\" (click)=\"_setSpeed(s)\">{{ s }}×</button>\n }\n </div>\n }\n </div>\n\n <!-- PiP -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePiP()\" aria-label=\"Picture in picture\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><rect x=\"12\" y=\"10\" width=\"8\" height=\"6\" rx=\"1\" fill=\"currentColor\"/></svg>\n </button>\n\n <!-- Fullscreen -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleFullscreen()\" aria-label=\"Fullscreen\">\n @if (_fullscreen()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>\n }\n </button>\n </div>\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -3,18 +3,18 @@ import { input, booleanAttribute, output, inject, signal, computed, HostListener
|
|
|
3
3
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
4
|
|
|
5
5
|
class VideoViewerComponent {
|
|
6
|
-
src = input('', ...(ngDevMode ? [{ debugName: "src" }] : []));
|
|
7
|
-
poster = input('', ...(ngDevMode ? [{ debugName: "poster" }] : []));
|
|
8
|
-
open = input(false, ...(ngDevMode ?
|
|
6
|
+
src = input('', ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
7
|
+
poster = input('', ...(ngDevMode ? [{ debugName: "poster" }] : /* istanbul ignore next */ []));
|
|
8
|
+
open = input(false, { ...(ngDevMode ? { debugName: "open" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
9
9
|
closed = output();
|
|
10
10
|
_sanitizer = inject(DomSanitizer);
|
|
11
|
-
_open = signal(false, ...(ngDevMode ? [{ debugName: "_open" }] : []));
|
|
12
|
-
_playing = signal(false, ...(ngDevMode ? [{ debugName: "_playing" }] : []));
|
|
13
|
-
_muted = signal(false, ...(ngDevMode ? [{ debugName: "_muted" }] : []));
|
|
14
|
-
_volume = signal(1, ...(ngDevMode ? [{ debugName: "_volume" }] : []));
|
|
15
|
-
_currentTime = signal(0, ...(ngDevMode ? [{ debugName: "_currentTime" }] : []));
|
|
16
|
-
_duration = signal(0, ...(ngDevMode ? [{ debugName: "_duration" }] : []));
|
|
17
|
-
_progress = computed(() => this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_progress" }] : []));
|
|
11
|
+
_open = signal(false, ...(ngDevMode ? [{ debugName: "_open" }] : /* istanbul ignore next */ []));
|
|
12
|
+
_playing = signal(false, ...(ngDevMode ? [{ debugName: "_playing" }] : /* istanbul ignore next */ []));
|
|
13
|
+
_muted = signal(false, ...(ngDevMode ? [{ debugName: "_muted" }] : /* istanbul ignore next */ []));
|
|
14
|
+
_volume = signal(1, ...(ngDevMode ? [{ debugName: "_volume" }] : /* istanbul ignore next */ []));
|
|
15
|
+
_currentTime = signal(0, ...(ngDevMode ? [{ debugName: "_currentTime" }] : /* istanbul ignore next */ []));
|
|
16
|
+
_duration = signal(0, ...(ngDevMode ? [{ debugName: "_duration" }] : /* istanbul ignore next */ []));
|
|
17
|
+
_progress = computed(() => this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_progress" }] : /* istanbul ignore next */ []));
|
|
18
18
|
_videoType = computed(() => {
|
|
19
19
|
const s = this.src();
|
|
20
20
|
if (/youtube\.com|youtu\.be/.test(s))
|
|
@@ -22,7 +22,7 @@ class VideoViewerComponent {
|
|
|
22
22
|
if (/vimeo\.com/.test(s))
|
|
23
23
|
return 'vimeo';
|
|
24
24
|
return 'mp4';
|
|
25
|
-
}, ...(ngDevMode ? [{ debugName: "_videoType" }] : []));
|
|
25
|
+
}, ...(ngDevMode ? [{ debugName: "_videoType" }] : /* istanbul ignore next */ []));
|
|
26
26
|
_embedUrl = computed(() => {
|
|
27
27
|
const s = this.src();
|
|
28
28
|
const type = this._videoType();
|
|
@@ -37,7 +37,7 @@ class VideoViewerComponent {
|
|
|
37
37
|
return this._sanitizer.bypassSecurityTrustResourceUrl(`https://player.vimeo.com/video/${id}?autoplay=1`);
|
|
38
38
|
}
|
|
39
39
|
return null;
|
|
40
|
-
}, ...(ngDevMode ? [{ debugName: "_embedUrl" }] : []));
|
|
40
|
+
}, ...(ngDevMode ? [{ debugName: "_embedUrl" }] : /* istanbul ignore next */ []));
|
|
41
41
|
onKey(e) {
|
|
42
42
|
if (!this._open())
|
|
43
43
|
return;
|
|
@@ -77,14 +77,14 @@ class VideoViewerComponent {
|
|
|
77
77
|
const sec = Math.floor(s % 60);
|
|
78
78
|
return `${m}:${sec.toString().padStart(2, '0')}`;
|
|
79
79
|
}
|
|
80
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
81
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
80
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: VideoViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
81
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: VideoViewerComponent, isStandalone: true, selector: "emr-video-viewer", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, poster: { classPropertyName: "poster", publicName: "poster", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { listeners: { "keydown": "onKey($event)" }, properties: { "attr.data-open": "_open() || null" } }, ngImport: i0, template: "@if (_open()) {\n <div class=\"vv-backdrop\" (click)=\"_close()\">\n <div class=\"vv-player\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"vv-close\" (click)=\"_close()\" aria-label=\"Close\">\u00D7</button>\n\n @if (_videoType() === 'mp4') {\n <video\n class=\"vv-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [muted]=\"_muted()\"\n [volume]=\"_volume()\"\n [autoplay]=\"true\"\n (timeupdate)=\"_onTimeUpdate($event)\"\n (play)=\"_playing.set(true)\"\n (pause)=\"_playing.set(false)\"\n (click)=\"_togglePlay()\"\n ></video>\n <div class=\"vv-controls\">\n <button type=\"button\" class=\"vv-btn\" (click)=\"_togglePlay()\">\n @if (_playing()) { \u23F8 } @else { \u25B6 }\n </button>\n <span class=\"vv-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n <input\n type=\"range\" class=\"vv-seek\" min=\"0\" max=\"100\"\n [value]=\"_progress()\"\n (change)=\"_onSeek($event)\"\n />\n <button type=\"button\" class=\"vv-btn\" (click)=\"_toggleMute()\">\n @if (_muted()) { \uD83D\uDD07 } @else { \uD83D\uDD0A }\n </button>\n <button type=\"button\" class=\"vv-btn\" (click)=\"_fullscreen()\">\u26F6</button>\n </div>\n } @else {\n <iframe\n class=\"vv-embed\"\n [src]=\"_embedUrl()\"\n frameborder=\"0\"\n allowfullscreen\n allow=\"autoplay; fullscreen; picture-in-picture\"\n ></iframe>\n }\n </div>\n </div>\n}\n", styles: [".vv-backdrop{position:fixed;inset:0;background:#000000d9;z-index:9000;display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 4);animation:fadeIn .2s ease}.vv-player{position:relative;width:100%;max-width:calc(var(--spacing, .25rem) * 192);aspect-ratio:16/9;background:#000;border-radius:.75rem;overflow:hidden}.vv-close{position:absolute;top:calc(var(--spacing, .25rem) * 3);right:calc(var(--spacing, .25rem) * 3);z-index:10;width:calc(var(--spacing, .25rem) * 9);height:calc(var(--spacing, .25rem) * 9);display:flex;align-items:center;justify-content:center;background:#0009;border:none;border-radius:50%;cursor:pointer;color:#fff;font-size:1.25rem;line-height:1}.vv-close:hover{background:#000c}.vv-video{width:100%;height:100%;object-fit:contain;cursor:pointer}.vv-embed{width:100%;height:100%;border:none}.vv-controls{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding:calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3);background:linear-gradient(transparent,#000000b3)}.vv-btn{background:transparent;border:none;cursor:pointer;color:#fff;font-size:1rem;padding:var(--spacing, .25rem);border-radius:.25rem}.vv-btn:hover{background:#ffffff26}.vv-time{font-size:.75rem;color:#fffc;white-space:nowrap}.vv-seek{flex:1;height:var(--spacing, .25rem);cursor:pointer;accent-color:var(--color-primary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
82
82
|
}
|
|
83
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: VideoViewerComponent, decorators: [{
|
|
84
84
|
type: Component,
|
|
85
85
|
args: [{ selector: 'emr-video-viewer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
86
86
|
'[attr.data-open]': '_open() || null',
|
|
87
|
-
}, template: "@if (_open()) {\n <div class=\"vv-backdrop\" (click)=\"_close()\">\n <div class=\"vv-player\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"vv-close\" (click)=\"_close()\" aria-label=\"Close\">\u00D7</button>\n\n @if (_videoType() === 'mp4') {\n <video\n class=\"vv-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [muted]=\"_muted()\"\n [volume]=\"_volume()\"\n [autoplay]=\"true\"\n (timeupdate)=\"_onTimeUpdate($event)\"\n (play)=\"_playing.set(true)\"\n (pause)=\"_playing.set(false)\"\n (click)=\"_togglePlay()\"\n ></video>\n <div class=\"vv-controls\">\n <button type=\"button\" class=\"vv-btn\" (click)=\"_togglePlay()\">\n @if (_playing()) { \u23F8 } @else { \u25B6 }\n </button>\n <span class=\"vv-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n <input\n type=\"range\" class=\"vv-seek\" min=\"0\" max=\"100\"\n [value]=\"_progress()\"\n (change)=\"_onSeek($event)\"\n />\n <button type=\"button\" class=\"vv-btn\" (click)=\"_toggleMute()\">\n @if (_muted()) { \uD83D\uDD07 } @else { \uD83D\uDD0A }\n </button>\n <button type=\"button\" class=\"vv-btn\" (click)=\"_fullscreen()\">\u26F6</button>\n </div>\n } @else {\n <iframe\n class=\"vv-embed\"\n [src]=\"_embedUrl()\"\n frameborder=\"0\"\n allowfullscreen\n allow=\"autoplay; fullscreen; picture-in-picture\"\n ></iframe>\n }\n </div>\n </div>\n}\n", styles: [".vv-backdrop{position:fixed;inset:0;background:#000000d9;z-index:9000;display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 4);animation:fadeIn .2s ease}.vv-player{position:relative;width:100%;max-width:calc(var(--spacing, .25rem) * 192);aspect-ratio:16/9;background:#000;border-radius:.75rem;overflow:hidden}.vv-close{position:absolute;top:calc(var(--spacing, .25rem) * 3);right:calc(var(--spacing, .25rem) * 3);z-index:10;width:calc(var(--spacing, .25rem) * 9);height:calc(var(--spacing, .25rem) * 9);display:flex;align-items:center;justify-content:center;background:#0009;border:none;border-radius:50%;cursor:pointer;color:#fff;font-size:1.25rem;line-height:1}.vv-close:hover{background:#000c}.vv-video{width:100%;height:100%;object-fit:contain;cursor:pointer}.vv-embed{width:100%;height:100%;border:none}.vv-controls{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding:calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3);background:linear-gradient(transparent,#000000b3)}.vv-btn{background:transparent;border:none;cursor:pointer;color:#fff;font-size:1rem;padding:var(--spacing, .25rem);border-radius:.25rem}.vv-btn:hover{background:#ffffff26}.vv-time{font-size:.75rem;color:#fffc;white-space:nowrap}.vv-seek{flex:1;height:var(--spacing, .25rem);cursor:pointer;accent-color:var(--color-primary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n/*! tailwindcss v4.3.
|
|
87
|
+
}, template: "@if (_open()) {\n <div class=\"vv-backdrop\" (click)=\"_close()\">\n <div class=\"vv-player\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"vv-close\" (click)=\"_close()\" aria-label=\"Close\">\u00D7</button>\n\n @if (_videoType() === 'mp4') {\n <video\n class=\"vv-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [muted]=\"_muted()\"\n [volume]=\"_volume()\"\n [autoplay]=\"true\"\n (timeupdate)=\"_onTimeUpdate($event)\"\n (play)=\"_playing.set(true)\"\n (pause)=\"_playing.set(false)\"\n (click)=\"_togglePlay()\"\n ></video>\n <div class=\"vv-controls\">\n <button type=\"button\" class=\"vv-btn\" (click)=\"_togglePlay()\">\n @if (_playing()) { \u23F8 } @else { \u25B6 }\n </button>\n <span class=\"vv-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n <input\n type=\"range\" class=\"vv-seek\" min=\"0\" max=\"100\"\n [value]=\"_progress()\"\n (change)=\"_onSeek($event)\"\n />\n <button type=\"button\" class=\"vv-btn\" (click)=\"_toggleMute()\">\n @if (_muted()) { \uD83D\uDD07 } @else { \uD83D\uDD0A }\n </button>\n <button type=\"button\" class=\"vv-btn\" (click)=\"_fullscreen()\">\u26F6</button>\n </div>\n } @else {\n <iframe\n class=\"vv-embed\"\n [src]=\"_embedUrl()\"\n frameborder=\"0\"\n allowfullscreen\n allow=\"autoplay; fullscreen; picture-in-picture\"\n ></iframe>\n }\n </div>\n </div>\n}\n", styles: [".vv-backdrop{position:fixed;inset:0;background:#000000d9;z-index:9000;display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 4);animation:fadeIn .2s ease}.vv-player{position:relative;width:100%;max-width:calc(var(--spacing, .25rem) * 192);aspect-ratio:16/9;background:#000;border-radius:.75rem;overflow:hidden}.vv-close{position:absolute;top:calc(var(--spacing, .25rem) * 3);right:calc(var(--spacing, .25rem) * 3);z-index:10;width:calc(var(--spacing, .25rem) * 9);height:calc(var(--spacing, .25rem) * 9);display:flex;align-items:center;justify-content:center;background:#0009;border:none;border-radius:50%;cursor:pointer;color:#fff;font-size:1.25rem;line-height:1}.vv-close:hover{background:#000c}.vv-video{width:100%;height:100%;object-fit:contain;cursor:pointer}.vv-embed{width:100%;height:100%;border:none}.vv-controls{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding:calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3);background:linear-gradient(transparent,#000000b3)}.vv-btn{background:transparent;border:none;cursor:pointer;color:#fff;font-size:1rem;padding:var(--spacing, .25rem);border-radius:.25rem}.vv-btn:hover{background:#ffffff26}.vv-time{font-size:.75rem;color:#fffc;white-space:nowrap}.vv-seek{flex:1;height:var(--spacing, .25rem);cursor:pointer;accent-color:var(--color-primary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
88
88
|
}], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], poster: [{ type: i0.Input, args: [{ isSignal: true, alias: "poster", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], onKey: [{
|
|
89
89
|
type: HostListener,
|
|
90
90
|
args: ['keydown', ['$event']]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementar-rt-components-video-viewer.mjs","sources":["../../../projects/components/video-viewer/src/video-viewer/video-viewer.component.ts","../../../projects/components/video-viewer/src/video-viewer/video-viewer.component.html","../../../projects/components/video-viewer/elementar-rt-components-video-viewer.ts"],"sourcesContent":["import {\n Component, input, signal, computed, ChangeDetectionStrategy,\n booleanAttribute, output, HostListener\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { inject } from '@angular/core';\n\ntype VideoType = 'mp4' | 'youtube' | 'vimeo';\n\n@Component({\n selector: 'emr-video-viewer',\n standalone: true,\n templateUrl: './video-viewer.component.html',\n styleUrl: './video-viewer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-open]': '_open() || null',\n }\n})\nexport class VideoViewerComponent {\n src = input('');\n poster = input('');\n open = input(false, { transform: booleanAttribute });\n\n closed = output<void>();\n\n private _sanitizer = inject(DomSanitizer);\n\n protected _open = signal(false);\n protected _playing = signal(false);\n protected _muted = signal(false);\n protected _volume = signal(1);\n protected _currentTime = signal(0);\n protected _duration = signal(0);\n protected _progress = computed(() =>\n this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0\n );\n\n protected _videoType = computed<VideoType>(() => {\n const s = this.src();\n if (/youtube\\.com|youtu\\.be/.test(s)) return 'youtube';\n if (/vimeo\\.com/.test(s)) return 'vimeo';\n return 'mp4';\n });\n\n protected _embedUrl = computed<SafeResourceUrl | null>(() => {\n const s = this.src();\n const type = this._videoType();\n if (type === 'youtube') {\n const id = s.match(/(?:v=|youtu\\.be\\/)([^&?/]+)/)?.[1];\n if (id) return this._sanitizer.bypassSecurityTrustResourceUrl(`https://www.youtube.com/embed/${id}?autoplay=1`);\n }\n if (type === 'vimeo') {\n const id = s.match(/vimeo\\.com\\/(\\d+)/)?.[1];\n if (id) return this._sanitizer.bypassSecurityTrustResourceUrl(`https://player.vimeo.com/video/${id}?autoplay=1`);\n }\n return null;\n });\n\n @HostListener('keydown', ['$event'])\n onKey(e: KeyboardEvent): void {\n if (!this._open()) return;\n if (e.code === 'Space') { e.preventDefault(); this._togglePlay(); }\n if (e.code === 'Escape') this._close();\n if (e.code === 'KeyF') this._fullscreen();\n }\n\n protected _show(): void { this._open.set(true); }\n protected _close(): void { this._open.set(false); this.closed.emit(); }\n\n protected _togglePlay(): void { this._playing.set(!this._playing()); }\n protected _toggleMute(): void { this._muted.set(!this._muted()); }\n\n protected _onTimeUpdate(e: Event): void {\n const v = e.target as HTMLVideoElement;\n this._currentTime.set(v.currentTime);\n this._duration.set(v.duration);\n }\n\n protected _onSeek(e: Event): void {\n const v = (e.target as HTMLInputElement);\n const video = document.querySelector('.vv-video') as HTMLVideoElement;\n if (video) video.currentTime = (parseFloat(v.value) / 100) * this._duration();\n }\n\n protected _fullscreen(): void {\n const el = document.querySelector('.vv-player') as HTMLElement;\n if (el?.requestFullscreen) el.requestFullscreen();\n }\n\n protected _formatTime(s: number): string {\n if (!s || isNaN(s)) return '0:00';\n const m = Math.floor(s / 60);\n const sec = Math.floor(s % 60);\n return `${m}:${sec.toString().padStart(2, '0')}`;\n }\n}\n","@if (_open()) {\n <div class=\"vv-backdrop\" (click)=\"_close()\">\n <div class=\"vv-player\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"vv-close\" (click)=\"_close()\" aria-label=\"Close\">×</button>\n\n @if (_videoType() === 'mp4') {\n <video\n class=\"vv-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [muted]=\"_muted()\"\n [volume]=\"_volume()\"\n [autoplay]=\"true\"\n (timeupdate)=\"_onTimeUpdate($event)\"\n (play)=\"_playing.set(true)\"\n (pause)=\"_playing.set(false)\"\n (click)=\"_togglePlay()\"\n ></video>\n <div class=\"vv-controls\">\n <button type=\"button\" class=\"vv-btn\" (click)=\"_togglePlay()\">\n @if (_playing()) { ⏸ } @else { ▶ }\n </button>\n <span class=\"vv-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n <input\n type=\"range\" class=\"vv-seek\" min=\"0\" max=\"100\"\n [value]=\"_progress()\"\n (change)=\"_onSeek($event)\"\n />\n <button type=\"button\" class=\"vv-btn\" (click)=\"_toggleMute()\">\n @if (_muted()) { 🔇 } @else { 🔊 }\n </button>\n <button type=\"button\" class=\"vv-btn\" (click)=\"_fullscreen()\">⛶</button>\n </div>\n } @else {\n <iframe\n class=\"vv-embed\"\n [src]=\"_embedUrl()\"\n frameborder=\"0\"\n allowfullscreen\n allow=\"autoplay; fullscreen; picture-in-picture\"\n ></iframe>\n }\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAmBa,oBAAoB,CAAA;AAC/B,IAAA,GAAG,GAAG,KAAK,CAAC,EAAE
|
|
1
|
+
{"version":3,"file":"elementar-rt-components-video-viewer.mjs","sources":["../../../projects/components/video-viewer/src/video-viewer/video-viewer.component.ts","../../../projects/components/video-viewer/src/video-viewer/video-viewer.component.html","../../../projects/components/video-viewer/elementar-rt-components-video-viewer.ts"],"sourcesContent":["import {\n Component, input, signal, computed, ChangeDetectionStrategy,\n booleanAttribute, output, HostListener\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { inject } from '@angular/core';\n\ntype VideoType = 'mp4' | 'youtube' | 'vimeo';\n\n@Component({\n selector: 'emr-video-viewer',\n standalone: true,\n templateUrl: './video-viewer.component.html',\n styleUrl: './video-viewer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-open]': '_open() || null',\n }\n})\nexport class VideoViewerComponent {\n src = input('');\n poster = input('');\n open = input(false, { transform: booleanAttribute });\n\n closed = output<void>();\n\n private _sanitizer = inject(DomSanitizer);\n\n protected _open = signal(false);\n protected _playing = signal(false);\n protected _muted = signal(false);\n protected _volume = signal(1);\n protected _currentTime = signal(0);\n protected _duration = signal(0);\n protected _progress = computed(() =>\n this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0\n );\n\n protected _videoType = computed<VideoType>(() => {\n const s = this.src();\n if (/youtube\\.com|youtu\\.be/.test(s)) return 'youtube';\n if (/vimeo\\.com/.test(s)) return 'vimeo';\n return 'mp4';\n });\n\n protected _embedUrl = computed<SafeResourceUrl | null>(() => {\n const s = this.src();\n const type = this._videoType();\n if (type === 'youtube') {\n const id = s.match(/(?:v=|youtu\\.be\\/)([^&?/]+)/)?.[1];\n if (id) return this._sanitizer.bypassSecurityTrustResourceUrl(`https://www.youtube.com/embed/${id}?autoplay=1`);\n }\n if (type === 'vimeo') {\n const id = s.match(/vimeo\\.com\\/(\\d+)/)?.[1];\n if (id) return this._sanitizer.bypassSecurityTrustResourceUrl(`https://player.vimeo.com/video/${id}?autoplay=1`);\n }\n return null;\n });\n\n @HostListener('keydown', ['$event'])\n onKey(e: KeyboardEvent): void {\n if (!this._open()) return;\n if (e.code === 'Space') { e.preventDefault(); this._togglePlay(); }\n if (e.code === 'Escape') this._close();\n if (e.code === 'KeyF') this._fullscreen();\n }\n\n protected _show(): void { this._open.set(true); }\n protected _close(): void { this._open.set(false); this.closed.emit(); }\n\n protected _togglePlay(): void { this._playing.set(!this._playing()); }\n protected _toggleMute(): void { this._muted.set(!this._muted()); }\n\n protected _onTimeUpdate(e: Event): void {\n const v = e.target as HTMLVideoElement;\n this._currentTime.set(v.currentTime);\n this._duration.set(v.duration);\n }\n\n protected _onSeek(e: Event): void {\n const v = (e.target as HTMLInputElement);\n const video = document.querySelector('.vv-video') as HTMLVideoElement;\n if (video) video.currentTime = (parseFloat(v.value) / 100) * this._duration();\n }\n\n protected _fullscreen(): void {\n const el = document.querySelector('.vv-player') as HTMLElement;\n if (el?.requestFullscreen) el.requestFullscreen();\n }\n\n protected _formatTime(s: number): string {\n if (!s || isNaN(s)) return '0:00';\n const m = Math.floor(s / 60);\n const sec = Math.floor(s % 60);\n return `${m}:${sec.toString().padStart(2, '0')}`;\n }\n}\n","@if (_open()) {\n <div class=\"vv-backdrop\" (click)=\"_close()\">\n <div class=\"vv-player\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"vv-close\" (click)=\"_close()\" aria-label=\"Close\">×</button>\n\n @if (_videoType() === 'mp4') {\n <video\n class=\"vv-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [muted]=\"_muted()\"\n [volume]=\"_volume()\"\n [autoplay]=\"true\"\n (timeupdate)=\"_onTimeUpdate($event)\"\n (play)=\"_playing.set(true)\"\n (pause)=\"_playing.set(false)\"\n (click)=\"_togglePlay()\"\n ></video>\n <div class=\"vv-controls\">\n <button type=\"button\" class=\"vv-btn\" (click)=\"_togglePlay()\">\n @if (_playing()) { ⏸ } @else { ▶ }\n </button>\n <span class=\"vv-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n <input\n type=\"range\" class=\"vv-seek\" min=\"0\" max=\"100\"\n [value]=\"_progress()\"\n (change)=\"_onSeek($event)\"\n />\n <button type=\"button\" class=\"vv-btn\" (click)=\"_toggleMute()\">\n @if (_muted()) { 🔇 } @else { 🔊 }\n </button>\n <button type=\"button\" class=\"vv-btn\" (click)=\"_fullscreen()\">⛶</button>\n </div>\n } @else {\n <iframe\n class=\"vv-embed\"\n [src]=\"_embedUrl()\"\n frameborder=\"0\"\n allowfullscreen\n allow=\"autoplay; fullscreen; picture-in-picture\"\n ></iframe>\n }\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|