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
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ComponentHarness, HarnessPredicate, ContentContainerComponentHarness, HarnessLoader } 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 `[wrDropdown]` trigger a harness query matches. */
|
|
11
|
+
interface WrDropdownHarnessFilters extends BaseHarnessFilters {
|
|
12
|
+
/**
|
|
13
|
+
* Match the trigger's visible text — the label of whatever element the
|
|
14
|
+
* consumer put `[wrDropdown]` on. A string is an exact match, a RegExp is
|
|
15
|
+
* tested.
|
|
16
|
+
*/
|
|
17
|
+
readonly text?: string | RegExp;
|
|
18
|
+
/** Match only open (`true`) or only closed (`false`) dropdowns. */
|
|
19
|
+
readonly open?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** Narrows which item inside a dropdown's menu a harness query matches. */
|
|
22
|
+
interface WrDropdownItemHarnessFilters extends BaseHarnessFilters {
|
|
23
|
+
/** Match the item's label — a string is an exact match, a RegExp is tested. */
|
|
24
|
+
readonly text?: string | RegExp;
|
|
25
|
+
/** Match only enabled (`false`) or only disabled (`true`) items. */
|
|
26
|
+
readonly disabled?: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @license
|
|
31
|
+
*
|
|
32
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
33
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Test harness for one `<wr-dropdown-item>` inside a dropdown menu.
|
|
38
|
+
*
|
|
39
|
+
* The selector is the CLASS rather than the element: `.wr-dropdown-item` is what
|
|
40
|
+
* the directive's own keyboard navigation queries, so it is the contract both
|
|
41
|
+
* sides already rely on. Only the class, though — the directive narrows its query
|
|
42
|
+
* to `:not(.wr-dropdown-item--disabled)` because it is looking for focus stops,
|
|
43
|
+
* while a spec still has to be able to see a disabled item and assert that it is
|
|
44
|
+
* one.
|
|
45
|
+
*
|
|
46
|
+
* @see https://ngwr.dev/guides/testing
|
|
47
|
+
*/
|
|
48
|
+
declare class WrDropdownItemHarness extends ComponentHarness {
|
|
49
|
+
/** The class the item paints on its host, and the one arrow-key navigation looks for. */
|
|
50
|
+
static hostSelector: string;
|
|
51
|
+
/** Build a predicate that narrows the query. */
|
|
52
|
+
static with(options?: WrDropdownItemHarnessFilters): HarnessPredicate<WrDropdownItemHarness>;
|
|
53
|
+
/** The item's label, trimmed. A leading icon is not part of it. */
|
|
54
|
+
getText(): Promise<string>;
|
|
55
|
+
/** The role the item announces — `menuitem`. */
|
|
56
|
+
getRole(): Promise<string | null>;
|
|
57
|
+
/** Whether the item refuses activation. */
|
|
58
|
+
isDisabled(): Promise<boolean>;
|
|
59
|
+
/** Whether the item shows a leading icon. */
|
|
60
|
+
hasIcon(): Promise<boolean>;
|
|
61
|
+
/** The leading icon's registered name, or `null` when the item has no icon. */
|
|
62
|
+
getIconName(): Promise<string | null>;
|
|
63
|
+
/** Whether the item holds the menu's roving focus. */
|
|
64
|
+
isFocused(): Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* Click the item. A disabled item throws instead.
|
|
67
|
+
*
|
|
68
|
+
* Refusing is the only honest answer: the item's own `disabled` guards the
|
|
69
|
+
* KEYBOARD path only, and a pointer is stopped by `pointer-events: none` in the
|
|
70
|
+
* stylesheet. jsdom loads no stylesheets, so a click dispatched here would land
|
|
71
|
+
* on the host — exactly where the consumer bound `(click)` — and the spec would
|
|
72
|
+
* record an activation that cannot happen in a browser. Assert `isDisabled()`
|
|
73
|
+
* instead.
|
|
74
|
+
*/
|
|
75
|
+
click(): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @license
|
|
80
|
+
*
|
|
81
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
82
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Test harness for `[wrDropdown]` — the trigger, and the menu it opens.
|
|
87
|
+
*
|
|
88
|
+
* The harness matches the TRIGGER, because that is the only part of the dropdown
|
|
89
|
+
* in the fixture: `<wr-dropdown-menu>` renders nothing of its own (it hands over
|
|
90
|
+
* an `<ng-template>`), and the menu is portalled into the overlay container, a
|
|
91
|
+
* sibling of the whole app. So every item is read through the document root,
|
|
92
|
+
* scoped by the `aria-controls` id the trigger publishes while it is open — which
|
|
93
|
+
* is what keeps two dropdowns on one page from answering with each other's items.
|
|
94
|
+
*
|
|
95
|
+
* That scoped loader is also this harness's CONTENT loader, so
|
|
96
|
+
* `dropdown.getHarness(…)` resolves inside THIS dropdown's menu: the consumer's
|
|
97
|
+
* own components in the menu are reachable without the spec ever touching the
|
|
98
|
+
* overlay, and so is a nested `[wrDropdown]`, which is how a submenu is built
|
|
99
|
+
* here (the component ships no submenu API of its own).
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```ts
|
|
103
|
+
* const dropdown = await loader.getHarness(WrDropdownHarness.with({ text: 'Actions' }));
|
|
104
|
+
*
|
|
105
|
+
* await dropdown.open();
|
|
106
|
+
* expect(await dropdown.getItemTexts()).toEqual(['Copy', 'Delete']);
|
|
107
|
+
*
|
|
108
|
+
* await dropdown.clickItem({ text: 'Copy' });
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* @see https://ngwr.dev/guides/testing
|
|
112
|
+
*/
|
|
113
|
+
declare class WrDropdownHarness extends ContentContainerComponentHarness {
|
|
114
|
+
/** The directive's host — whatever element the consumer put `[wrDropdown]` on. */
|
|
115
|
+
static hostSelector: string;
|
|
116
|
+
/** Build a predicate that narrows the query. */
|
|
117
|
+
static with(options?: WrDropdownHarnessFilters): HarnessPredicate<WrDropdownHarness>;
|
|
118
|
+
/** The trigger's visible text. */
|
|
119
|
+
getTriggerText(): Promise<string>;
|
|
120
|
+
/** Whether the menu is showing. */
|
|
121
|
+
isOpen(): Promise<boolean>;
|
|
122
|
+
/** The role the menu announces — `menu`. Throws while the menu is closed. */
|
|
123
|
+
getMenuRole(): Promise<string | null>;
|
|
124
|
+
/**
|
|
125
|
+
* Whether the menu takes its accessible name from this trigger.
|
|
126
|
+
*
|
|
127
|
+
* The menu carries no label of its own, so that reference IS its name — and the
|
|
128
|
+
* id it points at is generated unless the consumer named the trigger
|
|
129
|
+
* themselves, which is why a spec cannot simply hard-code one.
|
|
130
|
+
*/
|
|
131
|
+
isMenuLabelledByTrigger(): Promise<boolean>;
|
|
132
|
+
/**
|
|
133
|
+
* Open the menu, whichever gesture this dropdown listens for.
|
|
134
|
+
*
|
|
135
|
+
* `trigger` is not reflected in the DOM, so the harness cannot ask which mode it
|
|
136
|
+
* is in: it moves the pointer on first and falls back to a click. Hover leads
|
|
137
|
+
* because a click is an outside pointer event for every OTHER open overlay — so
|
|
138
|
+
* leading with it would shut someone else's menu on the way to opening this one
|
|
139
|
+
* — and a `trigger="click"` dropdown ignores the hover outright.
|
|
140
|
+
*/
|
|
141
|
+
open(): Promise<void>;
|
|
142
|
+
/**
|
|
143
|
+
* Open the menu from the keyboard — ArrowDown on the trigger, the APG
|
|
144
|
+
* menu-button path (ArrowUp / Enter / Space do the same).
|
|
145
|
+
*
|
|
146
|
+
* Worth its own method rather than an argument to `open()`: it is the only way
|
|
147
|
+
* to get TWO dropdowns open at once, because clicking a second trigger is an
|
|
148
|
+
* outside pointer event for the first and closes it.
|
|
149
|
+
*/
|
|
150
|
+
openByKeyboard(): Promise<void>;
|
|
151
|
+
/** Close the menu. A closed dropdown is left alone. */
|
|
152
|
+
close(): Promise<void>;
|
|
153
|
+
/** Click the trigger. A `trigger="hover"` dropdown deliberately ignores this. */
|
|
154
|
+
clickTrigger(): Promise<void>;
|
|
155
|
+
/** Move the pointer onto the trigger. Opens a `trigger="hover"` dropdown. */
|
|
156
|
+
hoverTrigger(): Promise<void>;
|
|
157
|
+
/** Move the pointer off the trigger. Closes a `trigger="hover"` dropdown. */
|
|
158
|
+
mouseAwayFromTrigger(): Promise<void>;
|
|
159
|
+
/**
|
|
160
|
+
* The items in this dropdown's menu, in DOM order.
|
|
161
|
+
*
|
|
162
|
+
* Throws while the menu is closed: the items do not exist anywhere until the
|
|
163
|
+
* portal is attached, and an empty array reads like a menu that rendered
|
|
164
|
+
* nothing — a failure three lines later instead of here.
|
|
165
|
+
*/
|
|
166
|
+
getItems(filters?: WrDropdownItemHarnessFilters): Promise<WrDropdownItemHarness[]>;
|
|
167
|
+
/** The labels of the items in this dropdown's menu, in DOM order. */
|
|
168
|
+
getItemTexts(): Promise<string[]>;
|
|
169
|
+
/**
|
|
170
|
+
* Open the menu if it is closed, then click the first item matching the filters.
|
|
171
|
+
*
|
|
172
|
+
* Picking does NOT close the menu — there is no close-on-select in the item or
|
|
173
|
+
* the menu, so a consumer who wants one calls `close()` themselves.
|
|
174
|
+
*/
|
|
175
|
+
clickItem(filters: WrDropdownItemHarnessFilters): Promise<void>;
|
|
176
|
+
/**
|
|
177
|
+
* The label of the item that currently holds focus, or `null` when focus is
|
|
178
|
+
* elsewhere.
|
|
179
|
+
*
|
|
180
|
+
* The menu roves focus rather than moving a visual cursor — it lands on the
|
|
181
|
+
* first ENABLED item as the menu renders, and the arrow keys walk it from there
|
|
182
|
+
* over the enabled items only (a disabled one is not a stop) — so this is the
|
|
183
|
+
* only way to ask where the keyboard is.
|
|
184
|
+
*/
|
|
185
|
+
getFocusedItemText(): Promise<string | null>;
|
|
186
|
+
/**
|
|
187
|
+
* A loader scoped to THIS dropdown's menu — the content loader every
|
|
188
|
+
* `HarnessLoader` method on this class runs through, `getItems()` included.
|
|
189
|
+
*
|
|
190
|
+
* Scoped by the published id rather than by `.wr-dropdown-menu`: the overlay
|
|
191
|
+
* container is shared, so a bare class query would answer with whichever
|
|
192
|
+
* dropdown happened to open first.
|
|
193
|
+
*/
|
|
194
|
+
protected getRootHarnessLoader(): Promise<HarnessLoader>;
|
|
195
|
+
/** This dropdown's menu element in the overlay. */
|
|
196
|
+
private menu;
|
|
197
|
+
/** The id the trigger publishes as `aria-controls`, which its menu carries. */
|
|
198
|
+
private menuId;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export { WrDropdownHarness, WrDropdownItemHarness };
|
|
202
|
+
export type { WrDropdownHarnessFilters, WrDropdownItemHarnessFilters };
|
package/types/ngwr-dropdown.d.ts
CHANGED
|
@@ -80,7 +80,13 @@ declare class WrDropdown {
|
|
|
80
80
|
private readonly destroyRef;
|
|
81
81
|
/** @internal Public so host bindings can read it. */
|
|
82
82
|
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
83
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Id the menu names itself after. The trigger is the CONSUMER's own element, so
|
|
85
|
+
* an `id` they already put there wins: overwriting it broke `<label for>`,
|
|
86
|
+
* `document.getElementById` and any `aria-labelledby` aimed at that button from
|
|
87
|
+
* elsewhere in their app. The generated one is only a fallback so the menu has
|
|
88
|
+
* something to reference.
|
|
89
|
+
*/
|
|
84
90
|
protected readonly triggerId: string;
|
|
85
91
|
private overlayRef;
|
|
86
92
|
constructor();
|
package/types/ngwr-empty.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ import * as _angular_core from '@angular/core';
|
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```html
|
|
18
|
-
* <wr-empty
|
|
18
|
+
* <wr-empty iconName="search" title="No results">
|
|
19
19
|
* Try a different query or clear filters.
|
|
20
20
|
* <ng-container wrEmptyActions>
|
|
21
21
|
* <wr-btn (click)="reset()">Reset filters</wr-btn>
|
|
@@ -26,13 +26,28 @@ import * as _angular_core from '@angular/core';
|
|
|
26
26
|
* @see https://ngwr.dev/reference/components/empty
|
|
27
27
|
*/
|
|
28
28
|
declare class WrEmpty {
|
|
29
|
-
/**
|
|
30
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Render the built-in folder glyph. Pass `false` to show no icon at all.
|
|
31
|
+
* Ignored when `iconName` is set — the same contract as `<wr-alert>`.
|
|
32
|
+
*
|
|
33
|
+
* This used to be typed as an icon NAME, which it never was: whatever name
|
|
34
|
+
* you passed, the template drew the folder. Any truthy value still shows it,
|
|
35
|
+
* so nothing that compiled before behaves differently.
|
|
36
|
+
*
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
39
|
+
readonly icon: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
40
|
+
/**
|
|
41
|
+
* Show any registered ngwr icon instead of the built-in glyph.
|
|
42
|
+
*
|
|
43
|
+
* @default null
|
|
44
|
+
*/
|
|
45
|
+
readonly iconName: _angular_core.InputSignal<string | null>;
|
|
31
46
|
/** Headline. Falls back to `empty.noData` from WrI18n, then `'No data'`. */
|
|
32
47
|
readonly title: _angular_core.InputSignal<string | null>;
|
|
33
48
|
protected readonly resolvedTitle: _angular_core.Signal<string>;
|
|
34
49
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrEmpty, never>;
|
|
35
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrEmpty, "wr-empty", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[wrEmptyActions]"], true, never>;
|
|
50
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrEmpty, "wr-empty", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[wrEmptyActions]"], true, never>;
|
|
36
51
|
}
|
|
37
52
|
|
|
38
53
|
export { WrEmpty };
|
|
@@ -218,6 +218,7 @@ declare class WrEventCalendar {
|
|
|
218
218
|
readonly eventChange: _angular_core.OutputEmitterRef<WrCalendarEventChange>;
|
|
219
219
|
private readonly adapter;
|
|
220
220
|
private readonly document;
|
|
221
|
+
private readonly dir;
|
|
221
222
|
private readonly chipTpl;
|
|
222
223
|
protected readonly todayLabel: string;
|
|
223
224
|
protected readonly previousLabel: string;
|
|
@@ -254,7 +255,13 @@ declare class WrEventCalendar {
|
|
|
254
255
|
/** Only what overlaps the window — everything downstream works off this. */
|
|
255
256
|
private readonly visible;
|
|
256
257
|
protected readonly title: _angular_core.Signal<string>;
|
|
257
|
-
|
|
258
|
+
/**
|
|
259
|
+
* The adapter contract is "names ordered from `getFirstDayOfWeek()` onwards",
|
|
260
|
+
* so the list is ALREADY rotated. Rotating it again here put every column one
|
|
261
|
+
* day out for every locale whose week does not start on Sunday — invisible in
|
|
262
|
+
* en-US, wrong everywhere else. `wr-calendar` consumes the same call directly.
|
|
263
|
+
*/
|
|
264
|
+
protected readonly weekdayNames: _angular_core.Signal<readonly string[]>;
|
|
258
265
|
protected readonly switcher: _angular_core.Signal<{
|
|
259
266
|
view: WrCalendarView;
|
|
260
267
|
label: string;
|
|
@@ -282,6 +289,15 @@ declare class WrEventCalendar {
|
|
|
282
289
|
protected onCellClick(date: Date, minutes: number): void;
|
|
283
290
|
protected onChipKeyDown(event: KeyboardEvent, chipEvent: WrCalendarEvent): void;
|
|
284
291
|
protected onGridKeyDown(event: KeyboardEvent): void;
|
|
292
|
+
/**
|
|
293
|
+
* Keep the roving cursor on the cell that actually has focus.
|
|
294
|
+
*
|
|
295
|
+
* The cursor was only ever written by an arrow key, while focus moves for three
|
|
296
|
+
* other reasons — a click, a Tab onto a chip, Escape out of one — so the next
|
|
297
|
+
* arrow read a coordinate nobody was standing on and threw focus back to it,
|
|
298
|
+
* usually the top-left of the grid.
|
|
299
|
+
*/
|
|
300
|
+
protected onCellFocus(day: number, minutes: number): void;
|
|
285
301
|
protected isCursor(day: number, minutes: number): boolean;
|
|
286
302
|
/**
|
|
287
303
|
* Greedy lane packing for day-spanning chips. Sorted by start then by length,
|
|
@@ -323,6 +339,15 @@ declare class WrEventCalendar {
|
|
|
323
339
|
private spansWholeDay;
|
|
324
340
|
private clock;
|
|
325
341
|
private iso;
|
|
342
|
+
/**
|
|
343
|
+
* The key as the grid SEES it.
|
|
344
|
+
*
|
|
345
|
+
* A day step follows visual order, so under `dir="rtl"` ArrowRight goes back a
|
|
346
|
+
* day. Up/Down move by week or by row and never flip; Home/End are semantic.
|
|
347
|
+
* Both key handlers route through here — the grid nav and the `Alt`+arrow drag,
|
|
348
|
+
* which moves an event and would otherwise reschedule it the wrong way.
|
|
349
|
+
*/
|
|
350
|
+
private inlineKey;
|
|
326
351
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrEventCalendar, never>;
|
|
327
352
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrEventCalendar, "wr-event-calendar", never, { "events": { "alias": "events"; "required": false; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "slotMinutes": { "alias": "slotMinutes"; "required": false; "isSignal": true; }; "dayStartHour": { "alias": "dayStartHour"; "required": false; "isSignal": true; }; "dayEndHour": { "alias": "dayEndHour"; "required": false; "isSignal": true; }; "maxLanes": { "alias": "maxLanes"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "view": "viewChange"; "date": "dateChange"; "eventClick": "eventClick"; "slotClick": "slotClick"; "eventChange": "eventChange"; }, ["chipTpl"], never, true, never>;
|
|
328
353
|
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ComponentHarness, 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 `<wr-file-upload>` a harness query matches. */
|
|
11
|
+
interface WrFileUploadHarnessFilters extends BaseHarnessFilters {
|
|
12
|
+
/**
|
|
13
|
+
* Match the drop zone's accessible name — a string is an exact match, a RegExp
|
|
14
|
+
* is tested. This is `dropZoneLabel`, not the visible CTA: the zone carries an
|
|
15
|
+
* `aria-label`, so the copy inside it is not what identifies the control.
|
|
16
|
+
*/
|
|
17
|
+
readonly label?: string | RegExp;
|
|
18
|
+
/** Match only single-file (`false`) or only multi-file (`true`) uploads. */
|
|
19
|
+
readonly multiple?: boolean;
|
|
20
|
+
/** Match only enabled (`false`) or only disabled (`true`) uploads. */
|
|
21
|
+
readonly disabled?: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @license
|
|
26
|
+
*
|
|
27
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
28
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Test harness for `<wr-file-upload>`.
|
|
33
|
+
*
|
|
34
|
+
* The control a user operates is the `.wr-file-upload__zone` — a `role="button"`
|
|
35
|
+
* div that is the single tab stop; the `<input type="file">` behind it is
|
|
36
|
+
* `aria-hidden` and `tabindex="-1"`, and exists only so a click can be forwarded
|
|
37
|
+
* to it. So focus, drag and disabled state are all read off the zone, plus the
|
|
38
|
+
* `wr-file-upload--*` host modifiers and the rendered file list. The picker is
|
|
39
|
+
* touched only where it is the one that carries the state — `accept` and
|
|
40
|
+
* `multiple` land on it, and {@link selectFiles} has to hand it the files.
|
|
41
|
+
*
|
|
42
|
+
* What this component does NOT have, so this harness does not either:
|
|
43
|
+
* - **no per-file progress or status.** `<wr-file-upload>` picks files; uploading
|
|
44
|
+
* them is the app's job, and there is no bar or state to read.
|
|
45
|
+
* - **no rendered error.** A file refused for its type, its size or the file count
|
|
46
|
+
* leaves NOTHING in the DOM — no `aria-invalid`, no message, and a list that
|
|
47
|
+
* simply did not grow. The `(rejected)` output is the only channel, so a spec
|
|
48
|
+
* asserts on the host's handler. See {@link selectFiles}.
|
|
49
|
+
* - **no `maxSize` / `maxFiles` readback.** Neither reaches the DOM (unlike
|
|
50
|
+
* `accept` and `multiple`, which land on the picker), so they can only be
|
|
51
|
+
* observed by offering a file that breaks them.
|
|
52
|
+
*
|
|
53
|
+
* Two traps worth knowing before writing assertions. The bound value's SHAPE
|
|
54
|
+
* follows `multiple` — a bare `File` (or `null`) in single mode, a `File[]` in
|
|
55
|
+
* multi — and `[showList]="false"` renders no list at all, so {@link getFileNames}
|
|
56
|
+
* answers `[]` for a component that is holding files. Assert the bound value in
|
|
57
|
+
* that case.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```ts
|
|
61
|
+
* const upload = await loader.getHarness(WrFileUploadHarness.with({ label: 'Avatar' }));
|
|
62
|
+
* await upload.selectFiles(new File(['…'], 'me.png', { type: 'image/png' }));
|
|
63
|
+
*
|
|
64
|
+
* expect(await upload.getFileNames()).toEqual(['me.png']);
|
|
65
|
+
* await upload.removeFileNamed('me.png');
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @see https://ngwr.dev/guides/testing
|
|
69
|
+
*/
|
|
70
|
+
declare class WrFileUploadHarness extends ComponentHarness {
|
|
71
|
+
static hostSelector: string;
|
|
72
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
73
|
+
static with(options?: WrFileUploadHarnessFilters): HarnessPredicate<WrFileUploadHarness>;
|
|
74
|
+
private readonly zone;
|
|
75
|
+
private readonly picker;
|
|
76
|
+
private readonly items;
|
|
77
|
+
private readonly names;
|
|
78
|
+
private readonly sizes;
|
|
79
|
+
private readonly removeButtons;
|
|
80
|
+
/**
|
|
81
|
+
* The accessible name of the trigger — what a screen-reader user is told this
|
|
82
|
+
* control is.
|
|
83
|
+
*
|
|
84
|
+
* Read from the zone's `aria-label` (the `dropZoneLabel` input) rather than from
|
|
85
|
+
* the copy inside it, because that label OVERRIDES the copy: the visible "Click
|
|
86
|
+
* to browse" is not the accessible name, and a harness that returned it would
|
|
87
|
+
* describe a control nobody is announced.
|
|
88
|
+
*/
|
|
89
|
+
getLabel(): Promise<string>;
|
|
90
|
+
/** The visible call-to-action line — the `pickLabel` input. */
|
|
91
|
+
getPickText(): Promise<string>;
|
|
92
|
+
/** The visible instruction below the CTA — the `dropLabel` input. */
|
|
93
|
+
getDropText(): Promise<string>;
|
|
94
|
+
/** The optional `helperText` line, or `null` when the component was given none. */
|
|
95
|
+
getHelperText(): Promise<string | null>;
|
|
96
|
+
/** The `accept` list the picker advertises, or `null` when it accepts anything. */
|
|
97
|
+
getAccept(): Promise<string | null>;
|
|
98
|
+
/**
|
|
99
|
+
* Whether more than one file can be held.
|
|
100
|
+
*
|
|
101
|
+
* Read as the DOM PROPERTY: the template writes the attribute as an empty string
|
|
102
|
+
* (`[attr.multiple]="multiple() ? '' : null"`), and `''` is falsy — an attribute
|
|
103
|
+
* read would report a multi-file upload as single.
|
|
104
|
+
*/
|
|
105
|
+
isMultiple(): Promise<boolean>;
|
|
106
|
+
/**
|
|
107
|
+
* Whether the control refuses interaction.
|
|
108
|
+
*
|
|
109
|
+
* Read from the zone's `aria-disabled`. The host also carries
|
|
110
|
+
* `wr-file-upload--disabled` and the picker its own `disabled`, but the zone is
|
|
111
|
+
* a `role="button"` div — `aria-disabled` is the only one of the three that
|
|
112
|
+
* tells a screen-reader user the trigger is inert.
|
|
113
|
+
*/
|
|
114
|
+
isDisabled(): Promise<boolean>;
|
|
115
|
+
/**
|
|
116
|
+
* Whether the zone is armed for a drop.
|
|
117
|
+
*
|
|
118
|
+
* The `wr-file-upload--dragging` host modifier is the whole signal — a drop
|
|
119
|
+
* target has no ARIA state, so there is nothing better to read here.
|
|
120
|
+
*/
|
|
121
|
+
isDragging(): Promise<boolean>;
|
|
122
|
+
/** How many files the list is RENDERING. Zero with `[showList]="false"`, always. */
|
|
123
|
+
getFileCount(): Promise<number>;
|
|
124
|
+
/** The file names in the rendered list, in order. */
|
|
125
|
+
getFileNames(): Promise<string[]>;
|
|
126
|
+
/**
|
|
127
|
+
* The file sizes in the rendered list, as SHOWN — `'4.9 KB'`, not `5000`.
|
|
128
|
+
*
|
|
129
|
+
* The component formats bytes for display and the byte count never reaches the
|
|
130
|
+
* DOM, so this is the string a user reads. Assert the `File` itself if the exact
|
|
131
|
+
* size matters.
|
|
132
|
+
*/
|
|
133
|
+
getFileSizes(): Promise<string[]>;
|
|
134
|
+
/**
|
|
135
|
+
* Hand files to the picker, the way choosing them in the browser dialog does.
|
|
136
|
+
*
|
|
137
|
+
* This is the one method that reaches past `TestElement` to the native
|
|
138
|
+
* `<input type="file">`, and it has to: `TestElement` has no file API, and it
|
|
139
|
+
* cannot grow one portably, because a `FileList` is not constructible and a
|
|
140
|
+
* remote WebDriver session cannot be handed a `File` object at all. Everything
|
|
141
|
+
* else on this harness is environment-agnostic; this needs a DOM behind it
|
|
142
|
+
* (`TestbedHarnessEnvironment`), and says so with an error when it does not have
|
|
143
|
+
* one. The input is found through this harness's own locator rather than a
|
|
144
|
+
* `document` query, so it is still THIS component's picker that gets the files.
|
|
145
|
+
*
|
|
146
|
+
* Rejected files are silent: nothing appears in the DOM, so pair this with the
|
|
147
|
+
* host's `(rejected)` handler when a file is meant to be refused. In single mode
|
|
148
|
+
* the LAST accepted file wins, which is also how a drop of several files onto a
|
|
149
|
+
* single-file zone behaves.
|
|
150
|
+
*
|
|
151
|
+
* @throws if called with no files, on a disabled upload, or outside a DOM
|
|
152
|
+
* environment.
|
|
153
|
+
*/
|
|
154
|
+
selectFiles(...files: File[]): Promise<void>;
|
|
155
|
+
/**
|
|
156
|
+
* Drag files over the zone and drop them.
|
|
157
|
+
*
|
|
158
|
+
* Driven by dispatching the drag sequence AT the zone rather than by coordinates:
|
|
159
|
+
* nothing has layout in a unit test — `getBoundingClientRect` is all zeros — so a
|
|
160
|
+
* pointer-driven drag would land nowhere. From the component's side it is the
|
|
161
|
+
* same event either way; it reads `dataTransfer.files` and never a position.
|
|
162
|
+
*
|
|
163
|
+
* A disabled upload refuses the drop itself, so this stays a no-op there rather
|
|
164
|
+
* than throwing the way {@link selectFiles} does — that refusal is the
|
|
165
|
+
* component's own, and worth asserting.
|
|
166
|
+
*/
|
|
167
|
+
dropFiles(...files: File[]): Promise<void>;
|
|
168
|
+
/** Drag over the zone without letting go — arms {@link isDragging}. */
|
|
169
|
+
dragOver(): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Drag back out of the zone, disarming {@link isDragging}.
|
|
172
|
+
*
|
|
173
|
+
* Dispatched at the zone itself on purpose: the component ignores a `dragleave`
|
|
174
|
+
* whose target is one of the zone's children, because crossing the icon or the
|
|
175
|
+
* hint text is not leaving the zone.
|
|
176
|
+
*/
|
|
177
|
+
dragLeave(): Promise<void>;
|
|
178
|
+
/**
|
|
179
|
+
* Remove the file at `index` from the rendered list.
|
|
180
|
+
*
|
|
181
|
+
* On a disabled upload the remove buttons are disabled too, so this is a no-op
|
|
182
|
+
* there — assert the result rather than assuming it.
|
|
183
|
+
*/
|
|
184
|
+
removeFile(index: number): Promise<void>;
|
|
185
|
+
/** Remove the file with this name. Names come from {@link getFileNames}. */
|
|
186
|
+
removeFileNamed(name: string): Promise<void>;
|
|
187
|
+
/** Move keyboard focus to the zone — the control's only tab stop. */
|
|
188
|
+
focus(): Promise<void>;
|
|
189
|
+
/** Whether the zone has focus. */
|
|
190
|
+
isFocused(): Promise<boolean>;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export { WrFileUploadHarness };
|
|
194
|
+
export type { WrFileUploadHarnessFilters };
|