diff --git a/src/css/stats.scss b/src/css/stats.scss index b71e169d9..33552149a 100644 --- a/src/css/stats.scss +++ b/src/css/stats.scss @@ -37,6 +37,33 @@ } } +.stats-pie-chart-content-container, +.stats-bar-chart-content-container { + position: relative; +} + +.stats-lock { + position: absolute; + inset: 0; + display: grid; + place-items: center; + pointer-events: none; + + &-link { + pointer-events: auto; + + &.button:not(.button-link) { + background-color: var(--cs-color-secondary); + border-color: var(--cs-color-secondary); + + &:is(:hover, :focus):not(.button-link, :disabled) { + background-color: var(--cs-color-primary-hover); + border-color: var(--cs-color-primary-hover); + } + } + } +} + .stats-number-chart { display: grid; gap: 4px; @@ -228,6 +255,12 @@ } } +.stats-chart-lock.is-locked .stats-bar-chart, +.stats-chart-lock.is-locked .stats-pie-chart-content { + filter: blur(10px); + user-select: none; +} + @media (width <= 782px) { .stats-chart-grid { grid-template-columns: 1fr; diff --git a/src/js/components/StatsMenu/StatsCharts.tsx b/src/js/components/StatsMenu/StatsCharts.tsx index 3a4b681a8..d8bd09b40 100644 --- a/src/js/components/StatsMenu/StatsCharts.tsx +++ b/src/js/components/StatsMenu/StatsCharts.tsx @@ -39,55 +39,61 @@ interface ChartProps { const EntryLabel: React.FC> = ({ label, url }) => url ? {label} : <>{label} -const BarChart: React.FC = ({ colors, entries }) => { +const BarChart: React.FC = ({ colors, entries, overlay }) => { const entryCounts = useMemo(() => Object.values(entries) .map(entry => Number(entry.count)), [entries]) return ( -
    - {Object.entries(entries).map(([key, entry]) => -
  • - -
  • )} -
+
+
    + {Object.entries(entries).map(([key, entry]) => +
  • + +
  • )} +
+ {overlay &&
{overlay}
} +
) } -const PieChart: React.FC = ({ colors, entries }) => { +const PieChart: React.FC = ({ colors, entries, overlay }) => { const totalCount = useMemo(() => Object.values(entries).reduce((count, entry) => count + Number(entry.count), 0), [entries]) return ( -
-