@semantic-components/ui-lab 0.63.0 → 0.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/semantic-components-ui-lab.mjs +36276 -0
- package/fesm2022/semantic-components-ui-lab.mjs.map +1 -0
- package/package.json +17 -3
- package/types/semantic-components-ui-lab.d.ts +7454 -0
- package/eslint.config.mjs +0 -39
- package/ng-package.json +0 -7
- package/project.json +0 -28
- package/src/index.ts +0 -2
- package/src/lib/components/accordion/README.md +0 -269
- package/src/lib/components/accordion/TODO.md +0 -58
- package/src/lib/components/accordion/accordion-content.ts +0 -31
- package/src/lib/components/accordion/accordion-header.ts +0 -15
- package/src/lib/components/accordion/accordion-item.ts +0 -17
- package/src/lib/components/accordion/accordion-panel.ts +0 -42
- package/src/lib/components/accordion/accordion-trigger-icon.ts +0 -27
- package/src/lib/components/accordion/accordion-trigger.ts +0 -46
- package/src/lib/components/accordion/accordion.ts +0 -35
- package/src/lib/components/accordion/index.ts +0 -7
- package/src/lib/components/alert/README.md +0 -117
- package/src/lib/components/alert/alert-action.ts +0 -17
- package/src/lib/components/alert/alert-description.ts +0 -20
- package/src/lib/components/alert/alert-title.ts +0 -20
- package/src/lib/components/alert/alert.ts +0 -39
- package/src/lib/components/alert/index.ts +0 -4
- package/src/lib/components/alert-dialog/ARCHITECTURE.md +0 -808
- package/src/lib/components/alert-dialog/README.md +0 -215
- package/src/lib/components/alert-dialog/alert-dialog-action.ts +0 -32
- package/src/lib/components/alert-dialog/alert-dialog-cancel.ts +0 -32
- package/src/lib/components/alert-dialog/alert-dialog-description.ts +0 -24
- package/src/lib/components/alert-dialog/alert-dialog-footer.ts +0 -21
- package/src/lib/components/alert-dialog/alert-dialog-header.ts +0 -23
- package/src/lib/components/alert-dialog/alert-dialog-media.ts +0 -22
- package/src/lib/components/alert-dialog/alert-dialog-portal.ts +0 -8
- package/src/lib/components/alert-dialog/alert-dialog-provider.ts +0 -135
- package/src/lib/components/alert-dialog/alert-dialog-title.ts +0 -20
- package/src/lib/components/alert-dialog/alert-dialog-trigger.ts +0 -25
- package/src/lib/components/alert-dialog/alert-dialog.ts +0 -77
- package/src/lib/components/alert-dialog/index.ts +0 -11
- package/src/lib/components/animated-counter/README.md +0 -102
- package/src/lib/components/animated-counter/animated-counter-types.ts +0 -23
- package/src/lib/components/animated-counter/animated-counter.ts +0 -143
- package/src/lib/components/animated-counter/index.ts +0 -6
- package/src/lib/components/aspect-ratio/README.md +0 -97
- package/src/lib/components/aspect-ratio/aspect-ratio.ts +0 -19
- package/src/lib/components/aspect-ratio/index.ts +0 -1
- package/src/lib/components/audio-player/README.md +0 -252
- package/src/lib/components/audio-player/audio-player-audio.ts +0 -32
- package/src/lib/components/audio-player/audio-player-cover.ts +0 -39
- package/src/lib/components/audio-player/audio-player-info.ts +0 -40
- package/src/lib/components/audio-player/audio-player-next.ts +0 -40
- package/src/lib/components/audio-player/audio-player-play-button.ts +0 -39
- package/src/lib/components/audio-player/audio-player-previous.ts +0 -40
- package/src/lib/components/audio-player/audio-player-progress.ts +0 -77
- package/src/lib/components/audio-player/audio-player-repeat.ts +0 -38
- package/src/lib/components/audio-player/audio-player-shuffle.ts +0 -39
- package/src/lib/components/audio-player/audio-player-volume.ts +0 -91
- package/src/lib/components/audio-player/audio-player.ts +0 -246
- package/src/lib/components/audio-player/index.ts +0 -11
- package/src/lib/components/avatar/README.md +0 -117
- package/src/lib/components/avatar/avatar-fallback.ts +0 -25
- package/src/lib/components/avatar/avatar-image.ts +0 -39
- package/src/lib/components/avatar/avatar.ts +0 -25
- package/src/lib/components/avatar/index.ts +0 -3
- package/src/lib/components/avatar-group/README.md +0 -94
- package/src/lib/components/avatar-group/avatar-group-types.ts +0 -9
- package/src/lib/components/avatar-group/avatar-group.ts +0 -181
- package/src/lib/components/avatar-group/index.ts +0 -2
- package/src/lib/components/backdrop/backdrop.ts +0 -75
- package/src/lib/components/backdrop/index.ts +0 -1
- package/src/lib/components/badge/README.md +0 -66
- package/src/lib/components/badge/badge.ts +0 -43
- package/src/lib/components/badge/index.ts +0 -1
- package/src/lib/components/barcode-scanner/README.md +0 -144
- package/src/lib/components/barcode-scanner/barcode-scanner-simple.ts +0 -36
- package/src/lib/components/barcode-scanner/barcode-scanner.ts +0 -460
- package/src/lib/components/barcode-scanner/index.ts +0 -3
- package/src/lib/components/breadcrumb/README.md +0 -80
- package/src/lib/components/breadcrumb/breadcrumb-ellipsis.ts +0 -46
- package/src/lib/components/breadcrumb/breadcrumb-item.ts +0 -17
- package/src/lib/components/breadcrumb/breadcrumb-link.ts +0 -17
- package/src/lib/components/breadcrumb/breadcrumb-list.ts +0 -20
- package/src/lib/components/breadcrumb/breadcrumb-page.ts +0 -20
- package/src/lib/components/breadcrumb/breadcrumb-separator.ts +0 -45
- package/src/lib/components/breadcrumb/breadcrumb.ts +0 -10
- package/src/lib/components/breadcrumb/index.ts +0 -7
- package/src/lib/components/button-group/button-group-separator.ts +0 -26
- package/src/lib/components/button-group/button-group-text.ts +0 -20
- package/src/lib/components/button-group/button-group.ts +0 -43
- package/src/lib/components/button-group/index.ts +0 -10
- package/src/lib/components/calendar/CALENDAR-VIEWS.md +0 -443
- package/src/lib/components/calendar/README.md +0 -227
- package/src/lib/components/calendar/calendar-day-view.ts +0 -310
- package/src/lib/components/calendar/calendar-header.ts +0 -58
- package/src/lib/components/calendar/calendar-month-view.ts +0 -176
- package/src/lib/components/calendar/calendar-year-view.ts +0 -167
- package/src/lib/components/calendar/calendar.ts +0 -273
- package/src/lib/components/calendar/index.ts +0 -1
- package/src/lib/components/card/README.md +0 -86
- package/src/lib/components/card/card-content.ts +0 -15
- package/src/lib/components/card/card-description.ts +0 -17
- package/src/lib/components/card/card-footer.ts +0 -17
- package/src/lib/components/card/card-header.ts +0 -17
- package/src/lib/components/card/card-title.ts +0 -17
- package/src/lib/components/card/card.ts +0 -20
- package/src/lib/components/card/index.ts +0 -6
- package/src/lib/components/chart/README.md +0 -220
- package/src/lib/components/chart/bar-chart.ts +0 -186
- package/src/lib/components/chart/chart-container.ts +0 -33
- package/src/lib/components/chart/chart-legend.ts +0 -42
- package/src/lib/components/chart/chart-tooltip.ts +0 -42
- package/src/lib/components/chart/chart-types.ts +0 -21
- package/src/lib/components/chart/donut-chart.ts +0 -35
- package/src/lib/components/chart/index.ts +0 -9
- package/src/lib/components/chart/line-chart.ts +0 -223
- package/src/lib/components/chart/pie-chart.ts +0 -186
- package/src/lib/components/checkbox/README.md +0 -293
- package/src/lib/components/checkbox/checkbox-field.ts +0 -78
- package/src/lib/components/checkbox/checkbox-indicator.ts +0 -27
- package/src/lib/components/checkbox/checkbox-types.ts +0 -15
- package/src/lib/components/checkbox/checkbox.ts +0 -74
- package/src/lib/components/checkbox/index.ts +0 -5
- package/src/lib/components/checkbox/visual-checkbox.ts +0 -47
- package/src/lib/components/collapsible/README.md +0 -191
- package/src/lib/components/collapsible/collapsible-content.ts +0 -28
- package/src/lib/components/collapsible/collapsible-panel.ts +0 -42
- package/src/lib/components/collapsible/collapsible-trigger.ts +0 -48
- package/src/lib/components/collapsible/collapsible.ts +0 -33
- package/src/lib/components/collapsible/index.ts +0 -4
- package/src/lib/components/color-picker/README.md +0 -218
- package/src/lib/components/color-picker/color-picker-area.ts +0 -107
- package/src/lib/components/color-picker/color-picker-eyedropper.ts +0 -76
- package/src/lib/components/color-picker/color-picker-hue.ts +0 -92
- package/src/lib/components/color-picker/color-picker-input.ts +0 -70
- package/src/lib/components/color-picker/color-picker-preview.ts +0 -21
- package/src/lib/components/color-picker/color-picker-swatches.ts +0 -60
- package/src/lib/components/color-picker/color-picker.ts +0 -227
- package/src/lib/components/color-picker/index.ts +0 -8
- package/src/lib/components/combobox/README.md +0 -166
- package/src/lib/components/combobox/combobox-empty.ts +0 -17
- package/src/lib/components/combobox/combobox-icon.ts +0 -20
- package/src/lib/components/combobox/combobox-input.ts +0 -32
- package/src/lib/components/combobox/combobox-item-indicator.ts +0 -20
- package/src/lib/components/combobox/combobox-item.ts +0 -49
- package/src/lib/components/combobox/combobox-list.ts +0 -40
- package/src/lib/components/combobox/combobox-portal.ts +0 -111
- package/src/lib/components/combobox/combobox-trigger.ts +0 -20
- package/src/lib/components/combobox/combobox.ts +0 -42
- package/src/lib/components/combobox/index.ts +0 -9
- package/src/lib/components/command/README.md +0 -161
- package/src/lib/components/command/command-empty.ts +0 -17
- package/src/lib/components/command/command-group-heading.ts +0 -20
- package/src/lib/components/command/command-group.ts +0 -23
- package/src/lib/components/command/command-input.ts +0 -67
- package/src/lib/components/command/command-item.ts +0 -61
- package/src/lib/components/command/command-list.ts +0 -19
- package/src/lib/components/command/command-separator.ts +0 -18
- package/src/lib/components/command/command-shortcut.ts +0 -20
- package/src/lib/components/command/command.ts +0 -35
- package/src/lib/components/command/index.ts +0 -9
- package/src/lib/components/confetti/README.md +0 -103
- package/src/lib/components/confetti/confetti-types.ts +0 -47
- package/src/lib/components/confetti/confetti.ts +0 -220
- package/src/lib/components/confetti/index.ts +0 -7
- package/src/lib/components/context-menu/README.md +0 -149
- package/src/lib/components/context-menu/context-menu-content.ts +0 -46
- package/src/lib/components/context-menu/context-menu-item.ts +0 -44
- package/src/lib/components/context-menu/context-menu-label.ts +0 -22
- package/src/lib/components/context-menu/context-menu-separator.ts +0 -18
- package/src/lib/components/context-menu/context-menu-shortcut.ts +0 -20
- package/src/lib/components/context-menu/context-menu-sub-content.ts +0 -83
- package/src/lib/components/context-menu/context-menu-sub-trigger.ts +0 -91
- package/src/lib/components/context-menu/context-menu-sub.ts +0 -38
- package/src/lib/components/context-menu/context-menu-trigger.ts +0 -40
- package/src/lib/components/context-menu/context-menu.ts +0 -106
- package/src/lib/components/context-menu/index.ts +0 -10
- package/src/lib/components/copy-button/README.md +0 -211
- package/src/lib/components/copy-button/copy-button-with-text.ts +0 -53
- package/src/lib/components/copy-button/copy-button.ts +0 -137
- package/src/lib/components/copy-button/copy-code.ts +0 -42
- package/src/lib/components/copy-button/copy-input.ts +0 -54
- package/src/lib/components/copy-button/index.ts +0 -4
- package/src/lib/components/countdown/README.md +0 -168
- package/src/lib/components/countdown/countdown-simple.ts +0 -118
- package/src/lib/components/countdown/countdown.ts +0 -235
- package/src/lib/components/countdown/index.ts +0 -3
- package/src/lib/components/data-table/README.md +0 -330
- package/src/lib/components/data-table/data-table-body.ts +0 -28
- package/src/lib/components/data-table/data-table-cell.ts +0 -20
- package/src/lib/components/data-table/data-table-column-toggle.ts +0 -96
- package/src/lib/components/data-table/data-table-filter.ts +0 -45
- package/src/lib/components/data-table/data-table-head.ts +0 -96
- package/src/lib/components/data-table/data-table-header.ts +0 -28
- package/src/lib/components/data-table/data-table-pagination.ts +0 -152
- package/src/lib/components/data-table/data-table-row.ts +0 -23
- package/src/lib/components/data-table/data-table.ts +0 -181
- package/src/lib/components/data-table/index.ts +0 -15
- package/src/lib/components/date-picker/README.md +0 -101
- package/src/lib/components/date-picker/date-picker.ts +0 -175
- package/src/lib/components/date-picker/index.ts +0 -1
- package/src/lib/components/date-range-picker/README.md +0 -148
- package/src/lib/components/date-range-picker/date-range-picker.ts +0 -348
- package/src/lib/components/date-range-picker/index.ts +0 -3
- package/src/lib/components/dialog/ARCHITECTURE.md +0 -792
- package/src/lib/components/dialog/README.md +0 -208
- package/src/lib/components/dialog/dialog-close.ts +0 -33
- package/src/lib/components/dialog/dialog-description.ts +0 -23
- package/src/lib/components/dialog/dialog-footer.ts +0 -20
- package/src/lib/components/dialog/dialog-header.ts +0 -17
- package/src/lib/components/dialog/dialog-portal.ts +0 -8
- package/src/lib/components/dialog/dialog-provider.ts +0 -175
- package/src/lib/components/dialog/dialog-title.ts +0 -20
- package/src/lib/components/dialog/dialog-trigger.ts +0 -25
- package/src/lib/components/dialog/dialog.ts +0 -79
- package/src/lib/components/dialog/index.ts +0 -9
- package/src/lib/components/diff-viewer/README.md +0 -172
- package/src/lib/components/diff-viewer/diff-algorithm.ts +0 -337
- package/src/lib/components/diff-viewer/diff-viewer.ts +0 -369
- package/src/lib/components/diff-viewer/index.ts +0 -8
- package/src/lib/components/dock/README.md +0 -204
- package/src/lib/components/dock/dock-badge.ts +0 -36
- package/src/lib/components/dock/dock-item.ts +0 -76
- package/src/lib/components/dock/dock-items.ts +0 -31
- package/src/lib/components/dock/dock-types.ts +0 -25
- package/src/lib/components/dock/dock.ts +0 -101
- package/src/lib/components/dock/index.ts +0 -11
- package/src/lib/components/drawer/ARCHITECTURE.md +0 -972
- package/src/lib/components/drawer/README.md +0 -205
- package/src/lib/components/drawer/drawer-close.ts +0 -18
- package/src/lib/components/drawer/drawer-description.ts +0 -17
- package/src/lib/components/drawer/drawer-footer.ts +0 -17
- package/src/lib/components/drawer/drawer-handle.ts +0 -17
- package/src/lib/components/drawer/drawer-header.ts +0 -17
- package/src/lib/components/drawer/drawer-portal.ts +0 -8
- package/src/lib/components/drawer/drawer-provider.ts +0 -142
- package/src/lib/components/drawer/drawer-title.ts +0 -17
- package/src/lib/components/drawer/drawer-trigger.ts +0 -24
- package/src/lib/components/drawer/drawer.ts +0 -77
- package/src/lib/components/drawer/index.ts +0 -11
- package/src/lib/components/emoji-picker/README.md +0 -151
- package/src/lib/components/emoji-picker/emoji-picker-trigger.ts +0 -48
- package/src/lib/components/emoji-picker/emoji-picker.ts +0 -666
- package/src/lib/components/emoji-picker/index.ts +0 -3
- package/src/lib/components/empty/README.md +0 -72
- package/src/lib/components/empty/empty-content.ts +0 -20
- package/src/lib/components/empty/empty-description.ts +0 -20
- package/src/lib/components/empty/empty-header.ts +0 -17
- package/src/lib/components/empty/empty-media.ts +0 -29
- package/src/lib/components/empty/empty-title.ts +0 -17
- package/src/lib/components/empty/empty.ts +0 -20
- package/src/lib/components/empty/index.ts +0 -6
- package/src/lib/components/field/README.md +0 -326
- package/src/lib/components/field/field-content.ts +0 -20
- package/src/lib/components/field/field-description.ts +0 -22
- package/src/lib/components/field/field-error.ts +0 -18
- package/src/lib/components/field/field-group.ts +0 -20
- package/src/lib/components/field/field-legend.ts +0 -24
- package/src/lib/components/field/field-separator.ts +0 -20
- package/src/lib/components/field/field-set.ts +0 -20
- package/src/lib/components/field/field-title.ts +0 -20
- package/src/lib/components/field/field.ts +0 -89
- package/src/lib/components/field/index.ts +0 -9
- package/src/lib/components/file-upload/README.md +0 -256
- package/src/lib/components/file-upload/file-upload-dropzone.ts +0 -100
- package/src/lib/components/file-upload/file-upload-item-delete.ts +0 -59
- package/src/lib/components/file-upload/file-upload-item-name.ts +0 -17
- package/src/lib/components/file-upload/file-upload-item-preview.ts +0 -52
- package/src/lib/components/file-upload/file-upload-item-progress.ts +0 -33
- package/src/lib/components/file-upload/file-upload-item-size.ts +0 -39
- package/src/lib/components/file-upload/file-upload-item.ts +0 -35
- package/src/lib/components/file-upload/file-upload-list.ts +0 -17
- package/src/lib/components/file-upload/file-upload-trigger.ts +0 -70
- package/src/lib/components/file-upload/file-upload.ts +0 -156
- package/src/lib/components/file-upload/index.ts +0 -11
- package/src/lib/components/hover-card/ARCHITECTURE.md +0 -341
- package/src/lib/components/hover-card/README.md +0 -118
- package/src/lib/components/hover-card/hover-card-portal.ts +0 -142
- package/src/lib/components/hover-card/hover-card-provider.ts +0 -85
- package/src/lib/components/hover-card/hover-card-trigger.ts +0 -75
- package/src/lib/components/hover-card/hover-card.ts +0 -97
- package/src/lib/components/hover-card/index.ts +0 -5
- package/src/lib/components/image-annotator/README.md +0 -132
- package/src/lib/components/image-annotator/image-annotator-types.ts +0 -29
- package/src/lib/components/image-annotator/image-annotator.ts +0 -549
- package/src/lib/components/image-annotator/index.ts +0 -7
- package/src/lib/components/image-compare/README.md +0 -239
- package/src/lib/components/image-compare/image-compare-after.ts +0 -39
- package/src/lib/components/image-compare/image-compare-before.ts +0 -30
- package/src/lib/components/image-compare/image-compare-container.ts +0 -119
- package/src/lib/components/image-compare/image-compare-label.ts +0 -34
- package/src/lib/components/image-compare/image-compare-slider.ts +0 -103
- package/src/lib/components/image-compare/image-compare.ts +0 -79
- package/src/lib/components/image-compare/index.ts +0 -10
- package/src/lib/components/image-cropper/README.md +0 -322
- package/src/lib/components/image-cropper/image-cropper-aspect-ratio.ts +0 -65
- package/src/lib/components/image-cropper/image-cropper-container.ts +0 -294
- package/src/lib/components/image-cropper/image-cropper-controls.ts +0 -95
- package/src/lib/components/image-cropper/image-cropper-preview.ts +0 -66
- package/src/lib/components/image-cropper/image-cropper.ts +0 -459
- package/src/lib/components/image-cropper/index.ts +0 -10
- package/src/lib/components/index.ts +0 -106
- package/src/lib/components/infinite-scroll/README.md +0 -134
- package/src/lib/components/infinite-scroll/index.ts +0 -4
- package/src/lib/components/infinite-scroll/infinite-scroll-end.ts +0 -9
- package/src/lib/components/infinite-scroll/infinite-scroll-loader.ts +0 -9
- package/src/lib/components/infinite-scroll/infinite-scroll.ts +0 -199
- package/src/lib/components/infinite-scroll/virtual-scroll.ts +0 -83
- package/src/lib/components/input/README.md +0 -93
- package/src/lib/components/input/index.ts +0 -1
- package/src/lib/components/input/input.ts +0 -41
- package/src/lib/components/input-group/README.md +0 -60
- package/src/lib/components/input-group/index.ts +0 -6
- package/src/lib/components/input-group/input-group-addon.ts +0 -46
- package/src/lib/components/input-group/input-group-button.ts +0 -49
- package/src/lib/components/input-group/input-group-input.ts +0 -20
- package/src/lib/components/input-group/input-group-text.ts +0 -20
- package/src/lib/components/input-group/input-group-textarea.ts +0 -20
- package/src/lib/components/input-group/input-group.ts +0 -21
- package/src/lib/components/kanban-board/README.md +0 -238
- package/src/lib/components/kanban-board/index.ts +0 -12
- package/src/lib/components/kanban-board/kanban-board.ts +0 -281
- package/src/lib/components/kanban-board/kanban-card.ts +0 -241
- package/src/lib/components/kanban-board/kanban-column.ts +0 -371
- package/src/lib/components/kanban-board/kanban-types.ts +0 -52
- package/src/lib/components/kbd/README.md +0 -58
- package/src/lib/components/kbd/index.ts +0 -2
- package/src/lib/components/kbd/kbd-group.ts +0 -17
- package/src/lib/components/kbd/kbd.ts +0 -20
- package/src/lib/components/label/README.md +0 -90
- package/src/lib/components/label/index.ts +0 -1
- package/src/lib/components/label/label.ts +0 -32
- package/src/lib/components/language-switcher/index.ts +0 -4
- package/src/lib/components/language-switcher/language-button.ts +0 -98
- package/src/lib/components/language-switcher/language-select.ts +0 -65
- package/src/lib/components/language-switcher/language-toggle.ts +0 -98
- package/src/lib/components/language-switcher/language.service.ts +0 -239
- package/src/lib/components/language-switcher/styles.ts +0 -16
- package/src/lib/components/lightbox/README.md +0 -387
- package/src/lib/components/lightbox/index.ts +0 -9
- package/src/lib/components/lightbox/lightbox-container.ts +0 -338
- package/src/lib/components/lightbox/lightbox-gallery.ts +0 -81
- package/src/lib/components/lightbox/lightbox-trigger.ts +0 -19
- package/src/lib/components/lightbox/lightbox.ts +0 -210
- package/src/lib/components/lightbox/lightbox.types.ts +0 -7
- package/src/lib/components/marquee/README.md +0 -183
- package/src/lib/components/marquee/auto-marquee.ts +0 -73
- package/src/lib/components/marquee/index.ts +0 -6
- package/src/lib/components/marquee/marquee-clone.ts +0 -17
- package/src/lib/components/marquee/marquee-fade.ts +0 -53
- package/src/lib/components/marquee/marquee-item.ts +0 -17
- package/src/lib/components/marquee/marquee-text.ts +0 -80
- package/src/lib/components/marquee/marquee.ts +0 -96
- package/src/lib/components/masonry-grid/README.md +0 -204
- package/src/lib/components/masonry-grid/index.ts +0 -4
- package/src/lib/components/masonry-grid/masonry-grid.ts +0 -178
- package/src/lib/components/masonry-grid/masonry-item.ts +0 -66
- package/src/lib/components/masonry-grid/masonry-types.ts +0 -24
- package/src/lib/components/mention-input/README.md +0 -122
- package/src/lib/components/mention-input/index.ts +0 -2
- package/src/lib/components/mention-input/mention-input.ts +0 -279
- package/src/lib/components/menu/README.md +0 -176
- package/src/lib/components/menu/index.ts +0 -11
- package/src/lib/components/menu/menu-item.ts +0 -32
- package/src/lib/components/menu/menu-portal.ts +0 -53
- package/src/lib/components/menu/menu-provider.ts +0 -50
- package/src/lib/components/menu/menu-separator.ts +0 -19
- package/src/lib/components/menu/menu-sub-icon.ts +0 -18
- package/src/lib/components/menu/menu-sub-portal.ts +0 -53
- package/src/lib/components/menu/menu-sub-provider.ts +0 -52
- package/src/lib/components/menu/menu-sub-trigger.ts +0 -34
- package/src/lib/components/menu/menu-sub.ts +0 -41
- package/src/lib/components/menu/menu-trigger.ts +0 -27
- package/src/lib/components/menu/menu.ts +0 -41
- package/src/lib/components/multi-select/README.md +0 -155
- package/src/lib/components/multi-select/index.ts +0 -2
- package/src/lib/components/multi-select/multi-select.ts +0 -394
- package/src/lib/components/native-checkbox/README.md +0 -113
- package/src/lib/components/native-checkbox/index.ts +0 -1
- package/src/lib/components/native-checkbox/native-checkbox.ts +0 -116
- package/src/lib/components/navbar/ARCHITECTURE.md +0 -605
- package/src/lib/components/navbar/README.md +0 -246
- package/src/lib/components/navbar/index.ts +0 -9
- package/src/lib/components/navbar/navbar-actions.ts +0 -28
- package/src/lib/components/navbar/navbar-brand.ts +0 -24
- package/src/lib/components/navbar/navbar-group.ts +0 -28
- package/src/lib/components/navbar/navbar-mobile-link.ts +0 -28
- package/src/lib/components/navbar/navbar-mobile-menu.ts +0 -71
- package/src/lib/components/navbar/navbar-mobile-portal.ts +0 -118
- package/src/lib/components/navbar/navbar-mobile-trigger.ts +0 -51
- package/src/lib/components/navbar/navbar-provider.ts +0 -85
- package/src/lib/components/navbar/navbar.ts +0 -40
- package/src/lib/components/navigation-menu/README.md +0 -135
- package/src/lib/components/navigation-menu/index.ts +0 -8
- package/src/lib/components/navigation-menu/navigation-menu-content.ts +0 -80
- package/src/lib/components/navigation-menu/navigation-menu-indicator.ts +0 -35
- package/src/lib/components/navigation-menu/navigation-menu-item.ts +0 -88
- package/src/lib/components/navigation-menu/navigation-menu-link.ts +0 -29
- package/src/lib/components/navigation-menu/navigation-menu-list.ts +0 -20
- package/src/lib/components/navigation-menu/navigation-menu-trigger.ts +0 -52
- package/src/lib/components/navigation-menu/navigation-menu-viewport.ts +0 -35
- package/src/lib/components/navigation-menu/navigation-menu.ts +0 -39
- package/src/lib/components/notification-center/README.md +0 -365
- package/src/lib/components/notification-center/index.ts +0 -20
- package/src/lib/components/notification-center/notification-center-container.ts +0 -226
- package/src/lib/components/notification-center/notification-center.ts +0 -157
- package/src/lib/components/notification-center/notification-group.ts +0 -198
- package/src/lib/components/notification-center/notification-item.ts +0 -214
- package/src/lib/components/notification-center/notification-types.ts +0 -52
- package/src/lib/components/number-field/README.md +0 -369
- package/src/lib/components/number-field/index.ts +0 -6
- package/src/lib/components/number-field/number-field-decrement.ts +0 -57
- package/src/lib/components/number-field/number-field-increment.ts +0 -58
- package/src/lib/components/number-field/number-field-input-group.ts +0 -37
- package/src/lib/components/number-field/number-field-input.ts +0 -87
- package/src/lib/components/number-field/number-field-scrub-area.ts +0 -74
- package/src/lib/components/number-field/number-field.ts +0 -143
- package/src/lib/components/opt-field/index.ts +0 -7
- package/src/lib/components/opt-field/opt-field-separator.ts +0 -18
- package/src/lib/components/opt-field/opt-field-slot-caret.ts +0 -31
- package/src/lib/components/opt-field/opt-field-slot-char.ts +0 -19
- package/src/lib/components/opt-field/opt-field-slot-group.ts +0 -17
- package/src/lib/components/opt-field/opt-field-slot-input.ts +0 -60
- package/src/lib/components/opt-field/opt-field-slot.ts +0 -111
- package/src/lib/components/opt-field/opt-field.ts +0 -113
- package/src/lib/components/org-chart/README.md +0 -265
- package/src/lib/components/org-chart/index.ts +0 -8
- package/src/lib/components/org-chart/org-chart-node.ts +0 -253
- package/src/lib/components/org-chart/org-chart-types.ts +0 -22
- package/src/lib/components/org-chart/org-chart.ts +0 -67
- package/src/lib/components/pagination/ACCESSIBILITY_REVIEW.md +0 -530
- package/src/lib/components/pagination/KEYBOARD-NAVIGATION.md +0 -356
- package/src/lib/components/pagination/README.md +0 -359
- package/src/lib/components/pagination/REVIEW_SUMMARY.md +0 -55
- package/src/lib/components/pagination/SMART-PAGINATION.md +0 -345
- package/src/lib/components/pagination/index.ts +0 -11
- package/src/lib/components/pagination/pagination-ellipsis.ts +0 -32
- package/src/lib/components/pagination/pagination-first.ts +0 -75
- package/src/lib/components/pagination/pagination-item.ts +0 -15
- package/src/lib/components/pagination/pagination-last.ts +0 -77
- package/src/lib/components/pagination/pagination-link.ts +0 -70
- package/src/lib/components/pagination/pagination-list.ts +0 -17
- package/src/lib/components/pagination/pagination-next.ts +0 -78
- package/src/lib/components/pagination/pagination-page-size-select.ts +0 -44
- package/src/lib/components/pagination/pagination-previous.ts +0 -78
- package/src/lib/components/pagination/pagination.ts +0 -190
- package/src/lib/components/password-field/README.md +0 -247
- package/src/lib/components/password-field/index.ts +0 -7
- package/src/lib/components/password-field/password-field-input-group.ts +0 -32
- package/src/lib/components/password-field/password-field-input.ts +0 -55
- package/src/lib/components/password-field/password-field-requirements.ts +0 -90
- package/src/lib/components/password-field/password-field-strength-bar.ts +0 -64
- package/src/lib/components/password-field/password-field-strength.ts +0 -91
- package/src/lib/components/password-field/password-field-toggle.ts +0 -86
- package/src/lib/components/password-field/password-field.ts +0 -95
- package/src/lib/components/pdf-viewer/README.md +0 -221
- package/src/lib/components/pdf-viewer/index.ts +0 -47
- package/src/lib/components/pdf-viewer/pdf-viewer-container.ts +0 -54
- package/src/lib/components/pdf-viewer/pdf-viewer-content.ts +0 -60
- package/src/lib/components/pdf-viewer/pdf-viewer-download.ts +0 -34
- package/src/lib/components/pdf-viewer/pdf-viewer-empty.ts +0 -62
- package/src/lib/components/pdf-viewer/pdf-viewer-error.ts +0 -73
- package/src/lib/components/pdf-viewer/pdf-viewer-fullscreen.ts +0 -36
- package/src/lib/components/pdf-viewer/pdf-viewer-loading.ts +0 -44
- package/src/lib/components/pdf-viewer/pdf-viewer-nav.ts +0 -30
- package/src/lib/components/pdf-viewer/pdf-viewer-next-page.ts +0 -38
- package/src/lib/components/pdf-viewer/pdf-viewer-page-info.ts +0 -53
- package/src/lib/components/pdf-viewer/pdf-viewer-prev-page.ts +0 -38
- package/src/lib/components/pdf-viewer/pdf-viewer-print.ts +0 -34
- package/src/lib/components/pdf-viewer/pdf-viewer-retry.ts +0 -36
- package/src/lib/components/pdf-viewer/pdf-viewer-root.ts +0 -239
- package/src/lib/components/pdf-viewer/pdf-viewer-rotate-left.ts +0 -34
- package/src/lib/components/pdf-viewer/pdf-viewer-rotate-right.ts +0 -34
- package/src/lib/components/pdf-viewer/pdf-viewer-separator.ts +0 -28
- package/src/lib/components/pdf-viewer/pdf-viewer-spacer.ts +0 -24
- package/src/lib/components/pdf-viewer/pdf-viewer-toolbar-base.ts +0 -34
- package/src/lib/components/pdf-viewer/pdf-viewer-toolbar.ts +0 -391
- package/src/lib/components/pdf-viewer/pdf-viewer-types.ts +0 -52
- package/src/lib/components/pdf-viewer/pdf-viewer-zoom-in.ts +0 -37
- package/src/lib/components/pdf-viewer/pdf-viewer-zoom-out.ts +0 -37
- package/src/lib/components/pdf-viewer/pdf-viewer-zoom-select.ts +0 -61
- package/src/lib/components/pdf-viewer/pdf-viewer-zoom.ts +0 -30
- package/src/lib/components/pdf-viewer/pdf-viewer.ts +0 -417
- package/src/lib/components/phone-input/README.md +0 -173
- package/src/lib/components/phone-input/countries.ts +0 -69
- package/src/lib/components/phone-input/index.ts +0 -4
- package/src/lib/components/phone-input/phone-input-simple.ts +0 -141
- package/src/lib/components/phone-input/phone-input.ts +0 -304
- package/src/lib/components/popover/ARCHITECTURE.md +0 -569
- package/src/lib/components/popover/README.md +0 -247
- package/src/lib/components/popover/index.ts +0 -6
- package/src/lib/components/popover/popover-close.ts +0 -29
- package/src/lib/components/popover/popover-portal.ts +0 -161
- package/src/lib/components/popover/popover-provider.ts +0 -82
- package/src/lib/components/popover/popover-trigger.ts +0 -27
- package/src/lib/components/popover/popover.ts +0 -66
- package/src/lib/components/progress/README.md +0 -75
- package/src/lib/components/progress/index.ts +0 -1
- package/src/lib/components/progress/progress.ts +0 -62
- package/src/lib/components/qr-code/README.md +0 -124
- package/src/lib/components/qr-code/index.ts +0 -3
- package/src/lib/components/qr-code/qr-code-download.ts +0 -105
- package/src/lib/components/qr-code/qr-code.ts +0 -121
- package/src/lib/components/qr-code/qr-generator.ts +0 -479
- package/src/lib/components/radio-group/README.md +0 -273
- package/src/lib/components/radio-group/index.ts +0 -3
- package/src/lib/components/radio-group/radio-field.ts +0 -43
- package/src/lib/components/radio-group/radio-group.ts +0 -18
- package/src/lib/components/radio-group/radio.ts +0 -30
- package/src/lib/components/range-slider/README.md +0 -118
- package/src/lib/components/range-slider/index.ts +0 -1
- package/src/lib/components/range-slider/range-slider.ts +0 -304
- package/src/lib/components/rating-field/README.md +0 -150
- package/src/lib/components/rating-field/index.ts +0 -3
- package/src/lib/components/rating-field/rating-field.ts +0 -87
- package/src/lib/components/rating-field/rating-item-group.ts +0 -73
- package/src/lib/components/rating-field/rating-item.ts +0 -89
- package/src/lib/components/resizable/README.md +0 -133
- package/src/lib/components/resizable/index.ts +0 -4
- package/src/lib/components/resizable/resizable-handle.ts +0 -160
- package/src/lib/components/resizable/resizable-panel-group.ts +0 -38
- package/src/lib/components/resizable/resizable-panel.ts +0 -51
- package/src/lib/components/resizable/resizable.types.ts +0 -1
- package/src/lib/components/scroll-area/README.md +0 -76
- package/src/lib/components/scroll-area/index.ts +0 -2
- package/src/lib/components/scroll-area/scroll-area.ts +0 -87
- package/src/lib/components/scroll-area/scroll-bar.ts +0 -207
- package/src/lib/components/search-input/README.md +0 -99
- package/src/lib/components/search-input/index.ts +0 -6
- package/src/lib/components/search-input/search-input-types.ts +0 -21
- package/src/lib/components/search-input/search-input.ts +0 -302
- package/src/lib/components/select/README.md +0 -175
- package/src/lib/components/select/index.ts +0 -9
- package/src/lib/components/select/select-icon.ts +0 -20
- package/src/lib/components/select/select-input.ts +0 -32
- package/src/lib/components/select/select-item-indicator.ts +0 -20
- package/src/lib/components/select/select-item.ts +0 -48
- package/src/lib/components/select/select-list.ts +0 -42
- package/src/lib/components/select/select-portal.ts +0 -48
- package/src/lib/components/select/select-trigger.ts +0 -36
- package/src/lib/components/select/select-value.ts +0 -32
- package/src/lib/components/select/select.ts +0 -57
- package/src/lib/components/separator/README.md +0 -59
- package/src/lib/components/separator/index.ts +0 -1
- package/src/lib/components/separator/separator.ts +0 -29
- package/src/lib/components/sheet/ARCHITECTURE.md +0 -915
- package/src/lib/components/sheet/README.md +0 -248
- package/src/lib/components/sheet/index.ts +0 -10
- package/src/lib/components/sheet/sheet-close.ts +0 -32
- package/src/lib/components/sheet/sheet-description.ts +0 -20
- package/src/lib/components/sheet/sheet-footer.ts +0 -20
- package/src/lib/components/sheet/sheet-header.ts +0 -17
- package/src/lib/components/sheet/sheet-portal.ts +0 -8
- package/src/lib/components/sheet/sheet-provider.ts +0 -142
- package/src/lib/components/sheet/sheet-title.ts +0 -20
- package/src/lib/components/sheet/sheet-trigger.ts +0 -24
- package/src/lib/components/sheet/sheet.ts +0 -92
- package/src/lib/components/sidebar/README.md +0 -254
- package/src/lib/components/sidebar/index.ts +0 -24
- package/src/lib/components/sidebar/sidebar-content.ts +0 -20
- package/src/lib/components/sidebar/sidebar-footer.ts +0 -17
- package/src/lib/components/sidebar/sidebar-group-action.ts +0 -24
- package/src/lib/components/sidebar/sidebar-group-content.ts +0 -17
- package/src/lib/components/sidebar/sidebar-group-label.ts +0 -23
- package/src/lib/components/sidebar/sidebar-group.ts +0 -17
- package/src/lib/components/sidebar/sidebar-header.ts +0 -17
- package/src/lib/components/sidebar/sidebar-input.ts +0 -20
- package/src/lib/components/sidebar/sidebar-inset.ts +0 -21
- package/src/lib/components/sidebar/sidebar-menu-action.ts +0 -31
- package/src/lib/components/sidebar/sidebar-menu-badge.ts +0 -25
- package/src/lib/components/sidebar/sidebar-menu-button.ts +0 -55
- package/src/lib/components/sidebar/sidebar-menu-item.ts +0 -17
- package/src/lib/components/sidebar/sidebar-menu-skeleton.ts +0 -40
- package/src/lib/components/sidebar/sidebar-menu-sub-button.ts +0 -33
- package/src/lib/components/sidebar/sidebar-menu-sub-item.ts +0 -15
- package/src/lib/components/sidebar/sidebar-menu-sub.ts +0 -21
- package/src/lib/components/sidebar/sidebar-menu.ts +0 -17
- package/src/lib/components/sidebar/sidebar-provider.ts +0 -128
- package/src/lib/components/sidebar/sidebar-rail.ts +0 -39
- package/src/lib/components/sidebar/sidebar-separator.ts +0 -21
- package/src/lib/components/sidebar/sidebar-state.service.ts +0 -33
- package/src/lib/components/sidebar/sidebar-trigger.ts +0 -38
- package/src/lib/components/sidebar/sidebar.ts +0 -120
- package/src/lib/components/signature-pad/README.md +0 -236
- package/src/lib/components/signature-pad/index.ts +0 -8
- package/src/lib/components/signature-pad/signature-pad-canvas.ts +0 -228
- package/src/lib/components/signature-pad/signature-pad-clear-button.ts +0 -48
- package/src/lib/components/signature-pad/signature-pad-color-button.ts +0 -50
- package/src/lib/components/signature-pad/signature-pad-controls.ts +0 -26
- package/src/lib/components/signature-pad/signature-pad-toolbar.ts +0 -25
- package/src/lib/components/signature-pad/signature-pad-undo-button.ts +0 -48
- package/src/lib/components/signature-pad/signature-pad-width-button.ts +0 -50
- package/src/lib/components/signature-pad/signature-pad.ts +0 -97
- package/src/lib/components/skeleton/README.md +0 -80
- package/src/lib/components/skeleton/index.ts +0 -1
- package/src/lib/components/skeleton/skeleton.ts +0 -17
- package/src/lib/components/slider/README.md +0 -106
- package/src/lib/components/slider/index.ts +0 -4
- package/src/lib/components/slider/slider-range.ts +0 -28
- package/src/lib/components/slider/slider-thumb.ts +0 -73
- package/src/lib/components/slider/slider-track.ts +0 -31
- package/src/lib/components/slider/slider.ts +0 -185
- package/src/lib/components/sortable-list/README.md +0 -229
- package/src/lib/components/sortable-list/index.ts +0 -4
- package/src/lib/components/sortable-list/sortable-handle.ts +0 -72
- package/src/lib/components/sortable-list/sortable-item.ts +0 -162
- package/src/lib/components/sortable-list/sortable-list.ts +0 -127
- package/src/lib/components/sortable-list/sortable-overlay.ts +0 -31
- package/src/lib/components/speed-dial/README.md +0 -259
- package/src/lib/components/speed-dial/index.ts +0 -7
- package/src/lib/components/speed-dial/speed-dial-action.ts +0 -99
- package/src/lib/components/speed-dial/speed-dial-types.ts +0 -14
- package/src/lib/components/speed-dial/speed-dial.ts +0 -224
- package/src/lib/components/spinner/README.md +0 -41
- package/src/lib/components/spinner/index.ts +0 -1
- package/src/lib/components/spinner/spinner.ts +0 -20
- package/src/lib/components/split-button/README.md +0 -99
- package/src/lib/components/split-button/index.ts +0 -6
- package/src/lib/components/split-button/split-button-types.ts +0 -14
- package/src/lib/components/split-button/split-button.ts +0 -240
- package/src/lib/components/spotlight/README.md +0 -136
- package/src/lib/components/spotlight/index.ts +0 -5
- package/src/lib/components/spotlight/spotlight-actions.ts +0 -24
- package/src/lib/components/spotlight/spotlight-description.ts +0 -24
- package/src/lib/components/spotlight/spotlight-title.ts +0 -24
- package/src/lib/components/spotlight/spotlight.ts +0 -367
- package/src/lib/components/stat-card/README.md +0 -319
- package/src/lib/components/stat-card/REFACTORING-COMPLETE.md +0 -250
- package/src/lib/components/stat-card/REFACTORING-PLAN.md +0 -471
- package/src/lib/components/stat-card/index.ts +0 -11
- package/src/lib/components/stat-card/stat-card-change.ts +0 -27
- package/src/lib/components/stat-card/stat-card-description.ts +0 -17
- package/src/lib/components/stat-card/stat-card-icon.ts +0 -28
- package/src/lib/components/stat-card/stat-card-label.ts +0 -27
- package/src/lib/components/stat-card/stat-card-types.ts +0 -3
- package/src/lib/components/stat-card/stat-card-value.ts +0 -27
- package/src/lib/components/stat-card/stat-card.ts +0 -34
- package/src/lib/components/stepper/README.md +0 -250
- package/src/lib/components/stepper/index.ts +0 -12
- package/src/lib/components/stepper/stepper-content.ts +0 -25
- package/src/lib/components/stepper/stepper-description.ts +0 -17
- package/src/lib/components/stepper/stepper-item.ts +0 -35
- package/src/lib/components/stepper/stepper-list.ts +0 -26
- package/src/lib/components/stepper/stepper-next.ts +0 -41
- package/src/lib/components/stepper/stepper-previous.ts +0 -42
- package/src/lib/components/stepper/stepper-separator.ts +0 -35
- package/src/lib/components/stepper/stepper-title.ts +0 -17
- package/src/lib/components/stepper/stepper-trigger.ts +0 -67
- package/src/lib/components/stepper/stepper-types.ts +0 -10
- package/src/lib/components/stepper/stepper.ts +0 -46
- package/src/lib/components/switch/README.md +0 -99
- package/src/lib/components/switch/index.ts +0 -1
- package/src/lib/components/switch/switch.ts +0 -56
- package/src/lib/components/table/README.md +0 -105
- package/src/lib/components/table/index.ts +0 -8
- package/src/lib/components/table/table-body.ts +0 -17
- package/src/lib/components/table/table-caption.ts +0 -17
- package/src/lib/components/table/table-cell.ts +0 -17
- package/src/lib/components/table/table-footer.ts +0 -20
- package/src/lib/components/table/table-header-cell.ts +0 -20
- package/src/lib/components/table/table-header.ts +0 -17
- package/src/lib/components/table/table-row.ts +0 -20
- package/src/lib/components/table/table.ts +0 -17
- package/src/lib/components/tabs/README.md +0 -169
- package/src/lib/components/tabs/index.ts +0 -4
- package/src/lib/components/tabs/tab-list.ts +0 -38
- package/src/lib/components/tabs/tab-panel.ts +0 -45
- package/src/lib/components/tabs/tab.ts +0 -45
- package/src/lib/components/tabs/tabs.ts +0 -28
- package/src/lib/components/tag-input/README.md +0 -271
- package/src/lib/components/tag-input/index.ts +0 -5
- package/src/lib/components/tag-input/tag-input-clear.ts +0 -60
- package/src/lib/components/tag-input/tag-input-count.ts +0 -42
- package/src/lib/components/tag-input/tag-input-field.ts +0 -121
- package/src/lib/components/tag-input/tag-input-tag.ts +0 -70
- package/src/lib/components/tag-input/tag-input.ts +0 -118
- package/src/lib/components/textarea/README.md +0 -80
- package/src/lib/components/textarea/index.ts +0 -1
- package/src/lib/components/textarea/textarea.ts +0 -41
- package/src/lib/components/theme-toggle/README.md +0 -258
- package/src/lib/components/theme-toggle/index.ts +0 -4
- package/src/lib/components/theme-toggle/theme-field.ts +0 -40
- package/src/lib/components/theme-toggle/theme-select.ts +0 -56
- package/src/lib/components/theme-toggle/theme-toggle.ts +0 -76
- package/src/lib/components/theme-toggle/theme.service.ts +0 -81
- package/src/lib/components/time-picker/README.md +0 -188
- package/src/lib/components/time-picker/index.ts +0 -5
- package/src/lib/components/time-picker/time-picker-clock.ts +0 -195
- package/src/lib/components/time-picker/time-picker-input.ts +0 -174
- package/src/lib/components/time-picker/time-picker-period.ts +0 -89
- package/src/lib/components/time-picker/time-picker-separator.ts +0 -20
- package/src/lib/components/time-picker/time-picker.ts +0 -87
- package/src/lib/components/timeline/README.md +0 -177
- package/src/lib/components/timeline/index.ts +0 -8
- package/src/lib/components/timeline/timeline-connector.ts +0 -29
- package/src/lib/components/timeline/timeline-content.ts +0 -26
- package/src/lib/components/timeline/timeline-description.ts +0 -17
- package/src/lib/components/timeline/timeline-dot.ts +0 -45
- package/src/lib/components/timeline/timeline-item.ts +0 -28
- package/src/lib/components/timeline/timeline-time.ts +0 -17
- package/src/lib/components/timeline/timeline-title.ts +0 -17
- package/src/lib/components/timeline/timeline.ts +0 -17
- package/src/lib/components/timezone/index.ts +0 -5
- package/src/lib/components/timezone/timezone-badge.ts +0 -85
- package/src/lib/components/timezone/timezone-button.ts +0 -104
- package/src/lib/components/timezone/timezone-display.ts +0 -105
- package/src/lib/components/timezone/timezone-select.ts +0 -87
- package/src/lib/components/timezone/timezone.service.ts +0 -233
- package/src/lib/components/toast/README.md +0 -151
- package/src/lib/components/toast/index.ts +0 -8
- package/src/lib/components/toast/toast-action.ts +0 -27
- package/src/lib/components/toast/toast-close.ts +0 -29
- package/src/lib/components/toast/toast-description.ts +0 -17
- package/src/lib/components/toast/toast-stack.ts +0 -95
- package/src/lib/components/toast/toast-title.ts +0 -17
- package/src/lib/components/toast/toast.ts +0 -64
- package/src/lib/components/toast/toast.types.ts +0 -24
- package/src/lib/components/toast/toaster.ts +0 -67
- package/src/lib/components/toggle/README.md +0 -72
- package/src/lib/components/toggle/index.ts +0 -1
- package/src/lib/components/toggle/toggle.ts +0 -53
- package/src/lib/components/toggle-group/README.md +0 -101
- package/src/lib/components/toggle-group/index.ts +0 -2
- package/src/lib/components/toggle-group/toggle-group-item.ts +0 -62
- package/src/lib/components/toggle-group/toggle-group.ts +0 -53
- package/src/lib/components/toolbar/README.md +0 -76
- package/src/lib/components/toolbar/index.ts +0 -4
- package/src/lib/components/toolbar/toolbar-separator.ts +0 -32
- package/src/lib/components/toolbar/toolbar-widget-group.ts +0 -35
- package/src/lib/components/toolbar/toolbar-widget.ts +0 -48
- package/src/lib/components/toolbar/toolbar.ts +0 -44
- package/src/lib/components/tooltip/ANIMATIONS.md +0 -274
- package/src/lib/components/tooltip/README.md +0 -100
- package/src/lib/components/tooltip/index.ts +0 -3
- package/src/lib/components/tooltip/tooltip-manager.ts +0 -194
- package/src/lib/components/tooltip/tooltip-trigger.ts +0 -148
- package/src/lib/components/tooltip/tooltip.ts +0 -72
- package/src/lib/components/tour-guide/README.md +0 -158
- package/src/lib/components/tour-guide/index.ts +0 -2
- package/src/lib/components/tour-guide/tour-guide.ts +0 -492
- package/src/lib/components/transfer-list/README.md +0 -98
- package/src/lib/components/transfer-list/index.ts +0 -5
- package/src/lib/components/transfer-list/transfer-list-types.ts +0 -11
- package/src/lib/components/transfer-list/transfer-list.ts +0 -434
- package/src/lib/components/tree/README.md +0 -358
- package/src/lib/components/tree/TODO.md +0 -94
- package/src/lib/components/tree/index.ts +0 -6
- package/src/lib/components/tree/tree-item-group.ts +0 -40
- package/src/lib/components/tree/tree-item-icon.ts +0 -17
- package/src/lib/components/tree/tree-item-trigger-icon.ts +0 -26
- package/src/lib/components/tree/tree-item-trigger.ts +0 -51
- package/src/lib/components/tree/tree-item.ts +0 -64
- package/src/lib/components/tree/tree.ts +0 -21
- package/src/lib/components/video-player/README.md +0 -275
- package/src/lib/components/video-player/index.ts +0 -14
- package/src/lib/components/video-player/video-player-big-play-button.ts +0 -35
- package/src/lib/components/video-player/video-player-buffering.ts +0 -36
- package/src/lib/components/video-player/video-player-controls.ts +0 -28
- package/src/lib/components/video-player/video-player-fullscreen-button.ts +0 -38
- package/src/lib/components/video-player/video-player-pip-button.ts +0 -37
- package/src/lib/components/video-player/video-player-play-button.ts +0 -37
- package/src/lib/components/video-player/video-player-progress.ts +0 -56
- package/src/lib/components/video-player/video-player-skip-button.ts +0 -44
- package/src/lib/components/video-player/video-player-speed-button.ts +0 -74
- package/src/lib/components/video-player/video-player-time.ts +0 -31
- package/src/lib/components/video-player/video-player-types.ts +0 -13
- package/src/lib/components/video-player/video-player-video.ts +0 -127
- package/src/lib/components/video-player/video-player-volume.ts +0 -61
- package/src/lib/components/video-player/video-player.ts +0 -139
- package/src/lib/components/virtual-list/README.md +0 -120
- package/src/lib/components/virtual-list/index.ts +0 -2
- package/src/lib/components/virtual-list/virtual-list-types.ts +0 -9
- package/src/lib/components/virtual-list/virtual-list.ts +0 -174
- package/src/lib/layouts/auth-layout.ts +0 -30
- package/src/lib/layouts/index.ts +0 -3
- package/src/lib/layouts/sidebar-layout.ts +0 -37
- package/src/lib/layouts/stacked-layout/README.md +0 -84
- package/src/lib/layouts/stacked-layout/index.ts +0 -1
- package/src/lib/layouts/stacked-layout/stacked-layout.ts +0 -39
- package/tsconfig.json +0 -28
- package/tsconfig.lib.json +0 -12
- package/tsconfig.lib.prod.json +0 -9
|
@@ -1,915 +0,0 @@
|
|
|
1
|
-
# Sheet Architecture
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The sheet component uses a multi-signal architecture pattern to ensure smooth, complete animations before DOM cleanup. This document focuses on how animations are coordinated across the sheet content and backdrop using a signal counter to track completion of both animations.
|
|
6
|
-
|
|
7
|
-
**Sheet-Specific Feature:** Unlike dialog which uses zoom animations, sheets slide in from different sides (top, right, bottom, left) with directional slide animations.
|
|
8
|
-
|
|
9
|
-
## Component Structure
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
ScSheetProvider (Root State Manager + CDK Overlay Manager)
|
|
13
|
-
├── ScSheetTrigger (Opens sheet)
|
|
14
|
-
└── ng-template[scSheetPortal] (Lazy content, portaled to CDK overlay)
|
|
15
|
-
│
|
|
16
|
-
Inside CDK Overlay (managed by Provider):
|
|
17
|
-
├── CDK Backdrop (Transparent - click blocking only)
|
|
18
|
-
├── ScBackdrop (Visual backdrop with animations)
|
|
19
|
-
└── ScSheet (Sheet Content - slides from configured side)
|
|
20
|
-
├── ScSheetHeader
|
|
21
|
-
│ └── ScSheetTitle
|
|
22
|
-
│ └── ScSheetDescription
|
|
23
|
-
└── ScSheetFooter
|
|
24
|
-
└── ScSheetClose
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### ScSheetPortal Directive
|
|
28
|
-
|
|
29
|
-
`ScSheetPortal` is a structural directive on `ng-template` that marks the lazy content to be portaled into the CDK overlay. It holds a reference to the `TemplateRef` which the provider reads via `contentChild`.
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
32
|
-
@Directive({
|
|
33
|
-
selector: 'ng-template[scSheetPortal]',
|
|
34
|
-
})
|
|
35
|
-
export class ScSheetPortal {
|
|
36
|
-
readonly templateRef = inject(TemplateRef);
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
The provider queries it and projects the template into the overlay:
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
// In ScSheetProvider
|
|
44
|
-
protected readonly sheetPortal = contentChild.required(ScSheetPortal);
|
|
45
|
-
|
|
46
|
-
// In provider's overlay template
|
|
47
|
-
<ng-container [ngTemplateOutlet]="sheetPortal().templateRef" />
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Why a Directive?
|
|
51
|
-
|
|
52
|
-
- **Explicit**: A bare `<ng-template>` is ambiguous; `scSheetPortal` communicates intent
|
|
53
|
-
- **Lazy**: Content inside `ng-template` is not instantiated until the provider stamps it
|
|
54
|
-
- **Provider owns lifecycle**: The provider decides _when_ to stamp the template (on open)
|
|
55
|
-
- **DI preserved**: Using `TemplatePortal(overlayTemplate, viewContainerRef)` with the provider's own `ViewContainerRef` keeps the injector chain intact -- `ScSheet` can inject `ScSheetProvider`
|
|
56
|
-
|
|
57
|
-
## The Multi-Signal Pattern
|
|
58
|
-
|
|
59
|
-
The core of the animation architecture is the separation of **logical state** from **physical state**, with a **coordination signal** to track animation completions.
|
|
60
|
-
|
|
61
|
-
### Signal 1: `open` (Logical State)
|
|
62
|
-
|
|
63
|
-
**Purpose:** Controls what the sheet _should_ be doing
|
|
64
|
-
|
|
65
|
-
```typescript
|
|
66
|
-
// In ScSheetProvider
|
|
67
|
-
readonly open = model<boolean>(false);
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**Responsibilities:**
|
|
71
|
-
|
|
72
|
-
- Represents user intent ("should the sheet be visible?")
|
|
73
|
-
- Triggers animation state changes
|
|
74
|
-
- When `true`: Triggers entry animations
|
|
75
|
-
- When `false`: Triggers exit animations
|
|
76
|
-
|
|
77
|
-
### Signal 2: `overlayOpen` (Physical State)
|
|
78
|
-
|
|
79
|
-
**Purpose:** Controls whether DOM exists
|
|
80
|
-
|
|
81
|
-
```typescript
|
|
82
|
-
// In ScSheetProvider
|
|
83
|
-
readonly overlayOpen = signal<boolean>(false);
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
**Responsibilities:**
|
|
87
|
-
|
|
88
|
-
- Controls CDK overlay attachment/detachment
|
|
89
|
-
- Stays `true` during close animations (critical!)
|
|
90
|
-
- Only becomes `false` after animations complete
|
|
91
|
-
- Ensures animations can play before DOM removal
|
|
92
|
-
|
|
93
|
-
### Signal 3: `animationsCompleted` (Animation Coordination)
|
|
94
|
-
|
|
95
|
-
**Purpose:** Tracks completion of multiple animations
|
|
96
|
-
|
|
97
|
-
```typescript
|
|
98
|
-
// In ScSheetProvider (private)
|
|
99
|
-
private readonly animationsCompleted = signal<number>(0);
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
**Responsibilities:**
|
|
103
|
-
|
|
104
|
-
- Counts completed animations during close sequence
|
|
105
|
-
- Target count: 2 (sheet + backdrop)
|
|
106
|
-
- Resets to 0 when opening (for next cycle)
|
|
107
|
-
- Triggers overlay closure when target reached
|
|
108
|
-
|
|
109
|
-
### Why Both Are Needed
|
|
110
|
-
|
|
111
|
-
**The Problem:**
|
|
112
|
-
|
|
113
|
-
CDK overlay's lifecycle is tied to DOM presence:
|
|
114
|
-
|
|
115
|
-
```typescript
|
|
116
|
-
// This doesn't work:
|
|
117
|
-
if (open()) {
|
|
118
|
-
overlayRef.attach(portal); // DOM mounted
|
|
119
|
-
} else {
|
|
120
|
-
overlayRef.detach(); // DOM removed IMMEDIATELY
|
|
121
|
-
// Animation never plays - element is gone!
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
**The Solution:**
|
|
126
|
-
|
|
127
|
-
Separate signals allow animation completion:
|
|
128
|
-
|
|
129
|
-
```typescript
|
|
130
|
-
// This works:
|
|
131
|
-
if (overlayOpen()) {
|
|
132
|
-
// Physical state
|
|
133
|
-
overlayRef.attach(portal); // DOM mounted
|
|
134
|
-
} else {
|
|
135
|
-
overlayRef.detach(); // DOM removed AFTER animations
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// Meanwhile, open() controls animations:
|
|
139
|
-
if (open()) {
|
|
140
|
-
// Logical state
|
|
141
|
-
state = 'open'; // Entry animation
|
|
142
|
-
} else {
|
|
143
|
-
state = 'closed'; // Exit animation (DOM still mounted!)
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## Animation Architecture
|
|
148
|
-
|
|
149
|
-
### Three Layers (Separated by Concern)
|
|
150
|
-
|
|
151
|
-
1. **CDK Backdrop** (Transparent - No Animation)
|
|
152
|
-
- Class: `cdk-overlay-transparent-backdrop`
|
|
153
|
-
- Purpose: Click blocking and scroll prevention
|
|
154
|
-
- Functional layer only, no visual styling
|
|
155
|
-
|
|
156
|
-
2. **ScBackdrop Component** (300ms fade animation)
|
|
157
|
-
- Reusable component from `components/backdrop`
|
|
158
|
-
- Fade effect via Tailwind animate classes
|
|
159
|
-
- Positioned with `-z-10` (behind sheet)
|
|
160
|
-
- Emits `animationComplete` output when close animation finishes
|
|
161
|
-
|
|
162
|
-
3. **Sheet Content Animation** (300ms directional slide)
|
|
163
|
-
- Slide animations from configured side (top/right/bottom/left)
|
|
164
|
-
- Managed by Tailwind animate classes
|
|
165
|
-
- Completion detected via `animationend` event (triggers cleanup)
|
|
166
|
-
|
|
167
|
-
### Synchronization
|
|
168
|
-
|
|
169
|
-
Both ScBackdrop and Sheet animations:
|
|
170
|
-
|
|
171
|
-
- Start simultaneously when `open` changes
|
|
172
|
-
- Use same duration (300ms)
|
|
173
|
-
- Respond to same `data-state` attribute
|
|
174
|
-
- Inside same overlay (removed together)
|
|
175
|
-
|
|
176
|
-
### Sheet Content Animations
|
|
177
|
-
|
|
178
|
-
Applied via Tailwind classes in `sheet.ts`:
|
|
179
|
-
|
|
180
|
-
```typescript
|
|
181
|
-
const sideAnimationClasses: Record<SheetSide, string> = {
|
|
182
|
-
top: 'slide-in-from-top data-[state=closed]:slide-out-to-top',
|
|
183
|
-
right: 'slide-in-from-right data-[state=closed]:slide-out-to-right',
|
|
184
|
-
bottom: 'slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',
|
|
185
|
-
left: 'slide-in-from-left data-[state=closed]:slide-out-to-left',
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
protected readonly class = computed(() => {
|
|
189
|
-
const side = this.sheetProvider.side();
|
|
190
|
-
|
|
191
|
-
return cn(
|
|
192
|
-
// Base styles
|
|
193
|
-
'bg-background fixed z-50 flex flex-col gap-4 p-6 shadow-lg',
|
|
194
|
-
sidePositionClasses[side],
|
|
195
|
-
|
|
196
|
-
// Entry animation (fade + slide)
|
|
197
|
-
'animate-in fade-in-0 duration-300',
|
|
198
|
-
sideAnimationClasses[side],
|
|
199
|
-
|
|
200
|
-
// Exit animation (triggered by data-state="closed")
|
|
201
|
-
'data-[state=closed]:animate-out',
|
|
202
|
-
'data-[state=closed]:fade-out-0',
|
|
203
|
-
'data-[state=closed]:duration-300',
|
|
204
|
-
);
|
|
205
|
-
});
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
**Animation Flow:**
|
|
209
|
-
|
|
210
|
-
1. `state` signal changes from `'open'` to `'closed'`
|
|
211
|
-
2. `data-state` attribute updates to `"closed"`
|
|
212
|
-
3. Tailwind applies exit animation classes (fade + slide to configured side)
|
|
213
|
-
4. Animation plays for 300ms
|
|
214
|
-
5. `animationend` event fires
|
|
215
|
-
|
|
216
|
-
**Directional Slide Animations:**
|
|
217
|
-
|
|
218
|
-
The sheet uses different slide directions based on the `side` input:
|
|
219
|
-
|
|
220
|
-
- **top**: Slides in from top, slides out to top
|
|
221
|
-
- **right**: Slides in from right, slides out to right
|
|
222
|
-
- **bottom**: Slides in from bottom, slides out to bottom
|
|
223
|
-
- **left**: Slides in from left, slides out to left
|
|
224
|
-
|
|
225
|
-
Each direction uses Tailwind's directional slide utilities combined with fade for smooth entry/exit.
|
|
226
|
-
|
|
227
|
-
### ScBackdrop Component Animations
|
|
228
|
-
|
|
229
|
-
Managed via ScBackdrop component from `components/backdrop`:
|
|
230
|
-
|
|
231
|
-
```typescript
|
|
232
|
-
// In backdrop.ts
|
|
233
|
-
protected readonly class = computed(() =>
|
|
234
|
-
cn(
|
|
235
|
-
'fixed inset-0 -z-10 bg-black/10',
|
|
236
|
-
'supports-backdrop-filter:backdrop-blur-xs',
|
|
237
|
-
'animate-in fade-in-0 duration-300',
|
|
238
|
-
'data-[state=closed]:animate-out',
|
|
239
|
-
'data-[state=closed]:fade-out-0',
|
|
240
|
-
'data-[state=closed]:duration-300',
|
|
241
|
-
),
|
|
242
|
-
);
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
**Animation Flow:**
|
|
246
|
-
|
|
247
|
-
1. Provider renders: `<div sc-backdrop [open]="open()" (animationComplete)="onBackdropAnimationComplete()"></div>`
|
|
248
|
-
2. ScBackdrop receives `open` input
|
|
249
|
-
3. Sets `data-state` based on `open` value
|
|
250
|
-
4. Tailwind applies appropriate animation classes
|
|
251
|
-
5. Animation plays for 300ms
|
|
252
|
-
6. On `animationend`, emits `animationComplete` output
|
|
253
|
-
7. Provider handles the event directly for coordination
|
|
254
|
-
|
|
255
|
-
**Why Separate Component?**
|
|
256
|
-
|
|
257
|
-
- Reusable across dialog, drawer, sheet, etc.
|
|
258
|
-
- Consistent animation pattern
|
|
259
|
-
- Single responsibility (visual layer only)
|
|
260
|
-
- CDK backdrop handles functionality separately
|
|
261
|
-
|
|
262
|
-
## Complete Animation Timeline
|
|
263
|
-
|
|
264
|
-
### Opening Sequence
|
|
265
|
-
|
|
266
|
-
```
|
|
267
|
-
User clicks trigger:
|
|
268
|
-
|
|
|
269
|
-
+-- t=0ms: Trigger calls open.set(true)
|
|
270
|
-
| |
|
|
271
|
-
| +-- Provider effect 1:
|
|
272
|
-
| | +-- overlayOpen.set(true) <- Mount DOM immediately
|
|
273
|
-
| | +-- animationsCompleted.set(0) <- Reset for next cycle
|
|
274
|
-
| |
|
|
275
|
-
| +-- Provider effect 3 (triggered by overlayOpen):
|
|
276
|
-
| +-- attachSheet() <- CDK overlay attached
|
|
277
|
-
| +-- TemplatePortal(overlayTemplate, viewContainerRef)
|
|
278
|
-
| +-- ScBackdrop rendered with [open]="open()"
|
|
279
|
-
| +-- ng-template outlet stamps scSheetPortal content
|
|
280
|
-
|
|
|
281
|
-
+-- t=0ms: CDK adds .cdk-overlay-backdrop-showing
|
|
282
|
-
| +-- Backdrop: opacity 0 -> 1 (300ms)
|
|
283
|
-
|
|
|
284
|
-
+-- t=0ms: Sheet effect (triggered by open):
|
|
285
|
-
| +-- state.set('open')
|
|
286
|
-
| +-- data-state="open" -> Entry animation starts
|
|
287
|
-
| +-- fade-in-0
|
|
288
|
-
| +-- slide-in-from-{side}
|
|
289
|
-
| +-- duration-300
|
|
290
|
-
|
|
|
291
|
-
+-- t=0-300ms: Both animations play
|
|
292
|
-
|
|
|
293
|
-
+-- t=300ms: Animations complete, sheet visible
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
### Closing Sequence (Coordinated Completion)
|
|
297
|
-
|
|
298
|
-
```
|
|
299
|
-
User clicks close/backdrop/escape:
|
|
300
|
-
|
|
|
301
|
-
+-- t=0ms: Provider calls open.set(false)
|
|
302
|
-
| |
|
|
303
|
-
| +-- Sheet effect (triggered by open):
|
|
304
|
-
| | +-- state.set('closed') <- Triggers animation
|
|
305
|
-
| | +-- data-state="closed" -> Exit animation starts
|
|
306
|
-
| | +-- animate-out
|
|
307
|
-
| | +-- fade-out-0
|
|
308
|
-
| | +-- slide-out-to-{side}
|
|
309
|
-
| | +-- duration-300
|
|
310
|
-
| |
|
|
311
|
-
| +-- Backdrop receives [open]="false" input:
|
|
312
|
-
| +-- state.set('closed') <- Triggers backdrop animation
|
|
313
|
-
| +-- data-state="closed" -> Backdrop fade-out (300ms)
|
|
314
|
-
|
|
|
315
|
-
+-- IMPORTANT: overlayOpen is STILL true!
|
|
316
|
-
| +-- DOM remains mounted so animations can play
|
|
317
|
-
| +-- animationsCompleted = 0 (waiting for both)
|
|
318
|
-
|
|
|
319
|
-
+-- t=0-300ms: Both animations play simultaneously
|
|
320
|
-
|
|
|
321
|
-
+-- t=~300ms: Sheet animation completes
|
|
322
|
-
| +-- onAnimationEnd(event) fires
|
|
323
|
-
| +-- if (state === 'closed' && target === element):
|
|
324
|
-
| +-- provider.onSheetAnimationComplete()
|
|
325
|
-
| +-- animationsCompleted.update(n => n + 1) <- Count = 1
|
|
326
|
-
|
|
|
327
|
-
+-- t=~300ms: Backdrop animation completes
|
|
328
|
-
| +-- backdrop emits (animationComplete)
|
|
329
|
-
| +-- provider.onBackdropAnimationComplete()
|
|
330
|
-
| +-- animationsCompleted.update(n => n + 1) <- Count = 2
|
|
331
|
-
|
|
|
332
|
-
+-- Provider effect 2 detects: animationsCompleted === 2 && !open()
|
|
333
|
-
| +-- overlayOpen.set(false) <- Cleanup triggered!
|
|
334
|
-
| +-- animationsCompleted.set(0) <- Reset for next cycle
|
|
335
|
-
|
|
|
336
|
-
+-- t=~300ms: Provider effect 3 (triggered by overlayOpen):
|
|
337
|
-
+-- detachSheet() <- DOM removed cleanly after BOTH complete
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
## Why Track Both Animations?
|
|
341
|
-
|
|
342
|
-
**Question:** Why coordinate two separate animations instead of using a single timer?
|
|
343
|
-
|
|
344
|
-
**Answer:** Explicit animation tracking is more robust and event-driven:
|
|
345
|
-
|
|
346
|
-
### The Problem with Single Timers
|
|
347
|
-
|
|
348
|
-
```typescript
|
|
349
|
-
// Old approach - assumes both animations finish together
|
|
350
|
-
onSheetAnimationComplete(): void {
|
|
351
|
-
setTimeout(() => {
|
|
352
|
-
this.overlayOpen.set(false);
|
|
353
|
-
}, 300); // Hope backdrop finishes too!
|
|
354
|
-
}
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
**Issues:**
|
|
358
|
-
|
|
359
|
-
- Assumes backdrop takes exactly 300ms
|
|
360
|
-
- Browser rendering variations can cause timing differences
|
|
361
|
-
- Backdrop might take 305ms, getting cut off at 300ms
|
|
362
|
-
- No way to know if backdrop actually completed
|
|
363
|
-
- Might wait longer than necessary if backdrop finishes early
|
|
364
|
-
|
|
365
|
-
### The Solution: Signal Counter Pattern
|
|
366
|
-
|
|
367
|
-
```typescript
|
|
368
|
-
// New approach - explicitly track both completions
|
|
369
|
-
private readonly animationsCompleted = signal<number>(0);
|
|
370
|
-
|
|
371
|
-
onSheetAnimationComplete(): void {
|
|
372
|
-
this.animationsCompleted.update(n => n + 1); // Count = 1
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
onBackdropAnimationComplete(): void {
|
|
376
|
-
this.animationsCompleted.update(n => n + 1); // Count = 2
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
effect(() => {
|
|
380
|
-
if (this.animationsCompleted() === 2 && !this.open()) {
|
|
381
|
-
this.overlayOpen.set(false); // Both confirmed complete!
|
|
382
|
-
}
|
|
383
|
-
});
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
**Benefits:**
|
|
387
|
-
|
|
388
|
-
1. **Event-driven**: Waits for actual completion, not estimated time
|
|
389
|
-
2. **Robust**: Handles browser timing variations (300ms vs 305ms)
|
|
390
|
-
3. **Accurate**: Both animations explicitly signal completion
|
|
391
|
-
4. **Extensible**: Easy to add more animations (just increase target count)
|
|
392
|
-
5. **No race conditions**: Counter resets on open for clean cycles
|
|
393
|
-
|
|
394
|
-
## State Synchronization
|
|
395
|
-
|
|
396
|
-
### Provider Constructor Effects
|
|
397
|
-
|
|
398
|
-
```typescript
|
|
399
|
-
constructor() {
|
|
400
|
-
// Effect 1: Sync overlayOpen with open for OPENING
|
|
401
|
-
effect(() => {
|
|
402
|
-
if (this.open()) {
|
|
403
|
-
// Opening: Mount DOM immediately
|
|
404
|
-
this.overlayOpen.set(true);
|
|
405
|
-
// Reset counter for next close cycle
|
|
406
|
-
this.animationsCompleted.set(0);
|
|
407
|
-
}
|
|
408
|
-
// Note: When closing, overlayOpen stays true!
|
|
409
|
-
// It will be set to false by the coordination effect below
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
// Effect 2: Close overlay when both animations complete
|
|
413
|
-
effect(() => {
|
|
414
|
-
const completed = this.animationsCompleted();
|
|
415
|
-
if (completed === 2 && !this.open()) {
|
|
416
|
-
// Both animations confirmed complete
|
|
417
|
-
this.overlayOpen.set(false);
|
|
418
|
-
// Reset for next cycle
|
|
419
|
-
this.animationsCompleted.set(0);
|
|
420
|
-
}
|
|
421
|
-
});
|
|
422
|
-
|
|
423
|
-
// Effect 3: Attach/detach CDK overlay based on overlayOpen
|
|
424
|
-
effect(() => {
|
|
425
|
-
if (this.overlayOpen()) {
|
|
426
|
-
this.attachSheet();
|
|
427
|
-
} else {
|
|
428
|
-
this.detachSheet();
|
|
429
|
-
}
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
### Provider Overlay Template
|
|
435
|
-
|
|
436
|
-
The provider's template includes the backdrop and focus trap, projecting the consumer's `scSheetPortal` template via `ngTemplateOutlet`:
|
|
437
|
-
|
|
438
|
-
```html
|
|
439
|
-
<ng-content />
|
|
440
|
-
<ng-template #overlayTemplate>
|
|
441
|
-
<div sc-backdrop [open]="open()" (animationComplete)="onBackdropAnimationComplete()"></div>
|
|
442
|
-
<div cdkTrapFocus [cdkTrapFocusAutoCapture]="true">
|
|
443
|
-
<ng-container [ngTemplateOutlet]="sheetPortal().templateRef" />
|
|
444
|
-
</div>
|
|
445
|
-
</ng-template>
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
### Sheet Constructor Effects
|
|
449
|
-
|
|
450
|
-
```typescript
|
|
451
|
-
constructor() {
|
|
452
|
-
// Effect: Sync animation state with logical state
|
|
453
|
-
effect(() => {
|
|
454
|
-
const isOpen = this.sheetProvider.open();
|
|
455
|
-
this.state.set(isOpen ? 'open' : 'closed');
|
|
456
|
-
});
|
|
457
|
-
}
|
|
458
|
-
```
|
|
459
|
-
|
|
460
|
-
## Animation Completion Handling
|
|
461
|
-
|
|
462
|
-
### Sheet Component
|
|
463
|
-
|
|
464
|
-
```typescript
|
|
465
|
-
protected onAnimationEnd(event: AnimationEvent): void {
|
|
466
|
-
// Only trigger cleanup when close animation completes
|
|
467
|
-
if (
|
|
468
|
-
this.state() === 'closed' &&
|
|
469
|
-
event.target === this.elementRef.nativeElement
|
|
470
|
-
) {
|
|
471
|
-
this.sheetProvider.onSheetAnimationComplete();
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
**Why check `event.target`?**
|
|
477
|
-
|
|
478
|
-
- `animationend` bubbles from child elements
|
|
479
|
-
- We only care about the sheet's own animation
|
|
480
|
-
- Prevents false triggers from child element animations
|
|
481
|
-
|
|
482
|
-
### Provider Component
|
|
483
|
-
|
|
484
|
-
The provider directly handles backdrop animation completion in its template -- no intermediary needed:
|
|
485
|
-
|
|
486
|
-
```html
|
|
487
|
-
<!-- In provider's overlay template -->
|
|
488
|
-
<div sc-backdrop [open]="open()" (animationComplete)="onBackdropAnimationComplete()"></div>
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
```typescript
|
|
492
|
-
// In ScSheetProvider
|
|
493
|
-
onSheetAnimationComplete(): void {
|
|
494
|
-
if (!this.open()) {
|
|
495
|
-
this.animationsCompleted.update(n => n + 1);
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
onBackdropAnimationComplete(): void {
|
|
500
|
-
if (!this.open()) {
|
|
501
|
-
this.animationsCompleted.update(n => n + 1);
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
**Why check `!this.open()` before incrementing?**
|
|
507
|
-
|
|
508
|
-
- User might have reopened sheet during close animation
|
|
509
|
-
- Prevents counter from incrementing during new open cycle
|
|
510
|
-
- Guards against race conditions
|
|
511
|
-
- Example: User clicks close (close starts), then immediately clicks trigger again (reopens)
|
|
512
|
-
- Without this check, the counter would incorrectly increment for the new cycle
|
|
513
|
-
|
|
514
|
-
**Why use `update()` instead of `set()`?**
|
|
515
|
-
|
|
516
|
-
- Increment is relative to current value
|
|
517
|
-
- Safe if multiple updates happen
|
|
518
|
-
- Immutable update pattern
|
|
519
|
-
- Consistent with Angular signals best practices
|
|
520
|
-
|
|
521
|
-
## Comparison: Evolution of Animation Coordination
|
|
522
|
-
|
|
523
|
-
### Approach 1: Single Timer (Previous Implementation)
|
|
524
|
-
|
|
525
|
-
```typescript
|
|
526
|
-
// Problems:
|
|
527
|
-
private async detachSheetWithAnimation() {
|
|
528
|
-
if (this.overlayRef.hasAttached()) {
|
|
529
|
-
const backdrop = this.overlayRef.backdropElement;
|
|
530
|
-
backdrop?.classList.add('sc-backdrop-hiding');
|
|
531
|
-
|
|
532
|
-
// Wait arbitrary 300ms
|
|
533
|
-
await firstValueFrom(timer(300));
|
|
534
|
-
|
|
535
|
-
this.overlayRef.detach(); // Might cut off sheet animation!
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
**Issues:**
|
|
541
|
-
|
|
542
|
-
1. Single hardcoded timer for all animations
|
|
543
|
-
2. No detection of actual animation completion
|
|
544
|
-
3. Sheet animation might take longer or shorter
|
|
545
|
-
4. Not coordinated with sheet state
|
|
546
|
-
5. No way to cancel if reopened
|
|
547
|
-
|
|
548
|
-
### Approach 2: Signal Counter (Current Implementation)
|
|
549
|
-
|
|
550
|
-
```typescript
|
|
551
|
-
// Both animations explicitly tracked:
|
|
552
|
-
private readonly animationsCompleted = signal<number>(0);
|
|
553
|
-
|
|
554
|
-
constructor() {
|
|
555
|
-
// Effect 1: Open and reset
|
|
556
|
-
effect(() => {
|
|
557
|
-
if (this.open()) {
|
|
558
|
-
this.overlayOpen.set(true);
|
|
559
|
-
this.animationsCompleted.set(0);
|
|
560
|
-
}
|
|
561
|
-
});
|
|
562
|
-
|
|
563
|
-
// Effect 2: Close when both complete
|
|
564
|
-
effect(() => {
|
|
565
|
-
if (this.animationsCompleted() === 2 && !this.open()) {
|
|
566
|
-
this.overlayOpen.set(false);
|
|
567
|
-
this.animationsCompleted.set(0);
|
|
568
|
-
}
|
|
569
|
-
});
|
|
570
|
-
|
|
571
|
-
// Effect 3: Attach/detach CDK overlay
|
|
572
|
-
effect(() => {
|
|
573
|
-
if (this.overlayOpen()) {
|
|
574
|
-
this.attachSheet();
|
|
575
|
-
} else {
|
|
576
|
-
this.detachSheet();
|
|
577
|
-
}
|
|
578
|
-
});
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
// Both animations signal completion
|
|
582
|
-
onSheetAnimationComplete(): void {
|
|
583
|
-
if (!this.open()) {
|
|
584
|
-
this.animationsCompleted.update(n => n + 1);
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
onBackdropAnimationComplete(): void {
|
|
589
|
-
if (!this.open()) {
|
|
590
|
-
this.animationsCompleted.update(n => n + 1);
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
```
|
|
594
|
-
|
|
595
|
-
**Improvements:**
|
|
596
|
-
|
|
597
|
-
1. Both animations event-driven
|
|
598
|
-
2. No timing assumptions
|
|
599
|
-
3. Handles browser rendering variations
|
|
600
|
-
4. Explicit completion signals
|
|
601
|
-
5. Extensible (easy to add more animations)
|
|
602
|
-
6. Signal-based reactivity
|
|
603
|
-
7. Clean cycle management
|
|
604
|
-
|
|
605
|
-
## Key Design Decisions
|
|
606
|
-
|
|
607
|
-
### 1. Provider Owns Everything
|
|
608
|
-
|
|
609
|
-
**Decision:** `ScSheetProvider` manages state, overlay lifecycle, backdrop, and focus trap
|
|
610
|
-
|
|
611
|
-
**Why:**
|
|
612
|
-
|
|
613
|
-
- Provider controls _when_ content appears (open state)
|
|
614
|
-
- Provider controls _where_ content appears (CDK overlay)
|
|
615
|
-
- Single component owns the full lifecycle -- no coordination between sibling components
|
|
616
|
-
- `ScSheetPortal` directive just marks _what_ content to portal -- no logic
|
|
617
|
-
- Backdrop click and Escape key are handled directly by the provider via CDK overlay events
|
|
618
|
-
|
|
619
|
-
### 2. `display: contents` on Provider
|
|
620
|
-
|
|
621
|
-
**Decision:** Provider uses `display: contents` (via Tailwind class) to be invisible to CSS layout
|
|
622
|
-
|
|
623
|
-
**Why:**
|
|
624
|
-
|
|
625
|
-
- Provider is a `<div>` (required for CDK overlay's `ViewContainerRef`)
|
|
626
|
-
- But it should not affect the consumer's layout
|
|
627
|
-
- `display: contents` makes the element's box disappear while keeping children in flow
|
|
628
|
-
- Consumer can place trigger and other content without layout interference
|
|
629
|
-
|
|
630
|
-
### 3. Separation of Logical and Physical State
|
|
631
|
-
|
|
632
|
-
**Decision:** Split logical state (`open`) from physical state (`overlayOpen`)
|
|
633
|
-
|
|
634
|
-
**Why:**
|
|
635
|
-
|
|
636
|
-
- Logical state drives animations
|
|
637
|
-
- Physical state drives DOM lifecycle
|
|
638
|
-
- Animations need time to complete before DOM removal
|
|
639
|
-
- Clean separation makes flow easier to understand
|
|
640
|
-
|
|
641
|
-
### 4. Signal Counter Pattern
|
|
642
|
-
|
|
643
|
-
**Decision:** Use signal counter to track multiple animation completions
|
|
644
|
-
|
|
645
|
-
**Why:**
|
|
646
|
-
|
|
647
|
-
- Both animations explicitly signal completion
|
|
648
|
-
- No timing assumptions or hardcoded delays
|
|
649
|
-
- Reactive: effect triggers when counter reaches target
|
|
650
|
-
- Extensible: easy to add more animations (increase target)
|
|
651
|
-
- Debuggable: counter value visible in Angular DevTools
|
|
652
|
-
|
|
653
|
-
### 5. Event-Driven Completion
|
|
654
|
-
|
|
655
|
-
**Decision:** Both sheet and backdrop emit completion events
|
|
656
|
-
|
|
657
|
-
**Why:**
|
|
658
|
-
|
|
659
|
-
- Precise: no guessing when animations finish
|
|
660
|
-
- Robust: handles browser timing variations
|
|
661
|
-
- Decoupled: backdrop component remains reusable
|
|
662
|
-
- No arbitrary timeouts or magic numbers
|
|
663
|
-
|
|
664
|
-
### 6. Guard Pattern for Counter Increments
|
|
665
|
-
|
|
666
|
-
**Decision:** Check `!open()` before incrementing animation counter
|
|
667
|
-
|
|
668
|
-
**Why:**
|
|
669
|
-
|
|
670
|
-
- Prevents counter increments during new open cycle
|
|
671
|
-
- User might reopen during close animation
|
|
672
|
-
- Without guard, counter would increment incorrectly for new cycle
|
|
673
|
-
- Example: Close starts -> sheet completes -> user reopens -> backdrop completes would incorrectly increment counter for new open
|
|
674
|
-
- Effect checks both counter AND `!open()` for safety
|
|
675
|
-
|
|
676
|
-
### 7. Effect-Based Reactivity
|
|
677
|
-
|
|
678
|
-
**Decision:** Use Angular effects instead of manual subscriptions
|
|
679
|
-
|
|
680
|
-
**Why:**
|
|
681
|
-
|
|
682
|
-
- Automatic cleanup on component destruction
|
|
683
|
-
- Declarative: describes "what" not "how"
|
|
684
|
-
- Runs automatically when dependencies change
|
|
685
|
-
- Easier to reason about than imperative code
|
|
686
|
-
|
|
687
|
-
### 8. Directional Animation System
|
|
688
|
-
|
|
689
|
-
**Decision:** Use `side` input to determine animation direction dynamically
|
|
690
|
-
|
|
691
|
-
**Why:**
|
|
692
|
-
|
|
693
|
-
- Single component handles all four directions
|
|
694
|
-
- Animation classes computed based on side
|
|
695
|
-
- Maintains consistency across all directions
|
|
696
|
-
- Easy to add new sides if needed
|
|
697
|
-
|
|
698
|
-
## Animation Classes Reference
|
|
699
|
-
|
|
700
|
-
### Sheet Content Classes
|
|
701
|
-
|
|
702
|
-
```typescript
|
|
703
|
-
// Position classes (fixed to specific side)
|
|
704
|
-
const sidePositionClasses: Record<SheetSide, string> = {
|
|
705
|
-
top: 'inset-x-0 top-0 border-b',
|
|
706
|
-
right: 'inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm',
|
|
707
|
-
bottom: 'inset-x-0 bottom-0 border-t',
|
|
708
|
-
left: 'inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',
|
|
709
|
-
};
|
|
710
|
-
|
|
711
|
-
// Directional animation classes
|
|
712
|
-
const sideAnimationClasses: Record<SheetSide, string> = {
|
|
713
|
-
top: 'slide-in-from-top data-[state=closed]:slide-out-to-top',
|
|
714
|
-
right: 'slide-in-from-right data-[state=closed]:slide-out-to-right',
|
|
715
|
-
bottom: 'slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',
|
|
716
|
-
left: 'slide-in-from-left data-[state=closed]:slide-out-to-left',
|
|
717
|
-
};
|
|
718
|
-
|
|
719
|
-
// Entry animation (fade + slide based on side)
|
|
720
|
-
('animate-in fade-in-0 duration-300');
|
|
721
|
-
sideAnimationClasses[side];
|
|
722
|
-
|
|
723
|
-
// Exit animation (via data-state="closed")
|
|
724
|
-
('data-[state=closed]:animate-out');
|
|
725
|
-
('data-[state=closed]:fade-out-0');
|
|
726
|
-
('data-[state=closed]:duration-300');
|
|
727
|
-
```
|
|
728
|
-
|
|
729
|
-
### Backdrop Classes
|
|
730
|
-
|
|
731
|
-
```typescript
|
|
732
|
-
// Entry animation
|
|
733
|
-
'animate-in fade-in-0 duration-300';
|
|
734
|
-
|
|
735
|
-
// Exit animation (via data-state="closed")
|
|
736
|
-
'data-[state=closed]:animate-out';
|
|
737
|
-
'data-[state=closed]:fade-out-0';
|
|
738
|
-
'data-[state=closed]:duration-300';
|
|
739
|
-
```
|
|
740
|
-
|
|
741
|
-
## Accessibility Considerations
|
|
742
|
-
|
|
743
|
-
The animation system preserves accessibility:
|
|
744
|
-
|
|
745
|
-
1. **Focus Management:** Sheet auto-focuses on mount via `cdkTrapFocus` with `cdkTrapFocusAutoCapture`
|
|
746
|
-
2. **ARIA Attributes:** Set before animations start (`role="dialog"`, `aria-modal="true"`)
|
|
747
|
-
3. **Screen Readers:** Announce sheet immediately (not after animation)
|
|
748
|
-
4. **Keyboard:** Escape key closes the sheet (via CDK overlay keydown events)
|
|
749
|
-
5. **Backdrop Click:** Click outside closes the sheet (via CDK overlay backdrop click)
|
|
750
|
-
6. **Reduced Motion:** Could add `@media (prefers-reduced-motion)` support
|
|
751
|
-
|
|
752
|
-
## Performance Considerations
|
|
753
|
-
|
|
754
|
-
### Efficient Rendering
|
|
755
|
-
|
|
756
|
-
- Uses `ChangeDetectionStrategy.OnPush` everywhere
|
|
757
|
-
- Effects only run when dependencies change
|
|
758
|
-
- No manual subscriptions to manage
|
|
759
|
-
- Single overlay instance reused
|
|
760
|
-
|
|
761
|
-
### Animation Performance
|
|
762
|
-
|
|
763
|
-
- CSS animations (GPU accelerated)
|
|
764
|
-
- Opacity and transform (composited properties)
|
|
765
|
-
- No layout thrashing
|
|
766
|
-
- Minimal JavaScript during animation
|
|
767
|
-
|
|
768
|
-
### Memory Management
|
|
769
|
-
|
|
770
|
-
- Effects auto-cleanup on destroy
|
|
771
|
-
- No timeout leaks (event-driven approach)
|
|
772
|
-
- Overlay detached after use
|
|
773
|
-
- No memory leaks
|
|
774
|
-
|
|
775
|
-
## Consumer API
|
|
776
|
-
|
|
777
|
-
```html
|
|
778
|
-
<div sc-sheet-provider [(open)]="isOpen" side="right">
|
|
779
|
-
<button sc-sheet-trigger sc-button>Open</button>
|
|
780
|
-
<ng-template scSheetPortal>
|
|
781
|
-
<div sc-sheet>
|
|
782
|
-
<button sc-sheet-close>...</button>
|
|
783
|
-
<div sc-sheet-header>
|
|
784
|
-
<h2 sc-sheet-title>Title</h2>
|
|
785
|
-
<p sc-sheet-description>Description</p>
|
|
786
|
-
</div>
|
|
787
|
-
<!-- content -->
|
|
788
|
-
<div sc-sheet-footer>
|
|
789
|
-
<button sc-button>Save</button>
|
|
790
|
-
</div>
|
|
791
|
-
</div>
|
|
792
|
-
</ng-template>
|
|
793
|
-
</div>
|
|
794
|
-
```
|
|
795
|
-
|
|
796
|
-
**Key points:**
|
|
797
|
-
|
|
798
|
-
- `scSheetPortal` on `ng-template` marks lazy content
|
|
799
|
-
- Content is only instantiated when sheet opens
|
|
800
|
-
- `ScSheetPortal` must be imported in the consumer's `imports` array
|
|
801
|
-
- `[(open)]` provides two-way binding for programmatic control
|
|
802
|
-
|
|
803
|
-
## Future Enhancements
|
|
804
|
-
|
|
805
|
-
### Potential Improvements
|
|
806
|
-
|
|
807
|
-
1. **Variable Animation Durations:**
|
|
808
|
-
- Input property for animation duration
|
|
809
|
-
- Provider passes duration to sheet and backdrop
|
|
810
|
-
- Configurable timing for different use cases
|
|
811
|
-
|
|
812
|
-
2. **Animation Events:**
|
|
813
|
-
- Output events for animation start/end
|
|
814
|
-
- External components can react to animation state
|
|
815
|
-
|
|
816
|
-
3. **Reduced Motion Support:**
|
|
817
|
-
- Detect `prefers-reduced-motion`
|
|
818
|
-
- Instant show/hide if user prefers
|
|
819
|
-
- Keep accessibility benefits
|
|
820
|
-
|
|
821
|
-
4. **Stacking Context:**
|
|
822
|
-
- Support multiple overlapping sheets
|
|
823
|
-
- z-index management
|
|
824
|
-
- Close all vs close top
|
|
825
|
-
|
|
826
|
-
5. **Custom Animations:**
|
|
827
|
-
- Allow custom animation classes via input
|
|
828
|
-
- Support different animation styles per side
|
|
829
|
-
|
|
830
|
-
## Testing Considerations
|
|
831
|
-
|
|
832
|
-
### What to Test
|
|
833
|
-
|
|
834
|
-
1. **State Transitions:**
|
|
835
|
-
- open: false -> true -> false
|
|
836
|
-
- overlayOpen follows correctly
|
|
837
|
-
- state syncs with open
|
|
838
|
-
|
|
839
|
-
2. **Animation Timing:**
|
|
840
|
-
- Animations play for full duration
|
|
841
|
-
- DOM not removed early
|
|
842
|
-
- Backdrop fades correctly
|
|
843
|
-
- Sheet slides in correct direction
|
|
844
|
-
|
|
845
|
-
3. **All Sides:**
|
|
846
|
-
- Test each side (top, right, bottom, left)
|
|
847
|
-
- Verify correct slide direction
|
|
848
|
-
- Ensure consistent timing across all sides
|
|
849
|
-
|
|
850
|
-
4. **Edge Cases:**
|
|
851
|
-
- Rapid open/close
|
|
852
|
-
- Open during close animation
|
|
853
|
-
- Close during open animation
|
|
854
|
-
- Changing side while open
|
|
855
|
-
|
|
856
|
-
5. **Cleanup:**
|
|
857
|
-
- No memory leaks
|
|
858
|
-
- Effects unsubscribe
|
|
859
|
-
- No hanging timeouts
|
|
860
|
-
|
|
861
|
-
### Testing Strategy
|
|
862
|
-
|
|
863
|
-
```typescript
|
|
864
|
-
// Example test structure
|
|
865
|
-
describe('Sheet Animations', () => {
|
|
866
|
-
it('should keep DOM mounted during close animation', async () => {
|
|
867
|
-
// Open sheet
|
|
868
|
-
provider.open.set(true);
|
|
869
|
-
fixture.detectChanges();
|
|
870
|
-
|
|
871
|
-
// Close sheet
|
|
872
|
-
provider.open.set(false);
|
|
873
|
-
fixture.detectChanges();
|
|
874
|
-
|
|
875
|
-
// Immediately after close - DOM should still exist
|
|
876
|
-
expect(overlayRef.hasAttached()).toBe(true);
|
|
877
|
-
|
|
878
|
-
// After animations complete - DOM should be removed
|
|
879
|
-
await delay(400); // Buffer for 300ms animation
|
|
880
|
-
expect(overlayRef.hasAttached()).toBe(false);
|
|
881
|
-
});
|
|
882
|
-
|
|
883
|
-
it('should slide from correct side', () => {
|
|
884
|
-
provider.side.set('left');
|
|
885
|
-
provider.open.set(true);
|
|
886
|
-
fixture.detectChanges();
|
|
887
|
-
|
|
888
|
-
const sheet = fixture.debugElement.query(By.css('[sc-sheet]'));
|
|
889
|
-
expect(sheet.nativeElement.classList.contains('slide-in-from-left')).toBe(true);
|
|
890
|
-
});
|
|
891
|
-
});
|
|
892
|
-
```
|
|
893
|
-
|
|
894
|
-
## Summary
|
|
895
|
-
|
|
896
|
-
The sheet animation architecture achieves smooth, reliable animations through:
|
|
897
|
-
|
|
898
|
-
1. **Two-signal pattern:** Separates intent (`open`) from DOM lifecycle (`overlayOpen`)
|
|
899
|
-
2. **Signal counter coordination:** Tracks completion of multiple animations (`animationsCompleted`)
|
|
900
|
-
3. **Event-driven completion:** Both sheet and backdrop explicitly signal when done
|
|
901
|
-
4. **Reactive updates:** Effects respond to state changes automatically
|
|
902
|
-
5. **Robust timing:** No assumptions, handles browser variations
|
|
903
|
-
6. **Directional animations:** Dynamically applies correct slide direction based on `side` input
|
|
904
|
-
7. **Centralized ownership:** Provider owns all lifecycle logic; portal directive is just a content marker
|
|
905
|
-
|
|
906
|
-
This architecture provides:
|
|
907
|
-
|
|
908
|
-
- Reliable animation completion detection
|
|
909
|
-
- Clean separation of concerns
|
|
910
|
-
- Extensibility (easy to add more animations)
|
|
911
|
-
- No race conditions or timing assumptions
|
|
912
|
-
- Debuggable signal-based state
|
|
913
|
-
- Better user experience (smooth, never cut off)
|
|
914
|
-
- Flexible directional animations (top, right, bottom, left)
|
|
915
|
-
- Lazy content instantiation via `ng-template`
|