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
package/types/ngwr-affix.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Stick-on-scroll directive. Combines native CSS `position: sticky` with
|
|
5
|
-
* an `IntersectionObserver`-driven
|
|
5
|
+
* an `IntersectionObserver`-driven `wr-affix--active` state class, so consumers
|
|
6
6
|
* can style the element differently while it's pinned (e.g. add a
|
|
7
7
|
* shadow, change the background, shrink the height).
|
|
8
8
|
*
|
|
@@ -35,6 +35,12 @@ declare class WrAffix {
|
|
|
35
35
|
private readonly host;
|
|
36
36
|
private readonly destroyRef;
|
|
37
37
|
private readonly isBrowser;
|
|
38
|
+
/**
|
|
39
|
+
* `afterNextRender`'s callback is not an injection context, and the observer
|
|
40
|
+
* cannot exist before the sentinel it watches — so the effect that rebuilds it
|
|
41
|
+
* is handed the injector explicitly.
|
|
42
|
+
*/
|
|
43
|
+
private readonly injector;
|
|
38
44
|
constructor();
|
|
39
45
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrAffix, never>;
|
|
40
46
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrAffix, "[wrAffix]", never, { "offsetTop": { "alias": "wrAffixOffsetTop"; "required": false; "isSignal": true; }; }, { "affixChange": "wrAffixChange"; }, never, never, true, never>;
|
package/types/ngwr-anchor.d.ts
CHANGED
|
@@ -32,6 +32,13 @@ interface WrAnchorLink {
|
|
|
32
32
|
*/
|
|
33
33
|
declare class WrAnchor {
|
|
34
34
|
readonly links: _angular_core.InputSignal<readonly WrAnchorLink[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Accessible name for the navigation landmark. Falls back to `anchor.label`,
|
|
37
|
+
* then `'Table of contents'` — it used to be that English string, hard-coded
|
|
38
|
+
* on the host, in a landmark a screen reader reads out on every page.
|
|
39
|
+
*/
|
|
40
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
41
|
+
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
35
42
|
/** Pixel offset subtracted on scroll — for sticky headers. @default 0 */
|
|
36
43
|
readonly offset: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
37
44
|
/** Highlight an item when its target's top is within this many px of the offset line. @default 80 */
|
|
@@ -46,7 +53,7 @@ declare class WrAnchor {
|
|
|
46
53
|
constructor();
|
|
47
54
|
protected onClick(id: string, event: MouseEvent): void;
|
|
48
55
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrAnchor, never>;
|
|
49
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrAnchor, "wr-anchor", never, { "links": { "alias": "links"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "hitArea": { "alias": "hitArea"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
56
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrAnchor, "wr-anchor", never, { "links": { "alias": "links"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "hitArea": { "alias": "hitArea"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
50
57
|
}
|
|
51
58
|
|
|
52
59
|
export { WrAnchor };
|
package/types/ngwr-avatar.d.ts
CHANGED
|
@@ -58,11 +58,13 @@ declare class WrAvatar {
|
|
|
58
58
|
*/
|
|
59
59
|
readonly url: _angular_core.InputSignal<string | null>;
|
|
60
60
|
/**
|
|
61
|
-
* Alt text for the image.
|
|
61
|
+
* Alt text for the image. Falls back to `avatar.alt`, then `'Avatar'` — pass
|
|
62
|
+
* the person's name where you have it, since that is what a reader wants.
|
|
62
63
|
*
|
|
63
|
-
* @default
|
|
64
|
+
* @default null
|
|
64
65
|
*/
|
|
65
|
-
readonly alt: _angular_core.InputSignal<string>;
|
|
66
|
+
readonly alt: _angular_core.InputSignal<string | null>;
|
|
67
|
+
protected readonly resolvedAlt: _angular_core.Signal<string>;
|
|
66
68
|
/**
|
|
67
69
|
* Corner treatment. `rounded` (default) is a soft rounded square,
|
|
68
70
|
* `circle` is the classic profile avatar, `squircle` is the iOS look.
|
|
@@ -77,11 +79,19 @@ declare class WrAvatar {
|
|
|
77
79
|
*/
|
|
78
80
|
readonly size: _angular_core.InputSignal<WrAvatarSize>;
|
|
79
81
|
protected readonly loaded: _angular_core.WritableSignal<boolean>;
|
|
82
|
+
/**
|
|
83
|
+
* Whether the image failed. Without this the spinner spun forever on a broken
|
|
84
|
+
* URL — the one state where an avatar is guaranteed to have projected initials
|
|
85
|
+
* worth showing instead.
|
|
86
|
+
*/
|
|
87
|
+
protected readonly failed: _angular_core.WritableSignal<boolean>;
|
|
88
|
+
constructor();
|
|
80
89
|
protected readonly resolved: _angular_core.Signal<ResolvedCssSize>;
|
|
81
90
|
protected readonly cssSize: _angular_core.Signal<string>;
|
|
82
91
|
protected readonly pxSize: _angular_core.Signal<number | null>;
|
|
83
92
|
protected readonly classes: _angular_core.Signal<string>;
|
|
84
93
|
protected onImageLoad(): void;
|
|
94
|
+
protected onImageError(): void;
|
|
85
95
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrAvatar, never>;
|
|
86
96
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrAvatar, "wr-avatar", never, { "url": { "alias": "url"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
87
97
|
}
|
|
@@ -32,12 +32,28 @@ declare class WrBarChart {
|
|
|
32
32
|
readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
33
33
|
/** Explicit max value. `0` = auto. @default 0 */
|
|
34
34
|
readonly max: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* A datum's value, with anything non-finite read as `0`.
|
|
37
|
+
*
|
|
38
|
+
* One `NaN` used to take out the whole chart rather than its own bar:
|
|
39
|
+
* `Math.max(...values)` is `NaN` as soon as one value is, so the scale fell
|
|
40
|
+
* back to `1` and every OTHER bar was asked for a height of `value * 100`%.
|
|
41
|
+
* The bad bar also printed the literal text `NaN` above itself.
|
|
42
|
+
*/
|
|
43
|
+
private static value;
|
|
35
44
|
protected readonly resolvedMax: _angular_core.Signal<number>;
|
|
36
45
|
protected readonly bars: _angular_core.Signal<{
|
|
37
46
|
label: string;
|
|
38
47
|
value: number;
|
|
39
48
|
color: string;
|
|
40
49
|
heightPercent: number;
|
|
50
|
+
/**
|
|
51
|
+
* The bar's accessible name. The label and the value sit in separate
|
|
52
|
+
* rows, so a screen reader read every number and then every label with
|
|
53
|
+
* nothing tying the two together — and with `showValues` off the
|
|
54
|
+
* numbers were not in the accessible tree at all.
|
|
55
|
+
*/
|
|
56
|
+
name: string;
|
|
41
57
|
}[]>;
|
|
42
58
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrBarChart, never>;
|
|
43
59
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrBarChart, "wr-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
package/types/ngwr-burger.d.ts
CHANGED
|
@@ -20,8 +20,12 @@ import * as _angular_core from '@angular/core';
|
|
|
20
20
|
declare class WrBurger {
|
|
21
21
|
/** Two-way bindable open state. Drives the hamburger ↔ close morph. @default false */
|
|
22
22
|
readonly open: _angular_core.ModelSignal<boolean>;
|
|
23
|
-
/**
|
|
24
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Accessible name for the toggle button. Falls back to `burger.label`, then
|
|
25
|
+
* `'Toggle menu'`.
|
|
26
|
+
*/
|
|
27
|
+
readonly label: _angular_core.InputSignal<string | null>;
|
|
28
|
+
protected readonly resolvedLabel: _angular_core.Signal<string>;
|
|
25
29
|
/** Disable the toggle. @default false */
|
|
26
30
|
readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
27
31
|
protected readonly classes: _angular_core.Signal<{
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
|
|
2
|
+
import { WrColor } from 'ngwr/theme';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @license
|
|
6
|
+
*
|
|
7
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
8
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** Narrows which `<wr-btn>` a harness query matches. */
|
|
12
|
+
interface WrButtonHarnessFilters extends BaseHarnessFilters {
|
|
13
|
+
/** Match the button's visible label — a string is an exact match, a RegExp is tested. */
|
|
14
|
+
readonly text?: string | RegExp;
|
|
15
|
+
/** Match only enabled (`false`) or only disabled (`true`) buttons. */
|
|
16
|
+
readonly disabled?: boolean;
|
|
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 `<wr-btn>` — drive a button from a consumer's spec without
|
|
28
|
+
* knowing how it is built.
|
|
29
|
+
*
|
|
30
|
+
* Everything this reads is public API: the `wr-btn` selector, the
|
|
31
|
+
* `.wr-btn__label` element, the `wr-btn--*` modifiers and the disabled attributes.
|
|
32
|
+
* `<wr-btn>` is deliberately NOT always a native `<button>` — the element form
|
|
33
|
+
* exists so a link or a custom host can be one — which is why the disabled state
|
|
34
|
+
* is answered from the ATTRIBUTES rather than from `el.disabled`, a property half
|
|
35
|
+
* of those shapes do not have.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const loader = TestbedHarnessEnvironment.loader(fixture);
|
|
40
|
+
* const save = await loader.getHarness(WrButtonHarness.with({ text: 'Save' }));
|
|
41
|
+
*
|
|
42
|
+
* expect(await save.isDisabled()).toBe(false);
|
|
43
|
+
* await save.click();
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @see https://ngwr.dev/guides/testing
|
|
47
|
+
*/
|
|
48
|
+
declare class WrButtonHarness extends ComponentHarness {
|
|
49
|
+
/** Every shape the button ships in: the element, and the two attribute forms. */
|
|
50
|
+
static hostSelector: string;
|
|
51
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
52
|
+
static with(options?: WrButtonHarnessFilters): HarnessPredicate<WrButtonHarness>;
|
|
53
|
+
/** The button's visible label, trimmed. Icons and the spinner are not part of it. */
|
|
54
|
+
getText(): Promise<string>;
|
|
55
|
+
/**
|
|
56
|
+
* Whether the button refuses interaction.
|
|
57
|
+
*
|
|
58
|
+
* Both signals are read, because the component sets them for different reasons:
|
|
59
|
+
* `disabled` lands on every shape (it is inert on a custom element, which is
|
|
60
|
+
* exactly why `aria-disabled` exists as well, but it is the attribute that is
|
|
61
|
+
* always there). A button that is merely LOADING also answers `true` here, and
|
|
62
|
+
* that is not a quirk — by default a loading button refuses clicks.
|
|
63
|
+
*/
|
|
64
|
+
isDisabled(): Promise<boolean>;
|
|
65
|
+
/** Whether the button is showing its loading spinner. */
|
|
66
|
+
isLoading(): Promise<boolean>;
|
|
67
|
+
/**
|
|
68
|
+
* The intent colour, or `null` when the button carries none.
|
|
69
|
+
*
|
|
70
|
+
* Matched against `WR_COLORS` rather than "the first `wr-btn--*` class": the
|
|
71
|
+
* modifier list also carries the size, the shape, `outlined`, `block`, `loading`
|
|
72
|
+
* and the icon position, so a pattern match answers `icon` as readily as
|
|
73
|
+
* `primary`.
|
|
74
|
+
*/
|
|
75
|
+
getColor(): Promise<WrColor | null>;
|
|
76
|
+
/** Click the button. A disabled button is still clicked — assert, do not assume. */
|
|
77
|
+
click(): Promise<void>;
|
|
78
|
+
/** Move keyboard focus to the button. */
|
|
79
|
+
focus(): Promise<void>;
|
|
80
|
+
/** Whether the button currently has focus. */
|
|
81
|
+
isFocused(): Promise<boolean>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export { WrButtonHarness };
|
|
85
|
+
export type { WrButtonHarnessFilters };
|
package/types/ngwr-button.d.ts
CHANGED
|
@@ -68,13 +68,26 @@ type WrButtonIconPosition = 'start' | 'end';
|
|
|
68
68
|
* @see https://ngwr.dev/reference/components/button
|
|
69
69
|
*/
|
|
70
70
|
declare class WrButton {
|
|
71
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Color variant. Omit for the neutral default style.
|
|
73
|
+
*
|
|
74
|
+
* Deliberately NOT configurable app-wide: the library's own chrome binds
|
|
75
|
+
* `[color]="isCurrent ? 'primary' : null"`, where `null` means neutral, and a
|
|
76
|
+
* configured intent would repaint every one of those buttons. See `WrConfig`.
|
|
77
|
+
*
|
|
78
|
+
* @default null
|
|
79
|
+
*/
|
|
72
80
|
readonly color: _angular_core.InputSignal<"primary" | "secondary" | "success" | "warning" | "danger" | "info" | "light" | "medium" | "dark" | null>;
|
|
73
|
-
/** Size variant. @default 'md' */
|
|
74
|
-
readonly size: _angular_core.InputSignal<WrButtonSize>;
|
|
75
81
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
82
|
+
* Size variant. Unset, it resolves through
|
|
83
|
+
* `provideWrConfig({ button: { size } })` and then to `md`.
|
|
84
|
+
*
|
|
85
|
+
* @default 'md'
|
|
86
|
+
*/
|
|
87
|
+
readonly size: _angular_core.InputSignal<WrButtonSize | null>;
|
|
88
|
+
/**
|
|
89
|
+
* Corner treatment — `rounded`, `pill` or `squircle`. `null` (default) falls
|
|
90
|
+
* back to `rounded`. Inside a `<wr-btn-group shape="…">`, the group's shape
|
|
78
91
|
* ALWAYS wins over this input — the group enforces a consistent corner
|
|
79
92
|
* treatment across its members.
|
|
80
93
|
*
|
|
@@ -106,13 +119,16 @@ declare class WrButton {
|
|
|
106
119
|
*/
|
|
107
120
|
readonly isDisabledWhenLoading: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
108
121
|
private readonly group;
|
|
122
|
+
/** The size, or the app-wide default, or `md`. @see useConfigValue */
|
|
123
|
+
protected readonly resolvedSize: _angular_core.Signal<WrButtonSize>;
|
|
109
124
|
/**
|
|
110
|
-
* Resolved shape. Inside a `<wr-btn-group>`, the group ALWAYS wins —
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
125
|
+
* Resolved shape. Inside a `<wr-btn-group>`, the group ALWAYS wins — child
|
|
126
|
+
* `[shape]` is ignored entirely so the group reads as one coherent control.
|
|
127
|
+
* Outside a group, the button's own `[shape]` is used, falling back to
|
|
128
|
+
* `rounded`. Not config-resolved: see `WrConfig` for why a boolean cannot
|
|
129
|
+
* express this three-valued input.
|
|
114
130
|
*/
|
|
115
|
-
protected readonly
|
|
131
|
+
protected readonly resolvedShape: _angular_core.Signal<WrButtonShape>;
|
|
116
132
|
private readonly hostEl;
|
|
117
133
|
/**
|
|
118
134
|
* Whether this instance is the `<wr-btn>` ELEMENT rather than the attribute
|
|
@@ -27,6 +27,13 @@ interface Cell {
|
|
|
27
27
|
*/
|
|
28
28
|
declare class WrCalendarHeatmap {
|
|
29
29
|
readonly data: _angular_core.InputSignal<readonly WrHeatmapDatum[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Accessible name of the whole grid. Its cells are bare spans whose `title` a screen
|
|
32
|
+
* reader on a role-less element does not read, so the map used to be several hundred
|
|
33
|
+
* anonymous nodes with no name. Falls back to `calendarHeatmap.label`.
|
|
34
|
+
*/
|
|
35
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
36
|
+
protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
|
|
30
37
|
/** Last day to render. @default today */
|
|
31
38
|
readonly endDate: _angular_core.InputSignal<string | Date | null>;
|
|
32
39
|
/** Number of weeks (columns) to render. @default 53 */
|
|
@@ -41,7 +48,14 @@ declare class WrCalendarHeatmap {
|
|
|
41
48
|
readonly emptyColor: _angular_core.InputSignal<string>;
|
|
42
49
|
/** Show the weekday + month labels around the grid. @default true */
|
|
43
50
|
readonly showLabels: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
44
|
-
|
|
51
|
+
private readonly locale;
|
|
52
|
+
/**
|
|
53
|
+
* Weekday names from the locale rather than a hard-coded English list — the row order is
|
|
54
|
+
* Sunday-first, matching the grid's own alignment, so 7 Jan 2024 (a Sunday) is the
|
|
55
|
+
* reference. Rows without a label stay blank on purpose: seven labels do not fit.
|
|
56
|
+
*/
|
|
57
|
+
protected readonly weekdayLabels: _angular_core.Signal<readonly string[]>;
|
|
58
|
+
private readonly monthNames;
|
|
45
59
|
protected readonly cells: _angular_core.Signal<readonly Cell[]>;
|
|
46
60
|
protected readonly monthLabels: _angular_core.Signal<{
|
|
47
61
|
label: string;
|
|
@@ -51,7 +65,7 @@ declare class WrCalendarHeatmap {
|
|
|
51
65
|
protected colorFor(intensity: number): string;
|
|
52
66
|
protected opacityFor(intensity: number): number;
|
|
53
67
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCalendarHeatmap, never>;
|
|
54
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCalendarHeatmap, "wr-calendar-heatmap", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; "weeks": { "alias": "weeks"; "required": false; "isSignal": true; }; "cellSize": { "alias": "cellSize"; "required": false; "isSignal": true; }; "cellGap": { "alias": "cellGap"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "emptyColor": { "alias": "emptyColor"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
68
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCalendarHeatmap, "wr-calendar-heatmap", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; "weeks": { "alias": "weeks"; "required": false; "isSignal": true; }; "cellSize": { "alias": "cellSize"; "required": false; "isSignal": true; }; "cellGap": { "alias": "cellGap"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "emptyColor": { "alias": "emptyColor"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
55
69
|
}
|
|
56
70
|
|
|
57
71
|
export { WrCalendarHeatmap };
|
package/types/ngwr-calendar.d.ts
CHANGED
|
@@ -68,6 +68,7 @@ declare class WrCalendar {
|
|
|
68
68
|
/** Disable interaction entirely. @default false */
|
|
69
69
|
readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
70
70
|
private readonly adapter;
|
|
71
|
+
private readonly dir;
|
|
71
72
|
private readonly host;
|
|
72
73
|
private readonly injector;
|
|
73
74
|
/** Currently displayed month (any date inside it). */
|
|
@@ -134,6 +135,15 @@ declare class WrCalendar {
|
|
|
134
135
|
private focusActiveCell;
|
|
135
136
|
/** Used by the template's `track` expression. */
|
|
136
137
|
protected trackByTime(_: number, date: Date): number;
|
|
138
|
+
/**
|
|
139
|
+
* The key as the GRID sees it.
|
|
140
|
+
*
|
|
141
|
+
* Arrow keys follow visual order, and a calendar grid mirrors under
|
|
142
|
+
* `dir="rtl"`: the day to the visual right of today is yesterday. Only the
|
|
143
|
+
* inline pair swaps — Up/Down step a week either way, and PageUp/PageDown and
|
|
144
|
+
* Home/End are semantic rather than physical.
|
|
145
|
+
*/
|
|
146
|
+
private inlineKey;
|
|
137
147
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCalendar, never>;
|
|
138
148
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCalendar, "wr-calendar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "autoFocus": { "alias": "autoFocus"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "date": "dateChange"; "range": "rangeChange"; }, never, never, true, never>;
|
|
139
149
|
}
|
|
@@ -0,0 +1,257 @@
|
|
|
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-carousel>` a harness query matches. */
|
|
11
|
+
interface WrCarouselHarnessFilters extends BaseHarnessFilters {
|
|
12
|
+
/**
|
|
13
|
+
* Match the carousel's accessible name — a string is an exact match, a RegExp
|
|
14
|
+
* is tested.
|
|
15
|
+
*
|
|
16
|
+
* This is the RESOLVED name, so it matches whatever the page announces: an
|
|
17
|
+
* `ariaLabel` the consumer passed, the `carousel.label` entry of the active
|
|
18
|
+
* `ngwr/i18n` catalog, or the built-in `'Carousel'` when a consumer named
|
|
19
|
+
* neither. A carousel is never nameless, so this option never excludes
|
|
20
|
+
* everything.
|
|
21
|
+
*/
|
|
22
|
+
readonly ariaLabel?: string | RegExp;
|
|
23
|
+
/** Match a carousel holding exactly this many `<wr-carousel-slide>` children. */
|
|
24
|
+
readonly slideCount?: number;
|
|
25
|
+
/** Match a carousel one of whose slides carries this text — exact for a string, tested for a RegExp. */
|
|
26
|
+
readonly slideText?: string | RegExp;
|
|
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 `<wr-carousel>` — drive the strip the way someone on the page
|
|
38
|
+
* drives it.
|
|
39
|
+
*
|
|
40
|
+
* Everything it reads is public API: the `.wr-carousel__*` elements, the dots'
|
|
41
|
+
* `aria-current`, and the `aria-roledescription` the viewport and each slide
|
|
42
|
+
* publish. Two things are worth knowing before writing an assertion against it:
|
|
43
|
+
*
|
|
44
|
+
* - **The slides do not say which one is showing.** A `<wr-carousel-slide>` carries
|
|
45
|
+
* `role="group"` and `aria-roledescription="slide"` and nothing else — no
|
|
46
|
+
* `aria-current`, no `aria-hidden` on the ones off-screen. The current slide is
|
|
47
|
+
* published in exactly two places, the dot carrying `aria-current="true"` and the
|
|
48
|
+
* track's own offset, and {@link getActiveIndex} reads them in that order. There
|
|
49
|
+
* is likewise no live region: the component announces a move to nobody, so a
|
|
50
|
+
* harness cannot report one.
|
|
51
|
+
* - **It never drags.** The swipe the component supports is a touch gesture
|
|
52
|
+
* measured against the viewport's own width, and jsdom has no layout — that width
|
|
53
|
+
* is 0, so the "20% of the viewport" threshold is 0 too and EVERY drag clears it,
|
|
54
|
+
* a 1px twitch included. The result says nothing about a real finger, and the spec
|
|
55
|
+
* pins that artifact rather than pretending otherwise. Every move here goes
|
|
56
|
+
* through the arrow buttons and the dots instead, which is the accessible path
|
|
57
|
+
* anyway. `carousel.spec.ts` is where the gesture itself is pinned, by staging the
|
|
58
|
+
* touch events and declaring an `offsetWidth`.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* const loader = TestbedHarnessEnvironment.loader(fixture);
|
|
63
|
+
* const gallery = await loader.getHarness(WrCarouselHarness.with({ ariaLabel: 'Gallery' }));
|
|
64
|
+
*
|
|
65
|
+
* expect(await gallery.getSlideCount()).toBe(3);
|
|
66
|
+
* await gallery.next();
|
|
67
|
+
* expect(await gallery.getActiveIndex()).toBe(1);
|
|
68
|
+
*
|
|
69
|
+
* await gallery.goTo(2);
|
|
70
|
+
* expect(await gallery.getActiveSlideText()).toBe('Dunes');
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* @see https://ngwr.dev/guides/testing
|
|
74
|
+
*/
|
|
75
|
+
declare class WrCarouselHarness extends ComponentHarness {
|
|
76
|
+
static hostSelector: string;
|
|
77
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
78
|
+
static with(options?: WrCarouselHarnessFilters): HarnessPredicate<WrCarouselHarness>;
|
|
79
|
+
/**
|
|
80
|
+
* The role the strip announces — `group`, which is what lets
|
|
81
|
+
* `aria-roledescription` mean anything.
|
|
82
|
+
*
|
|
83
|
+
* Read off the VIEWPORT rather than the host, and that is the whole point of the
|
|
84
|
+
* pairing: `aria-roledescription` is dropped on an element with no semantic role,
|
|
85
|
+
* and the host element (`<wr-carousel>`) has none.
|
|
86
|
+
*/
|
|
87
|
+
getRole(): Promise<string | null>;
|
|
88
|
+
/** How the strip describes itself to a screen reader — `carousel`. */
|
|
89
|
+
getRoleDescription(): Promise<string | null>;
|
|
90
|
+
/**
|
|
91
|
+
* The carousel's accessible name.
|
|
92
|
+
*
|
|
93
|
+
* The RESOLVED one, which is the only one the page has: the `ariaLabel` input
|
|
94
|
+
* defaults to `null` and the component runs it through the `ngwr/i18n` catalog
|
|
95
|
+
* (`carousel.label`, falling back to `'Carousel'`), so a consumer who passed
|
|
96
|
+
* nothing still gets a named group and this still answers. Reporting the raw
|
|
97
|
+
* input would say `null` about a carousel that announces itself perfectly well.
|
|
98
|
+
*/
|
|
99
|
+
getAccessibleName(): Promise<string | null>;
|
|
100
|
+
/** The accessible name of the previous-slide button. Throws when the arrows are not rendered. */
|
|
101
|
+
getPreviousLabel(): Promise<string | null>;
|
|
102
|
+
/** The accessible name of the next-slide button. Throws when the arrows are not rendered. */
|
|
103
|
+
getNextLabel(): Promise<string | null>;
|
|
104
|
+
/**
|
|
105
|
+
* The accessible name of the dot group — what names the row of dots as a set
|
|
106
|
+
* rather than leaving a screen reader with N unexplained buttons.
|
|
107
|
+
*
|
|
108
|
+
* Throws when the dots are not rendered: there is no group to name then, and a
|
|
109
|
+
* `null` would read like a group that lost its label.
|
|
110
|
+
*/
|
|
111
|
+
getPaginationLabel(): Promise<string | null>;
|
|
112
|
+
/**
|
|
113
|
+
* What each slide announces itself as — `slide`, on every one of them, in DOM
|
|
114
|
+
* order.
|
|
115
|
+
*
|
|
116
|
+
* The one piece of ARIA the slides carry, and the reason it is worth asking: it
|
|
117
|
+
* is set on the slide component's own host, so a slide reaching the page through
|
|
118
|
+
* some other element would come back `null` here while the carousel kept working.
|
|
119
|
+
*/
|
|
120
|
+
getSlideRoleDescriptions(): Promise<(string | null)[]>;
|
|
121
|
+
/** How many slides the carousel holds. */
|
|
122
|
+
getSlideCount(): Promise<number>;
|
|
123
|
+
/** The text of every slide, in DOM order. */
|
|
124
|
+
getSlideTexts(): Promise<string[]>;
|
|
125
|
+
/**
|
|
126
|
+
* Which slide is showing, as a zero-based index.
|
|
127
|
+
*
|
|
128
|
+
* Taken from the dot carrying `aria-current="true"` whenever the dots are
|
|
129
|
+
* rendered — that attribute is the only thing on the page that tells a screen
|
|
130
|
+
* reader where in the strip it has got to, so it is the answer that matters —
|
|
131
|
+
* and derived from the track's rendered offset when they are not, `[showDots]`
|
|
132
|
+
* being off and a single-slide carousel both dropping the strip entirely.
|
|
133
|
+
*
|
|
134
|
+
* That fallback takes the MAGNITUDE of the offset on purpose. The transform is
|
|
135
|
+
* physical while the slides sit on the inline axis, so a mirrored carousel paints
|
|
136
|
+
* `translateX(100%)` for the very slide an LTR one paints `translateX(-100%)`
|
|
137
|
+
* for; signed, this reported slide -1 for a perfectly healthy RTL carousel.
|
|
138
|
+
*
|
|
139
|
+
* Throws on a carousel with no slides at all — nothing is showing there, and `0`
|
|
140
|
+
* would read like the first slide.
|
|
141
|
+
*/
|
|
142
|
+
getActiveIndex(): Promise<number>;
|
|
143
|
+
/** The text of the slide that is showing. Throws on a carousel with no slides. */
|
|
144
|
+
getActiveSlideText(): Promise<string>;
|
|
145
|
+
/**
|
|
146
|
+
* The track's rendered offset, as a percentage of one viewport: `-100` for the
|
|
147
|
+
* second slide of an LTR carousel, `+100` for the second slide of a mirrored one.
|
|
148
|
+
*
|
|
149
|
+
* Read off the inline `style` attribute rather than through `getCssValue()`,
|
|
150
|
+
* because the percentage only survives where the component wrote it. jsdom hands
|
|
151
|
+
* a declared `transform` straight back through `getComputedStyle`, so
|
|
152
|
+
* `getCssValue()` answers correctly HERE and would stop the moment the same
|
|
153
|
+
* harness ran against a real browser, which resolves the property to a pixel
|
|
154
|
+
* matrix — a green unit test would be hiding it. Mid-drag the component writes
|
|
155
|
+
* `translateX(calc(-100% + 12px))` and this reports the settled `-100`: the pixel
|
|
156
|
+
* half is the finger's own displacement, which is physical in both directions and
|
|
157
|
+
* belongs to no slide.
|
|
158
|
+
*
|
|
159
|
+
* Worth asserting next to {@link getActiveIndex}: it is the same fact painted
|
|
160
|
+
* instead of announced, and a carousel that lights the right dot while parking
|
|
161
|
+
* the track in blank space is exactly the failure nobody sees in a spec.
|
|
162
|
+
*/
|
|
163
|
+
getTrackOffsetPercent(): Promise<number>;
|
|
164
|
+
/** Whether the prev / next arrows are on the page. Both are dropped together. */
|
|
165
|
+
hasArrows(): Promise<boolean>;
|
|
166
|
+
/** Whether the dot strip is on the page. */
|
|
167
|
+
hasDots(): Promise<boolean>;
|
|
168
|
+
/** How many dots are rendered — one per slide, or `0` while the strip is hidden. */
|
|
169
|
+
getDotCount(): Promise<number>;
|
|
170
|
+
/**
|
|
171
|
+
* The accessible name of every dot, in order — `'Go to slide 1'`, … resolved
|
|
172
|
+
* through the `ngwr/i18n` catalog.
|
|
173
|
+
*
|
|
174
|
+
* A dot is a bare button with no text of its own, so this label is all a screen
|
|
175
|
+
* reader has to tell one from another. `[]` when the strip is hidden, matching
|
|
176
|
+
* {@link getDotCount}.
|
|
177
|
+
*/
|
|
178
|
+
getDotLabels(): Promise<(string | null)[]>;
|
|
179
|
+
/**
|
|
180
|
+
* Click the next-slide arrow.
|
|
181
|
+
*
|
|
182
|
+
* "Next" is the next SLIDE, not the next thing on the right: the buttons keep
|
|
183
|
+
* their semantics under `dir="rtl"` and only the travel under them turns around.
|
|
184
|
+
* At the last slide this wraps to the first one, unless `[loop]` is off — in
|
|
185
|
+
* which case it legitimately does nothing, so nothing is asserted about the move.
|
|
186
|
+
*/
|
|
187
|
+
next(): Promise<void>;
|
|
188
|
+
/** Click the previous-slide arrow. Wraps to the last slide unless `[loop]` is off. */
|
|
189
|
+
previous(): Promise<void>;
|
|
190
|
+
/**
|
|
191
|
+
* Jump to a slide by clicking its dot — the only way the page offers to reach a
|
|
192
|
+
* slide directly.
|
|
193
|
+
*
|
|
194
|
+
* Throws when the dots are hidden (the component's own `goTo()` is still there
|
|
195
|
+
* for a spec holding the instance, but nothing on the page can be clicked) and
|
|
196
|
+
* throws on an index no slide has, rather than clicking nothing and leaving the
|
|
197
|
+
* carousel where it was.
|
|
198
|
+
*/
|
|
199
|
+
goTo(index: number): Promise<void>;
|
|
200
|
+
/**
|
|
201
|
+
* Move the pointer onto the carousel, which is what HOLDS autoplay.
|
|
202
|
+
*
|
|
203
|
+
* Aimed at the host and not the viewport, deliberately: the arrows and the dots
|
|
204
|
+
* are the viewport's SIBLINGS, so a viewport-scoped hover would let a slide
|
|
205
|
+
* change under a cursor that is aiming at an arrow.
|
|
206
|
+
*/
|
|
207
|
+
hover(): Promise<void>;
|
|
208
|
+
/** Move the pointer away again, releasing the hold. */
|
|
209
|
+
mouseAway(): Promise<void>;
|
|
210
|
+
/**
|
|
211
|
+
* Put keyboard focus on the first control the carousel renders — the previous
|
|
212
|
+
* arrow, or the first dot when the arrows are hidden.
|
|
213
|
+
*
|
|
214
|
+
* This is the keyboard half of the autoplay hold: WCAG 2.2.2 wants a way to stop
|
|
215
|
+
* moving content, and hovering is not one for someone who never touches a mouse,
|
|
216
|
+
* so the component listens for `focusin` on its host as well. Focus lands on the
|
|
217
|
+
* carousel's OWN controls; anything focusable a slide happens to project is not
|
|
218
|
+
* this harness's business, though in a browser it would hold autoplay just the
|
|
219
|
+
* same.
|
|
220
|
+
*
|
|
221
|
+
* Note what this is NOT: the dot of the slide showing. The dots are ordinary
|
|
222
|
+
* buttons with no roving `tabindex`, so each of them is a tab stop of its own and
|
|
223
|
+
* the first one a Tab press meets is the prev arrow whatever slide is current —
|
|
224
|
+
* two different questions, answered here and by {@link getActiveIndex}.
|
|
225
|
+
*
|
|
226
|
+
* Throws when the carousel renders no controls at all, because then there is
|
|
227
|
+
* nothing for a Tab press to land on and no keyboard mechanism to assert.
|
|
228
|
+
*/
|
|
229
|
+
focus(): Promise<void>;
|
|
230
|
+
/**
|
|
231
|
+
* Take focus off whichever of the carousel's controls holds it, releasing the
|
|
232
|
+
* hold {@link focus} started.
|
|
233
|
+
*
|
|
234
|
+
* Throws when none of them is focused: `focusout` is what the component listens
|
|
235
|
+
* for, and blurring an element that never had focus fires nothing — a quiet
|
|
236
|
+
* no-op here surfaces as an autoplay assertion failing three lines later.
|
|
237
|
+
*/
|
|
238
|
+
blur(): Promise<void>;
|
|
239
|
+
/** Whether one of the carousel's own controls holds focus — which is what holds autoplay. */
|
|
240
|
+
isFocused(): Promise<boolean>;
|
|
241
|
+
/** The element that carries the carousel's role and name. */
|
|
242
|
+
private viewport;
|
|
243
|
+
/** The moving strip, whose inline transform is where the carousel IS. */
|
|
244
|
+
private track;
|
|
245
|
+
private slides;
|
|
246
|
+
private dots;
|
|
247
|
+
/**
|
|
248
|
+
* Every control the carousel renders itself, in the order a Tab press meets
|
|
249
|
+
* them: the two arrows, then the dots.
|
|
250
|
+
*/
|
|
251
|
+
private controls;
|
|
252
|
+
/** One arrow, or a failure naming both reasons it might not be there. */
|
|
253
|
+
private nav;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export { WrCarouselHarness };
|
|
257
|
+
export type { WrCarouselHarnessFilters };
|