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,237 @@
|
|
|
1
|
+
@use '../../../theme/styles' as theme;
|
|
2
|
+
@use '../../../popover/styles' as popover-styles; // the `.wr-tooltip` chip the hover tooltip renders into
|
|
3
|
+
|
|
4
|
+
// Styles for the entry points this component's own markup renders. With `dataTable`, the
|
|
5
|
+
// figures render as a `<wr-chart-table>` beside the stages, which its own sheet clips out
|
|
6
|
+
// of sight.
|
|
7
|
+
@use '../../core/styles' as core-styles; // WrChartTable
|
|
8
|
+
|
|
9
|
+
.wr-funnel-chart {
|
|
10
|
+
--wr-funnel-chart-font-family: var(--wr-font-family-base);
|
|
11
|
+
--wr-funnel-chart-color: var(--wr-color-on-surface);
|
|
12
|
+
// Three columns: the labels at inline start, the bars centred in the track, the figures
|
|
13
|
+
// at inline end. The label column is at most this wide and gives way first, ellipsised;
|
|
14
|
+
// the track never takes less than its share, so a phone keeps a funnel to look at.
|
|
15
|
+
--wr-funnel-chart-column-gap: var(--wr-space-md);
|
|
16
|
+
--wr-funnel-chart-label-max-width: 12rem;
|
|
17
|
+
--wr-funnel-chart-track-min-width: 40%;
|
|
18
|
+
--wr-funnel-chart-label-font-size: var(--wr-text-sm);
|
|
19
|
+
--wr-funnel-chart-label-line-height: var(--wr-text-sm-leading);
|
|
20
|
+
--wr-funnel-chart-label-color: var(--wr-color-on-surface);
|
|
21
|
+
--wr-funnel-chart-value-font-size: var(--wr-text-sm);
|
|
22
|
+
--wr-funnel-chart-value-line-height: var(--wr-text-sm-leading);
|
|
23
|
+
--wr-funnel-chart-value-font-weight: var(--wr-font-weight-medium);
|
|
24
|
+
--wr-funnel-chart-value-color: var(--wr-color-on-surface);
|
|
25
|
+
// The conversions: under each value, and between the bars.
|
|
26
|
+
--wr-funnel-chart-conversion-font-size: var(--wr-text-xs);
|
|
27
|
+
--wr-funnel-chart-conversion-line-height: var(--wr-text-xs-leading);
|
|
28
|
+
--wr-funnel-chart-conversion-color: var(--wr-color-on-surface-muted);
|
|
29
|
+
// A bar is as tall as a value with its conversion under it, so every bar is the same
|
|
30
|
+
// height whether its stage prints one line beside it or two; and as tall as its row if
|
|
31
|
+
// that is taller, so the band above and below always meets its edge.
|
|
32
|
+
--wr-funnel-chart-bar-height: calc(
|
|
33
|
+
var(--wr-funnel-chart-value-line-height) + var(--wr-funnel-chart-conversion-line-height)
|
|
34
|
+
);
|
|
35
|
+
--wr-funnel-chart-bar-radius: var(--wr-border-radius-sm);
|
|
36
|
+
// The gap between two bars, which the band fills and the share of the stage above sits on.
|
|
37
|
+
--wr-funnel-chart-gap-height: 1.5rem;
|
|
38
|
+
// The band is a faint wash of the two stages' colours: it carries no value of its own,
|
|
39
|
+
// only the narrowing the two bars' widths already state.
|
|
40
|
+
--wr-funnel-chart-band-opacity: 0.2;
|
|
41
|
+
// The share between the bars, on a wash of the surface: the band runs under it.
|
|
42
|
+
--wr-funnel-chart-gap-label-bg: color-mix(in srgb, var(--wr-color-surface) 85%, transparent);
|
|
43
|
+
--wr-funnel-chart-gap-label-padding-x: var(--wr-space-xs);
|
|
44
|
+
--wr-funnel-chart-gap-label-radius: var(--wr-border-radius-sm);
|
|
45
|
+
// The row the open tooltip is about, washed from edge to edge with the label and the
|
|
46
|
+
// figures inset from the wash.
|
|
47
|
+
--wr-funnel-chart-active-bg: var(--wr-color-hover);
|
|
48
|
+
--wr-funnel-chart-stage-radius: var(--wr-border-radius-sm);
|
|
49
|
+
--wr-funnel-chart-stage-padding-x: var(--wr-space-xs);
|
|
50
|
+
|
|
51
|
+
display: block;
|
|
52
|
+
// The containing block of the out-of-flow `dataTable` copy, as on every chart that
|
|
53
|
+
// renders it: a static host lets that 1px box resolve against an ancestor outside the
|
|
54
|
+
// chart and keep its place in an unpositioned scroller's content. No z-index, so no
|
|
55
|
+
// stacking context.
|
|
56
|
+
position: relative;
|
|
57
|
+
font-family: var(--wr-funnel-chart-font-family);
|
|
58
|
+
color: var(--wr-funnel-chart-color);
|
|
59
|
+
|
|
60
|
+
// One grid for every row, so a label, a bar and a figure line up down the funnel
|
|
61
|
+
// whatever their own widths: each stage and each gap between two stages is a subgrid
|
|
62
|
+
// of it.
|
|
63
|
+
//
|
|
64
|
+
// The figures column is `max-content`, so the labels give way first and a figure is
|
|
65
|
+
// never cut. `minmax(0, max-content)` was measured and refused: grid shares the room two
|
|
66
|
+
// intrinsic columns compete for out equally, so at 320px, with short labels, it cut a
|
|
67
|
+
// figure on every stage of a 1,234,567,890 funnel and every value of a $12,345,678.90
|
|
68
|
+
// one. The cost is a figure wider than the room left beside the track's floor, such as
|
|
69
|
+
// an 18-digit value on a phone, which overflows instead.
|
|
70
|
+
&__plot {
|
|
71
|
+
display: grid;
|
|
72
|
+
grid-template-columns:
|
|
73
|
+
fit-content(var(--wr-funnel-chart-label-max-width))
|
|
74
|
+
minmax(var(--wr-funnel-chart-track-min-width), 1fr)
|
|
75
|
+
max-content;
|
|
76
|
+
column-gap: var(--wr-funnel-chart-column-gap);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
&__stage,
|
|
80
|
+
&__gap {
|
|
81
|
+
display: grid;
|
|
82
|
+
grid-column: 1 / -1;
|
|
83
|
+
grid-template-columns: subgrid;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// The inline padding sits outside the first and last tracks, which the subgrid adds to
|
|
87
|
+
// their size; the track in the middle, where the bars and the bands are, does not move.
|
|
88
|
+
&__stage {
|
|
89
|
+
align-items: center;
|
|
90
|
+
min-height: var(--wr-funnel-chart-bar-height);
|
|
91
|
+
padding-inline: var(--wr-funnel-chart-stage-padding-x);
|
|
92
|
+
border-radius: var(--wr-funnel-chart-stage-radius);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
&__stage--active {
|
|
96
|
+
background: var(--wr-funnel-chart-active-bg);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// `min-width: 0` and the clip are what let the column give way: an item that hides its
|
|
100
|
+
// overflow has no automatic minimum, so the label is ellipsised rather than pushing the
|
|
101
|
+
// track narrower than its share. Every stage's name, the tooltip and the data table carry
|
|
102
|
+
// the whole label. It takes its direction from its own text (`dir="auto"`), so a Latin
|
|
103
|
+
// label on an RTL page is cut at its end, not its start; it keeps its grid cell either
|
|
104
|
+
// way, and lines up on its own text's start, as the treemap's names do.
|
|
105
|
+
&__label {
|
|
106
|
+
min-width: 0;
|
|
107
|
+
overflow: hidden;
|
|
108
|
+
text-overflow: ellipsis;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
font-size: var(--wr-funnel-chart-label-font-size);
|
|
111
|
+
line-height: var(--wr-funnel-chart-label-line-height);
|
|
112
|
+
color: var(--wr-funnel-chart-label-color);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// The bar's column: the bar is centred in it, and as tall as the row.
|
|
116
|
+
&__track {
|
|
117
|
+
display: flex;
|
|
118
|
+
justify-content: center;
|
|
119
|
+
align-self: stretch;
|
|
120
|
+
min-width: 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// The component writes the width, a percentage of the track: the largest stage, or
|
|
124
|
+
// `max`, is the full track. Zero and below are written as `0%`, and the floor keeps a
|
|
125
|
+
// hairline there, so a stage of zero still shows where it is and has an anchor for the
|
|
126
|
+
// tooltip; a missing stage renders no bar at all.
|
|
127
|
+
&__bar {
|
|
128
|
+
min-width: 1px;
|
|
129
|
+
border-radius: var(--wr-funnel-chart-bar-radius);
|
|
130
|
+
transition: width var(--wr-duration-slow) var(--wr-ease-out);
|
|
131
|
+
// The bar is an inline `background`, which forced colors resets to `Canvas`: every bar
|
|
132
|
+
// would vanish into the page and leave its figures floating. The SVG charts keep their
|
|
133
|
+
// fills there, so the HTML marks do too.
|
|
134
|
+
forced-color-adjust: none;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Each figure shrunk to its text against the bar's side of the column, so its own
|
|
138
|
+
// direction can follow its text (`plaintext`) and it still sits by the bar: a negative
|
|
139
|
+
// value, printed as given, is a `-` in front of digits, neither of which has a direction,
|
|
140
|
+
// and under RTL the sign would land on the far side — `20-` — while "30% of first" would
|
|
141
|
+
// read "of first 30%". Stretched, a plaintext figure would align to its own text's
|
|
142
|
+
// start, at the column's far edge under RTL.
|
|
143
|
+
&__figures {
|
|
144
|
+
display: flex;
|
|
145
|
+
flex-direction: column;
|
|
146
|
+
justify-content: center;
|
|
147
|
+
align-items: flex-start;
|
|
148
|
+
font-variant-numeric: tabular-nums;
|
|
149
|
+
white-space: nowrap;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
&__value,
|
|
153
|
+
&__overall {
|
|
154
|
+
unicode-bidi: plaintext;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
&__value {
|
|
158
|
+
font-size: var(--wr-funnel-chart-value-font-size);
|
|
159
|
+
line-height: var(--wr-funnel-chart-value-line-height);
|
|
160
|
+
font-weight: var(--wr-funnel-chart-value-font-weight);
|
|
161
|
+
color: var(--wr-funnel-chart-value-color);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
&__overall {
|
|
165
|
+
font-size: var(--wr-funnel-chart-conversion-font-size);
|
|
166
|
+
line-height: var(--wr-funnel-chart-conversion-line-height);
|
|
167
|
+
color: var(--wr-funnel-chart-conversion-color);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
&__gap {
|
|
171
|
+
height: var(--wr-funnel-chart-gap-height);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// The band and the share sit in the same cell: the track's column, the gap's height.
|
|
175
|
+
&__band,
|
|
176
|
+
&__gap-label {
|
|
177
|
+
grid-column: 2;
|
|
178
|
+
grid-row: 1;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// A polygon on the track's width, written by the component, from the upper bar's width
|
|
182
|
+
// at its top edge to the lower bar's at its bottom — both centred, so the shape is the
|
|
183
|
+
// same in either direction. The two stages' paints arrive as the custom properties
|
|
184
|
+
// below, so a stage with a colour of its own carries it into its band.
|
|
185
|
+
&__band {
|
|
186
|
+
align-self: stretch;
|
|
187
|
+
background: linear-gradient(
|
|
188
|
+
var(--wr-funnel-chart-band-from, currentColor),
|
|
189
|
+
var(--wr-funnel-chart-band-to, currentColor)
|
|
190
|
+
);
|
|
191
|
+
opacity: var(--wr-funnel-chart-band-opacity);
|
|
192
|
+
transition: clip-path var(--wr-duration-slow) var(--wr-ease-out);
|
|
193
|
+
// Painted in the stages' colours, which forced colors would reset with the bars'.
|
|
194
|
+
forced-color-adjust: none;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Positioned, so it paints above the band: the band's `opacity` makes it a stacking
|
|
198
|
+
// context, which paints over in-flow content beside it whatever the order in the DOM,
|
|
199
|
+
// and would lay the wash over the text.
|
|
200
|
+
//
|
|
201
|
+
// Bounded by the track and ellipsised, as a label is: at its 40% floor the track is
|
|
202
|
+
// about 115px on a 320px phone, and a long share — a custom `percentFormat`, or two
|
|
203
|
+
// significant digits of a tiny ratio — hung out of it over the label column. The
|
|
204
|
+
// tooltip, the stage's name and the data table carry the whole share.
|
|
205
|
+
&__gap-label {
|
|
206
|
+
position: relative;
|
|
207
|
+
place-self: center;
|
|
208
|
+
max-width: 100%;
|
|
209
|
+
overflow: hidden;
|
|
210
|
+
text-overflow: ellipsis;
|
|
211
|
+
padding: 0 var(--wr-funnel-chart-gap-label-padding-x);
|
|
212
|
+
border-radius: var(--wr-funnel-chart-gap-label-radius);
|
|
213
|
+
background: var(--wr-funnel-chart-gap-label-bg);
|
|
214
|
+
font-size: var(--wr-funnel-chart-conversion-font-size);
|
|
215
|
+
line-height: var(--wr-funnel-chart-conversion-line-height);
|
|
216
|
+
color: var(--wr-funnel-chart-conversion-color);
|
|
217
|
+
font-variant-numeric: tabular-nums;
|
|
218
|
+
white-space: nowrap;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// A bar that grows or shrinks to its new value is motion nothing asked for twice: the new
|
|
223
|
+
// width is what matters, and it is drawn at once.
|
|
224
|
+
@media (prefers-reduced-motion: reduce) {
|
|
225
|
+
.wr-funnel-chart__bar,
|
|
226
|
+
.wr-funnel-chart__band {
|
|
227
|
+
transition: none;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Forced colors paints the active row's wash as the page, so the row the tooltip is about
|
|
232
|
+
// needs an edge instead.
|
|
233
|
+
@media (forced-colors: active) {
|
|
234
|
+
.wr-funnel-chart__stage--active {
|
|
235
|
+
outline: 1px solid Highlight;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -3,16 +3,18 @@
|
|
|
3
3
|
|
|
4
4
|
.wr-gauge {
|
|
5
5
|
--wr-gauge-font-family: var(--wr-font-family-base);
|
|
6
|
+
--wr-gauge-color: var(--wr-color-on-surface);
|
|
6
7
|
--wr-gauge-text-padding-bottom: var(--wr-space-sm);
|
|
7
8
|
--wr-gauge-text-font-size: var(--wr-text-xl);
|
|
8
9
|
--wr-gauge-text-font-weight: var(--wr-font-weight-semibold);
|
|
9
10
|
--wr-gauge-suffix-margin-inline-start: var(--wr-space-xs);
|
|
10
11
|
--wr-gauge-suffix-font-size: var(--wr-text-sm);
|
|
11
12
|
--wr-gauge-suffix-font-weight: var(--wr-font-weight-medium);
|
|
13
|
+
--wr-gauge-suffix-color: var(--wr-color-on-surface-muted);
|
|
12
14
|
|
|
13
15
|
display: inline-block;
|
|
14
16
|
font-family: var(--wr-gauge-font-family);
|
|
15
|
-
color: var(--wr-color
|
|
17
|
+
color: var(--wr-gauge-color);
|
|
16
18
|
|
|
17
19
|
&__surface {
|
|
18
20
|
position: relative;
|
|
@@ -40,7 +42,7 @@
|
|
|
40
42
|
&__suffix {
|
|
41
43
|
margin-inline-start: var(--wr-gauge-suffix-margin-inline-start);
|
|
42
44
|
font-size: var(--wr-gauge-suffix-font-size);
|
|
43
|
-
color: var(--wr-
|
|
45
|
+
color: var(--wr-gauge-suffix-color);
|
|
44
46
|
font-weight: var(--wr-gauge-suffix-font-weight);
|
|
45
47
|
}
|
|
46
48
|
}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
@use '../../../theme/styles' as theme;
|
|
2
|
+
@use '../../../popover/styles' as popover-styles; // the `.wr-tooltip` chip the hover tooltip renders into
|
|
3
|
+
|
|
4
|
+
// Styles for the entry points this component's own markup renders. With `dataTable`, the
|
|
5
|
+
// figures render as a `<wr-chart-table>` beside the matrix, which its own sheet clips out
|
|
6
|
+
// of sight.
|
|
7
|
+
@use '../../core/styles' as core-styles; // WrChartTable
|
|
8
|
+
|
|
9
|
+
// A level's paint: the scale's colour (`--wr-heatmap-chart-scale-color`, which the component
|
|
10
|
+
// writes from its `color` input) mixed toward the surface, by the level's place on the scale
|
|
11
|
+
// (`--wr-heatmap-chart-level`, 0 to 1, which the component writes on every cell and every
|
|
12
|
+
// legend swatch). The lowest level keeps `--wr-heatmap-chart-min-share` of the colour, so it
|
|
13
|
+
// is a faint tint rather than the surface itself — the surface is what an EMPTY cell shows
|
|
14
|
+
// — and the highest is the colour.
|
|
15
|
+
//
|
|
16
|
+
// Mixed in OKLab rather than sRGB, because OKLab's lightness is the one that moves evenly:
|
|
17
|
+
// the levels are told apart by lightness alone, so evenly spaced shares have to look evenly
|
|
18
|
+
// spaced, in the light scheme and the dark one.
|
|
19
|
+
$fill: color-mix(
|
|
20
|
+
in oklab,
|
|
21
|
+
var(--wr-heatmap-chart-scale-color, var(--wr-color-primary))
|
|
22
|
+
calc(
|
|
23
|
+
var(--wr-heatmap-chart-min-share) + (100% - var(--wr-heatmap-chart-min-share)) * var(--wr-heatmap-chart-level, 1)
|
|
24
|
+
),
|
|
25
|
+
var(--wr-heatmap-chart-surface)
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
// The share of white a printed value takes, 1 or 0, from its cell's luminance `y` (see
|
|
29
|
+
// `__value`). A string, so Sass passes the relative-colour channel name through untouched.
|
|
30
|
+
$white: 'clamp(0, (0.17913 - y) * infinity, 1)';
|
|
31
|
+
|
|
32
|
+
.wr-heatmap-chart {
|
|
33
|
+
--wr-heatmap-chart-font-family: var(--wr-font-family-base);
|
|
34
|
+
--wr-heatmap-chart-color: var(--wr-color-on-surface);
|
|
35
|
+
// What every level is mixed toward, and how much of the colour the lowest level keeps.
|
|
36
|
+
--wr-heatmap-chart-surface: var(--wr-color-surface);
|
|
37
|
+
--wr-heatmap-chart-min-share: 15%;
|
|
38
|
+
// The cells. A row is a fixed height and the columns share the width, so the matrix
|
|
39
|
+
// fills its container and never scrolls: a scroller would need a tab stop.
|
|
40
|
+
--wr-heatmap-chart-cell-height: 2rem;
|
|
41
|
+
--wr-heatmap-chart-gap: 2px;
|
|
42
|
+
// 2px — a micro radius for cells that may be only a few pixels wide; the border-radius
|
|
43
|
+
// tokens (6px+) would round a narrow column into a capsule.
|
|
44
|
+
--wr-heatmap-chart-cell-radius: 2px;
|
|
45
|
+
--wr-heatmap-chart-cell-padding-x: var(--wr-space-xs);
|
|
46
|
+
// The values `showValues` prints. Their colour is picked per cell (see `__value`).
|
|
47
|
+
--wr-heatmap-chart-value-font-size: var(--wr-text-xs);
|
|
48
|
+
--wr-heatmap-chart-value-font-weight: var(--wr-font-weight-medium);
|
|
49
|
+
// An empty cell: the surface, hatched, inside a dashed outline. The outline is what
|
|
50
|
+
// separates it from the page, so it is drawn in the muted text colour, which clears the
|
|
51
|
+
// 3:1 WCAG 1.4.11 asks of a mark a reader needs; the hatching is texture.
|
|
52
|
+
--wr-heatmap-chart-empty-border: var(--wr-color-on-surface-muted);
|
|
53
|
+
--wr-heatmap-chart-empty-hatch: var(--wr-border-strong);
|
|
54
|
+
// The cell the tooltip is reading, ringed.
|
|
55
|
+
--wr-heatmap-chart-active-ring: var(--wr-color-on-surface);
|
|
56
|
+
--wr-heatmap-chart-active-ring-width: 2px;
|
|
57
|
+
// The row and column names, muted as an axis' labels are on every chart.
|
|
58
|
+
--wr-heatmap-chart-label-font-size: var(--wr-text-xs);
|
|
59
|
+
--wr-heatmap-chart-label-line-height: var(--wr-text-xs-leading);
|
|
60
|
+
--wr-heatmap-chart-label-color: var(--wr-color-on-surface-muted);
|
|
61
|
+
--wr-heatmap-chart-label-gap: var(--wr-space-sm);
|
|
62
|
+
--wr-heatmap-chart-row-label-max-width: 10rem;
|
|
63
|
+
// The colour-scale legend under the matrix.
|
|
64
|
+
--wr-heatmap-chart-legend-margin-top: var(--wr-space-md);
|
|
65
|
+
--wr-heatmap-chart-legend-gap: var(--wr-space-sm);
|
|
66
|
+
--wr-heatmap-chart-legend-font-size: var(--wr-text-xs);
|
|
67
|
+
--wr-heatmap-chart-legend-color: var(--wr-color-on-surface-muted);
|
|
68
|
+
--wr-heatmap-chart-swatch-width: 1.25rem;
|
|
69
|
+
--wr-heatmap-chart-swatch-height: 0.75rem;
|
|
70
|
+
|
|
71
|
+
display: block;
|
|
72
|
+
// The containing block of the out-of-flow `dataTable` copy, as on the line chart: a
|
|
73
|
+
// static host lets that 1px box resolve against an ancestor outside the chart and keep
|
|
74
|
+
// its place in an unpositioned scroller's content. No z-index, so no stacking context.
|
|
75
|
+
position: relative;
|
|
76
|
+
max-width: 100%;
|
|
77
|
+
font-family: var(--wr-heatmap-chart-font-family);
|
|
78
|
+
color: var(--wr-heatmap-chart-color);
|
|
79
|
+
|
|
80
|
+
// The names and the cells share one grid's tracks: an `auto` column for the row names,
|
|
81
|
+
// one equal column per column of the data, an `auto` row for the column names and one
|
|
82
|
+
// fixed row per row of the data. A grid follows `direction`, so under RTL the row names
|
|
83
|
+
// move to the right with no rule of their own.
|
|
84
|
+
&__matrix {
|
|
85
|
+
display: grid;
|
|
86
|
+
grid-template-columns: auto repeat(var(--wr-heatmap-chart-columns, 1), minmax(0, 1fr));
|
|
87
|
+
grid-template-rows: auto repeat(var(--wr-heatmap-chart-rows, 1), var(--wr-heatmap-chart-cell-height));
|
|
88
|
+
gap: var(--wr-heatmap-chart-gap);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
&__column-labels,
|
|
92
|
+
&__row-labels,
|
|
93
|
+
&__cells {
|
|
94
|
+
display: grid;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Tabular figures, so names that differ only in their digits — `00:00` and `11:00` — are
|
|
98
|
+
// one width, and either all fit their columns or none do.
|
|
99
|
+
&__column-labels,
|
|
100
|
+
&__row-labels {
|
|
101
|
+
font-size: var(--wr-heatmap-chart-label-font-size);
|
|
102
|
+
font-variant-numeric: tabular-nums;
|
|
103
|
+
line-height: var(--wr-heatmap-chart-label-line-height);
|
|
104
|
+
color: var(--wr-heatmap-chart-label-color);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&__column-labels {
|
|
108
|
+
grid-row: 1;
|
|
109
|
+
grid-column: 2 / -1;
|
|
110
|
+
grid-template-columns: subgrid;
|
|
111
|
+
padding-block-end: calc(var(--wr-heatmap-chart-label-gap) - var(--wr-heatmap-chart-gap));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Centred on its column and shrunk to its text, which is what lets the component read a
|
|
115
|
+
// name's whole width off its `scrollWidth`; cut with an ellipsis past its column rather
|
|
116
|
+
// than running into the next name, while the names all fit or there is one column.
|
|
117
|
+
&__column-label {
|
|
118
|
+
justify-self: center;
|
|
119
|
+
min-width: 0;
|
|
120
|
+
max-inline-size: 100%;
|
|
121
|
+
overflow: hidden;
|
|
122
|
+
text-overflow: ellipsis;
|
|
123
|
+
white-space: nowrap;
|
|
124
|
+
text-align: center;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Too wide for their columns: the component draws every n-th name
|
|
128
|
+
// (`--wr-heatmap-chart-label-every`), each starting at its own column — as a calendar's
|
|
129
|
+
// month names start at their week — and running across the columns up to the next.
|
|
130
|
+
&__column-labels--thinned > &__column-label {
|
|
131
|
+
justify-self: start;
|
|
132
|
+
max-inline-size: calc(
|
|
133
|
+
var(--wr-heatmap-chart-label-every, 1) * 100% + (var(--wr-heatmap-chart-label-every, 1) - 1) *
|
|
134
|
+
var(--wr-heatmap-chart-gap)
|
|
135
|
+
);
|
|
136
|
+
text-align: start;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// A name left out of sight: still in the accessibility tree, so a screen reader reads
|
|
140
|
+
// every column's name, and still in its own track, so the grid does not move. Not
|
|
141
|
+
// `visibility: hidden` or `display: none`, which would take it from the reader too.
|
|
142
|
+
&__column-label--hidden {
|
|
143
|
+
clip-path: inset(50%);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Held to its own column, as before thinning: `clip-path` paints nothing but keeps the
|
|
147
|
+
// box, and the last column's name running on past the chart would scroll the page.
|
|
148
|
+
&__column-labels--thinned > &__column-label--hidden {
|
|
149
|
+
max-inline-size: 100%;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
&__row-labels {
|
|
153
|
+
grid-row: 2 / -1;
|
|
154
|
+
grid-column: 1;
|
|
155
|
+
grid-template-rows: subgrid;
|
|
156
|
+
padding-inline-end: calc(var(--wr-heatmap-chart-label-gap) - var(--wr-heatmap-chart-gap));
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
&__row-label {
|
|
160
|
+
align-self: center;
|
|
161
|
+
max-width: var(--wr-heatmap-chart-row-label-max-width);
|
|
162
|
+
overflow: hidden;
|
|
163
|
+
text-overflow: ellipsis;
|
|
164
|
+
white-space: nowrap;
|
|
165
|
+
text-align: end;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
&__cells {
|
|
169
|
+
grid-row: 2 / -1;
|
|
170
|
+
grid-column: 2 / -1;
|
|
171
|
+
grid-template-columns: subgrid;
|
|
172
|
+
grid-template-rows: subgrid;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// A value is printed whole or not at all, with no measuring: the cell is a wrapping flex
|
|
176
|
+
// line led by a zero-width item as tall as the cell. A value that fits shares that first
|
|
177
|
+
// line and is centred on it; one that does not fit cannot join it, so it wraps onto a
|
|
178
|
+
// second line, below the cell, where `overflow` hides it. A value cut to its first digits
|
|
179
|
+
// would print a different number.
|
|
180
|
+
&__cell {
|
|
181
|
+
display: flex;
|
|
182
|
+
flex-wrap: wrap;
|
|
183
|
+
justify-content: center;
|
|
184
|
+
align-items: center;
|
|
185
|
+
min-width: 0;
|
|
186
|
+
box-sizing: border-box;
|
|
187
|
+
block-size: var(--wr-heatmap-chart-cell-height);
|
|
188
|
+
padding-inline: var(--wr-heatmap-chart-cell-padding-x);
|
|
189
|
+
overflow: hidden;
|
|
190
|
+
border-radius: var(--wr-heatmap-chart-cell-radius);
|
|
191
|
+
background: $fill;
|
|
192
|
+
// The levels are the chart, so they keep their colours under forced colors, as the SVG
|
|
193
|
+
// charts' fills do; forced colors would otherwise paint every cell as the page.
|
|
194
|
+
forced-color-adjust: none;
|
|
195
|
+
// Positioned for good, so the reading cell's ring (`--active`) only raises its
|
|
196
|
+
// `z-index`. Switching a grid item to `position: relative` on hover made Chromium lay
|
|
197
|
+
// the whole grid out again on every move, which the tooltip's measuring then forced at
|
|
198
|
+
// once: 5.6ms a move and 52ms of layout over thirty moves on a 100×100 matrix, against
|
|
199
|
+
// 1.8ms and 1.4ms with every cell already positioned. No cell holds a positioned child.
|
|
200
|
+
position: relative;
|
|
201
|
+
z-index: 0;
|
|
202
|
+
|
|
203
|
+
&::before {
|
|
204
|
+
content: '';
|
|
205
|
+
flex: 0 0 0;
|
|
206
|
+
block-size: 100%;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Black or white, whichever reads better on this cell's own paint: the pick the theme's
|
|
211
|
+
// `-contrast` tokens make, made per cell because the paint is a mix of a colour the
|
|
212
|
+
// consumer chose. The paint's `y` in XYZ (D65) IS the relative luminance WCAG measures,
|
|
213
|
+
// and the two candidates score the same, about 4.58:1, against a luminance of 0.17913 —
|
|
214
|
+
// √(1.05 × 0.05) − 0.05. Below it white wins, above it black: the difference is scaled
|
|
215
|
+
// to ±infinity and clamped to 0 or 1, so nothing between the two is ever drawn, and the
|
|
216
|
+
// result is that share of D65 white. An engine without relative colour syntax drops the
|
|
217
|
+
// declaration, and the value keeps the chart's text colour.
|
|
218
|
+
&__value {
|
|
219
|
+
flex: none;
|
|
220
|
+
white-space: nowrap;
|
|
221
|
+
// A figure has no strong character of its own, so on an RTL page the minus of `-50`
|
|
222
|
+
// landed after the digits. Plaintext takes the direction from the text, as the
|
|
223
|
+
// tooltip's value does: the sign stays first, and an Arabic `valueFormat` still reads
|
|
224
|
+
// right to left. The value is centred in its cell either way.
|
|
225
|
+
unicode-bidi: plaintext;
|
|
226
|
+
font-size: var(--wr-heatmap-chart-value-font-size);
|
|
227
|
+
font-weight: var(--wr-heatmap-chart-value-font-weight);
|
|
228
|
+
line-height: 1;
|
|
229
|
+
font-variant-numeric: tabular-nums;
|
|
230
|
+
color: color(from #{$fill} xyz-d65 calc(0.9505 * #{$white}) #{$white} calc(1.0891 * #{$white}));
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Where relative colour syntax is missing — Firefox before 128, inside the documented
|
|
234
|
+
// floor — the pick above is dropped, and the chart's text colour on the darker levels
|
|
235
|
+
// measures about 3.6:1 in light and 3.9:1 in dark, under AA. There the value sits on a
|
|
236
|
+
// small chip of the surface instead, in the chart's text colour, which reads on any level
|
|
237
|
+
// and in either scheme. The condition is the declaration itself, so an engine that has
|
|
238
|
+
// the syntax but not channel keywords inside `calc()` takes the chip too.
|
|
239
|
+
@supports not (color: color(from red xyz-d65 calc(0.9505 * #{$white}) #{$white} calc(1.0891 * #{$white}))) {
|
|
240
|
+
&__value {
|
|
241
|
+
padding: calc(var(--wr-heatmap-chart-cell-padding-x) / 4) calc(var(--wr-heatmap-chart-cell-padding-x) / 2);
|
|
242
|
+
border-radius: var(--wr-heatmap-chart-cell-radius);
|
|
243
|
+
background: var(--wr-heatmap-chart-surface);
|
|
244
|
+
color: var(--wr-heatmap-chart-color);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
&__legend {
|
|
249
|
+
display: flex;
|
|
250
|
+
flex-wrap: wrap;
|
|
251
|
+
align-items: center;
|
|
252
|
+
justify-content: center;
|
|
253
|
+
gap: var(--wr-heatmap-chart-legend-gap);
|
|
254
|
+
margin-block-start: var(--wr-heatmap-chart-legend-margin-top);
|
|
255
|
+
font-size: var(--wr-heatmap-chart-legend-font-size);
|
|
256
|
+
color: var(--wr-heatmap-chart-legend-color);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
&__legend-label {
|
|
260
|
+
font-variant-numeric: tabular-nums;
|
|
261
|
+
white-space: nowrap;
|
|
262
|
+
// The scale's ends, `-50` among them: see `__value`. Shrunk to their text, so the
|
|
263
|
+
// direction moves nothing but the sign.
|
|
264
|
+
unicode-bidi: plaintext;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// The levels side by side, as one bar from the lowest to the highest.
|
|
268
|
+
&__scale {
|
|
269
|
+
display: inline-flex;
|
|
270
|
+
border-radius: var(--wr-heatmap-chart-cell-radius);
|
|
271
|
+
overflow: hidden;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
&__swatch {
|
|
275
|
+
flex: none;
|
|
276
|
+
inline-size: var(--wr-heatmap-chart-swatch-width);
|
|
277
|
+
block-size: var(--wr-heatmap-chart-swatch-height);
|
|
278
|
+
background: $fill;
|
|
279
|
+
forced-color-adjust: none;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// No data, which is not zero: no level's paint at all, but the surface hatched, inside a
|
|
283
|
+
// dashed outline — a pattern and an edge, two channels that are not colour. After every
|
|
284
|
+
// level's paint, which it replaces.
|
|
285
|
+
&__cell--empty,
|
|
286
|
+
&__swatch--empty {
|
|
287
|
+
background: repeating-linear-gradient(
|
|
288
|
+
45deg,
|
|
289
|
+
var(--wr-heatmap-chart-empty-hatch) 0 1px,
|
|
290
|
+
var(--wr-heatmap-chart-surface) 1px 5px
|
|
291
|
+
);
|
|
292
|
+
outline: 1px dashed var(--wr-heatmap-chart-empty-border);
|
|
293
|
+
outline-offset: -1px;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
&__swatch--empty {
|
|
297
|
+
border-radius: var(--wr-heatmap-chart-cell-radius);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// Above its neighbours, so the ring is not painted over by the next cell, and after the
|
|
301
|
+
// empty cell's outline, which it replaces. Every cell is positioned already (`__cell`).
|
|
302
|
+
&__cell--active {
|
|
303
|
+
z-index: 1;
|
|
304
|
+
outline: var(--wr-heatmap-chart-active-ring-width) solid var(--wr-heatmap-chart-active-ring);
|
|
305
|
+
outline-offset: 1px;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
&__legend-empty {
|
|
309
|
+
display: inline-flex;
|
|
310
|
+
align-items: center;
|
|
311
|
+
gap: var(--wr-heatmap-chart-legend-gap);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// The cells keep their colours under forced colors, so the marks drawn in theme colours
|
|
316
|
+
// would keep colours the forced palette no longer has: the empty cell's outline and
|
|
317
|
+
// hatching, and the reading cell's ring.
|
|
318
|
+
@media (forced-colors: active) {
|
|
319
|
+
.wr-heatmap-chart__cell--empty,
|
|
320
|
+
.wr-heatmap-chart__swatch--empty {
|
|
321
|
+
--wr-heatmap-chart-empty-border: CanvasText;
|
|
322
|
+
--wr-heatmap-chart-empty-hatch: GrayText;
|
|
323
|
+
--wr-heatmap-chart-surface: Canvas;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.wr-heatmap-chart__cell--active {
|
|
327
|
+
outline-color: Highlight;
|
|
328
|
+
}
|
|
329
|
+
}
|