@elementar-rt/components 0.6.55 → 0.6.57
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 +49 -49
- package/badge/index.d.ts +18 -0
- package/bottom-sheet/index.d.ts +32 -0
- package/button-toggle/index.d.ts +33 -0
- package/calendar/index.d.ts +44 -0
- package/card/index.d.ts +32 -0
- package/chips/index.d.ts +23 -0
- package/clipboard-copy/index.d.ts +28 -0
- package/code-highlighter/index.d.ts +5 -1
- package/color-scheme/index.d.ts +1 -1
- package/combobox/index.d.ts +38 -0
- package/content-editor/index.d.ts +18 -0
- package/dashboard/index.d.ts +1 -1
- package/data-grid/index.d.ts +64 -0
- package/datepicker/index.d.ts +32 -0
- package/dialog/index.d.ts +48 -0
- package/digit-roller/index.d.ts +18 -0
- package/empty-state/index.d.ts +17 -0
- package/expansion-panel/index.d.ts +12 -0
- package/fesm2022/elementar-rt-components-action-required.mjs +4 -4
- package/fesm2022/elementar-rt-components-action-required.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-alert.mjs +17 -17
- package/fesm2022/elementar-rt-components-alert.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-announcement.mjs +8 -8
- package/fesm2022/elementar-rt-components-announcement.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-avatar.mjs +22 -22
- package/fesm2022/elementar-rt-components-avatar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-badge.mjs +38 -0
- package/fesm2022/elementar-rt-components-badge.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-block-loader.mjs +7 -7
- 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 +71 -0
- package/fesm2022/elementar-rt-components-bottom-sheet.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-brand-colors.mjs +5 -5
- package/fesm2022/elementar-rt-components-brand-colors.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-breadcrumbs.mjs +41 -41
- package/fesm2022/elementar-rt-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-button-toggle.mjs +89 -0
- package/fesm2022/elementar-rt-components-button-toggle.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-calendar.mjs +130 -0
- package/fesm2022/elementar-rt-components-calendar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-card-overlay.mjs +7 -7
- package/fesm2022/elementar-rt-components-card-overlay.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-card.mjs +60 -0
- package/fesm2022/elementar-rt-components-card.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-carousel.mjs +22 -22
- package/fesm2022/elementar-rt-components-carousel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-chips.mjs +54 -0
- package/fesm2022/elementar-rt-components-chips.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-clipboard-copy.mjs +115 -0
- package/fesm2022/elementar-rt-components-clipboard-copy.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-code-highlighter.mjs +19 -6
- package/fesm2022/elementar-rt-components-code-highlighter.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-color-picker.mjs +27 -27
- package/fesm2022/elementar-rt-components-color-picker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-color-scheme.mjs +11 -11
- package/fesm2022/elementar-rt-components-color-scheme.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-combobox.mjs +70 -0
- package/fesm2022/elementar-rt-components-combobox.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-command-bar.mjs +12 -12
- package/fesm2022/elementar-rt-components-command-bar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-comment-editor.mjs +82 -82
- package/fesm2022/elementar-rt-components-comment-editor.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-comparison-slider.mjs +10 -10
- 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 +121 -0
- package/fesm2022/elementar-rt-components-content-editor.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-content-fade.mjs +4 -4
- package/fesm2022/elementar-rt-components-content-fade.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-cookie-popup.mjs +13 -13
- package/fesm2022/elementar-rt-components-cookie-popup.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-core.mjs +64 -64
- package/fesm2022/elementar-rt-components-core.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-country-select.mjs +5 -5
- package/fesm2022/elementar-rt-components-country-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-crop.mjs +4 -4
- package/fesm2022/elementar-rt-components-crop.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-currency-select.mjs +5 -5
- package/fesm2022/elementar-rt-components-currency-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-dashboard.mjs +9 -9
- package/fesm2022/elementar-rt-components-dashboard.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-data-grid.mjs +120 -0
- package/fesm2022/elementar-rt-components-data-grid.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-data-view.mjs +17 -17
- package/fesm2022/elementar-rt-components-data-view.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-date-format-select.mjs +5 -5
- package/fesm2022/elementar-rt-components-date-format-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-datepicker.mjs +81 -0
- package/fesm2022/elementar-rt-components-datepicker.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-dialog.mjs +97 -0
- package/fesm2022/elementar-rt-components-dialog.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-digit-roller.mjs +41 -0
- package/fesm2022/elementar-rt-components-digit-roller.mjs.map +1 -0
- 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 +8 -8
- package/fesm2022/elementar-rt-components-drawer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-emoji-picker.mjs +7 -7
- package/fesm2022/elementar-rt-components-emoji-picker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-empty-state.mjs +35 -0
- package/fesm2022/elementar-rt-components-empty-state.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-expand.mjs +4 -4
- package/fesm2022/elementar-rt-components-expand.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-expansion-panel.mjs +32 -0
- package/fesm2022/elementar-rt-components-expansion-panel.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-filter-builder.mjs +13 -13
- package/fesm2022/elementar-rt-components-filter-builder.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-filter-select.mjs +126 -0
- package/fesm2022/elementar-rt-components-filter-select.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-C2Ai6F2X.mjs +123 -0
- package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-C2Ai6F2X.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-a0XAs0-_.mjs +22 -0
- package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-a0XAs0-_.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-CTVrrf43.mjs +40 -0
- package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-CTVrrf43.mjs.map +1 -0
- package/fesm2022/{elementar-rt-components-form-renderer-divider-content.component-CjlGcU3B.mjs → elementar-rt-components-form-renderer-divider-content.component-CkYa0MOQ.mjs} +5 -5
- package/fesm2022/elementar-rt-components-form-renderer-divider-content.component-CkYa0MOQ.mjs.map +1 -0
- package/fesm2022/{elementar-rt-components-form-renderer-image-content.component-0pL2Fk0H.mjs → elementar-rt-components-form-renderer-image-content.component-B5uj3hoV.mjs} +5 -5
- package/fesm2022/elementar-rt-components-form-renderer-image-content.component-B5uj3hoV.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-input-field.component-DnaWJIK9.mjs +33 -0
- package/fesm2022/elementar-rt-components-form-renderer-input-field.component-DnaWJIK9.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-9BLv1MsP.mjs +38 -0
- package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-9BLv1MsP.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-select-field.component-C97pIEdh.mjs +39 -0
- package/fesm2022/elementar-rt-components-form-renderer-select-field.component-C97pIEdh.mjs.map +1 -0
- package/fesm2022/{elementar-rt-components-form-renderer-text-content.component-BmFyUG06.mjs → elementar-rt-components-form-renderer-text-content.component-CJxCc5vX.mjs} +5 -5
- package/fesm2022/elementar-rt-components-form-renderer-text-content.component-CJxCc5vX.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-CCtWiJOk.mjs +37 -0
- package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-CCtWiJOk.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-GvZgdvUX.mjs +35 -0
- package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-GvZgdvUX.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-DBiIiV-9.mjs +22 -0
- package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-DBiIiV-9.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer.mjs +29 -29
- package/fesm2022/elementar-rt-components-form-renderer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-gauge.mjs +8 -8
- package/fesm2022/elementar-rt-components-gauge.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-grid.mjs +37 -0
- package/fesm2022/elementar-rt-components-grid.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-guided-tour.mjs +161 -0
- package/fesm2022/elementar-rt-components-guided-tour.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-headless-stepper.mjs +72 -0
- package/fesm2022/elementar-rt-components-headless-stepper.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-icon.mjs +4 -4
- package/fesm2022/elementar-rt-components-icon.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-image-placeholder.mjs +30 -0
- package/fesm2022/elementar-rt-components-image-placeholder.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-image-resizer.mjs +10 -10
- package/fesm2022/elementar-rt-components-image-resizer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-image-viewer.mjs +19 -19
- package/fesm2022/elementar-rt-components-image-viewer.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-image-zoom-viewer.mjs +97 -0
- package/fesm2022/elementar-rt-components-image-zoom-viewer.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-incidents.mjs +49 -49
- package/fesm2022/elementar-rt-components-incidents.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-inline-text-edit.mjs +4 -4
- package/fesm2022/elementar-rt-components-inline-text-edit.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-input-mask.mjs +9 -9
- 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 +7 -7
- package/fesm2022/elementar-rt-components-kanban-board.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-keyboard.mjs +63 -0
- package/fesm2022/elementar-rt-components-keyboard.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-layout.mjs +32 -32
- package/fesm2022/elementar-rt-components-layout.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-list.mjs +43 -0
- package/fesm2022/elementar-rt-components-list.mjs.map +1 -0
- 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 +7 -7
- package/fesm2022/elementar-rt-components-marquee.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-menu.mjs +94 -0
- package/fesm2022/elementar-rt-components-menu.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-micro-chart.mjs +24 -24
- package/fesm2022/elementar-rt-components-micro-chart.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-multi-select.mjs +66 -0
- package/fesm2022/elementar-rt-components-multi-select.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-navigation.mjs +39 -39
- package/fesm2022/elementar-rt-components-navigation.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-notifications.mjs +40 -40
- package/fesm2022/elementar-rt-components-notifications.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-number-input.mjs +17 -17
- package/fesm2022/elementar-rt-components-number-input.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs +4 -4
- 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 +4 -4
- package/fesm2022/elementar-rt-components-page-loading-bar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-paginator.mjs +50 -0
- package/fesm2022/elementar-rt-components-paginator.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-panel.mjs +24 -24
- package/fesm2022/elementar-rt-components-panel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-password-strength.mjs +13 -13
- package/fesm2022/elementar-rt-components-password-strength.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-phone-input.mjs +11 -11
- package/fesm2022/elementar-rt-components-phone-input.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-pin-input.mjs +8 -8
- package/fesm2022/elementar-rt-components-pin-input.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-popover.mjs +10 -10
- package/fesm2022/elementar-rt-components-popover.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-progress-bar.mjs +32 -0
- package/fesm2022/elementar-rt-components-progress-bar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-progress-spinner.mjs +94 -0
- package/fesm2022/elementar-rt-components-progress-spinner.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-radio-card.mjs +17 -17
- package/fesm2022/elementar-rt-components-radio-card.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-rail-nav.mjs +12 -12
- package/fesm2022/elementar-rt-components-rail-nav.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-rating.mjs +84 -0
- package/fesm2022/elementar-rt-components-rating.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-resizable-container.mjs +4 -4
- package/fesm2022/elementar-rt-components-resizable-container.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-screen-loader.mjs +4 -4
- package/fesm2022/elementar-rt-components-screen-loader.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-scroll-spy.mjs +16 -16
- package/fesm2022/elementar-rt-components-scroll-spy.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-segmented.mjs +12 -12
- package/fesm2022/elementar-rt-components-segmented.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-side-panel.mjs +8 -8
- package/fesm2022/elementar-rt-components-side-panel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-sidebar.mjs +61 -61
- package/fesm2022/elementar-rt-components-sidebar.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-sidenav.mjs +72 -0
- package/fesm2022/elementar-rt-components-sidenav.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-signature-pad.mjs +4 -4
- package/fesm2022/elementar-rt-components-signature-pad.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-skeleton.mjs +16 -16
- package/fesm2022/elementar-rt-components-skeleton.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-slider.mjs +64 -0
- package/fesm2022/elementar-rt-components-slider.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-snackbar.mjs +81 -0
- package/fesm2022/elementar-rt-components-snackbar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-sort.mjs +69 -0
- package/fesm2022/elementar-rt-components-sort.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-splash-screen.mjs +4 -4
- package/fesm2022/elementar-rt-components-splash-screen.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-split-pane.mjs +70 -0
- package/fesm2022/elementar-rt-components-split-pane.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-stat-card.mjs +27 -0
- package/fesm2022/elementar-rt-components-stat-card.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-step-tracker.mjs +30 -0
- package/fesm2022/elementar-rt-components-step-tracker.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-stepper.mjs +6 -6
- package/fesm2022/elementar-rt-components-stepper.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-suggestions.mjs +18 -18
- package/fesm2022/elementar-rt-components-suggestions.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-tab-panel.mjs +48 -48
- package/fesm2022/elementar-rt-components-tab-panel.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-table.mjs +84 -0
- package/fesm2022/elementar-rt-components-table.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-tabs.mjs +59 -0
- package/fesm2022/elementar-rt-components-tabs.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-tag.mjs +28 -0
- package/fesm2022/elementar-rt-components-tag.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-text-editor.mjs +85 -85
- package/fesm2022/elementar-rt-components-text-editor.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-thumbnail-maker.mjs +7 -7
- package/fesm2022/elementar-rt-components-thumbnail-maker.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-tiles.mjs +35 -0
- package/fesm2022/elementar-rt-components-tiles.mjs.map +1 -0
- 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 +75 -0
- package/fesm2022/elementar-rt-components-timepicker.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-timezone-select.mjs +8 -8
- package/fesm2022/elementar-rt-components-timezone-select.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-toast.mjs +98 -0
- package/fesm2022/elementar-rt-components-toast.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-toolbar.mjs +24 -0
- package/fesm2022/elementar-rt-components-toolbar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-tooltip.mjs +119 -0
- package/fesm2022/elementar-rt-components-tooltip.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-tree.mjs +77 -0
- package/fesm2022/elementar-rt-components-tree.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-upload.mjs +57 -57
- package/fesm2022/elementar-rt-components-upload.mjs.map +1 -1
- package/fesm2022/elementar-rt-components-video-player.mjs +144 -0
- package/fesm2022/elementar-rt-components-video-player.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-video-viewer.mjs +98 -0
- package/fesm2022/elementar-rt-components-video-viewer.mjs.map +1 -0
- package/fesm2022/elementar-rt-components.mjs.map +1 -1
- package/filter-select/index.d.ts +40 -0
- package/grid/index.d.ts +24 -0
- package/guided-tour/index.d.ts +45 -0
- package/headless-stepper/index.d.ts +30 -0
- package/image-placeholder/index.d.ts +18 -0
- package/image-zoom-viewer/index.d.ts +33 -0
- package/keyboard/index.d.ts +13 -0
- package/list/index.d.ts +18 -0
- package/menu/index.d.ts +38 -0
- package/multi-select/index.d.ts +36 -0
- package/package.json +245 -53
- package/paginator/index.d.ts +26 -0
- package/progress-bar/index.d.ts +17 -0
- package/progress-spinner/index.d.ts +19 -0
- package/rating/index.d.ts +30 -0
- package/sidenav/index.d.ts +31 -0
- package/slider/index.d.ts +26 -0
- package/snackbar/index.d.ts +36 -0
- package/sort/index.d.ts +27 -0
- package/split-pane/index.d.ts +25 -0
- package/stat-card/index.d.ts +16 -0
- package/step-tracker/index.d.ts +21 -0
- package/styles/_common.scss +777 -776
- package/styles/themes/cyan-orange.scss +41 -41
- package/styles/themes/default.scss +5 -5
- package/styles/themes/magenta-violet.scss +41 -41
- package/styles/themes/rose-red.scss +41 -41
- package/table/index.d.ts +44 -0
- package/tabs/index.d.ts +26 -0
- package/tag/index.d.ts +17 -0
- package/tiles/index.d.ts +14 -0
- package/timepicker/index.d.ts +29 -0
- package/toast/index.d.ts +48 -0
- package/toolbar/index.d.ts +10 -0
- package/tooltip/index.d.ts +30 -0
- package/tree/index.d.ts +42 -0
- package/video-player/index.d.ts +49 -0
- package/video-viewer/index.d.ts +33 -0
- package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-AqEghjO_.mjs +0 -123
- package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-AqEghjO_.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-CUKmZGFq.mjs +0 -22
- package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-CUKmZGFq.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-DihIRWMt.mjs +0 -40
- package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-DihIRWMt.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-divider-content.component-CjlGcU3B.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-image-content.component-0pL2Fk0H.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-input-field.component-X2sKvj6J.mjs +0 -33
- package/fesm2022/elementar-rt-components-form-renderer-input-field.component-X2sKvj6J.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-DWXZAA3F.mjs +0 -38
- package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-DWXZAA3F.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-select-field.component-Cx9DZoD6.mjs +0 -39
- package/fesm2022/elementar-rt-components-form-renderer-select-field.component-Cx9DZoD6.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-text-content.component-BmFyUG06.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-D9KmE049.mjs +0 -37
- package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-D9KmE049.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-BroP_Q4P.mjs +0 -35
- package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-BroP_Q4P.mjs.map +0 -1
- package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-nGbtVi1_.mjs +0 -22
- package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-nGbtVi1_.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementar-rt-components-carousel.mjs","sources":["../../../projects/components/carousel/src/types.ts","../../../projects/components/carousel/src/draggable-carousel.directive.ts","../../../projects/components/carousel/src/carousel/carousel.component.ts","../../../projects/components/carousel/src/carousel/carousel.component.html","../../../projects/components/carousel/src/carousel-card/carousel-card.component.ts","../../../projects/components/carousel/src/carousel-card/carousel-card.component.html","../../../projects/components/carousel/src/carousel-controls.directive.ts","../../../projects/components/carousel/src/carousel-previous.directive.ts","../../../projects/components/carousel/src/carousel-next.directive.ts","../../../projects/components/carousel/elementar-rt-components-carousel.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport interface CarouselApiInterface {\r\n previous: () => void;\r\n next: () => void;\r\n isPreviousDisabled: () => boolean;\r\n isNextDisabled: () => boolean;\r\n selectedIndex: () => number;\r\n}\r\n\r\nexport interface CarouselInterface {\r\n api: CarouselApiInterface\r\n}\r\n\r\nexport interface CarouselCardInterface {\r\n element: HTMLElement;\r\n}\r\n\r\nexport const CAROUSEL = new InjectionToken('CAROUSEL');\r\nexport const CAROUSEL_CARD = new InjectionToken('CAROUSEL_CARD');\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n OnInit,\r\n OnDestroy,\r\n NgZone,\r\n AfterContentInit,\r\n signal,\r\n input,\r\n inject,\r\n output\r\n} from '@angular/core';\r\n\r\nfunction easeOutQuad(t: number): number {\r\n return t * (2 - t);\r\n}\r\n\r\n@Directive({\r\n selector: '[emrDraggableCarousel]',\r\n standalone: true,\r\n host: {\r\n '(scroll)': 'onScroll($event)',\r\n '(mousedown)': 'onMouseDown($event)',\r\n '(mouseleave)': 'onMouseLeaveElement($event)',\r\n '(document:mousemove)': 'onMouseMove($event)',\r\n '(document:mouseup)': 'onMouseUpOrLeave($event)',\r\n '(document:mouseleave)': 'onMouseUpOrLeave($event)',\r\n '[class.dragging-active]': 'isDragging()'\r\n }\r\n})\r\nexport class DraggableCarouselDirective implements OnInit, AfterContentInit, OnDestroy {\r\n cardSelector = input<string>('.emr-carousel-card');\r\n snapToCenter = input<boolean>(true);\r\n snapDebounceTime = input<number>(50);\r\n snapDuration = input<number>(300);\r\n resistanceFactor = input<number>(0.5);\r\n velocityThreshold = input<number>(0.5);\r\n visibilityDebounceTime = input<number>(100);\r\n\r\n indexChange = output<number>();\r\n\r\n isDragging = signal(false);\r\n private startX = signal(0);\r\n private scrollLeftStart = signal(0);\r\n private currentTranslateX = signal(0);\r\n private lastMoveX = signal<number | null>(null);\r\n private lastMoveTime = signal<number | null>(null);\r\n private currentVelocityX = signal(0);\r\n private lastEmittedIndex = signal<number | null>(null);\r\n\r\n private snapTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n private scrollAnimationId: number | null = null;\r\n private transformAnimationId: number | null = null;\r\n private visibilityDebounceTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n private el = inject(ElementRef<HTMLElement>);\r\n private renderer = inject(Renderer2);\r\n private zone = inject(NgZone);\r\n\r\n private hostElement!: HTMLElement;\r\n private cards: HTMLElement[] = [];\r\n\r\n constructor() {\r\n // Effect remains the same\r\n }\r\n\r\n ngOnInit(): void {\r\n this.hostElement = this.el.nativeElement;\r\n this.renderer.setStyle(this.hostElement, 'cursor', 'grab');\r\n this.hostElement.style.scrollBehavior = 'auto';\r\n }\r\n\r\n ngAfterContentInit(): void { // <<< Renamed from ngAfterViewInit\r\n this.cards = Array.from(this.hostElement.querySelectorAll<HTMLElement>(this.cardSelector()));\r\n\r\n // Initial state calculation after content is initialized and layout is stable\r\n setTimeout(() => {\r\n const actualInitialIndex = this.findCurrentCenterIndex();\r\n this.emitActiveIndex(actualInitialIndex);\r\n this.updateCardVisibilityClasses();\r\n }, 0);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearSnapTimeout();\r\n this.cancelScrollAnimation();\r\n this.cancelTransformAnimation();\r\n clearTimeout(this.visibilityDebounceTimeoutId as any);\r\n }\r\n\r\n onScroll(event: Event): void {\r\n if (this.isDragging() || this.scrollAnimationId !== null || this.transformAnimationId !== null) {\r\n return;\r\n }\r\n\r\n if (this.visibilityDebounceTimeoutId !== null) {\r\n clearTimeout(this.visibilityDebounceTimeoutId);\r\n }\r\n this.visibilityDebounceTimeoutId = setTimeout(() => {\r\n this.updateCardVisibilityClasses();\r\n const currentIndex = this.findCurrentCenterIndex();\r\n this.emitActiveIndex(currentIndex);\r\n this.visibilityDebounceTimeoutId = null;\r\n }, this.visibilityDebounceTime());\r\n }\r\n\r\n onMouseDown(event: MouseEvent): void {\r\n clearTimeout(this.visibilityDebounceTimeoutId as any);\r\n this.clearSnapTimeout();\r\n this.cancelScrollAnimation();\r\n this.cancelTransformAnimation();\r\n\r\n if (this.currentTranslateX() !== 0) {\r\n this.currentTranslateX.set(0);\r\n this.renderer.setStyle(this.hostElement, 'transform', '');\r\n }\r\n this.hostElement.style.scrollBehavior = 'auto';\r\n\r\n if (event.button !== 0) return;\r\n\r\n this.isDragging.set(true);\r\n this.startX.set(event.pageX - this.hostElement.offsetLeft);\r\n this.scrollLeftStart.set(this.hostElement.scrollLeft);\r\n\r\n this.lastMoveX.set(event.pageX);\r\n this.lastMoveTime.set(event.timeStamp);\r\n this.currentVelocityX.set(0);\r\n\r\n this.renderer.setStyle(this.hostElement, 'cursor', 'grabbing');\r\n event.preventDefault();\r\n }\r\n\r\n onMouseMove(event: MouseEvent): void {\r\n if (!this.isDragging()) return;\r\n event.preventDefault();\r\n\r\n const currentX = event.pageX;\r\n const currentTime = event.timeStamp;\r\n const lastMoveTime = this.lastMoveTime();\r\n const lastMoveX = this.lastMoveX();\r\n\r\n if (lastMoveTime !== null && lastMoveX !== null && currentTime > lastMoveTime) {\r\n const deltaX = currentX - lastMoveX;\r\n const deltaTime = currentTime - lastMoveTime;\r\n if (deltaTime > 0) {\r\n this.currentVelocityX.set(-deltaX / deltaTime);\r\n }\r\n }\r\n this.lastMoveX.set(currentX);\r\n this.lastMoveTime.set(currentTime);\r\n\r\n const dragDeltaX = currentX - (this.startX() + this.hostElement.offsetLeft);\r\n const intendedScrollLeft = this.scrollLeftStart() - dragDeltaX;\r\n const maxScrollLeft = this.hostElement.scrollWidth - this.hostElement.clientWidth;\r\n let targetScrollLeft = intendedScrollLeft;\r\n let translateX = 0;\r\n\r\n if (intendedScrollLeft < 0) {\r\n targetScrollLeft = 0;\r\n const overpull = -intendedScrollLeft;\r\n translateX = Math.min(overpull * this.resistanceFactor(), this.hostElement.clientWidth * 0.4);\r\n } else if (intendedScrollLeft > maxScrollLeft) {\r\n targetScrollLeft = maxScrollLeft;\r\n const overpull = intendedScrollLeft - maxScrollLeft;\r\n translateX = -Math.min(overpull * this.resistanceFactor(), this.hostElement.clientWidth * 0.4);\r\n }\r\n\r\n if (this.hostElement.scrollLeft !== targetScrollLeft) {\r\n this.hostElement.scrollLeft = targetScrollLeft;\r\n }\r\n\r\n if (this.currentTranslateX() !== translateX) {\r\n this.currentTranslateX.set(translateX);\r\n if (Math.abs(translateX) > 0.1) {\r\n this.renderer.setStyle(this.hostElement, 'transform', `translateX(${translateX}px)`);\r\n } else {\r\n this.currentTranslateX.set(0);\r\n this.renderer.setStyle(this.hostElement, 'transform', '');\r\n }\r\n }\r\n }\r\n\r\n onMouseUpOrLeave(event: MouseEvent): void {\r\n if (!this.isDragging()) return;\r\n this.stopDragging();\r\n }\r\n\r\n onMouseLeaveElement(event: MouseEvent): void {\r\n if (!this.isDragging()) {\r\n this.renderer.setStyle(this.hostElement, 'cursor', 'grab');\r\n }\r\n }\r\n\r\n private stopDragging(): void {\r\n if (!this.isDragging()) return;\r\n\r\n this.isDragging.set(false);\r\n this.renderer.setStyle(this.hostElement, 'cursor', 'grab');\r\n this.clearSnapTimeout();\r\n\r\n const wasPulled = Math.abs(this.currentTranslateX()) > 0.1;\r\n\r\n if (wasPulled) {\r\n this.snapTimeoutId = setTimeout(() => {\r\n this.animateTransformReset();\r\n this.snapTimeoutId = null;\r\n }, this.snapDebounceTime() / 2);\r\n } else if (this.snapToCenter()) {\r\n this.snapTimeoutId = setTimeout(() => {\r\n this.initiateSnap();\r\n this.snapTimeoutId = null;\r\n }, this.snapDebounceTime());\r\n } else {\r\n this.updateCardVisibilityClasses();\r\n const currentIndex = this.findCurrentCenterIndex();\r\n this.emitActiveIndex(currentIndex);\r\n }\r\n }\r\n\r\n private initiateSnap(): void {\r\n this.cards = Array.from(this.hostElement.querySelectorAll<HTMLElement>(this.cardSelector()));\r\n if (!this.cards.length) return;\r\n\r\n let targetCardIndex = -1;\r\n const currentScroll = this.hostElement.scrollLeft;\r\n const containerCenter = currentScroll + this.hostElement.clientWidth / 2;\r\n\r\n let currentNearestCardIndex = this.findNearestCardIndex(this.cards, containerCenter);\r\n if (currentNearestCardIndex < 0) return;\r\n\r\n const absVelocity = Math.abs(this.currentVelocityX());\r\n const threshold = this.velocityThreshold();\r\n\r\n if (absVelocity > threshold) {\r\n if (this.currentVelocityX() < 0) {\r\n targetCardIndex = currentNearestCardIndex - 1;\r\n } else {\r\n targetCardIndex = currentNearestCardIndex + 1;\r\n }\r\n targetCardIndex = Math.max(0, Math.min(targetCardIndex, this.cards.length - 1));\r\n } else {\r\n targetCardIndex = currentNearestCardIndex;\r\n }\r\n\r\n if (targetCardIndex >= 0 && targetCardIndex < this.cards.length) {\r\n this.scrollToCard(targetCardIndex, false);\r\n } else {\r\n this.updateCardVisibilityClasses();\r\n }\r\n }\r\n\r\n private scrollToCard(index: number, immediate: boolean = false): void {\r\n if (index < 0 || index >= this.cards.length) {\r\n return;\r\n }\r\n const targetCard = this.cards[index];\r\n if (!targetCard) return;\r\n\r\n const container = this.hostElement;\r\n const containerWidth = container.clientWidth;\r\n const targetCardLeft = targetCard.offsetLeft;\r\n const targetCardWidth = targetCard.offsetWidth;\r\n let targetScrollLeft = targetCardLeft + targetCardWidth / 2 - containerWidth / 2;\r\n const maxScrollLeft = container.scrollWidth - containerWidth;\r\n targetScrollLeft = Math.max(0, Math.min(targetScrollLeft, maxScrollLeft));\r\n\r\n this.cancelScrollAnimation();\r\n\r\n if (immediate) {\r\n container.scrollLeft = targetScrollLeft;\r\n this.updateCardVisibilityClasses();\r\n this.emitActiveIndex(index);\r\n } else {\r\n this.animateScroll(targetScrollLeft);\r\n }\r\n }\r\n\r\n private findNearestCardIndex(cards: HTMLElement[], position: number): number {\r\n let nearestIndex = -1;\r\n let minDistance = Infinity;\r\n cards.forEach((card, index) => {\r\n if (card instanceof HTMLElement) {\r\n const cardLeft = card.offsetLeft;\r\n const cardWidth = card.offsetWidth;\r\n const cardCenter = cardLeft + cardWidth / 2;\r\n const distance = Math.abs(cardCenter - position);\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n nearestIndex = index;\r\n }\r\n }\r\n });\r\n return nearestIndex;\r\n }\r\n\r\n private animateTransformReset(): void {\r\n this.cancelTransformAnimation();\r\n const startTranslateX = this.currentTranslateX();\r\n const distance = 0 - startTranslateX;\r\n if (Math.abs(distance) < 1) {\r\n if (startTranslateX !== 0) {\r\n this.currentTranslateX.set(0);\r\n this.renderer.setStyle(this.hostElement, 'transform', '');\r\n const finalIndex = this.findCurrentCenterIndex();\r\n this.emitActiveIndex(finalIndex);\r\n this.updateCardVisibilityClasses();\r\n }\r\n return;\r\n }\r\n const duration = this.snapDuration();\r\n let startTime: number | null = null;\r\n const step = (timestamp: number) => {\r\n if (startTime === null) startTime = timestamp;\r\n const elapsed = timestamp - startTime;\r\n const progress = Math.min(1, elapsed / duration);\r\n const easedProgress = easeOutQuad(progress);\r\n const newTranslateX = startTranslateX + distance * easedProgress;\r\n this.currentTranslateX.set(newTranslateX);\r\n this.renderer.setStyle(this.hostElement, 'transform', `translateX(${newTranslateX}px)`);\r\n if (progress < 1) {\r\n this.transformAnimationId = requestAnimationFrame(step);\r\n } else {\r\n this.currentTranslateX.set(0);\r\n this.renderer.setStyle(this.hostElement, 'transform', '');\r\n this.transformAnimationId = null;\r\n const finalIndex = this.findCurrentCenterIndex();\r\n this.emitActiveIndex(finalIndex);\r\n this.updateCardVisibilityClasses();\r\n }\r\n };\r\n this.zone.runOutsideAngular(() => {\r\n this.transformAnimationId = requestAnimationFrame(step);\r\n });\r\n }\r\n\r\n private animateScroll(targetScrollLeft: number): void {\r\n this.cancelScrollAnimation();\r\n const container = this.hostElement;\r\n const startScrollLeft = container.scrollLeft;\r\n const distance = targetScrollLeft - startScrollLeft;\r\n if (Math.abs(distance) < 1) {\r\n const finalIndex = this.findCurrentCenterIndex();\r\n this.emitActiveIndex(finalIndex);\r\n this.updateCardVisibilityClasses();\r\n return;\r\n }\r\n const duration = this.snapDuration();\r\n let startTime: number | null = null;\r\n const step = (timestamp: number) => {\r\n if (startTime === null) startTime = timestamp;\r\n const elapsed = timestamp - startTime;\r\n const progress = Math.min(1, elapsed / duration);\r\n const easedProgress = easeOutQuad(progress);\r\n container.scrollLeft = startScrollLeft + distance * easedProgress;\r\n if (progress < 1) {\r\n this.scrollAnimationId = requestAnimationFrame(step);\r\n } else {\r\n container.scrollLeft = targetScrollLeft;\r\n this.scrollAnimationId = null;\r\n const finalIndex = this.findCurrentCenterIndex();\r\n this.emitActiveIndex(finalIndex);\r\n this.updateCardVisibilityClasses();\r\n }\r\n };\r\n this.zone.runOutsideAngular(() => {\r\n this.scrollAnimationId = requestAnimationFrame(step);\r\n });\r\n }\r\n\r\n private findCurrentCenterIndex(): number {\r\n this.cards = Array.from(this.hostElement.querySelectorAll<HTMLElement>(this.cardSelector()));\r\n if (!this.cards.length) return -1;\r\n const currentScroll = this.hostElement.scrollLeft;\r\n const containerCenter = currentScroll + this.hostElement.clientWidth / 2;\r\n return this.findNearestCardIndex(this.cards, containerCenter);\r\n }\r\n\r\n private emitActiveIndex(index: number): void {\r\n if (index >= 0 && index !== this.lastEmittedIndex()) {\r\n this.lastEmittedIndex.set(index);\r\n this.zone.run(() => {\r\n this.indexChange.emit(index);\r\n });\r\n }\r\n }\r\n\r\n private updateCardVisibilityClasses(): void {\r\n this.cards = Array.from(this.hostElement.querySelectorAll<HTMLElement>(this.cardSelector()));\r\n if (!this.cards.length || !this.hostElement.clientWidth) return;\r\n\r\n const viewportStart = this.hostElement.scrollLeft;\r\n const viewportWidth = this.hostElement.clientWidth;\r\n const viewportEnd = viewportStart + viewportWidth;\r\n const tolerance = 1;\r\n\r\n this.cards.forEach(card => {\r\n if (card instanceof HTMLElement) {\r\n const cardStart = card.offsetLeft;\r\n const cardEnd = cardStart + card.offsetWidth;\r\n const isSpanned = cardStart >= viewportStart - tolerance && cardEnd <= viewportEnd + tolerance;\r\n const isInView = cardEnd > viewportStart + tolerance && cardStart < viewportEnd - tolerance;\r\n\r\n if (isSpanned) {\r\n this.renderer.addClass(card, 'is-spanned');\r\n } else {\r\n this.renderer.removeClass(card, 'is-spanned');\r\n }\r\n\r\n if (isInView) {\r\n this.renderer.addClass(card, 'is-in-view');\r\n } else {\r\n this.renderer.removeClass(card, 'is-in-view');\r\n }\r\n }\r\n });\r\n }\r\n\r\n private cancelScrollAnimation(): void {\r\n if (this.scrollAnimationId !== null) {\r\n cancelAnimationFrame(this.scrollAnimationId);\r\n this.scrollAnimationId = null;\r\n }\r\n }\r\n\r\n private cancelTransformAnimation(): void {\r\n if (this.transformAnimationId !== null) {\r\n cancelAnimationFrame(this.transformAnimationId);\r\n this.transformAnimationId = null;\r\n }\r\n }\r\n\r\n private clearSnapTimeout(): void {\r\n if (this.snapTimeoutId !== null) {\r\n clearTimeout(this.snapTimeoutId);\r\n this.snapTimeoutId = null;\r\n }\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n Component,\r\n contentChildren,\r\n ElementRef, input,\r\n output, signal,\r\n viewChild\r\n} from '@angular/core';\r\nimport { CAROUSEL, CAROUSEL_CARD, CarouselApiInterface, CarouselCardInterface } from '../types';\r\nimport { DraggableCarouselDirective } from '../draggable-carousel.directive';\r\n\r\n@Component({\r\n selector: 'emr-carousel',\r\n exportAs: 'emrCarousel',\r\n providers: [\r\n {\r\n provide: CAROUSEL,\r\n useExisting: CarouselComponent\r\n }\r\n ],\r\n templateUrl: './carousel.component.html',\r\n styleUrl: './carousel.component.scss',\r\n hostDirectives: [],\r\n imports: [\r\n DraggableCarouselDirective\r\n ],\r\n host: {\r\n 'class': 'emr-carousel',\r\n '[class.fade]': 'fade()',\r\n }\r\n})\r\nexport class CarouselComponent {\r\n private _content = viewChild.required<ElementRef>('content');\r\n private _cards = contentChildren<CarouselCardInterface>(CAROUSEL_CARD);\r\n\r\n fade = input(false, {\r\n transform: booleanAttribute\r\n });\r\n snapToCenter = input<boolean>(true);\r\n snapDebounceTime = input<number>(50);\r\n snapDuration = input<number>(300);\r\n resistanceFactor = input<number>(0.5);\r\n velocityThreshold = input<number>(0.5);\r\n visibilityDebounceTime = input<number>(100);\r\n\r\n readonly indexChange = output<number>();\r\n\r\n protected _index = signal(0);\r\n\r\n get api(): CarouselApiInterface {\r\n return {\r\n isNextDisabled: () => this._isNextDisabled,\r\n isPreviousDisabled: () => this._isPreviousDisabled,\r\n previous: () => this._previous(),\r\n next: () => this._next(),\r\n selectedIndex: () => this._index()\r\n }\r\n }\r\n\r\n protected onIndexChanged(index: number): void {\r\n if (this._index() === index) {\r\n return;\r\n }\r\n\r\n this._index.set(index);\r\n this.indexChange.emit(index);\r\n }\r\n\r\n private _previous(): void {\r\n const contentElement = this._content()?.nativeElement as HTMLElement;\r\n\r\n for (let index = this._cards().length - 1; index >= 0; index--) {\r\n if (index >= this._index()) {\r\n continue;\r\n }\r\n\r\n const card = this._cards().at(index) as CarouselCardInterface;\r\n\r\n if (!this._visibleInParentViewport(contentElement, card.element)) {\r\n this._scrollToCard(card);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private _next(): void {\r\n const contentElement = this._content().nativeElement as HTMLElement;\r\n const notVisibleCard = this._cards().find(\r\n (card: CarouselCardInterface, index: number) =>\r\n !this._visibleInParentViewport(contentElement, card.element) && index > this._index()\r\n );\r\n\r\n if (notVisibleCard) {\r\n this._scrollToCard(notVisibleCard);\r\n }\r\n }\r\n\r\n private _scrollToCard(notVisibleCard: CarouselCardInterface): void {\r\n this._index.set(this._cards().findIndex(card => card === notVisibleCard));\r\n this.indexChange.emit(this._index());\r\n notVisibleCard.element.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n inline: 'center'\r\n });\r\n }\r\n\r\n private _visibleInParentViewport = (parent: HTMLElement, el: HTMLElement) => {\r\n const parentRect = parent.getBoundingClientRect();\r\n const elementRect = el.getBoundingClientRect();\r\n\r\n return (\r\n elementRect.right <= parentRect.right &&\r\n elementRect.left >= parentRect.left\r\n );\r\n }\r\n\r\n private get _isPreviousDisabled(): boolean {\r\n return this._index() === 0;\r\n }\r\n\r\n private get _isNextDisabled(): boolean {\r\n return this._index() === this._cards().length - 1;\r\n }\r\n}\r\n","<div #content class=\"content\"\r\n emrDraggableCarousel\r\n [snapToCenter]=\"snapToCenter()\"\r\n [snapDebounceTime]=\"snapDebounceTime()\"\r\n [snapDuration]=\"snapDuration()\"\r\n [resistanceFactor]=\"resistanceFactor()\"\r\n [velocityThreshold]=\"velocityThreshold()\"\r\n [visibilityDebounceTime]=\"visibilityDebounceTime()\"\r\n (indexChange)=\"onIndexChanged($event)\">\r\n <ng-content select=\"emr-carousel-card,[emr-carousel-card]\"></ng-content>\r\n</div>\r\n<div class=\"controls\">\r\n <ng-content select=\"[emrCarouselControls]\"></ng-content>\r\n</div>\r\n","import { Component, ElementRef, inject } from '@angular/core';\r\nimport { CAROUSEL_CARD } from '../types';\r\n\r\n@Component({\r\n selector: 'emr-carousel-card,[emr-carousel-card]',\r\n exportAs: 'emrCarouselCard',\r\n imports: [],\r\n providers: [\r\n {\r\n provide: CAROUSEL_CARD,\r\n useExisting: CarouselCardComponent\r\n }\r\n ],\r\n templateUrl: './carousel-card.component.html',\r\n styleUrl: './carousel-card.component.scss',\r\n host: {\r\n 'class': 'emr-carousel-card',\r\n }\r\n})\r\nexport class CarouselCardComponent {\r\n private _elementRef = inject(ElementRef);\r\n\r\n get element(): HTMLElement {\r\n return this._elementRef.nativeElement;\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n","import { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[emrCarouselControls]',\r\n standalone: true,\r\n host: {\r\n 'class': 'emr-carousel-controls',\r\n }\r\n})\r\nexport class CarouselControlsDirective {\r\n\r\n}\r\n","import { Directive, inject, input, OnInit } from '@angular/core';\r\nimport { CAROUSEL, CarouselInterface } from './types';\r\n\r\n@Directive({\r\n selector: '[emrCarouselPrevious]',\r\n exportAs: 'emrCarouselPrevious',\r\n standalone: true,\r\n host: {\r\n 'class': 'emr-carousel-previous',\r\n '[attr.disabled]': '_carousel?.api?.isPreviousDisabled() ? true : null',\r\n '(click)': '_handleClick()'\r\n }\r\n})\r\nexport class CarouselPreviousDirective implements OnInit {\r\n protected _carousel = inject<CarouselInterface>(CAROUSEL, {\r\n optional: true\r\n });\r\n\r\n carousel = input<CarouselInterface | null>(null);\r\n\r\n ngOnInit(): void {\r\n if (this.carousel() && !this._carousel) {\r\n this._carousel = this.carousel();\r\n }\r\n }\r\n\r\n _handleClick(): void {\r\n this._carousel?.api.previous();\r\n }\r\n}\r\n","import { Directive, inject, input, OnInit } from '@angular/core';\r\nimport { CAROUSEL, CarouselInterface } from './types';\r\n\r\n@Directive({\r\n selector: '[emrCarouselNext]',\r\n exportAs: 'emrCarouselNext',\r\n standalone: true,\r\n host: {\r\n 'class': 'emr-carousel-next',\r\n '[attr.disabled]': '_carousel?.api?.isNextDisabled() ? true : null',\r\n '(click)': '_handleClick()'\r\n }\r\n})\r\nexport class CarouselNextDirective implements OnInit {\r\n protected _carousel = inject<CarouselInterface>(CAROUSEL, {\r\n optional: true\r\n });\r\n\r\n carousel = input<CarouselInterface | null>(null);\r\n\r\n ngOnInit(): void {\r\n if (this.carousel() && !this._carousel) {\r\n this._carousel = this.carousel();\r\n }\r\n }\r\n\r\n _handleClick(): void {\r\n this._carousel?.api.next();\r\n }\r\n}\r\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-carousel.mjs","sources":["../../../projects/components/carousel/src/types.ts","../../../projects/components/carousel/src/draggable-carousel.directive.ts","../../../projects/components/carousel/src/carousel/carousel.component.ts","../../../projects/components/carousel/src/carousel/carousel.component.html","../../../projects/components/carousel/src/carousel-card/carousel-card.component.ts","../../../projects/components/carousel/src/carousel-card/carousel-card.component.html","../../../projects/components/carousel/src/carousel-controls.directive.ts","../../../projects/components/carousel/src/carousel-previous.directive.ts","../../../projects/components/carousel/src/carousel-next.directive.ts","../../../projects/components/carousel/elementar-rt-components-carousel.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface CarouselApiInterface {\n previous: () => void;\n next: () => void;\n isPreviousDisabled: () => boolean;\n isNextDisabled: () => boolean;\n selectedIndex: () => number;\n}\n\nexport interface CarouselInterface {\n api: CarouselApiInterface\n}\n\nexport interface CarouselCardInterface {\n element: HTMLElement;\n}\n\nexport const CAROUSEL = new InjectionToken('CAROUSEL');\nexport const CAROUSEL_CARD = new InjectionToken('CAROUSEL_CARD');\n","import {\n Directive,\n ElementRef,\n Renderer2,\n OnInit,\n OnDestroy,\n NgZone,\n AfterContentInit,\n signal,\n input,\n inject,\n output\n} from '@angular/core';\n\nfunction easeOutQuad(t: number): number {\n return t * (2 - t);\n}\n\n@Directive({\n selector: '[emrDraggableCarousel]',\n standalone: true,\n host: {\n '(scroll)': 'onScroll($event)',\n '(mousedown)': 'onMouseDown($event)',\n '(mouseleave)': 'onMouseLeaveElement($event)',\n '(document:mousemove)': 'onMouseMove($event)',\n '(document:mouseup)': 'onMouseUpOrLeave($event)',\n '(document:mouseleave)': 'onMouseUpOrLeave($event)',\n '[class.dragging-active]': 'isDragging()'\n }\n})\nexport class DraggableCarouselDirective implements OnInit, AfterContentInit, OnDestroy {\n cardSelector = input<string>('.emr-carousel-card');\n snapToCenter = input<boolean>(true);\n snapDebounceTime = input<number>(50);\n snapDuration = input<number>(300);\n resistanceFactor = input<number>(0.5);\n velocityThreshold = input<number>(0.5);\n visibilityDebounceTime = input<number>(100);\n\n indexChange = output<number>();\n\n isDragging = signal(false);\n private startX = signal(0);\n private scrollLeftStart = signal(0);\n private currentTranslateX = signal(0);\n private lastMoveX = signal<number | null>(null);\n private lastMoveTime = signal<number | null>(null);\n private currentVelocityX = signal(0);\n private lastEmittedIndex = signal<number | null>(null);\n\n private snapTimeoutId: ReturnType<typeof setTimeout> | null = null;\n private scrollAnimationId: number | null = null;\n private transformAnimationId: number | null = null;\n private visibilityDebounceTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n private el = inject(ElementRef<HTMLElement>);\n private renderer = inject(Renderer2);\n private zone = inject(NgZone);\n\n private hostElement!: HTMLElement;\n private cards: HTMLElement[] = [];\n\n constructor() {\n // Effect remains the same\n }\n\n ngOnInit(): void {\n this.hostElement = this.el.nativeElement;\n this.renderer.setStyle(this.hostElement, 'cursor', 'grab');\n this.hostElement.style.scrollBehavior = 'auto';\n }\n\n ngAfterContentInit(): void { // <<< Renamed from ngAfterViewInit\n this.cards = Array.from(this.hostElement.querySelectorAll<HTMLElement>(this.cardSelector()));\n\n // Initial state calculation after content is initialized and layout is stable\n setTimeout(() => {\n const actualInitialIndex = this.findCurrentCenterIndex();\n this.emitActiveIndex(actualInitialIndex);\n this.updateCardVisibilityClasses();\n }, 0);\n }\n\n ngOnDestroy(): void {\n this.clearSnapTimeout();\n this.cancelScrollAnimation();\n this.cancelTransformAnimation();\n clearTimeout(this.visibilityDebounceTimeoutId as any);\n }\n\n onScroll(event: Event): void {\n if (this.isDragging() || this.scrollAnimationId !== null || this.transformAnimationId !== null) {\n return;\n }\n\n if (this.visibilityDebounceTimeoutId !== null) {\n clearTimeout(this.visibilityDebounceTimeoutId);\n }\n this.visibilityDebounceTimeoutId = setTimeout(() => {\n this.updateCardVisibilityClasses();\n const currentIndex = this.findCurrentCenterIndex();\n this.emitActiveIndex(currentIndex);\n this.visibilityDebounceTimeoutId = null;\n }, this.visibilityDebounceTime());\n }\n\n onMouseDown(event: MouseEvent): void {\n clearTimeout(this.visibilityDebounceTimeoutId as any);\n this.clearSnapTimeout();\n this.cancelScrollAnimation();\n this.cancelTransformAnimation();\n\n if (this.currentTranslateX() !== 0) {\n this.currentTranslateX.set(0);\n this.renderer.setStyle(this.hostElement, 'transform', '');\n }\n this.hostElement.style.scrollBehavior = 'auto';\n\n if (event.button !== 0) return;\n\n this.isDragging.set(true);\n this.startX.set(event.pageX - this.hostElement.offsetLeft);\n this.scrollLeftStart.set(this.hostElement.scrollLeft);\n\n this.lastMoveX.set(event.pageX);\n this.lastMoveTime.set(event.timeStamp);\n this.currentVelocityX.set(0);\n\n this.renderer.setStyle(this.hostElement, 'cursor', 'grabbing');\n event.preventDefault();\n }\n\n onMouseMove(event: MouseEvent): void {\n if (!this.isDragging()) return;\n event.preventDefault();\n\n const currentX = event.pageX;\n const currentTime = event.timeStamp;\n const lastMoveTime = this.lastMoveTime();\n const lastMoveX = this.lastMoveX();\n\n if (lastMoveTime !== null && lastMoveX !== null && currentTime > lastMoveTime) {\n const deltaX = currentX - lastMoveX;\n const deltaTime = currentTime - lastMoveTime;\n if (deltaTime > 0) {\n this.currentVelocityX.set(-deltaX / deltaTime);\n }\n }\n this.lastMoveX.set(currentX);\n this.lastMoveTime.set(currentTime);\n\n const dragDeltaX = currentX - (this.startX() + this.hostElement.offsetLeft);\n const intendedScrollLeft = this.scrollLeftStart() - dragDeltaX;\n const maxScrollLeft = this.hostElement.scrollWidth - this.hostElement.clientWidth;\n let targetScrollLeft = intendedScrollLeft;\n let translateX = 0;\n\n if (intendedScrollLeft < 0) {\n targetScrollLeft = 0;\n const overpull = -intendedScrollLeft;\n translateX = Math.min(overpull * this.resistanceFactor(), this.hostElement.clientWidth * 0.4);\n } else if (intendedScrollLeft > maxScrollLeft) {\n targetScrollLeft = maxScrollLeft;\n const overpull = intendedScrollLeft - maxScrollLeft;\n translateX = -Math.min(overpull * this.resistanceFactor(), this.hostElement.clientWidth * 0.4);\n }\n\n if (this.hostElement.scrollLeft !== targetScrollLeft) {\n this.hostElement.scrollLeft = targetScrollLeft;\n }\n\n if (this.currentTranslateX() !== translateX) {\n this.currentTranslateX.set(translateX);\n if (Math.abs(translateX) > 0.1) {\n this.renderer.setStyle(this.hostElement, 'transform', `translateX(${translateX}px)`);\n } else {\n this.currentTranslateX.set(0);\n this.renderer.setStyle(this.hostElement, 'transform', '');\n }\n }\n }\n\n onMouseUpOrLeave(event: MouseEvent): void {\n if (!this.isDragging()) return;\n this.stopDragging();\n }\n\n onMouseLeaveElement(event: MouseEvent): void {\n if (!this.isDragging()) {\n this.renderer.setStyle(this.hostElement, 'cursor', 'grab');\n }\n }\n\n private stopDragging(): void {\n if (!this.isDragging()) return;\n\n this.isDragging.set(false);\n this.renderer.setStyle(this.hostElement, 'cursor', 'grab');\n this.clearSnapTimeout();\n\n const wasPulled = Math.abs(this.currentTranslateX()) > 0.1;\n\n if (wasPulled) {\n this.snapTimeoutId = setTimeout(() => {\n this.animateTransformReset();\n this.snapTimeoutId = null;\n }, this.snapDebounceTime() / 2);\n } else if (this.snapToCenter()) {\n this.snapTimeoutId = setTimeout(() => {\n this.initiateSnap();\n this.snapTimeoutId = null;\n }, this.snapDebounceTime());\n } else {\n this.updateCardVisibilityClasses();\n const currentIndex = this.findCurrentCenterIndex();\n this.emitActiveIndex(currentIndex);\n }\n }\n\n private initiateSnap(): void {\n this.cards = Array.from(this.hostElement.querySelectorAll<HTMLElement>(this.cardSelector()));\n if (!this.cards.length) return;\n\n let targetCardIndex = -1;\n const currentScroll = this.hostElement.scrollLeft;\n const containerCenter = currentScroll + this.hostElement.clientWidth / 2;\n\n let currentNearestCardIndex = this.findNearestCardIndex(this.cards, containerCenter);\n if (currentNearestCardIndex < 0) return;\n\n const absVelocity = Math.abs(this.currentVelocityX());\n const threshold = this.velocityThreshold();\n\n if (absVelocity > threshold) {\n if (this.currentVelocityX() < 0) {\n targetCardIndex = currentNearestCardIndex - 1;\n } else {\n targetCardIndex = currentNearestCardIndex + 1;\n }\n targetCardIndex = Math.max(0, Math.min(targetCardIndex, this.cards.length - 1));\n } else {\n targetCardIndex = currentNearestCardIndex;\n }\n\n if (targetCardIndex >= 0 && targetCardIndex < this.cards.length) {\n this.scrollToCard(targetCardIndex, false);\n } else {\n this.updateCardVisibilityClasses();\n }\n }\n\n private scrollToCard(index: number, immediate: boolean = false): void {\n if (index < 0 || index >= this.cards.length) {\n return;\n }\n const targetCard = this.cards[index];\n if (!targetCard) return;\n\n const container = this.hostElement;\n const containerWidth = container.clientWidth;\n const targetCardLeft = targetCard.offsetLeft;\n const targetCardWidth = targetCard.offsetWidth;\n let targetScrollLeft = targetCardLeft + targetCardWidth / 2 - containerWidth / 2;\n const maxScrollLeft = container.scrollWidth - containerWidth;\n targetScrollLeft = Math.max(0, Math.min(targetScrollLeft, maxScrollLeft));\n\n this.cancelScrollAnimation();\n\n if (immediate) {\n container.scrollLeft = targetScrollLeft;\n this.updateCardVisibilityClasses();\n this.emitActiveIndex(index);\n } else {\n this.animateScroll(targetScrollLeft);\n }\n }\n\n private findNearestCardIndex(cards: HTMLElement[], position: number): number {\n let nearestIndex = -1;\n let minDistance = Infinity;\n cards.forEach((card, index) => {\n if (card instanceof HTMLElement) {\n const cardLeft = card.offsetLeft;\n const cardWidth = card.offsetWidth;\n const cardCenter = cardLeft + cardWidth / 2;\n const distance = Math.abs(cardCenter - position);\n if (distance < minDistance) {\n minDistance = distance;\n nearestIndex = index;\n }\n }\n });\n return nearestIndex;\n }\n\n private animateTransformReset(): void {\n this.cancelTransformAnimation();\n const startTranslateX = this.currentTranslateX();\n const distance = 0 - startTranslateX;\n if (Math.abs(distance) < 1) {\n if (startTranslateX !== 0) {\n this.currentTranslateX.set(0);\n this.renderer.setStyle(this.hostElement, 'transform', '');\n const finalIndex = this.findCurrentCenterIndex();\n this.emitActiveIndex(finalIndex);\n this.updateCardVisibilityClasses();\n }\n return;\n }\n const duration = this.snapDuration();\n let startTime: number | null = null;\n const step = (timestamp: number) => {\n if (startTime === null) startTime = timestamp;\n const elapsed = timestamp - startTime;\n const progress = Math.min(1, elapsed / duration);\n const easedProgress = easeOutQuad(progress);\n const newTranslateX = startTranslateX + distance * easedProgress;\n this.currentTranslateX.set(newTranslateX);\n this.renderer.setStyle(this.hostElement, 'transform', `translateX(${newTranslateX}px)`);\n if (progress < 1) {\n this.transformAnimationId = requestAnimationFrame(step);\n } else {\n this.currentTranslateX.set(0);\n this.renderer.setStyle(this.hostElement, 'transform', '');\n this.transformAnimationId = null;\n const finalIndex = this.findCurrentCenterIndex();\n this.emitActiveIndex(finalIndex);\n this.updateCardVisibilityClasses();\n }\n };\n this.zone.runOutsideAngular(() => {\n this.transformAnimationId = requestAnimationFrame(step);\n });\n }\n\n private animateScroll(targetScrollLeft: number): void {\n this.cancelScrollAnimation();\n const container = this.hostElement;\n const startScrollLeft = container.scrollLeft;\n const distance = targetScrollLeft - startScrollLeft;\n if (Math.abs(distance) < 1) {\n const finalIndex = this.findCurrentCenterIndex();\n this.emitActiveIndex(finalIndex);\n this.updateCardVisibilityClasses();\n return;\n }\n const duration = this.snapDuration();\n let startTime: number | null = null;\n const step = (timestamp: number) => {\n if (startTime === null) startTime = timestamp;\n const elapsed = timestamp - startTime;\n const progress = Math.min(1, elapsed / duration);\n const easedProgress = easeOutQuad(progress);\n container.scrollLeft = startScrollLeft + distance * easedProgress;\n if (progress < 1) {\n this.scrollAnimationId = requestAnimationFrame(step);\n } else {\n container.scrollLeft = targetScrollLeft;\n this.scrollAnimationId = null;\n const finalIndex = this.findCurrentCenterIndex();\n this.emitActiveIndex(finalIndex);\n this.updateCardVisibilityClasses();\n }\n };\n this.zone.runOutsideAngular(() => {\n this.scrollAnimationId = requestAnimationFrame(step);\n });\n }\n\n private findCurrentCenterIndex(): number {\n this.cards = Array.from(this.hostElement.querySelectorAll<HTMLElement>(this.cardSelector()));\n if (!this.cards.length) return -1;\n const currentScroll = this.hostElement.scrollLeft;\n const containerCenter = currentScroll + this.hostElement.clientWidth / 2;\n return this.findNearestCardIndex(this.cards, containerCenter);\n }\n\n private emitActiveIndex(index: number): void {\n if (index >= 0 && index !== this.lastEmittedIndex()) {\n this.lastEmittedIndex.set(index);\n this.zone.run(() => {\n this.indexChange.emit(index);\n });\n }\n }\n\n private updateCardVisibilityClasses(): void {\n this.cards = Array.from(this.hostElement.querySelectorAll<HTMLElement>(this.cardSelector()));\n if (!this.cards.length || !this.hostElement.clientWidth) return;\n\n const viewportStart = this.hostElement.scrollLeft;\n const viewportWidth = this.hostElement.clientWidth;\n const viewportEnd = viewportStart + viewportWidth;\n const tolerance = 1;\n\n this.cards.forEach(card => {\n if (card instanceof HTMLElement) {\n const cardStart = card.offsetLeft;\n const cardEnd = cardStart + card.offsetWidth;\n const isSpanned = cardStart >= viewportStart - tolerance && cardEnd <= viewportEnd + tolerance;\n const isInView = cardEnd > viewportStart + tolerance && cardStart < viewportEnd - tolerance;\n\n if (isSpanned) {\n this.renderer.addClass(card, 'is-spanned');\n } else {\n this.renderer.removeClass(card, 'is-spanned');\n }\n\n if (isInView) {\n this.renderer.addClass(card, 'is-in-view');\n } else {\n this.renderer.removeClass(card, 'is-in-view');\n }\n }\n });\n }\n\n private cancelScrollAnimation(): void {\n if (this.scrollAnimationId !== null) {\n cancelAnimationFrame(this.scrollAnimationId);\n this.scrollAnimationId = null;\n }\n }\n\n private cancelTransformAnimation(): void {\n if (this.transformAnimationId !== null) {\n cancelAnimationFrame(this.transformAnimationId);\n this.transformAnimationId = null;\n }\n }\n\n private clearSnapTimeout(): void {\n if (this.snapTimeoutId !== null) {\n clearTimeout(this.snapTimeoutId);\n this.snapTimeoutId = null;\n }\n }\n}\n","import {\n booleanAttribute,\n Component,\n contentChildren,\n ElementRef, input,\n output, signal,\n viewChild\n} from '@angular/core';\nimport { CAROUSEL, CAROUSEL_CARD, CarouselApiInterface, CarouselCardInterface } from '../types';\nimport { DraggableCarouselDirective } from '../draggable-carousel.directive';\n\n@Component({\n selector: 'emr-carousel',\n exportAs: 'emrCarousel',\n providers: [\n {\n provide: CAROUSEL,\n useExisting: CarouselComponent\n }\n ],\n templateUrl: './carousel.component.html',\n styleUrl: './carousel.component.scss',\n hostDirectives: [],\n imports: [\n DraggableCarouselDirective\n ],\n host: {\n 'class': 'emr-carousel',\n '[class.fade]': 'fade()',\n }\n})\nexport class CarouselComponent {\n private _content = viewChild.required<ElementRef>('content');\n private _cards = contentChildren<CarouselCardInterface>(CAROUSEL_CARD);\n\n fade = input(false, {\n transform: booleanAttribute\n });\n snapToCenter = input<boolean>(true);\n snapDebounceTime = input<number>(50);\n snapDuration = input<number>(300);\n resistanceFactor = input<number>(0.5);\n velocityThreshold = input<number>(0.5);\n visibilityDebounceTime = input<number>(100);\n\n readonly indexChange = output<number>();\n\n protected _index = signal(0);\n\n get api(): CarouselApiInterface {\n return {\n isNextDisabled: () => this._isNextDisabled,\n isPreviousDisabled: () => this._isPreviousDisabled,\n previous: () => this._previous(),\n next: () => this._next(),\n selectedIndex: () => this._index()\n }\n }\n\n protected onIndexChanged(index: number): void {\n if (this._index() === index) {\n return;\n }\n\n this._index.set(index);\n this.indexChange.emit(index);\n }\n\n private _previous(): void {\n const contentElement = this._content()?.nativeElement as HTMLElement;\n\n for (let index = this._cards().length - 1; index >= 0; index--) {\n if (index >= this._index()) {\n continue;\n }\n\n const card = this._cards().at(index) as CarouselCardInterface;\n\n if (!this._visibleInParentViewport(contentElement, card.element)) {\n this._scrollToCard(card);\n break;\n }\n }\n }\n\n private _next(): void {\n const contentElement = this._content().nativeElement as HTMLElement;\n const notVisibleCard = this._cards().find(\n (card: CarouselCardInterface, index: number) =>\n !this._visibleInParentViewport(contentElement, card.element) && index > this._index()\n );\n\n if (notVisibleCard) {\n this._scrollToCard(notVisibleCard);\n }\n }\n\n private _scrollToCard(notVisibleCard: CarouselCardInterface): void {\n this._index.set(this._cards().findIndex(card => card === notVisibleCard));\n this.indexChange.emit(this._index());\n notVisibleCard.element.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n inline: 'center'\n });\n }\n\n private _visibleInParentViewport = (parent: HTMLElement, el: HTMLElement) => {\n const parentRect = parent.getBoundingClientRect();\n const elementRect = el.getBoundingClientRect();\n\n return (\n elementRect.right <= parentRect.right &&\n elementRect.left >= parentRect.left\n );\n }\n\n private get _isPreviousDisabled(): boolean {\n return this._index() === 0;\n }\n\n private get _isNextDisabled(): boolean {\n return this._index() === this._cards().length - 1;\n }\n}\n","<div #content class=\"content\"\n emrDraggableCarousel\n [snapToCenter]=\"snapToCenter()\"\n [snapDebounceTime]=\"snapDebounceTime()\"\n [snapDuration]=\"snapDuration()\"\n [resistanceFactor]=\"resistanceFactor()\"\n [velocityThreshold]=\"velocityThreshold()\"\n [visibilityDebounceTime]=\"visibilityDebounceTime()\"\n (indexChange)=\"onIndexChanged($event)\">\n <ng-content select=\"emr-carousel-card,[emr-carousel-card]\"></ng-content>\n</div>\n<div class=\"controls\">\n <ng-content select=\"[emrCarouselControls]\"></ng-content>\n</div>\n","import { Component, ElementRef, inject } from '@angular/core';\nimport { CAROUSEL_CARD } from '../types';\n\n@Component({\n selector: 'emr-carousel-card,[emr-carousel-card]',\n exportAs: 'emrCarouselCard',\n imports: [],\n providers: [\n {\n provide: CAROUSEL_CARD,\n useExisting: CarouselCardComponent\n }\n ],\n templateUrl: './carousel-card.component.html',\n styleUrl: './carousel-card.component.scss',\n host: {\n 'class': 'emr-carousel-card',\n }\n})\nexport class CarouselCardComponent {\n private _elementRef = inject(ElementRef);\n\n get element(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n}\n","<ng-content></ng-content>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[emrCarouselControls]',\n standalone: true,\n host: {\n 'class': 'emr-carousel-controls',\n }\n})\nexport class CarouselControlsDirective {\n\n}\n","import { Directive, inject, input, OnInit } from '@angular/core';\nimport { CAROUSEL, CarouselInterface } from './types';\n\n@Directive({\n selector: '[emrCarouselPrevious]',\n exportAs: 'emrCarouselPrevious',\n standalone: true,\n host: {\n 'class': 'emr-carousel-previous',\n '[attr.disabled]': '_carousel?.api?.isPreviousDisabled() ? true : null',\n '(click)': '_handleClick()'\n }\n})\nexport class CarouselPreviousDirective implements OnInit {\n protected _carousel = inject<CarouselInterface>(CAROUSEL, {\n optional: true\n });\n\n carousel = input<CarouselInterface | null>(null);\n\n ngOnInit(): void {\n if (this.carousel() && !this._carousel) {\n this._carousel = this.carousel();\n }\n }\n\n _handleClick(): void {\n this._carousel?.api.previous();\n }\n}\n","import { Directive, inject, input, OnInit } from '@angular/core';\nimport { CAROUSEL, CarouselInterface } from './types';\n\n@Directive({\n selector: '[emrCarouselNext]',\n exportAs: 'emrCarouselNext',\n standalone: true,\n host: {\n 'class': 'emr-carousel-next',\n '[attr.disabled]': '_carousel?.api?.isNextDisabled() ? true : null',\n '(click)': '_handleClick()'\n }\n})\nexport class CarouselNextDirective implements OnInit {\n protected _carousel = inject<CarouselInterface>(CAROUSEL, {\n optional: true\n });\n\n carousel = input<CarouselInterface | null>(null);\n\n ngOnInit(): void {\n if (this.carousel() && !this._carousel) {\n this._carousel = this.carousel();\n }\n }\n\n _handleClick(): void {\n this._carousel?.api.next();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, booleanAttribute, output, Component } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
class ChipComponent {
|
|
5
|
+
variant = input('input', ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
6
|
+
selected = input(false, ...(ngDevMode ? [{ debugName: "selected", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
7
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
8
|
+
removable = input(true, ...(ngDevMode ? [{ debugName: "removable", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
9
|
+
removed = output();
|
|
10
|
+
selectedChange = output();
|
|
11
|
+
_onClick() {
|
|
12
|
+
if (this.disabled())
|
|
13
|
+
return;
|
|
14
|
+
if (this.variant() === 'filter') {
|
|
15
|
+
this.selectedChange.emit(!this.selected());
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
_onRemove(event) {
|
|
19
|
+
event.stopPropagation();
|
|
20
|
+
if (!this.disabled())
|
|
21
|
+
this.removed.emit();
|
|
22
|
+
}
|
|
23
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ChipComponent, isStandalone: true, selector: "emr-chip", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed", selectedChange: "selectedChange" }, host: { listeners: { "click": "_onClick()" }, properties: { "class.is-selected": "selected()", "class.is-disabled": "disabled()", "attr.data-variant": "variant()" }, classAttribute: "emr-chip" }, exportAs: ["emrChip"], ngImport: i0, template: "<span class=\"chip-leading\">\n <ng-content select=\"[emrChipIcon]\"/>\n</span>\n<span class=\"chip-label\">\n <ng-content/>\n</span>\n@if (removable() && variant() === 'input') {\n <button class=\"chip-remove\" type=\"button\" (click)=\"_onRemove($event)\" aria-label=\"Remove\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n </svg>\n </button>\n}\n", styles: [":host{--emr-chip-height: calc(var(--spacing, .25rem) * 8);--emr-chip-padding: 0 calc(var(--spacing, .25rem) * 3);--emr-chip-gap: calc(var(--spacing, .25rem) * 1.5);--emr-chip-font-size: .875rem;--emr-chip-font-weight: 500;--emr-chip-border-radius: calc(infinity * 1px);--emr-chip-bg: var(--color-surface-container-high);--emr-chip-color: var(--color-on-surface);--emr-chip-border: 1px solid var(--color-outline-variant);--emr-chip-selected-bg: var(--color-secondary-container);--emr-chip-selected-color: var(--color-on-secondary-container);--emr-chip-disabled-opacity: .38;display:inline-flex;align-items:center;gap:var(--emr-chip-gap);height:var(--emr-chip-height);padding:var(--emr-chip-padding);font-size:var(--emr-chip-font-size);font-weight:var(--emr-chip-font-weight);border-radius:var(--emr-chip-border-radius);background:var(--emr-chip-bg);color:var(--emr-chip-color);border:var(--emr-chip-border);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:background .15s ease,color .15s ease}:host.is-selected{background:var(--emr-chip-selected-bg);color:var(--emr-chip-selected-color);border-color:transparent}:host.is-disabled{opacity:var(--emr-chip-disabled-opacity);pointer-events:none}:host .chip-leading{display:contents}:host .chip-leading:empty{display:none}:host .chip-remove{display:flex;align-items:center;justify-content:center;width:calc(var(--spacing, .25rem) * 4.5);height:calc(var(--spacing, .25rem) * 4.5);border-radius:50%;border:none;background:transparent;color:inherit;cursor:pointer;padding:0;margin-inline-end:calc(var(--spacing, .25rem) * -1)}:host .chip-remove:hover{background:currentColor}@supports (color: color-mix(in lab,red,red)){:host .chip-remove:hover{background:color-mix(in srgb,currentColor 12%,transparent)}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] });
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChipComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: 'emr-chip', exportAs: 'emrChip', host: {
|
|
29
|
+
'class': 'emr-chip',
|
|
30
|
+
'[class.is-selected]': 'selected()',
|
|
31
|
+
'[class.is-disabled]': 'disabled()',
|
|
32
|
+
'[attr.data-variant]': 'variant()',
|
|
33
|
+
'(click)': '_onClick()',
|
|
34
|
+
}, template: "<span class=\"chip-leading\">\n <ng-content select=\"[emrChipIcon]\"/>\n</span>\n<span class=\"chip-label\">\n <ng-content/>\n</span>\n@if (removable() && variant() === 'input') {\n <button class=\"chip-remove\" type=\"button\" (click)=\"_onRemove($event)\" aria-label=\"Remove\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n </svg>\n </button>\n}\n", styles: [":host{--emr-chip-height: calc(var(--spacing, .25rem) * 8);--emr-chip-padding: 0 calc(var(--spacing, .25rem) * 3);--emr-chip-gap: calc(var(--spacing, .25rem) * 1.5);--emr-chip-font-size: .875rem;--emr-chip-font-weight: 500;--emr-chip-border-radius: calc(infinity * 1px);--emr-chip-bg: var(--color-surface-container-high);--emr-chip-color: var(--color-on-surface);--emr-chip-border: 1px solid var(--color-outline-variant);--emr-chip-selected-bg: var(--color-secondary-container);--emr-chip-selected-color: var(--color-on-secondary-container);--emr-chip-disabled-opacity: .38;display:inline-flex;align-items:center;gap:var(--emr-chip-gap);height:var(--emr-chip-height);padding:var(--emr-chip-padding);font-size:var(--emr-chip-font-size);font-weight:var(--emr-chip-font-weight);border-radius:var(--emr-chip-border-radius);background:var(--emr-chip-bg);color:var(--emr-chip-color);border:var(--emr-chip-border);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:background .15s ease,color .15s ease}:host.is-selected{background:var(--emr-chip-selected-bg);color:var(--emr-chip-selected-color);border-color:transparent}:host.is-disabled{opacity:var(--emr-chip-disabled-opacity);pointer-events:none}:host .chip-leading{display:contents}:host .chip-leading:empty{display:none}:host .chip-remove{display:flex;align-items:center;justify-content:center;width:calc(var(--spacing, .25rem) * 4.5);height:calc(var(--spacing, .25rem) * 4.5);border-radius:50%;border:none;background:transparent;color:inherit;cursor:pointer;padding:0;margin-inline-end:calc(var(--spacing, .25rem) * -1)}:host .chip-remove:hover{background:currentColor}@supports (color: color-mix(in lab,red,red)){:host .chip-remove:hover{background:color-mix(in srgb,currentColor 12%,transparent)}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
35
|
+
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], removable: [{ type: i0.Input, args: [{ isSignal: true, alias: "removable", required: false }] }], removed: [{ type: i0.Output, args: ["removed"] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }] } });
|
|
36
|
+
|
|
37
|
+
class ChipListComponent {
|
|
38
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChipListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: ChipListComponent, isStandalone: true, selector: "emr-chip-list", host: { attributes: { "role": "listbox" }, classAttribute: "emr-chip-list" }, exportAs: ["emrChipList"], ngImport: i0, template: "<ng-content/>\n", styles: [":host{--emr-chip-list-gap: calc(var(--spacing, .25rem) * 2);display:flex;flex-wrap:wrap;gap:var(--emr-chip-list-gap);align-items:center}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] });
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChipListComponent, decorators: [{
|
|
42
|
+
type: Component,
|
|
43
|
+
args: [{ selector: 'emr-chip-list', exportAs: 'emrChipList', host: {
|
|
44
|
+
'class': 'emr-chip-list',
|
|
45
|
+
'role': 'listbox',
|
|
46
|
+
}, template: "<ng-content/>\n", styles: [":host{--emr-chip-list-gap: calc(var(--spacing, .25rem) * 2);display:flex;flex-wrap:wrap;gap:var(--emr-chip-list-gap);align-items:center}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
47
|
+
}] });
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Generated bundle index. Do not edit.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
export { ChipComponent, ChipListComponent };
|
|
54
|
+
//# sourceMappingURL=elementar-rt-components-chips.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elementar-rt-components-chips.mjs","sources":["../../../projects/components/chips/src/chip/chip.component.ts","../../../projects/components/chips/src/chip/chip.component.html","../../../projects/components/chips/src/chip-list/chip-list.component.ts","../../../projects/components/chips/src/chip-list/chip-list.component.html","../../../projects/components/chips/elementar-rt-components-chips.ts"],"sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\n\nexport type ChipVariant = 'input' | 'filter' | 'suggestion';\n\n@Component({\n selector: 'emr-chip',\n exportAs: 'emrChip',\n templateUrl: './chip.component.html',\n styleUrl: './chip.component.scss',\n host: {\n 'class': 'emr-chip',\n '[class.is-selected]': 'selected()',\n '[class.is-disabled]': 'disabled()',\n '[attr.data-variant]': 'variant()',\n '(click)': '_onClick()',\n }\n})\nexport class ChipComponent {\n variant = input<ChipVariant>('input');\n selected = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n removable = input(true, { transform: booleanAttribute });\n\n readonly removed = output<void>();\n readonly selectedChange = output<boolean>();\n\n protected _onClick() {\n if (this.disabled()) return;\n if (this.variant() === 'filter') {\n this.selectedChange.emit(!this.selected());\n }\n }\n\n protected _onRemove(event: MouseEvent) {\n event.stopPropagation();\n if (!this.disabled()) this.removed.emit();\n }\n}\n","<span class=\"chip-leading\">\n <ng-content select=\"[emrChipIcon]\"/>\n</span>\n<span class=\"chip-label\">\n <ng-content/>\n</span>\n@if (removable() && variant() === 'input') {\n <button class=\"chip-remove\" type=\"button\" (click)=\"_onRemove($event)\" aria-label=\"Remove\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n </svg>\n </button>\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'emr-chip-list',\n exportAs: 'emrChipList',\n templateUrl: './chip-list.component.html',\n styleUrl: './chip-list.component.scss',\n host: {\n 'class': 'emr-chip-list',\n 'role': 'listbox',\n }\n})\nexport class ChipListComponent {}\n","<ng-content/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAiBa,aAAa,CAAA;AACxB,IAAA,OAAO,GAAG,KAAK,CAAc,OAAO,mDAAC;AACrC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AACxD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AACxD,IAAA,SAAS,GAAG,KAAK,CAAC,IAAI,6CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;IAE/C,OAAO,GAAG,MAAM,EAAQ;IACxB,cAAc,GAAG,MAAM,EAAW;IAEjC,QAAQ,GAAA;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACrB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,EAAE;YAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5C;IACF;AAEU,IAAA,SAAS,CAAC,KAAiB,EAAA;QACnC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IAC3C;wGAnBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,k3BCjB1B,wgBAaA,EAAA,MAAA,EAAA,CAAA,+zDAAA,CAAA,EAAA,CAAA;;4FDIa,aAAa,EAAA,UAAA,EAAA,CAAA;kBAbzB,SAAS;+BACE,UAAU,EAAA,QAAA,EACV,SAAS,EAAA,IAAA,EAGb;AACJ,wBAAA,OAAO,EAAE,UAAU;AACnB,wBAAA,qBAAqB,EAAE,YAAY;AACnC,wBAAA,qBAAqB,EAAE,YAAY;AACnC,wBAAA,qBAAqB,EAAE,WAAW;AAClC,wBAAA,SAAS,EAAE,YAAY;AACxB,qBAAA,EAAA,QAAA,EAAA,wgBAAA,EAAA,MAAA,EAAA,CAAA,+zDAAA,CAAA,EAAA;;;MEHU,iBAAiB,CAAA;wGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,kLCZ9B,iBACA,EAAA,MAAA,EAAA,CAAA,+MAAA,CAAA,EAAA,CAAA;;4FDWa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,SAAS;+BACE,eAAe,EAAA,QAAA,EACf,aAAa,EAAA,IAAA,EAGjB;AACJ,wBAAA,OAAO,EAAE,eAAe;AACxB,wBAAA,MAAM,EAAE,SAAS;AAClB,qBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,+MAAA,CAAA,EAAA;;;AEVH;;AAEG;;;;"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, numberAttribute, output, signal, HostListener, Directive, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
class CopyToClipboardDirective {
|
|
5
|
+
emrCopyToClipboard = input.required(...(ngDevMode ? [{ debugName: "emrCopyToClipboard" }] : []));
|
|
6
|
+
resetDelay = input(2000, ...(ngDevMode ? [{ debugName: "resetDelay", transform: numberAttribute }] : [{ transform: numberAttribute }]));
|
|
7
|
+
copied = output();
|
|
8
|
+
copyError = output();
|
|
9
|
+
_copied = signal(false, ...(ngDevMode ? [{ debugName: "_copied" }] : []));
|
|
10
|
+
_timer = null;
|
|
11
|
+
async onClick() {
|
|
12
|
+
const text = this.emrCopyToClipboard();
|
|
13
|
+
try {
|
|
14
|
+
await navigator.clipboard.writeText(text);
|
|
15
|
+
this._copied.set(true);
|
|
16
|
+
this.copied.emit(text);
|
|
17
|
+
if (this._timer)
|
|
18
|
+
clearTimeout(this._timer);
|
|
19
|
+
this._timer = setTimeout(() => this._copied.set(false), this.resetDelay());
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
this.copyError.emit(err);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: CopyToClipboardDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
26
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.25", type: CopyToClipboardDirective, isStandalone: true, selector: "[emrCopyToClipboard]", inputs: { emrCopyToClipboard: { classPropertyName: "emrCopyToClipboard", publicName: "emrCopyToClipboard", isSignal: true, isRequired: true, transformFunction: null }, resetDelay: { classPropertyName: "resetDelay", publicName: "resetDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { copied: "copied", copyError: "copyError" }, host: { listeners: { "click": "onClick()" }, properties: { "attr.data-copied": "_copied() || null" } }, ngImport: i0 });
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: CopyToClipboardDirective, decorators: [{
|
|
29
|
+
type: Directive,
|
|
30
|
+
args: [{
|
|
31
|
+
selector: '[emrCopyToClipboard]',
|
|
32
|
+
standalone: true,
|
|
33
|
+
host: {
|
|
34
|
+
'[attr.data-copied]': '_copied() || null',
|
|
35
|
+
}
|
|
36
|
+
}]
|
|
37
|
+
}], propDecorators: { emrCopyToClipboard: [{ type: i0.Input, args: [{ isSignal: true, alias: "emrCopyToClipboard", required: true }] }], resetDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetDelay", required: false }] }], copied: [{ type: i0.Output, args: ["copied"] }], copyError: [{ type: i0.Output, args: ["copyError"] }], onClick: [{
|
|
38
|
+
type: HostListener,
|
|
39
|
+
args: ['click']
|
|
40
|
+
}] } });
|
|
41
|
+
|
|
42
|
+
class CopyButtonComponent {
|
|
43
|
+
text = input.required(...(ngDevMode ? [{ debugName: "text" }] : []));
|
|
44
|
+
copyLabel = input('Copy', ...(ngDevMode ? [{ debugName: "copyLabel" }] : []));
|
|
45
|
+
copiedLabel = input('Copied!', ...(ngDevMode ? [{ debugName: "copiedLabel" }] : []));
|
|
46
|
+
showLabel = input(false, ...(ngDevMode ? [{ debugName: "showLabel" }] : []));
|
|
47
|
+
resetDelay = input(2000, ...(ngDevMode ? [{ debugName: "resetDelay", transform: numberAttribute }] : [{ transform: numberAttribute }]));
|
|
48
|
+
_copied = signal(false, ...(ngDevMode ? [{ debugName: "_copied" }] : []));
|
|
49
|
+
_timer = null;
|
|
50
|
+
async _copy() {
|
|
51
|
+
try {
|
|
52
|
+
await navigator.clipboard.writeText(this.text());
|
|
53
|
+
this._copied.set(true);
|
|
54
|
+
if (this._timer)
|
|
55
|
+
clearTimeout(this._timer);
|
|
56
|
+
this._timer = setTimeout(() => this._copied.set(false), this.resetDelay());
|
|
57
|
+
}
|
|
58
|
+
catch { /* ignore */ }
|
|
59
|
+
}
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: CopyButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: CopyButtonComponent, isStandalone: true, selector: "emr-copy-button", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, copyLabel: { classPropertyName: "copyLabel", publicName: "copyLabel", isSignal: true, isRequired: false, transformFunction: null }, copiedLabel: { classPropertyName: "copiedLabel", publicName: "copiedLabel", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, resetDelay: { classPropertyName: "resetDelay", publicName: "resetDelay", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
62
|
+
<button
|
|
63
|
+
type="button"
|
|
64
|
+
class="copy-btn"
|
|
65
|
+
[attr.data-copied]="_copied() || null"
|
|
66
|
+
[attr.aria-label]="_copied() ? copiedLabel() : copyLabel()"
|
|
67
|
+
(click)="_copy()"
|
|
68
|
+
>
|
|
69
|
+
@if (_copied()) {
|
|
70
|
+
<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
71
|
+
<polyline points="20 6 9 17 4 12"/>
|
|
72
|
+
</svg>
|
|
73
|
+
@if (showLabel()) { <span>{{ copiedLabel() }}</span> }
|
|
74
|
+
} @else {
|
|
75
|
+
<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
76
|
+
<rect x="9" y="9" width="13" height="13" rx="2"/>
|
|
77
|
+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/>
|
|
78
|
+
</svg>
|
|
79
|
+
@if (showLabel()) { <span>{{ copyLabel() }}</span> }
|
|
80
|
+
}
|
|
81
|
+
</button>
|
|
82
|
+
`, isInline: true, styles: [".copy-btn{display:inline-flex;align-items:center;gap:var(--spacing, .25rem);background:transparent;border:1px solid var(--color-outline-variant);border-radius:.375rem;padding:calc(var(--spacing, .25rem) * 1.5) calc(var(--spacing, .25rem) * 2);cursor:pointer;font-size:.875rem;color:var(--color-on-surface-variant);transition:all .15s ease}.copy-btn:hover{background:var(--color-surface-container);color:var(--color-on-surface)}.copy-btn[data-copied]{color:var(--color-green);border-color:var(--color-green)}.copy-btn .icon{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
83
|
+
}
|
|
84
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: CopyButtonComponent, decorators: [{
|
|
85
|
+
type: Component,
|
|
86
|
+
args: [{ selector: 'emr-copy-button', standalone: true, template: `
|
|
87
|
+
<button
|
|
88
|
+
type="button"
|
|
89
|
+
class="copy-btn"
|
|
90
|
+
[attr.data-copied]="_copied() || null"
|
|
91
|
+
[attr.aria-label]="_copied() ? copiedLabel() : copyLabel()"
|
|
92
|
+
(click)="_copy()"
|
|
93
|
+
>
|
|
94
|
+
@if (_copied()) {
|
|
95
|
+
<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
96
|
+
<polyline points="20 6 9 17 4 12"/>
|
|
97
|
+
</svg>
|
|
98
|
+
@if (showLabel()) { <span>{{ copiedLabel() }}</span> }
|
|
99
|
+
} @else {
|
|
100
|
+
<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
101
|
+
<rect x="9" y="9" width="13" height="13" rx="2"/>
|
|
102
|
+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/>
|
|
103
|
+
</svg>
|
|
104
|
+
@if (showLabel()) { <span>{{ copyLabel() }}</span> }
|
|
105
|
+
}
|
|
106
|
+
</button>
|
|
107
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".copy-btn{display:inline-flex;align-items:center;gap:var(--spacing, .25rem);background:transparent;border:1px solid var(--color-outline-variant);border-radius:.375rem;padding:calc(var(--spacing, .25rem) * 1.5) calc(var(--spacing, .25rem) * 2);cursor:pointer;font-size:.875rem;color:var(--color-on-surface-variant);transition:all .15s ease}.copy-btn:hover{background:var(--color-surface-container);color:var(--color-on-surface)}.copy-btn[data-copied]{color:var(--color-green);border-color:var(--color-green)}.copy-btn .icon{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
108
|
+
}], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], copyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyLabel", required: false }] }], copiedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "copiedLabel", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], resetDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetDelay", required: false }] }] } });
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Generated bundle index. Do not edit.
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
export { CopyButtonComponent, CopyToClipboardDirective };
|
|
115
|
+
//# sourceMappingURL=elementar-rt-components-clipboard-copy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elementar-rt-components-clipboard-copy.mjs","sources":["../../../projects/components/clipboard-copy/src/copy-to-clipboard.directive.ts","../../../projects/components/clipboard-copy/src/copy-button.component.ts","../../../projects/components/clipboard-copy/elementar-rt-components-clipboard-copy.ts"],"sourcesContent":["import { Directive, input, output, signal, HostListener, numberAttribute } from '@angular/core';\n\n@Directive({\n selector: '[emrCopyToClipboard]',\n standalone: true,\n host: {\n '[attr.data-copied]': '_copied() || null',\n }\n})\nexport class CopyToClipboardDirective {\n emrCopyToClipboard = input.required<string>();\n resetDelay = input(2000, { transform: numberAttribute });\n\n copied = output<string>();\n copyError = output<Error>();\n\n protected _copied = signal(false);\n\n private _timer: ReturnType<typeof setTimeout> | null = null;\n\n @HostListener('click')\n async onClick(): Promise<void> {\n const text = this.emrCopyToClipboard();\n try {\n await navigator.clipboard.writeText(text);\n this._copied.set(true);\n this.copied.emit(text);\n if (this._timer) clearTimeout(this._timer);\n this._timer = setTimeout(() => this._copied.set(false), this.resetDelay());\n } catch (err) {\n this.copyError.emit(err as Error);\n }\n }\n}\n","import { Component, input, signal, ChangeDetectionStrategy, numberAttribute } from '@angular/core';\n\n@Component({\n selector: 'emr-copy-button',\n standalone: true,\n template: `\n <button\n type=\"button\"\n class=\"copy-btn\"\n [attr.data-copied]=\"_copied() || null\"\n [attr.aria-label]=\"_copied() ? copiedLabel() : copyLabel()\"\n (click)=\"_copy()\"\n >\n @if (_copied()) {\n <svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"/>\n </svg>\n @if (showLabel()) { <span>{{ copiedLabel() }}</span> }\n } @else {\n <svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/>\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/>\n </svg>\n @if (showLabel()) { <span>{{ copyLabel() }}</span> }\n }\n </button>\n `,\n styles: [`\n @reference 'tailwindcss';\n\n .copy-btn {\n display: inline-flex;\n align-items: center;\n gap: --spacing(1);\n background: transparent;\n border: 1px solid var(--color-outline-variant);\n border-radius: theme(--radius-md);\n padding: --spacing(1.5) --spacing(2);\n cursor: pointer;\n font-size: theme(--text-sm);\n color: var(--color-on-surface-variant);\n transition: all 150ms ease;\n\n &:hover { background: var(--color-surface-container); color: var(--color-on-surface); }\n &[data-copied] { color: var(--color-green); border-color: var(--color-green); }\n\n .icon { width: --spacing(4); height: --spacing(4); flex-shrink: 0; }\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CopyButtonComponent {\n text = input.required<string>();\n copyLabel = input('Copy');\n copiedLabel = input('Copied!');\n showLabel = input(false);\n resetDelay = input(2000, { transform: numberAttribute });\n\n protected _copied = signal(false);\n private _timer: ReturnType<typeof setTimeout> | null = null;\n\n protected async _copy(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.text());\n this._copied.set(true);\n if (this._timer) clearTimeout(this._timer);\n this._timer = setTimeout(() => this._copied.set(false), this.resetDelay());\n } catch { /* ignore */ }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, input, signal, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { inject, input, booleanAttribute, signal, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
4
|
import { codeToHtml } from 'shiki';
|
|
5
5
|
|
|
@@ -9,8 +9,21 @@ class CodeHighlighter {
|
|
|
9
9
|
language = input('bash', ...(ngDevMode ? [{ debugName: "language" }] : []));
|
|
10
10
|
theme = input('dracula-soft', ...(ngDevMode ? [{ debugName: "theme" }] : []));
|
|
11
11
|
inline = input(false, ...(ngDevMode ? [{ debugName: "inline" }] : []));
|
|
12
|
+
showCopyButton = input(true, ...(ngDevMode ? [{ debugName: "showCopyButton", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
12
13
|
content = signal(null, ...(ngDevMode ? [{ debugName: "content" }] : []));
|
|
13
14
|
isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
15
|
+
_copied = signal(false, ...(ngDevMode ? [{ debugName: "_copied" }] : []));
|
|
16
|
+
_copyTimer = null;
|
|
17
|
+
async _copyCode() {
|
|
18
|
+
try {
|
|
19
|
+
await navigator.clipboard.writeText(this.code());
|
|
20
|
+
this._copied.set(true);
|
|
21
|
+
if (this._copyTimer)
|
|
22
|
+
clearTimeout(this._copyTimer);
|
|
23
|
+
this._copyTimer = setTimeout(() => this._copied.set(false), 2000);
|
|
24
|
+
}
|
|
25
|
+
catch { /* ignore */ }
|
|
26
|
+
}
|
|
14
27
|
async ngOnChanges(changes) {
|
|
15
28
|
if (!this.code()) {
|
|
16
29
|
this.content.set(null);
|
|
@@ -38,16 +51,16 @@ class CodeHighlighter {
|
|
|
38
51
|
this.isLoading.set(false);
|
|
39
52
|
}
|
|
40
53
|
}
|
|
41
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
42
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: CodeHighlighter, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: CodeHighlighter, isStandalone: true, selector: "emr-code-highlighter", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: true, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null }, showCopyButton: { classPropertyName: "showCopyButton", publicName: "showCopyButton", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-inline": "inline()" }, classAttribute: "emr-code-highlighter" }, exportAs: ["emrCodeHighlighter"], usesOnChanges: true, ngImport: i0, template: "@if (!inline() && showCopyButton()) {\n <button\n type=\"button\"\n class=\"copy-btn\"\n [attr.data-copied]=\"_copied() || null\"\n [attr.aria-label]=\"_copied() ? 'Copied!' : 'Copy code'\"\n (click)=\"_copyCode()\"\n >\n @if (_copied()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"20 6 9 17 4 12\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>\n }\n </button>\n}\n@if (content()) {\n <div [innerHTML]=\"content()\"></div>\n} @else {\n <div class=\"loading\">Loading\u2026</div>\n}\n", styles: [":host{display:block;position:relative;margin:calc(var(--spacing, .25rem) * 5) 0}:host.inline{display:inline}:host ::ng-deep pre.shiki{padding:calc(var(--spacing, .25rem) * 5);border-radius:1rem;overflow:auto;line-height:1.5;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875rem}:host ::ng-deep code{white-space:pre}:host.loading{opacity:.6}.copy-btn{position:absolute;top:calc(var(--spacing, .25rem) * 3);right:calc(var(--spacing, .25rem) * 3);z-index:2;width:calc(var(--spacing, .25rem) * 8);height:calc(var(--spacing, .25rem) * 8);display:flex;align-items:center;justify-content:center;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);border-radius:.375rem;cursor:pointer;color:#ffffffb3;transition:all .15s ease;opacity:0}:host:hover .copy-btn{opacity:1}.copy-btn:hover{background:#fff3;color:#fff}.copy-btn[data-copied]{color:#4ade80;border-color:#4ade8066}.copy-btn svg{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4)}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
43
56
|
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: CodeHighlighter, decorators: [{
|
|
45
58
|
type: Component,
|
|
46
59
|
args: [{ selector: 'emr-code-highlighter', exportAs: 'emrCodeHighlighter', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
47
60
|
'class': 'emr-code-highlighter',
|
|
48
61
|
'[class.is-inline]': 'inline()',
|
|
49
|
-
}, template: "@if (
|
|
50
|
-
}], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: true }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }] } });
|
|
62
|
+
}, template: "@if (!inline() && showCopyButton()) {\n <button\n type=\"button\"\n class=\"copy-btn\"\n [attr.data-copied]=\"_copied() || null\"\n [attr.aria-label]=\"_copied() ? 'Copied!' : 'Copy code'\"\n (click)=\"_copyCode()\"\n >\n @if (_copied()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"20 6 9 17 4 12\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>\n }\n </button>\n}\n@if (content()) {\n <div [innerHTML]=\"content()\"></div>\n} @else {\n <div class=\"loading\">Loading\u2026</div>\n}\n", styles: [":host{display:block;position:relative;margin:calc(var(--spacing, .25rem) * 5) 0}:host.inline{display:inline}:host ::ng-deep pre.shiki{padding:calc(var(--spacing, .25rem) * 5);border-radius:1rem;overflow:auto;line-height:1.5;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875rem}:host ::ng-deep code{white-space:pre}:host.loading{opacity:.6}.copy-btn{position:absolute;top:calc(var(--spacing, .25rem) * 3);right:calc(var(--spacing, .25rem) * 3);z-index:2;width:calc(var(--spacing, .25rem) * 8);height:calc(var(--spacing, .25rem) * 8);display:flex;align-items:center;justify-content:center;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);border-radius:.375rem;cursor:pointer;color:#ffffffb3;transition:all .15s ease;opacity:0}:host:hover .copy-btn{opacity:1}.copy-btn:hover{background:#fff3;color:#fff}.copy-btn[data-copied]{color:#4ade80;border-color:#4ade8066}.copy-btn svg{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4)}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
63
|
+
}], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: true }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], showCopyButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCopyButton", required: false }] }] } });
|
|
51
64
|
|
|
52
65
|
/**
|
|
53
66
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementar-rt-components-code-highlighter.mjs","sources":["../../../projects/components/code-highlighter/src/code-highlighter/code-highlighter.ts","../../../projects/components/code-highlighter/src/code-highlighter/code-highlighter.html","../../../projects/components/code-highlighter/elementar-rt-components-code-highlighter.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, input, OnChanges, SimpleChanges, signal,
|
|
1
|
+
{"version":3,"file":"elementar-rt-components-code-highlighter.mjs","sources":["../../../projects/components/code-highlighter/src/code-highlighter/code-highlighter.ts","../../../projects/components/code-highlighter/src/code-highlighter/code-highlighter.html","../../../projects/components/code-highlighter/elementar-rt-components-code-highlighter.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, input, OnChanges, SimpleChanges, signal, inject, booleanAttribute } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { codeToHtml } from 'shiki';\n\n@Component({\n selector: 'emr-code-highlighter',\n exportAs: 'emrCodeHighlighter',\n templateUrl: './code-highlighter.html',\n styleUrl: './code-highlighter.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'emr-code-highlighter',\n '[class.is-inline]': 'inline()',\n }\n})\nexport class CodeHighlighter implements OnChanges {\n private sanitizer = inject(DomSanitizer);\n\n code = input.required<string>();\n language = input<string>('bash');\n theme = input<string>('dracula-soft');\n inline = input<boolean>(false);\n showCopyButton = input(true, { transform: booleanAttribute });\n\n readonly content = signal<SafeHtml | null>(null);\n readonly isLoading = signal<boolean>(false);\n readonly _copied = signal(false);\n private _copyTimer: ReturnType<typeof setTimeout> | null = null;\n\n protected async _copyCode(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.code());\n this._copied.set(true);\n if (this._copyTimer) clearTimeout(this._copyTimer);\n this._copyTimer = setTimeout(() => this._copied.set(false), 2000);\n } catch { /* ignore */ }\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (!this.code()) {\n this.content.set(null);\n return;\n }\n this.isLoading.set(true);\n try {\n const highlighted = await codeToHtml(\n this.code(),\n {\n lang: this.language(),\n theme: this.theme(),\n }\n );\n this.content.set(this.sanitizer.bypassSecurityTrustHtml(highlighted));\n } catch (e) {\n // Fallback: raw code escaped inside pre\n const escaped = this.code()\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n const fallback = this.inline() ? `<code>${escaped}</code>` : `<pre class=\"shiki\"><code>${escaped}</code></pre>`;\n this.content.set(this.sanitizer.bypassSecurityTrustHtml(fallback));\n console.error('CodeHighlighter error:', e);\n } finally {\n this.isLoading.set(false);\n }\n }\n}\n","@if (!inline() && showCopyButton()) {\n <button\n type=\"button\"\n class=\"copy-btn\"\n [attr.data-copied]=\"_copied() || null\"\n [attr.aria-label]=\"_copied() ? 'Copied!' : 'Copy code'\"\n (click)=\"_copyCode()\"\n >\n @if (_copied()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"20 6 9 17 4 12\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>\n }\n </button>\n}\n@if (content()) {\n <div [innerHTML]=\"content()\"></div>\n} @else {\n <div class=\"loading\">Loading…</div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAea,eAAe,CAAA;AAClB,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAExC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;AAC/B,IAAA,QAAQ,GAAG,KAAK,CAAS,MAAM,oDAAC;AAChC,IAAA,KAAK,GAAG,KAAK,CAAS,cAAc,iDAAC;AACrC,IAAA,MAAM,GAAG,KAAK,CAAU,KAAK,kDAAC;AAC9B,IAAA,cAAc,GAAG,KAAK,CAAC,IAAI,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAEpD,IAAA,OAAO,GAAG,MAAM,CAAkB,IAAI,mDAAC;AACvC,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;AAClC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;IACxB,UAAU,GAAyC,IAAI;AAErD,IAAA,MAAM,SAAS,GAAA;AACvB,QAAA,IAAI;YACF,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAChD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,IAAI,CAAC,UAAU;AAAE,gBAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QACnE;AAAE,QAAA,MAAM,eAAe;IACzB;IAEA,MAAM,WAAW,CAAC,OAAsB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAClC,IAAI,CAAC,IAAI,EAAE,EACX;AACE,gBAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;AACrB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACpB,aAAA,CACF;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QACvE;QAAE,OAAO,CAAC,EAAE;;AAEV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI;AACtB,iBAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,iBAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,iBAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAA,MAAA,EAAS,OAAO,SAAS,GAAG,CAAA,yBAAA,EAA4B,OAAO,eAAe;AAC/G,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAClE,YAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC;QAC5C;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACF;wGAlDW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,+2BCf5B,gxBAoBA,EAAA,MAAA,EAAA,CAAA,2kCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FDLa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,YACtB,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,OAAO,EAAE,sBAAsB;AAC/B,wBAAA,mBAAmB,EAAE,UAAU;AAChC,qBAAA,EAAA,QAAA,EAAA,gxBAAA,EAAA,MAAA,EAAA,CAAA,2kCAAA,CAAA,EAAA;;;AEbH;;AAEG;;;;"}
|