ngwr 11.1.0 → 12.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 +7 -7
- package/burger/styles/_index.scss +1 -1
- package/button/styles/_index.scss +2 -2
- package/calendar/styles/_index.scss +32 -12
- package/calendar-heatmap/styles/_index.scss +20 -0
- package/carousel/styles/_index.scss +23 -1
- package/cascader/styles/_index.scss +15 -3
- package/checkbox/styles/_index.scss +2 -2
- package/circular-text/styles/_index.scss +11 -0
- package/collapse/styles/_index.scss +2 -2
- package/color-picker/styles/_index.scss +3 -3
- package/command-palette/styles/_index.scss +12 -0
- package/compare/styles/_index.scss +18 -2
- package/context-menu/styles/_index.scss +21 -2
- package/date-picker/styles/_index.scss +5 -5
- package/descriptions/styles/_index.scss +1 -1
- package/drag-drop/styles/_index.scss +28 -1
- package/drawer/styles/_index.scss +37 -0
- package/dropdown/styles/_index.scss +2 -2
- package/event-calendar/styles/_index.scss +67 -10
- package/fesm2022/ngwr-action-sheet-testing.mjs +313 -0
- package/fesm2022/ngwr-action-sheet-testing.mjs.map +1 -0
- package/fesm2022/ngwr-action-sheet.mjs +3 -3
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-anchor.mjs +3 -3
- package/fesm2022/ngwr-aurora.mjs +3 -3
- package/fesm2022/ngwr-avatar.mjs +3 -3
- package/fesm2022/ngwr-back-top.mjs +3 -3
- package/fesm2022/ngwr-badge.mjs +6 -6
- package/fesm2022/ngwr-bar-chart-testing.mjs +107 -0
- package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-bar-chart.mjs +3 -3
- package/fesm2022/ngwr-blur-text-testing.mjs +203 -0
- package/fesm2022/ngwr-blur-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-blur-text.mjs +18 -4
- package/fesm2022/ngwr-blur-text.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow-testing.mjs +325 -0
- package/fesm2022/ngwr-border-glow-testing.mjs.map +1 -0
- package/fesm2022/ngwr-border-glow.mjs +4 -4
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +29 -17
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-burger.mjs +3 -3
- package/fesm2022/ngwr-button.mjs +6 -6
- package/fesm2022/ngwr-calendar-heatmap-testing.mjs +95 -0
- package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -0
- package/fesm2022/ngwr-calendar-heatmap.mjs +17 -5
- package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-calendar-testing.mjs +368 -0
- package/fesm2022/ngwr-calendar-testing.mjs.map +1 -0
- package/fesm2022/ngwr-calendar.mjs +228 -10
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +10 -10
- package/fesm2022/ngwr-card.mjs.map +1 -1
- package/fesm2022/ngwr-carousel.mjs +124 -24
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +60 -5
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +14 -6
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text-testing.mjs +230 -0
- package/fesm2022/ngwr-circular-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-circular-text.mjs +4 -4
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-click-spark.mjs +27 -7
- package/fesm2022/ngwr-click-spark.mjs.map +1 -1
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker-testing.mjs +452 -0
- package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -0
- package/fesm2022/ngwr-color-picker.mjs +126 -10
- package/fesm2022/ngwr-color-picker.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +14 -5
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-confetti.mjs +31 -6
- package/fesm2022/ngwr-confetti.mjs.map +1 -1
- package/fesm2022/ngwr-config.mjs +9 -0
- package/fesm2022/ngwr-config.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu-testing.mjs +30 -11
- package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
- package/fesm2022/ngwr-context-menu.mjs +358 -48
- package/fesm2022/ngwr-context-menu.mjs.map +1 -1
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +25 -9
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/{ngwr-date-adapter-fns.mjs → ngwr-date-adapters-fns.mjs} +37 -10
- package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -0
- package/fesm2022/{ngwr-date-adapter-luxon.mjs → ngwr-date-adapters-luxon.mjs} +5 -5
- package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -0
- package/fesm2022/ngwr-date-picker-testing.mjs +21 -85
- package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +119 -37
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/{ngwr-date-adapter.mjs → ngwr-date.mjs} +36 -10
- package/fesm2022/ngwr-date.mjs.map +1 -0
- package/fesm2022/ngwr-decrypt-text-testing.mjs +261 -0
- package/fesm2022/ngwr-decrypt-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-decrypt-text.mjs +9 -4
- package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog.mjs +73 -18
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +52 -5
- package/fesm2022/ngwr-divider.mjs.map +1 -1
- package/fesm2022/ngwr-donut-chart-testing.mjs +97 -0
- package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-donut-chart.mjs +7 -7
- package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +160 -11
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-drawer.mjs +156 -64
- package/fesm2022/ngwr-drawer.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown.mjs +58 -12
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar-testing.mjs +446 -0
- package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -0
- package/fesm2022/ngwr-event-calendar.mjs +66 -28
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-falling-text-testing.mjs +220 -0
- package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-falling-text.mjs +75 -46
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-form.mjs +32 -15
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text-testing.mjs +134 -0
- package/fesm2022/ngwr-fuzzy-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-fuzzy-text.mjs +21 -11
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge-testing.mjs +86 -0
- package/fesm2022/ngwr-gauge-testing.mjs.map +1 -0
- package/fesm2022/ngwr-gauge.mjs +3 -3
- package/fesm2022/ngwr-glitch-text-testing.mjs +215 -0
- package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-glitch-text.mjs +7 -7
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text-testing.mjs +258 -0
- package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-gradient-text.mjs +4 -4
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-hotkey.mjs +24 -9
- package/fesm2022/ngwr-hotkey.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +87 -1
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +69 -1
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +26 -15
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper-testing.mjs +200 -0
- package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -0
- package/fesm2022/ngwr-image-cropper.mjs +156 -11
- package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
- package/fesm2022/ngwr-input-number-testing.mjs +15 -10
- package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-number.mjs +89 -15
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp-testing.mjs +12 -6
- package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
- package/fesm2022/ngwr-input-otp.mjs +24 -5
- package/fesm2022/ngwr-input-otp.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +15 -15
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob-testing.mjs +220 -0
- package/fesm2022/ngwr-knob-testing.mjs.map +1 -0
- package/fesm2022/ngwr-knob.mjs +3 -3
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-lightbox-testing.mjs +223 -0
- package/fesm2022/ngwr-lightbox-testing.mjs.map +1 -0
- package/fesm2022/ngwr-lightbox.mjs +11 -4
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart-testing.mjs +119 -0
- package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-line-chart.mjs +73 -26
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +7 -7
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +7 -7
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-markdown.mjs +66 -8
- package/fesm2022/ngwr-markdown.mjs.map +1 -1
- package/fesm2022/ngwr-marquee-testing.mjs +336 -0
- package/fesm2022/ngwr-marquee-testing.mjs.map +1 -0
- package/fesm2022/ngwr-marquee.mjs +4 -4
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-media.mjs +3 -3
- package/fesm2022/ngwr-mention.mjs +108 -13
- package/fesm2022/ngwr-mention.mjs.map +1 -1
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-meter-group-testing.mjs +100 -0
- package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -0
- package/fesm2022/ngwr-meter-group.mjs +3 -3
- package/fesm2022/ngwr-overlay.mjs +34 -7
- package/fesm2022/ngwr-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination-testing.mjs +6 -6
- package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +17 -13
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-pipes.mjs +39 -26
- package/fesm2022/ngwr-pipes.mjs.map +1 -1
- package/fesm2022/ngwr-platform.mjs +9 -9
- package/fesm2022/ngwr-popconfirm.mjs +6 -6
- package/fesm2022/ngwr-popover-testing.mjs +7 -2
- package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
- package/fesm2022/ngwr-popover.mjs +169 -33
- package/fesm2022/ngwr-popover.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +3 -3
- package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
- package/fesm2022/ngwr-qr.mjs +42 -5
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-radio.mjs +6 -6
- package/fesm2022/ngwr-rating.mjs +3 -3
- package/fesm2022/ngwr-result.mjs +21 -30
- package/fesm2022/ngwr-result.mjs.map +1 -1
- package/fesm2022/ngwr-rotating-text-testing.mjs +220 -0
- package/fesm2022/ngwr-rotating-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-rotating-text.mjs +4 -4
- package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented-testing.mjs +14 -1
- package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
- package/fesm2022/ngwr-segmented.mjs +29 -6
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +227 -43
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text-testing.mjs +237 -0
- package/fesm2022/ngwr-shiny-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-shiny-text.mjs +11 -9
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-sidebar.mjs +31 -16
- package/fesm2022/ngwr-sidebar.mjs.map +1 -1
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +143 -14
- package/fesm2022/ngwr-slider.mjs.map +1 -1
- package/fesm2022/ngwr-sparkline-testing.mjs +76 -0
- package/fesm2022/ngwr-sparkline-testing.mjs.map +1 -0
- package/fesm2022/ngwr-sparkline.mjs +3 -3
- package/fesm2022/ngwr-speed-dial-testing.mjs +281 -0
- package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -0
- package/fesm2022/ngwr-speed-dial.mjs +27 -12
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splash-cursor-testing.mjs +89 -0
- package/fesm2022/ngwr-splash-cursor-testing.mjs.map +1 -0
- package/fesm2022/ngwr-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-split-text-testing.mjs +224 -0
- package/fesm2022/ngwr-split-text-testing.mjs.map +1 -0
- package/fesm2022/ngwr-split-text.mjs +31 -5
- package/fesm2022/ngwr-split-text.mjs.map +1 -1
- package/fesm2022/ngwr-splitter-testing.mjs +245 -0
- package/fesm2022/ngwr-splitter-testing.mjs.map +1 -0
- package/fesm2022/ngwr-splitter.mjs +3 -3
- package/fesm2022/ngwr-spotlight-card-testing.mjs +368 -0
- package/fesm2022/ngwr-spotlight-card-testing.mjs.map +1 -0
- package/fesm2022/ngwr-spotlight-card.mjs +7 -7
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +6 -6
- package/fesm2022/ngwr-star-border-testing.mjs +172 -0
- package/fesm2022/ngwr-star-border-testing.mjs.map +1 -0
- package/fesm2022/ngwr-star-border.mjs +4 -4
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-statistic.mjs +9 -9
- package/fesm2022/ngwr-stepper-testing.mjs +8 -8
- package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
- package/fesm2022/ngwr-stepper.mjs +33 -8
- package/fesm2022/ngwr-stepper.mjs.map +1 -1
- package/fesm2022/ngwr-storage.mjs +17 -5
- package/fesm2022/ngwr-storage.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +110 -40
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs-testing.mjs +11 -10
- package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +51 -11
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +3 -3
- package/fesm2022/ngwr-theme.mjs +181 -4
- package/fesm2022/ngwr-theme.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card-testing.mjs +190 -0
- package/fesm2022/ngwr-tilt-card-testing.mjs.map +1 -0
- package/fesm2022/ngwr-tilt-card.mjs +26 -8
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast.mjs +44 -15
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour-testing.mjs +173 -0
- package/fesm2022/ngwr-tour-testing.mjs.map +1 -0
- package/fesm2022/ngwr-tour.mjs +34 -10
- package/fesm2022/ngwr-tour.mjs.map +1 -1
- package/fesm2022/ngwr-transfer.mjs +3 -3
- package/fesm2022/ngwr-tree.mjs +36 -11
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter-testing.mjs +242 -0
- package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -0
- package/fesm2022/ngwr-typewriter.mjs +13 -5
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-utils.mjs +5 -2
- package/fesm2022/ngwr-utils.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 +4 -4
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves-testing.mjs +128 -0
- package/fesm2022/ngwr-waves-testing.mjs.map +1 -0
- package/fesm2022/ngwr-waves.mjs +4 -4
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/fesm2022/ngwr-window-testing.mjs +361 -0
- package/fesm2022/ngwr-window-testing.mjs.map +1 -0
- package/fesm2022/ngwr-window.mjs +175 -31
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/file-upload/styles/_index.scss +2 -2
- package/glitch-text/styles/_index.scss +27 -12
- package/i18n/en.json +71 -7
- package/i18n/ru.json +71 -7
- package/image-cropper/styles/_index.scss +19 -0
- package/input/styles/_index.scss +2 -2
- package/input-number/styles/_index.scss +2 -2
- package/input-otp/styles/_index.scss +9 -2
- package/knob/styles/_index.scss +1 -1
- package/lightbox/styles/_index.scss +16 -2
- package/line-chart/styles/_index.scss +28 -14
- package/list/styles/_index.scss +1 -1
- package/llms-full.txt +161 -19
- package/llms.txt +45 -10
- package/markdown/styles/_index.scss +3 -3
- package/mcp/api.js +6 -4
- package/mcp/catalog.js +40 -3
- package/mcp/providers.js +42 -0
- package/mcp/tools.js +22 -30
- package/meter-group/styles/_index.scss +1 -1
- package/overlay/styles/_index.scss +33 -1
- package/package.json +161 -12
- package/pagination/styles/_index.scss +23 -1
- package/popover/styles/_index.scss +16 -7
- package/progress/styles/_index.scss +1 -1
- package/radio/styles/_index.scss +2 -2
- package/rating/styles/_index.scss +1 -1
- package/schematics/collection.json +1 -1
- package/schematics/migrations/v12/index.js +65 -0
- package/schematics/migrations/v7/index.js +12 -1
- package/schematics/migrations/v8/index.js +10 -1
- package/schematics/migrations.json +5 -0
- package/schematics/ng-add/index.js +8 -3
- package/schematics/provider/index.js +80 -13
- package/schematics/use/index.js +9 -129
- package/schematics/use/rule.js +206 -0
- package/schematics/use/symbol-map.json +4 -4
- package/segmented/styles/_index.scss +14 -3
- package/select/styles/_index.scss +14 -2
- package/sidebar/styles/_index.scss +12 -10
- package/skills/ngwr/SKILL.md +117 -0
- package/skills/ngwr/references/catalog.md +212 -0
- package/skills/ngwr/references/setup.md +78 -0
- package/slider/styles/_index.scss +1 -1
- package/speed-dial/styles/_index.scss +1 -1
- package/stepper/styles/_index.scss +12 -3
- package/switch/styles/_index.scss +2 -2
- package/table/styles/_index.scss +61 -12
- package/tabs/styles/_index.scss +1 -1
- package/textarea/styles/_index.scss +1 -1
- package/theme/styles/_colors.scss +142 -56
- package/theme/styles/_dark.scss +46 -3
- package/theme/styles/_focus.scss +28 -5
- package/theme/styles/_mixins.scss +1 -1
- package/theme/styles/_variables.scss +67 -0
- package/transfer/styles/_index.scss +26 -3
- package/tree/styles/_index.scss +29 -6
- package/types/ngwr-action-sheet-testing.d.ts +260 -0
- package/types/ngwr-bar-chart-testing.d.ts +85 -0
- package/types/ngwr-blur-text-testing.d.ts +180 -0
- package/types/ngwr-blur-text.d.ts +20 -4
- package/types/ngwr-border-glow-testing.d.ts +219 -0
- package/types/ngwr-breadcrumbs.d.ts +17 -10
- package/types/ngwr-calendar-heatmap-testing.d.ts +79 -0
- package/types/ngwr-calendar-testing.d.ts +277 -0
- package/types/ngwr-calendar.d.ts +76 -0
- package/types/ngwr-carousel.d.ts +85 -6
- package/types/ngwr-cascader.d.ts +17 -0
- package/types/ngwr-checkbox.d.ts +13 -0
- package/types/ngwr-circular-text-testing.d.ts +196 -0
- package/types/ngwr-click-spark.d.ts +4 -0
- package/types/ngwr-color-picker-testing.d.ts +299 -0
- package/types/ngwr-color-picker.d.ts +34 -2
- package/types/ngwr-confetti.d.ts +8 -0
- package/types/ngwr-config.d.ts +10 -1
- package/types/ngwr-context-menu-testing.d.ts +24 -11
- package/types/ngwr-context-menu.d.ts +71 -1
- package/types/ngwr-counter.d.ts +1 -0
- package/types/{ngwr-date-adapter-fns.d.ts → ngwr-date-adapters-fns.d.ts} +33 -6
- package/types/{ngwr-date-adapter-luxon.d.ts → ngwr-date-adapters-luxon.d.ts} +1 -1
- package/types/ngwr-date-picker-testing.d.ts +17 -72
- package/types/ngwr-date-picker.d.ts +8 -4
- package/types/{ngwr-date-adapter.d.ts → ngwr-date.d.ts} +24 -5
- package/types/ngwr-decrypt-text-testing.d.ts +222 -0
- package/types/ngwr-dialog.d.ts +38 -1
- package/types/ngwr-divider.d.ts +25 -0
- package/types/ngwr-donut-chart-testing.d.ts +83 -0
- package/types/ngwr-donut-chart.d.ts +3 -3
- package/types/ngwr-drag-drop.d.ts +56 -2
- package/types/ngwr-drawer.d.ts +68 -5
- package/types/ngwr-dropdown.d.ts +9 -0
- package/types/ngwr-event-calendar-testing.d.ts +301 -0
- package/types/ngwr-event-calendar.d.ts +17 -8
- package/types/ngwr-falling-text-testing.d.ts +188 -0
- package/types/ngwr-falling-text.d.ts +1 -1
- package/types/ngwr-form.d.ts +12 -2
- package/types/ngwr-fuzzy-text-testing.d.ts +130 -0
- package/types/ngwr-gauge-testing.d.ts +71 -0
- package/types/ngwr-glitch-text-testing.d.ts +201 -0
- package/types/ngwr-gradient-text-testing.d.ts +186 -0
- package/types/ngwr-i18n.d.ts +13 -4
- package/types/ngwr-image-cropper-testing.d.ts +173 -0
- package/types/ngwr-image-cropper.d.ts +71 -5
- package/types/ngwr-input-number-testing.d.ts +15 -10
- package/types/ngwr-input-number.d.ts +44 -5
- package/types/ngwr-input-otp-testing.d.ts +12 -6
- package/types/ngwr-input-otp.d.ts +15 -1
- package/types/ngwr-knob-testing.d.ts +150 -0
- package/types/ngwr-lightbox-testing.d.ts +154 -0
- package/types/ngwr-lightbox.d.ts +6 -0
- package/types/ngwr-line-chart-testing.d.ts +93 -0
- package/types/ngwr-line-chart.d.ts +20 -3
- package/types/ngwr-markdown.d.ts +11 -0
- package/types/ngwr-marquee-testing.d.ts +280 -0
- package/types/ngwr-mention.d.ts +32 -0
- package/types/ngwr-meter-group-testing.d.ts +77 -0
- package/types/ngwr-overlay.d.ts +20 -1
- package/types/ngwr-pagination-testing.d.ts +4 -4
- package/types/ngwr-pipes.d.ts +1 -1
- package/types/ngwr-popover-testing.d.ts +7 -2
- package/types/ngwr-popover.d.ts +1 -0
- package/types/ngwr-result.d.ts +6 -0
- package/types/ngwr-rotating-text-testing.d.ts +191 -0
- package/types/ngwr-segmented-testing.d.ts +9 -0
- package/types/ngwr-segmented.d.ts +21 -1
- package/types/ngwr-select.d.ts +100 -6
- package/types/ngwr-shiny-text-testing.d.ts +165 -0
- package/types/ngwr-shiny-text.d.ts +4 -2
- package/types/ngwr-sidebar.d.ts +14 -5
- package/types/ngwr-slider.d.ts +84 -1
- package/types/ngwr-sparkline-testing.d.ts +69 -0
- package/types/ngwr-speed-dial-testing.d.ts +199 -0
- package/types/ngwr-speed-dial.d.ts +22 -3
- package/types/ngwr-splash-cursor-testing.d.ts +95 -0
- package/types/ngwr-split-text-testing.d.ts +209 -0
- package/types/ngwr-split-text.d.ts +21 -0
- package/types/ngwr-splitter-testing.d.ts +174 -0
- package/types/ngwr-spotlight-card-testing.d.ts +303 -0
- package/types/ngwr-star-border-testing.d.ts +135 -0
- package/types/ngwr-stepper-testing.d.ts +5 -5
- package/types/ngwr-stepper.d.ts +8 -0
- package/types/ngwr-storage.d.ts +1 -0
- package/types/ngwr-table.d.ts +114 -12
- package/types/ngwr-tabs-testing.d.ts +11 -10
- package/types/ngwr-tabs.d.ts +2 -0
- package/types/ngwr-theme.d.ts +82 -1
- package/types/ngwr-tilt-card-testing.d.ts +158 -0
- package/types/ngwr-tilt-card.d.ts +2 -0
- package/types/ngwr-toast.d.ts +14 -5
- package/types/ngwr-tour-testing.d.ts +143 -0
- package/types/ngwr-tour.d.ts +22 -4
- package/types/ngwr-tree.d.ts +12 -4
- package/types/ngwr-typewriter-testing.d.ts +211 -0
- package/types/ngwr-utils.d.ts +5 -2
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-waves-testing.d.ts +121 -0
- package/types/ngwr-window-testing.d.ts +263 -0
- package/types/ngwr-window.d.ts +66 -21
- package/typography/styles/_index.scss +1 -1
- package/window/styles/_index.scss +116 -42
- package/fesm2022/ngwr-date-adapter-fns.mjs.map +0 -1
- package/fesm2022/ngwr-date-adapter-luxon.mjs.map +0 -1
- package/fesm2022/ngwr-date-adapter.mjs.map +0 -1
|
@@ -0,0 +1,154 @@
|
|
|
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-lightbox>` a harness query matches. */
|
|
11
|
+
interface WrLightboxHarnessFilters extends BaseHarnessFilters {
|
|
12
|
+
/** Match the image's alt text — a string is an exact match, a RegExp is tested. */
|
|
13
|
+
readonly alt?: string | RegExp;
|
|
14
|
+
/** Match the caption shown under the full image. */
|
|
15
|
+
readonly caption?: string | RegExp;
|
|
16
|
+
/** Match only open (`true`) or only closed (`false`) lightboxes. */
|
|
17
|
+
readonly open?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @license
|
|
22
|
+
*
|
|
23
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
24
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Test harness for `<wr-lightbox>` — the thumbnail, and the full-size viewer it
|
|
29
|
+
* opens.
|
|
30
|
+
*
|
|
31
|
+
* The thumbnail is an element in your fixture and the viewer is a portal in the NGWR
|
|
32
|
+
* overlay container, so this is loaded from the normal fixture loader and reaches
|
|
33
|
+
* across for you — scoped by the id the trigger publishes as `aria-controls`, never
|
|
34
|
+
* by `.wr-lightbox-viewer`, which would answer with whichever lightbox opened first.
|
|
35
|
+
*
|
|
36
|
+
* **A closed lightbox has no viewer at all**, unlike the collapse or the speed dial:
|
|
37
|
+
* the overlay is created on open and disposed on close, so every viewer read here
|
|
38
|
+
* throws while it is shut rather than answering about a stale element.
|
|
39
|
+
*
|
|
40
|
+
* **`disablePreview` removes the button, not just its behaviour.** The thumbnail is
|
|
41
|
+
* then a bare `<img>` with nothing to click and nothing in the tab order, which is
|
|
42
|
+
* why {@link isInteractive} exists and why {@link open} explains itself rather than
|
|
43
|
+
* timing out on a missing element.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* const lightbox = await loader.getHarness(WrLightboxHarness.with({ alt: 'Mountain' }));
|
|
48
|
+
*
|
|
49
|
+
* await lightbox.open();
|
|
50
|
+
* expect(await lightbox.getFullSrc()).toBe('/photo.jpg');
|
|
51
|
+
*
|
|
52
|
+
* await lightbox.sendEscape();
|
|
53
|
+
* expect(await lightbox.isOpen()).toBe(false);
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @see https://ngwr.dev/guides/testing
|
|
57
|
+
*/
|
|
58
|
+
declare class WrLightboxHarness extends ComponentHarness {
|
|
59
|
+
static hostSelector: string;
|
|
60
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
61
|
+
static with(options?: WrLightboxHarnessFilters): HarnessPredicate<WrLightboxHarness>;
|
|
62
|
+
private readonly thumb;
|
|
63
|
+
private readonly trigger;
|
|
64
|
+
/**
|
|
65
|
+
* Whether the viewer is open, from the host's own modifier.
|
|
66
|
+
*
|
|
67
|
+
* The class rather than the overlay, because it is the answer that holds for a
|
|
68
|
+
* harness you are HOLDING: the viewer is disposed on close, and a query for it
|
|
69
|
+
* cannot tell "shut" apart from "never opened".
|
|
70
|
+
*/
|
|
71
|
+
isOpen(): Promise<boolean>;
|
|
72
|
+
/**
|
|
73
|
+
* Whether the thumbnail has settled — loaded OR failed.
|
|
74
|
+
*
|
|
75
|
+
* A failure counts on purpose: the loading state animates a shimmer and hides the
|
|
76
|
+
* image, so a broken `src` with no error path would shimmer for ever instead of
|
|
77
|
+
* falling back to its alt text. The two cases are deliberately not separated here,
|
|
78
|
+
* because the DOM does not separate them either.
|
|
79
|
+
*/
|
|
80
|
+
isLoading(): Promise<boolean>;
|
|
81
|
+
/** The thumbnail's alt text — the same string the viewer takes its name from. */
|
|
82
|
+
getAlt(): Promise<string>;
|
|
83
|
+
/**
|
|
84
|
+
* What the THUMBNAIL is showing: `preview` when one was given, `src` otherwise.
|
|
85
|
+
*
|
|
86
|
+
* Worth its own method because the two images are different files by design — a
|
|
87
|
+
* grid of thumbnails should not pull full-size originals — and because the
|
|
88
|
+
* thumbnail never swaps to `src` later. Compare with {@link getFullSrc}.
|
|
89
|
+
*/
|
|
90
|
+
getThumbSrc(): Promise<string>;
|
|
91
|
+
/** Whether the thumbnail can be clicked open at all (`disablePreview` off). */
|
|
92
|
+
isInteractive(): Promise<boolean>;
|
|
93
|
+
/** The trigger's accessible name — falls back to the alt text, then to the catalog. */
|
|
94
|
+
getOpenLabel(): Promise<string | null>;
|
|
95
|
+
/** Open the viewer. An already-open one is left alone; a non-interactive one throws. */
|
|
96
|
+
open(): Promise<void>;
|
|
97
|
+
/** Close the viewer through its ✕ button. An already-closed one is left alone. */
|
|
98
|
+
close(): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Click the full image — which closes the viewer.
|
|
101
|
+
*
|
|
102
|
+
* It looks like decoration and is not: the image is styled `cursor: zoom-out`, and
|
|
103
|
+
* that is a promise. It is deliberately NOT in the tab order, since the ✕ button,
|
|
104
|
+
* Escape, the backdrop and a swipe all do the same thing and all reach a keyboard —
|
|
105
|
+
* so this is a mouse affordance, and the only way to assert it still works.
|
|
106
|
+
*/
|
|
107
|
+
clickImage(): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Press Escape.
|
|
110
|
+
*
|
|
111
|
+
* Sent to the viewer, though it would arrive from anywhere: the overlay is fed by
|
|
112
|
+
* the CDK's keyboard dispatcher, which keeps one document listener and routes to
|
|
113
|
+
* the top-most overlay.
|
|
114
|
+
*/
|
|
115
|
+
sendEscape(): Promise<void>;
|
|
116
|
+
/** The full-size image's `src`. Throws while the viewer is closed. */
|
|
117
|
+
getFullSrc(): Promise<string>;
|
|
118
|
+
/** The caption under the full image, or `null` when there is none. Throws while closed. */
|
|
119
|
+
getCaption(): Promise<string | null>;
|
|
120
|
+
/** The name the viewer dialog announces — its alt text, or the catalog's fallback. */
|
|
121
|
+
getViewerLabel(): Promise<string | null>;
|
|
122
|
+
/** The ✕ button's accessible name. Throws while the viewer is closed. */
|
|
123
|
+
getCloseLabel(): Promise<string | null>;
|
|
124
|
+
/** Whether the viewer announces itself as a modal dialog. */
|
|
125
|
+
isModal(): Promise<boolean>;
|
|
126
|
+
/**
|
|
127
|
+
* Whether focus is inside the viewer, where the trap should be holding it.
|
|
128
|
+
*
|
|
129
|
+
* `role="dialog"` with `aria-modal` promises the page behind is out of reach, and a
|
|
130
|
+
* missing trap makes that a lie — Tab walks straight through the backdrop. Note
|
|
131
|
+
* that in a unit test the trap needs elements with a box to find anything tabbable,
|
|
132
|
+
* so a spec asserting this has to hand the DOM some dimensions first.
|
|
133
|
+
*/
|
|
134
|
+
isFocusTrapped(): Promise<boolean>;
|
|
135
|
+
/**
|
|
136
|
+
* Whether the trigger's `aria-controls` names THIS lightbox's viewer, and nothing
|
|
137
|
+
* else on the page.
|
|
138
|
+
*
|
|
139
|
+
* The reference only exists while the viewer does — an id naming an element that is
|
|
140
|
+
* not in the document is not a pairing, it is a dangling reference — so this is
|
|
141
|
+
* `false` for a closed lightbox by construction. Counted across the document too,
|
|
142
|
+
* because two viewers answering to one id hand every reference to the first.
|
|
143
|
+
*/
|
|
144
|
+
isViewerBound(): Promise<boolean>;
|
|
145
|
+
/** The caption without the open check — for filters, which must not throw. */
|
|
146
|
+
private readCaption;
|
|
147
|
+
/** The id the trigger currently points at, or `null` while the viewer is closed. */
|
|
148
|
+
private viewerId;
|
|
149
|
+
private requireViewer;
|
|
150
|
+
private viewerPart;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export { WrLightboxHarness };
|
|
154
|
+
export type { WrLightboxHarnessFilters };
|
package/types/ngwr-lightbox.d.ts
CHANGED
|
@@ -50,6 +50,12 @@ declare class WrLightbox {
|
|
|
50
50
|
readonly aspectRatio: _angular_core.InputSignal<string | number | null>;
|
|
51
51
|
protected readonly open: _angular_core.WritableSignal<boolean>;
|
|
52
52
|
protected readonly loaded: _angular_core.WritableSignal<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Id the trigger's `aria-controls` points at while the viewer is open.
|
|
55
|
+
*
|
|
56
|
+
* @internal Public so the host bindings can read it.
|
|
57
|
+
*/
|
|
58
|
+
protected readonly viewerId: string;
|
|
53
59
|
protected readonly classes: _angular_core.Signal<string>;
|
|
54
60
|
protected readonly panelTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
55
61
|
private readonly overlay;
|
|
@@ -0,0 +1,93 @@
|
|
|
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-line-chart>` a harness query matches. */
|
|
11
|
+
interface WrLineChartHarnessFilters extends BaseHarnessFilters {
|
|
12
|
+
/** Match the plot's accessible name. */
|
|
13
|
+
readonly ariaLabel?: string | RegExp;
|
|
14
|
+
/** Match a chart whose legend holds this series. */
|
|
15
|
+
readonly seriesLabel?: string | RegExp;
|
|
16
|
+
}
|
|
17
|
+
/** One row of the hover tooltip — a series and its value at the hovered index. */
|
|
18
|
+
interface WrLineChartTooltipRow {
|
|
19
|
+
readonly label: string;
|
|
20
|
+
readonly value: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @license
|
|
25
|
+
*
|
|
26
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
27
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Test harness for `<wr-line-chart>`.
|
|
32
|
+
*
|
|
33
|
+
* **The lines are paths and the paths are not assertable.** A `d` attribute is a
|
|
34
|
+
* rendering detail — it moves with the viewBox, the padding and the value range — so
|
|
35
|
+
* this harness counts the lines and reads everything TEXTUAL instead: the legend, the
|
|
36
|
+
* axis ticks, the x labels and the tooltip. Those are what a reader gets, and they
|
|
37
|
+
* are what breaks when the data wiring does.
|
|
38
|
+
*
|
|
39
|
+
* **The tooltip cannot be opened from a spec, and the reason is worth knowing.** It
|
|
40
|
+
* follows a `pointermove` over the plot, and the component turns the cursor's x into
|
|
41
|
+
* an index by measuring the plot's box — which jsdom reports as 0×0, so every
|
|
42
|
+
* synthetic move resolves to the same index or to none at all. There is deliberately
|
|
43
|
+
* no `hoverAt()`; {@link getTooltipRows} reads the tooltip when something else has
|
|
44
|
+
* opened it, which in practice means a browser-run harness.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const chart = await loader.getHarness(WrLineChartHarness);
|
|
49
|
+
*
|
|
50
|
+
* expect(await chart.getSeriesLabels()).toEqual(['Revenue', 'Costs']);
|
|
51
|
+
* expect(await chart.getLineCount()).toBe(2);
|
|
52
|
+
* expect(await chart.getXLabels()).toEqual(['Jan', 'Feb', 'Mar']);
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @see https://ngwr.dev/guides/testing
|
|
56
|
+
*/
|
|
57
|
+
declare class WrLineChartHarness extends ComponentHarness {
|
|
58
|
+
static hostSelector: string;
|
|
59
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
60
|
+
static with(options?: WrLineChartHarnessFilters): HarnessPredicate<WrLineChartHarness>;
|
|
61
|
+
/** The plot's accessible name — the only name the drawing has. */
|
|
62
|
+
getAccessibleName(): Promise<string | null>;
|
|
63
|
+
/** Whether the legend is rendered (`showLegend`, and at least one series). */
|
|
64
|
+
hasLegend(): Promise<boolean>;
|
|
65
|
+
/** The series names from the legend, in order. */
|
|
66
|
+
getSeriesLabels(): Promise<string[]>;
|
|
67
|
+
/**
|
|
68
|
+
* How many lines were drawn.
|
|
69
|
+
*
|
|
70
|
+
* Worth comparing with {@link getSeriesLabels}: the legend and the paths come from
|
|
71
|
+
* the same list, so a mismatch is a series that got filtered out of one of them.
|
|
72
|
+
*/
|
|
73
|
+
getLineCount(): Promise<number>;
|
|
74
|
+
/** How many point dots were drawn across every series (`showDots`). */
|
|
75
|
+
getDotCount(): Promise<number>;
|
|
76
|
+
/** Whether the horizontal grid lines are drawn (`showGrid`). */
|
|
77
|
+
hasGrid(): Promise<boolean>;
|
|
78
|
+
/** The y-axis tick labels, top to bottom as drawn. */
|
|
79
|
+
getYTicks(): Promise<string[]>;
|
|
80
|
+
/** The x-axis labels under the plot, in order. */
|
|
81
|
+
getXLabels(): Promise<string[]>;
|
|
82
|
+
/** Whether the hover tooltip is showing. */
|
|
83
|
+
hasTooltip(): Promise<boolean>;
|
|
84
|
+
/** The tooltip's heading — the x label of the hovered point — or `null` while it is closed. */
|
|
85
|
+
getTooltipLabel(): Promise<string | null>;
|
|
86
|
+
/** The tooltip's rows, one per series, or `[]` while it is closed. */
|
|
87
|
+
getTooltipRows(): Promise<WrLineChartTooltipRow[]>;
|
|
88
|
+
/** The plot's height in pixels, as the component writes it inline. */
|
|
89
|
+
getPlotHeight(): Promise<number>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export { WrLineChartHarness };
|
|
93
|
+
export type { WrLineChartHarnessFilters, WrLineChartTooltipRow };
|
|
@@ -55,7 +55,7 @@ declare class WrLineChart {
|
|
|
55
55
|
protected readonly hoveredIndex: _angular_core.WritableSignal<number | null>;
|
|
56
56
|
protected readonly resolvedSeries: _angular_core.Signal<{
|
|
57
57
|
label: string;
|
|
58
|
-
data: number[];
|
|
58
|
+
data: (number | null)[];
|
|
59
59
|
color: string;
|
|
60
60
|
}[]>;
|
|
61
61
|
protected readonly bounds: _angular_core.Signal<{
|
|
@@ -70,12 +70,29 @@ declare class WrLineChart {
|
|
|
70
70
|
}[]>;
|
|
71
71
|
protected readonly plotWidth: () => number;
|
|
72
72
|
protected readonly plotHeight: () => number;
|
|
73
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* The SVG path for a series — one subpath per unbroken run, so a hole in the data
|
|
75
|
+
* leaves a hole in the line rather than a straight segment across it.
|
|
76
|
+
*/
|
|
74
77
|
protected pathFor(series: {
|
|
75
|
-
data: readonly number[];
|
|
78
|
+
data: readonly (number | null)[];
|
|
76
79
|
}): string;
|
|
77
80
|
protected pointX(index: number): number;
|
|
78
81
|
protected pointY(value: number): number;
|
|
82
|
+
/**
|
|
83
|
+
* A point's x as a percentage of the host's width. The x-label strip and the SVG share
|
|
84
|
+
* that width — the drawing stretches to it — so this is the same space the tooltip and
|
|
85
|
+
* the labels are placed in, at any size.
|
|
86
|
+
*/
|
|
87
|
+
protected xPercent(index: number): number;
|
|
88
|
+
/**
|
|
89
|
+
* How wide an x label may be, as a percentage of the host's width: its own slot — half
|
|
90
|
+
* the distance to a neighbour on each side — cut back to what is left between its point
|
|
91
|
+
* and the end of the strip. Centring a label on its point says nothing about its WIDTH,
|
|
92
|
+
* and with no bound at all twelve month names printed over each other and the last one
|
|
93
|
+
* hung outside the chart. Past this the stylesheet ellipsises.
|
|
94
|
+
*/
|
|
95
|
+
protected xMaxPercent(index: number): number;
|
|
79
96
|
protected readonly hoverPoints: _angular_core.Signal<{
|
|
80
97
|
label: string;
|
|
81
98
|
value: number;
|
package/types/ngwr-markdown.d.ts
CHANGED
|
@@ -387,6 +387,17 @@ declare class WrMarkdownHighlight {
|
|
|
387
387
|
private fill;
|
|
388
388
|
/** `Map` iterates in insertion order, and `linesFor` re-inserts on read. */
|
|
389
389
|
private evict;
|
|
390
|
+
/**
|
|
391
|
+
* The same bound, one dimension out. `request` re-inserts a bucket it already
|
|
392
|
+
* holds, so the outer map iterates least-recently-REQUESTED first — and the
|
|
393
|
+
* component's effect asks for every code block in the document it is showing,
|
|
394
|
+
* so a language that stops being requested is one nothing renders any more.
|
|
395
|
+
*
|
|
396
|
+
* Read is deliberately NOT a touch here, unlike {@link linesFor} for the inner
|
|
397
|
+
* map: with the effect re-asking for every block, request order already tracks
|
|
398
|
+
* what is rendered, and nothing has needed the finer signal.
|
|
399
|
+
*/
|
|
400
|
+
private evictLanguage;
|
|
390
401
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrMarkdownHighlight, never>;
|
|
391
402
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<WrMarkdownHighlight>;
|
|
392
403
|
}
|
|
@@ -0,0 +1,280 @@
|
|
|
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-marquee>` a harness query matches. */
|
|
11
|
+
interface WrMarqueeHarnessFilters extends BaseHarnessFilters {
|
|
12
|
+
/**
|
|
13
|
+
* Match the region's accessible name — the only thing telling two strips on one page
|
|
14
|
+
* apart. A string is an exact match, a RegExp is tested.
|
|
15
|
+
*
|
|
16
|
+
* Every marquee has one: with no `[ariaLabel]` and no catalog it is the literal
|
|
17
|
+
* `'Marquee'`, so this never matches on absence.
|
|
18
|
+
*/
|
|
19
|
+
readonly ariaLabel?: string | RegExp;
|
|
20
|
+
}
|
|
21
|
+
/** Narrows which `.wr-marquee__item` a harness query matches. */
|
|
22
|
+
interface WrMarqueeItemHarnessFilters extends BaseHarnessFilters {
|
|
23
|
+
/** Match what the entry announces — see `WrMarqueeItemHarness.getAccessibleName()`. */
|
|
24
|
+
readonly name?: string | RegExp;
|
|
25
|
+
/** Match only linked (`true`) or only plain (`false`) entries. */
|
|
26
|
+
readonly link?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/** One linked entry of the strip, as it announces itself and as it navigates. */
|
|
29
|
+
interface WrMarqueeLink {
|
|
30
|
+
/** The `href` exactly as the item declared it, unresolved. */
|
|
31
|
+
readonly href: string | null;
|
|
32
|
+
/**
|
|
33
|
+
* The link's accessible name. Never `null` in practice — an entry with nothing to call
|
|
34
|
+
* itself falls back to the catalog's `marquee.link`, because a bare "link" was what a
|
|
35
|
+
* screen reader used to announce for every unlabelled logo in the strip.
|
|
36
|
+
*/
|
|
37
|
+
readonly name: string | null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @license
|
|
42
|
+
*
|
|
43
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
44
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Test harness for one entry of a `<wr-marquee>`.
|
|
49
|
+
*
|
|
50
|
+
* **Reach these through `WrMarqueeHarness.getItems()`, which scopes them to the first
|
|
51
|
+
* copy.** The strip duplicates its whole sequence to make the loop seamless, so asking
|
|
52
|
+
* the document loader for all of these returns one per entry per copy — at least twice
|
|
53
|
+
* everything, and a count assertion that quietly multiplies. The parent harness is the
|
|
54
|
+
* only place that knows which copy is the original.
|
|
55
|
+
*
|
|
56
|
+
* An entry is built from an image or from a projected template, and it may or may not be
|
|
57
|
+
* a link. That is the reason to ask a harness rather than the DOM: the same question —
|
|
58
|
+
* what does this announce, is it decoration — is answered from a different attribute in
|
|
59
|
+
* each of those shapes, and {@link getAccessibleName} and {@link isDecorative} pick the
|
|
60
|
+
* right one.
|
|
61
|
+
*
|
|
62
|
+
* @see https://ngwr.dev/guides/testing
|
|
63
|
+
*/
|
|
64
|
+
declare class WrMarqueeItemHarness extends ComponentHarness {
|
|
65
|
+
static hostSelector: string;
|
|
66
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
67
|
+
static with(options?: WrMarqueeItemHarnessFilters): HarnessPredicate<WrMarqueeItemHarness>;
|
|
68
|
+
private readonly link;
|
|
69
|
+
private readonly image;
|
|
70
|
+
private readonly node;
|
|
71
|
+
/**
|
|
72
|
+
* What this entry announces, without the caller needing to know how it was built.
|
|
73
|
+
*
|
|
74
|
+
* A linked entry answers with the link's own name, which is the end of a four-step
|
|
75
|
+
* ladder — the item's `ariaLabel`, then its `title`, then an image's `alt`, then the
|
|
76
|
+
* catalog's `marquee.link`. An unlinked image answers with its `alt`, where `''` means
|
|
77
|
+
* the logo is decoration and announces nothing. Anything else answers with its text.
|
|
78
|
+
*/
|
|
79
|
+
getAccessibleName(): Promise<string | null>;
|
|
80
|
+
/** Whether this entry became a link — `[items]` carries `href` per entry, optionally. */
|
|
81
|
+
isLink(): Promise<boolean>;
|
|
82
|
+
/** The `href` exactly as the entry declared it, unresolved, or `null` when it is not a link. */
|
|
83
|
+
getHref(): Promise<string | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Whether the link opens in a new tab AND says so safely: `target="_blank"` with both
|
|
86
|
+
* `noreferrer` and `noopener` in `rel`.
|
|
87
|
+
*
|
|
88
|
+
* One question rather than two, because half of it is a reverse-tabnabbing hole that
|
|
89
|
+
* nothing visual would ever show. The library hard-codes the safe pair, so this is a
|
|
90
|
+
* regression check on the template rather than on the caller's data.
|
|
91
|
+
*
|
|
92
|
+
* Throws for an entry that is not a link, where a `false` would read as "it opens in
|
|
93
|
+
* this tab" — an answer about safety that is not true of anything.
|
|
94
|
+
*/
|
|
95
|
+
opensInNewTab(): Promise<boolean>;
|
|
96
|
+
/**
|
|
97
|
+
* Whether this entry's content is kept out of the accessible tree, leaving whatever
|
|
98
|
+
* wraps it to do the announcing.
|
|
99
|
+
*
|
|
100
|
+
* The marker depends on how the entry was built, which is the whole reason to ask here:
|
|
101
|
+
* a projected template inside a named link carries `aria-hidden`, so the link's own name
|
|
102
|
+
* is not read twice, while an image says the same thing with `alt=""`. It describes the
|
|
103
|
+
* CONTENT — a decorative logo inside a link is still announced, by the link, and that
|
|
104
|
+
* name is {@link getAccessibleName}.
|
|
105
|
+
*
|
|
106
|
+
* Throws for an entry that rendered neither, which should not happen — every entry of
|
|
107
|
+
* `[items]` is one or the other.
|
|
108
|
+
*/
|
|
109
|
+
isDecorative(): Promise<boolean>;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @license
|
|
114
|
+
*
|
|
115
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
116
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
117
|
+
*/
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Test harness for `<wr-marquee>`.
|
|
121
|
+
*
|
|
122
|
+
* **Almost everything worth asserting about a marquee is structural, not animated.** The
|
|
123
|
+
* strip duplicates its sequence so the loop has no seam, and only the first copy is left
|
|
124
|
+
* in the accessible tree — {@link getAnnouncedCopyCount} is the assertion that catches
|
|
125
|
+
* the regression that matters, because a duplicate leaking in makes a screen reader read
|
|
126
|
+
* the whole logo strip twice and changes nothing on screen. The other half is the naming
|
|
127
|
+
* ladder on linked entries, which is real logic with a real bug in its history: the
|
|
128
|
+
* fallback used to be the hard-coded English word "link".
|
|
129
|
+
*
|
|
130
|
+
* **Every list query is scoped to the first copy**, and that is the reason to use
|
|
131
|
+
* {@link getItems} rather than a raw `.wr-marquee__item` query, which returns at least
|
|
132
|
+
* twice as many elements as there are entries.
|
|
133
|
+
*
|
|
134
|
+
* Nothing about the motion is offered. The track's `translate3d` is written only when the
|
|
135
|
+
* measured sequence is wider than zero, so it never appears in a test at all, and in a
|
|
136
|
+
* browser it is one frame of a loop that is already stale by the time an assertion reads
|
|
137
|
+
* it. `[speed]` and `[direction]` reach the DOM in no form. Neither does the hover state:
|
|
138
|
+
* pausing flips a private signal with no class, attribute or property behind it, so a
|
|
139
|
+
* `hover()` here would fire events that provably change nothing readable. And the
|
|
140
|
+
* reduced-motion freeze is a CSS `!important` rule with no counterpart in TypeScript,
|
|
141
|
+
* which means the DOM is identical either way — see `getGap` for what a harness can
|
|
142
|
+
* honestly read off a stylesheet-driven component, and why it reads it where it does.
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```ts
|
|
146
|
+
* const loader = TestbedHarnessEnvironment.loader(fixture);
|
|
147
|
+
* const strip = await loader.getHarness(WrMarqueeHarness);
|
|
148
|
+
*
|
|
149
|
+
* expect(await strip.getAnnouncedCopyCount()).toBe(1);
|
|
150
|
+
* expect(await strip.getItemCount()).toBe(logos.length);
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* @see https://ngwr.dev/guides/testing
|
|
154
|
+
*/
|
|
155
|
+
declare class WrMarqueeHarness extends ComponentHarness {
|
|
156
|
+
static hostSelector: string;
|
|
157
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
158
|
+
static with(options?: WrMarqueeHarnessFilters): HarnessPredicate<WrMarqueeHarness>;
|
|
159
|
+
private readonly copies;
|
|
160
|
+
/**
|
|
161
|
+
* The name the region announces.
|
|
162
|
+
*
|
|
163
|
+
* Pins the i18n ladder end to end: `'Marquee'` with no catalog loaded, the consumer's
|
|
164
|
+
* `[ariaLabel]` when one is given, the localized string under a catalog. A landmark
|
|
165
|
+
* with no name is an axe failure, so this is what keeps the `region` legitimate rather
|
|
166
|
+
* than a decoration a screen-reader user is invited to jump to and finds unnamed.
|
|
167
|
+
*/
|
|
168
|
+
getAccessibleName(): Promise<string | null>;
|
|
169
|
+
/**
|
|
170
|
+
* The landmark role the strip claims.
|
|
171
|
+
*
|
|
172
|
+
* Static in the template and one attribute away from being dropped in a refactor, which
|
|
173
|
+
* is exactly why a consumer asserting their page's landmark structure should be able to
|
|
174
|
+
* see it from here.
|
|
175
|
+
*/
|
|
176
|
+
getRole(): Promise<string | null>;
|
|
177
|
+
/**
|
|
178
|
+
* How many copies of the sequence are rendered.
|
|
179
|
+
*
|
|
180
|
+
* The seamless loop is built by repeating the whole list until it covers the container,
|
|
181
|
+
* so the count is decided by measurement — which means it stays at the floor of 2 in a
|
|
182
|
+
* test with no layout, whatever the container would really be. Assert `>= 2`; the
|
|
183
|
+
* growth needs a browser.
|
|
184
|
+
*/
|
|
185
|
+
getCopyCount(): Promise<number>;
|
|
186
|
+
/**
|
|
187
|
+
* How many copies are left in the accessible tree. Must be exactly 1.
|
|
188
|
+
*
|
|
189
|
+
* The one assertion here that catches a silent regression: every copy after the first
|
|
190
|
+
* carries `aria-hidden="true"`, and losing that makes a screen reader read the whole
|
|
191
|
+
* strip once per copy while the page looks unchanged.
|
|
192
|
+
*
|
|
193
|
+
* Note the first copy carries the literal `aria-hidden="false"` rather than no
|
|
194
|
+
* attribute at all, so this compares against the string `'true'` — testing the
|
|
195
|
+
* attribute for presence would count nothing at all as announced.
|
|
196
|
+
*/
|
|
197
|
+
getAnnouncedCopyCount(): Promise<number>;
|
|
198
|
+
/** The entries of the first copy, in order — one per entry of `[items]`. */
|
|
199
|
+
getItems(): Promise<WrMarqueeItemHarness[]>;
|
|
200
|
+
/**
|
|
201
|
+
* How many entries the strip drew, counting the first copy only.
|
|
202
|
+
*
|
|
203
|
+
* One per entry of `[items]` — the mapping a consumer's own data pipeline is really
|
|
204
|
+
* being tested for.
|
|
205
|
+
*/
|
|
206
|
+
getItemCount(): Promise<number>;
|
|
207
|
+
/**
|
|
208
|
+
* The `alt` of each image in the first copy, in order.
|
|
209
|
+
*
|
|
210
|
+
* `null` in this list is the thing to look for: it means the attribute is MISSING, which
|
|
211
|
+
* is a serious axe violation and announces the file name. An empty string is the
|
|
212
|
+
* opposite — a deliberately decorative logo — and the template's `alt || ''` is what
|
|
213
|
+
* keeps the two apart. A method typed `string[]` would have had to flatten them.
|
|
214
|
+
*/
|
|
215
|
+
getImageAlts(): Promise<(string | null)[]>;
|
|
216
|
+
/**
|
|
217
|
+
* Every linked entry of the first copy: where it goes and what it announces.
|
|
218
|
+
*
|
|
219
|
+
* The name is the interesting half. It walks a ladder ending in the catalog's
|
|
220
|
+
* `marquee.link`, so an unlabelled logo announces a localized word rather than nothing
|
|
221
|
+
* — real component logic rather than an echo of the input.
|
|
222
|
+
*/
|
|
223
|
+
getLinks(): Promise<WrMarqueeLink[]>;
|
|
224
|
+
/**
|
|
225
|
+
* Whether the edge fades are on.
|
|
226
|
+
*
|
|
227
|
+
* The fades themselves are `::before` / `::after` gradients, which no unit environment
|
|
228
|
+
* can see — so the modifier class is the observable, and it is public API a consumer
|
|
229
|
+
* may be styling against in any case.
|
|
230
|
+
*/
|
|
231
|
+
hasFade(): Promise<boolean>;
|
|
232
|
+
/**
|
|
233
|
+
* The fade colour as the component passed it through — a CSS value such as
|
|
234
|
+
* `'var(--wr-color-success)'`, not a resolved colour — or `null` when none was given.
|
|
235
|
+
*
|
|
236
|
+
* Worth asserting next to {@link hasFade}: a colour with no fade modifier renders
|
|
237
|
+
* nothing at all, which is a consumer mistake this pairing makes visible.
|
|
238
|
+
*/
|
|
239
|
+
getFadeColor(): Promise<string | null>;
|
|
240
|
+
/**
|
|
241
|
+
* Whether entries scale up under the pointer.
|
|
242
|
+
*
|
|
243
|
+
* A `:hover` transform, so again the modifier is the only honest read — and it earns
|
|
244
|
+
* its place by doing more than the name suggests: it also changes the strip's vertical
|
|
245
|
+
* padding, so a lost class shifts the layout as well as the hover.
|
|
246
|
+
*/
|
|
247
|
+
hasScaleOnHover(): Promise<boolean>;
|
|
248
|
+
/** The gap between entries in pixels — the seam width the stylesheet reads. */
|
|
249
|
+
getGap(): Promise<number>;
|
|
250
|
+
/**
|
|
251
|
+
* The entry height in pixels.
|
|
252
|
+
*
|
|
253
|
+
* It drives the image height AND the entry font size, so a binding that stops arriving
|
|
254
|
+
* collapses the whole strip rather than merely resizing it.
|
|
255
|
+
*/
|
|
256
|
+
getItemHeight(): Promise<number>;
|
|
257
|
+
/**
|
|
258
|
+
* Read a custom property off the host's inline `style`, rather than through
|
|
259
|
+
* `getCssValue()`.
|
|
260
|
+
*
|
|
261
|
+
* Not a jsdom workaround — the opposite. The stylesheet declares its own
|
|
262
|
+
* `--wr-marquee-gap: 32px` and `--wr-marquee-height: 28px` on `.wr-marquee`, so a
|
|
263
|
+
* computed read in a real browser answers with the stylesheet's default when the host
|
|
264
|
+
* binding is the very thing that broke. The inline value is what the component wrote,
|
|
265
|
+
* and nothing else can forge it.
|
|
266
|
+
*/
|
|
267
|
+
private hostStyle;
|
|
268
|
+
/**
|
|
269
|
+
* Parse a `<n>px` custom property, refusing anything that lost its unit.
|
|
270
|
+
*
|
|
271
|
+
* The refusal is the point. `[gap]` and `[itemHeight]` are numbers that the host binding
|
|
272
|
+
* turns into lengths, and the stylesheet uses them raw — a bare `32` is an invalid
|
|
273
|
+
* declaration, so the property falls back to the stylesheet default and the strip looks
|
|
274
|
+
* merely a little different. A `parseFloat` would report 32 either way and hide it.
|
|
275
|
+
*/
|
|
276
|
+
private pixels;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export { WrMarqueeHarness, WrMarqueeItemHarness };
|
|
280
|
+
export type { WrMarqueeHarnessFilters, WrMarqueeItemHarnessFilters, WrMarqueeLink };
|
package/types/ngwr-mention.d.ts
CHANGED
|
@@ -65,6 +65,12 @@ declare class WrMention<T extends WrMentionItem = WrMentionItem> {
|
|
|
65
65
|
private readonly isBrowser;
|
|
66
66
|
private overlayRef;
|
|
67
67
|
private panelRef;
|
|
68
|
+
/**
|
|
69
|
+
* Where the caret sits INSIDE the field — its offset from the field's
|
|
70
|
+
* top-left corner, plus the height of the line it is on. Mutated in place by
|
|
71
|
+
* `open()`, never replaced: `caretAnchor()` closes over this object.
|
|
72
|
+
*/
|
|
73
|
+
private readonly caretOffset;
|
|
68
74
|
private state;
|
|
69
75
|
private readonly activeIndex;
|
|
70
76
|
private readonly filteredItems;
|
|
@@ -113,6 +119,27 @@ declare class WrMention<T extends WrMentionItem = WrMentionItem> {
|
|
|
113
119
|
private activate;
|
|
114
120
|
private filter;
|
|
115
121
|
private setActive;
|
|
122
|
+
/**
|
|
123
|
+
* The overlay's anchor: the caret's line box, grown by the gap the panel
|
|
124
|
+
* keeps from the text, as a zero-WIDTH virtual origin in viewport
|
|
125
|
+
* coordinates. Inflating the rect rather than passing `offsetY` is what keeps
|
|
126
|
+
* `withPush` honest — CDK applies a position offset as a `transform` AFTER it
|
|
127
|
+
* has clamped, so a pushed panel would land the offset off the screen edge.
|
|
128
|
+
*
|
|
129
|
+
* Live getters, not a snapshot, and that is the whole of the scroll fix.
|
|
130
|
+
* `getCaretCoordinates` answers in viewport coordinates, which a
|
|
131
|
+
* `GlobalPositionStrategy` froze at the instant of the keystroke: the panel
|
|
132
|
+
* then stayed pinned to the screen while the page scrolled out from under it
|
|
133
|
+
* (150px of scroll, 150px of drift, ending up over unrelated content). CDK
|
|
134
|
+
* re-reads a virtual origin on every `apply()`, so pinning it to the FIELD's
|
|
135
|
+
* live rect is what turns `reposition()` into a real re-anchor.
|
|
136
|
+
*
|
|
137
|
+
* Only the caret's offset inside the field is captured up front. Measuring it
|
|
138
|
+
* runs the mirror-div pass in `caret.ts` — a full layout read, far too
|
|
139
|
+
* expensive to repeat per scroll event — and it cannot change without a
|
|
140
|
+
* keystroke, which re-enters `open()` anyway.
|
|
141
|
+
*/
|
|
142
|
+
private caretAnchor;
|
|
116
143
|
private open;
|
|
117
144
|
private close;
|
|
118
145
|
private commit;
|
|
@@ -123,6 +150,11 @@ declare class WrMention<T extends WrMentionItem = WrMentionItem> {
|
|
|
123
150
|
/**
|
|
124
151
|
* Overlay panel rendered by {@link WrMention}. Not intended for
|
|
125
152
|
* direct use — the directive instantiates it via a ComponentPortal.
|
|
153
|
+
*
|
|
154
|
+
* @internal — the same tag its twin `WrPopconfirmPanel` already carried. It says
|
|
155
|
+
* the intent; it does not by itself keep the class out of the generated API
|
|
156
|
+
* tables, because `WrTableFilter` and `WrTableSort` are tagged AND documented —
|
|
157
|
+
* see `EXPORTED_BUT_INTERNAL` in `scripts/lib/extract-api.ts`.
|
|
126
158
|
*/
|
|
127
159
|
declare class WrMentionPanel {
|
|
128
160
|
readonly items: _angular_core.InputSignal<readonly WrMentionItem[]>;
|