ngwr 10.2.0 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -19
- package/anchor/styles/_index.scss +4 -4
- package/back-top/styles/_index.scss +6 -1
- package/blur-text/styles/_index.scss +13 -0
- package/button/styles/_index.scss +11 -6
- package/carousel/styles/_index.scss +13 -2
- package/cascader/styles/_index.scss +2 -2
- package/circular-text/styles/_index.scss +2 -0
- package/collapse/styles/_index.scss +1 -1
- package/color-picker/styles/_index.scss +6 -1
- package/compare/styles/_index.scss +1 -2
- package/context-menu/styles/_index.scss +6 -1
- package/descriptions/styles/_index.scss +2 -2
- package/dialog/styles/_index.scss +38 -0
- package/drawer/styles/_index.scss +20 -1
- package/dropdown/styles/_index.scss +19 -5
- package/empty/styles/_index.scss +10 -0
- package/fesm2022/ngwr-action-sheet.mjs +15 -5
- package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
- package/fesm2022/ngwr-affix.mjs +43 -16
- package/fesm2022/ngwr-affix.mjs.map +1 -1
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-anchor.mjs +20 -8
- package/fesm2022/ngwr-anchor.mjs.map +1 -1
- package/fesm2022/ngwr-aurora.mjs +4 -4
- package/fesm2022/ngwr-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-avatar.mjs +33 -9
- package/fesm2022/ngwr-avatar.mjs.map +1 -1
- package/fesm2022/ngwr-back-top.mjs +8 -4
- package/fesm2022/ngwr-back-top.mjs.map +1 -1
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-badge.mjs.map +1 -1
- package/fesm2022/ngwr-bar-chart.mjs +32 -11
- package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
- package/fesm2022/ngwr-blur-text.mjs +4 -4
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow.mjs +4 -4
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +9 -8
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +11 -6
- package/fesm2022/ngwr-burger.mjs.map +1 -1
- package/fesm2022/ngwr-button-testing.mjs +96 -0
- package/fesm2022/ngwr-button-testing.mjs.map +1 -0
- package/fesm2022/ngwr-button.mjs +89 -24
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap.mjs +42 -10
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +108 -9
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +10 -10
- package/fesm2022/ngwr-card.mjs.map +1 -1
- package/fesm2022/ngwr-carousel-testing.mjs +377 -0
- package/fesm2022/ngwr-carousel-testing.mjs.map +1 -0
- package/fesm2022/ngwr-carousel.mjs +72 -18
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader-testing.mjs +534 -0
- package/fesm2022/ngwr-cascader-testing.mjs.map +1 -0
- package/fesm2022/ngwr-cascader.mjs +4 -4
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox-testing.mjs +90 -0
- package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -0
- package/fesm2022/ngwr-checkbox.mjs +15 -9
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +4 -4
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +4 -4
- package/fesm2022/ngwr-click-spark.mjs.map +1 -1
- package/fesm2022/ngwr-clipboard.mjs +18 -4
- package/fesm2022/ngwr-clipboard.mjs.map +1 -1
- package/fesm2022/ngwr-collapse-testing.mjs +368 -0
- package/fesm2022/ngwr-collapse-testing.mjs.map +1 -0
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker.mjs +139 -19
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette-testing.mjs +589 -0
- package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -0
- package/fesm2022/ngwr-command-palette.mjs +60 -10
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +105 -15
- package/fesm2022/ngwr-compare.mjs.map +1 -1
- package/fesm2022/ngwr-confetti.mjs +3 -3
- package/fesm2022/ngwr-config.mjs +106 -0
- package/fesm2022/ngwr-config.mjs.map +1 -0
- package/fesm2022/ngwr-context-menu-testing.mjs +631 -0
- package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -0
- package/fesm2022/ngwr-context-menu.mjs +104 -18
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +8 -4
- package/fesm2022/ngwr-cookie.mjs.map +1 -1
- package/fesm2022/ngwr-counter.mjs +17 -9
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
- package/fesm2022/ngwr-date-adapter-luxon.mjs +55 -7
- package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapter.mjs +57 -11
- package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker-testing.mjs +766 -0
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -0
- package/fesm2022/ngwr-date-picker.mjs +409 -57
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-decrypt-text.mjs +30 -12
- package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog-testing.mjs +89 -0
- package/fesm2022/ngwr-dialog-testing.mjs.map +1 -0
- package/fesm2022/ngwr-dialog.mjs +33 -17
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +48 -24
- package/fesm2022/ngwr-directives.mjs.map +1 -1
- package/fesm2022/ngwr-divider.mjs +3 -3
- package/fesm2022/ngwr-donut-chart.mjs +24 -7
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +7 -7
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer-testing.mjs +250 -0
- package/fesm2022/ngwr-drawer-testing.mjs.map +1 -0
- package/fesm2022/ngwr-drawer.mjs +37 -19
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown-testing.mjs +291 -0
- package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -0
- package/fesm2022/ngwr-dropdown.mjs +19 -11
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +26 -9
- package/fesm2022/ngwr-empty.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +62 -15
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +4 -4
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload-testing.mjs +332 -0
- package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -0
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-form-testing.mjs +451 -0
- package/fesm2022/ngwr-form-testing.mjs.map +1 -0
- package/fesm2022/ngwr-form.mjs +28 -12
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +11 -4
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge.mjs +21 -7
- package/fesm2022/ngwr-gauge.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text.mjs +4 -4
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text.mjs +4 -4
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-hotkey.mjs +31 -10
- package/fesm2022/ngwr-hotkey.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +61 -0
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +59 -0
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +9 -9
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper.mjs +26 -3
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
- package/fesm2022/ngwr-input-number-testing.mjs +306 -0
- package/fesm2022/ngwr-input-number-testing.mjs.map +1 -0
- package/fesm2022/ngwr-input-number.mjs +37 -5
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp-testing.mjs +419 -0
- package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -0
- package/fesm2022/ngwr-input-otp.mjs +39 -8
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input-testing.mjs +102 -0
- package/fesm2022/ngwr-input-testing.mjs.map +1 -0
- package/fesm2022/ngwr-input.mjs +62 -25
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob.mjs +46 -10
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-layout.mjs +36 -20
- package/fesm2022/ngwr-layout.mjs.map +1 -1
- package/fesm2022/ngwr-lightbox.mjs +35 -8
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +19 -6
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +14 -9
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +71 -31
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown-testing.mjs +516 -0
- package/fesm2022/ngwr-markdown-testing.mjs.map +1 -0
- package/fesm2022/ngwr-markdown.mjs +1492 -0
- package/fesm2022/ngwr-markdown.mjs.map +1 -0
- package/fesm2022/ngwr-marquee.mjs +19 -8
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention-testing.mjs +513 -0
- package/fesm2022/ngwr-mention-testing.mjs.map +1 -0
- package/fesm2022/ngwr-mention.mjs +16 -7
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +28 -13
- package/fesm2022/ngwr-meta.mjs.map +1 -1
- package/fesm2022/ngwr-meter-group.mjs +22 -8
- package/fesm2022/ngwr-meter-group.mjs.map +1 -1
- package/fesm2022/ngwr-overlay.mjs +57 -8
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination-testing.mjs +389 -0
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -0
- package/fesm2022/ngwr-pagination.mjs +27 -11
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +21 -21
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-popconfirm-testing.mjs +309 -0
- package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -0
- package/fesm2022/ngwr-popconfirm.mjs +99 -21
- package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
- package/fesm2022/ngwr-popover-testing.mjs +316 -0
- package/fesm2022/ngwr-popover-testing.mjs.map +1 -0
- package/fesm2022/ngwr-popover.mjs +48 -10
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs +19 -4
- package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
- package/fesm2022/ngwr-qr.mjs +15 -5
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio-testing.mjs +392 -0
- package/fesm2022/ngwr-radio-testing.mjs.map +1 -0
- package/fesm2022/ngwr-radio.mjs +16 -9
- package/fesm2022/ngwr-radio.mjs.map +1 -1
- package/fesm2022/ngwr-rating-testing.mjs +384 -0
- package/fesm2022/ngwr-rating-testing.mjs.map +1 -0
- package/fesm2022/ngwr-rating.mjs +40 -5
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-result.mjs +12 -12
- package/fesm2022/ngwr-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented-testing.mjs +512 -0
- package/fesm2022/ngwr-segmented-testing.mjs.map +1 -0
- package/fesm2022/ngwr-segmented.mjs +3 -3
- package/fesm2022/ngwr-select-testing.mjs +268 -0
- package/fesm2022/ngwr-select-testing.mjs.map +1 -0
- package/fesm2022/ngwr-select.mjs +96 -25
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +7 -7
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +67 -14
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider-testing.mjs +478 -0
- package/fesm2022/ngwr-slider-testing.mjs.map +1 -0
- package/fesm2022/ngwr-slider.mjs +59 -15
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +28 -8
- package/fesm2022/ngwr-sparkline.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial.mjs +39 -6
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spinner.mjs +14 -5
- package/fesm2022/ngwr-spinner.mjs.map +1 -1
- package/fesm2022/ngwr-splash-cursor.mjs +4 -4
- package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
- package/fesm2022/ngwr-split-text.mjs +4 -4
- package/fesm2022/ngwr-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter.mjs +72 -11
- package/fesm2022/ngwr-splitter.mjs.map +1 -1
- package/fesm2022/ngwr-spotlight-card.mjs +7 -7
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +6 -6
- package/fesm2022/ngwr-star-border.mjs +4 -4
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +33 -16
- package/fesm2022/ngwr-statistic.mjs.map +1 -1
- package/fesm2022/ngwr-stepper-testing.mjs +477 -0
- package/fesm2022/ngwr-stepper-testing.mjs.map +1 -0
- package/fesm2022/ngwr-stepper.mjs +6 -6
- package/fesm2022/ngwr-storage.mjs +27 -17
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch-testing.mjs +77 -0
- package/fesm2022/ngwr-switch-testing.mjs.map +1 -0
- package/fesm2022/ngwr-switch.mjs +12 -6
- package/fesm2022/ngwr-switch.mjs.map +1 -1
- package/fesm2022/ngwr-table-testing.mjs +580 -0
- package/fesm2022/ngwr-table-testing.mjs.map +1 -0
- package/fesm2022/ngwr-table.mjs +105 -44
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-testing.mjs +617 -0
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -0
- package/fesm2022/ngwr-tabs.mjs +44 -12
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea-testing.mjs +238 -0
- package/fesm2022/ngwr-textarea-testing.mjs.map +1 -0
- package/fesm2022/ngwr-textarea.mjs +35 -7
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-theme.mjs +3 -3
- package/fesm2022/ngwr-tilt-card.mjs +7 -7
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast-testing.mjs +101 -0
- package/fesm2022/ngwr-toast-testing.mjs.map +1 -0
- package/fesm2022/ngwr-toast.mjs +55 -21
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +67 -15
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer-testing.mjs +538 -0
- package/fesm2022/ngwr-transfer-testing.mjs.map +1 -0
- package/fesm2022/ngwr-transfer.mjs +47 -16
- package/fesm2022/ngwr-transfer.mjs.map +1 -1
- package/fesm2022/ngwr-tree-testing.mjs +734 -0
- package/fesm2022/ngwr-tree-testing.mjs.map +1 -0
- package/fesm2022/ngwr-tree.mjs +75 -9
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +7 -5
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +33 -7
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves.mjs +5 -5
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +88 -18
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/gauge/styles/_index.scss +1 -1
- package/glitch-text/styles/_index.scss +4 -0
- package/i18n/en.json +56 -0
- package/i18n/ru.json +56 -0
- package/image-cropper/styles/_index.scss +13 -1
- package/input/styles/_index.scss +2 -2
- package/input-number/styles/_index.scss +7 -2
- package/knob/styles/_index.scss +8 -1
- package/layout/styles/_index.scss +3 -3
- package/lightbox/styles/_index.scss +10 -2
- package/line-chart/styles/_index.scss +6 -0
- package/llms-full.txt +151 -4
- package/llms.txt +57 -8
- package/loading-bar/styles/_index.scss +1 -2
- package/markdown/styles/_index.scss +296 -0
- package/marquee/styles/_index.scss +12 -0
- package/mcp/api.js +512 -0
- package/mcp/catalog.js +157 -0
- package/mcp/server.js +273 -0
- package/mcp/tools.js +366 -0
- package/meter-group/styles/_index.scss +1 -1
- package/package.json +186 -35
- package/pagination/styles/_index.scss +6 -6
- package/popover/styles/_index.scss +37 -5
- package/rating/styles/_index.scss +10 -0
- package/schematics/use/symbol-map.json +2 -0
- package/segmented/styles/_index.scss +7 -0
- package/select/styles/_index.scss +29 -9
- package/sidebar/styles/_index.scss +30 -5
- package/slider/styles/_index.scss +15 -0
- package/speed-dial/styles/_index.scss +20 -0
- package/split-text/styles/_index.scss +13 -0
- package/star-border/styles/_index.scss +2 -0
- package/stepper/styles/_index.scss +1 -1
- package/styles/_grid.scss +4 -4
- package/styles.scss +1 -0
- package/switch/styles/_index.scss +5 -3
- package/table/styles/_index.scss +22 -11
- package/tabs/styles/_index.scss +11 -1
- package/textarea/styles/_index.scss +5 -0
- package/theme/styles/_colors.scss +29 -13
- package/theme/styles/_dark.scss +11 -3
- package/theme/styles/_mixins.scss +3 -0
- package/timeline/styles/_index.scss +2 -2
- package/toast/styles/_index.scss +17 -8
- package/toolbar/styles/_index.scss +3 -3
- package/tour/styles/_index.scss +7 -1
- package/tree/styles/_index.scss +5 -3
- package/types/ngwr-action-sheet.d.ts +9 -1
- package/types/ngwr-affix.d.ts +7 -1
- package/types/ngwr-anchor.d.ts +8 -1
- package/types/ngwr-avatar.d.ts +13 -3
- package/types/ngwr-bar-chart.d.ts +16 -0
- package/types/ngwr-burger.d.ts +6 -2
- package/types/ngwr-button-testing.d.ts +85 -0
- package/types/ngwr-button.d.ts +58 -10
- package/types/ngwr-calendar-heatmap.d.ts +16 -2
- package/types/ngwr-calendar.d.ts +37 -1
- package/types/ngwr-carousel-testing.d.ts +257 -0
- package/types/ngwr-carousel.d.ts +20 -4
- package/types/ngwr-cascader-testing.d.ts +392 -0
- package/types/ngwr-checkbox-testing.d.ts +77 -0
- package/types/ngwr-checkbox.d.ts +7 -2
- package/types/ngwr-clipboard.d.ts +8 -1
- package/types/ngwr-collapse-testing.d.ts +290 -0
- package/types/ngwr-color-picker.d.ts +20 -11
- package/types/ngwr-command-palette-testing.d.ts +437 -0
- package/types/ngwr-command-palette.d.ts +25 -2
- package/types/ngwr-compare.d.ts +50 -2
- package/types/ngwr-config.d.ts +176 -0
- package/types/ngwr-context-menu-testing.d.ts +401 -0
- package/types/ngwr-context-menu.d.ts +65 -17
- package/types/ngwr-counter.d.ts +6 -1
- package/types/ngwr-date-adapter-luxon.d.ts +26 -0
- package/types/ngwr-date-picker-testing.d.ts +518 -0
- package/types/ngwr-date-picker.d.ts +128 -8
- package/types/ngwr-dialog-testing.d.ts +79 -0
- package/types/ngwr-dialog.d.ts +13 -0
- package/types/ngwr-directives.d.ts +10 -1
- package/types/ngwr-donut-chart.d.ts +8 -1
- package/types/ngwr-drawer-testing.d.ts +196 -0
- package/types/ngwr-drawer.d.ts +15 -0
- package/types/ngwr-dropdown-testing.d.ts +202 -0
- package/types/ngwr-dropdown.d.ts +7 -1
- package/types/ngwr-empty.d.ts +19 -4
- package/types/ngwr-event-calendar.d.ts +26 -1
- package/types/ngwr-file-upload-testing.d.ts +194 -0
- package/types/ngwr-form-testing.d.ts +379 -0
- package/types/ngwr-form.d.ts +17 -0
- package/types/ngwr-gauge.d.ts +13 -1
- package/types/ngwr-hotkey.d.ts +2 -0
- package/types/ngwr-image-cropper.d.ts +10 -0
- package/types/ngwr-input-number-testing.d.ts +226 -0
- package/types/ngwr-input-number.d.ts +29 -1
- package/types/ngwr-input-otp-testing.d.ts +299 -0
- package/types/ngwr-input-otp.d.ts +23 -2
- package/types/ngwr-input-testing.d.ts +84 -0
- package/types/ngwr-input.d.ts +20 -6
- package/types/ngwr-knob.d.ts +18 -0
- package/types/ngwr-layout.d.ts +1 -0
- package/types/ngwr-lightbox.d.ts +17 -3
- package/types/ngwr-line-chart.d.ts +9 -2
- package/types/ngwr-list.d.ts +7 -2
- package/types/ngwr-loading-bar.d.ts +4 -7
- package/types/ngwr-markdown-testing.d.ts +462 -0
- package/types/ngwr-markdown.d.ts +534 -0
- package/types/ngwr-marquee.d.ts +12 -2
- package/types/ngwr-mention-testing.d.ts +359 -0
- package/types/ngwr-meta.d.ts +4 -2
- package/types/ngwr-meter-group.d.ts +11 -1
- package/types/ngwr-overlay.d.ts +33 -2
- package/types/ngwr-pagination-testing.d.ts +291 -0
- package/types/ngwr-pagination.d.ts +7 -1
- package/types/ngwr-popconfirm-testing.d.ts +235 -0
- package/types/ngwr-popconfirm.d.ts +31 -21
- package/types/ngwr-popover-testing.d.ts +221 -0
- package/types/ngwr-popover.d.ts +19 -2
- package/types/ngwr-pull-to-refresh.d.ts +7 -0
- package/types/ngwr-qr.d.ts +9 -1
- package/types/ngwr-radio-testing.d.ts +296 -0
- package/types/ngwr-radio.d.ts +8 -2
- package/types/ngwr-rating-testing.d.ts +291 -0
- package/types/ngwr-rating.d.ts +23 -0
- package/types/ngwr-segmented-testing.d.ts +401 -0
- package/types/ngwr-select-testing.d.ts +175 -0
- package/types/ngwr-select.d.ts +45 -4
- package/types/ngwr-sidebar.d.ts +17 -2
- package/types/ngwr-slider-testing.d.ts +329 -0
- package/types/ngwr-slider.d.ts +35 -1
- package/types/ngwr-sparkline.d.ts +12 -2
- package/types/ngwr-speed-dial.d.ts +17 -18
- package/types/ngwr-spinner.d.ts +8 -1
- package/types/ngwr-splitter.d.ts +24 -1
- package/types/ngwr-statistic.d.ts +12 -2
- package/types/ngwr-stepper-testing.d.ts +346 -0
- package/types/ngwr-storage.d.ts +10 -1
- package/types/ngwr-switch-testing.d.ts +66 -0
- package/types/ngwr-switch.d.ts +7 -2
- package/types/ngwr-table-testing.d.ts +423 -0
- package/types/ngwr-table.d.ts +42 -0
- package/types/ngwr-tabs-testing.d.ts +470 -0
- package/types/ngwr-tabs.d.ts +9 -0
- package/types/ngwr-textarea-testing.d.ts +184 -0
- package/types/ngwr-textarea.d.ts +7 -2
- package/types/ngwr-toast-testing.d.ts +80 -0
- package/types/ngwr-toast.d.ts +19 -4
- package/types/ngwr-tour.d.ts +27 -0
- package/types/ngwr-transfer-testing.d.ts +444 -0
- package/types/ngwr-transfer.d.ts +16 -1
- package/types/ngwr-tree-testing.d.ts +501 -0
- package/types/ngwr-tree.d.ts +33 -0
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-virtual-scroll.d.ts +13 -1
- package/types/ngwr-window.d.ts +23 -2
- package/typewriter/styles/_index.scss +1 -1
- package/typography/styles/_index.scss +1 -1
- package/window/styles/_index.scss +32 -9
|
@@ -84,6 +84,7 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
84
84
|
private readonly host;
|
|
85
85
|
private readonly destroyRef;
|
|
86
86
|
protected readonly inputEl: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
87
|
+
protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
|
|
87
88
|
/** The picked Date. Bound by `[formField]`, or two-way via `[(value)]`. */
|
|
88
89
|
readonly value: _angular_core.ModelSignal<Date | null>;
|
|
89
90
|
/** Emitted on blur so a bound field can mark itself touched. */
|
|
@@ -92,6 +93,14 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
92
93
|
protected readonly text: _angular_core.WritableSignal<string>;
|
|
93
94
|
/** Whether the popover is currently open. */
|
|
94
95
|
protected readonly overlayOpen: _angular_core.WritableSignal<boolean>;
|
|
96
|
+
/**
|
|
97
|
+
* Where focus came from, captured as an explicit argument at open time —
|
|
98
|
+
* never read off `document.activeElement`, which by then may already be the
|
|
99
|
+
* pane. Every close path that took focus INTO the panel hands it back here.
|
|
100
|
+
*/
|
|
101
|
+
private openedFrom;
|
|
102
|
+
/** Whether the panel this open cycle should take focus. */
|
|
103
|
+
private autoFocusPanel;
|
|
95
104
|
/** Resolved format — falls back to a mode-appropriate default. */
|
|
96
105
|
protected readonly resolvedFormat: _angular_core.Signal<string>;
|
|
97
106
|
protected readonly isTime: _angular_core.Signal<boolean>;
|
|
@@ -99,6 +108,9 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
99
108
|
private readonly labelDate;
|
|
100
109
|
private readonly labelTime;
|
|
101
110
|
private readonly labelDateTime;
|
|
111
|
+
private readonly panelLabelDate;
|
|
112
|
+
private readonly panelLabelTime;
|
|
113
|
+
private readonly panelLabelDateTime;
|
|
102
114
|
/**
|
|
103
115
|
* Accessible name of the text field. Falls back to the placeholder, then to
|
|
104
116
|
* the same catalog string the calendar button uses — the field is a
|
|
@@ -108,11 +120,25 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
108
120
|
private readonly fieldLabel;
|
|
109
121
|
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
110
122
|
protected readonly triggerLabel: _angular_core.Signal<string>;
|
|
123
|
+
/**
|
|
124
|
+
* Accessible name of the popup. The trigger advertises
|
|
125
|
+
* `aria-haspopup="dialog"`, so the panel is a `role="dialog"` — and an unnamed
|
|
126
|
+
* dialog announces as a bare "dialog". Defaults to the catalog's
|
|
127
|
+
* `datePicker.panel*` string for the current `mode`.
|
|
128
|
+
*/
|
|
129
|
+
readonly panelAriaLabel: _angular_core.InputSignal<string | null>;
|
|
130
|
+
/** Popup id — what the trigger's `aria-controls` points at while open. */
|
|
131
|
+
protected readonly panelId: string;
|
|
132
|
+
protected readonly resolvedPanelLabel: _angular_core.Signal<string>;
|
|
111
133
|
protected readonly classes: _angular_core.Signal<string>;
|
|
112
134
|
private overlayRef;
|
|
113
135
|
/** Live calendar ref while the date popover is open — lets the panel track
|
|
114
136
|
* the typed value in real time (not just on reopen). */
|
|
115
137
|
private readonly dateRef;
|
|
138
|
+
private readonly timeRef;
|
|
139
|
+
private readonly dateTimeRef;
|
|
140
|
+
/** The last value an open panel handed us, so the live push never echoes it back. */
|
|
141
|
+
private lastFromPanel;
|
|
116
142
|
/** Last value we pushed into the model ourselves — lets the sync effect
|
|
117
143
|
* skip the echo of our own edits (so a live keystroke's raw text is never
|
|
118
144
|
* reformatted mid-type). */
|
|
@@ -123,6 +149,24 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
123
149
|
/** Called by the input's click — opens the overlay if it isn't open already. */
|
|
124
150
|
protected openOnInput(): void;
|
|
125
151
|
protected toggleOverlay(): void;
|
|
152
|
+
/**
|
|
153
|
+
* The keyboard route into the panel, per the APG date-picker pattern.
|
|
154
|
+
*
|
|
155
|
+
* `Alt+ArrowDown` opens and takes focus; a bare arrow moves focus in when the
|
|
156
|
+
* panel is ALREADY open, which is how someone who opened it by clicking the
|
|
157
|
+
* field gets to the grid. Every other key — characters, Backspace, the
|
|
158
|
+
* horizontal arrows, Home / End — is left to the field untouched, so typing a
|
|
159
|
+
* date keeps working exactly as before.
|
|
160
|
+
*/
|
|
161
|
+
protected onFieldKey(event: KeyboardEvent): void;
|
|
162
|
+
/**
|
|
163
|
+
* Move focus into an already-mounted panel. A plain query is right HERE and
|
|
164
|
+
* wrong at mount time: the panel has settled, so there is no deferral to get
|
|
165
|
+
* wrong — and it keeps `autoFocus` as the single piece of panel API.
|
|
166
|
+
*/
|
|
167
|
+
private focusPanel;
|
|
168
|
+
/** Hand focus back to whatever opened the panel, if it is still on the page. */
|
|
169
|
+
private restoreFocus;
|
|
126
170
|
private openOverlay;
|
|
127
171
|
private attachDate;
|
|
128
172
|
private attachTime;
|
|
@@ -131,12 +175,19 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
131
175
|
/** Push a value to the model while remembering it, so the sync effect treats
|
|
132
176
|
* the resulting change as an echo and leaves the display text alone. */
|
|
133
177
|
private commitValue;
|
|
178
|
+
/**
|
|
179
|
+
* Focus goes back to the opener only when it was still INSIDE the panel —
|
|
180
|
+
* dropped there, it would land on `<body>` and the next Tab would restart
|
|
181
|
+
* from the top of the page. When focus had already moved elsewhere (a click
|
|
182
|
+
* on another control, which is itself what closed us) it is left alone:
|
|
183
|
+
* stealing it back would fight the user for the caret.
|
|
184
|
+
*/
|
|
134
185
|
private closeOverlay;
|
|
135
186
|
private dispose;
|
|
136
187
|
private isOutOfBounds;
|
|
137
188
|
private sameDate;
|
|
138
189
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDatePicker, never>;
|
|
139
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDatePicker, "wr-date-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
|
|
190
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDatePicker, "wr-date-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "panelAriaLabel": { "alias": "panelAriaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
|
|
140
191
|
}
|
|
141
192
|
|
|
142
193
|
/**
|
|
@@ -154,6 +205,8 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
154
205
|
*/
|
|
155
206
|
type WrDateRange = readonly [Date | null, Date | null];
|
|
156
207
|
|
|
208
|
+
/** Which end of the range an edit applies to. */
|
|
209
|
+
type RangeEnd = 0 | 1;
|
|
157
210
|
/**
|
|
158
211
|
* Date-range picker — two text inputs sharing one range calendar.
|
|
159
212
|
*
|
|
@@ -224,7 +277,17 @@ declare class WrDateRangePicker implements FormValueControl<WrDateRange | null>
|
|
|
224
277
|
* @default false
|
|
225
278
|
*/
|
|
226
279
|
readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
227
|
-
/**
|
|
280
|
+
/**
|
|
281
|
+
* Read-only — neither the inputs nor the calendar can change the value.
|
|
282
|
+
*
|
|
283
|
+
* Deliberately stricter than `wr-date-picker`, which still opens its popup
|
|
284
|
+
* while read-only: with two fields feeding one calendar there is no reading
|
|
285
|
+
* of "untypeable" that leaves the grid free to rewrite both ends. The doc
|
|
286
|
+
* used to promise the trigger still opened; the code has always refused, and
|
|
287
|
+
* refusing is the behaviour worth keeping.
|
|
288
|
+
*
|
|
289
|
+
* @default false
|
|
290
|
+
*/
|
|
228
291
|
readonly readonly: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
229
292
|
private readonly adapter;
|
|
230
293
|
private readonly overlay;
|
|
@@ -233,6 +296,8 @@ declare class WrDateRangePicker implements FormValueControl<WrDateRange | null>
|
|
|
233
296
|
private readonly host;
|
|
234
297
|
private readonly destroyRef;
|
|
235
298
|
protected readonly startEl: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
299
|
+
protected readonly endEl: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
300
|
+
protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
|
|
236
301
|
/** The picked range. Bound by `[formField]`, or two-way via `[(value)]`. */
|
|
237
302
|
readonly value: _angular_core.ModelSignal<WrDateRange | null>;
|
|
238
303
|
/** Emitted on blur so a bound field can mark itself touched. */
|
|
@@ -242,12 +307,34 @@ declare class WrDateRangePicker implements FormValueControl<WrDateRange | null>
|
|
|
242
307
|
protected readonly endText: _angular_core.WritableSignal<string>;
|
|
243
308
|
/** Whether the popover is currently open. */
|
|
244
309
|
protected readonly overlayOpen: _angular_core.WritableSignal<boolean>;
|
|
310
|
+
/**
|
|
311
|
+
* Which element opened the popup — captured as an argument, never read off
|
|
312
|
+
* `document.activeElement`, which by then may already be the pane. With TWO
|
|
313
|
+
* text inputs this is the whole point: "restore focus to the field" is
|
|
314
|
+
* ambiguous here, and the old code resolved it by always picking the START
|
|
315
|
+
* input, so closing from the end input threw the caret across the control.
|
|
316
|
+
*/
|
|
317
|
+
private openedFrom;
|
|
318
|
+
/** Whether the panel this open cycle should take focus. */
|
|
319
|
+
private autoFocusPanel;
|
|
245
320
|
/** Resolved format — falls back to a mode-appropriate default. */
|
|
246
321
|
protected readonly resolvedFormat: _angular_core.Signal<string>;
|
|
247
322
|
protected readonly isDateTime: _angular_core.Signal<boolean>;
|
|
248
323
|
protected readonly triggerLabel: string;
|
|
249
324
|
protected readonly startLabel: string;
|
|
250
325
|
protected readonly endLabel: string;
|
|
326
|
+
private readonly panelLabelRange;
|
|
327
|
+
private readonly panelLabelRangeDateTime;
|
|
328
|
+
/**
|
|
329
|
+
* Accessible name of the popup. The trigger advertises
|
|
330
|
+
* `aria-haspopup="dialog"`, so the pane is a `role="dialog"` — and an unnamed
|
|
331
|
+
* dialog announces as a bare "dialog". Defaults to the catalog's
|
|
332
|
+
* `datePicker.panelRange*` string for the current `mode`.
|
|
333
|
+
*/
|
|
334
|
+
readonly panelAriaLabel: _angular_core.InputSignal<string | null>;
|
|
335
|
+
/** Popup id — what the trigger's `aria-controls` points at while open. */
|
|
336
|
+
protected readonly panelId: string;
|
|
337
|
+
protected readonly resolvedPanelLabel: _angular_core.Signal<string>;
|
|
251
338
|
protected readonly classes: _angular_core.Signal<string>;
|
|
252
339
|
private overlayRef;
|
|
253
340
|
/** Live panel ref while the popover is open — lets typed edits move the
|
|
@@ -261,15 +348,39 @@ declare class WrDateRangePicker implements FormValueControl<WrDateRange | null>
|
|
|
261
348
|
protected onEndInput(event: Event): void;
|
|
262
349
|
protected onBlur(event: FocusEvent): void;
|
|
263
350
|
/** Called by an input's click — opens the overlay if it isn't open already. */
|
|
264
|
-
protected openOnInput(): void;
|
|
351
|
+
protected openOnInput(end: RangeEnd): void;
|
|
265
352
|
protected toggleOverlay(): void;
|
|
353
|
+
/**
|
|
354
|
+
* The keyboard route into the popup, per the APG date-picker pattern, and the
|
|
355
|
+
* only one either field has. `Alt+ArrowDown` opens and takes focus; a bare
|
|
356
|
+
* vertical arrow walks focus in when the popup is ALREADY open, which is how
|
|
357
|
+
* someone who opened it by clicking a field reaches the grid. Every other key
|
|
358
|
+
* belongs to the field, so typing a date keeps working with the popup open.
|
|
359
|
+
*/
|
|
360
|
+
protected onFieldKey(event: KeyboardEvent, end: RangeEnd): void;
|
|
361
|
+
/** The input element for an end — the two are otherwise addressed by index. */
|
|
362
|
+
private fieldEl;
|
|
363
|
+
/**
|
|
364
|
+
* Move focus into an already-mounted panel. A plain query is right HERE and
|
|
365
|
+
* wrong at mount time: the panel has settled, so there is no deferral to get
|
|
366
|
+
* wrong — and it keeps `autoFocus` as the single piece of panel API.
|
|
367
|
+
*/
|
|
368
|
+
private focusPanel;
|
|
369
|
+
/** Hand focus back to whatever opened the popup, if it is still on the page. */
|
|
370
|
+
private restoreFocus;
|
|
266
371
|
private onRangeInput;
|
|
267
372
|
private openOverlay;
|
|
268
373
|
/**
|
|
269
|
-
* Close the popover
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
* the
|
|
374
|
+
* Close the popover, handing focus back to whichever field or button opened
|
|
375
|
+
* it — but ONLY when focus was still inside the pane. Dropped there it would
|
|
376
|
+
* land on `<body>` and the next Tab would restart from the top of the page;
|
|
377
|
+
* moved on by the user, it must be left where they put it.
|
|
378
|
+
*
|
|
379
|
+
* There is deliberately no "always restore" escape hatch. Escape reaches this
|
|
380
|
+
* overlay from anywhere in the document (the CDK dispatches it to the topmost
|
|
381
|
+
* one), so forcing a restore would drag the caret backwards out of the field
|
|
382
|
+
* the user was actually typing in — into the one that happened to open the
|
|
383
|
+
* popup, possibly several Tab stops away.
|
|
273
384
|
*/
|
|
274
385
|
private closeOverlay;
|
|
275
386
|
private dispose;
|
|
@@ -300,9 +411,18 @@ declare class WrDateRangePicker implements FormValueControl<WrDateRange | null>
|
|
|
300
411
|
*/
|
|
301
412
|
private isOutOfBounds;
|
|
302
413
|
private sameDate;
|
|
414
|
+
/**
|
|
415
|
+
* `null` and `[null, null]` are the same VALUE — an empty range — and treating
|
|
416
|
+
* them as different is what let the FIRST blur on an untouched picker write
|
|
417
|
+
* `[null, null]` over the `null` it was bound to. No date had moved, but
|
|
418
|
+
* `model()` emitted: a bound `[formField]` went dirty from nothing but tabbing
|
|
419
|
+
* through, and a consumer's `@if (period())` flipped from empty to truthy with
|
|
420
|
+
* neither end picked. The write guard in `commitRange` is only as good as this
|
|
421
|
+
* comparison.
|
|
422
|
+
*/
|
|
303
423
|
private sameRange;
|
|
304
424
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDateRangePicker, never>;
|
|
305
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDateRangePicker, "wr-date-range-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "startPlaceholder": { "alias": "startPlaceholder"; "required": false; "isSignal": true; }; "endPlaceholder": { "alias": "endPlaceholder"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
|
|
425
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDateRangePicker, "wr-date-range-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "startPlaceholder": { "alias": "startPlaceholder"; "required": false; "isSignal": true; }; "endPlaceholder": { "alias": "endPlaceholder"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "panelAriaLabel": { "alias": "panelAriaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
|
|
306
426
|
}
|
|
307
427
|
|
|
308
428
|
export { WrDatePicker, WrDateRangePicker };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ContentContainerComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @license
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** Narrows which open dialog a harness query matches. */
|
|
11
|
+
interface WrDialogHarnessFilters extends BaseHarnessFilters {
|
|
12
|
+
/**
|
|
13
|
+
* Match the dialog's `[wrDialogTitle]` text — a string is an exact match, a
|
|
14
|
+
* RegExp is tested. A dialog with no title never matches.
|
|
15
|
+
*/
|
|
16
|
+
readonly title?: string | RegExp;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @license
|
|
21
|
+
*
|
|
22
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
23
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Test harness for a dialog opened with `WrDialog.open()`.
|
|
28
|
+
*
|
|
29
|
+
* A dialog is never inside the fixture — `WrDialog` attaches it to the overlay
|
|
30
|
+
* container — so load this from `TestbedHarnessEnvironment.documentRootLoader()`
|
|
31
|
+
* rather than from `loader()`. The harness is a CONTENT CONTAINER, which is what
|
|
32
|
+
* makes the interesting assertions possible: the buttons and fields it holds are
|
|
33
|
+
* the consumer's own components, so `dialog.getHarness(WrButtonHarness…)` reads
|
|
34
|
+
* them without the spec ever touching the overlay.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture);
|
|
39
|
+
* const dialog = await rootLoader.getHarness(WrDialogHarness);
|
|
40
|
+
*
|
|
41
|
+
* expect(await dialog.getTitleText()).toBe('Delete this item?');
|
|
42
|
+
* await (await dialog.getHarness(WrButtonHarness.with({ text: 'Delete' }))).click();
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @see https://ngwr.dev/guides/testing
|
|
46
|
+
*/
|
|
47
|
+
declare class WrDialogHarness extends ContentContainerComponentHarness {
|
|
48
|
+
/** The overlay panel `WrDialog` creates. */
|
|
49
|
+
static hostSelector: string;
|
|
50
|
+
/** Build a predicate that narrows the query — useful when two dialogs are stacked. */
|
|
51
|
+
static with(options?: WrDialogHarnessFilters): HarnessPredicate<WrDialogHarness>;
|
|
52
|
+
/** The `[wrDialogTitle]` text, or `null` when the dialog has no title. */
|
|
53
|
+
getTitleText(): Promise<string | null>;
|
|
54
|
+
/** The `[wrDialogContent]` text, or `null` when the dialog projects no content region. */
|
|
55
|
+
getContentText(): Promise<string | null>;
|
|
56
|
+
/**
|
|
57
|
+
* The role and modality the dialog announces.
|
|
58
|
+
*
|
|
59
|
+
* Worth asserting rather than assuming: `WrDialog` sets these on the OVERLAY
|
|
60
|
+
* element, not on the component it renders, so a consumer looking for them on
|
|
61
|
+
* their own host would not find them.
|
|
62
|
+
*/
|
|
63
|
+
getRole(): Promise<string | null>;
|
|
64
|
+
/** Whether the dialog is marked `aria-modal`. */
|
|
65
|
+
isModal(): Promise<boolean>;
|
|
66
|
+
/** Whether the built-in dismiss button is present (`closable`, the default). */
|
|
67
|
+
isClosable(): Promise<boolean>;
|
|
68
|
+
/** The dismiss button's accessible name — the string a screen reader reads out. */
|
|
69
|
+
getCloseLabel(): Promise<string | null>;
|
|
70
|
+
/** Click the built-in dismiss button. Throws when the dialog was opened `closable: false`. */
|
|
71
|
+
close(): Promise<void>;
|
|
72
|
+
/** Press Escape. A dialog opened `closeOnEscape: false` ignores it — assert, do not assume. */
|
|
73
|
+
sendEscape(): Promise<void>;
|
|
74
|
+
/** Whether focus is currently somewhere inside the dialog, where the trap should keep it. */
|
|
75
|
+
isFocusTrapped(): Promise<boolean>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { WrDialogHarness };
|
|
79
|
+
export type { WrDialogHarnessFilters };
|
package/types/ngwr-dialog.d.ts
CHANGED
|
@@ -140,6 +140,19 @@ declare class WrDialog {
|
|
|
140
140
|
private readonly responsiveConfig;
|
|
141
141
|
private readonly i18n;
|
|
142
142
|
open<C, R = unknown, D = unknown>(component: ComponentType<C>, options?: WrDialogOptions<D>): WrDialogRef<C, R>;
|
|
143
|
+
/**
|
|
144
|
+
* The dismiss button's accessible name.
|
|
145
|
+
*
|
|
146
|
+
* Two failure modes, and resolving PER OPEN is what covers both. `t()` hands
|
|
147
|
+
* back the KEY on a miss, and `WrI18n` is root-provided with an empty catalog
|
|
148
|
+
* by default, so an app that never configured i18n named its dismiss button
|
|
149
|
+
* "dialog.close" — a name axe cannot fault, because a name is present, and a
|
|
150
|
+
* screen reader reads out verbatim. Resolving once at injection time fixed
|
|
151
|
+
* that but froze the answer: this is a root service, constructed before an
|
|
152
|
+
* async catalog has loaded, so a localized app got the English fallback on
|
|
153
|
+
* every dialog it ever opened.
|
|
154
|
+
*/
|
|
155
|
+
private closeLabel;
|
|
143
156
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrDialog, never>;
|
|
144
157
|
static ɵprov: i0.ɵɵInjectableDeclaration<WrDialog>;
|
|
145
158
|
}
|
|
@@ -85,7 +85,16 @@ declare class WrCopyToClipboard {
|
|
|
85
85
|
private readonly doc;
|
|
86
86
|
/** @internal */
|
|
87
87
|
protected onClick(): Promise<void>;
|
|
88
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* Legacy clipboard write — hidden textarea + `execCommand('copy')`.
|
|
90
|
+
*
|
|
91
|
+
* Two things this has to get right beyond writing the text. `execCommand`
|
|
92
|
+
* REPORTS refusal rather than throwing it: a document without focus hands back
|
|
93
|
+
* `false` and copies nothing, so ignoring the return value shows a "Copied!"
|
|
94
|
+
* toast over an unchanged clipboard. And selecting the textarea moves focus
|
|
95
|
+
* into it, so removing the node afterwards drops focus on `<body>` — the user's
|
|
96
|
+
* next Tab restarts from the top of the page, on every copy.
|
|
97
|
+
*/
|
|
89
98
|
private fallback;
|
|
90
99
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrCopyToClipboard, never>;
|
|
91
100
|
static ɵdir: i0.ɵɵDirectiveDeclaration<WrCopyToClipboard, "[wrCopyToClipboard]", never, { "wrCopyToClipboard": { "alias": "wrCopyToClipboard"; "required": true; "isSignal": true; }; }, { "copied": "copied"; "copyFailed": "copyFailed"; }, never, never, true, never>;
|
|
@@ -22,6 +22,13 @@ interface WrDonutSegment {
|
|
|
22
22
|
*/
|
|
23
23
|
declare class WrDonutChart {
|
|
24
24
|
readonly segments: _angular_core.InputSignal<readonly WrDonutSegment[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Accessible name of the chart. The ring is `aria-hidden` and the legend is optional,
|
|
27
|
+
* so with `showLegend: false` this is the only thing a screen reader gets. Falls back
|
|
28
|
+
* to `donutChart.label`.
|
|
29
|
+
*/
|
|
30
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
31
|
+
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
25
32
|
/** Diameter in CSS pixels. @default 200 */
|
|
26
33
|
readonly size: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
27
34
|
/** Inner-ring thickness as a percent of radius (0–100). `0` = solid pie. @default 30 */
|
|
@@ -46,7 +53,7 @@ declare class WrDonutChart {
|
|
|
46
53
|
/** SVG path for one donut slice using outer and inner arcs. */
|
|
47
54
|
private arcPath;
|
|
48
55
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDonutChart, never>;
|
|
49
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDonutChart, "wr-donut-chart", never, { "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
56
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDonutChart, "wr-donut-chart", never, { "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
50
57
|
}
|
|
51
58
|
|
|
52
59
|
export { WrDonutChart };
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ContentContainerComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
|
|
2
|
+
import { WrDrawerPosition } from 'ngwr/drawer';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @license
|
|
6
|
+
*
|
|
7
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
8
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** Narrows which open drawer a harness query matches. */
|
|
12
|
+
interface WrDrawerHarnessFilters extends BaseHarnessFilters {
|
|
13
|
+
/**
|
|
14
|
+
* Match the `[wrDrawerTitle]` text — a string is an exact match, a RegExp is
|
|
15
|
+
* tested. A drawer with no title never matches.
|
|
16
|
+
*/
|
|
17
|
+
readonly title?: string | RegExp;
|
|
18
|
+
/**
|
|
19
|
+
* Match the `[wrDrawerContent]` text. A drawer whose content is not wrapped in
|
|
20
|
+
* that directive never matches.
|
|
21
|
+
*/
|
|
22
|
+
readonly content?: string | RegExp;
|
|
23
|
+
/** Match the edge the drawer slid in from: `left`, `right`, `top` or `bottom`. */
|
|
24
|
+
readonly position?: WrDrawerPosition;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @license
|
|
29
|
+
*
|
|
30
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
31
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Test harness for an open drawer — both flavours.
|
|
36
|
+
*
|
|
37
|
+
* A drawer ships as an element (`<wr-drawer [(open)]="…">`) AND as a service call
|
|
38
|
+
* (`WrDrawerManager.open(Cmp)`), but neither puts the panel where a consumer's
|
|
39
|
+
* spec can see it: both render into the NGWR overlay container, a sibling of the
|
|
40
|
+
* whole app. So this is loaded from `TestbedHarnessEnvironment.documentRootLoader()`
|
|
41
|
+
* in BOTH cases — a fixture-scoped loader finds nothing, including for the element
|
|
42
|
+
* form, whose `<wr-drawer>` host is `display: none` and holds no content.
|
|
43
|
+
*
|
|
44
|
+
* The harness is anchored on the overlay pane, which is the one element the two
|
|
45
|
+
* flavours share: for `<wr-drawer>` it wraps the panel div, for the manager it IS
|
|
46
|
+
* the panel (the caller's component is attached straight into it). It is also the
|
|
47
|
+
* only per-instance anchor there is — `<wr-drawer>` publishes no `aria-controls` /
|
|
48
|
+
* `aria-owns` link to the overlay it opened — which is why every query here starts
|
|
49
|
+
* from the pane rather than from a class in the shared container.
|
|
50
|
+
*
|
|
51
|
+
* The harness is a CONTENT CONTAINER: the fields and buttons in the panel are the
|
|
52
|
+
* consumer's own components, so `drawer.getHarness(WrButtonHarness…)` reads them
|
|
53
|
+
* without the spec ever touching the overlay.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture);
|
|
58
|
+
* const drawer = await rootLoader.getHarness(WrDrawerHarness.with({ title: 'Filters' }));
|
|
59
|
+
*
|
|
60
|
+
* expect(await drawer.getPosition()).toBe('bottom');
|
|
61
|
+
* expect(await drawer.isSheet()).toBe(true);
|
|
62
|
+
* await drawer.close();
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* @see https://ngwr.dev/guides/testing
|
|
66
|
+
*/
|
|
67
|
+
declare class WrDrawerHarness extends ContentContainerComponentHarness {
|
|
68
|
+
/** The overlay pane both flavours create. A closed drawer has none. */
|
|
69
|
+
static hostSelector: string;
|
|
70
|
+
/** Build a predicate that narrows the query — drawers can be stacked. */
|
|
71
|
+
static with(options?: WrDrawerHarnessFilters): HarnessPredicate<WrDrawerHarness>;
|
|
72
|
+
/**
|
|
73
|
+
* Whether this drawer is still open.
|
|
74
|
+
*
|
|
75
|
+
* A harness can only be obtained while a drawer is open — closing disposes the
|
|
76
|
+
* overlay, panel and all — so this is the answer for a harness you are already
|
|
77
|
+
* HOLDING: it flips to `false` after a dismissal, where a fresh
|
|
78
|
+
* `getHarnessOrNull()` comes back `null`.
|
|
79
|
+
*
|
|
80
|
+
* Attachment is the test, not a class: disposal takes the pane out of the
|
|
81
|
+
* document along with its wrapper, so the `body` ancestor in the selector is what
|
|
82
|
+
* distinguishes a live panel from the detached element a stale harness holds.
|
|
83
|
+
*/
|
|
84
|
+
isOpen(): Promise<boolean>;
|
|
85
|
+
/** The `[wrDrawerTitle]` text, or `null` when the drawer has no title. */
|
|
86
|
+
getTitleText(): Promise<string | null>;
|
|
87
|
+
/** The `[wrDrawerContent]` text, or `null` when the body is not wrapped in it. */
|
|
88
|
+
getContentText(): Promise<string | null>;
|
|
89
|
+
/**
|
|
90
|
+
* The edge the drawer is attached to.
|
|
91
|
+
*
|
|
92
|
+
* Read from the overlay's own side modifier, which both flavours set and consumer
|
|
93
|
+
* CSS targets. It is a real mode axis rather than a style flag: left/right size
|
|
94
|
+
* themselves from `width` and stretch full-height, top/bottom span the viewport
|
|
95
|
+
* and size themselves from `height` / `maxHeight`.
|
|
96
|
+
*/
|
|
97
|
+
getPosition(): Promise<WrDrawerPosition>;
|
|
98
|
+
/**
|
|
99
|
+
* Whether the drawer presents as a SHEET rather than a side panel — the top and
|
|
100
|
+
* bottom edges, where it spans the full viewport width and takes its size from
|
|
101
|
+
* `height` / `maxHeight`.
|
|
102
|
+
*
|
|
103
|
+
* This answers the axis only. The bottom-sheet look is that plus `rounded` and
|
|
104
|
+
* `showHandle`, which {@link isRounded} and {@link hasHandle} answer separately.
|
|
105
|
+
*/
|
|
106
|
+
isSheet(): Promise<boolean>;
|
|
107
|
+
/** Whether the leading corners are rounded (`rounded`). */
|
|
108
|
+
isRounded(): Promise<boolean>;
|
|
109
|
+
/** Whether the trailing edge is padded for the device's safe area (`safeArea`). */
|
|
110
|
+
hasSafeArea(): Promise<boolean>;
|
|
111
|
+
/**
|
|
112
|
+
* Whether the drawer draws a grab handle (`showHandle`), which is also what
|
|
113
|
+
* enables swipe-to-dismiss.
|
|
114
|
+
*
|
|
115
|
+
* Always `false` for a `WrDrawerManager.open()` drawer, and not a defect: the
|
|
116
|
+
* handle lives in the component's own wrapper markup, which the service path
|
|
117
|
+
* replaces with the caller's component.
|
|
118
|
+
*/
|
|
119
|
+
hasHandle(): Promise<boolean>;
|
|
120
|
+
/**
|
|
121
|
+
* The role the drawer announces.
|
|
122
|
+
*
|
|
123
|
+
* Worth asserting rather than assuming: both flavours write it onto the OVERLAY
|
|
124
|
+
* element, not onto the markup the consumer wrote, so a spec looking for it on
|
|
125
|
+
* its own host would not find it.
|
|
126
|
+
*/
|
|
127
|
+
getRole(): Promise<string | null>;
|
|
128
|
+
/** Whether the drawer is marked `aria-modal` — the promise the backdrop and focus trap make. */
|
|
129
|
+
isModal(): Promise<boolean>;
|
|
130
|
+
/**
|
|
131
|
+
* Whether the panel takes its accessible name from the drawer's own title.
|
|
132
|
+
*
|
|
133
|
+
* Both flavours point `aria-labelledby` at `[wrDrawerTitle]`'s generated id, but
|
|
134
|
+
* only once the content is in the DOM — deferred either way — so a spec has to
|
|
135
|
+
* let the fixture settle (`await fixture.whenStable()`) before asking.
|
|
136
|
+
*/
|
|
137
|
+
isLabelledByTitle(): Promise<boolean>;
|
|
138
|
+
/** Whether the built-in dismiss (✕) button is present (`closable`, the default). */
|
|
139
|
+
isClosable(): Promise<boolean>;
|
|
140
|
+
/** The dismiss button's accessible name — the string a screen reader reads out. */
|
|
141
|
+
getCloseLabel(): Promise<string | null>;
|
|
142
|
+
/**
|
|
143
|
+
* Click the built-in dismiss button.
|
|
144
|
+
*
|
|
145
|
+
* Throws on a drawer opened `closable: false`. That is a deliberate shape — the
|
|
146
|
+
* projected content owns the close affordance, typically a `[wrDrawerClose]`
|
|
147
|
+
* button — and a quiet no-op here would read as "closed" three assertions later.
|
|
148
|
+
*/
|
|
149
|
+
close(): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Press Escape. A drawer opened `closeOnEscape: false` ignores it — assert, do
|
|
152
|
+
* not assume.
|
|
153
|
+
*
|
|
154
|
+
* The key reaches a drawer through the CDK's keyboard dispatcher, which hands it
|
|
155
|
+
* to the TOP-MOST listening overlay, so with drawers stacked this dismisses the
|
|
156
|
+
* top one whichever harness it is called on.
|
|
157
|
+
*/
|
|
158
|
+
sendEscape(): Promise<void>;
|
|
159
|
+
/** Whether the drawer dims the page behind it (`hasBackdrop`, the default). */
|
|
160
|
+
hasBackdrop(): Promise<boolean>;
|
|
161
|
+
/**
|
|
162
|
+
* Click the backdrop — the third way a drawer is dismissed, next to the dismiss
|
|
163
|
+
* button and Escape, and the one a `closeOnBackdropClick: false` drawer is meant
|
|
164
|
+
* to survive.
|
|
165
|
+
*/
|
|
166
|
+
clickBackdrop(): Promise<void>;
|
|
167
|
+
/** Whether focus is currently inside the drawer, where the trap should hold it. */
|
|
168
|
+
isFocusTrapped(): Promise<boolean>;
|
|
169
|
+
/**
|
|
170
|
+
* The element carrying the `.wr-drawer__panel` classes.
|
|
171
|
+
*
|
|
172
|
+
* `WrDrawerManager` flattens the panel onto the overlay pane itself, while
|
|
173
|
+
* `<wr-drawer>` renders it as a div inside the pane — same classes, one level
|
|
174
|
+
* apart, so the modifiers have to be read from whichever element has them.
|
|
175
|
+
*/
|
|
176
|
+
private panel;
|
|
177
|
+
/**
|
|
178
|
+
* THIS drawer's backdrop, or `null` when it has none.
|
|
179
|
+
*
|
|
180
|
+
* Scoped by the overlay pane's own id, not by a bare `.wr-drawer-backdrop` query:
|
|
181
|
+
* the container is shared, so a class query answers with whichever drawer opened
|
|
182
|
+
* first — and two drawers open at once can disagree about `hasBackdrop`.
|
|
183
|
+
*
|
|
184
|
+
* Two queries, because the CDK puts the backdrop in one of two places. With the
|
|
185
|
+
* popover API — its default wherever `showPopover` exists, so in every real
|
|
186
|
+
* browser — the backdrop is PREPENDED INSIDE the host, next to the pane, which is
|
|
187
|
+
* what the first query's `+` pins down. Without it (jsdom, or `usePopover: false`)
|
|
188
|
+
* it goes immediately BEFORE the host wrapper that holds the pane, which is what
|
|
189
|
+
* the second query matches — so under vitest the second one does the work and the
|
|
190
|
+
* first is the production path.
|
|
191
|
+
*/
|
|
192
|
+
private backdrop;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export { WrDrawerHarness };
|
|
196
|
+
export type { WrDrawerHarnessFilters };
|
package/types/ngwr-drawer.d.ts
CHANGED
|
@@ -254,6 +254,21 @@ declare class WrDrawerManager {
|
|
|
254
254
|
private readonly isBrowser;
|
|
255
255
|
private readonly i18n;
|
|
256
256
|
open<C, R = unknown, D = unknown>(component: ComponentType<C>, options?: WrDrawerOptions<D>): WrDrawerRef<C, R>;
|
|
257
|
+
/**
|
|
258
|
+
* The dismiss button's accessible name.
|
|
259
|
+
*
|
|
260
|
+
* Resolved per open, not once at injection: this is a root service, so a
|
|
261
|
+
* `readI18nText` field — which is what `WrDialog` uses — would be evaluated
|
|
262
|
+
* before an async catalog had loaded and then freeze that answer for the life
|
|
263
|
+
* of the app.
|
|
264
|
+
*
|
|
265
|
+
* The miss check is the point. `t()` hands back the KEY when the catalog has
|
|
266
|
+
* no entry, and `WrI18n` is root-provided with an empty catalog by default —
|
|
267
|
+
* so an app that never configured i18n got a button announced as
|
|
268
|
+
* "drawer.close, button". A name WAS present, which is exactly why the axe
|
|
269
|
+
* gate could not see it.
|
|
270
|
+
*/
|
|
271
|
+
private closeLabel;
|
|
257
272
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDrawerManager, never>;
|
|
258
273
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<WrDrawerManager>;
|
|
259
274
|
}
|