@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,792 +0,0 @@
|
|
|
1
|
-
# Dialog Architecture
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The dialog 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 dialog content and backdrop using a signal counter to track completion of both animations.
|
|
6
|
-
|
|
7
|
-
## Component Structure
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
ScDialogProvider (Root State Manager + CDK Overlay Manager)
|
|
11
|
-
├── ScDialogTrigger (Opens dialog)
|
|
12
|
-
└── ng-template[scDialogPortal] (Lazy content, portaled to CDK overlay)
|
|
13
|
-
│
|
|
14
|
-
Inside CDK Overlay (managed by Provider):
|
|
15
|
-
├── CDK Backdrop (Transparent - click blocking only)
|
|
16
|
-
├── ScBackdrop (Visual backdrop with animations)
|
|
17
|
-
└── ScDialog (Dialog Content)
|
|
18
|
-
├── ScDialogHeader
|
|
19
|
-
│ └── ScDialogTitle
|
|
20
|
-
│ └── ScDialogDescription
|
|
21
|
-
└── ScDialogFooter
|
|
22
|
-
└── ScDialogClose
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### ScDialogPortal Directive
|
|
26
|
-
|
|
27
|
-
`ScDialogPortal` 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`.
|
|
28
|
-
|
|
29
|
-
```typescript
|
|
30
|
-
@Directive({
|
|
31
|
-
selector: 'ng-template[scDialogPortal]',
|
|
32
|
-
})
|
|
33
|
-
export class ScDialogPortal {
|
|
34
|
-
readonly templateRef = inject(TemplateRef);
|
|
35
|
-
}
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
The provider queries it and projects the template into the overlay:
|
|
39
|
-
|
|
40
|
-
```typescript
|
|
41
|
-
// In ScDialogProvider
|
|
42
|
-
protected readonly dialogPortal = contentChild.required(ScDialogPortal);
|
|
43
|
-
|
|
44
|
-
// In provider's overlay template
|
|
45
|
-
<ng-container [ngTemplateOutlet]="dialogPortal().templateRef" />
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Why a Directive?
|
|
49
|
-
|
|
50
|
-
- **Explicit**: A bare `<ng-template>` is ambiguous; `scDialogPortal` communicates intent
|
|
51
|
-
- **Lazy**: Content inside `ng-template` is not instantiated until the provider stamps it
|
|
52
|
-
- **Provider owns lifecycle**: The provider decides _when_ to stamp the template (on open)
|
|
53
|
-
- **DI preserved**: Using `TemplatePortal(overlayTemplate, viewContainerRef)` with the provider's own `ViewContainerRef` keeps the injector chain intact — `ScDialog` can inject `ScDialogProvider`
|
|
54
|
-
|
|
55
|
-
## The Multi-Signal Pattern
|
|
56
|
-
|
|
57
|
-
The core of the animation architecture is the separation of **logical state** from **physical state**, with a **coordination signal** to track animation completions.
|
|
58
|
-
|
|
59
|
-
### Signal 1: `open` (Logical State)
|
|
60
|
-
|
|
61
|
-
**Purpose:** Controls what the dialog _should_ be doing
|
|
62
|
-
|
|
63
|
-
```typescript
|
|
64
|
-
// In ScDialogProvider
|
|
65
|
-
readonly open = model<boolean>(false);
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**Responsibilities:**
|
|
69
|
-
|
|
70
|
-
- Represents user intent ("should the dialog be visible?")
|
|
71
|
-
- Triggers animation state changes
|
|
72
|
-
- When `true`: Triggers entry animations
|
|
73
|
-
- When `false`: Triggers exit animations
|
|
74
|
-
|
|
75
|
-
### Signal 2: `overlayOpen` (Physical State)
|
|
76
|
-
|
|
77
|
-
**Purpose:** Controls whether DOM exists
|
|
78
|
-
|
|
79
|
-
```typescript
|
|
80
|
-
// In ScDialogProvider
|
|
81
|
-
readonly overlayOpen = signal<boolean>(false);
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**Responsibilities:**
|
|
85
|
-
|
|
86
|
-
- Controls CDK overlay attachment/detachment
|
|
87
|
-
- Stays `true` during close animations (critical!)
|
|
88
|
-
- Only becomes `false` after animations complete
|
|
89
|
-
- Ensures animations can play before DOM removal
|
|
90
|
-
|
|
91
|
-
### Signal 3: `animationsCompleted` (Animation Coordination)
|
|
92
|
-
|
|
93
|
-
**Purpose:** Tracks completion of multiple animations
|
|
94
|
-
|
|
95
|
-
```typescript
|
|
96
|
-
// In ScDialogProvider (private)
|
|
97
|
-
private readonly animationsCompleted = signal<number>(0);
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
**Responsibilities:**
|
|
101
|
-
|
|
102
|
-
- Counts completed animations during close sequence
|
|
103
|
-
- Target count: 2 (dialog + backdrop)
|
|
104
|
-
- Resets to 0 when opening (for next cycle)
|
|
105
|
-
- Triggers overlay closure when target reached
|
|
106
|
-
|
|
107
|
-
### Why Both Are Needed
|
|
108
|
-
|
|
109
|
-
**The Problem:**
|
|
110
|
-
|
|
111
|
-
CDK overlay's lifecycle is tied to DOM presence:
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
// ❌ This doesn't work:
|
|
115
|
-
if (open()) {
|
|
116
|
-
overlayRef.attach(portal); // DOM mounted
|
|
117
|
-
} else {
|
|
118
|
-
overlayRef.detach(); // DOM removed IMMEDIATELY
|
|
119
|
-
// Animation never plays - element is gone!
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**The Solution:**
|
|
124
|
-
|
|
125
|
-
Separate signals allow animation completion:
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
// ✅ This works:
|
|
129
|
-
if (overlayOpen()) {
|
|
130
|
-
// Physical state
|
|
131
|
-
overlayRef.attach(portal); // DOM mounted
|
|
132
|
-
} else {
|
|
133
|
-
overlayRef.detach(); // DOM removed AFTER animations
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Meanwhile, open() controls animations:
|
|
137
|
-
if (open()) {
|
|
138
|
-
// Logical state
|
|
139
|
-
state = 'open'; // Entry animation
|
|
140
|
-
} else {
|
|
141
|
-
state = 'closed'; // Exit animation (DOM still mounted!)
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Animation Architecture
|
|
146
|
-
|
|
147
|
-
### Three Layers (Separated by Concern)
|
|
148
|
-
|
|
149
|
-
1. **CDK Backdrop** (Transparent - No Animation)
|
|
150
|
-
- Class: `cdk-overlay-transparent-backdrop`
|
|
151
|
-
- Purpose: Click blocking and scroll prevention
|
|
152
|
-
- Functional layer only, no visual styling
|
|
153
|
-
|
|
154
|
-
2. **ScBackdrop Component** (100ms fade animation)
|
|
155
|
-
- Reusable component from `components/backdrop`
|
|
156
|
-
- Three-state model (`idle` / `open` / `closed`) with `data-idle`, `data-open`, `data-closed` attributes
|
|
157
|
-
- Fade effect via Tailwind animate classes
|
|
158
|
-
- Positioned with `fixed inset-0 -z-50` (behind dialog, behind CDK overlay)
|
|
159
|
-
- Emits `animationComplete` output when close animation finishes
|
|
160
|
-
|
|
161
|
-
3. **Dialog Content Animation** (100ms)
|
|
162
|
-
- Zoom + Fade effects
|
|
163
|
-
- Three-state model (`idle` / `open` / `closed`) with `data-idle`, `data-open`, `data-closed` attributes
|
|
164
|
-
- Managed by Tailwind animate classes
|
|
165
|
-
- Completion detected via `animationend` event (triggers cleanup)
|
|
166
|
-
|
|
167
|
-
### Synchronization
|
|
168
|
-
|
|
169
|
-
Both ScBackdrop and Dialog animations:
|
|
170
|
-
|
|
171
|
-
- Start simultaneously when `open` changes
|
|
172
|
-
- Use same duration (100ms)
|
|
173
|
-
- Use same three-state model (`idle` → `open` → `closed` → `idle`)
|
|
174
|
-
- Inside same overlay (removed together)
|
|
175
|
-
|
|
176
|
-
### Dialog Three-State Model
|
|
177
|
-
|
|
178
|
-
The dialog uses three states to prevent a flash of content on first render:
|
|
179
|
-
|
|
180
|
-
```typescript
|
|
181
|
-
type ScDialogState = 'idle' | 'open' | 'closed';
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
| State | Data Attribute | Purpose |
|
|
185
|
-
| -------- | -------------- | -------------------------------------------------------- |
|
|
186
|
-
| `idle` | `data-idle` | Hidden (`opacity-0`), resting state |
|
|
187
|
-
| `open` | `data-open` | Entry animation (`fade-in`, `zoom-in`) |
|
|
188
|
-
| `closed` | `data-closed` | Exit animation (`fade-out`, `zoom-out`) → back to `idle` |
|
|
189
|
-
|
|
190
|
-
Flow: `idle` → `open` → `closed` → `idle`
|
|
191
|
-
|
|
192
|
-
### Dialog Content Animations
|
|
193
|
-
|
|
194
|
-
Applied via Tailwind classes in `dialog.ts`:
|
|
195
|
-
|
|
196
|
-
```typescript
|
|
197
|
-
protected readonly class = computed(() =>
|
|
198
|
-
cn(
|
|
199
|
-
// Idle state: hidden
|
|
200
|
-
'data-idle:opacity-0',
|
|
201
|
-
|
|
202
|
-
// Entry animation (triggered by data-open)
|
|
203
|
-
'data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95',
|
|
204
|
-
|
|
205
|
-
// Exit animation (triggered by data-closed)
|
|
206
|
-
'data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',
|
|
207
|
-
|
|
208
|
-
// Base styles
|
|
209
|
-
'bg-background ring-foreground/10 grid max-w-sm gap-4 rounded-xl p-4 text-sm ring-1 duration-100 ...',
|
|
210
|
-
),
|
|
211
|
-
);
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
**Animation Flow:**
|
|
215
|
-
|
|
216
|
-
1. `state` signal changes from `'idle'` to `'open'`
|
|
217
|
-
2. `data-open` attribute set → entry animation starts
|
|
218
|
-
3. User closes → `state` changes to `'closed'`
|
|
219
|
-
4. `data-closed` attribute set → exit animation starts
|
|
220
|
-
5. `animationend` event fires → `state` resets to `'idle'` (`opacity-0`)
|
|
221
|
-
|
|
222
|
-
### ScBackdrop Component Animations
|
|
223
|
-
|
|
224
|
-
Managed via ScBackdrop component from `components/backdrop`. Uses the same three-state model as the dialog:
|
|
225
|
-
|
|
226
|
-
```typescript
|
|
227
|
-
// In backdrop.ts
|
|
228
|
-
type ScBackdropState = 'idle' | 'open' | 'closed';
|
|
229
|
-
|
|
230
|
-
protected readonly class = computed(() =>
|
|
231
|
-
cn(
|
|
232
|
-
'pointer-events-none fixed inset-0 -z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs',
|
|
233
|
-
'data-idle:opacity-0',
|
|
234
|
-
'data-open:animate-in data-open:fade-in-0',
|
|
235
|
-
'data-closed:animate-out data-closed:fade-out-0',
|
|
236
|
-
this.classInput(),
|
|
237
|
-
),
|
|
238
|
-
);
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
**Animation Flow:**
|
|
242
|
-
|
|
243
|
-
1. Provider renders: `<div sc-backdrop [open]="open()" (animationComplete)="onBackdropAnimationComplete()"></div>`
|
|
244
|
-
2. ScBackdrop receives `open` input
|
|
245
|
-
3. Effect sets `state` to `'open'` or `'closed'` based on `open` value
|
|
246
|
-
4. Data attribute (`data-open` / `data-closed`) triggers Tailwind animation classes
|
|
247
|
-
5. Animation plays for 100ms
|
|
248
|
-
6. On `animationend`, if closing: state resets to `'idle'` (hidden), emits `animationComplete` output
|
|
249
|
-
7. Provider handles the event directly for coordination
|
|
250
|
-
|
|
251
|
-
**Why Separate Component?**
|
|
252
|
-
|
|
253
|
-
- Reusable across dialog, drawer, sheet, etc.
|
|
254
|
-
- Consistent animation pattern
|
|
255
|
-
- Single responsibility (visual layer only)
|
|
256
|
-
- CDK backdrop handles functionality separately
|
|
257
|
-
|
|
258
|
-
## Complete Animation Timeline
|
|
259
|
-
|
|
260
|
-
### Opening Sequence
|
|
261
|
-
|
|
262
|
-
```
|
|
263
|
-
User clicks trigger:
|
|
264
|
-
│
|
|
265
|
-
├─ t=0ms: Trigger calls open.set(true)
|
|
266
|
-
│ │
|
|
267
|
-
│ ├─ Provider effect 1:
|
|
268
|
-
│ │ ├─ overlayOpen.set(true) ← Mount DOM immediately
|
|
269
|
-
│ │ └─ animationsCompleted.set(0) ← Reset for next cycle
|
|
270
|
-
│ │
|
|
271
|
-
│ └─ Provider effect 3 (triggered by overlayOpen):
|
|
272
|
-
│ └─ attachDialog() ← CDK overlay attached
|
|
273
|
-
│ └─ TemplatePortal(overlayTemplate, viewContainerRef)
|
|
274
|
-
│ ├─ ScBackdrop rendered with [open]="open()"
|
|
275
|
-
│ └─ ng-template outlet stamps scDialogPortal content
|
|
276
|
-
│
|
|
277
|
-
├─ t=0ms: CDK adds .cdk-overlay-backdrop-showing
|
|
278
|
-
│ └─ Backdrop: state → 'open' (data-open set, 100ms fade-in)
|
|
279
|
-
│
|
|
280
|
-
├─ t=0ms: Dialog effect (triggered by open):
|
|
281
|
-
│ └─ state.set('open')
|
|
282
|
-
│ └─ data-open set → Entry animation starts
|
|
283
|
-
│ ├─ fade-in-0
|
|
284
|
-
│ ├─ zoom-in-95
|
|
285
|
-
│ └─ duration-100
|
|
286
|
-
│
|
|
287
|
-
├─ t=0-100ms: Both animations play
|
|
288
|
-
│
|
|
289
|
-
└─ t=100ms: Animations complete, dialog visible
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
### Closing Sequence (Coordinated Completion)
|
|
293
|
-
|
|
294
|
-
```
|
|
295
|
-
User clicks close/backdrop/escape:
|
|
296
|
-
│
|
|
297
|
-
├─ t=0ms: Provider calls open.set(false)
|
|
298
|
-
│ │
|
|
299
|
-
│ ├─ Dialog effect (triggered by open):
|
|
300
|
-
│ │ └─ state.set('closed') ← Triggers animation
|
|
301
|
-
│ │ └─ data-closed set → Exit animation starts
|
|
302
|
-
│ │ ├─ animate-out
|
|
303
|
-
│ │ ├─ fade-out-0
|
|
304
|
-
│ │ └─ zoom-out-95
|
|
305
|
-
│ │
|
|
306
|
-
│ └─ Backdrop receives [open]="false" input:
|
|
307
|
-
│ └─ state.set('closed') ← Triggers backdrop animation
|
|
308
|
-
│ └─ data-closed set → Backdrop fade-out
|
|
309
|
-
│
|
|
310
|
-
├─ IMPORTANT: overlayOpen is STILL true!
|
|
311
|
-
│ └─ DOM remains mounted so animations can play
|
|
312
|
-
│ └─ animationsCompleted = 0 (waiting for both)
|
|
313
|
-
│
|
|
314
|
-
├─ t=0-100ms: Both animations play simultaneously
|
|
315
|
-
│
|
|
316
|
-
├─ t=~100ms: Dialog animation completes
|
|
317
|
-
│ └─ onAnimationEnd(event) fires
|
|
318
|
-
│ └─ if (state === 'closed' && target === element):
|
|
319
|
-
│ ├─ state.set('idle') ← Reset to hidden resting state
|
|
320
|
-
│ └─ provider.onDialogAnimationComplete()
|
|
321
|
-
│ └─ animationsCompleted.update(n => n + 1) ← Count = 1
|
|
322
|
-
│
|
|
323
|
-
├─ t=~100ms: Backdrop animation completes
|
|
324
|
-
│ └─ backdrop emits (animationComplete)
|
|
325
|
-
│ └─ provider.onBackdropAnimationComplete()
|
|
326
|
-
│ └─ animationsCompleted.update(n => n + 1) ← Count = 2
|
|
327
|
-
│
|
|
328
|
-
├─ Provider effect 2 detects: animationsCompleted === 2 && !open()
|
|
329
|
-
│ └─ overlayOpen.set(false) ← Cleanup triggered!
|
|
330
|
-
│ └─ animationsCompleted.set(0) ← Reset for next cycle
|
|
331
|
-
│
|
|
332
|
-
└─ t=~100ms: Provider effect 3 (triggered by overlayOpen):
|
|
333
|
-
└─ detachDialog() ← DOM removed cleanly after BOTH complete
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
## Why Track Both Animations?
|
|
337
|
-
|
|
338
|
-
**Question:** Why coordinate two separate animations instead of using a single timer?
|
|
339
|
-
|
|
340
|
-
**Answer:** Explicit animation tracking is more robust and event-driven:
|
|
341
|
-
|
|
342
|
-
### The Problem with Single Timers
|
|
343
|
-
|
|
344
|
-
```typescript
|
|
345
|
-
// ❌ Old approach - assumes both animations finish together
|
|
346
|
-
onDialogAnimationComplete(): void {
|
|
347
|
-
setTimeout(() => {
|
|
348
|
-
this.overlayOpen.set(false);
|
|
349
|
-
}, 300); // Hope backdrop finishes too!
|
|
350
|
-
}
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
**Issues:**
|
|
354
|
-
|
|
355
|
-
- Assumes backdrop takes exactly 100ms
|
|
356
|
-
- Browser rendering variations can cause timing differences
|
|
357
|
-
- Backdrop might take 105ms, getting cut off at 100ms
|
|
358
|
-
- No way to know if backdrop actually completed
|
|
359
|
-
- Might wait longer than necessary if backdrop finishes early
|
|
360
|
-
|
|
361
|
-
### The Solution: Signal Counter Pattern
|
|
362
|
-
|
|
363
|
-
```typescript
|
|
364
|
-
// ✅ New approach - explicitly track both completions
|
|
365
|
-
private readonly animationsCompleted = signal<number>(0);
|
|
366
|
-
|
|
367
|
-
onDialogAnimationComplete(): void {
|
|
368
|
-
this.animationsCompleted.update(n => n + 1); // Count = 1
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
onBackdropAnimationComplete(): void {
|
|
372
|
-
this.animationsCompleted.update(n => n + 1); // Count = 2
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
effect(() => {
|
|
376
|
-
if (this.animationsCompleted() === 2 && !this.open()) {
|
|
377
|
-
this.overlayOpen.set(false); // Both confirmed complete!
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
**Benefits:**
|
|
383
|
-
|
|
384
|
-
1. **Event-driven**: Waits for actual completion, not estimated time
|
|
385
|
-
2. **Robust**: Handles browser timing variations (100ms vs 105ms)
|
|
386
|
-
3. **Accurate**: Both animations explicitly signal completion
|
|
387
|
-
4. **Extensible**: Easy to add more animations (just increase target count)
|
|
388
|
-
5. **No race conditions**: Counter resets on open for clean cycles
|
|
389
|
-
|
|
390
|
-
## State Synchronization
|
|
391
|
-
|
|
392
|
-
### Provider Constructor Effects
|
|
393
|
-
|
|
394
|
-
```typescript
|
|
395
|
-
constructor() {
|
|
396
|
-
// Effect 1: Sync overlayOpen with open for OPENING
|
|
397
|
-
effect(() => {
|
|
398
|
-
if (this.open()) {
|
|
399
|
-
// Opening: Mount DOM immediately
|
|
400
|
-
this.overlayOpen.set(true);
|
|
401
|
-
// Reset counter for next close cycle
|
|
402
|
-
this.animationsCompleted.set(0);
|
|
403
|
-
}
|
|
404
|
-
// Note: When closing, overlayOpen stays true!
|
|
405
|
-
// It will be set to false by the coordination effect below
|
|
406
|
-
});
|
|
407
|
-
|
|
408
|
-
// Effect 2: Close overlay when both animations complete
|
|
409
|
-
effect(() => {
|
|
410
|
-
const completed = this.animationsCompleted();
|
|
411
|
-
if (completed === 2 && !this.open()) {
|
|
412
|
-
// Both animations confirmed complete
|
|
413
|
-
this.overlayOpen.set(false);
|
|
414
|
-
// Reset for next cycle
|
|
415
|
-
this.animationsCompleted.set(0);
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
|
|
419
|
-
// Effect 3: Attach/detach CDK overlay based on overlayOpen
|
|
420
|
-
effect(() => {
|
|
421
|
-
if (this.overlayOpen()) {
|
|
422
|
-
this.attachDialog();
|
|
423
|
-
} else {
|
|
424
|
-
this.detachDialog();
|
|
425
|
-
}
|
|
426
|
-
});
|
|
427
|
-
}
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
### Provider Overlay Template
|
|
431
|
-
|
|
432
|
-
The provider's template includes the backdrop and focus trap, projecting the consumer's `scDialogPortal` template via `ngTemplateOutlet`:
|
|
433
|
-
|
|
434
|
-
```html
|
|
435
|
-
<ng-content />
|
|
436
|
-
<ng-template #overlayTemplate>
|
|
437
|
-
<div sc-backdrop [open]="open()" (animationComplete)="onBackdropAnimationComplete()"></div>
|
|
438
|
-
<div cdkTrapFocus [cdkTrapFocusAutoCapture]="true">
|
|
439
|
-
<ng-container [ngTemplateOutlet]="dialogPortal().templateRef" />
|
|
440
|
-
</div>
|
|
441
|
-
</ng-template>
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
### Dialog Constructor Effects
|
|
445
|
-
|
|
446
|
-
```typescript
|
|
447
|
-
constructor() {
|
|
448
|
-
// Effect: Sync animation state with logical state
|
|
449
|
-
effect(() => {
|
|
450
|
-
const isOpen = this.dialogProvider.open();
|
|
451
|
-
this.state.set(isOpen ? 'open' : 'closed');
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
## Animation Completion Handling
|
|
457
|
-
|
|
458
|
-
### Dialog Component
|
|
459
|
-
|
|
460
|
-
```typescript
|
|
461
|
-
protected onAnimationEnd(event: AnimationEvent): void {
|
|
462
|
-
// Only trigger cleanup when close animation completes
|
|
463
|
-
if (
|
|
464
|
-
this.state() === 'closed' &&
|
|
465
|
-
event.target === this.elementRef.nativeElement
|
|
466
|
-
) {
|
|
467
|
-
this.state.set('idle'); // Reset to hidden resting state
|
|
468
|
-
this.dialogProvider.onDialogAnimationComplete();
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
**Why check `event.target`?**
|
|
474
|
-
|
|
475
|
-
- `animationend` bubbles from child elements
|
|
476
|
-
- We only care about the dialog's own animation
|
|
477
|
-
- Prevents false triggers from child element animations
|
|
478
|
-
|
|
479
|
-
### Provider Component
|
|
480
|
-
|
|
481
|
-
The provider directly handles backdrop animation completion in its template — no intermediary needed:
|
|
482
|
-
|
|
483
|
-
```html
|
|
484
|
-
<!-- In provider's overlay template -->
|
|
485
|
-
<div sc-backdrop [open]="open()" (animationComplete)="onBackdropAnimationComplete()"></div>
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
```typescript
|
|
489
|
-
// In ScDialogProvider
|
|
490
|
-
onDialogAnimationComplete(): void {
|
|
491
|
-
if (!this.open()) {
|
|
492
|
-
this.animationsCompleted.update(n => n + 1);
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
onBackdropAnimationComplete(): void {
|
|
497
|
-
if (!this.open()) {
|
|
498
|
-
this.animationsCompleted.update(n => n + 1);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
**Why check `!this.open()` before incrementing?**
|
|
504
|
-
|
|
505
|
-
- User might have reopened dialog during close animation
|
|
506
|
-
- Prevents counter from incrementing during new open cycle
|
|
507
|
-
- Guards against race conditions
|
|
508
|
-
- Example: User clicks close (close starts), then immediately clicks trigger again (reopens)
|
|
509
|
-
- Without this check, the counter would incorrectly increment for the new cycle
|
|
510
|
-
|
|
511
|
-
**Why use `update()` instead of `set()`?**
|
|
512
|
-
|
|
513
|
-
- Increment is relative to current value
|
|
514
|
-
- Safe if multiple updates happen
|
|
515
|
-
- Immutable update pattern
|
|
516
|
-
- Consistent with Angular signals best practices
|
|
517
|
-
|
|
518
|
-
## Comparison: Evolution of Animation Coordination
|
|
519
|
-
|
|
520
|
-
### Approach 1: Single Timer (Previous Implementation)
|
|
521
|
-
|
|
522
|
-
```typescript
|
|
523
|
-
// ❌ Problems:
|
|
524
|
-
private async detachDialogWithAnimation() {
|
|
525
|
-
if (this.overlayRef.hasAttached()) {
|
|
526
|
-
const backdrop = this.overlayRef.backdropElement;
|
|
527
|
-
backdrop?.classList.add('sc-backdrop-hiding');
|
|
528
|
-
|
|
529
|
-
// Wait arbitrary time
|
|
530
|
-
await firstValueFrom(timer(100));
|
|
531
|
-
|
|
532
|
-
this.overlayRef.detach(); // Might cut off dialog animation!
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
```
|
|
536
|
-
|
|
537
|
-
**Issues:**
|
|
538
|
-
|
|
539
|
-
1. Single hardcoded timer for all animations
|
|
540
|
-
2. No detection of actual animation completion
|
|
541
|
-
3. Dialog animation might take longer or shorter
|
|
542
|
-
4. Not coordinated with dialog state
|
|
543
|
-
5. No way to cancel if reopened
|
|
544
|
-
|
|
545
|
-
### Approach 2: Signal Counter (Current Implementation)
|
|
546
|
-
|
|
547
|
-
```typescript
|
|
548
|
-
// ✅ Both animations explicitly tracked:
|
|
549
|
-
private readonly animationsCompleted = signal<number>(0);
|
|
550
|
-
|
|
551
|
-
constructor() {
|
|
552
|
-
// Effect 1: Open and reset
|
|
553
|
-
effect(() => {
|
|
554
|
-
if (this.open()) {
|
|
555
|
-
this.overlayOpen.set(true);
|
|
556
|
-
this.animationsCompleted.set(0);
|
|
557
|
-
}
|
|
558
|
-
});
|
|
559
|
-
|
|
560
|
-
// Effect 2: Close when both complete
|
|
561
|
-
effect(() => {
|
|
562
|
-
if (this.animationsCompleted() === 2 && !this.open()) {
|
|
563
|
-
this.overlayOpen.set(false);
|
|
564
|
-
this.animationsCompleted.set(0);
|
|
565
|
-
}
|
|
566
|
-
});
|
|
567
|
-
|
|
568
|
-
// Effect 3: Attach/detach CDK overlay
|
|
569
|
-
effect(() => {
|
|
570
|
-
if (this.overlayOpen()) {
|
|
571
|
-
this.attachDialog();
|
|
572
|
-
} else {
|
|
573
|
-
this.detachDialog();
|
|
574
|
-
}
|
|
575
|
-
});
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
// Both animations signal completion
|
|
579
|
-
onDialogAnimationComplete(): void {
|
|
580
|
-
if (!this.open()) {
|
|
581
|
-
this.animationsCompleted.update(n => n + 1);
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
onBackdropAnimationComplete(): void {
|
|
586
|
-
if (!this.open()) {
|
|
587
|
-
this.animationsCompleted.update(n => n + 1);
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
```
|
|
591
|
-
|
|
592
|
-
**Improvements:**
|
|
593
|
-
|
|
594
|
-
1. ✅ Both animations event-driven
|
|
595
|
-
2. ✅ No timing assumptions
|
|
596
|
-
3. ✅ Handles browser rendering variations
|
|
597
|
-
4. ✅ Explicit completion signals
|
|
598
|
-
5. ✅ Extensible (easy to add more animations)
|
|
599
|
-
6. ✅ Signal-based reactivity
|
|
600
|
-
7. ✅ Clean cycle management
|
|
601
|
-
|
|
602
|
-
## Key Design Decisions
|
|
603
|
-
|
|
604
|
-
### 1. Provider Owns Everything
|
|
605
|
-
|
|
606
|
-
**Decision:** `ScDialogProvider` manages state, overlay lifecycle, backdrop, and focus trap
|
|
607
|
-
|
|
608
|
-
**Why:**
|
|
609
|
-
|
|
610
|
-
- Provider controls _when_ content appears (open state)
|
|
611
|
-
- Provider controls _where_ content appears (CDK overlay)
|
|
612
|
-
- Single component owns the full lifecycle — no coordination between sibling components
|
|
613
|
-
- `ScDialogPortal` directive just marks _what_ content to portal — no logic
|
|
614
|
-
|
|
615
|
-
### 2. Separation of Logical and Physical State
|
|
616
|
-
|
|
617
|
-
**Decision:** Split logical state (`open`) from physical state (`overlayOpen`)
|
|
618
|
-
|
|
619
|
-
**Why:**
|
|
620
|
-
|
|
621
|
-
- Logical state drives animations
|
|
622
|
-
- Physical state drives DOM lifecycle
|
|
623
|
-
- Animations need time to complete before DOM removal
|
|
624
|
-
- Clean separation makes flow easier to understand
|
|
625
|
-
|
|
626
|
-
### 3. Signal Counter Pattern
|
|
627
|
-
|
|
628
|
-
**Decision:** Use signal counter to track multiple animation completions
|
|
629
|
-
|
|
630
|
-
**Why:**
|
|
631
|
-
|
|
632
|
-
- Both animations explicitly signal completion
|
|
633
|
-
- No timing assumptions or hardcoded delays
|
|
634
|
-
- Reactive: effect triggers when counter reaches target
|
|
635
|
-
- Extensible: easy to add more animations (increase target)
|
|
636
|
-
- Debuggable: counter value visible in Angular DevTools
|
|
637
|
-
|
|
638
|
-
### 4. Event-Driven Completion
|
|
639
|
-
|
|
640
|
-
**Decision:** Both dialog and backdrop emit completion events
|
|
641
|
-
|
|
642
|
-
**Why:**
|
|
643
|
-
|
|
644
|
-
- Precise: no guessing when animations finish
|
|
645
|
-
- Robust: handles browser timing variations
|
|
646
|
-
- Decoupled: backdrop component remains reusable
|
|
647
|
-
- No arbitrary timeouts or magic numbers
|
|
648
|
-
|
|
649
|
-
### 5. Guard Pattern for Counter Increments
|
|
650
|
-
|
|
651
|
-
**Decision:** Check `!open()` before incrementing animation counter
|
|
652
|
-
|
|
653
|
-
**Why:**
|
|
654
|
-
|
|
655
|
-
- Prevents counter increments during new open cycle
|
|
656
|
-
- User might reopen during close animation
|
|
657
|
-
- Without guard, counter would increment incorrectly for new cycle
|
|
658
|
-
- Example: Close starts → dialog completes → user reopens → backdrop completes would incorrectly increment counter for new open
|
|
659
|
-
- Effect checks both counter AND `!open()` for safety
|
|
660
|
-
|
|
661
|
-
### 6. Effect-Based Reactivity
|
|
662
|
-
|
|
663
|
-
**Decision:** Use Angular effects instead of manual subscriptions
|
|
664
|
-
|
|
665
|
-
**Why:**
|
|
666
|
-
|
|
667
|
-
- Automatic cleanup on component destruction
|
|
668
|
-
- Declarative: describes "what" not "how"
|
|
669
|
-
- Runs automatically when dependencies change
|
|
670
|
-
- Easier to reason about than imperative code
|
|
671
|
-
|
|
672
|
-
### 7. `display: contents` on Provider
|
|
673
|
-
|
|
674
|
-
**Decision:** Provider uses `display: contents` to be invisible to CSS layout
|
|
675
|
-
|
|
676
|
-
**Why:**
|
|
677
|
-
|
|
678
|
-
- Provider is a `<div>` (required for CDK overlay's `ViewContainerRef`)
|
|
679
|
-
- But it shouldn't affect the consumer's layout
|
|
680
|
-
- `display: contents` makes the element's box disappear while keeping children in flow
|
|
681
|
-
- Consumer can place trigger and other content without layout interference
|
|
682
|
-
|
|
683
|
-
## Animation Classes Reference
|
|
684
|
-
|
|
685
|
-
### Dialog Content Classes
|
|
686
|
-
|
|
687
|
-
```typescript
|
|
688
|
-
// Idle state (hidden)
|
|
689
|
-
'data-idle:opacity-0';
|
|
690
|
-
|
|
691
|
-
// Entry animation (via data-open)
|
|
692
|
-
'data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95';
|
|
693
|
-
|
|
694
|
-
// Exit animation (via data-closed)
|
|
695
|
-
'data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95';
|
|
696
|
-
```
|
|
697
|
-
|
|
698
|
-
### Backdrop Classes
|
|
699
|
-
|
|
700
|
-
```typescript
|
|
701
|
-
// Idle state (hidden)
|
|
702
|
-
'data-idle:opacity-0';
|
|
703
|
-
|
|
704
|
-
// Entry animation (via data-open)
|
|
705
|
-
'data-open:animate-in data-open:fade-in-0';
|
|
706
|
-
|
|
707
|
-
// Exit animation (via data-closed)
|
|
708
|
-
'data-closed:animate-out data-closed:fade-out-0';
|
|
709
|
-
```
|
|
710
|
-
|
|
711
|
-
## Accessibility Considerations
|
|
712
|
-
|
|
713
|
-
The animation system preserves accessibility:
|
|
714
|
-
|
|
715
|
-
1. **Focus Management:** Dialog auto-focuses on mount via `cdkTrapFocus` with `cdkTrapFocusAutoCapture`
|
|
716
|
-
2. **ARIA Attributes:** Set before animations start (`role="dialog"`, `aria-modal="true"`)
|
|
717
|
-
3. **Screen Readers:** Announce dialog immediately (not after animation)
|
|
718
|
-
4. **Keyboard:** Escape key closes the dialog (via CDK overlay keydown events)
|
|
719
|
-
5. **Backdrop Click:** Click outside closes the dialog (via CDK overlay backdrop click)
|
|
720
|
-
6. **Reduced Motion:** Could add `@media (prefers-reduced-motion)` support
|
|
721
|
-
|
|
722
|
-
## Performance Considerations
|
|
723
|
-
|
|
724
|
-
### Efficient Rendering
|
|
725
|
-
|
|
726
|
-
- Uses `ChangeDetectionStrategy.OnPush` everywhere
|
|
727
|
-
- Effects only run when dependencies change
|
|
728
|
-
- No manual subscriptions to manage
|
|
729
|
-
- Single overlay instance reused
|
|
730
|
-
|
|
731
|
-
### Animation Performance
|
|
732
|
-
|
|
733
|
-
- CSS animations (GPU accelerated)
|
|
734
|
-
- Opacity and transform (composited properties)
|
|
735
|
-
- No layout thrashing
|
|
736
|
-
- Minimal JavaScript during animation
|
|
737
|
-
|
|
738
|
-
### Memory Management
|
|
739
|
-
|
|
740
|
-
- Effects auto-cleanup on destroy
|
|
741
|
-
- No timeout leaks (event-driven approach)
|
|
742
|
-
- Overlay detached after use
|
|
743
|
-
- No memory leaks
|
|
744
|
-
|
|
745
|
-
## Consumer API
|
|
746
|
-
|
|
747
|
-
```html
|
|
748
|
-
<div sc-dialog-provider [(open)]="isOpen">
|
|
749
|
-
<button sc-dialog-trigger sc-button>Open</button>
|
|
750
|
-
<ng-template scDialogPortal>
|
|
751
|
-
<div sc-dialog>
|
|
752
|
-
<button sc-dialog-close>...</button>
|
|
753
|
-
<div sc-dialog-header>
|
|
754
|
-
<h2 sc-dialog-title>Title</h2>
|
|
755
|
-
<p sc-dialog-description>Description</p>
|
|
756
|
-
</div>
|
|
757
|
-
<!-- content -->
|
|
758
|
-
<div sc-dialog-footer>
|
|
759
|
-
<button sc-button>Save</button>
|
|
760
|
-
</div>
|
|
761
|
-
</div>
|
|
762
|
-
</ng-template>
|
|
763
|
-
</div>
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
**Key points:**
|
|
767
|
-
|
|
768
|
-
- `scDialogPortal` on `ng-template` marks lazy content
|
|
769
|
-
- Content is only instantiated when dialog opens
|
|
770
|
-
- `ScDialogPortal` must be imported in the consumer's `imports` array
|
|
771
|
-
- `[(open)]` provides two-way binding for programmatic control
|
|
772
|
-
|
|
773
|
-
## Summary
|
|
774
|
-
|
|
775
|
-
The dialog animation architecture achieves smooth, reliable animations through:
|
|
776
|
-
|
|
777
|
-
1. **Two-signal pattern:** Separates intent (`open`) from DOM lifecycle (`overlayOpen`)
|
|
778
|
-
2. **Signal counter coordination:** Tracks completion of multiple animations (`animationsCompleted`)
|
|
779
|
-
3. **Event-driven completion:** Both dialog and backdrop explicitly signal when done
|
|
780
|
-
4. **Reactive updates:** Effects respond to state changes automatically
|
|
781
|
-
5. **Robust timing:** No assumptions, handles browser variations
|
|
782
|
-
6. **Centralized ownership:** Provider owns all lifecycle logic; portal directive is just a content marker
|
|
783
|
-
|
|
784
|
-
This architecture provides:
|
|
785
|
-
|
|
786
|
-
- ✅ Reliable animation completion detection
|
|
787
|
-
- ✅ Clean separation of concerns
|
|
788
|
-
- ✅ Extensibility (easy to add more animations)
|
|
789
|
-
- ✅ No race conditions or timing assumptions
|
|
790
|
-
- ✅ Debuggable signal-based state
|
|
791
|
-
- ✅ Better user experience (smooth, never cut off)
|
|
792
|
-
- ✅ Lazy content instantiation via `ng-template`
|