ngwr 10.2.1 → 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 +7 -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 +13 -3
- package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
- package/fesm2022/ngwr-affix.mjs +40 -13
- package/fesm2022/ngwr-affix.mjs.map +1 -1
- package/fesm2022/ngwr-anchor.mjs +18 -6
- package/fesm2022/ngwr-anchor.mjs.map +1 -1
- package/fesm2022/ngwr-aurora.mjs +2 -2
- package/fesm2022/ngwr-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-avatar.mjs +31 -7
- package/fesm2022/ngwr-avatar.mjs.map +1 -1
- package/fesm2022/ngwr-back-top.mjs +6 -2
- package/fesm2022/ngwr-back-top.mjs.map +1 -1
- package/fesm2022/ngwr-badge.mjs +1 -1
- package/fesm2022/ngwr-badge.mjs.map +1 -1
- package/fesm2022/ngwr-bar-chart.mjs +30 -9
- package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
- package/fesm2022/ngwr-blur-text.mjs +2 -2
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow.mjs +2 -2
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +2 -2
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +9 -4
- 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 +31 -14
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-heatmap.mjs +40 -8
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +20 -1
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +2 -2
- 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 +67 -13
- 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 +2 -2
- 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 +9 -3
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +2 -2
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +2 -2
- package/fesm2022/ngwr-click-spark.mjs.map +1 -1
- package/fesm2022/ngwr-collapse-testing.mjs +368 -0
- package/fesm2022/ngwr-collapse-testing.mjs.map +1 -0
- package/fesm2022/ngwr-color-picker.mjs +134 -14
- 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 +58 -8
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +103 -13
- package/fesm2022/ngwr-compare.mjs.map +1 -1
- 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 +94 -8
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +5 -1
- package/fesm2022/ngwr-cookie.mjs.map +1 -1
- package/fesm2022/ngwr-counter.mjs +11 -3
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapter-luxon.mjs +52 -4
- package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -1
- package/fesm2022/ngwr-date-adapter.mjs +54 -8
- 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 +73 -3
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-decrypt-text.mjs +27 -9
- package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
- package/fesm2022/ngwr-dialog-testing.mjs +89 -0
- package/fesm2022/ngwr-dialog-testing.mjs.map +1 -0
- package/fesm2022/ngwr-directives.mjs +36 -12
- package/fesm2022/ngwr-directives.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart.mjs +22 -5
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +2 -2
- 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-dropdown-testing.mjs +291 -0
- package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -0
- package/fesm2022/ngwr-dropdown.mjs +10 -2
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +24 -7
- package/fesm2022/ngwr-empty.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +57 -10
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text.mjs +2 -2
- 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-form-testing.mjs +451 -0
- package/fesm2022/ngwr-form-testing.mjs.map +1 -0
- package/fesm2022/ngwr-form.mjs +19 -3
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +9 -2
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge.mjs +19 -5
- package/fesm2022/ngwr-gauge.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text.mjs +2 -2
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text.mjs +2 -2
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +50 -0
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +48 -0
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-image-cropper.mjs +23 -0
- 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 +35 -3
- 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 +36 -5
- 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 +47 -10
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +44 -8
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-layout.mjs +21 -5
- package/fesm2022/ngwr-layout.mjs.map +1 -1
- package/fesm2022/ngwr-lightbox.mjs +33 -6
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +17 -4
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +2 -2
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +2 -2
- 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 +17 -6
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-mention-testing.mjs +513 -0
- package/fesm2022/ngwr-mention-testing.mjs.map +1 -0
- package/fesm2022/ngwr-mention.mjs +10 -1
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +22 -7
- package/fesm2022/ngwr-meta.mjs.map +1 -1
- package/fesm2022/ngwr-meter-group.mjs +19 -5
- package/fesm2022/ngwr-meter-group.mjs.map +1 -1
- package/fesm2022/ngwr-overlay.mjs +41 -1
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-pagination-testing.mjs +389 -0
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -0
- package/fesm2022/ngwr-pagination.mjs +14 -2
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-popconfirm-testing.mjs +309 -0
- package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -0
- package/fesm2022/ngwr-popconfirm.mjs +95 -17
- 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 +21 -3
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-pull-to-refresh.mjs +17 -2
- package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
- package/fesm2022/ngwr-qr.mjs +13 -3
- 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 +10 -3
- 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 +37 -2
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-segmented-testing.mjs +512 -0
- package/fesm2022/ngwr-segmented-testing.mjs.map +1 -0
- package/fesm2022/ngwr-select-testing.mjs +268 -0
- package/fesm2022/ngwr-select-testing.mjs.map +1 -0
- package/fesm2022/ngwr-select.mjs +87 -16
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +2 -2
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +65 -12
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-slider-testing.mjs +478 -0
- package/fesm2022/ngwr-slider-testing.mjs.map +1 -0
- package/fesm2022/ngwr-slider.mjs +57 -13
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline.mjs +26 -6
- package/fesm2022/ngwr-sparkline.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial.mjs +37 -4
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spinner.mjs +12 -3
- package/fesm2022/ngwr-spinner.mjs.map +1 -1
- package/fesm2022/ngwr-splash-cursor.mjs +2 -2
- package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
- package/fesm2022/ngwr-split-text.mjs +2 -2
- package/fesm2022/ngwr-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter.mjs +70 -9
- package/fesm2022/ngwr-splitter.mjs.map +1 -1
- package/fesm2022/ngwr-spotlight-card.mjs +2 -2
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-star-border.mjs +2 -2
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +24 -7
- 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-switch-testing.mjs +77 -0
- package/fesm2022/ngwr-switch-testing.mjs.map +1 -0
- package/fesm2022/ngwr-switch.mjs +9 -3
- 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 +87 -14
- 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 +38 -6
- 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 +32 -4
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card.mjs +2 -2
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-toast-testing.mjs +101 -0
- package/fesm2022/ngwr-toast-testing.mjs.map +1 -0
- package/fesm2022/ngwr-toast.mjs +2 -2
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-tour.mjs +61 -9
- 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 +45 -14
- 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 +73 -7
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +5 -3
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +1 -1
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +31 -5
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves.mjs +3 -3
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +8 -0
- 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 +48 -0
- package/i18n/ru.json +48 -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 +26 -10
- package/types/ngwr-calendar-heatmap.d.ts +16 -2
- package/types/ngwr-calendar.d.ts +10 -0
- 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-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 +4 -0
- package/types/ngwr-dialog-testing.d.ts +79 -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-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-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-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 +1 -0
- 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 +9 -0
- 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-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-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/typewriter/styles/_index.scss +1 -1
- package/typography/styles/_index.scss +1 -1
- package/window/styles/_index.scss +32 -9
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ComponentHarness, HarnessPredicate, TestElement, 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 `<wr-date-picker>` a harness query matches. */
|
|
11
|
+
interface WrDatePickerHarnessFilters extends BaseHarnessFilters {
|
|
12
|
+
/**
|
|
13
|
+
* Match the text the field is showing — the formatted value, or `''` when the
|
|
14
|
+
* picker is empty and the placeholder is up. A string is an exact match, a
|
|
15
|
+
* RegExp is tested.
|
|
16
|
+
*/
|
|
17
|
+
readonly text?: string | RegExp;
|
|
18
|
+
/** Match the field's placeholder — a string is an exact match, a RegExp is tested. */
|
|
19
|
+
readonly placeholder?: string | RegExp;
|
|
20
|
+
/** Match one mode only. */
|
|
21
|
+
readonly mode?: 'date' | 'time' | 'datetime';
|
|
22
|
+
/** Match only enabled (`false`) or only disabled (`true`) pickers. */
|
|
23
|
+
readonly disabled?: boolean;
|
|
24
|
+
/** Match only pickers whose popup is up (`true`) or down (`false`). */
|
|
25
|
+
readonly open?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Narrows which `<wr-date-range-picker>` a harness query matches. */
|
|
28
|
+
interface WrDateRangePickerHarnessFilters extends BaseHarnessFilters {
|
|
29
|
+
/** Match the text in the START field. A string is an exact match, a RegExp is tested. */
|
|
30
|
+
readonly startText?: string | RegExp;
|
|
31
|
+
/** Match the text in the END field. A string is an exact match, a RegExp is tested. */
|
|
32
|
+
readonly endText?: string | RegExp;
|
|
33
|
+
/** Match one mode only. The range picker has no `time` mode. */
|
|
34
|
+
readonly mode?: 'date' | 'datetime';
|
|
35
|
+
/** Match only enabled (`false`) or only disabled (`true`) pickers. */
|
|
36
|
+
readonly disabled?: boolean;
|
|
37
|
+
/** Match only pickers whose popup is up (`true`) or down (`false`). */
|
|
38
|
+
readonly open?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Narrows which day cell inside a picker's calendar a harness query matches. */
|
|
41
|
+
interface WrDatePickerDayHarnessFilters extends BaseHarnessFilters {
|
|
42
|
+
/**
|
|
43
|
+
* Match the cell's day number as rendered (`'1'` … `'31'`). A string is an
|
|
44
|
+
* exact match, a RegExp is tested — note the grid spills into the neighbouring
|
|
45
|
+
* months, so a number appears twice on most months.
|
|
46
|
+
*/
|
|
47
|
+
readonly text?: string | RegExp;
|
|
48
|
+
/** Match only selected (`true`) or only unselected (`false`) cells. */
|
|
49
|
+
readonly selected?: boolean;
|
|
50
|
+
/** Match only enabled (`false`) or only disabled (`true`) cells. */
|
|
51
|
+
readonly disabled?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Match cells strictly BETWEEN the two ends of a picked range — the ends
|
|
54
|
+
* themselves are `selected`, not `inRange`. Always `false` for
|
|
55
|
+
* `<wr-date-picker>`, whose calendar has a single value.
|
|
56
|
+
*/
|
|
57
|
+
readonly inRange?: boolean;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @license
|
|
62
|
+
*
|
|
63
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
64
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
65
|
+
*/
|
|
66
|
+
/**
|
|
67
|
+
* Which boxes of a time stepper to type into. Omitted fields are left alone, so
|
|
68
|
+
* `{ minutes: 45 }` changes the minutes and nothing else.
|
|
69
|
+
*
|
|
70
|
+
* Hours are given the way the stepper SHOWS them: 0-23 for a 24-hour panel,
|
|
71
|
+
* 1-12 for a 12-hour one (where AM/PM stays where it was — flip it with
|
|
72
|
+
* `toggleMeridiem()`).
|
|
73
|
+
*/
|
|
74
|
+
interface WrDatePickerTimeFields {
|
|
75
|
+
readonly hours?: number;
|
|
76
|
+
readonly minutes?: number;
|
|
77
|
+
readonly seconds?: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @license
|
|
82
|
+
*
|
|
83
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
84
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Test harness for one day cell of the calendar inside a date-picker popup.
|
|
89
|
+
*
|
|
90
|
+
* Reached through `WrDatePickerHarness.getDay()` / `getDays()` (or the range
|
|
91
|
+
* picker's), which scope it to ONE picker's panel — the cells are in the overlay
|
|
92
|
+
* container, so a bare query would answer with whichever picker opened first.
|
|
93
|
+
*
|
|
94
|
+
* State is read the way a screen reader reads it (`role`, `aria-selected`,
|
|
95
|
+
* `aria-disabled`) with the `.wr-calendar__day--*` modifiers filling in what
|
|
96
|
+
* ARIA has no word for: today, the spill days of the neighbouring months, and
|
|
97
|
+
* the interior of a picked range.
|
|
98
|
+
*
|
|
99
|
+
* @see https://ngwr.dev/guides/testing
|
|
100
|
+
*/
|
|
101
|
+
declare class WrDatePickerDayHarness extends ComponentHarness {
|
|
102
|
+
static hostSelector: string;
|
|
103
|
+
/** Build a predicate that narrows the query. */
|
|
104
|
+
static with(options?: WrDatePickerDayHarnessFilters): HarnessPredicate<WrDatePickerDayHarness>;
|
|
105
|
+
/** The day number as rendered. */
|
|
106
|
+
getText(): Promise<string>;
|
|
107
|
+
/** The day number as a number, for mapping a list of cells to dates. */
|
|
108
|
+
getDayOfMonth(): Promise<number>;
|
|
109
|
+
/** `'gridcell'` — the cell is a button, and the grid semantics are what a spec should assert. */
|
|
110
|
+
getRole(): Promise<string | null>;
|
|
111
|
+
/** Whether this day is (one end of) the current selection. */
|
|
112
|
+
isSelected(): Promise<boolean>;
|
|
113
|
+
/**
|
|
114
|
+
* Whether the day refuses selection — `min` / `max` or `dateFilter` ruled it
|
|
115
|
+
* out, or the whole calendar is disabled.
|
|
116
|
+
*/
|
|
117
|
+
isDisabled(): Promise<boolean>;
|
|
118
|
+
/** Whether the cell is today's date. */
|
|
119
|
+
isToday(): Promise<boolean>;
|
|
120
|
+
/**
|
|
121
|
+
* Whether the cell belongs to a neighbouring month. The grid is always 6x7, so
|
|
122
|
+
* every month is padded with days that are selectable but not "in" the month —
|
|
123
|
+
* which is why {@link WrDatePickerHarness.getDay} skips them.
|
|
124
|
+
*/
|
|
125
|
+
isOutOfMonth(): Promise<boolean>;
|
|
126
|
+
/** Whether the day lies strictly between the two ends of a picked range. */
|
|
127
|
+
isInRange(): Promise<boolean>;
|
|
128
|
+
/**
|
|
129
|
+
* Whether this is the roving cell — the grid's single tab stop, and where the
|
|
130
|
+
* arrow keys move from.
|
|
131
|
+
*
|
|
132
|
+
* At most ONE cell answers `true`, and it is not always one: the calendar's
|
|
133
|
+
* roving date does not follow `next()` / `previous()`, so a grid navigated away
|
|
134
|
+
* from that month has no active cell (and, deliberately or not, no tab stop)
|
|
135
|
+
* until a cell is clicked or the arrows move it.
|
|
136
|
+
*/
|
|
137
|
+
isActive(): Promise<boolean>;
|
|
138
|
+
/** Click the cell. A disabled cell swallows the click — assert, do not assume. */
|
|
139
|
+
click(): Promise<void>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @license
|
|
144
|
+
*
|
|
145
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
146
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
/** Column order inside the stepper, which is also the order the boxes render in. */
|
|
150
|
+
declare const UNITS: readonly ["hours", "minutes", "seconds"];
|
|
151
|
+
/** One unit of a time stepper. */
|
|
152
|
+
type Unit = (typeof UNITS)[number];
|
|
153
|
+
/**
|
|
154
|
+
* The `<wr-time-picker>` stepper inside a date-picker popup.
|
|
155
|
+
*
|
|
156
|
+
* Deliberately NOT exported from the entry point: the component is `@internal`
|
|
157
|
+
* (`<wr-date-picker mode="time">` is how a consumer gets one), so the picker
|
|
158
|
+
* harnesses re-publish what it can do — `getTime()`, `setTime()`, `stepTime()`,
|
|
159
|
+
* `toggleMeridiem()` — rather than handing out this class. It exists so the
|
|
160
|
+
* range picker, which renders one stepper PER END, can address them
|
|
161
|
+
* independently instead of by CSS nth-of-type gymnastics.
|
|
162
|
+
*
|
|
163
|
+
* Units are addressed by position, not by the boxes' `aria-label`: every string
|
|
164
|
+
* in this panel is still hard-coded English (the box labels, the steppers'
|
|
165
|
+
* "Increment hours", the AM/PM text), so keying on them would make this harness
|
|
166
|
+
* the thing that breaks when they are moved into the i18n catalog. Column order
|
|
167
|
+
* is the layout contract.
|
|
168
|
+
*
|
|
169
|
+
* @internal
|
|
170
|
+
*/
|
|
171
|
+
declare class WrTimePanelHarness extends ComponentHarness {
|
|
172
|
+
static hostSelector: string;
|
|
173
|
+
/** The stepper's value as `HH:MM`, plus `:SS` and ` AM`/` PM` when those columns exist. */
|
|
174
|
+
getTimeText(): Promise<string>;
|
|
175
|
+
/** `'AM'` / `'PM'`, or `null` when the stepper is in 24-hour mode. */
|
|
176
|
+
getMeridiem(): Promise<string | null>;
|
|
177
|
+
/**
|
|
178
|
+
* Type into the boxes named by `fields`, leaving the rest alone.
|
|
179
|
+
*
|
|
180
|
+
* Each box is cleared and retyped rather than assigned: the panel reads an
|
|
181
|
+
* emptied box as someone mid-retype and deliberately commits nothing for it, so
|
|
182
|
+
* a harness that only cleared would look like a no-op.
|
|
183
|
+
*/
|
|
184
|
+
setFields(fields: WrDatePickerTimeFields): Promise<void>;
|
|
185
|
+
/** Click a unit's ▲ / ▼ button once. Minutes and seconds move by the picker's `step`. */
|
|
186
|
+
step(unit: Unit, direction: 1 | -1): Promise<void>;
|
|
187
|
+
/** Flip AM ↔ PM. Throws on a 24-hour stepper, which has no such control. */
|
|
188
|
+
toggleMeridiem(): Promise<void>;
|
|
189
|
+
/** A unit's rendered (zero-padded) value. */
|
|
190
|
+
private getValue;
|
|
191
|
+
/** Same, but `null` when the column is not rendered at all. */
|
|
192
|
+
private getOptionalValue;
|
|
193
|
+
private box;
|
|
194
|
+
/** The typable boxes, in column order — the AM/PM column is a `<span>`, not one of these. */
|
|
195
|
+
private boxes;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* @license
|
|
200
|
+
*
|
|
201
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
202
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
203
|
+
*/
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Everything `<wr-date-picker>` and `<wr-date-range-picker>` do identically: the
|
|
207
|
+
* trigger button, the popup it owns, and the `<wr-calendar>` inside it. Both
|
|
208
|
+
* components render the SAME trigger element (`.wr-date-picker__trigger` — the
|
|
209
|
+
* range picker reuses the class rather than minting its own) and both publish
|
|
210
|
+
* their popup's id through the trigger's `aria-controls`, so the scoping story is
|
|
211
|
+
* shared too.
|
|
212
|
+
*
|
|
213
|
+
* Not exported from the entry point — a consumer works with one of the two
|
|
214
|
+
* concrete harnesses.
|
|
215
|
+
*
|
|
216
|
+
* @internal
|
|
217
|
+
*/
|
|
218
|
+
declare abstract class WrDatePickerHarnessBase extends ComponentHarness {
|
|
219
|
+
/** Concrete class name, so errors read like the harness the caller reached for. */
|
|
220
|
+
protected abstract readonly harnessName: string;
|
|
221
|
+
/**
|
|
222
|
+
* Whether the popup is up.
|
|
223
|
+
*
|
|
224
|
+
* Read from the trigger's `aria-expanded` rather than from a host class: unlike
|
|
225
|
+
* `wr-select`, neither picker carries an `--open` modifier, and the ARIA state
|
|
226
|
+
* is the thing a consumer's users actually get told.
|
|
227
|
+
*/
|
|
228
|
+
isOpen(): Promise<boolean>;
|
|
229
|
+
/** Open the popup from the trigger. An already-open picker is left alone. */
|
|
230
|
+
open(): Promise<void>;
|
|
231
|
+
/**
|
|
232
|
+
* Close the popup by clicking the trigger again. A closed picker is left alone.
|
|
233
|
+
*
|
|
234
|
+
* Deliberately not Escape: the CDK dispatches a keydown to the TOP-MOST overlay,
|
|
235
|
+
* so with two pickers open this would close whichever opened last rather than
|
|
236
|
+
* this one. The trigger only ever toggles its own popup.
|
|
237
|
+
*/
|
|
238
|
+
close(): Promise<void>;
|
|
239
|
+
/** The popup's role — `'dialog'`, which is what the trigger's `aria-haspopup` promises. */
|
|
240
|
+
getPanelRole(): Promise<string | null>;
|
|
241
|
+
/**
|
|
242
|
+
* The popup's accessible name. Defaults to a catalog string chosen by `mode`
|
|
243
|
+
* ("Choose date", "Choose time", …) and is overridden by `[panelAriaLabel]`.
|
|
244
|
+
*/
|
|
245
|
+
getPanelAriaLabel(): Promise<string | null>;
|
|
246
|
+
/**
|
|
247
|
+
* Which of the calendar's three views is showing. The header label zooms out
|
|
248
|
+
* (day → month → year); picking a month or a year zooms back in.
|
|
249
|
+
*/
|
|
250
|
+
getView(): Promise<'day' | 'month' | 'year'>;
|
|
251
|
+
/**
|
|
252
|
+
* The calendar's header: `'January 2025'` in the day view, `'2025'` in the month
|
|
253
|
+
* view, `'2016 – 2027'` in the year view.
|
|
254
|
+
*/
|
|
255
|
+
getPanelHeader(): Promise<string>;
|
|
256
|
+
/** The weekday strip, in display order — `role="columnheader"` cells of the grid's first row. */
|
|
257
|
+
getWeekdayLabels(): Promise<string[]>;
|
|
258
|
+
/**
|
|
259
|
+
* Step the calendar forwards. What one step MEANS follows the active view, as
|
|
260
|
+
* the button's own `aria-label` says: a month in the day view, a year in the
|
|
261
|
+
* month view, twelve years in the year view.
|
|
262
|
+
*/
|
|
263
|
+
next(): Promise<void>;
|
|
264
|
+
/** Step the calendar backwards — see {@link next} for what one step covers. */
|
|
265
|
+
previous(): Promise<void>;
|
|
266
|
+
/**
|
|
267
|
+
* Zoom out one level by clicking the header, the way a user does: day → month,
|
|
268
|
+
* month → year. Throws at the year view, where the header is inert.
|
|
269
|
+
*/
|
|
270
|
+
zoomOut(): Promise<void>;
|
|
271
|
+
/** Pick a month in the month view, by 0-based index or by the label the calendar renders. */
|
|
272
|
+
selectMonth(month: number | string): Promise<void>;
|
|
273
|
+
/** Pick a year in the year view. Only the twelve on show can be picked. */
|
|
274
|
+
selectYear(year: number): Promise<void>;
|
|
275
|
+
/**
|
|
276
|
+
* The day cells of the calendar in this picker's popup, in DOM order — 42 of
|
|
277
|
+
* them, since the grid is always six weeks and pads into the neighbouring
|
|
278
|
+
* months.
|
|
279
|
+
*/
|
|
280
|
+
getDays(filters?: WrDatePickerDayHarnessFilters): Promise<WrDatePickerDayHarness[]>;
|
|
281
|
+
/**
|
|
282
|
+
* One day of the month on show. The padding days of the neighbouring months are
|
|
283
|
+
* skipped, so `getDay(1)` is the 1st of THIS month and never the 1st of the next.
|
|
284
|
+
*/
|
|
285
|
+
getDay(dayOfMonth: number): Promise<WrDatePickerDayHarness>;
|
|
286
|
+
/** Click a day of the month on show. */
|
|
287
|
+
selectDay(dayOfMonth: number): Promise<void>;
|
|
288
|
+
/** The trigger button. Both components render it with the same class. */
|
|
289
|
+
protected trigger(): Promise<TestElement>;
|
|
290
|
+
/**
|
|
291
|
+
* The id of THIS picker's popup.
|
|
292
|
+
*
|
|
293
|
+
* The trigger publishes it as `aria-controls` only while the popup is up, which
|
|
294
|
+
* makes one lookup answer both questions — is it open, and which of the panes
|
|
295
|
+
* in the shared overlay container is ours.
|
|
296
|
+
*/
|
|
297
|
+
protected panelId(): Promise<string>;
|
|
298
|
+
/** A loader scoped to THIS picker's popup, so a second open picker cannot answer for it. */
|
|
299
|
+
protected panelLoader(): Promise<HarnessLoader>;
|
|
300
|
+
/** One element inside THIS picker's popup, or `null`. */
|
|
301
|
+
protected inPanel(selector: string): Promise<TestElement | null>;
|
|
302
|
+
/** Every matching element inside THIS picker's popup, in DOM order. */
|
|
303
|
+
protected allInPanel(selector: string): Promise<TestElement[]>;
|
|
304
|
+
/**
|
|
305
|
+
* The time steppers in this popup, in DOM order — none in `date` mode, one for
|
|
306
|
+
* `time` / `datetime`, and two (start then end) for a datetime range.
|
|
307
|
+
*/
|
|
308
|
+
protected timePanels(): Promise<WrTimePanelHarness[]>;
|
|
309
|
+
private navigate;
|
|
310
|
+
/** Fail early on the day-cell methods rather than answering with an empty list. */
|
|
311
|
+
private requireGrid;
|
|
312
|
+
private panel;
|
|
313
|
+
private noCalendar;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* @license
|
|
318
|
+
*
|
|
319
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
320
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
321
|
+
*/
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Test harness for `<wr-date-picker>` — the `date`, `time` and `datetime` modes
|
|
325
|
+
* of the one component.
|
|
326
|
+
*
|
|
327
|
+
* The popup is NOT inside the picker: it is a pane in the overlay container, a
|
|
328
|
+
* sibling of the whole app. Everything inside it is therefore reached through the
|
|
329
|
+
* document root, scoped by the id the trigger publishes as `aria-controls` —
|
|
330
|
+
* which is what keeps two pickers on one page from reading each other's calendar.
|
|
331
|
+
*
|
|
332
|
+
* The value lives in a text field, so there are two ways in and the harness
|
|
333
|
+
* offers both: {@link setValueText} types a date, {@link selectDay} picks one out
|
|
334
|
+
* of the grid. There is deliberately no clear BUTTON on this component — an
|
|
335
|
+
* emptied field is what clears the value, and that is what {@link clear} does.
|
|
336
|
+
*
|
|
337
|
+
* @example
|
|
338
|
+
* ```ts
|
|
339
|
+
* const picker = await loader.getHarness(WrDatePickerHarness);
|
|
340
|
+
*
|
|
341
|
+
* await picker.open();
|
|
342
|
+
* expect(await picker.getPanelHeader()).toBe('January 2025');
|
|
343
|
+
* await picker.selectDay(14);
|
|
344
|
+
*
|
|
345
|
+
* expect(await picker.getValueText()).toBe('14.01.2025');
|
|
346
|
+
* expect(await (await picker.getDay(14)).isSelected()).toBe(true);
|
|
347
|
+
* ```
|
|
348
|
+
*
|
|
349
|
+
* @see https://ngwr.dev/guides/testing
|
|
350
|
+
*/
|
|
351
|
+
declare class WrDatePickerHarness extends WrDatePickerHarnessBase {
|
|
352
|
+
static hostSelector: string;
|
|
353
|
+
/** Build a predicate that narrows the query. */
|
|
354
|
+
static with(options?: WrDatePickerHarnessFilters): HarnessPredicate<WrDatePickerHarness>;
|
|
355
|
+
protected readonly harnessName = "WrDatePickerHarness";
|
|
356
|
+
/** Which mode the picker is in, read from the `wr-date-picker--*` modifier. */
|
|
357
|
+
getMode(): Promise<'date' | 'time' | 'datetime'>;
|
|
358
|
+
/**
|
|
359
|
+
* What the field is showing: the value in the picker's `format`, or `''` when it
|
|
360
|
+
* is empty and the placeholder is up.
|
|
361
|
+
*/
|
|
362
|
+
getValueText(): Promise<string>;
|
|
363
|
+
/** The field's placeholder. */
|
|
364
|
+
getPlaceholder(): Promise<string>;
|
|
365
|
+
/**
|
|
366
|
+
* Type a date into the field, replacing whatever is there.
|
|
367
|
+
*
|
|
368
|
+
* The field is cleared first, so the value passes through `null` on the way —
|
|
369
|
+
* exactly as it does for a user who selects all and types over it. The picker
|
|
370
|
+
* parses on every keystroke and commits only when the text parses in full, so a
|
|
371
|
+
* partial or out-of-bounds entry leaves the model on its last good value.
|
|
372
|
+
*/
|
|
373
|
+
setValueText(text: string): Promise<void>;
|
|
374
|
+
/**
|
|
375
|
+
* Empty the field, which clears the value.
|
|
376
|
+
*
|
|
377
|
+
* There is no clear button to click: unlike `wr-select`, this component ships no
|
|
378
|
+
* `×` affordance, and an empty field is the documented way to get back to `null`.
|
|
379
|
+
*/
|
|
380
|
+
clear(): Promise<void>;
|
|
381
|
+
/** Whether the picker refuses interaction. */
|
|
382
|
+
isDisabled(): Promise<boolean>;
|
|
383
|
+
/**
|
|
384
|
+
* Whether the field refuses typing. A read-only picker still OPENS its popup —
|
|
385
|
+
* documented behaviour, and the one place it parts company with the range picker.
|
|
386
|
+
*/
|
|
387
|
+
isReadonly(): Promise<boolean>;
|
|
388
|
+
/** Move focus to the field. */
|
|
389
|
+
focus(): Promise<void>;
|
|
390
|
+
/**
|
|
391
|
+
* Blur the field, which is what reformats a value to canonical and emits `touch`
|
|
392
|
+
* so a bound `[formField]` can mark itself touched.
|
|
393
|
+
*/
|
|
394
|
+
blur(): Promise<void>;
|
|
395
|
+
/** Whether the field currently has focus. */
|
|
396
|
+
isFocused(): Promise<boolean>;
|
|
397
|
+
/**
|
|
398
|
+
* The open time stepper's value as `HH:MM`, plus `:SS` when `showSeconds` is on
|
|
399
|
+
* and ` AM`/` PM` in 12-hour mode.
|
|
400
|
+
*/
|
|
401
|
+
getTime(): Promise<string>;
|
|
402
|
+
/** Type into the open time stepper's boxes. Omitted fields are left alone. */
|
|
403
|
+
setTime(fields: WrDatePickerTimeFields): Promise<void>;
|
|
404
|
+
/** Click one of the stepper's ▲ / ▼ buttons. Minutes and seconds move by `step`. */
|
|
405
|
+
stepTime(unit: 'hours' | 'minutes' | 'seconds', direction: 1 | -1): Promise<void>;
|
|
406
|
+
/** Flip the stepper between AM and PM. Throws in 24-hour mode, which has no such control. */
|
|
407
|
+
toggleMeridiem(): Promise<void>;
|
|
408
|
+
private field;
|
|
409
|
+
/** The one stepper in the popup — `panelId()` has already refused a closed picker. */
|
|
410
|
+
private timePanel;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* @license
|
|
415
|
+
*
|
|
416
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
417
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
418
|
+
*/
|
|
419
|
+
|
|
420
|
+
/** Which end of the range a call applies to. */
|
|
421
|
+
type End = 'start' | 'end';
|
|
422
|
+
/**
|
|
423
|
+
* Test harness for `<wr-date-range-picker>` — two text fields over one range
|
|
424
|
+
* calendar.
|
|
425
|
+
*
|
|
426
|
+
* A separate harness rather than a mode of {@link WrDatePickerHarness}, because
|
|
427
|
+
* the DOM a spec has to reach is genuinely different: two fields with a separator
|
|
428
|
+
* between them, and in `datetime` mode two time steppers instead of one. Every
|
|
429
|
+
* call that could mean either field takes an explicit `'start'` / `'end'` — the
|
|
430
|
+
* component's own bugs were nearly all "which end did that belong to", and a
|
|
431
|
+
* harness that guessed would reproduce them.
|
|
432
|
+
*
|
|
433
|
+
* The popup, the calendar and the scoping work exactly as they do for the single
|
|
434
|
+
* picker: a pane in the overlay container, addressed by the id the trigger
|
|
435
|
+
* publishes as `aria-controls`.
|
|
436
|
+
*
|
|
437
|
+
* @example
|
|
438
|
+
* ```ts
|
|
439
|
+
* const period = await loader.getHarness(WrDateRangePickerHarness);
|
|
440
|
+
*
|
|
441
|
+
* await period.open();
|
|
442
|
+
* await period.selectDay(14);
|
|
443
|
+
* await period.selectDay(20);
|
|
444
|
+
*
|
|
445
|
+
* expect([await period.getStartText(), await period.getEndText()]).toEqual(['14.01.2025', '20.01.2025']);
|
|
446
|
+
* ```
|
|
447
|
+
*
|
|
448
|
+
* @see https://ngwr.dev/guides/testing
|
|
449
|
+
*/
|
|
450
|
+
declare class WrDateRangePickerHarness extends WrDatePickerHarnessBase {
|
|
451
|
+
static hostSelector: string;
|
|
452
|
+
/** Build a predicate that narrows the query. */
|
|
453
|
+
static with(options?: WrDateRangePickerHarnessFilters): HarnessPredicate<WrDateRangePickerHarness>;
|
|
454
|
+
protected readonly harnessName = "WrDateRangePickerHarness";
|
|
455
|
+
/** Which mode the picker is in, read from the `wr-date-range-picker--*` modifier. */
|
|
456
|
+
getMode(): Promise<'date' | 'datetime'>;
|
|
457
|
+
/** What the start field is showing — `''` while that end is unpicked. */
|
|
458
|
+
getStartText(): Promise<string>;
|
|
459
|
+
/** What the end field is showing — `''` while that end is unpicked. */
|
|
460
|
+
getEndText(): Promise<string>;
|
|
461
|
+
/** The glyph rendered between the two fields (`[separator]`, `'–'` by default). */
|
|
462
|
+
getSeparator(): Promise<string>;
|
|
463
|
+
/** The placeholder of one field. */
|
|
464
|
+
getPlaceholder(end: End): Promise<string>;
|
|
465
|
+
/**
|
|
466
|
+
* Type a date into the start field, replacing whatever is there.
|
|
467
|
+
*
|
|
468
|
+
* Ends typed out of order are NOT swapped here — the component settles the
|
|
469
|
+
* ordering when the interaction is over, so call {@link blur} (or close the
|
|
470
|
+
* popup) to see a normalised range.
|
|
471
|
+
*/
|
|
472
|
+
setStartText(text: string): Promise<void>;
|
|
473
|
+
/** Type a date into the end field — see {@link setStartText} on ordering. */
|
|
474
|
+
setEndText(text: string): Promise<void>;
|
|
475
|
+
/** Empty both fields, which clears the range. Neither end has a clear button. */
|
|
476
|
+
clear(): Promise<void>;
|
|
477
|
+
/** Whether the picker refuses interaction. */
|
|
478
|
+
isDisabled(): Promise<boolean>;
|
|
479
|
+
/**
|
|
480
|
+
* Whether the fields refuse typing. Stricter than `<wr-date-picker>`: a
|
|
481
|
+
* read-only range picker also refuses to open, since two fields over one
|
|
482
|
+
* calendar leaves no reading of "untypeable" that still lets the grid rewrite
|
|
483
|
+
* both ends.
|
|
484
|
+
*/
|
|
485
|
+
isReadonly(): Promise<boolean>;
|
|
486
|
+
/** Move focus to one field. */
|
|
487
|
+
focus(end: End): Promise<void>;
|
|
488
|
+
/**
|
|
489
|
+
* Blur one field. This is the moment an out-of-order range is put back in
|
|
490
|
+
* order, and — when focus leaves the control rather than hopping to the other
|
|
491
|
+
* end — the moment `touch` is emitted.
|
|
492
|
+
*/
|
|
493
|
+
blur(end: End): Promise<void>;
|
|
494
|
+
/** Whether one field currently has focus. */
|
|
495
|
+
isFocused(end: End): Promise<boolean>;
|
|
496
|
+
/**
|
|
497
|
+
* One end's time stepper as `HH:MM`, plus `:SS` when `showSeconds` is on and
|
|
498
|
+
* ` AM`/` PM` in 12-hour mode. `datetime` mode only.
|
|
499
|
+
*/
|
|
500
|
+
getTime(end: End): Promise<string>;
|
|
501
|
+
/** Type into one end's time stepper. Omitted fields are left alone. */
|
|
502
|
+
setTime(end: End, fields: WrDatePickerTimeFields): Promise<void>;
|
|
503
|
+
/** Click one of an end's ▲ / ▼ buttons. Minutes and seconds move by `step`. */
|
|
504
|
+
stepTime(end: End, unit: 'hours' | 'minutes' | 'seconds', direction: 1 | -1): Promise<void>;
|
|
505
|
+
/** Flip one end between AM and PM. Throws in 24-hour mode, which has no such control. */
|
|
506
|
+
toggleMeridiem(end: End): Promise<void>;
|
|
507
|
+
private type;
|
|
508
|
+
/** The two fields are addressed by position, which is the order they render in. */
|
|
509
|
+
private field;
|
|
510
|
+
/**
|
|
511
|
+
* One end's stepper. Both are mounted together in `datetime` mode, start first —
|
|
512
|
+
* the group labels are localized, so position is the addressable thing.
|
|
513
|
+
*/
|
|
514
|
+
private timePanel;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
export { WrDatePickerDayHarness, WrDatePickerHarness, WrDateRangePickerHarness };
|
|
518
|
+
export type { WrDatePickerDayHarnessFilters, WrDatePickerHarnessFilters, WrDatePickerTimeFields, WrDateRangePickerHarnessFilters };
|
|
@@ -135,6 +135,10 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
|
|
|
135
135
|
/** Live calendar ref while the date popover is open — lets the panel track
|
|
136
136
|
* the typed value in real time (not just on reopen). */
|
|
137
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;
|
|
138
142
|
/** Last value we pushed into the model ourselves — lets the sync effect
|
|
139
143
|
* skip the echo of our own edits (so a live keystroke's raw text is never
|
|
140
144
|
* reformatted mid-type). */
|
|
@@ -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 };
|
|
@@ -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 };
|