From c1681bc7275c5266fd370b94d5cd4d97f78eeaaf Mon Sep 17 00:00:00 2001 From: Sean Lynch Date: Fri, 24 Oct 2025 09:28:16 -0400 Subject: [PATCH 1/8] Add Month component (WIP) --- .changeset/plain-rings-itch.md | 5 + .../src/lib/components/Month.svelte | 321 ++++++++++++++++ .../layerchart/src/lib/components/index.ts | 2 + .../layerchart/src/routes/_NavMenu.svelte | 1 + .../routes/docs/components/Month/+page.svelte | 346 ++++++++++++++++++ .../src/routes/docs/components/Month/+page.ts | 14 + 6 files changed, 689 insertions(+) create mode 100644 .changeset/plain-rings-itch.md create mode 100644 packages/layerchart/src/lib/components/Month.svelte create mode 100644 packages/layerchart/src/routes/docs/components/Month/+page.svelte create mode 100644 packages/layerchart/src/routes/docs/components/Month/+page.ts diff --git a/.changeset/plain-rings-itch.md b/.changeset/plain-rings-itch.md new file mode 100644 index 000000000..df28d97fd --- /dev/null +++ b/.changeset/plain-rings-itch.md @@ -0,0 +1,5 @@ +--- +'layerchart': patch +--- + +feat: Add Month component diff --git a/packages/layerchart/src/lib/components/Month.svelte b/packages/layerchart/src/lib/components/Month.svelte new file mode 100644 index 000000000..dc85e7eda --- /dev/null +++ b/packages/layerchart/src/lib/components/Month.svelte @@ -0,0 +1,321 @@ + + + + + + + {#if children} + {@render children({ cells: allCells, cellSize })} + {:else} + {#each allCells as cell} + tooltip?.show(e, cell.data)} + onpointerleave={(e) => tooltip?.hide()} + {...extractLayerProps(restProps, 'lc-month-cell')} + /> + + {#if showDayNumber} + + {/if} + {/each} + {/if} + + + {#if showMonthLabel} + {#each monthLabels as label} + + {/each} + {/if} + + + {#if showYearLabel} + {#each yearLabels as label} + + {/each} + {/if} + + + diff --git a/packages/layerchart/src/lib/components/index.ts b/packages/layerchart/src/lib/components/index.ts index 48e14a6fd..29618840c 100644 --- a/packages/layerchart/src/lib/components/index.ts +++ b/packages/layerchart/src/lib/components/index.ts @@ -93,6 +93,8 @@ export { default as Link } from './Link.svelte'; export * from './Link.svelte'; export { default as MotionPath } from './MotionPath.svelte'; export * from './MotionPath.svelte'; +export { default as Month } from './Month.svelte'; +export * from './Month.svelte'; export { default as Pack } from './Pack.svelte'; export * from './Pack.svelte'; export { default as Partition } from './Partition.svelte'; diff --git a/packages/layerchart/src/routes/_NavMenu.svelte b/packages/layerchart/src/routes/_NavMenu.svelte index 5faa8e2ac..a2159e980 100644 --- a/packages/layerchart/src/routes/_NavMenu.svelte +++ b/packages/layerchart/src/routes/_NavMenu.svelte @@ -91,6 +91,7 @@ 'Hull', 'Labels', 'Link', + 'Month', 'Pie', 'Points', 'Spline', diff --git a/packages/layerchart/src/routes/docs/components/Month/+page.svelte b/packages/layerchart/src/routes/docs/components/Month/+page.svelte new file mode 100644 index 000000000..02b18eaa1 --- /dev/null +++ b/packages/layerchart/src/routes/docs/components/Month/+page.svelte @@ -0,0 +1,346 @@ + + +

Examples

+ +

Single year

+ + +
+ + {#snippet children({ context })} + + + + + + {#snippet children({ data })} + + + {#if data.value != null} + + + + {/if} + {/snippet} + + {/snippet} + +
+
+ +

Multiple years (default)

+ + +
+ + {#snippet children({ context })} + + + + + + {#snippet children({ data })} + + + {#if data.value != null} + + + + {/if} + {/snippet} + + {/snippet} + +
+
+ + diff --git a/packages/layerchart/src/routes/docs/components/Month/+page.ts b/packages/layerchart/src/routes/docs/components/Month/+page.ts new file mode 100644 index 000000000..e90988ada --- /dev/null +++ b/packages/layerchart/src/routes/docs/components/Month/+page.ts @@ -0,0 +1,14 @@ +import api from '$lib/components/Month.svelte?raw&sveld'; +import source from '$lib/components/Month.svelte?raw'; +import pageSource from './+page.svelte?raw'; + +export async function load() { + return { + meta: { + api, + source, + pageSource, + supportedContexts: ['svg', 'canvas', 'html'], + }, + }; +} From 5b32c77f9d7b8f357c935a79b0d1bbeed0cdaa77 Mon Sep 17 00:00:00 2001 From: Sean Lynch Date: Fri, 24 Oct 2025 09:47:59 -0400 Subject: [PATCH 2/8] Support start/end that do not align on year boundaries (ex. last 90 days) --- .../src/lib/components/Month.svelte | 184 +++++++----------- .../routes/docs/components/Month/+page.svelte | 134 +++---------- 2 files changed, 95 insertions(+), 223 deletions(-) diff --git a/packages/layerchart/src/lib/components/Month.svelte b/packages/layerchart/src/lib/components/Month.svelte index dc85e7eda..301ebfbf1 100644 --- a/packages/layerchart/src/lib/components/Month.svelte +++ b/packages/layerchart/src/lib/components/Month.svelte @@ -9,18 +9,14 @@ export type MonthPropsWithoutHTML = { /** - * The start year to display. - * - * @default current year + * The start date of the calendar. */ - startYear?: number; + start: Date; /** - * The end year to display (inclusive). - * - * @default current year + * The end date of the calendar. */ - endYear?: number; + end: Date; /** * Size of the cell in the calendar. @@ -55,29 +51,10 @@ */ showDayNumber?: boolean; - /** - * Whether to show month labels. - * - * @default true - */ - showMonthLabel?: boolean; - - /** - * Whether to show year labels. - * - * @default true - */ - showYearLabel?: boolean; - /** * Props to pass to the `` element for month labels. */ - monthLabelProps?: Partial>; - - /** - * Props to pass to the `` element for year labels. - */ - yearLabelProps?: Partial>; + monthLabel?: boolean | Partial>; /** * Props to pass to the `` element for day numbers. @@ -118,16 +95,14 @@ const DAYS_PER_WEEK = 7; let { - startYear = new Date().getFullYear(), - endYear = new Date().getFullYear(), + start, + end, cellSize = 25, + monthsPerRow: monthsPerRowProp, monthPadding = 1.2, rowSpacing = 8, showDayNumber = true, - showMonthLabel = true, - showYearLabel = true, - monthLabelProps = {}, - yearLabelProps = {}, + monthLabel = true, dayNumberProps = {}, tooltipContext: tooltip, children, @@ -136,16 +111,23 @@ const ctx = getChartContext(); + const rangeDays = $derived(timeDays(start, end)); + const rangeMonths = $derived(timeMonths(start, end)); + + // Space needed for month labels at the top + const monthLabelHeight = $derived(cellSize); + // Calculate monthsPerRow based on the actual space taken by each month // Each month (except the last in a row) takes: (monthPadding * cellSize * DAYS_PER_WEEK) // The calculation accounts for n-1 padded months plus one unpadded month // Formula: (n-1) * monthPadding * width + width = totalWidth // Solving for n: n = (totalWidth + (monthPadding - 1) * width) / (monthPadding * width) const monthsPerRow = $derived( - Math.floor( - (ctx.width + (monthPadding - 1) * cellSize * DAYS_PER_WEEK) / - (monthPadding * cellSize * DAYS_PER_WEEK) - ) + monthsPerRowProp ?? + Math.floor( + (ctx.width + (monthPadding - 1) * cellSize * DAYS_PER_WEEK) / + (monthPadding * cellSize * DAYS_PER_WEEK) + ) ); // Generate data indexed by date (using date object as key) @@ -153,86 +135,66 @@ ctx.data && ctx.config.x ? index(chartDataArray(ctx.data), (d) => ctx.x(d)) : new Map() ); - // Generate cells for all years + // Generate cells for the date range const allCells = $derived.by(() => { const cells: MonthCell[] = []; - - for (let year = startYear; year <= endYear; year++) { - const firstDayOfYear = new Date(year, 0, 1); - const lastDayOfYear = new Date(year + 1, 0, 1); - const yearDays = timeDays(firstDayOfYear, lastDayOfYear); - - yearDays.forEach((day) => { - const firstDayOfMonth = new Date(day.getFullYear(), day.getMonth(), 1); - const cellData = dataByDate.get(day) ?? { date: day }; - - const monthIndex = day.getMonth(); - const monthCol = monthIndex % monthsPerRow; - const monthRow = Math.floor(monthIndex / monthsPerRow); - - const monthPaddingOffset = monthPadding * cellSize * DAYS_PER_WEEK * monthCol; - const weekDiff = timeWeek.count(firstDayOfMonth, day); - const rowLevel = monthRow + 1; - - cells.push({ - x: day.getDay() * cellSize + monthPaddingOffset, - y: weekDiff * cellSize + rowLevel * cellSize * rowSpacing - cellSize / 2, - color: ctx.config.c ? ctx.cGet(cellData) : 'transparent', - data: cellData, - date: day, - }); + // Create a map of month index to track which months we've seen + const monthIndexMap = new Map(); + let currentMonthIndex = 0; + + rangeDays.forEach((day) => { + const firstDayOfMonth = new Date(day.getFullYear(), day.getMonth(), 1); + const monthKey = `${day.getFullYear()}-${day.getMonth()}`; + + // Assign a sequential index to each unique month in the range + if (!monthIndexMap.has(monthKey)) { + monthIndexMap.set(monthKey, currentMonthIndex); + currentMonthIndex++; + } + + const monthIndex = monthIndexMap.get(monthKey)!; + const cellData = dataByDate.get(day) ?? { date: day }; + + const monthCol = monthIndex % monthsPerRow; + const monthRow = Math.floor(monthIndex / monthsPerRow); + + const monthPaddingOffset = monthPadding * cellSize * DAYS_PER_WEEK * monthCol; + const weekDiff = timeWeek.count(firstDayOfMonth, day); + + cells.push({ + x: day.getDay() * cellSize + monthPaddingOffset, + y: weekDiff * cellSize + monthRow * cellSize * rowSpacing + monthLabelHeight, + color: ctx.config.c ? ctx.cGet(cellData) : 'transparent', + data: cellData, + date: day, }); - } + }); return cells; }); // Generate month labels const monthLabels = $derived.by(() => { - const labels: Array<{ x: number; y: number; text: string; year: number }> = []; - - for (let year = startYear; year <= endYear; year++) { - const firstDayOfYear = new Date(year, 0, 1); - const lastDayOfYear = new Date(year + 1, 0, 1); - const yearMonths = timeMonths(firstDayOfYear, lastDayOfYear); - - yearMonths.forEach((firstDayOfMonth) => { - const monthIndex = firstDayOfMonth.getMonth(); - const monthCol = monthIndex % monthsPerRow; - const monthRow = Math.floor(monthIndex / monthsPerRow); - - const monthPaddingOffset = monthPadding * cellSize * DAYS_PER_WEEK * monthCol; - const rowLevel = monthRow + 1; - - labels.push({ - x: monthPaddingOffset, - y: rowLevel * cellSize * rowSpacing - cellSize, - text: format(firstDayOfMonth, 'month'), - year, - }); - }); - } + const labels: Array<{ x: number; y: number; text: string }> = []; - return labels; - }); + rangeMonths.forEach((firstDayOfMonth, index) => { + const monthCol = index % monthsPerRow; + const monthRow = Math.floor(index / monthsPerRow); - // Calculate year label positions - const yearLabels = $derived.by(() => { - const labels: Array<{ x: number; y: number; text: string }> = []; + const monthPaddingOffset = monthPadding * cellSize * DAYS_PER_WEEK * monthCol; - for (let year = startYear; year <= endYear; year++) { labels.push({ - x: ctx.width / 2, - y: cellSize * 5.5, - text: String(year), + x: monthPaddingOffset, + y: monthRow * cellSize * rowSpacing, + text: format(firstDayOfMonth, 'month'), }); - } + }); return labels; }); - + {#if children} {@render children({ cells: allCells, cellSize })} @@ -265,27 +227,15 @@ {/if} - {#if showMonthLabel} + {#if monthLabel} {#each monthLabels as label} - {/each} - {/if} - - - {#if showYearLabel} - {#each yearLabels as label} - {/each} {/if} @@ -311,11 +261,7 @@ } :global(:where(.lc-month-month-label)) { - font-size: 1.1em; - } - - :global(:where(.lc-month-year-label)) { - font-size: 1.5em; + font-size: 16px; } } diff --git a/packages/layerchart/src/routes/docs/components/Month/+page.svelte b/packages/layerchart/src/routes/docs/components/Month/+page.svelte index 02b18eaa1..3c3dae09f 100644 --- a/packages/layerchart/src/routes/docs/components/Month/+page.svelte +++ b/packages/layerchart/src/routes/docs/components/Month/+page.svelte @@ -1,11 +1,13 @@

Examples

-

Single year

+

Current year

@@ -41,45 +46,7 @@ > {#snippet children({ context })} - - - - - {#snippet children({ data })} - - - {#if data.value != null} - - - - {/if} - {/snippet} - - {/snippet} - -
-
- -

Multiple years (default)

- - -
- - {#snippet children({ context })} - - + @@ -98,12 +65,10 @@
- From 81fa7db10b0135a9397b4e701a866e5a4017c718 Mon Sep 17 00:00:00 2001 From: Sean Lynch Date: Fri, 24 Oct 2025 09:51:27 -0400 Subject: [PATCH 3/8] Refactor Month component to remove unused rangeMonths and enhance month label generation --- .../src/lib/components/Month.svelte | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/layerchart/src/lib/components/Month.svelte b/packages/layerchart/src/lib/components/Month.svelte index 301ebfbf1..6071d1a12 100644 --- a/packages/layerchart/src/lib/components/Month.svelte +++ b/packages/layerchart/src/lib/components/Month.svelte @@ -112,7 +112,6 @@ const ctx = getChartContext(); const rangeDays = $derived(timeDays(start, end)); - const rangeMonths = $derived(timeMonths(start, end)); // Space needed for month labels at the top const monthLabelHeight = $derived(cellSize); @@ -170,14 +169,22 @@ }); }); - return cells; + return { cells, monthIndexMap }; }); - // Generate month labels + // Generate month labels based on the actual months encountered in the cells const monthLabels = $derived.by(() => { const labels: Array<{ x: number; y: number; text: string }> = []; + const monthIndexMap = allCells.monthIndexMap; + + // Convert the map to an array of [monthKey, index] pairs and sort by index + const monthEntries = Array.from(monthIndexMap.entries()).sort((a, b) => a[1] - b[1]); + + monthEntries.forEach(([monthKey, index]) => { + // Parse the monthKey to get the year and month + const [year, month] = monthKey.split('-').map(Number); + const firstDayOfMonth = new Date(year, month, 1); - rangeMonths.forEach((firstDayOfMonth, index) => { const monthCol = index % monthsPerRow; const monthRow = Math.floor(index / monthsPerRow); @@ -197,9 +204,9 @@ {#if children} - {@render children({ cells: allCells, cellSize })} + {@render children({ cells: allCells.cells, cellSize })} {:else} - {#each allCells as cell} + {#each allCells.cells as cell} Date: Fri, 24 Oct 2025 09:54:24 -0400 Subject: [PATCH 4/8] Update monthLabelHeight calculation to conditionally account for label visibility --- packages/layerchart/src/lib/components/Month.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/layerchart/src/lib/components/Month.svelte b/packages/layerchart/src/lib/components/Month.svelte index 6071d1a12..ea5e40141 100644 --- a/packages/layerchart/src/lib/components/Month.svelte +++ b/packages/layerchart/src/lib/components/Month.svelte @@ -113,8 +113,8 @@ const rangeDays = $derived(timeDays(start, end)); - // Space needed for month labels at the top - const monthLabelHeight = $derived(cellSize); + // Space needed for month labels at the top (only if labels are shown) + const monthLabelHeight = $derived(monthLabel ? cellSize : 0); // Calculate monthsPerRow based on the actual space taken by each month // Each month (except the last in a row) takes: (monthPadding * cellSize * DAYS_PER_WEEK) From 12170d9c07a16f151ad6a59050c0fc40e7ce0104 Mon Sep 17 00:00:00 2001 From: Sean Lynch Date: Fri, 24 Oct 2025 09:56:34 -0400 Subject: [PATCH 5/8] Update Month component to use current date as end date instead of last day of year --- .../layerchart/src/routes/docs/components/Month/+page.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/layerchart/src/routes/docs/components/Month/+page.svelte b/packages/layerchart/src/routes/docs/components/Month/+page.svelte index 3c3dae09f..35c43c42b 100644 --- a/packages/layerchart/src/routes/docs/components/Month/+page.svelte +++ b/packages/layerchart/src/routes/docs/components/Month/+page.svelte @@ -205,7 +205,7 @@ @@ -248,7 +248,7 @@ Date: Wed, 1 Apr 2026 12:49:43 -0400 Subject: [PATCH 6/8] cleanup examples --- docs/src/content/components/Calendar.md | 32 +-- docs/src/content/components/Month.md | 22 -- docs/src/examples/catalog/Chart.json | 44 +++- docs/src/examples/catalog/Layer.json | 44 +++- docs/src/examples/catalog/Month.json | 212 ++++++++++++++++++ docs/src/examples/catalog/Tooltip.json | 170 +++++++++++++- .../examples/components/Month/90-days.svelte | 58 ++--- .../examples/components/Month/basic.svelte | 58 ++--- .../components/Month/custom-cell-size.svelte | 63 +++--- .../components/Month/multiple-years.svelte | 58 ++--- .../Month/without-day-numbers.svelte | 63 +++--- .../Month/without-month-labels.svelte | 64 +++--- .../screenshots/Month/90-days-dark-240w.webp | Bin 0 -> 5746 bytes .../screenshots/Month/90-days-dark-400w.webp | Bin 0 -> 10886 bytes .../screenshots/Month/90-days-dark-800w.webp | Bin 0 -> 13880 bytes .../screenshots/Month/90-days-light-240w.webp | Bin 0 -> 6274 bytes .../screenshots/Month/90-days-light-400w.webp | Bin 0 -> 11728 bytes .../screenshots/Month/90-days-light-800w.webp | Bin 0 -> 17160 bytes .../screenshots/Month/basic-dark-240w.webp | Bin 0 -> 28314 bytes .../screenshots/Month/basic-dark-400w.webp | Bin 0 -> 59990 bytes .../screenshots/Month/basic-dark-800w.webp | Bin 0 -> 56970 bytes .../screenshots/Month/basic-light-240w.webp | Bin 0 -> 28784 bytes .../screenshots/Month/basic-light-400w.webp | Bin 0 -> 60008 bytes .../screenshots/Month/basic-light-800w.webp | Bin 0 -> 63228 bytes .../Month/custom-cell-size-dark-240w.webp | Bin 0 -> 21794 bytes .../Month/custom-cell-size-dark-400w.webp | Bin 0 -> 47430 bytes .../Month/custom-cell-size-dark-800w.webp | Bin 0 -> 53274 bytes .../Month/custom-cell-size-light-240w.webp | Bin 0 -> 22854 bytes .../Month/custom-cell-size-light-400w.webp | Bin 0 -> 49192 bytes .../Month/custom-cell-size-light-800w.webp | Bin 0 -> 62164 bytes .../Month/multiple-years-dark-240w.webp | Bin 0 -> 15472 bytes .../Month/multiple-years-dark-400w.webp | Bin 0 -> 28692 bytes .../Month/multiple-years-dark-800w.webp | Bin 0 -> 37454 bytes .../Month/multiple-years-light-240w.webp | Bin 0 -> 16908 bytes .../Month/multiple-years-light-400w.webp | Bin 0 -> 31256 bytes .../Month/multiple-years-light-800w.webp | Bin 0 -> 47444 bytes .../Month/without-day-numbers-dark-240w.webp | Bin 0 -> 4932 bytes .../Month/without-day-numbers-dark-400w.webp | Bin 0 -> 7766 bytes .../Month/without-day-numbers-dark-800w.webp | Bin 0 -> 6440 bytes .../Month/without-day-numbers-light-240w.webp | Bin 0 -> 4780 bytes .../Month/without-day-numbers-light-400w.webp | Bin 0 -> 7544 bytes .../Month/without-day-numbers-light-800w.webp | Bin 0 -> 7062 bytes .../Month/without-month-labels-dark-240w.webp | Bin 0 -> 3630 bytes .../Month/without-month-labels-dark-400w.webp | Bin 0 -> 5304 bytes .../Month/without-month-labels-dark-800w.webp | Bin 0 -> 4734 bytes .../without-month-labels-light-240w.webp | Bin 0 -> 3616 bytes .../without-month-labels-light-400w.webp | Bin 0 -> 5460 bytes .../without-month-labels-light-800w.webp | Bin 0 -> 5158 bytes docs/static/screenshots/index.json | 43 +++- 49 files changed, 681 insertions(+), 250 deletions(-) create mode 100644 docs/src/examples/catalog/Month.json create mode 100644 docs/static/screenshots/Month/90-days-dark-240w.webp create mode 100644 docs/static/screenshots/Month/90-days-dark-400w.webp create mode 100644 docs/static/screenshots/Month/90-days-dark-800w.webp create mode 100644 docs/static/screenshots/Month/90-days-light-240w.webp create mode 100644 docs/static/screenshots/Month/90-days-light-400w.webp create mode 100644 docs/static/screenshots/Month/90-days-light-800w.webp create mode 100644 docs/static/screenshots/Month/basic-dark-240w.webp create mode 100644 docs/static/screenshots/Month/basic-dark-400w.webp create mode 100644 docs/static/screenshots/Month/basic-dark-800w.webp create mode 100644 docs/static/screenshots/Month/basic-light-240w.webp create mode 100644 docs/static/screenshots/Month/basic-light-400w.webp create mode 100644 docs/static/screenshots/Month/basic-light-800w.webp create mode 100644 docs/static/screenshots/Month/custom-cell-size-dark-240w.webp create mode 100644 docs/static/screenshots/Month/custom-cell-size-dark-400w.webp create mode 100644 docs/static/screenshots/Month/custom-cell-size-dark-800w.webp create mode 100644 docs/static/screenshots/Month/custom-cell-size-light-240w.webp create mode 100644 docs/static/screenshots/Month/custom-cell-size-light-400w.webp create mode 100644 docs/static/screenshots/Month/custom-cell-size-light-800w.webp create mode 100644 docs/static/screenshots/Month/multiple-years-dark-240w.webp create mode 100644 docs/static/screenshots/Month/multiple-years-dark-400w.webp create mode 100644 docs/static/screenshots/Month/multiple-years-dark-800w.webp create mode 100644 docs/static/screenshots/Month/multiple-years-light-240w.webp create mode 100644 docs/static/screenshots/Month/multiple-years-light-400w.webp create mode 100644 docs/static/screenshots/Month/multiple-years-light-800w.webp create mode 100644 docs/static/screenshots/Month/without-day-numbers-dark-240w.webp create mode 100644 docs/static/screenshots/Month/without-day-numbers-dark-400w.webp create mode 100644 docs/static/screenshots/Month/without-day-numbers-dark-800w.webp create mode 100644 docs/static/screenshots/Month/without-day-numbers-light-240w.webp create mode 100644 docs/static/screenshots/Month/without-day-numbers-light-400w.webp create mode 100644 docs/static/screenshots/Month/without-day-numbers-light-800w.webp create mode 100644 docs/static/screenshots/Month/without-month-labels-dark-240w.webp create mode 100644 docs/static/screenshots/Month/without-month-labels-dark-400w.webp create mode 100644 docs/static/screenshots/Month/without-month-labels-dark-800w.webp create mode 100644 docs/static/screenshots/Month/without-month-labels-light-240w.webp create mode 100644 docs/static/screenshots/Month/without-month-labels-light-400w.webp create mode 100644 docs/static/screenshots/Month/without-month-labels-light-800w.webp diff --git a/docs/src/content/components/Calendar.md b/docs/src/content/components/Calendar.md index b4a845f96..179d2f8fc 100644 --- a/docs/src/content/components/Calendar.md +++ b/docs/src/content/components/Calendar.md @@ -2,39 +2,9 @@ description: Marking component which highlights specific dates or time periods on a chart to emphasize events, milestones, or temporal patterns. category: marks layers: [svg, canvas, html] -related: [] +related: [Month] --- ## Usage :example{ name="basic" showCode } - - diff --git a/docs/src/content/components/Month.md b/docs/src/content/components/Month.md index 13d3c3d6f..b3be937c7 100644 --- a/docs/src/content/components/Month.md +++ b/docs/src/content/components/Month.md @@ -8,25 +8,3 @@ related: [Calendar] ## Usage :example{ name="basic" showCode } - -## Examples - -### Last 90 days - -:example{ name="90-days" showCode } - -### Multiple years - -:example{ name="multiple-years" showCode } - -### Custom cell size - -:example{ name="custom-cell-size" showCode } - -### Without day numbers - -:example{ name="without-day-numbers" showCode } - -### Without month labels - -:example{ name="without-month-labels" showCode } diff --git a/docs/src/examples/catalog/Chart.json b/docs/src/examples/catalog/Chart.json index fb475f32f..9ee18c199 100644 --- a/docs/src/examples/catalog/Chart.json +++ b/docs/src/examples/catalog/Chart.json @@ -2651,6 +2651,48 @@ "lineNumber": 32, "line": "" }, + { + "example": "90-days", + "component": "Month", + "path": "/docs/components/Month/90-days", + "lineNumber": 22, + "line": "" } ], - "updatedAt": "2026-04-01T13:16:17.567Z" + "updatedAt": "2026-04-01T16:49:30.210Z" } \ No newline at end of file diff --git a/docs/src/examples/catalog/Layer.json b/docs/src/examples/catalog/Layer.json index f3ddfffdb..4688fc8a2 100644 --- a/docs/src/examples/catalog/Layer.json +++ b/docs/src/examples/catalog/Layer.json @@ -2543,6 +2543,48 @@ "lineNumber": 33, "line": "" }, + { + "example": "90-days", + "component": "Month", + "path": "/docs/components/Month/90-days", + "lineNumber": 37, + "line": "" + }, + { + "example": "basic", + "component": "Month", + "path": "/docs/components/Month/basic", + "lineNumber": 39, + "line": "" + }, + { + "example": "custom-cell-size", + "component": "Month", + "path": "/docs/components/Month/custom-cell-size", + "lineNumber": 39, + "line": "" + }, + { + "example": "multiple-years", + "component": "Month", + "path": "/docs/components/Month/multiple-years", + "lineNumber": 37, + "line": "" + }, + { + "example": "without-day-numbers", + "component": "Month", + "path": "/docs/components/Month/without-day-numbers", + "lineNumber": 38, + "line": "" + }, + { + "example": "without-month-labels", + "component": "Month", + "path": "/docs/components/Month/without-month-labels", + "lineNumber": 38, + "line": "" + }, { "example": "repeat-indefinitely", "component": "MotionPath", @@ -3846,5 +3888,5 @@ "line": "" } ], - "updatedAt": "2026-04-01T13:16:18.421Z" + "updatedAt": "2026-04-01T16:49:31.366Z" } \ No newline at end of file diff --git a/docs/src/examples/catalog/Month.json b/docs/src/examples/catalog/Month.json new file mode 100644 index 000000000..00288ca2b --- /dev/null +++ b/docs/src/examples/catalog/Month.json @@ -0,0 +1,212 @@ +{ + "component": "Month", + "examples": [ + { + "name": "90-days", + "title": "90 days", + "path": "/docs/components/Month/90-days", + "components": [ + { + "component": "Chart", + "lineNumber": 22, + "line": "" + }, + { + "component": "Month", + "lineNumber": 38, + "line": "" + }, + { + "component": "Tooltip", + "lineNumber": 41, + "line": "" + } + ] + }, + { + "name": "basic", + "title": "basic", + "path": "/docs/components/Month/basic", + "components": [ + { + "component": "Chart", + "lineNumber": 24, + "line": "" + }, + { + "component": "Month", + "lineNumber": 40, + "line": "" + }, + { + "component": "Tooltip", + "lineNumber": 43, + "line": "" + } + ] + }, + { + "name": "custom-cell-size", + "title": "custom cell size", + "path": "/docs/components/Month/custom-cell-size", + "components": [ + { + "component": "Chart", + "lineNumber": 24, + "line": "" + }, + { + "component": "Month", + "lineNumber": 40, + "line": "" + }, + { + "component": "Tooltip", + "lineNumber": 43, + "line": "" + } + ] + }, + { + "name": "multiple-years", + "title": "multiple years", + "path": "/docs/components/Month/multiple-years", + "components": [ + { + "component": "Chart", + "lineNumber": 22, + "line": "" + }, + { + "component": "Month", + "lineNumber": 38, + "line": "" + }, + { + "component": "Tooltip", + "lineNumber": 41, + "line": "" + } + ] + }, + { + "name": "without-day-numbers", + "title": "without day numbers", + "path": "/docs/components/Month/without-day-numbers", + "components": [ + { + "component": "Chart", + "lineNumber": 23, + "line": "" + }, + { + "component": "Month", + "lineNumber": 39, + "line": "" + }, + { + "component": "Tooltip", + "lineNumber": 42, + "line": "" + } + ] + }, + { + "name": "without-month-labels", + "title": "without month labels", + "path": "/docs/components/Month/without-month-labels", + "components": [ + { + "component": "Chart", + "lineNumber": 23, + "line": "" + }, + { + "component": "Month", + "lineNumber": 39, + "line": "" + }, + { + "component": "Tooltip", + "lineNumber": 42, + "line": "" + } + ] + } + ], + "usage": [ + { + "example": "90-days", + "component": "Month", + "path": "/docs/components/Month/90-days", + "lineNumber": 38, + "line": "" + }, + { + "example": "basic", + "component": "Month", + "path": "/docs/components/Month/basic", + "lineNumber": 40, + "line": "" + }, + { + "example": "custom-cell-size", + "component": "Month", + "path": "/docs/components/Month/custom-cell-size", + "lineNumber": 40, + "line": "" + }, + { + "example": "multiple-years", + "component": "Month", + "path": "/docs/components/Month/multiple-years", + "lineNumber": 38, + "line": "" + }, + { + "example": "without-day-numbers", + "component": "Month", + "path": "/docs/components/Month/without-day-numbers", + "lineNumber": 39, + "line": "" + }, + { + "example": "without-month-labels", + "component": "Month", + "path": "/docs/components/Month/without-month-labels", + "lineNumber": 39, + "line": "" + } + ], + "updatedAt": "2026-04-01T16:49:31.660Z" +} \ No newline at end of file diff --git a/docs/src/examples/catalog/Tooltip.json b/docs/src/examples/catalog/Tooltip.json index 497223ded..61f1b7918 100644 --- a/docs/src/examples/catalog/Tooltip.json +++ b/docs/src/examples/catalog/Tooltip.json @@ -5016,6 +5016,174 @@ "lineNumber": 62, "line": "" }, + { + "example": "90-days", + "component": "Month", + "path": "/docs/components/Month/90-days", + "lineNumber": 41, + "line": "" + }, + { + "example": "90-days", + "component": "Month", + "path": "/docs/components/Month/90-days", + "lineNumber": 43, + "line": "" + }, + { + "example": "90-days", + "component": "Month", + "path": "/docs/components/Month/90-days", + "lineNumber": 46, + "line": "" + }, + { + "example": "90-days", + "component": "Month", + "path": "/docs/components/Month/90-days", + "lineNumber": 47, + "line": "" + }, + { + "example": "basic", + "component": "Month", + "path": "/docs/components/Month/basic", + "lineNumber": 43, + "line": "" + }, + { + "example": "basic", + "component": "Month", + "path": "/docs/components/Month/basic", + "lineNumber": 45, + "line": "" + }, + { + "example": "basic", + "component": "Month", + "path": "/docs/components/Month/basic", + "lineNumber": 48, + "line": "" + }, + { + "example": "basic", + "component": "Month", + "path": "/docs/components/Month/basic", + "lineNumber": 49, + "line": "" + }, + { + "example": "custom-cell-size", + "component": "Month", + "path": "/docs/components/Month/custom-cell-size", + "lineNumber": 43, + "line": "" + }, + { + "example": "custom-cell-size", + "component": "Month", + "path": "/docs/components/Month/custom-cell-size", + "lineNumber": 45, + "line": "" + }, + { + "example": "custom-cell-size", + "component": "Month", + "path": "/docs/components/Month/custom-cell-size", + "lineNumber": 48, + "line": "" + }, + { + "example": "custom-cell-size", + "component": "Month", + "path": "/docs/components/Month/custom-cell-size", + "lineNumber": 49, + "line": "" + }, + { + "example": "multiple-years", + "component": "Month", + "path": "/docs/components/Month/multiple-years", + "lineNumber": 41, + "line": "" + }, + { + "example": "multiple-years", + "component": "Month", + "path": "/docs/components/Month/multiple-years", + "lineNumber": 43, + "line": "" + }, + { + "example": "multiple-years", + "component": "Month", + "path": "/docs/components/Month/multiple-years", + "lineNumber": 46, + "line": "" + }, + { + "example": "multiple-years", + "component": "Month", + "path": "/docs/components/Month/multiple-years", + "lineNumber": 47, + "line": "" + }, + { + "example": "without-day-numbers", + "component": "Month", + "path": "/docs/components/Month/without-day-numbers", + "lineNumber": 42, + "line": "" + }, + { + "example": "without-day-numbers", + "component": "Month", + "path": "/docs/components/Month/without-day-numbers", + "lineNumber": 44, + "line": "" + }, + { + "example": "without-day-numbers", + "component": "Month", + "path": "/docs/components/Month/without-day-numbers", + "lineNumber": 47, + "line": "" + }, + { + "example": "without-day-numbers", + "component": "Month", + "path": "/docs/components/Month/without-day-numbers", + "lineNumber": 48, + "line": "" + }, + { + "example": "without-month-labels", + "component": "Month", + "path": "/docs/components/Month/without-month-labels", + "lineNumber": 42, + "line": "" + }, + { + "example": "without-month-labels", + "component": "Month", + "path": "/docs/components/Month/without-month-labels", + "lineNumber": 44, + "line": "" + }, + { + "example": "without-month-labels", + "component": "Month", + "path": "/docs/components/Month/without-month-labels", + "lineNumber": 47, + "line": "" + }, + { + "example": "without-month-labels", + "component": "Month", + "path": "/docs/components/Month/without-month-labels", + "lineNumber": 48, + "line": "" + }, { "example": "sunburst", "component": "Partition", @@ -6536,5 +6704,5 @@ "line": "" } ], - "updatedAt": "2026-04-01T13:16:19.842Z" + "updatedAt": "2026-04-01T16:49:33.016Z" } \ No newline at end of file diff --git a/docs/src/examples/components/Month/90-days.svelte b/docs/src/examples/components/Month/90-days.svelte index 63d0ea7c7..b9fc664c3 100644 --- a/docs/src/examples/components/Month/90-days.svelte +++ b/docs/src/examples/components/Month/90-days.svelte @@ -19,34 +19,34 @@ export { data }; -
- - - - + + + + - - {#snippet children({ data })} - + + {#snippet children({ data })} + - {#if data.value != null} - - - - {/if} - {/snippet} - - -
+ {#if data.value != null} + + + + {/if} + {/snippet} +
+
diff --git a/docs/src/examples/components/Month/basic.svelte b/docs/src/examples/components/Month/basic.svelte index 5464d7709..117877a87 100644 --- a/docs/src/examples/components/Month/basic.svelte +++ b/docs/src/examples/components/Month/basic.svelte @@ -21,34 +21,34 @@ export { data }; -
- - - - + + + + - - {#snippet children({ data })} - + + {#snippet children({ data })} + - {#if data.value != null} - - - - {/if} - {/snippet} - - -
+ {#if data.value != null} + + + + {/if} + {/snippet} + + diff --git a/docs/src/examples/components/Month/custom-cell-size.svelte b/docs/src/examples/components/Month/custom-cell-size.svelte index 1262a97a5..ffaab1537 100644 --- a/docs/src/examples/components/Month/custom-cell-size.svelte +++ b/docs/src/examples/components/Month/custom-cell-size.svelte @@ -21,39 +21,34 @@ export { data }; -
- - - - + + + + - - {#snippet children({ data })} - + + {#snippet children({ data })} + - {#if data.value != null} - - - - {/if} - {/snippet} - - -
+ {#if data.value != null} + + + + {/if} + {/snippet} + + diff --git a/docs/src/examples/components/Month/multiple-years.svelte b/docs/src/examples/components/Month/multiple-years.svelte index db45b6639..1a72c5d84 100644 --- a/docs/src/examples/components/Month/multiple-years.svelte +++ b/docs/src/examples/components/Month/multiple-years.svelte @@ -19,34 +19,34 @@ export { data }; -
- - - - + + + + - - {#snippet children({ data })} - + + {#snippet children({ data })} + - {#if data.value != null} - - - - {/if} - {/snippet} - - -
+ {#if data.value != null} + + + + {/if} + {/snippet} + + diff --git a/docs/src/examples/components/Month/without-day-numbers.svelte b/docs/src/examples/components/Month/without-day-numbers.svelte index 525b3d7be..95ead56ef 100644 --- a/docs/src/examples/components/Month/without-day-numbers.svelte +++ b/docs/src/examples/components/Month/without-day-numbers.svelte @@ -20,39 +20,34 @@ export { data }; -
- - - - + + + + - - {#snippet children({ data })} - + + {#snippet children({ data })} + - {#if data.value != null} - - - - {/if} - {/snippet} - - -
+ {#if data.value != null} + + + + {/if} + {/snippet} + + diff --git a/docs/src/examples/components/Month/without-month-labels.svelte b/docs/src/examples/components/Month/without-month-labels.svelte index f9985696f..d9b97fdd3 100644 --- a/docs/src/examples/components/Month/without-month-labels.svelte +++ b/docs/src/examples/components/Month/without-month-labels.svelte @@ -20,40 +20,34 @@ export { data }; -
- - - - + + + + - - {#snippet children({ data })} - + + {#snippet children({ data })} + - {#if data.value != null} - - - - {/if} - {/snippet} - - -
+ {#if data.value != null} + + + + {/if} + {/snippet} + + diff --git a/docs/static/screenshots/Month/90-days-dark-240w.webp b/docs/static/screenshots/Month/90-days-dark-240w.webp new file mode 100644 index 0000000000000000000000000000000000000000..17d2ae1eed636eada25fce4672e7a29a1313690b GIT binary patch literal 5746 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 literal 0 HcmV?d00001 diff --git a/docs/static/screenshots/Month/90-days-dark-400w.webp b/docs/static/screenshots/Month/90-days-dark-400w.webp new file mode 100644 index 0000000000000000000000000000000000000000..68f63f369e7a3013fd8d4b6975d7a9658497e33c GIT binary patch literal 10886 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 literal 0 HcmV?d00001 diff --git a/docs/static/screenshots/Month/90-days-dark-800w.webp b/docs/static/screenshots/Month/90-days-dark-800w.webp new file mode 100644 index 0000000000000000000000000000000000000000..279994e1206fce6599507e8232384a105241d05c GIT binary patch literal 13880 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 E06YrlZ2$lO literal 0 HcmV?d00001 diff --git a/docs/static/screenshots/Month/90-days-light-240w.webp b/docs/static/screenshots/Month/90-days-light-240w.webp new file mode 100644 index 0000000000000000000000000000000000000000..7beb6574722e6b33a906fd2a4772413915950a55 GIT binary patch literal 6274 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 literal 0 HcmV?d00001 diff --git a/docs/static/screenshots/Month/90-days-light-400w.webp b/docs/static/screenshots/Month/90-days-light-400w.webp new file mode 100644 index 0000000000000000000000000000000000000000..fd1563e9de2ea4b68b2df511430d3c61feeee360 GIT binary patch literal 11728 zcmV;>EickiNk&GN5kXOsWU+12a9#PaVC3#SfDBF$KLE0<4avr*Ec^*+Ab&@rPNP9juDlD5dPe#lLvOmH$Y zS$EN&G4nStqJmSq5K=H-L`>#C_R2;W{6)#fNQSzYoU`H(7q<9*;@s0ie>rVxe3jzK z%d2RAG`@EGrRe#0pDlFf$$sd#FBvIVaPh*Ru9_a+FKTM+!e#mArnM+~H1tSJ%{|SY z|9)$=@|bk;a!u`Lq##lF)b6gZt#prPA=+cU%Gusy&*NTEk^N&7=-}?C@C^q8njat587v^jj->Slx z(H|cfG2+=lFExu9vt{{eE`mh4FY$Fg`~E9^-IZ=GJMz`{6V|oCmlZAuSET}3wkDvyBOt|$OQzC#&b7DF8=y3YdLsgN3nF; zn2ym)I+b~AK-XeDKP>lXcKI*f|FX3VnnA_auOvkBvSaf#Yw%#sYkfx+85`#wr$%|dW zQ-{}e-5LMuvDhD`FK_3WQvUIyFTXl8a8$*F`OtKG#mh_vi}GK!-g^6`?L$7hQ~B!b zkprR@CYK&PWW(;w@7kcXWpe+aN7cD<&l7Ps79SRlz3Fl_xpyl${*DY=HD`NpOM zZ6v4^`-{jGAM=Zr=QcSj-gG}GTj)$uh)9Nh?Yaa}mCm?ZxnxqoTTyi`-*-jdg@{^L zF6U29Es)^0#rrh`AY&Fls+2y8dLuahqksgU+7HP)oho0vd78-}oK?kiB7r?_gh+&5 z>rV)ThNU4S&;$fv?vR-$$;3-u%gn&5PU&?da{h4D=LyZ9ixg-~%R#!&d=b3< z9&+)VgB01-aY`_ssv@C~zfburk;N%5v549V#9hBgBlJ`#>PAHtnnyWBzdzIz#Yei8 z*@*{aYq)rJw=nr$rfc2S`nar-v~wjS^S=^Z`{cuLVVv~HKZ^$Q`^*n#qq2sP%i8G@dQx9^Q43QSLj!<~*|}&8*Na>wP;_ z#vKTu?|sgVDEw&Yz@+-t1mB|Xsp>6sB1SiIo~Z6YBQfqRmuWSQF(WGV@PX>G&zm4@ zJ9J&=+u4$V2_Jl#0hy$9CrSh+yglA51~OgY)5>tBiaQ-ckzvAE^P%cdCcSD;SNcIZ zWIz%C^JLu!zT`>o!RO}xCKos@QlPL(^;>zkb zZX#vbn4JA`>5EKSi^*mOR`o=bzH!lbOX!%X4E@A~wxR8o&bn9NqW9EXiw7{7RRhs@ z@5355tk-bH*{-HAS@xq&GhXN5Crz)n-*K|xBPKHfP^lkZU!G;tbatpAygrEwiwBxM zvC<1BRqEI4hi=Gqe>GpXr+SlH-kA8}xtfHOWee?HX~>X8mgC~vlI=|nx=fMtKMcSi zW>dxQdbqtXS@4&!E4j$ZchO2-3Wi+@hF&szppsEX1F}o*vd2;Zy?4n~TO|E-rybtvhKduZX zD@)^9r|F-)YnrThTGbaQoUDA7B=(UW?53*9cix;sM(jz4hL06XfJ`W-Y4&Xg866C{#1^@OJjDO)>{)KyInR# zHKE0Br>Wj~SN8B(uQeg|E*gn~^0s0&MaKJxrEg-|g29@eX$B(Xk6NUfu}Py{Ch@eY z=a`Y`u+f^A3GY_Crx{U&E02uV2lK4$;!@!VVExMlLjJ88x!Z3_Q(??JL8d=d=e-p4 zG-dd^dOGAFWxA;&%!f*6(=q0iUB?ZUDgOWoIC@QZ`75cwxIh%dG5F08f1JTl95DmVWw zl9z&=Hq?z@;^HEBAeHX%!$AZuK+PL1zktk!ana<^&9|2Njf)~b7TEtBXu72|z10%; zfj&%n+1FxWt2}Q{ba;XW66|hyqtO*6({WL0x94&*(sVo4X334O76(AlgYiE-Z@umx zpDR-%6)Bz8>iwc~?)I(CMKIaX;6YQPdQ1LnT=$B@W5>F`tfjO;<|j>WzUEB6Iu9(y zMU%ab11-r5M1CK7(G49nJ&5G~+|IY8 z#h5HUBkrC3hC%f5O&v<~|0AfdajnjcxaAd?jGbO_;&O(|epP<)$&trrz7h`T@B6t8nRH{Ifg|sV-NOPuU%x1gIHhdt=*pG`T zBh9OLj(I<17})zz0DewEvODD;st#1{TE>CAN?~$s7hN;^d?E`VXN>pH?Y&AVz^|(g z)Ml%#I$BF+00Q7{fBH04PdOw2dS%ynoq65Y_<-a%TS67?)w$pKNJ=-RtqnCR2oL-4K&^&-(%j3x4t z5L(m6OnBjev3bH$`VC3sib{$_D=H!U=+|&#f7eyvOY`3U%on6(4N?@#&0jkmswlDT zOsg#(kk0lt%LiPHnr!w`l&tAtWAaQ^J{q_IlLwm$ZakMn#WPIW>A?JtS`f{XK7UkW z-7ZG@=t*uBM5X8UIE_5Dehs7p%{)d-R6S|vg9ptn_7|+{(*T!w<^d=rx!3C>z5#@RxC5G2Z^((U?}AzOomjDI#FRFbpuiz}_g*c$^w9y?lH%-+!S8O`~%q7Cl&$?5Jf@p`?KMn|pX@Vq%Z?Pj@F zN3%D$7#Q}r$Lvj-?jKFB+xD+^+gDrsvZlALeEOC3^RkeaNezQTg#=F0Ytgvp)o;yv zcCSNtXUBA3_dTTI^jqbVnlzS}ao-d8*(4Rm{1-Jni|PxMOHv(Z#8mT|A5R*=i z1^%gg&Y;!yEF!p-zrBlL0n&4o&)__(?whrGpcy3&f5*H*`y!=5YRz>@B286d^ji~r zJKR_q+MWtCCZEzq-8a+IP$h($CSA%B=f2E^4G{dbrLl(cF|FjDFhZ*VfJc=QaqdU@ zq|97XPQ*`Lon%bg0T%$w2t@MhhekWY6T>_NY!nn1(bPKguYgx2j6sLycI z*(n`t&J4v9X>oVWF`c~9lKz@7<{^(XGVMYo7c&-sdG6bUzRS2kLX?11{G@fP4?Z9O zq1TAV-Lonz9>66KlGn8OqheY{eJBwK^CZ{^&;%jb2?9;emf6-O&m9BXz~t+ha@Sqeew}midWy3MeTkY%X0sjW@!PqIkO}gCYI*Ydt zkb9b^&Cv$W9<~oqVggpWQ`z0(gd>-Qpyt2Ai#hUq{xy^SiJnf4&ehVo?c#CvLDTbZ z+duKQL5J)E7iBjss#leF{>@UFUT?{)#u0^@-U0sx5Wn?@$X1Tw8+iPE+kl}5>n#0t zd%t})67v37YJPp5x92Wrtd*hMPvP@wM(Ir-`Z;j!ZM?EXzFcq5(&B7Hc=t%y)Zn}8 zHX^P|*yG-9{%3rQ7c|0Pac0w6K&DRs;; zr%QW+hjV{RG_Jk*e`fk&KC=%EAsuY$Hpy|WipyA|jr=p!Lv=_6&qiA1T!~;i5F!u~ z0gu0HUEqQN0m=Z}_aI0H5-@Lqo=Fkjy`-2H8L|79P%<`{@=tIEMz57V0B9?UxfB?Y z3Rhn_>TD4ufT>hv#P4sZ`eqv50yUqDN+%yH$`x^C2o+Whicti8eD%l7RJ{~(ZItqR z0v)$xCZ%gLhp8?___dZ_=Xn60Q&prNOdEG7s}MT)3>i%@@!DG^$b1OfW>EeQdA&PaKxYpP|%fR&h;X#$ZDfQWpB zKnm(Du()JIh?46*%o=LR4;eFckYpU#J_gdO2g`)L)AZOfr;0@+Ue@g&Ix5|{UebBi z?m^_CsvC<}zghbh{$lrF#?U`Mn^K_nYOr}lyH%=DWv!zv(yz9!|LFJ&xBuO^q0Mu6 zI;`$?{Es$2Flqa=j@|1%`13-Wy3lU3t%u@L|b>%?Rh@ba2QH)o73{K`_B4;WT1 zl=RC9NLj%yHLhJR6?TFP8{{#2=dOoMAE8{wpX$2ILNcFsm-U(2z7{Uk?`2gx&7{|) zAQNr2y0~&`?TEwtbv1j4Lm~hWAd0u zwouh&)~ArFm&ZV$*%qX7R%OJ3znRRmkcRx@2~%XT=#H_;hG`YLD!=sa(0V5A$G`kJ zyOlXeu=Nf7Yl7Ji&3p?{s@I+|^G!Z9pSPe)jic#r&qeNIYVC*)IgahA|DO6U%Yy{} z1F>;Qzz_v7rkA{*!bG;;v1JoA9RPut{B&8L?{{;Nz1MvFzx$@u&s}QGtwtp-%D*RV z-;&)o>E~u^_Mbd`rdI3k@4Wu$q^{p(_l5uUVTXr94-Y%JZpMIdrs?LXuHA95&E-dOy{|2OV4=AZhn`aj@3 z(En%t1pR>j@9gLQPxk-e2m2@eFWnD;uh@_O|L{G)KmYoGaH9Wt^hM)`=X^KwckQ2U zKe&AEeead}55F7xhqdqO``!4}s7JH>7k0YrAMAYqy^{L3{C`6KtMe=D*RTiW|EquV zzux%|eVhI-uut-T?SJ$Cu>M$lrT^9bm-7SL@7BNi{lfp7e_{Wt{wLbs*pKc{vDfP# z{o)q?;@M@9SOZ^>SP__aN}hKzLX+_wE%XZpim`2B1&80}u=2?qTl5STL)4-x>3v## zGfk0#B+*inKA)8Jh6mRIO5KGd>NEjc)#a9bNAo8F5iLtz-=*%6N~)ap_+=~Y8+e@O ze0Fp7vI;1rMK;ohozMX{&gJ{0u-+kL*e}FIV~Sh63=3s4FoqL6lvWju5U<*RYLmH^ z)Jq^}Bc6D z*A39grFgi#dl4cG&h1^wii%0_KPTX+(R{V+4_>=CMEzbvH|dH=iMuf!U%tehAlGG>pww` zT2W-9LXxx~%P@MUjF%NMlKckG#~Z3t4LwHP6!70YXWQ_z zpOZ!J^LQ}^iAE0FE#p(1`E-J0)Qj3B5=#i+Os0yCU}0g z+XuJ}Q*gACFVeb$Z%?3xq(%TCSg|f`k@?2bF7;$>L?juR3B_KZztqIGi43d^h8-Um z3WommEL?z9gRf(+iov_W4mO|~Dfy0PV6#7ZtSH^%ZZ2`DNH%jZn)Kx&MIMt_K zsIZ!Ex>EKJ|Es9gVOnT;_;P!jq%||?)J)_2+UYfySLM#>@-KJg3Qp7wkbxJyBdsLh z0&VBG$Wa}Q9;ny>_PpOfjPepE6VJ-+Qa#p?Cy!fR<-bPY(Tl$rsL3mR_wYx>CFG>*@u0h|8O{J4Cuj=To)Cb6OHP>J_+wImrq;cmM-6Pcg;pxPNRvH5 z=ony)n7fFN&J&A_z(Pm9L<=%h9fMwEj$Q+Yx*+uk9tZzdIP{=L;nvJi%arBginte+ zkIq-XV7V~&Rlhc74}Hq#*;c{7138H|n*;O*=(l)(x_NREG&k1>%pp>Vd9WB8HeLOf zNlq4cgK0)L+hxtzTCu&tBE=<`Dl$siSXZY$#*cR0b<@yeh1AP38TPeUYD)-#QHkEh zaLJTjHV=TrDxL5^gtaYzoXB--LE|FLY z(Ab{geL^)LyD``JTerOPdL(5?F!q55CLbjP+|M*z{o5>bL(K-2qP||0*=LTj{yVBn z>0j1eFbl`}d3bM&$Omh+OT6M!;#XjAfL_kVMALY_=M`=N#mR#Mm{(_5fkBT$4CTj% zngf_@mh@-)$}HV~y-fjhnoHe(L13{6@R8ozXH8ljP`~~Ao1N-lr2Fm^ucx~(#YY|| zJfVJw$y>2^kQe1LYk_8nqUuHaqqPwwLFXhUQ%p7h>UHx;2IG%C<#o#c``dcA`HPC@ z$s-wmp5!>AlwtWe+cG97J~R}z68$ippNl9?@A2olFOtP%-(Sp(arph^MOZet+BjRv z!AtNkXkVOPb+97~3)kD*kmF!=id1Kh`*j1Pm3eD}&pysAT7jscY|{`hh5Yu}5aoOt zBj@C}-}@E3s>$&@0CW`sEBXOxLBG|WASkwc6?(=!r(hTs)WzQo>1I$+)0-vuG{Hpa zPU5t~2^heDInfwOz(dUPQbb7Qsjr%_(nX4UVCSJYmI@ zBxqTG8r`RUsz29els~nIFiNQFl`{XaONU@4@b6!I`^#N2i~{(Xyup0xLy}^EB>Ch3}@Oo^bLBUvJFOv>7o;$@^CBQB+uuDDL(yR z7?>!*GA?e3u3TiXD4`mv)3~y!=5?rf7Ght{`9Z;$h!#QPzbK1KC70~1j_z-o+cCm` z<_2ygmcGdviS4#PwbK|kK;iLvcXhpZ&R=^`o?-=X+|?r!yguh|DH8*OX%nrTH*qn? zLIMllp~2^Z@oI=DXy^KB1p0G!!q$iu#|;9g=Z_(gUF~OM6FEZdh<=WJO%`B_c0Ghl z-`D|<;liSf<|MF54p7z87wH<&G zk9hEB!m@2Df?WbZQ*-zUr0{OiPS(A~&fe!cMj5_7$c46%NJ8vrs4AuC(@P`>82Mb z$N5yB3uXV0FSeq?qGOb-c@Unz%H*p53kWfkj-r<$p=l*> zP?7~$<7IT71545QHfk6+of^iA48OBTl{J$cbAaLP6F1-mt)?E)m3v%+tB-^v1l4f8 z4Zoual#2Z>{2*muz9SqVNUrKCLUHX}WD_48DawbHk+vIWh79x!4MJ4m72YIr*R_1v z&mSMDw4=Mwjyp;(0?+a7_9C@E>cMU{sbMEr`=zIW-<{?1oSE46jD6a7YIsjB^4{nt zMn3o-``l1rncD1&-q;sjw{h=!xRPa(=9_8jn`+AvI;36i+@{^8z(G_4m|A>Oukpw% z_NLbYl0*4iBF@e7)qBM@3U3@`#Cw6|Ww6VafrcNS(z-RTBk9%2m^^mj}9EsBBi^vU#T(x7;SYOrf$?NON!I5C{%6}-m-|H;ik8o`P4(%rF zYTIDPXv*|omV`6knyDFDlNA^Ll&UD3W!_}O zS1l0I?FO5QwTFisHOv1?8=0q0D%YRrccFOZfq7T-F6*w@ugn8=dny#?8)>o zoMaCcDn=8EZF~NoZY6*2S+QX!B4oBPa;=j_Zi|0Gt_j~8ldEwF^1L&&Dt749K^Z~`aELZ}D8b5-&dcPk=rXn7;k(Y1 zFhq}?IrmtY5~7cmZj%n@PM=@qRCbO-DL#M{RURSBapMq|?t4B>r;gFU+Rz>!W?p3tOF6#5kwKB z=gJOQ$tYvac?!ofN6I?mOz#cd-k>DvpZ#s|GwP({h;AS2*^W1GGQ%rD+Xx+~88-~R z94tio!RnR7HPCa<5sj`mMI&a+^naDX;}u|S;md1h0K9=U;n#HigHT&MW+YyB8JT7t^x#&*g0SG$oeXHJNlLUxBk!aY(@OMc)}Gj!Vps6o7Qf zKa?Q_jXdpd9VRBED4`g>vQn*eKdSjYc#B&4M@dibo84v-fqR zZ8vPtub6gdz_I%JM6mj2VZKkSVDue&9rv0Q1ax!oN0}&pz1l64Nz>*V$YFqEK)5o| z|N6j&spoHiYqhMtQj63FcUgY&5PO_E6H;!H&~=~K=25iq zRwtBHfcL^HOq<_FA3-!D*IjV$z^jqoHHKHtxQAVT08ie1bM+eWMOg;PJ`POh_<2p} z0)55oY?>JFPdJ^B5|03z^Y_5Shnb~>vDm{;v2S^BsZURsB9jnjp9>__2JOa+L;f+L zaX(Wv;aHE57lw~xX-NxC6Ghesc1p*h+*$dVGYT^L7@nb1;}&bw%WtN1%;@?Giy1az z7B@y{yj}z!Xxxr(13f5=X8+kIEyilqoW7jFg7Vwd!Q+?8S*_dSa|zt`hCi(#-;5%# zQ>2C);*hC@LHNW`R&9=mV!fP$9|}%CTlqh<8;-o->U~^j!jgN&sX5lcmtxjpKcT8x z@z-0HcfK4nJDX0^tC_*3Iw-q8nC(eCec8a@d#*+4Nq2>kiR<*Vrmv&!E$^btR9$!GCp@=o_bZj!G9yvHl8hNsIn(?lXjG=q#GoIbtCBCuIvaDmE7|G z%za8N>S&b6CW`IcP#||Wf01T+Shs!HZQe6V+NrtHcwWoq z&u3~fkymw`B-p;7z9g&k4cdSz5;QtZnNT|Gh0k|E-l%}K^vB5JdCcNr)cW@>!#v?=SbIo-UeCBDT|p+m^(*Jx+N(mTy7pU5k99Z_n}bF z0W4fBln?oZ(2J|Fy}6!dNmbrU71oX@)-8AHuMY!c56Y`%H^G z8O)#44qH)?W@r&7k#B~2{PMYi1%Ecfhlci2AIPlk#(NC$AM{h?(fqO`~ zPsK|L-vBnMi7njet{B4AJ$ATR-cYOC?D3{|PzFE!W%t~IKn*(A3II>gIiN;`kjihKcEiQ67F>g}Qjl*(y*BDaI670uqu=Y}>5f{hZ4o^yv5C#Z1;P~OD>x2E{%s(f zd+$TP8y&ahG;Q&3mt9Ff)or2-&;EC0JX;|dJvu^%yzX3nS8eoVM?l`Gn11+3nEuji zEjaF!1iT%U{7=N;krQb#^SHWwZaCjk9fRT&UmGk7rshZh52aJUyo72giakQiAbg2P zd*A-Q4N(0LkXP%1pkP@Ha%c|DO!h12+!Fx(M26=zhk0{5N3Ukza;Bgi#Sf|Wpg0k22+1Lpx zdCRB@@O_XKAJjk?KMrj`x7T5O7$)$8uT7CG-GLJG( z@_TI2;HHR3QdANrKD$JE#fSIbMYx#pCuo&Gd9kdMDOnZbg`apfs`eKQzovcix5RiC zE%l6 zEc1X*!Hjkg*-ho60zj*|uZX`FdS_&tiLr}4vgJ8wT7rf+ieaZwH6>Xah8e(nj?(W2 zK+|8wE6UoM#j*EL#a)WW(8mM3_*eJFB;24&1s?l0Gt`wXt?pnlFA~3kM)A@coYhBE z)nCPCa=4$8@=H3Wc2jPsrRDW$BjSfn|BjLFEp_I>JL91_D9A;m?a@UnL(PZiBCQ9) zRoy27^AbKPAi9RZ{h3G8bmP@QCgpvjGH`zwkjrbUgWdP5mAXq{>KHwJHwrqH(=$ev z>zKPgUT{BfhMoeAE9-#%H`d&a|3i-pDHGWT^Xq)BCL5@cEyJxrXBEBsn5dhz#Riw$ z^$xv2nz>YU6s{BB$xb;M%F^^)12Q=0){RbFGN#{}c4=L3b26hLdO9_}ldapx{W}T~ z87as8dH*wn8r=W4%0u6Ybv}U@6Kafkx{t7g{<;QqBF%m6p!@;ey5&9bk)Q7-Q) zsq*}4GXi{$6KRgMc_SHr;YDA>eKGtKAg0cLJIA@>}LxC3iEj1vHh#oDVjP z1fkgBFLm(Rk!f%jt9-?`%VhZx$-OqL(;CV<#rOB0ej>)^UhB?*rY#P6{@yG+X*% z(VQr#7FfVV z5hU}pneP;&*!IumRit{T`GQ|E6pSXUP+_jj5Kn$==W;U;WXEMb_!mS>uyIrIR^*zd z(DcS~i~-4n8sYH^8-Qa!7|Hny$!Xwe>{R1$jwSx-PJdQ;I8 z7<0>R+Z8ksTssLy20gA3M)*$ve3yua;E;a)-}o^*y1xx!XCG<*k+zBdb3$L(d^~KJ zAjZ5kXs`2(=)U@VN#{;_zeEITf_axNwP51)npZhd4V)agM#C!F`M*HCSO`_62UwOo zJf2e8&)7%Qnq*Yf^hF1Q>!bk2PgwpkQiBS-?*+ScbE^~!1sN@I3s_lFNVKRP-i6e} zMwu!1t~xS-Yywc%zX2q)9LKF82U{#q97NL*eHCEnj3`YYr4Bnz$%xOTlx}_l{%;sV zKsU*!)s@Lcu8!0j1re~&KVmWQxBq6EVKjI%Q=8VM&i2jl(E=qa5W^wcD|pWUVA`vz zMTa{c-neSJL(_c=N6{b_=s?c;1JEyPw-PQ1v9p{y?>|(6HRbu=XHOJTNGdaSroU*%4+-CrSe9i zAl~a|^Hl}Q=40N;^s>FC$hc42Oddu4-L=vUXp@?w@iGc`Gt}6 zj&faIrRz^Hwpw$2KFi1f5v;15dXfS|eMv(a8G(eYAnf}76pgnyOc9rXN4(a&``AOv z0!Q3Ydv-wX+I!%SVZc*)5o|3fGm|p2Ek(|@Ou$;)R&`)jPWGTp$p8QV0000As3fI1 zLrQDTzsGF`U730I2(zaNvQiO>z2W&xmV+H5fN@66f;YAOSJ#Cy)8YT)Uc>)EWyE5o zCrd4#0m17;js<(X!qBh)3*Y*nc(+93BrFink?q{5OM?4I8Kw>0Qp7fmSyZs{%0m^P zb@EUf;9e+n2ImJEZegVRa}0*xeJLIGq46uNk^4m{vI@su1-QGO;sk%yKZ_8;%{iX{ mY8Uy=Th_k}i+uj(65J8tMUV#gnb-gT00000000000001w6+5v2 literal 0 HcmV?d00001 diff --git a/docs/static/screenshots/Month/90-days-light-800w.webp b/docs/static/screenshots/Month/90-days-light-800w.webp new file mode 100644 index 0000000000000000000000000000000000000000..613f315db2d5bdc6a919cf932d6221e776c40bae GIT binary patch literal 17160 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 literal 0 HcmV?d00001 diff --git a/docs/static/screenshots/Month/basic-dark-240w.webp b/docs/static/screenshots/Month/basic-dark-240w.webp new file mode 100644 index 0000000000000000000000000000000000000000..924a938cc2266b5ea7270b05b53b7f7bff8ea5f7 GIT binary patch literal 28314 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