ngwr 15.0.1 → 15.2.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/anchor/styles/_index.scss +13 -2
- package/bits/aurora/styles/_rules.scss +11 -0
- package/bits/dot-grid/dot-grid.scss +1 -0
- package/bits/dot-grid/styles/_index.scss +8 -0
- package/bits/dot-grid/styles/_rules.scss +54 -0
- package/bits/iridescence/iridescence.scss +1 -0
- package/bits/iridescence/styles/_index.scss +8 -0
- package/bits/iridescence/styles/_rules.scss +72 -0
- package/bits/marquee/styles/_rules.scss +7 -3
- package/bits/ripple-grid/ripple-grid.scss +1 -0
- package/bits/ripple-grid/styles/_index.scss +8 -0
- package/bits/ripple-grid/styles/_rules.scss +63 -0
- package/bits/spotlight-card/styles/_rules.scss +7 -4
- package/bits/star-border/styles/_rules.scss +5 -2
- package/bits/threads/styles/_index.scss +8 -0
- package/bits/threads/styles/_rules.scss +76 -0
- package/bits/threads/threads.scss +1 -0
- package/bits/waves/styles/_rules.scss +8 -1
- package/charts/bar-chart/styles/_index.scss +607 -7
- package/charts/boxplot-chart/styles/_index.scss +297 -0
- package/charts/bullet-chart/styles/_index.scss +268 -0
- package/charts/calendar-heatmap/styles/_index.scss +25 -3
- package/charts/candlestick-chart/styles/_index.scss +307 -0
- package/charts/chart-legend/styles/_index.scss +143 -0
- package/charts/core/styles/_index.scss +30 -0
- package/charts/donut-chart/styles/_index.scss +39 -3
- package/charts/funnel-chart/styles/_index.scss +237 -0
- package/charts/gauge/styles/_index.scss +4 -2
- package/charts/heatmap-chart/styles/_index.scss +329 -0
- package/charts/line-chart/styles/_index.scss +141 -8
- package/charts/meter-group/styles/_index.scss +44 -13
- package/charts/radar-chart/styles/_index.scss +206 -0
- package/charts/scatter-chart/styles/_index.scss +245 -0
- package/charts/sparkline/styles/_index.scss +10 -1
- package/charts/treemap-chart/styles/_index.scss +215 -0
- package/charts/waterfall-chart/styles/_index.scss +321 -0
- package/collapse/styles/_index.scss +6 -1
- package/fesm2022/ngwr-affix.mjs +3 -3
- package/fesm2022/ngwr-alert.mjs +3 -3
- package/fesm2022/ngwr-anchor.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-bits-aurora.mjs +30 -38
- package/fesm2022/ngwr-bits-aurora.mjs.map +1 -1
- package/fesm2022/ngwr-bits-blur-text.mjs +3 -3
- package/fesm2022/ngwr-bits-border-glow-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-border-glow.mjs +11 -5
- package/fesm2022/ngwr-bits-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-bits-circular-text.mjs +3 -3
- package/fesm2022/ngwr-bits-click-spark.mjs +3 -3
- package/fesm2022/ngwr-bits-confetti.mjs +3 -3
- package/fesm2022/ngwr-bits-decrypt-text.mjs +3 -3
- package/fesm2022/ngwr-bits-dot-grid-testing.mjs +40 -0
- package/fesm2022/ngwr-bits-dot-grid-testing.mjs.map +1 -0
- package/fesm2022/ngwr-bits-dot-grid.mjs +482 -0
- package/fesm2022/ngwr-bits-dot-grid.mjs.map +1 -0
- package/fesm2022/ngwr-bits-falling-text.mjs +3 -3
- package/fesm2022/ngwr-bits-fuzzy-text.mjs +3 -3
- package/fesm2022/ngwr-bits-glitch-text.mjs +3 -3
- package/fesm2022/ngwr-bits-gradient-text.mjs +3 -3
- package/fesm2022/ngwr-bits-iridescence-testing.mjs +31 -0
- package/fesm2022/ngwr-bits-iridescence-testing.mjs.map +1 -0
- package/fesm2022/ngwr-bits-iridescence.mjs +591 -0
- package/fesm2022/ngwr-bits-iridescence.mjs.map +1 -0
- package/fesm2022/ngwr-bits-marquee-testing.mjs +1 -1
- package/fesm2022/ngwr-bits-marquee-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-marquee.mjs +7 -7
- package/fesm2022/ngwr-bits-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-bits-ripple-grid-testing.mjs +40 -0
- package/fesm2022/ngwr-bits-ripple-grid-testing.mjs.map +1 -0
- package/fesm2022/ngwr-bits-ripple-grid.mjs +805 -0
- package/fesm2022/ngwr-bits-ripple-grid.mjs.map +1 -0
- package/fesm2022/ngwr-bits-rotating-text.mjs +3 -3
- package/fesm2022/ngwr-bits-shiny-text.mjs +6 -6
- package/fesm2022/ngwr-bits-splash-cursor.mjs +3 -3
- package/fesm2022/ngwr-bits-split-text.mjs +3 -3
- package/fesm2022/ngwr-bits-spotlight-card-testing.mjs +1 -1
- package/fesm2022/ngwr-bits-spotlight-card-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-spotlight-card.mjs +10 -10
- package/fesm2022/ngwr-bits-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-bits-star-border-testing.mjs +1 -1
- package/fesm2022/ngwr-bits-star-border-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-star-border.mjs +7 -7
- package/fesm2022/ngwr-bits-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-bits-threads-testing.mjs +41 -0
- package/fesm2022/ngwr-bits-threads-testing.mjs.map +1 -0
- package/fesm2022/ngwr-bits-threads.mjs +482 -0
- package/fesm2022/ngwr-bits-threads.mjs.map +1 -0
- package/fesm2022/ngwr-bits-tilt-card.mjs +6 -6
- package/fesm2022/ngwr-bits-typewriter.mjs +3 -3
- package/fesm2022/ngwr-bits-waves-testing.mjs.map +1 -1
- package/fesm2022/ngwr-bits-waves.mjs +60 -41
- package/fesm2022/ngwr-bits-waves.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +8 -8
- 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.mjs +3 -3
- package/fesm2022/ngwr-card.mjs +9 -9
- package/fesm2022/ngwr-carousel.mjs +6 -6
- package/fesm2022/ngwr-cascader.mjs +5 -5
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-charts-bar-chart-testing.mjs +127 -3
- package/fesm2022/ngwr-charts-bar-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-bar-chart.mjs +683 -49
- package/fesm2022/ngwr-charts-bar-chart.mjs.map +1 -1
- package/fesm2022/ngwr-charts-boxplot-chart-testing.mjs +161 -0
- package/fesm2022/ngwr-charts-boxplot-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-boxplot-chart.mjs +517 -0
- package/fesm2022/ngwr-charts-boxplot-chart.mjs.map +1 -0
- package/fesm2022/ngwr-charts-bullet-chart-testing.mjs +68 -0
- package/fesm2022/ngwr-charts-bullet-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-bullet-chart.mjs +459 -0
- package/fesm2022/ngwr-charts-bullet-chart.mjs.map +1 -0
- package/fesm2022/ngwr-charts-calendar-heatmap-testing.mjs +27 -0
- package/fesm2022/ngwr-charts-calendar-heatmap-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-calendar-heatmap.mjs +96 -17
- package/fesm2022/ngwr-charts-calendar-heatmap.mjs.map +1 -1
- package/fesm2022/ngwr-charts-candlestick-chart-testing.mjs +107 -0
- package/fesm2022/ngwr-charts-candlestick-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-candlestick-chart.mjs +508 -0
- package/fesm2022/ngwr-charts-candlestick-chart.mjs.map +1 -0
- package/fesm2022/ngwr-charts-chart-legend-testing.mjs +126 -0
- package/fesm2022/ngwr-charts-chart-legend-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-chart-legend.mjs +251 -0
- package/fesm2022/ngwr-charts-chart-legend.mjs.map +1 -0
- package/fesm2022/ngwr-charts-core.mjs +383 -0
- package/fesm2022/ngwr-charts-core.mjs.map +1 -0
- package/fesm2022/ngwr-charts-donut-chart-testing.mjs +10 -1
- package/fesm2022/ngwr-charts-donut-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-donut-chart.mjs +187 -31
- package/fesm2022/ngwr-charts-donut-chart.mjs.map +1 -1
- package/fesm2022/ngwr-charts-funnel-chart-testing.mjs +100 -0
- package/fesm2022/ngwr-charts-funnel-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-funnel-chart.mjs +415 -0
- package/fesm2022/ngwr-charts-funnel-chart.mjs.map +1 -0
- package/fesm2022/ngwr-charts-gauge-testing.mjs +9 -3
- package/fesm2022/ngwr-charts-gauge-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-gauge.mjs +9 -15
- package/fesm2022/ngwr-charts-gauge.mjs.map +1 -1
- package/fesm2022/ngwr-charts-heatmap-chart-testing.mjs +120 -0
- package/fesm2022/ngwr-charts-heatmap-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-heatmap-chart.mjs +519 -0
- package/fesm2022/ngwr-charts-heatmap-chart.mjs.map +1 -0
- package/fesm2022/ngwr-charts-line-chart-testing.mjs +43 -1
- package/fesm2022/ngwr-charts-line-chart-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-line-chart.mjs +436 -122
- package/fesm2022/ngwr-charts-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-charts-meter-group-testing.mjs +14 -2
- package/fesm2022/ngwr-charts-meter-group-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-meter-group.mjs +101 -32
- package/fesm2022/ngwr-charts-meter-group.mjs.map +1 -1
- package/fesm2022/ngwr-charts-radar-chart-testing.mjs +98 -0
- package/fesm2022/ngwr-charts-radar-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-radar-chart.mjs +720 -0
- package/fesm2022/ngwr-charts-radar-chart.mjs.map +1 -0
- package/fesm2022/ngwr-charts-scatter-chart-testing.mjs +132 -0
- package/fesm2022/ngwr-charts-scatter-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-scatter-chart.mjs +545 -0
- package/fesm2022/ngwr-charts-scatter-chart.mjs.map +1 -0
- package/fesm2022/ngwr-charts-sparkline-testing.mjs.map +1 -1
- package/fesm2022/ngwr-charts-sparkline.mjs +14 -16
- package/fesm2022/ngwr-charts-sparkline.mjs.map +1 -1
- package/fesm2022/ngwr-charts-treemap-chart-testing.mjs +103 -0
- package/fesm2022/ngwr-charts-treemap-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-treemap-chart.mjs +535 -0
- package/fesm2022/ngwr-charts-treemap-chart.mjs.map +1 -0
- package/fesm2022/ngwr-charts-waterfall-chart-testing.mjs +131 -0
- package/fesm2022/ngwr-charts-waterfall-chart-testing.mjs.map +1 -0
- package/fesm2022/ngwr-charts-waterfall-chart.mjs +462 -0
- package/fesm2022/ngwr-charts-waterfall-chart.mjs.map +1 -0
- package/fesm2022/ngwr-checkbox.mjs +6 -6
- package/fesm2022/ngwr-clipboard.mjs +3 -3
- package/fesm2022/ngwr-collapse.mjs +9 -9
- package/fesm2022/ngwr-color-picker.mjs +6 -6
- package/fesm2022/ngwr-command-palette.mjs +3 -3
- package/fesm2022/ngwr-compare.mjs +3 -3
- package/fesm2022/ngwr-context-menu.mjs +12 -12
- package/fesm2022/ngwr-cookie.mjs +3 -3
- package/fesm2022/ngwr-counter.mjs +6 -6
- package/fesm2022/ngwr-date-picker.mjs +21 -21
- package/fesm2022/ngwr-date.mjs +6 -6
- package/fesm2022/ngwr-density.mjs +6 -6
- package/fesm2022/ngwr-descriptions.mjs +6 -6
- package/fesm2022/ngwr-dialog.mjs +15 -15
- package/fesm2022/ngwr-directives.mjs +12 -12
- package/fesm2022/ngwr-divider.mjs +3 -3
- package/fesm2022/ngwr-drawer.mjs +18 -18
- package/fesm2022/ngwr-dropdown.mjs +9 -9
- package/fesm2022/ngwr-editor.mjs +3 -3
- package/fesm2022/ngwr-empty.mjs +3 -3
- package/fesm2022/ngwr-event-calendar.mjs +6 -6
- package/fesm2022/ngwr-file-upload.mjs +3 -3
- package/fesm2022/ngwr-form.mjs +9 -9
- package/fesm2022/ngwr-graph.mjs +6 -6
- package/fesm2022/ngwr-hotkey.mjs +6 -6
- package/fesm2022/ngwr-i18n-ar.mjs +90 -4
- package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-cs.mjs +90 -4
- package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-de.mjs +90 -4
- package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +90 -4
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-es.mjs +90 -4
- package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-fr.mjs +90 -4
- package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-he.mjs +90 -4
- package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-hi.mjs +90 -4
- package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-id.mjs +90 -4
- package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-it.mjs +90 -4
- package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ja.mjs +90 -4
- package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ko.mjs +90 -4
- package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-nl.mjs +90 -4
- package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pl.mjs +90 -4
- package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-pt.mjs +90 -4
- package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +90 -4
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-sv.mjs +90 -4
- package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-tr.mjs +90 -4
- package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-uk.mjs +90 -4
- package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-vi.mjs +90 -4
- package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh-tw.mjs +90 -4
- package/fesm2022/ngwr-i18n-zh-tw.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-zh.mjs +90 -4
- package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +9 -9
- package/fesm2022/ngwr-icon.mjs +6 -6
- package/fesm2022/ngwr-image-cropper.mjs +3 -3
- package/fesm2022/ngwr-input-number.mjs +3 -3
- package/fesm2022/ngwr-input-otp.mjs +3 -3
- package/fesm2022/ngwr-input.mjs +15 -15
- package/fesm2022/ngwr-keyboard.mjs +3 -3
- package/fesm2022/ngwr-knob.mjs +3 -3
- package/fesm2022/ngwr-layout.mjs +15 -15
- package/fesm2022/ngwr-lightbox.mjs +5 -5
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +8 -8
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +6 -6
- package/fesm2022/ngwr-mention.mjs +6 -6
- package/fesm2022/ngwr-meta.mjs +6 -6
- package/fesm2022/ngwr-overlay.mjs +6 -6
- package/fesm2022/ngwr-page-header.mjs +3 -3
- package/fesm2022/ngwr-pagination.mjs +3 -3
- package/fesm2022/ngwr-pipes.mjs +21 -21
- package/fesm2022/ngwr-platform.mjs +6 -6
- package/fesm2022/ngwr-popconfirm.mjs +6 -6
- package/fesm2022/ngwr-popover.mjs +43 -20
- 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 +4 -3
- 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 +12 -12
- package/fesm2022/ngwr-schema-form.mjs +3 -3
- package/fesm2022/ngwr-scroll.mjs +3 -3
- package/fesm2022/ngwr-segmented.mjs +3 -3
- package/fesm2022/ngwr-select.mjs +12 -12
- package/fesm2022/ngwr-sidebar.mjs +3 -3
- package/fesm2022/ngwr-skeleton.mjs +3 -3
- package/fesm2022/ngwr-slider.mjs +3 -3
- package/fesm2022/ngwr-sortable-list.mjs +11 -11
- package/fesm2022/ngwr-sortable-list.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial.mjs +3 -3
- package/fesm2022/ngwr-spinner.mjs +3 -3
- package/fesm2022/ngwr-splitter.mjs +3 -3
- package/fesm2022/ngwr-statistic.mjs +9 -9
- package/fesm2022/ngwr-stepper.mjs +6 -6
- package/fesm2022/ngwr-storage.mjs +3 -3
- package/fesm2022/ngwr-switch.mjs +3 -3
- package/fesm2022/ngwr-table.mjs +18 -18
- package/fesm2022/ngwr-tabs-router.mjs +3 -3
- package/fesm2022/ngwr-tabs.mjs +6 -6
- package/fesm2022/ngwr-textarea.mjs +3 -3
- package/fesm2022/ngwr-theme.mjs +3 -3
- package/fesm2022/ngwr-timeline.mjs +6 -6
- package/fesm2022/ngwr-toast-testing.mjs +2 -1
- package/fesm2022/ngwr-toast-testing.mjs.map +1 -1
- package/fesm2022/ngwr-toast.mjs +34 -15
- package/fesm2022/ngwr-toast.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +3 -3
- package/fesm2022/ngwr-tour.mjs +6 -6
- package/fesm2022/ngwr-transfer.mjs +3 -3
- package/fesm2022/ngwr-tree.mjs +3 -3
- package/fesm2022/ngwr-typography.mjs +3 -3
- package/fesm2022/ngwr-utils.mjs +31 -1
- 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 +3 -3
- package/fesm2022/ngwr-window-testing.mjs +61 -5
- package/fesm2022/ngwr-window-testing.mjs.map +1 -1
- package/fesm2022/ngwr-window.mjs +1538 -895
- package/fesm2022/ngwr-window.mjs.map +1 -1
- package/fesm2022/ngwr.mjs.map +1 -1
- package/i18n/ar.json +84 -4
- package/i18n/cs.json +84 -4
- package/i18n/de.json +84 -4
- package/i18n/en.json +84 -4
- package/i18n/es.json +84 -4
- package/i18n/fr.json +84 -4
- package/i18n/he.json +84 -4
- package/i18n/hi.json +84 -4
- package/i18n/id.json +84 -4
- package/i18n/it.json +84 -4
- package/i18n/ja.json +84 -4
- package/i18n/ko.json +84 -4
- package/i18n/nl.json +84 -4
- package/i18n/pl.json +84 -4
- package/i18n/pt.json +84 -4
- package/i18n/ru.json +84 -4
- package/i18n/sv.json +84 -4
- package/i18n/tr.json +84 -4
- package/i18n/uk.json +84 -4
- package/i18n/vi.json +84 -4
- package/i18n/zh-TW.json +84 -4
- package/i18n/zh.json +84 -4
- package/llms-full.txt +266 -9
- package/llms.txt +30 -7
- package/mcp/api.js +69 -1
- package/mcp/catalog.js +10 -1
- package/mcp/server.js +15 -1
- package/mcp/tools.js +122 -26
- package/package.json +132 -1
- package/popover/styles/_index.scss +75 -7
- package/schematics/component-style/index.js +3 -0
- package/schematics/migrations/v15/index.js +3 -26
- package/schematics/ng-add/index.js +2 -2
- package/schematics/use/symbol-map.json +14 -0
- package/schematics/utility/global-styles.js +19 -4
- package/schematics/utility/v15-moves.js +55 -0
- package/skills/ngwr/SKILL.md +8 -2
- package/skills/ngwr/references/catalog.md +28 -0
- package/skills/ngwr/references/setup.md +5 -4
- package/theme/styles/_focus.scss +8 -0
- package/toast/styles/_index.scss +103 -12
- package/types/ngwr-bits-aurora.d.ts +11 -0
- package/types/ngwr-bits-border-glow-testing.d.ts +5 -6
- package/types/ngwr-bits-border-glow.d.ts +5 -1
- package/types/ngwr-bits-dot-grid-testing.d.ts +92 -0
- package/types/ngwr-bits-dot-grid.d.ts +158 -0
- package/types/ngwr-bits-iridescence-testing.d.ts +85 -0
- package/types/ngwr-bits-iridescence.d.ts +244 -0
- package/types/ngwr-bits-ripple-grid-testing.d.ts +96 -0
- package/types/ngwr-bits-ripple-grid.d.ts +294 -0
- package/types/ngwr-bits-splash-cursor.d.ts +0 -1
- package/types/ngwr-bits-spotlight-card-testing.d.ts +3 -1
- package/types/ngwr-bits-star-border-testing.d.ts +7 -7
- package/types/ngwr-bits-threads-testing.d.ts +97 -0
- package/types/ngwr-bits-threads.d.ts +216 -0
- package/types/ngwr-bits-waves-testing.d.ts +1 -1
- package/types/ngwr-bits-waves.d.ts +20 -3
- package/types/ngwr-charts-bar-chart-testing.d.ts +193 -14
- package/types/ngwr-charts-bar-chart.d.ts +546 -38
- package/types/ngwr-charts-boxplot-chart-testing.d.ts +165 -0
- package/types/ngwr-charts-boxplot-chart.d.ts +308 -0
- package/types/ngwr-charts-bullet-chart-testing.d.ts +99 -0
- package/types/ngwr-charts-bullet-chart.d.ts +262 -0
- package/types/ngwr-charts-calendar-heatmap-testing.d.ts +32 -1
- package/types/ngwr-charts-calendar-heatmap.d.ts +55 -6
- package/types/ngwr-charts-candlestick-chart-testing.d.ts +135 -0
- package/types/ngwr-charts-candlestick-chart.d.ts +361 -0
- package/types/ngwr-charts-chart-legend-testing.d.ts +84 -0
- package/types/ngwr-charts-chart-legend.d.ts +178 -0
- package/types/ngwr-charts-core.d.ts +391 -0
- package/types/ngwr-charts-donut-chart-testing.d.ts +28 -5
- package/types/ngwr-charts-donut-chart.d.ts +124 -12
- package/types/ngwr-charts-funnel-chart-testing.d.ts +130 -0
- package/types/ngwr-charts-funnel-chart.d.ts +296 -0
- package/types/ngwr-charts-gauge-testing.d.ts +5 -0
- package/types/ngwr-charts-gauge.d.ts +6 -4
- package/types/ngwr-charts-heatmap-chart-testing.d.ts +148 -0
- package/types/ngwr-charts-heatmap-chart.d.ts +359 -0
- package/types/ngwr-charts-line-chart-testing.d.ts +72 -11
- package/types/ngwr-charts-line-chart.d.ts +291 -67
- package/types/ngwr-charts-meter-group-testing.d.ts +16 -2
- package/types/ngwr-charts-meter-group.d.ts +71 -11
- package/types/ngwr-charts-radar-chart-testing.d.ts +162 -0
- package/types/ngwr-charts-radar-chart.d.ts +461 -0
- package/types/ngwr-charts-scatter-chart-testing.d.ts +147 -0
- package/types/ngwr-charts-scatter-chart.d.ts +396 -0
- package/types/ngwr-charts-sparkline-testing.d.ts +4 -1
- package/types/ngwr-charts-sparkline.d.ts +8 -6
- package/types/ngwr-charts-treemap-chart-testing.d.ts +131 -0
- package/types/ngwr-charts-treemap-chart.d.ts +295 -0
- package/types/ngwr-charts-waterfall-chart-testing.d.ts +149 -0
- package/types/ngwr-charts-waterfall-chart.d.ts +338 -0
- package/types/ngwr-color-picker.d.ts +0 -21
- package/types/ngwr-dropdown.d.ts +0 -52
- package/types/ngwr-editor.d.ts +2 -84
- package/types/ngwr-i18n.d.ts +0 -15
- package/types/ngwr-mention.d.ts +0 -13
- package/types/ngwr-popconfirm.d.ts +0 -33
- package/types/ngwr-popover.d.ts +29 -53
- package/types/ngwr-toast-testing.d.ts +6 -1
- package/types/ngwr-tour.d.ts +0 -2
- package/types/ngwr-utils.d.ts +49 -7
- package/types/ngwr-version.d.ts +1 -1
- package/types/ngwr-window-testing.d.ts +65 -7
- package/types/ngwr-window.d.ts +831 -207
- package/types/ngwr.d.ts +1 -0
- package/window/styles/_index.scss +528 -82
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ComponentHarness, HarnessPredicate } from "@angular/cdk/testing";
|
|
2
|
+
/** Narrows which `<wr-funnel-chart>` a harness query matches. */
|
|
3
|
+
interface WrFunnelChartHarnessFilters extends BaseHarnessFilters {
|
|
4
|
+
/** Match the chart's accessible name. */
|
|
5
|
+
readonly ariaLabel?: string | RegExp;
|
|
6
|
+
/** Match a chart with a stage of this label. */
|
|
7
|
+
readonly stageLabel?: string | RegExp;
|
|
8
|
+
}
|
|
9
|
+
/** One stage, as the chart draws and announces it. */
|
|
10
|
+
interface WrFunnelChartHarnessStage {
|
|
11
|
+
/** The label printed beside the bar — the full text, ellipsised on screen or not. */
|
|
12
|
+
readonly label: string;
|
|
13
|
+
/**
|
|
14
|
+
* The value printed beside the bar, or `null` when none is: `showValues` is off, or the
|
|
15
|
+
* stage's value is missing.
|
|
16
|
+
*/
|
|
17
|
+
readonly value: string | null;
|
|
18
|
+
/**
|
|
19
|
+
* The share of the first stage printed under the value — "40% of first" — or `null` when
|
|
20
|
+
* none is: the first stage, a stage with no such share, or a `conversion` that leaves it
|
|
21
|
+
* off the drawing.
|
|
22
|
+
*/
|
|
23
|
+
readonly fromFirst: string | null;
|
|
24
|
+
/** What the stage announces: its label, its value and both conversions in one string. */
|
|
25
|
+
readonly name: string | null;
|
|
26
|
+
/**
|
|
27
|
+
* The bar's width as a percentage of the track, as the component wrote it, or `null` for
|
|
28
|
+
* a missing stage, which draws no bar. A stage of zero or below is `0`: its hairline is
|
|
29
|
+
* the stylesheet's floor, not a width.
|
|
30
|
+
*/
|
|
31
|
+
readonly widthPercent: number | null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* One row of the chart's data table (`dataTable`): the stage it reads, as its row header,
|
|
35
|
+
* and its value and both conversions, in the order of the table's columns.
|
|
36
|
+
*/
|
|
37
|
+
interface WrFunnelChartTableRow {
|
|
38
|
+
/** The row header — the stage's label. */
|
|
39
|
+
readonly header: string;
|
|
40
|
+
/** The value, the share of the previous stage and the share of the first; `''` for a figure the stage does not have. */
|
|
41
|
+
readonly cells: readonly string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Test harness for `<wr-funnel-chart>`.
|
|
45
|
+
*
|
|
46
|
+
* **The bars are read as PERCENTAGES of the track, not as pixels.** Each bar's width is
|
|
47
|
+
* written inline as a share of the full width — the largest stage, or `max` — which is
|
|
48
|
+
* the one number that survives a test with no layout, and the component's whole job. It is
|
|
49
|
+
* read off the `style` ATTRIBUTE rather than through `getCssValue()`, which is
|
|
50
|
+
* `getComputedStyle()`: in a browser that answers the laid-out pixels and in jsdom the
|
|
51
|
+
* declaration, with nothing to say which, and with no inline width at all it would fall
|
|
52
|
+
* back to the stylesheet's and read as a stage of zero. The hairline a stage of zero keeps
|
|
53
|
+
* is the stylesheet's floor, so no method reports it.
|
|
54
|
+
*
|
|
55
|
+
* **Two questions are not one.** A stage's printed text and its accessible name are read
|
|
56
|
+
* separately ({@link WrFunnelChartHarnessStage.value} and {@link WrFunnelChartHarnessStage.name}): the
|
|
57
|
+
* row is an `img`, so the name is what a screen reader gets, and asserting only what is
|
|
58
|
+
* drawn would pass on a stage that announces nothing. The shares printed between the bars
|
|
59
|
+
* are `aria-hidden` for the same reason — {@link getGapLabels} reads what is drawn, the
|
|
60
|
+
* names carry the same figures.
|
|
61
|
+
*
|
|
62
|
+
* **The bands' shapes are not read.** Each is a `clip-path` polygon from one bar's width
|
|
63
|
+
* to the next, and asserting its corners would restate the bar widths this harness already
|
|
64
|
+
* reads; {@link getBandCount} counts them, since where one is missing is the decision
|
|
65
|
+
* worth catching — there is none next to a missing stage.
|
|
66
|
+
*
|
|
67
|
+
* **No hover method.** The tooltip repeats the stage's name, and the chip renders into
|
|
68
|
+
* the overlay container with nothing tying it to this chart, so a query for it would
|
|
69
|
+
* answer with whichever chart's chip is open. The same figures are in the names and in the
|
|
70
|
+
* data table, which {@link getTableRows} reads.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* const chart = await loader.getHarness(WrFunnelChartHarness);
|
|
75
|
+
*
|
|
76
|
+
* expect(await chart.getLabels()).toEqual(['Visited', 'Signed up', 'Paid']);
|
|
77
|
+
* expect((await chart.getStages())[1].widthPercent).toBe(40);
|
|
78
|
+
* expect(await chart.getGapLabels()).toEqual(['40%', '15%']);
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @see https://ngwr.dev/guides/testing
|
|
82
|
+
*/
|
|
83
|
+
export declare class WrFunnelChartHarness extends ComponentHarness {
|
|
84
|
+
static hostSelector: string;
|
|
85
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
86
|
+
static with(options?: WrFunnelChartHarnessFilters): HarnessPredicate<WrFunnelChartHarness>;
|
|
87
|
+
/** The chart's accessible name, on the `group` that holds the stages. */
|
|
88
|
+
getAccessibleName(): Promise<string | null>;
|
|
89
|
+
/** Every stage, from the top of the funnel down: what it prints, what it announces and how wide its bar is. */
|
|
90
|
+
getStages(): Promise<WrFunnelChartHarnessStage[]>;
|
|
91
|
+
/** How many stages the chart drew — one per stage given, a missing one included. */
|
|
92
|
+
getStageCount(): Promise<number>;
|
|
93
|
+
/** The labels beside the bars, in order — the full text, ellipsised on screen or not. */
|
|
94
|
+
getLabels(): Promise<string[]>;
|
|
95
|
+
/**
|
|
96
|
+
* The share of the stage above printed in each gap between two bars, from the top down —
|
|
97
|
+
* one entry per gap, so one fewer than there are stages. `null` where none is printed:
|
|
98
|
+
* a stage with no such share, or a `conversion` that leaves it off the drawing.
|
|
99
|
+
*/
|
|
100
|
+
getGapLabels(): Promise<(string | null)[]>;
|
|
101
|
+
/**
|
|
102
|
+
* How many bands join two bars: one per gap whose two stages both have a value. A missing
|
|
103
|
+
* stage breaks the funnel on either side of it, since a band across it would draw a drop
|
|
104
|
+
* the data never gave.
|
|
105
|
+
*/
|
|
106
|
+
getBandCount(): Promise<number>;
|
|
107
|
+
/** Whether any value is printed beside a bar (`showValues`). */
|
|
108
|
+
hasValues(): Promise<boolean>;
|
|
109
|
+
/** Whether the hidden data table is rendered (`dataTable`). */
|
|
110
|
+
hasDataTable(): Promise<boolean>;
|
|
111
|
+
/**
|
|
112
|
+
* The data table's column headings: the value, the share of the previous stage and the
|
|
113
|
+
* share of the first, in that order.
|
|
114
|
+
*
|
|
115
|
+
* Throws when the chart renders no table (`dataTable` off) rather than answering with
|
|
116
|
+
* no columns.
|
|
117
|
+
*/
|
|
118
|
+
getTableColumns(): Promise<string[]>;
|
|
119
|
+
/**
|
|
120
|
+
* The data table's rows, one per stage: its label and its three figures, as a screen
|
|
121
|
+
* reader walks them. A stage above a fixed `max` is drawn full width and tabulated as
|
|
122
|
+
* itself, and a figure the stage does not have is `''`.
|
|
123
|
+
*
|
|
124
|
+
* Throws when the chart renders no table (`dataTable` off), for the reason
|
|
125
|
+
* {@link getTableColumns} gives.
|
|
126
|
+
*/
|
|
127
|
+
getTableRows(): Promise<WrFunnelChartTableRow[]>;
|
|
128
|
+
private assertDataTable;
|
|
129
|
+
}
|
|
130
|
+
export type { WrFunnelChartHarnessFilters, WrFunnelChartHarnessStage, WrFunnelChartTableRow };
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { WrChartTableData } from "ngwr/charts/core";
|
|
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
|
+
/** One stage of a `<wr-funnel-chart>`: a name, how many reached it, and optionally its own colour. */
|
|
10
|
+
interface WrFunnelStage {
|
|
11
|
+
/** The stage's name, beside its bar, in the tooltip and as its row header in the data table. */
|
|
12
|
+
readonly label: string;
|
|
13
|
+
/**
|
|
14
|
+
* How many reached the stage. A value that is not a finite number is MISSING: the stage
|
|
15
|
+
* draws no bar and no figure, and no conversion is worked out to or from it. Zero and a
|
|
16
|
+
* negative value draw a hairline, and a negative value is printed as given but gets no
|
|
17
|
+
* conversion, since a share of a negative count means nothing.
|
|
18
|
+
*/
|
|
19
|
+
readonly value: number;
|
|
20
|
+
/** Any CSS colour, `var(--wr-…)` included. Left out, the stage takes the chart's `color`. */
|
|
21
|
+
readonly color?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Which conversions a `<wr-funnel-chart>` prints on its drawing: `previous` puts each
|
|
25
|
+
* stage's share of the stage before it between the two bars, `first` puts its share of
|
|
26
|
+
* the first stage under its value, `both` does both and `none` neither. The tooltip, the
|
|
27
|
+
* accessible names and the data table carry both whatever this says.
|
|
28
|
+
*/
|
|
29
|
+
type WrFunnelConversion = 'both' | 'previous' | 'first' | 'none';
|
|
30
|
+
/**
|
|
31
|
+
* Funnel chart: how many reached each stage of a sequence — visited, signed up, paid —
|
|
32
|
+
* and how many of them went on to the next. SVG-free and dependency-free: every part is
|
|
33
|
+
* HTML laid out by the stylesheet.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```html
|
|
37
|
+
* <wr-funnel-chart
|
|
38
|
+
* [stages]="[
|
|
39
|
+
* { label: 'Visited', value: 12000 },
|
|
40
|
+
* { label: 'Signed up', value: 4800 },
|
|
41
|
+
* { label: 'Activated', value: 2900 },
|
|
42
|
+
* { label: 'Paid', value: 720 }
|
|
43
|
+
* ]"
|
|
44
|
+
* />
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* **The bars are honest about the values.** Each stage is a bar centred on the funnel's
|
|
48
|
+
* axis, its width proportional to its value — the largest stage, or `max`, is the full
|
|
49
|
+
* width. The funnel shape between two bars is a band from one bar's width to the next,
|
|
50
|
+
* so it narrows by exactly the drop and carries no value of its own. That is why this is
|
|
51
|
+
* bars and not a trapezoid per stage: a trapezoid's area depends on its neighbour, so a
|
|
52
|
+
* stage would look larger or smaller for what follows it.
|
|
53
|
+
*
|
|
54
|
+
* **What the data does not promise, the drawing does not assume.** A stage larger than
|
|
55
|
+
* the one before it is drawn WIDER and its conversion is above 100%, rather than clamped
|
|
56
|
+
* into a shape a funnel is expected to have. Zero and a negative value draw a hairline,
|
|
57
|
+
* never a negative width; a negative value is printed as given and gets no conversion. A
|
|
58
|
+
* value that is not a finite number is missing: no bar, no figure, no band to or from it,
|
|
59
|
+
* and no conversion that would need it.
|
|
60
|
+
*
|
|
61
|
+
* **The conversions.** Each stage after the first has two: its share of the stage before
|
|
62
|
+
* it, printed between the two bars, and its share of the first stage, printed under its
|
|
63
|
+
* value (`conversion` chooses which are printed). Both are percentages in `LOCALE_ID`,
|
|
64
|
+
* with one fraction digit and two significant digits below 1%, so a real conversion of
|
|
65
|
+
* 0.04% is not printed as `0%`; `percentFormat` replaces that.
|
|
66
|
+
*
|
|
67
|
+
* **What a screen reader gets.** The chart is a named `role="group"` of one `role="img"`
|
|
68
|
+
* per stage, as the bar chart's columns are, each named with its label, its value and both
|
|
69
|
+
* conversions — "Signed up: 4,800, 40% of previous, 40% of first". The whole sentence is a
|
|
70
|
+
* catalog template, one per shape — `funnelChart.stageName` with no conversion,
|
|
71
|
+
* `stageNameOne` with one and `stageNameBoth` with both — so a locale sets its own
|
|
72
|
+
* punctuation and order round the figures. The bands and the percentages between the bars
|
|
73
|
+
* are `aria-hidden`, since every figure they show is in a name already. `dataTable` adds
|
|
74
|
+
* the same figures as a table a reader can walk cell by cell. No part of the chart is a
|
|
75
|
+
* tab stop.
|
|
76
|
+
*
|
|
77
|
+
* Under RTL the labels and the figures swap sides; the bars and the bands are centred,
|
|
78
|
+
* so they read the same in both directions. A label takes its direction from its own
|
|
79
|
+
* text, so a Latin one is ellipsised at its end on an RTL page, and a figure from its
|
|
80
|
+
* own, so a sign stays in front of its digits.
|
|
81
|
+
*
|
|
82
|
+
* @see https://ngwr.dev/charts/funnel-chart
|
|
83
|
+
*/
|
|
84
|
+
export declare class WrFunnelChart {
|
|
85
|
+
/**
|
|
86
|
+
* The stages, from the top of the funnel down. Nothing is sorted: a stage is drawn where
|
|
87
|
+
* it is given, so a stage larger than the one before it shows as one.
|
|
88
|
+
*/
|
|
89
|
+
readonly stages: import("@angular/core").InputSignal<readonly WrFunnelStage[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Accessible name of the chart, and the data table's caption. Each stage names itself,
|
|
92
|
+
* so this says what the funnel is about. Falls back to `funnelChart.label`, then
|
|
93
|
+
* `'Funnel chart'`.
|
|
94
|
+
*/
|
|
95
|
+
readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
|
|
96
|
+
protected readonly resolvedAriaLabel: import("@angular/core").Signal<string>;
|
|
97
|
+
/**
|
|
98
|
+
* The colour of a stage with no `color` of its own. One colour by default, because the
|
|
99
|
+
* stages are one quantity measured along a sequence, not categories: every stage is
|
|
100
|
+
* named in text beside its bar, so colour tells nothing apart here.
|
|
101
|
+
* @default 'var(--wr-color-primary)'
|
|
102
|
+
*/
|
|
103
|
+
readonly color: import("@angular/core").InputSignal<string>;
|
|
104
|
+
/**
|
|
105
|
+
* The value of a full-width bar. `0` makes it the largest stage shown; a value above
|
|
106
|
+
* `0` fixes it, so two funnels side by side share one scale. A stage above a fixed
|
|
107
|
+
* `max` is drawn full width, and its figure, the tooltip and the data table still give
|
|
108
|
+
* its own value. @default 0
|
|
109
|
+
*/
|
|
110
|
+
readonly max: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
111
|
+
/**
|
|
112
|
+
* Which conversions are printed on the drawing: each stage's share of the stage before
|
|
113
|
+
* it, between the two bars (`previous`), its share of the first stage, under its value
|
|
114
|
+
* (`first`), `both` or `none`. The tooltip, every stage's accessible name and the data
|
|
115
|
+
* table carry both whatever this says. @default 'both'
|
|
116
|
+
*/
|
|
117
|
+
readonly conversion: import("@angular/core").InputSignal<WrFunnelConversion>;
|
|
118
|
+
/** Print each stage's value beside its bar. @default true */
|
|
119
|
+
readonly showValues: import("@angular/core").InputSignalWithTransform<boolean, any>;
|
|
120
|
+
/**
|
|
121
|
+
* What the values count — visitors, orders — as the heading of the data table's value
|
|
122
|
+
* column. Falls back to `funnelChart.value` ("Value").
|
|
123
|
+
*/
|
|
124
|
+
readonly valueLabel: import("@angular/core").InputSignal<string | null>;
|
|
125
|
+
/**
|
|
126
|
+
* Show a tooltip with the stage's label, value and both conversions on hover. Pointer
|
|
127
|
+
* only — each stage's accessible name already carries the same figures. @default true
|
|
128
|
+
*/
|
|
129
|
+
readonly tooltip: import("@angular/core").InputSignalWithTransform<boolean, any>;
|
|
130
|
+
/**
|
|
131
|
+
* Writes every value the chart shows: beside the bars, in the tooltip, in the accessible
|
|
132
|
+
* names and in the data table. `null` uses `Intl.NumberFormat` in `LOCALE_ID`.
|
|
133
|
+
*/
|
|
134
|
+
readonly valueFormat: import("@angular/core").InputSignal<((value: number) => string) | null>;
|
|
135
|
+
/**
|
|
136
|
+
* Writes every conversion the chart shows, given as a RATIO — `0.25` for a quarter, `1.2`
|
|
137
|
+
* for a stage that grew by a fifth — the number `Intl.NumberFormat`'s `percent` style
|
|
138
|
+
* takes, so one of those can be passed as it is. `null` uses that style in `LOCALE_ID`,
|
|
139
|
+
* with up to one fraction digit, and two significant digits below 1% so a small real
|
|
140
|
+
* conversion is not printed as `0%`.
|
|
141
|
+
*/
|
|
142
|
+
readonly percentFormat: import("@angular/core").InputSignal<((ratio: number) => string) | null>;
|
|
143
|
+
/**
|
|
144
|
+
* Render the chart's figures as a table that only assistive technology reaches: a row
|
|
145
|
+
* per stage, headed by its label, with its value and both conversions, each written as
|
|
146
|
+
* the tooltip writes it. A figure the stage does not have is an empty cell.
|
|
147
|
+
*
|
|
148
|
+
* Each stage's accessible name already carries its figures; the table is for a reader
|
|
149
|
+
* who wants to move through them cell by cell, with the column headings read out. It is
|
|
150
|
+
* rendered beside the stages, clipped to nothing: it takes no room, draws nothing and
|
|
151
|
+
* holds no tab stop. @default false
|
|
152
|
+
*/
|
|
153
|
+
readonly dataTable: import("@angular/core").InputSignalWithTransform<boolean, any>;
|
|
154
|
+
/** The figures in full, never compact, in `LOCALE_ID` unless `valueFormat` is given. */
|
|
155
|
+
private readonly numbers;
|
|
156
|
+
private readonly locale;
|
|
157
|
+
private readonly percents;
|
|
158
|
+
/** Below 1%, by significant digits, which keep 0.0004 from printing as `0%`. */
|
|
159
|
+
private readonly smallPercents;
|
|
160
|
+
private readonly stageName;
|
|
161
|
+
private readonly valueName;
|
|
162
|
+
private readonly fromPreviousName;
|
|
163
|
+
private readonly fromFirstName;
|
|
164
|
+
private readonly ofPrevious;
|
|
165
|
+
private readonly ofFirst;
|
|
166
|
+
/**
|
|
167
|
+
* A stage's accessible name, one sentence per shape, so a locale places the colon, the
|
|
168
|
+
* commas and the order itself: with no conversion (the first stage, or none that means
|
|
169
|
+
* anything), with one, and with both. Each conversion arrives already worded — "40% of
|
|
170
|
+
* previous" — from the two templates above.
|
|
171
|
+
*/
|
|
172
|
+
private readonly stageNameText;
|
|
173
|
+
private readonly stageNameOneText;
|
|
174
|
+
private readonly stageNameBothText;
|
|
175
|
+
private readonly stageEls;
|
|
176
|
+
/** Whether the shares of the previous stage are printed between the bars. */
|
|
177
|
+
protected readonly showPrevious: import("@angular/core").Signal<boolean>;
|
|
178
|
+
/** Whether the shares of the first stage are printed under the values. */
|
|
179
|
+
protected readonly showFirst: import("@angular/core").Signal<boolean>;
|
|
180
|
+
/**
|
|
181
|
+
* Every stage, resolved. The full width is a fixed `max`, else the largest value given,
|
|
182
|
+
* else 1 — so a funnel of zeros draws hairlines rather than dividing by nothing.
|
|
183
|
+
*/
|
|
184
|
+
private readonly resolved;
|
|
185
|
+
/**
|
|
186
|
+
* The stages as drawn and announced: every figure written once, here, so the drawing,
|
|
187
|
+
* the names, the tooltip and the table cannot disagree.
|
|
188
|
+
*
|
|
189
|
+
* `band` is the shape between a stage and the one above it: a `clip-path` polygon on
|
|
190
|
+
* the track's width, from the upper bar's width at its top edge to this bar's at its
|
|
191
|
+
* bottom, both centred. There is none next to a missing stage, since joining across one
|
|
192
|
+
* would draw a drop the data never gave.
|
|
193
|
+
*/
|
|
194
|
+
protected readonly rows: import("@angular/core").Signal<{
|
|
195
|
+
label: string;
|
|
196
|
+
value: number | null;
|
|
197
|
+
color: string;
|
|
198
|
+
/** The bar's inline width, a percentage of the track. */
|
|
199
|
+
width: string;
|
|
200
|
+
valueText: string;
|
|
201
|
+
previousText: string;
|
|
202
|
+
firstText: string;
|
|
203
|
+
/** The share of the first stage as it is printed under the value: "40% of first". */
|
|
204
|
+
ofFirstText: string;
|
|
205
|
+
/** What the stage announces: its label, its value and both conversions. */
|
|
206
|
+
name: string;
|
|
207
|
+
band: string | null;
|
|
208
|
+
/** The paint of the stage above, where the band starts. */
|
|
209
|
+
bandFrom: string;
|
|
210
|
+
}[]>;
|
|
211
|
+
/**
|
|
212
|
+
* The figures for `dataTable`: the chart's name as the caption, a row per stage, and its
|
|
213
|
+
* value and both conversions as the columns, each cell written as the tooltip writes it.
|
|
214
|
+
*/
|
|
215
|
+
protected readonly tableData: import("@angular/core").Signal<WrChartTableData>;
|
|
216
|
+
/**
|
|
217
|
+
* One tooltip for the whole chart, for the stage under the pointer: its label and value
|
|
218
|
+
* as the heading, and a row for each conversion it has. It points at the top edge of the
|
|
219
|
+
* BAR, so the chip sits over the band and the percentage it repeats; a stage of zero
|
|
220
|
+
* keeps its hairline to point at. A missing stage opens none — it has no figure to show.
|
|
221
|
+
*/
|
|
222
|
+
protected readonly tip: import("ngwr/popover").WrChartTooltip;
|
|
223
|
+
/**
|
|
224
|
+
* The stage the open tooltip is about, which the active row's wash marks: the hovered
|
|
225
|
+
* stage, unless it is missing. A missing stage opens no tooltip, and `tip.active()` is
|
|
226
|
+
* the hovered index whatever the resolver returned, so without this the wash would mark
|
|
227
|
+
* a row with nothing to show.
|
|
228
|
+
*/
|
|
229
|
+
protected readonly activeStage: import("@angular/core").Signal<number | null>;
|
|
230
|
+
/**
|
|
231
|
+
* The accessible name of a stage with a value: the sentence for the conversions it has,
|
|
232
|
+
* each already worded. A missing stage is named by its label alone.
|
|
233
|
+
*/
|
|
234
|
+
private nameOf;
|
|
235
|
+
/** A conversion as the chart prints it: through `percentFormat`, or as a percentage in `LOCALE_ID`. */
|
|
236
|
+
private percent;
|
|
237
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WrFunnelChart, never>;
|
|
238
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WrFunnelChart, "wr-funnel-chart", never, {
|
|
239
|
+
"stages": {
|
|
240
|
+
"alias": "stages";
|
|
241
|
+
"required": false;
|
|
242
|
+
"isSignal": true;
|
|
243
|
+
};
|
|
244
|
+
"ariaLabel": {
|
|
245
|
+
"alias": "ariaLabel";
|
|
246
|
+
"required": false;
|
|
247
|
+
"isSignal": true;
|
|
248
|
+
};
|
|
249
|
+
"color": {
|
|
250
|
+
"alias": "color";
|
|
251
|
+
"required": false;
|
|
252
|
+
"isSignal": true;
|
|
253
|
+
};
|
|
254
|
+
"max": {
|
|
255
|
+
"alias": "max";
|
|
256
|
+
"required": false;
|
|
257
|
+
"isSignal": true;
|
|
258
|
+
};
|
|
259
|
+
"conversion": {
|
|
260
|
+
"alias": "conversion";
|
|
261
|
+
"required": false;
|
|
262
|
+
"isSignal": true;
|
|
263
|
+
};
|
|
264
|
+
"showValues": {
|
|
265
|
+
"alias": "showValues";
|
|
266
|
+
"required": false;
|
|
267
|
+
"isSignal": true;
|
|
268
|
+
};
|
|
269
|
+
"valueLabel": {
|
|
270
|
+
"alias": "valueLabel";
|
|
271
|
+
"required": false;
|
|
272
|
+
"isSignal": true;
|
|
273
|
+
};
|
|
274
|
+
"tooltip": {
|
|
275
|
+
"alias": "tooltip";
|
|
276
|
+
"required": false;
|
|
277
|
+
"isSignal": true;
|
|
278
|
+
};
|
|
279
|
+
"valueFormat": {
|
|
280
|
+
"alias": "valueFormat";
|
|
281
|
+
"required": false;
|
|
282
|
+
"isSignal": true;
|
|
283
|
+
};
|
|
284
|
+
"percentFormat": {
|
|
285
|
+
"alias": "percentFormat";
|
|
286
|
+
"required": false;
|
|
287
|
+
"isSignal": true;
|
|
288
|
+
};
|
|
289
|
+
"dataTable": {
|
|
290
|
+
"alias": "dataTable";
|
|
291
|
+
"required": false;
|
|
292
|
+
"isSignal": true;
|
|
293
|
+
};
|
|
294
|
+
}, {}, never, never, true, never>;
|
|
295
|
+
}
|
|
296
|
+
export type { WrFunnelConversion, WrFunnelStage };
|
|
@@ -35,6 +35,11 @@ export declare class WrGaugeHarness extends ComponentHarness {
|
|
|
35
35
|
getMin(): Promise<number>;
|
|
36
36
|
/** The top of the range, from `aria-valuemax`. */
|
|
37
37
|
getMax(): Promise<number>;
|
|
38
|
+
/**
|
|
39
|
+
* A finite number off one of the meter's attributes, or a sentence saying which one
|
|
40
|
+
* it lacks. `Number(null)` is `0`, so a lost binding read as a range starting at zero.
|
|
41
|
+
*/
|
|
42
|
+
private numberAttribute;
|
|
38
43
|
/**
|
|
39
44
|
* The spoken form of the value — the number with its suffix.
|
|
40
45
|
*
|
|
@@ -23,10 +23,12 @@ export declare class WrGauge {
|
|
|
23
23
|
readonly value: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
24
24
|
/**
|
|
25
25
|
* Low end of the scale — where the arc starts. Values below it clamp here.
|
|
26
|
+
* @default 0
|
|
26
27
|
*/
|
|
27
28
|
readonly min: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
28
29
|
/**
|
|
29
30
|
* High end of the scale — where the arc completes. Values above it clamp here.
|
|
31
|
+
* @default 100
|
|
30
32
|
*/
|
|
31
33
|
readonly max: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
32
34
|
/** Diameter in CSS pixels. @default 160 */
|
|
@@ -35,12 +37,14 @@ export declare class WrGauge {
|
|
|
35
37
|
readonly strokeWidth: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
36
38
|
/**
|
|
37
39
|
* Colour of the unfilled arc behind the value. Any CSS colour; the default is
|
|
38
|
-
*
|
|
40
|
+
* `--wr-border-base` at 60%, which reads as a hairline in both themes.
|
|
41
|
+
* @default color-mix(in srgb, var(--wr-border-base) 60%, transparent)
|
|
39
42
|
*/
|
|
40
43
|
readonly trackColor: import("@angular/core").InputSignal<string>;
|
|
41
44
|
/**
|
|
42
45
|
* Colour of the filled arc. Any CSS colour — pass an intent token to tie it to
|
|
43
46
|
* a threshold, e.g. `var(--wr-color-danger)` once the value crosses one.
|
|
47
|
+
* @default 'var(--wr-color-primary)'
|
|
44
48
|
*/
|
|
45
49
|
readonly valueColor: import("@angular/core").InputSignal<string>;
|
|
46
50
|
/** Show the value text in the center. @default true */
|
|
@@ -61,10 +65,8 @@ export declare class WrGauge {
|
|
|
61
65
|
* number.
|
|
62
66
|
*/
|
|
63
67
|
readonly valueFormat: import("@angular/core").InputSignal<((value: number) => string) | null>;
|
|
64
|
-
|
|
68
|
+
/** The reading as the centre, the tooltip and `aria-valuetext` write it: never compact. */
|
|
65
69
|
private readonly numbers;
|
|
66
|
-
/** Below one, by significant digits, which keep 0.0004 from rounding to `0`. */
|
|
67
|
-
private readonly smallNumbers;
|
|
68
70
|
private readonly surface;
|
|
69
71
|
protected readonly cx = 50;
|
|
70
72
|
protected readonly cy = 50;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ComponentHarness, HarnessPredicate } from "@angular/cdk/testing";
|
|
2
|
+
/** Narrows which `<wr-heatmap-chart>` a harness query matches. */
|
|
3
|
+
interface WrHeatmapChartHarnessFilters extends BaseHarnessFilters {
|
|
4
|
+
/** Match the matrix's accessible name. */
|
|
5
|
+
readonly ariaLabel?: string | RegExp;
|
|
6
|
+
/** Match a chart with a row of this name. */
|
|
7
|
+
readonly rowLabel?: string | RegExp;
|
|
8
|
+
/** Match a chart with a column of this name. */
|
|
9
|
+
readonly columnLabel?: string | RegExp;
|
|
10
|
+
}
|
|
11
|
+
/** One cell as {@link WrHeatmapChartHarness.getCells} reads it, row by row. */
|
|
12
|
+
interface WrHeatmapChartCell {
|
|
13
|
+
/** Its row's position, from 0, in the order of the row names. */
|
|
14
|
+
readonly row: number;
|
|
15
|
+
/** Its column's position, from 0, in the order of the column names. */
|
|
16
|
+
readonly column: number;
|
|
17
|
+
/** Its value, or `null` for an empty cell: no data, which is not zero. */
|
|
18
|
+
readonly value: number | null;
|
|
19
|
+
/**
|
|
20
|
+
* Its level as a place on the scale, as the component wrote it, from 0 (the lowest level)
|
|
21
|
+
* to 1 (the colour itself); `null` for an empty cell, which is hatched instead.
|
|
22
|
+
*/
|
|
23
|
+
readonly level: number | null;
|
|
24
|
+
/** Whether it is drawn as empty — hatched and outlined. */
|
|
25
|
+
readonly empty: boolean;
|
|
26
|
+
/** The value printed in it with `showValues`, `''` when it prints none. */
|
|
27
|
+
readonly text: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* One row of the chart's data table (`dataTable`): the row's name, as its row header,
|
|
31
|
+
* and one cell per column, in the order of the table's columns.
|
|
32
|
+
*/
|
|
33
|
+
interface WrHeatmapChartTableRow {
|
|
34
|
+
/** The row header — the row's name. */
|
|
35
|
+
readonly header: string;
|
|
36
|
+
/** Each column's value, written as the tooltip writes it; an empty cell is `noDataLabel`. */
|
|
37
|
+
readonly cells: readonly string[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Test harness for `<wr-heatmap-chart>`.
|
|
41
|
+
*
|
|
42
|
+
* **A cell's colour is not read.** Its paint is a `color-mix()` the stylesheet works out
|
|
43
|
+
* from the level the component writes on it, and jsdom has no cascade to resolve one — a
|
|
44
|
+
* computed read would answer the same for a cell on the right level and one on the wrong
|
|
45
|
+
* one. What {@link getCells} reads instead is what the component WROTE: the value and the
|
|
46
|
+
* position on `data-*`, the level off the `style` attribute, and whether the cell
|
|
47
|
+
* is drawn empty. Those are what break when the data wiring does.
|
|
48
|
+
*
|
|
49
|
+
* **Whether a printed value fits is not read either.** The stylesheet hides a value wider
|
|
50
|
+
* than its cell by wrapping it out of sight, which takes a layout jsdom does not have;
|
|
51
|
+
* {@link getCells} gives the text the component printed, fitting or not.
|
|
52
|
+
*
|
|
53
|
+
* **Which column names are drawn is not read.** Where the names are wider than their
|
|
54
|
+
* columns the chart draws every n-th one and keeps the rest out of sight, decided by
|
|
55
|
+
* measuring the layout after render — jsdom has none, so every name is drawn there, and a
|
|
56
|
+
* method asking would answer "all of them" for a chart that thins and for one that is
|
|
57
|
+
* broken alike. {@link getColumnLabels} gives every name, drawn or not, as a screen reader
|
|
58
|
+
* reads them.
|
|
59
|
+
*
|
|
60
|
+
* **There is no hover method.** The tooltip renders into the overlay container, tied to
|
|
61
|
+
* nothing a harness could scope it by — the chip is `aria-hidden` and publishes no id —
|
|
62
|
+
* and the numbers it shows are on the cells and in the data table, which
|
|
63
|
+
* {@link getTableRows} reads, and which is where a screen reader finds them too.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const chart = await loader.getHarness(WrHeatmapChartHarness);
|
|
68
|
+
*
|
|
69
|
+
* expect(await chart.getRowLabels()).toEqual(['Mon', 'Tue']);
|
|
70
|
+
* expect((await chart.getCell(1, 0)).empty).toBe(true);
|
|
71
|
+
* expect(await chart.getScaleRange()).toEqual({ min: '0', max: '41' });
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* @see https://ngwr.dev/guides/testing
|
|
75
|
+
*/
|
|
76
|
+
export declare class WrHeatmapChartHarness extends ComponentHarness {
|
|
77
|
+
static hostSelector: string;
|
|
78
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
79
|
+
static with(options?: WrHeatmapChartHarnessFilters): HarnessPredicate<WrHeatmapChartHarness>;
|
|
80
|
+
/**
|
|
81
|
+
* The matrix's accessible name — the only name it has. Read off the cells, which carry
|
|
82
|
+
* the `img` role, rather than off the host: a name on a wrapper round the row and column
|
|
83
|
+
* names would take those names out of the accessibility tree.
|
|
84
|
+
*/
|
|
85
|
+
getAccessibleName(): Promise<string | null>;
|
|
86
|
+
/** The rows' names, top to bottom, as drawn — the full text, ellipsised or not, positions included for unnamed rows. */
|
|
87
|
+
getRowLabels(): Promise<string[]>;
|
|
88
|
+
/** The columns' names, from inline start — the full text of every one, ellipsised, out of sight or neither. */
|
|
89
|
+
getColumnLabels(): Promise<string[]>;
|
|
90
|
+
/** How many cells were drawn: one per row and column, empty ones included. */
|
|
91
|
+
getCellCount(): Promise<number>;
|
|
92
|
+
/**
|
|
93
|
+
* Every cell, row by row: its position, its value, the level it was drawn on and the text
|
|
94
|
+
* it prints. Read from `data-row`, `data-column` and `data-value`, which the component
|
|
95
|
+
* writes for exactly this, and the level off the `style` ATTRIBUTE — never through
|
|
96
|
+
* `getCssValue()`, which would resolve whatever the stylesheet says at exactly the
|
|
97
|
+
* moment the binding is what broke.
|
|
98
|
+
*/
|
|
99
|
+
getCells(): Promise<WrHeatmapChartCell[]>;
|
|
100
|
+
/**
|
|
101
|
+
* The cell at a row and a column, both from 0. Throws for a position the matrix does not
|
|
102
|
+
* have rather than answering with an empty cell, which is a real thing a cell can be.
|
|
103
|
+
*/
|
|
104
|
+
getCell(row: number, column: number): Promise<WrHeatmapChartCell>;
|
|
105
|
+
/** Whether the legend is rendered (`showLegend`, and a scale or an empty cell to key). */
|
|
106
|
+
hasLegend(): Promise<boolean>;
|
|
107
|
+
/**
|
|
108
|
+
* The legend's two ends, the scale's minimum and maximum, compact from a thousand as the
|
|
109
|
+
* cells print a value. A scale with no span is keyed by one figure, which is both ends.
|
|
110
|
+
* Throws when the legend draws no scale — `showLegend` off, or no value and no bound to
|
|
111
|
+
* scale — rather than answering with two empty strings.
|
|
112
|
+
*/
|
|
113
|
+
getScaleRange(): Promise<{
|
|
114
|
+
min: string;
|
|
115
|
+
max: string;
|
|
116
|
+
}>;
|
|
117
|
+
/**
|
|
118
|
+
* How many levels the legend keys — `levels`, as drawn, or 1 for a scale with no span.
|
|
119
|
+
* Throws when it draws no scale, as {@link getScaleRange} does.
|
|
120
|
+
*/
|
|
121
|
+
getLevelCount(): Promise<number>;
|
|
122
|
+
/**
|
|
123
|
+
* The name the legend keys the hatching with (`noDataLabel`), or `null` while it keys
|
|
124
|
+
* none: no cell is empty, or the legend is off.
|
|
125
|
+
*/
|
|
126
|
+
getNoDataLabel(): Promise<string | null>;
|
|
127
|
+
/** Whether the hidden data table is rendered (`dataTable`). */
|
|
128
|
+
hasDataTable(): Promise<boolean>;
|
|
129
|
+
/**
|
|
130
|
+
* The data table's column headings: one per column, in order.
|
|
131
|
+
*
|
|
132
|
+
* Throws when the chart renders no table (`dataTable` off) rather than answering with no
|
|
133
|
+
* columns, which is also what a matrix with no columns answers.
|
|
134
|
+
*/
|
|
135
|
+
getTableColumns(): Promise<string[]>;
|
|
136
|
+
/**
|
|
137
|
+
* The data table's rows, one per row: its name and each column's value, as a screen
|
|
138
|
+
* reader walks them. A value outside a given `min` or `max` is drawn on the end level and
|
|
139
|
+
* tabulated as itself; an empty cell is `noDataLabel`.
|
|
140
|
+
*
|
|
141
|
+
* Throws when the chart renders no table (`dataTable` off), for the reason
|
|
142
|
+
* {@link getTableColumns} gives.
|
|
143
|
+
*/
|
|
144
|
+
getTableRows(): Promise<WrHeatmapChartTableRow[]>;
|
|
145
|
+
private assertScale;
|
|
146
|
+
private assertDataTable;
|
|
147
|
+
}
|
|
148
|
+
export type { WrHeatmapChartCell, WrHeatmapChartHarnessFilters, WrHeatmapChartTableRow };
|