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
|
@@ -1,20 +1,85 @@
|
|
|
1
1
|
@use '../../../theme/styles' as theme;
|
|
2
2
|
@use '../../../popover/styles'; // the `.wr-tooltip` chip the hover tooltip renders into
|
|
3
3
|
|
|
4
|
+
// Styles for the entry points this component's own markup renders. With `series` the
|
|
5
|
+
// legend is a `ul[wr-chart-legend]`, so `@use 'ngwr/charts/bar-chart'` alone draws it styled.
|
|
6
|
+
@use '../../chart-legend/styles' as chart-legend-styles; // WrChartLegend
|
|
7
|
+
// With `dataTable`, the figures render as a `<wr-chart-table>` beside the plot, which
|
|
8
|
+
// its own sheet clips out of sight.
|
|
9
|
+
@use '../../core/styles' as core-styles; // WrChartTable
|
|
10
|
+
|
|
11
|
+
// The gap between two categories standing up: the plot's gap, but never more than a
|
|
12
|
+
// quarter of the track shared out among the gaps. A fixed gap took the whole track once
|
|
13
|
+
// there were enough categories — measured in Chromium, forty on a phone left every bar
|
|
14
|
+
// 0.77px wide and a hundred left none at all, with nothing to say so. The component writes
|
|
15
|
+
// how many categories there are; below about one per 32px of track the hook's own gap is
|
|
16
|
+
// the smaller and nothing moves. Standing up only: lying down the rows keep a floor of
|
|
17
|
+
// their own and grow the plot instead, and a percentage gap down a column has no height to
|
|
18
|
+
// resolve against. The label row under the bars is held the same way, so each name stays
|
|
19
|
+
// under its bar.
|
|
20
|
+
$plot-gap: min(var(--wr-bar-chart-plot-gap), calc(25% / var(--wr-bar-chart-categories, 1)));
|
|
21
|
+
|
|
22
|
+
// How far one of `lines`' boxes sits in from each end of the track: half a category. The
|
|
23
|
+
// categories are equal shares of the track with the plot's gap between them, so their
|
|
24
|
+
// middles are evenly spaced from the first to the last, and a box between those two puts
|
|
25
|
+
// category `c` of `n` at `c / (n - 1)` of its length — the percentage the component
|
|
26
|
+
// writes. With one category the box is the whole track, and its point sits in the middle.
|
|
27
|
+
// A Sass value rather than a hook: the component's percentages depend on it, so it is
|
|
28
|
+
// geometry rather than a look. It takes the gap the track itself lays the categories out
|
|
29
|
+
// with — `$plot-gap` standing up, which resolves against the same width, and the hook's
|
|
30
|
+
// own lying down.
|
|
31
|
+
@function line-inset($gap) {
|
|
32
|
+
@return calc(
|
|
33
|
+
(100% - (var(--wr-bar-chart-count, 1) - 1) * #{$gap}) / (2 * var(--wr-bar-chart-count, 1)) *
|
|
34
|
+
clamp(0, var(--wr-bar-chart-count, 1) - 1, 1)
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
$line-inset: line-inset($plot-gap);
|
|
39
|
+
$line-inset-across: line-inset(var(--wr-bar-chart-plot-gap));
|
|
40
|
+
|
|
41
|
+
// The ring round each of `lines`' points: its stroke is twice this, half of it under the fill.
|
|
42
|
+
$point-ring: 2px;
|
|
43
|
+
|
|
44
|
+
// How far past each end of the track one of `lines`' markers may reach: the component writes
|
|
45
|
+
// the largest marker's reach along the value axis, by shape, and the ring adds half its
|
|
46
|
+
// stroke. The track keeps that much room at each end, so a point on the axis' maximum or
|
|
47
|
+
// minimum stays inside the chart's box rather than past it, where an `overflow: hidden`
|
|
48
|
+
// card would cut it. Geometry, like the inset above, so a Sass value rather than a hook.
|
|
49
|
+
$line-reach: calc(var(--wr-bar-chart-reach, 0) * 1px + #{$point-ring} / 2);
|
|
50
|
+
|
|
4
51
|
.wr-bar-chart {
|
|
5
52
|
--wr-bar-chart-font-family: var(--wr-font-family-base);
|
|
53
|
+
--wr-bar-chart-text-color: var(--wr-color-on-surface);
|
|
54
|
+
// The gap between two categories, which the label row under the bars keeps too, so each
|
|
55
|
+
// name stays under its bar. Declared here rather than on the plot, so one override on
|
|
56
|
+
// the chart moves both rows.
|
|
57
|
+
--wr-bar-chart-plot-gap: var(--wr-space-sm);
|
|
58
|
+
// Beside `lines`: the ring round each point and the halo behind each printed value, so a
|
|
59
|
+
// point reads on the bar under it and a number stays readable where a line crosses it.
|
|
60
|
+
// The surface the chart sits on, by default.
|
|
61
|
+
--wr-bar-chart-halo: var(--wr-color-surface);
|
|
6
62
|
|
|
7
63
|
display: block;
|
|
64
|
+
// The containing block of the out-of-flow `dataTable` copy, as on the line chart: a
|
|
65
|
+
// static host lets that 1px box resolve against an ancestor outside the chart and keep
|
|
66
|
+
// its place in an unpositioned scroller's content. No z-index, so no stacking context.
|
|
67
|
+
position: relative;
|
|
8
68
|
font-family: var(--wr-bar-chart-font-family);
|
|
9
|
-
color: var(--wr-
|
|
69
|
+
color: var(--wr-bar-chart-text-color);
|
|
10
70
|
|
|
11
71
|
&__plot {
|
|
12
|
-
--wr-bar-chart-plot-gap: var(--wr-space-sm);
|
|
13
72
|
--wr-bar-chart-plot-border: var(--wr-border-base);
|
|
73
|
+
// Lying down, the least each bar's row takes — a category's, or a series' lane in it:
|
|
74
|
+
// one line of the small text the values and the names are set in. The rows share the
|
|
75
|
+
// plot's `height`, so without a floor a long list thinned every bar to a hairline, or
|
|
76
|
+
// to nothing at 26 rows, and stacked the names on each other; with it, rows that need
|
|
77
|
+
// more grow the plot past `height`.
|
|
78
|
+
--wr-bar-chart-row-min-size: var(--wr-text-xs-leading);
|
|
14
79
|
|
|
15
80
|
display: flex;
|
|
16
81
|
align-items: flex-end;
|
|
17
|
-
gap:
|
|
82
|
+
gap: $plot-gap;
|
|
18
83
|
border-bottom: 1px solid var(--wr-bar-chart-plot-border);
|
|
19
84
|
}
|
|
20
85
|
|
|
@@ -34,6 +99,10 @@
|
|
|
34
99
|
&__value {
|
|
35
100
|
--wr-bar-chart-value-font-size: var(--wr-text-xs);
|
|
36
101
|
--wr-bar-chart-value-line-height: var(--wr-leading-none);
|
|
102
|
+
// How far a value sits past the end of its bar where it is placed there rather than
|
|
103
|
+
// stacked on the bar: with `series`, and in the horizontal layout.
|
|
104
|
+
--wr-bar-chart-value-offset: var(--wr-space-xs);
|
|
105
|
+
--wr-bar-chart-value-color: var(--wr-color-on-surface-muted);
|
|
37
106
|
|
|
38
107
|
flex: none;
|
|
39
108
|
// Bounded by its column and ellipsised, as the label under it is. With no bound,
|
|
@@ -45,9 +114,13 @@
|
|
|
45
114
|
text-overflow: ellipsis;
|
|
46
115
|
white-space: nowrap;
|
|
47
116
|
font-size: var(--wr-bar-chart-value-font-size);
|
|
48
|
-
color: var(--wr-
|
|
117
|
+
color: var(--wr-bar-chart-value-color);
|
|
49
118
|
font-variant-numeric: tabular-nums;
|
|
50
119
|
line-height: var(--wr-bar-chart-value-line-height);
|
|
120
|
+
// A value has no strong character of its own, so on an RTL page the minus of `-3`
|
|
121
|
+
// landed after the digits, `3-`; plaintext takes the direction from the text. Every
|
|
122
|
+
// value box is as wide as its text or centred, so its alignment does not move.
|
|
123
|
+
unicode-bidi: plaintext;
|
|
51
124
|
}
|
|
52
125
|
|
|
53
126
|
// The component writes the bar's share of the plot as its `flex-grow`, from 0
|
|
@@ -73,23 +146,550 @@
|
|
|
73
146
|
}
|
|
74
147
|
|
|
75
148
|
&__labels {
|
|
76
|
-
--wr-bar-chart-labels-gap: var(--wr-
|
|
149
|
+
--wr-bar-chart-labels-gap: var(--wr-bar-chart-plot-gap);
|
|
77
150
|
--wr-bar-chart-labels-margin-top: var(--wr-space-sm);
|
|
78
151
|
|
|
79
152
|
display: flex;
|
|
80
|
-
gap
|
|
153
|
+
// Held as the plot's gap is (`$plot-gap`), against the same width, so each name stays
|
|
154
|
+
// under its bar however many there are.
|
|
155
|
+
gap: min(var(--wr-bar-chart-labels-gap), calc(25% / var(--wr-bar-chart-categories, 1)));
|
|
81
156
|
margin-top: var(--wr-bar-chart-labels-margin-top);
|
|
82
157
|
}
|
|
83
158
|
|
|
84
159
|
&__label {
|
|
85
160
|
--wr-bar-chart-label-font-size: var(--wr-text-xs);
|
|
161
|
+
// The widest a category name runs in the horizontal layout's gutter before it is
|
|
162
|
+
// ellipsised; the gutter is as wide as the longest name up to this.
|
|
163
|
+
--wr-bar-chart-label-max-width: 10rem;
|
|
164
|
+
--wr-bar-chart-label-color: var(--wr-color-on-surface-muted);
|
|
86
165
|
|
|
87
166
|
flex: 1 1 0;
|
|
88
167
|
text-align: center;
|
|
89
168
|
font-size: var(--wr-bar-chart-label-font-size);
|
|
90
|
-
color: var(--wr-
|
|
169
|
+
color: var(--wr-bar-chart-label-color);
|
|
91
170
|
overflow: hidden;
|
|
92
171
|
text-overflow: ellipsis;
|
|
93
172
|
white-space: nowrap;
|
|
173
|
+
// A name is the host's own text, in whatever language: it takes its direction from
|
|
174
|
+
// that text, so a Latin name on an RTL page keeps a trailing `$` or `%` at its end.
|
|
175
|
+
unicode-bidi: plaintext;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
&__legend {
|
|
179
|
+
--wr-bar-chart-legend-margin-bottom: var(--wr-space-md);
|
|
180
|
+
|
|
181
|
+
margin: 0 0 var(--wr-bar-chart-legend-margin-bottom);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// ── The layout `series` and the horizontal orientation share ──────────────────────
|
|
185
|
+
//
|
|
186
|
+
// The plot is a grid: the TRACK the bars run along, and past each end of the value
|
|
187
|
+
// axis a ROOM for the values printed there. Every position on the track is a share of
|
|
188
|
+
// the value axis from its minimum, which the component writes inline — zero for the
|
|
189
|
+
// baseline, where a bar starts and how much it covers, where a value goes — so the
|
|
190
|
+
// stylesheet places each part from one number at any size.
|
|
191
|
+
|
|
192
|
+
// A hidden copy of every value printed past one end of the axis, all in one grid cell:
|
|
193
|
+
// the cell is as large as the largest, in the value's own font and with its own offset,
|
|
194
|
+
// so the value past the longest bar has exactly the room it needs and no guess is made
|
|
195
|
+
// about how wide a number is. Hidden by `visibility`, which takes it out of the
|
|
196
|
+
// accessibility tree too.
|
|
197
|
+
&__room {
|
|
198
|
+
display: grid;
|
|
199
|
+
visibility: hidden;
|
|
200
|
+
pointer-events: none;
|
|
201
|
+
|
|
202
|
+
> .wr-bar-chart__value {
|
|
203
|
+
grid-area: 1 / 1;
|
|
204
|
+
max-width: none;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
&__track {
|
|
209
|
+
position: relative;
|
|
210
|
+
display: flex;
|
|
211
|
+
gap: $plot-gap;
|
|
212
|
+
min-width: 0;
|
|
213
|
+
min-height: 0;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Zero, wherever it falls: the bottom of the plot until a value goes below it. Drawn as
|
|
217
|
+
// a border rather than a background, which forced colors would reset to the page's own
|
|
218
|
+
// colour, and just past zero, so a bar standing on it is not overlapped. The colour is
|
|
219
|
+
// the plot's own hook.
|
|
220
|
+
&__baseline {
|
|
221
|
+
position: absolute;
|
|
222
|
+
inset-inline: 0;
|
|
223
|
+
bottom: calc(var(--wr-bar-chart-zero, 0) * 100%);
|
|
224
|
+
height: 0;
|
|
225
|
+
margin-bottom: -1px;
|
|
226
|
+
border-bottom: 1px solid var(--wr-bar-chart-plot-border);
|
|
227
|
+
pointer-events: none;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// One category of `series`: a lane per series shown, or one lane under `stacked`.
|
|
231
|
+
&__category {
|
|
232
|
+
--wr-bar-chart-category-gap: calc(var(--wr-space-xs) / 2);
|
|
233
|
+
|
|
234
|
+
display: flex;
|
|
235
|
+
flex: 1 1 0;
|
|
236
|
+
// Standing up, never more than a tenth of the category, for the reason `$plot-gap`
|
|
237
|
+
// gives: grouped bars on a phone are a few pixels wide, and fixed gaps took them all.
|
|
238
|
+
gap: min(var(--wr-bar-chart-category-gap), 10%);
|
|
239
|
+
min-width: 0;
|
|
240
|
+
min-height: 0;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// The strip one bar runs along, the containing block of its bars and its values.
|
|
244
|
+
&__lane {
|
|
245
|
+
position: relative;
|
|
246
|
+
flex: 1 1 0;
|
|
247
|
+
min-width: 0;
|
|
248
|
+
min-height: 0;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// A series' bar: a tint of the series' colour, outlined in the colour itself and the
|
|
252
|
+
// series' dash. The tint is what lets the outline read against the body; the outline is
|
|
253
|
+
// what tells two series apart without hue. The body takes the colour from the inline
|
|
254
|
+
// `--wr-bar-chart-color` and the outline as an SVG stroke; both are kept under forced
|
|
255
|
+
// colors, as every chart mark here is.
|
|
256
|
+
&__series-bar {
|
|
257
|
+
// How much of its series' colour a bar's body takes.
|
|
258
|
+
--wr-bar-chart-series-tint: 35%;
|
|
259
|
+
// The outline's width, in pixels, whatever the bar's size.
|
|
260
|
+
--wr-bar-chart-series-edge-width: 2px;
|
|
261
|
+
|
|
262
|
+
position: absolute;
|
|
263
|
+
inset-inline: 0;
|
|
264
|
+
bottom: calc(var(--wr-bar-chart-start, 0) * 100%);
|
|
265
|
+
height: calc(var(--wr-bar-chart-size, 0) * 100%);
|
|
266
|
+
// A zero keeps a 1px floor on the baseline, as a `data` bar does.
|
|
267
|
+
min-height: 1px;
|
|
268
|
+
background: color-mix(
|
|
269
|
+
in srgb,
|
|
270
|
+
var(--wr-bar-chart-color, currentColor) var(--wr-bar-chart-series-tint),
|
|
271
|
+
transparent
|
|
272
|
+
);
|
|
273
|
+
forced-color-adjust: none;
|
|
274
|
+
transition:
|
|
275
|
+
bottom var(--wr-duration-slow) var(--wr-ease-out),
|
|
276
|
+
height var(--wr-duration-slow) var(--wr-ease-out);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// The outline covers the bar and draws its stroke centred on the bar's edge at twice the
|
|
280
|
+
// width, so the half inside is the outline and the half outside is clipped: every dash
|
|
281
|
+
// lies within the bar, and two bars that meet in a pile keep their own.
|
|
282
|
+
&__edge {
|
|
283
|
+
position: absolute;
|
|
284
|
+
inset: 0;
|
|
285
|
+
width: 100%;
|
|
286
|
+
height: 100%;
|
|
287
|
+
overflow: hidden;
|
|
288
|
+
pointer-events: none;
|
|
289
|
+
stroke-width: calc(var(--wr-bar-chart-series-edge-width) * 2);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// A value past the end of its bar: above it, or below one that grows below zero. As
|
|
293
|
+
// wide as its lane and centred; standing up, left out where it does not fit (below).
|
|
294
|
+
&__lane > &__value {
|
|
295
|
+
position: absolute;
|
|
296
|
+
inset-inline: 0;
|
|
297
|
+
bottom: calc(var(--wr-bar-chart-at, 0) * 100% + var(--wr-bar-chart-value-offset));
|
|
298
|
+
text-align: center;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
&__lane > &__value--below {
|
|
302
|
+
top: calc((1 - var(--wr-bar-chart-at, 0)) * 100% + var(--wr-bar-chart-value-offset));
|
|
303
|
+
bottom: auto;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// One of `lines`, over the bars: an SVG box from the middle of the first category to the
|
|
307
|
+
// middle of the last, every position in it a percentage the component writes, so nothing
|
|
308
|
+
// stretches and a dash or a marker keeps its size at any width. Out of the pointer's
|
|
309
|
+
// way, so a point over a category still opens that category's tooltip. Its strokes and
|
|
310
|
+
// fills are kept under forced colors, as every chart mark here is.
|
|
311
|
+
&__line {
|
|
312
|
+
// How wide the line is drawn, in pixels whatever the plot's size.
|
|
313
|
+
--wr-bar-chart-line-width: 2px;
|
|
314
|
+
|
|
315
|
+
position: absolute;
|
|
316
|
+
inset-block-start: 0;
|
|
317
|
+
inset-inline-start: $line-inset;
|
|
318
|
+
inline-size: calc(100% - 2 * #{$line-inset});
|
|
319
|
+
block-size: 100%;
|
|
320
|
+
overflow: visible;
|
|
321
|
+
pointer-events: none;
|
|
322
|
+
forced-color-adjust: none;
|
|
323
|
+
|
|
324
|
+
// Every position along the track is a logical inset, so the bars mirror under RTL; an
|
|
325
|
+
// SVG's own coordinates do not, so the box mirrors to follow them. Every marker shape
|
|
326
|
+
// is symmetric about its vertical, so none reads differently for it.
|
|
327
|
+
&:dir(rtl) {
|
|
328
|
+
transform: scaleX(-1);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
&__line-segment {
|
|
333
|
+
stroke-width: var(--wr-bar-chart-line-width);
|
|
334
|
+
stroke-linecap: round;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// A point's marker, ringed: the stroke is painted first and half covered by the fill, so
|
|
338
|
+
// the marker keeps the area every shape shares and the ring sits outside it.
|
|
339
|
+
&__point > path {
|
|
340
|
+
stroke: var(--wr-bar-chart-halo);
|
|
341
|
+
stroke-width: $point-ring;
|
|
342
|
+
paint-order: stroke;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Beside `lines`, room at each end of the value axis for the largest marker: a margin rather
|
|
347
|
+
// than a padding, so the track's own box — which every bar, the baseline and each line's box
|
|
348
|
+
// are placed in — stays the axis. Kept while every line is hidden, as the layout is.
|
|
349
|
+
.wr-bar-chart--combo:not(.wr-bar-chart--horizontal) .wr-bar-chart__track {
|
|
350
|
+
margin-block: $line-reach;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.wr-bar-chart--combo.wr-bar-chart--horizontal .wr-bar-chart__track {
|
|
354
|
+
margin-inline: $line-reach;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// The SVG keeps its fills and strokes under forced colors, so the lines and their points keep
|
|
358
|
+
// their colours and the legend still keys them. The ring round each point and the halo behind
|
|
359
|
+
// each printed value are drawn in the surface, which means nothing on a forced palette: they
|
|
360
|
+
// take the page's own colour, which keeps a point apart from the bar under it on any background.
|
|
361
|
+
@media (forced-colors: active) {
|
|
362
|
+
.wr-bar-chart {
|
|
363
|
+
--wr-bar-chart-halo: Canvas;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// `series`, vertical — or `data` beside `lines`: three rows — the room for the values
|
|
368
|
+
// printed above the bars, the track, the room for those printed below the ones under
|
|
369
|
+
// zero. A room with nothing to hold is no height at all.
|
|
370
|
+
:is(.wr-bar-chart--series, .wr-bar-chart--combo):not(.wr-bar-chart--horizontal) {
|
|
371
|
+
.wr-bar-chart__plot {
|
|
372
|
+
display: grid;
|
|
373
|
+
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
374
|
+
grid-template-columns: minmax(0, 1fr);
|
|
375
|
+
// The track fills its row: the plot's own `flex-end` would shrink it to its content,
|
|
376
|
+
// and every bar in it is out of flow.
|
|
377
|
+
align-items: stretch;
|
|
378
|
+
gap: 0;
|
|
379
|
+
border-bottom: 0;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.wr-bar-chart__room--max {
|
|
383
|
+
grid-row: 1;
|
|
384
|
+
|
|
385
|
+
> .wr-bar-chart__value {
|
|
386
|
+
padding-block-end: var(--wr-bar-chart-value-offset);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.wr-bar-chart__track {
|
|
391
|
+
grid-row: 2;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.wr-bar-chart__room--min {
|
|
395
|
+
grid-row: 3;
|
|
396
|
+
|
|
397
|
+
> .wr-bar-chart__value {
|
|
398
|
+
padding-block-start: var(--wr-bar-chart-value-offset);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// A value whole or not at all. Grouped bars on a phone leave a lane a few pixels wide,
|
|
403
|
+
// and an ellipsis needs a glyph and itself: below that Chromium draws the first digit
|
|
404
|
+
// and nothing else, so 1.2K read as `1`. The value wraps instead, beside an empty
|
|
405
|
+
// first item one line tall, onto a second line its own height clips away — so a value
|
|
406
|
+
// that does not fit its lane is left out, and the tooltip and the bar's name carry it.
|
|
407
|
+
.wr-bar-chart__lane > .wr-bar-chart__value {
|
|
408
|
+
display: flex;
|
|
409
|
+
flex-wrap: wrap;
|
|
410
|
+
align-content: flex-start;
|
|
411
|
+
justify-content: center;
|
|
412
|
+
block-size: 1lh;
|
|
413
|
+
text-overflow: clip;
|
|
414
|
+
|
|
415
|
+
&::before {
|
|
416
|
+
content: '';
|
|
417
|
+
flex: none;
|
|
418
|
+
block-size: 1lh;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// Beside `lines`, a printed value is drawn over them, haloed in the surface: where a line
|
|
424
|
+
// or a point crosses a number, the number stays readable and the line passes behind it.
|
|
425
|
+
// Every value in the track is positioned, so the `z-index` takes.
|
|
426
|
+
.wr-bar-chart--combo .wr-bar-chart__track .wr-bar-chart__value {
|
|
427
|
+
z-index: 1;
|
|
428
|
+
text-shadow:
|
|
429
|
+
0 0 2px var(--wr-bar-chart-halo),
|
|
430
|
+
0 0 2px var(--wr-bar-chart-halo),
|
|
431
|
+
0 0 1px var(--wr-bar-chart-halo);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// `data` beside `lines`, standing up: its columns stand in the track above, the one the
|
|
435
|
+
// lines are drawn over, so the bars and the lines share one value axis. The value is taken
|
|
436
|
+
// out of flow and placed past the bar from the same share, as it is lying down: in flow it
|
|
437
|
+
// took its own height out of the column and scaled every bar against a shorter one. The
|
|
438
|
+
// bar stands on zero, which is the axis minimum until a line goes below it, on a spacer
|
|
439
|
+
// that takes zero's share of the column.
|
|
440
|
+
.wr-bar-chart--combo:not(.wr-bar-chart--series, .wr-bar-chart--horizontal) {
|
|
441
|
+
.wr-bar-chart__column {
|
|
442
|
+
position: relative;
|
|
443
|
+
gap: 0;
|
|
444
|
+
|
|
445
|
+
&::after {
|
|
446
|
+
content: '';
|
|
447
|
+
flex: 0 0 0;
|
|
448
|
+
flex-grow: var(--wr-bar-chart-start, var(--wr-bar-chart-zero, 0));
|
|
449
|
+
transition: flex-grow var(--wr-duration-slow) var(--wr-ease-out);
|
|
450
|
+
|
|
451
|
+
// Here rather than in the block at the end, which these selectors outrank.
|
|
452
|
+
@media (prefers-reduced-motion: reduce) {
|
|
453
|
+
transition: none;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
.wr-bar-chart__column > .wr-bar-chart__value {
|
|
459
|
+
position: absolute;
|
|
460
|
+
inset-inline: 0;
|
|
461
|
+
bottom: calc(var(--wr-bar-chart-at, 0) * 100% + var(--wr-bar-chart-value-offset));
|
|
462
|
+
text-align: center;
|
|
463
|
+
transition:
|
|
464
|
+
bottom var(--wr-duration-slow) var(--wr-ease-out),
|
|
465
|
+
top var(--wr-duration-slow) var(--wr-ease-out);
|
|
466
|
+
|
|
467
|
+
@media (prefers-reduced-motion: reduce) {
|
|
468
|
+
transition: none;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// A bar below zero hangs from it, on a spacer that takes its own end's share, so its
|
|
473
|
+
// rounded corners are at the bottom and its value is printed under it.
|
|
474
|
+
.wr-bar-chart__column > .wr-bar-chart__value--below {
|
|
475
|
+
top: calc((1 - var(--wr-bar-chart-at, 0)) * 100% + var(--wr-bar-chart-value-offset));
|
|
476
|
+
bottom: auto;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.wr-bar-chart__bar--below {
|
|
480
|
+
border-radius: 0 0 var(--wr-bar-chart-bar-radius) var(--wr-bar-chart-bar-radius);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Horizontal, with `data` or `series`: four columns — the category names, the room for
|
|
485
|
+
// the values printed before the bars that grow below zero, the track, and the room for
|
|
486
|
+
// those printed past the rest. A grid follows `direction`, and every position along the
|
|
487
|
+
// track is a logical inset, so under RTL the names are on the right and the bars grow
|
|
488
|
+
// leftwards with no rule of their own.
|
|
489
|
+
.wr-bar-chart--horizontal {
|
|
490
|
+
.wr-bar-chart__plot {
|
|
491
|
+
display: grid;
|
|
492
|
+
grid-template-columns: auto auto minmax(0, 1fr) auto;
|
|
493
|
+
grid-template-rows: minmax(0, 1fr);
|
|
494
|
+
align-items: stretch;
|
|
495
|
+
gap: 0;
|
|
496
|
+
border-bottom: 0;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// One row per category, on the same rows as the track's: equal shares of the plot's
|
|
500
|
+
// height with the plot's own gap between them, so each name sits level with its bars
|
|
501
|
+
// at any height — and never less than the row floor, which the track's categories
|
|
502
|
+
// keep too, so a plot their floors grow past `height` still lines the two up. As wide
|
|
503
|
+
// as the longest name, up to its bound.
|
|
504
|
+
.wr-bar-chart__labels {
|
|
505
|
+
grid-column: 1;
|
|
506
|
+
grid-row: 1;
|
|
507
|
+
display: grid;
|
|
508
|
+
grid-auto-rows: minmax(var(--wr-bar-chart-row-min-size), 1fr);
|
|
509
|
+
gap: var(--wr-bar-chart-plot-gap);
|
|
510
|
+
margin: 0;
|
|
511
|
+
padding-inline-end: var(--wr-bar-chart-labels-gap);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
// Shrunk to the name against the bars' side of the gutter, so its own direction can
|
|
515
|
+
// follow its text (`plaintext`) without moving it off the bars.
|
|
516
|
+
.wr-bar-chart__label {
|
|
517
|
+
align-self: center;
|
|
518
|
+
justify-self: end;
|
|
519
|
+
max-width: var(--wr-bar-chart-label-max-width);
|
|
520
|
+
text-align: end;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
.wr-bar-chart__room--min {
|
|
524
|
+
grid-column: 2;
|
|
525
|
+
grid-row: 1;
|
|
526
|
+
|
|
527
|
+
> .wr-bar-chart__value {
|
|
528
|
+
padding-inline-end: var(--wr-bar-chart-value-offset);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
.wr-bar-chart__track {
|
|
533
|
+
grid-column: 3;
|
|
534
|
+
grid-row: 1;
|
|
535
|
+
flex-direction: column;
|
|
536
|
+
gap: var(--wr-bar-chart-plot-gap);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.wr-bar-chart__room--max {
|
|
540
|
+
grid-column: 4;
|
|
541
|
+
grid-row: 1;
|
|
542
|
+
|
|
543
|
+
> .wr-bar-chart__value {
|
|
544
|
+
padding-inline-start: var(--wr-bar-chart-value-offset);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
.wr-bar-chart__baseline {
|
|
549
|
+
inset-block: 0;
|
|
550
|
+
inset-inline-start: calc(var(--wr-bar-chart-zero, 0) * 100%);
|
|
551
|
+
inset-inline-end: auto;
|
|
552
|
+
width: 0;
|
|
553
|
+
height: auto;
|
|
554
|
+
margin: 0;
|
|
555
|
+
margin-inline-start: -1px;
|
|
556
|
+
border-bottom: 0;
|
|
557
|
+
border-inline-start: 1px solid var(--wr-bar-chart-plot-border);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// A category is as tall as its lanes need at the least: its automatic minimum, which
|
|
561
|
+
// the lanes' floors make up.
|
|
562
|
+
.wr-bar-chart__category {
|
|
563
|
+
flex-direction: column;
|
|
564
|
+
min-height: auto;
|
|
565
|
+
gap: var(--wr-bar-chart-category-gap);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.wr-bar-chart__lane {
|
|
569
|
+
min-height: var(--wr-bar-chart-row-min-size);
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
.wr-bar-chart__series-bar {
|
|
573
|
+
inset-block: 0;
|
|
574
|
+
inset-inline-start: calc(var(--wr-bar-chart-start, 0) * 100%);
|
|
575
|
+
inset-inline-end: auto;
|
|
576
|
+
height: auto;
|
|
577
|
+
min-height: 0;
|
|
578
|
+
inline-size: calc(var(--wr-bar-chart-size, 0) * 100%);
|
|
579
|
+
min-inline-size: 1px;
|
|
580
|
+
transition:
|
|
581
|
+
inset-inline-start var(--wr-duration-slow) var(--wr-ease-out),
|
|
582
|
+
inline-size var(--wr-duration-slow) var(--wr-ease-out);
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
.wr-bar-chart__lane > .wr-bar-chart__value {
|
|
586
|
+
top: 50%;
|
|
587
|
+
bottom: auto;
|
|
588
|
+
inset-inline-start: calc(var(--wr-bar-chart-at, 0) * 100% + var(--wr-bar-chart-value-offset));
|
|
589
|
+
inset-inline-end: auto;
|
|
590
|
+
max-width: none;
|
|
591
|
+
transform: translateY(-50%);
|
|
592
|
+
text-align: start;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
.wr-bar-chart__lane > .wr-bar-chart__value--below {
|
|
596
|
+
inset-inline-start: auto;
|
|
597
|
+
inset-inline-end: calc((1 - var(--wr-bar-chart-at, 0)) * 100% + var(--wr-bar-chart-value-offset));
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
// `data`, sideways: each datum's column is a row, and its bar still grows by the share
|
|
601
|
+
// written as its `flex-grow` — the only thing in flow, so the share is of the whole
|
|
602
|
+
// row. The value is taken out of flow and placed past the bar's end from the same
|
|
603
|
+
// share, since in flow beside the bar it would take its own width out of the row and
|
|
604
|
+
// scale every bar against a different length.
|
|
605
|
+
.wr-bar-chart__column {
|
|
606
|
+
position: relative;
|
|
607
|
+
flex-direction: row;
|
|
608
|
+
align-items: stretch;
|
|
609
|
+
justify-content: flex-start;
|
|
610
|
+
height: auto;
|
|
611
|
+
min-height: var(--wr-bar-chart-row-min-size);
|
|
612
|
+
gap: 0;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.wr-bar-chart__bar {
|
|
616
|
+
width: auto;
|
|
617
|
+
min-width: 1px;
|
|
618
|
+
min-height: 0;
|
|
619
|
+
border-radius: 0;
|
|
620
|
+
border-start-end-radius: var(--wr-bar-chart-bar-radius);
|
|
621
|
+
border-end-end-radius: var(--wr-bar-chart-bar-radius);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
.wr-bar-chart__column > .wr-bar-chart__value {
|
|
625
|
+
position: absolute;
|
|
626
|
+
top: 50%;
|
|
627
|
+
inset-inline-start: calc(var(--wr-bar-chart-at, 0) * 100% + var(--wr-bar-chart-value-offset));
|
|
628
|
+
max-width: none;
|
|
629
|
+
transform: translateY(-50%);
|
|
630
|
+
transition: inset-inline-start var(--wr-duration-slow) var(--wr-ease-out);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
// Lying down, a line's box runs down the rows, from the middle of the first to the
|
|
634
|
+
// middle of the last, and across the whole track.
|
|
635
|
+
.wr-bar-chart__line {
|
|
636
|
+
inset-block-start: $line-inset-across;
|
|
637
|
+
inset-inline-start: 0;
|
|
638
|
+
inline-size: 100%;
|
|
639
|
+
block-size: calc(100% - 2 * #{$line-inset-across});
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// `data` beside `lines`, lying down: the bar starts at zero, on a spacer at inline start
|
|
644
|
+
// that takes zero's share of the row — nothing until a value goes below zero. A bar below
|
|
645
|
+
// zero starts at its own end and runs to zero, its value printed before it and its rounded
|
|
646
|
+
// corners at inline start.
|
|
647
|
+
.wr-bar-chart--combo.wr-bar-chart--horizontal:not(.wr-bar-chart--series) {
|
|
648
|
+
.wr-bar-chart__column::before {
|
|
649
|
+
content: '';
|
|
650
|
+
flex: 0 0 0;
|
|
651
|
+
flex-grow: var(--wr-bar-chart-start, var(--wr-bar-chart-zero, 0));
|
|
652
|
+
transition: flex-grow var(--wr-duration-slow) var(--wr-ease-out);
|
|
653
|
+
|
|
654
|
+
@media (prefers-reduced-motion: reduce) {
|
|
655
|
+
transition: none;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
.wr-bar-chart__column > .wr-bar-chart__value {
|
|
660
|
+
transition:
|
|
661
|
+
inset-inline-start var(--wr-duration-slow) var(--wr-ease-out),
|
|
662
|
+
inset-inline-end var(--wr-duration-slow) var(--wr-ease-out);
|
|
663
|
+
|
|
664
|
+
@media (prefers-reduced-motion: reduce) {
|
|
665
|
+
transition: none;
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
.wr-bar-chart__column > .wr-bar-chart__value--below {
|
|
670
|
+
inset-inline-start: auto;
|
|
671
|
+
inset-inline-end: calc((1 - var(--wr-bar-chart-at, 0)) * 100% + var(--wr-bar-chart-value-offset));
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
.wr-bar-chart__bar--below {
|
|
675
|
+
border-radius: 0;
|
|
676
|
+
border-start-start-radius: var(--wr-bar-chart-bar-radius);
|
|
677
|
+
border-end-start-radius: var(--wr-bar-chart-bar-radius);
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
// Every layout's movement is a bar growing to its value; with reduced motion it lands there
|
|
682
|
+
// at once. A `data` bar lying down — or standing beside `lines` — lands with the value
|
|
683
|
+
// placed past its end, which would otherwise jump ahead and leave the bar sliding up to
|
|
684
|
+
// it; beside `lines` the value and the spacer the bar stands on stop where they are
|
|
685
|
+
// declared. The lines move at once regardless.
|
|
686
|
+
@media (prefers-reduced-motion: reduce) {
|
|
687
|
+
.wr-bar-chart__bar,
|
|
688
|
+
.wr-bar-chart__series-bar,
|
|
689
|
+
.wr-bar-chart--horizontal .wr-bar-chart__series-bar,
|
|
690
|
+
.wr-bar-chart--horizontal .wr-bar-chart__bar,
|
|
691
|
+
.wr-bar-chart--horizontal .wr-bar-chart__column > .wr-bar-chart__value,
|
|
692
|
+
.wr-bar-chart--combo .wr-bar-chart__bar {
|
|
693
|
+
transition: none;
|
|
94
694
|
}
|
|
95
695
|
}
|