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,244 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Iridescence background — folded silk under a raking light, its hue turning
|
|
4
|
+
* with the slope of each fold from pale rose through lilac to sky, on a WebGL2
|
|
5
|
+
* canvas. The folds drift and swell on their own, and the pointer stirs them,
|
|
6
|
+
* bending the drape rather than sliding the picture. Fills its nearest positioned
|
|
7
|
+
* ancestor: put it first in a `position: relative` box and give the content after
|
|
8
|
+
* it a position of its own.
|
|
9
|
+
*
|
|
10
|
+
* The pointer is followed on the host's PARENT, with passive listeners, so the
|
|
11
|
+
* silk answers a pointer that is over the content in front of it rather than over
|
|
12
|
+
* the canvas — the host itself takes no pointer events and never steals a click.
|
|
13
|
+
* Placed directly in a shadow root, where it has no parent element, it follows
|
|
14
|
+
* the pointer on the shadow host; with neither it listens nowhere.
|
|
15
|
+
*
|
|
16
|
+
* Decorative only: the canvas is `aria-hidden`, the host has no role and nothing
|
|
17
|
+
* in it takes focus or a click.
|
|
18
|
+
*
|
|
19
|
+
* The frame loop runs only while the host is on screen with a box to draw on and
|
|
20
|
+
* something can move: not at `speed` 0 with no pointer to follow, where one still
|
|
21
|
+
* frame is drawn. At
|
|
22
|
+
* `speed` 0 with the pointer followed, the loop runs and draws only while the
|
|
23
|
+
* pointer is stirring something. Off screen it stops asking for frames and resumes
|
|
24
|
+
* where it left off.
|
|
25
|
+
*
|
|
26
|
+
* Under `prefers-reduced-motion`, read live, one still frame is drawn and nothing
|
|
27
|
+
* follows — no loop, no pointer listeners, the pointer back at rest. It is held at
|
|
28
|
+
* the phases the folds had reached, so switching the preference on does not jump
|
|
29
|
+
* them, and it is drawn again when the colour, the box or the page's colour scheme
|
|
30
|
+
* changes.
|
|
31
|
+
*
|
|
32
|
+
* `[color]` is multiplied over the picture, so white leaves it as it is, and it
|
|
33
|
+
* defaults to the `--wr-iridescence-color` hook: white on a light page, a deep
|
|
34
|
+
* slate blue on a dark one. Any CSS colour works, a `var()` token or a
|
|
35
|
+
* `light-dark()` pair included, resolved through the cascade before it reaches the
|
|
36
|
+
* shader, which reads neither. Pass an opaque colour: the canvas drops alpha and
|
|
37
|
+
* the stand-in keeps it.
|
|
38
|
+
*
|
|
39
|
+
* Measured over 240 phase combinations, with the pointer at rest and at the box's
|
|
40
|
+
* four corners at `amplitude` 1, `--wr-color-on-surface` holds 4.5:1 on the dark
|
|
41
|
+
* default (5.01:1 at the 99th-percentile pixel, 4.89:1 in the worst frame) and not
|
|
42
|
+
* on the light one (3.93:1 at the 1st-percentile pixel, 2.8:1 in the worst frame),
|
|
43
|
+
* so text there needs a scrim or a card.
|
|
44
|
+
*
|
|
45
|
+
* The host's own background is a stand-in: soft diagonal bands in the same palette,
|
|
46
|
+
* which an opaque colour tints the same way. The stand-in shows before hydration on a
|
|
47
|
+
* prerendered page, on a machine with no WebGL2 and after a lost context, so the box
|
|
48
|
+
* is never empty and text placed on it keeps its ground. The canvas fades in over it,
|
|
49
|
+
* because the stand-in is an approximation and not the same picture, so
|
|
50
|
+
* `.wr-iridescence--painted` hands over rather than swaps.
|
|
51
|
+
*
|
|
52
|
+
* Under forced colours the canvas is hidden and its loop stops with it, leaving the
|
|
53
|
+
* box on the palette's own ground, which is what forced text and marks are chosen
|
|
54
|
+
* against.
|
|
55
|
+
*
|
|
56
|
+
* With no WebGL2 context, or a shader the driver refuses, nothing is thrown and
|
|
57
|
+
* the stand-in stays. A context the browser takes away is rebuilt if it offers one
|
|
58
|
+
* back. A destroyed host hands its GPU resources back at once. Browsers keep a small
|
|
59
|
+
* number of live contexts and kill the oldest: Chromium frees the slot at that point,
|
|
60
|
+
* while WebKit frees it only when the context is collected and offers an evicted one
|
|
61
|
+
* no restore, so there a host that is not drawing can stay on the stand-in for good.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```html
|
|
65
|
+
* <section style="position: relative; min-height: 24rem; padding: 2rem; overflow: hidden">
|
|
66
|
+
* <wr-iridescence />
|
|
67
|
+
* <wr-card style="max-width: 26rem">
|
|
68
|
+
* <h1>Hero copy on a card above the silk</h1>
|
|
69
|
+
* </wr-card>
|
|
70
|
+
* </section>
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* @see https://ngwr.dev/bits/iridescence
|
|
74
|
+
*/
|
|
75
|
+
export declare class WrIridescence {
|
|
76
|
+
/**
|
|
77
|
+
* Tint multiplied over the picture, any CSS colour — a `var()` token or a
|
|
78
|
+
* `light-dark()` pair included. Pass an opaque colour: the canvas drops alpha and
|
|
79
|
+
* the stand-in keeps it. When unset, empty or blank, `--wr-iridescence-color`
|
|
80
|
+
* decides.
|
|
81
|
+
*/
|
|
82
|
+
readonly color: import("@angular/core").InputSignal<string | null>;
|
|
83
|
+
/**
|
|
84
|
+
* Speed of the folds; `0` holds them and a negative value reverses them.
|
|
85
|
+
* Changing it never jumps the picture. @default 1
|
|
86
|
+
*/
|
|
87
|
+
readonly speed: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
88
|
+
/**
|
|
89
|
+
* How hard the pointer stirs the folds; `0` leaves the pointer out and a
|
|
90
|
+
* negative value stirs them the other way. @default 1
|
|
91
|
+
*/
|
|
92
|
+
readonly amplitude: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
93
|
+
/** Whether the pointer stirs the folds at all. @default true */
|
|
94
|
+
readonly followPointer: import("@angular/core").InputSignalWithTransform<boolean, any>;
|
|
95
|
+
/**
|
|
96
|
+
* A colour the author chose, published so the stand-in takes it too; `null` while
|
|
97
|
+
* the input is unset. On a variable of its own rather than on the hook, which an
|
|
98
|
+
* author sets from outside: a `null` binding wipes a value of its own name from the
|
|
99
|
+
* host's `style` attribute.
|
|
100
|
+
*/
|
|
101
|
+
protected readonly standInColor: import("@angular/core").Signal<string | null>;
|
|
102
|
+
/** The colour the canvas resolves: an input that is unset, empty or blank leaves the hook in charge. */
|
|
103
|
+
private readonly expression;
|
|
104
|
+
/** Whether the pointer is listened for: never under `prefers-reduced-motion`, read live. */
|
|
105
|
+
private readonly listening;
|
|
106
|
+
/**
|
|
107
|
+
* Whether anything can change between two frames. While it is `false` there is
|
|
108
|
+
* no loop, only a still frame.
|
|
109
|
+
*/
|
|
110
|
+
private readonly moving;
|
|
111
|
+
/**
|
|
112
|
+
* Flips once the canvas has drawn, which fades it in over the stand-in. Set
|
|
113
|
+
* inside the draw rather than at the end of the boot, so a canvas with nothing
|
|
114
|
+
* on it is never shown, and back to `false` with a lost context.
|
|
115
|
+
*/
|
|
116
|
+
protected readonly painted: import("@angular/core").WritableSignal<boolean>;
|
|
117
|
+
private readonly canvasRef;
|
|
118
|
+
private readonly host;
|
|
119
|
+
private readonly zone;
|
|
120
|
+
private readonly destroyRef;
|
|
121
|
+
private readonly platform;
|
|
122
|
+
private readonly isBrowser;
|
|
123
|
+
private gl;
|
|
124
|
+
private gpu;
|
|
125
|
+
/** The size the canvas is backed at, in bitmap pixels. */
|
|
126
|
+
private bitmap;
|
|
127
|
+
private rafId;
|
|
128
|
+
/** The three phases, each in `[0, 2π)`. Kept across a parked loop, so the folds resume in place. */
|
|
129
|
+
private readonly phase;
|
|
130
|
+
/**
|
|
131
|
+
* `uPointer` as drawn (`x`, `y`), and where it is heading before `amplitude`
|
|
132
|
+
* (`aimX`, `aimY`). `amplitude` is applied per frame rather than kept in the aim,
|
|
133
|
+
* so changing it eases over like any other move instead of jumping.
|
|
134
|
+
*/
|
|
135
|
+
private readonly pointer;
|
|
136
|
+
/** The last pointer position in viewport coordinates, while a frame still owes it a look at the host's rect. */
|
|
137
|
+
private lastMove;
|
|
138
|
+
/** The last colour string the cascade resolved to, and its channels: the parse is skipped while it holds. */
|
|
139
|
+
private resolved;
|
|
140
|
+
private channels;
|
|
141
|
+
/**
|
|
142
|
+
* Whether the picture changed since the loop last drew it — the colour, the
|
|
143
|
+
* scheme, a restart. The loop skips the frames that would only repeat the last
|
|
144
|
+
* one, and this is what makes it draw again.
|
|
145
|
+
*/
|
|
146
|
+
private dirty;
|
|
147
|
+
/** Flips once a program is built, and back when the context goes — everything that draws waits for it. */
|
|
148
|
+
private readonly booted;
|
|
149
|
+
/** Whether the host is in the viewport; stays `true` without an observer. */
|
|
150
|
+
private readonly onScreen;
|
|
151
|
+
/**
|
|
152
|
+
* Whether the bitmap has an area. The intersection observer calls a zero-area
|
|
153
|
+
* canvas intersecting and sends no entry when it gains a size, so this reads the
|
|
154
|
+
* bitmap instead.
|
|
155
|
+
*/
|
|
156
|
+
private readonly hasBox;
|
|
157
|
+
constructor();
|
|
158
|
+
private boot;
|
|
159
|
+
/**
|
|
160
|
+
* Compile, link and upload what one context needs, and make it current. Returns
|
|
161
|
+
* `null` when it cannot: on a lost context, where every call answers no and
|
|
162
|
+
* nothing is wrong with the shader, it says nothing.
|
|
163
|
+
*/
|
|
164
|
+
private build;
|
|
165
|
+
private compile;
|
|
166
|
+
/**
|
|
167
|
+
* Give the GPU resources back at once rather than to the garbage collector:
|
|
168
|
+
* browsers keep a small number of live contexts and kill the oldest, so a
|
|
169
|
+
* navigating single-page app would lose the context of a page still on screen.
|
|
170
|
+
* Chromium frees the slot here too. WebKit holds it until the context is collected,
|
|
171
|
+
* and no API frees it sooner, so a still or parked host can still be evicted there.
|
|
172
|
+
*/
|
|
173
|
+
private release;
|
|
174
|
+
/**
|
|
175
|
+
* Back the canvas for a `width` × `height` box, in CSS pixels. Returns whether
|
|
176
|
+
* anything changed: writing `canvas.width` clears the bitmap even to the value it
|
|
177
|
+
* already has, so an unchanged size is left alone. Rounded down, because rounding
|
|
178
|
+
* to nearest could carry a box back over the budget it was just scaled under.
|
|
179
|
+
*/
|
|
180
|
+
private fit;
|
|
181
|
+
/** Start the folds, and the pointer listeners when asked; returns what stops both. */
|
|
182
|
+
private animate;
|
|
183
|
+
/**
|
|
184
|
+
* Step the phases by `step` ms, and return whether they moved. Stepped rather
|
|
185
|
+
* than computed from a clock: a clock times `speed` is a different angle the
|
|
186
|
+
* moment `speed` changes, so moving the input would jump the picture, and here
|
|
187
|
+
* it only changes how far the next step goes.
|
|
188
|
+
*/
|
|
189
|
+
private turn;
|
|
190
|
+
/**
|
|
191
|
+
* Follow the pointer. On the parent, not the host: content in front of the canvas
|
|
192
|
+
* receives the pointer, and its events bubble to the parent, never to a sibling.
|
|
193
|
+
* Placed directly in a shadow root it has none, and the shadow host is where those
|
|
194
|
+
* composed events land. Never the host itself, which takes no pointer events and
|
|
195
|
+
* so could never hear one.
|
|
196
|
+
*/
|
|
197
|
+
private listenToPointer;
|
|
198
|
+
private aimAtRest;
|
|
199
|
+
/**
|
|
200
|
+
* Bring the pointer towards its target by `step` ms, and return whether it moved.
|
|
201
|
+
*
|
|
202
|
+
* The rect is read here, at most once a frame, rather than on every event, and it
|
|
203
|
+
* is the box as drawn, after any transform on an ancestor, so a pointer lands where
|
|
204
|
+
* it is seen. The offset is relative to the box, so a transform needs nothing more.
|
|
205
|
+
*/
|
|
206
|
+
private easePointer;
|
|
207
|
+
/** Bring the canvas up to date after the picture changed: a still frame now, or the loop's next one. */
|
|
208
|
+
private repaint;
|
|
209
|
+
/**
|
|
210
|
+
* One frame at the current phases and pointer. Leaves `dirty` set when it has
|
|
211
|
+
* nothing to draw on, a lost context or an empty box, so the next chance draws.
|
|
212
|
+
*/
|
|
213
|
+
private draw;
|
|
214
|
+
/**
|
|
215
|
+
* The tint as shader channels. Resolved through the cascade on every draw, since
|
|
216
|
+
* a uniform reads neither a `var()` nor a `light-dark()` and a hook changed by a
|
|
217
|
+
* rule on the host should reach the next frame, and parsed only when that string
|
|
218
|
+
* changes.
|
|
219
|
+
*/
|
|
220
|
+
private tint;
|
|
221
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WrIridescence, never>;
|
|
222
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WrIridescence, "wr-iridescence", never, {
|
|
223
|
+
"color": {
|
|
224
|
+
"alias": "color";
|
|
225
|
+
"required": false;
|
|
226
|
+
"isSignal": true;
|
|
227
|
+
};
|
|
228
|
+
"speed": {
|
|
229
|
+
"alias": "speed";
|
|
230
|
+
"required": false;
|
|
231
|
+
"isSignal": true;
|
|
232
|
+
};
|
|
233
|
+
"amplitude": {
|
|
234
|
+
"alias": "amplitude";
|
|
235
|
+
"required": false;
|
|
236
|
+
"isSignal": true;
|
|
237
|
+
};
|
|
238
|
+
"followPointer": {
|
|
239
|
+
"alias": "followPointer";
|
|
240
|
+
"required": false;
|
|
241
|
+
"isSignal": true;
|
|
242
|
+
};
|
|
243
|
+
}, {}, never, never, true, never>;
|
|
244
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { BaseHarnessFilters, ComponentHarness, HarnessPredicate } from "@angular/cdk/testing";
|
|
2
|
+
/** Narrows which `<wr-ripple-grid>` a harness query matches. */
|
|
3
|
+
interface WrRippleGridHarnessFilters extends BaseHarnessFilters {
|
|
4
|
+
/**
|
|
5
|
+
* Match only grids whose canvas has drawn (`true`) or only grids still showing the
|
|
6
|
+
* stand-in lines (`false`). A ripple grid has no name of its own, so this is the one
|
|
7
|
+
* state that tells two of them apart — see `WrRippleGridHarness.isPainted`, which
|
|
8
|
+
* explains why the answer is always `false` in a unit test.
|
|
9
|
+
*/
|
|
10
|
+
readonly painted?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Test harness for `<wr-ripple-grid>` — grid lines the pointer sends ripples through.
|
|
14
|
+
*
|
|
15
|
+
* **The lines and the ripples are unreadable and always will be.** They are strokes on
|
|
16
|
+
* a 2D canvas, laid out from the host's measured box and bent by rings that exist only
|
|
17
|
+
* while frames run; a unit test has no box and no drawing context, so there is nothing
|
|
18
|
+
* to count and nothing to compare. What the component publishes to the DOM is small
|
|
19
|
+
* and deliberate: the handover flag {@link isPainted}, the cell {@link getCellSizePx}
|
|
20
|
+
* and line width {@link getLineWidthPx} the CSS stand-in grid draws at before the
|
|
21
|
+
* canvas takes over, and the surface itself.
|
|
22
|
+
*
|
|
23
|
+
* Both numbers are read from the host's inline declaration, never computed: the
|
|
24
|
+
* stylesheet declares `--wr-ripple-grid-cell-size` and `--wr-ripple-grid-line-width`
|
|
25
|
+
* too, as the stand-in's own defaults, so a computed read would answer `40` and `1` on
|
|
26
|
+
* a component that had stopped publishing anything — the break the methods exist to
|
|
27
|
+
* catch.
|
|
28
|
+
*
|
|
29
|
+
* There is no `getLineCount()`, `getRipples()` or `getCanvasSize()`: the grid is laid
|
|
30
|
+
* out from the host's layout box, which is 0×0 here, and the rings live in a frame
|
|
31
|
+
* loop jsdom never runs. No `getLineColor()` or `getRippleColor()` — they are canvas
|
|
32
|
+
* strokes resolved from themed custom properties that only a stylesheet supplies. No
|
|
33
|
+
* `press()` or `moveTo()`: the pointer listeners go on only once a context exists, and
|
|
34
|
+
* what they move is canvas pixels. No `isIdle()`: the idle ring is a timer and a frame,
|
|
35
|
+
* and neither leaves a trace in the DOM. And no `isReducedMotion()`: the still grid is
|
|
36
|
+
* drawn through the same code and sets the same flag, so the DOM is identical either
|
|
37
|
+
* way and any answer would be a guess.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* const grid = await loader.getHarness(WrRippleGridHarness);
|
|
42
|
+
*
|
|
43
|
+
* expect(await grid.hasCanvas()).toBe(true);
|
|
44
|
+
* expect(await grid.isDecorative()).toBe(true);
|
|
45
|
+
* expect(await grid.getCellSizePx()).toBe(40);
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @see https://ngwr.dev/guides/testing
|
|
49
|
+
*/
|
|
50
|
+
export declare class WrRippleGridHarness extends ComponentHarness {
|
|
51
|
+
static hostSelector: string;
|
|
52
|
+
/** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
|
|
53
|
+
static with(options?: WrRippleGridHarnessFilters): HarnessPredicate<WrRippleGridHarness>;
|
|
54
|
+
private readonly canvas;
|
|
55
|
+
/**
|
|
56
|
+
* Whether the canvas has drawn a frame and retired the CSS stand-in grid.
|
|
57
|
+
*
|
|
58
|
+
* **In a unit test this is always `false`, and asserting exactly that is the point.**
|
|
59
|
+
* jsdom hands back no 2D context, so the component must leave the stand-in up rather
|
|
60
|
+
* than declare itself painted over a blank box — the flag is set inside the draw for
|
|
61
|
+
* that reason, not at the end of the boot. A spec that waits for this to turn `true`
|
|
62
|
+
* waits forever.
|
|
63
|
+
*/
|
|
64
|
+
isPainted(): Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* The distance between grid lines, in pixels, as the component publishes it —
|
|
67
|
+
* `[cellSize]`, floored at the 12px the canvas lays the grid out at.
|
|
68
|
+
*
|
|
69
|
+
* The canvas half of `[cellSize]` is invisible here, but the stand-in half is not,
|
|
70
|
+
* and a stand-in drawing at one cell while the canvas arrives at another moves every
|
|
71
|
+
* line under the reader on hydration.
|
|
72
|
+
*/
|
|
73
|
+
getCellSizePx(): Promise<number>;
|
|
74
|
+
/**
|
|
75
|
+
* The line width, in pixels, as the component publishes it for the stand-in —
|
|
76
|
+
* `[lineWidth]`, floored at the 0.25px the canvas strokes at.
|
|
77
|
+
*/
|
|
78
|
+
getLineWidthPx(): Promise<number>;
|
|
79
|
+
/**
|
|
80
|
+
* Whether the grid is hidden from assistive tech.
|
|
81
|
+
*
|
|
82
|
+
* A background canvas has nothing to announce, so losing this leaves a screen reader
|
|
83
|
+
* stopping on a nameless graphic in front of the section's actual content.
|
|
84
|
+
*/
|
|
85
|
+
isDecorative(): Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* Whether the drawing surface is in the markup.
|
|
88
|
+
*
|
|
89
|
+
* It is there in every state, including the ones where nothing is ever drawn on it —
|
|
90
|
+
* prerendered, no 2D context, reduced motion — so the stand-in has something to sit
|
|
91
|
+
* behind and {@link isPainted} has something to answer about.
|
|
92
|
+
*/
|
|
93
|
+
hasCanvas(): Promise<boolean>;
|
|
94
|
+
private publishedPx;
|
|
95
|
+
}
|
|
96
|
+
export type { WrRippleGridHarnessFilters };
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Ripple-grid background — thin grid lines on a 2D canvas that the pointer
|
|
4
|
+
* sends ripples through. A press sends out a ring that travels outward, bends
|
|
5
|
+
* the lines it passes away from where it started and lights them in the ripple
|
|
6
|
+
* colour, and fades as it goes; with `rippleOnMove` a moving pointer leaves a
|
|
7
|
+
* trail of softer rings behind it. Fills its nearest positioned ancestor; put
|
|
8
|
+
* it behind hero copy or section content.
|
|
9
|
+
*
|
|
10
|
+
* With nothing pressed or moved the grid is still, and asks for no frames at
|
|
11
|
+
* all. `idleInterval` sends a softer ring out from the centre every so many
|
|
12
|
+
* milliseconds on its own; it is off by default, so a page that wants a grid
|
|
13
|
+
* which moves before anyone touches it asks for one. Each ring lives until it
|
|
14
|
+
* has faded or left the box, and never longer than six seconds.
|
|
15
|
+
*
|
|
16
|
+
* The pointer is followed on the host's PARENT, with passive listeners, so the
|
|
17
|
+
* grid answers a pointer that is over the content in front of it rather than
|
|
18
|
+
* over the canvas — the host itself takes no pointer events and never steals a
|
|
19
|
+
* click. Placed directly in a shadow root, where it has no parent element, it
|
|
20
|
+
* follows the pointer on the shadow host; with neither it listens nowhere, and
|
|
21
|
+
* only an idle ring ever moves it. Content placed after it needs
|
|
22
|
+
* `position: relative` (or any z-index) to paint above it, as with any
|
|
23
|
+
* absolutely positioned layer.
|
|
24
|
+
*
|
|
25
|
+
* The grid is laid out in the host's own box, before transforms, so one that
|
|
26
|
+
* boots inside a scaling-in panel (a dialog opening) is not stretched when the
|
|
27
|
+
* animation ends, and the pointer is mapped back through the transform.
|
|
28
|
+
*
|
|
29
|
+
* Decorative: the canvas is `aria-hidden`, the host has no role and nothing in
|
|
30
|
+
* it takes focus. The frame loop runs only while a ring is alive, and never
|
|
31
|
+
* while the host is off screen; an idle ring comes due only while frames run,
|
|
32
|
+
* so a hidden tab does not queue them up.
|
|
33
|
+
*
|
|
34
|
+
* Under `prefers-reduced-motion` one still grid is drawn, in the line colour,
|
|
35
|
+
* with no ripples, no idle rings and no pointer listeners; it is drawn again
|
|
36
|
+
* when an input, the box or the page's colour scheme changes. The preference
|
|
37
|
+
* is read live, and switching it on drops the rings already travelling.
|
|
38
|
+
*
|
|
39
|
+
* Colours are theme tokens by default — the lines `--wr-border-base`, the lit
|
|
40
|
+
* stretches `--wr-color-primary` — through the `--wr-ripple-grid-line-color`
|
|
41
|
+
* and `--wr-ripple-grid-ripple-color` hooks, and resolved before they reach
|
|
42
|
+
* the canvas, which reads neither a `var()` nor a `light-dark()`.
|
|
43
|
+
*
|
|
44
|
+
* Until the canvas has drawn — the seconds before hydration on a prerendered
|
|
45
|
+
* page — the stylesheet paints the same grid, at the same cell, width and
|
|
46
|
+
* colour, and `.wr-ripple-grid--painted` retires it.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```html
|
|
50
|
+
* <section style="position: relative; min-height: 24rem; overflow: hidden">
|
|
51
|
+
* <wr-ripple-grid />
|
|
52
|
+
* <h1 style="position: relative">Hero copy above the grid</h1>
|
|
53
|
+
* </section>
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @see https://ngwr.dev/bits/ripple-grid
|
|
57
|
+
*/
|
|
58
|
+
export declare class WrRippleGrid {
|
|
59
|
+
/** Distance between grid lines in px, never under 12. @default 40 */
|
|
60
|
+
readonly cellSize: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
61
|
+
/** Line colour, any CSS colour. When unset, `--wr-ripple-grid-line-color` decides. */
|
|
62
|
+
readonly lineColor: import("@angular/core").InputSignal<string | null>;
|
|
63
|
+
/** Colour a line takes where a ripple passes, any CSS colour. When unset, `--wr-ripple-grid-ripple-color` decides. */
|
|
64
|
+
readonly rippleColor: import("@angular/core").InputSignal<string | null>;
|
|
65
|
+
/** Line width in px, never under 0.25. @default 1 */
|
|
66
|
+
readonly lineWidth: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
67
|
+
/**
|
|
68
|
+
* How far a fresh ripple from a press bends the lines at its crest, in px;
|
|
69
|
+
* a ripple the moving pointer leaves bends them 40% as far. `0` keeps the
|
|
70
|
+
* lines straight and only lights them, and a negative value bends them
|
|
71
|
+
* inward. A bend steep enough to fold a line back over itself is never
|
|
72
|
+
* drawn: one ring, or several where they overlap, bends a line at most about
|
|
73
|
+
* 0.3 of a cell for cells from 22 to 80px — 11.7px at the default 40 — and
|
|
74
|
+
* rings that overlap share that bound rather than adding past it. @default 10
|
|
75
|
+
*/
|
|
76
|
+
readonly strength: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
77
|
+
/** How fast a ripple travels outward, in px per second; `0` keeps it where it started. @default 320 */
|
|
78
|
+
readonly speed: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
79
|
+
/**
|
|
80
|
+
* How fast a ripple fades, per second: its strength is multiplied by
|
|
81
|
+
* `e^-decay` every second, so `1.4` halves it in half a second. `0` keeps it
|
|
82
|
+
* at full strength until it leaves the box. @default 1.4
|
|
83
|
+
*/
|
|
84
|
+
readonly decay: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
85
|
+
/** Whether a moving pointer leaves ripples behind it, and not only a press. @default true */
|
|
86
|
+
readonly rippleOnMove: import("@angular/core").InputSignalWithTransform<boolean, any>;
|
|
87
|
+
/**
|
|
88
|
+
* Milliseconds between the softer ripples sent out from the centre on their
|
|
89
|
+
* own, never under 500; `0` sends none, and the grid then stays still until
|
|
90
|
+
* the pointer moves it. @default 0
|
|
91
|
+
*/
|
|
92
|
+
readonly idleInterval: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
93
|
+
/** The cell the grid is laid out at: `cellSize`, floored. */
|
|
94
|
+
protected readonly cell: import("@angular/core").Signal<number>;
|
|
95
|
+
/** The line width drawn: `lineWidth`, floored. */
|
|
96
|
+
protected readonly stroke: import("@angular/core").Signal<number>;
|
|
97
|
+
/**
|
|
98
|
+
* A line colour the author chose, published so the stand-in draws in it too;
|
|
99
|
+
* `null` while the input is unset. On a variable of its own rather than on the
|
|
100
|
+
* hook, which an author sets from outside: a `null` binding wipes a value of its
|
|
101
|
+
* own name from the host's `style` attribute.
|
|
102
|
+
*/
|
|
103
|
+
protected readonly standInColor: import("@angular/core").Signal<string | null>;
|
|
104
|
+
/** The colours the canvas resolves: an input that is unset, empty or blank leaves the hook in charge. */
|
|
105
|
+
private readonly lineExpression;
|
|
106
|
+
private readonly rippleExpression;
|
|
107
|
+
/** The idle interval in force, in ms; 0 when there is none. */
|
|
108
|
+
private readonly idle;
|
|
109
|
+
/** A ring's half-width, in px: a share of the cell, within bounds. */
|
|
110
|
+
private readonly ringWidth;
|
|
111
|
+
/**
|
|
112
|
+
* Flips once the canvas has drawn, which retires the CSS stand-in grid.
|
|
113
|
+
*
|
|
114
|
+
* A canvas cannot be prerendered, so on an SSR'd page it is blank until the
|
|
115
|
+
* bundle has loaded and hydrated. The stylesheet paints the same lines at the
|
|
116
|
+
* same cell from the prerendered HTML in the meantime, and this hands over.
|
|
117
|
+
*/
|
|
118
|
+
protected readonly painted: import("@angular/core").WritableSignal<boolean>;
|
|
119
|
+
private readonly canvasRef;
|
|
120
|
+
private readonly host;
|
|
121
|
+
private readonly zone;
|
|
122
|
+
private readonly destroyRef;
|
|
123
|
+
private readonly platform;
|
|
124
|
+
private readonly isBrowser;
|
|
125
|
+
private ctx;
|
|
126
|
+
/** The host's layout box, in CSS pixels before any transform: what the grid is laid out in. */
|
|
127
|
+
private box;
|
|
128
|
+
/** Bitmap pixels per CSS pixel the canvas is backed at; 0 until the first fit. */
|
|
129
|
+
private ratio;
|
|
130
|
+
private readonly ripples;
|
|
131
|
+
private readonly pending;
|
|
132
|
+
/** The live rings as this frame draws them, reused frame to frame. */
|
|
133
|
+
private readonly rings;
|
|
134
|
+
private ringCount;
|
|
135
|
+
/** The rings that reach the line being traced, reused line to line. */
|
|
136
|
+
private readonly near;
|
|
137
|
+
/** Lit stretches by alpha step, reused frame to frame. */
|
|
138
|
+
private readonly lit;
|
|
139
|
+
private anyLit;
|
|
140
|
+
/** Where the last trail ripple was left, in viewport coordinates, while the pointer is over the parent. */
|
|
141
|
+
private readonly anchor;
|
|
142
|
+
/** The ring half-width and sample step this frame draws with, read once rather than per sample. */
|
|
143
|
+
private frameRing;
|
|
144
|
+
private frameStep;
|
|
145
|
+
/** One sample, displaced: written by `displace()`, read straight after. */
|
|
146
|
+
private sx;
|
|
147
|
+
private sy;
|
|
148
|
+
private sg;
|
|
149
|
+
private rafId;
|
|
150
|
+
private lastTime;
|
|
151
|
+
/** The frame callback, made once rather than a closure per frame. */
|
|
152
|
+
private readonly frame;
|
|
153
|
+
/** Whether the idle timer has fired and the next frame owes the centre a ring. */
|
|
154
|
+
private idleDue;
|
|
155
|
+
/** Schedules a frame while motion is allowed; `null` under reduced motion. */
|
|
156
|
+
private wake;
|
|
157
|
+
/** Arms the next idle ring while motion is allowed; `null` under reduced motion. */
|
|
158
|
+
private armIdle;
|
|
159
|
+
/** Flips once `boot()` has a context and a box — everything after waits for it. */
|
|
160
|
+
private readonly booted;
|
|
161
|
+
constructor();
|
|
162
|
+
private boot;
|
|
163
|
+
/** Follow the pointer, keep the idle timer and draw on demand; returns what stops all three. */
|
|
164
|
+
private interact;
|
|
165
|
+
/** Queue a ring at a viewport point for the next frame, and mark the point for the trail. */
|
|
166
|
+
private emit;
|
|
167
|
+
/** Draw the grid as it should look now: a frame while motion is allowed, at once under reduced motion. */
|
|
168
|
+
private requestDraw;
|
|
169
|
+
/** Fit the canvas to a new box or pixel ratio and, when that cleared it, repaint at once. */
|
|
170
|
+
private resize;
|
|
171
|
+
/**
|
|
172
|
+
* Back the canvas for a `width` × `height` box, in CSS pixels, at the screen's
|
|
173
|
+
* pixel ratio. Returns whether anything changed: writing `canvas.width` clears
|
|
174
|
+
* the bitmap even to the value it already has, so an unchanged box is left alone.
|
|
175
|
+
*/
|
|
176
|
+
private fit;
|
|
177
|
+
/**
|
|
178
|
+
* Bitmap pixels per CSS pixel for a box of `area` CSS px². The screen's own
|
|
179
|
+
* ratio when it fits under 2 and the pixel budget, so a bitmap pixel is a
|
|
180
|
+
* device pixel and a snapped line lands on whole device pixels; otherwise the
|
|
181
|
+
* largest whole fraction of it that fits — a half, a third — so each bitmap
|
|
182
|
+
* pixel still covers a whole number of device pixels and every line keeps one
|
|
183
|
+
* weight. A ratio between (1.31 on a 2x screen) is resampled onto the screen
|
|
184
|
+
* by a fraction, which no snapping survives. Never below 1 on a 1x screen or
|
|
185
|
+
* better: a 1.5x screen past the budget takes 1 and accepts the resampling,
|
|
186
|
+
* rather than a bitmap coarser than the CSS box.
|
|
187
|
+
*/
|
|
188
|
+
private pixelRatio;
|
|
189
|
+
/** No ring alive, none queued, none owed. */
|
|
190
|
+
private rest;
|
|
191
|
+
private tick;
|
|
192
|
+
/** Age every ring by `step` ms, place the queued ones, and retire the ones with nothing left to show. */
|
|
193
|
+
private advance;
|
|
194
|
+
/**
|
|
195
|
+
* Start a ring at a box point. Past `MAX_RIPPLES` it replaces the faintest live
|
|
196
|
+
* ring — the oldest of the faintest on a tie — so a press in the middle of a
|
|
197
|
+
* fast drag is not the one that vanishes; when every live ring is still
|
|
198
|
+
* stronger than this one starts out, this one is the faintest, and it is dropped.
|
|
199
|
+
*/
|
|
200
|
+
private place;
|
|
201
|
+
/** How strong a ring still is, 0..1: its share, faded by `decay` and by the end of its life. */
|
|
202
|
+
private energy;
|
|
203
|
+
/**
|
|
204
|
+
* How far past each edge the lines run, so a bend never pulls a line's end into
|
|
205
|
+
* view: a cell, plus the most the rings at one point can bend it — the overlap
|
|
206
|
+
* budget, or every ring at full strength when that is less.
|
|
207
|
+
*/
|
|
208
|
+
private margin;
|
|
209
|
+
private draw;
|
|
210
|
+
/**
|
|
211
|
+
* Work out where every live ring stands at its current age, for this frame's
|
|
212
|
+
* samples, and hold the rings that overlap to the bend budget together.
|
|
213
|
+
*
|
|
214
|
+
* Each ring's bend is scaled by its share of the budget against every ring
|
|
215
|
+
* whose band meets its own: wherever two rings both reach a point their bands
|
|
216
|
+
* meet, so the rings acting on any point add up to the budget at most (see
|
|
217
|
+
* `PUSH_PER_WIDTH`), while a ring that meets no other keeps its full bend. A
|
|
218
|
+
* pair counts in full once its bands meet and fades out over one half-width of
|
|
219
|
+
* gap before that, so two rings drifting into each other give way smoothly
|
|
220
|
+
* rather than both shrinking in one frame.
|
|
221
|
+
*/
|
|
222
|
+
private prepareRings;
|
|
223
|
+
/**
|
|
224
|
+
* Add one grid line to the path — vertical at `x = fixed` or horizontal at
|
|
225
|
+
* `y = fixed`, from `from` to `to` along it — and file its lit stretches by
|
|
226
|
+
* alpha step. A line no ring reaches is two points; one a ring reaches is
|
|
227
|
+
* sampled only across the stretch the rings can bend, and straight either
|
|
228
|
+
* side of it. Where that stretch runs to an end of the line, the end is the
|
|
229
|
+
* displaced sample itself: drawing the undisplaced end before it would step
|
|
230
|
+
* the line back along itself.
|
|
231
|
+
*/
|
|
232
|
+
private trace;
|
|
233
|
+
/**
|
|
234
|
+
* Where the grid point `(x, y)` is drawn and how lit it is, with the first
|
|
235
|
+
* `count` rings in `near` acting on it; written to `sx`, `sy` and `sg`.
|
|
236
|
+
*
|
|
237
|
+
* Each ring pushes the point along the line from its origin. The push is a
|
|
238
|
+
* bell around the crest, shaped by a cosine so the crest bends outward and a
|
|
239
|
+
* shallow trough either side bends back in — what reads as a ripple rather
|
|
240
|
+
* than a bulge — and eased in over the first half-width, so the lines through
|
|
241
|
+
* the origin itself do not tear. The glow is the bell alone. Overlapping rings
|
|
242
|
+
* add up; `prepareRings()` has already held them to a budget that cannot fold
|
|
243
|
+
* the grid, so nothing is clamped here.
|
|
244
|
+
*/
|
|
245
|
+
private displace;
|
|
246
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WrRippleGrid, never>;
|
|
247
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WrRippleGrid, "wr-ripple-grid", never, {
|
|
248
|
+
"cellSize": {
|
|
249
|
+
"alias": "cellSize";
|
|
250
|
+
"required": false;
|
|
251
|
+
"isSignal": true;
|
|
252
|
+
};
|
|
253
|
+
"lineColor": {
|
|
254
|
+
"alias": "lineColor";
|
|
255
|
+
"required": false;
|
|
256
|
+
"isSignal": true;
|
|
257
|
+
};
|
|
258
|
+
"rippleColor": {
|
|
259
|
+
"alias": "rippleColor";
|
|
260
|
+
"required": false;
|
|
261
|
+
"isSignal": true;
|
|
262
|
+
};
|
|
263
|
+
"lineWidth": {
|
|
264
|
+
"alias": "lineWidth";
|
|
265
|
+
"required": false;
|
|
266
|
+
"isSignal": true;
|
|
267
|
+
};
|
|
268
|
+
"strength": {
|
|
269
|
+
"alias": "strength";
|
|
270
|
+
"required": false;
|
|
271
|
+
"isSignal": true;
|
|
272
|
+
};
|
|
273
|
+
"speed": {
|
|
274
|
+
"alias": "speed";
|
|
275
|
+
"required": false;
|
|
276
|
+
"isSignal": true;
|
|
277
|
+
};
|
|
278
|
+
"decay": {
|
|
279
|
+
"alias": "decay";
|
|
280
|
+
"required": false;
|
|
281
|
+
"isSignal": true;
|
|
282
|
+
};
|
|
283
|
+
"rippleOnMove": {
|
|
284
|
+
"alias": "rippleOnMove";
|
|
285
|
+
"required": false;
|
|
286
|
+
"isSignal": true;
|
|
287
|
+
};
|
|
288
|
+
"idleInterval": {
|
|
289
|
+
"alias": "idleInterval";
|
|
290
|
+
"required": false;
|
|
291
|
+
"isSignal": true;
|
|
292
|
+
};
|
|
293
|
+
}, {}, never, never, true, never>;
|
|
294
|
+
}
|
|
@@ -158,5 +158,4 @@ interface WrFluidConfig {
|
|
|
158
158
|
/** Fixed splat colour (hex) when `rainbow` is off. */
|
|
159
159
|
readonly color: string;
|
|
160
160
|
}
|
|
161
|
-
declare function createFluidSimulation(canvas: HTMLCanvasElement, config: WrFluidConfig): (() => void) | null;
|
|
162
161
|
export type { WrFluidConfig };
|
|
@@ -102,7 +102,9 @@ export declare class WrSpotlightCardHarness extends ComponentHarness {
|
|
|
102
102
|
*/
|
|
103
103
|
getRadiusPercent(): Promise<number>;
|
|
104
104
|
/**
|
|
105
|
-
* The
|
|
105
|
+
* The colour `[spotlightColor]` published on the host, or `null` when the input is unset.
|
|
106
|
+
* The `--wr-spotlight-color` hook then decides, which is the theme's value unless the
|
|
107
|
+
* author set it; this method does not read the hook.
|
|
106
108
|
*
|
|
107
109
|
* `null` IS the contract for an unset `[spotlightColor]`, not a gap in it. The
|
|
108
110
|
* stylesheet's own default is a `light-dark()` over `--wr-color-on-surface`, and that
|