Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ body:
attributes:
label: How is the card installed?
options:
- HACS
- Home Assistant Marketplace (or HACS)
- Manually, as a Lovelace resource
- Not sure
validations:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-announcement.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ jobs:
`### Upgrading`,
``,
isPrerelease
? `This is a pre-release — it may contain bugs. To test it early, open Chartdeck in HACS, choose ⋮ → **Redownload**, turn on **Show beta versions** and pick this version — or install it manually.`
: `Update via **HACS**, or download \`chartdeck-card.js\` from the [latest release](${url}) and copy it to \`/config/www/\`.`,
? `This is a pre-release — it may contain bugs. To test it early, go to **Settings → Devices & services → Marketplace**, open Chartdeck, enable its **Pre-release** entity and turn the switch on (on HACS, before Home Assistant 2026.11: ⋮ → **Redownload**, **Show beta versions**) — or install it manually.`
: `Update from the **Marketplace** (HACS before Home Assistant 2026.11), or download \`chartdeck-card.js\` from the [latest release](${url}) and copy it to \`/config/www/\`.`,
``,
`After updating, **hard-refresh your browser** (Ctrl/Cmd+Shift+R) so the new card module loads instead of a cached one.`,
``,
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ npm start # rebuild on change, served on port 5000 for a local Home Assi
```

`npm run build` runs the linter first and stops if it fails, so a green build means lint and
bundle both passed. `dist/chartdeck-card.js` is committed on purpose — HACS installs it
straight from the repository — so a change to `src/` needs the bundle rebuilt in the same
commit. CI fails if it was not.
bundle both passed. `dist/chartdeck-card.js` is committed on purpose — the Marketplace
(HACS) installs it straight from the repository — so a change to `src/` needs the bundle
rebuilt in the same commit. CI fails if it was not.

## Commit messages matter

Expand Down
15 changes: 9 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

<p align="center">
<a href="https://github.com/tempus2016/chartdeck/releases"><img src="https://img.shields.io/github/v/release/tempus2016/chartdeck?include_prereleases" alt="Latest Release"></a>
<a href="https://github.com/hacs/integration"><img src="https://img.shields.io/badge/HACS-Default-41BDF5.svg" alt="HACS Default"></a>
<a href="https://my.home-assistant.io/redirect/marketplace_repository/?owner=tempus2016&repository=chartdeck"><img src="https://img.shields.io/badge/Marketplace-Default-41BDF5.svg" alt="Home Assistant Marketplace"></a>
<a href="https://github.com/tempus2016/chartdeck/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="License"></a>
<img src="https://img.shields.io/badge/Home%20Assistant-2025.1+-blue" alt="HA Version">
<a href="https://github.com/tempus2016/chartdeck/releases"><img src="https://img.shields.io/github/downloads/tempus2016/chartdeck/total" alt="Downloads"></a>
Expand All @@ -17,7 +17,7 @@

<p align="center">
<a href="https://github.com/tempus2016/chartdeck/actions/workflows/build.yml"><img src="https://github.com/tempus2016/chartdeck/actions/workflows/build.yml/badge.svg" alt="CI"></a>
<a href="https://github.com/tempus2016/chartdeck/actions/workflows/hacs.yml"><img src="https://github.com/tempus2016/chartdeck/actions/workflows/hacs.yml/badge.svg" alt="HACS Validation"></a>
<a href="https://github.com/tempus2016/chartdeck/actions/workflows/hacs.yml"><img src="https://github.com/tempus2016/chartdeck/actions/workflows/hacs.yml/badge.svg" alt="Marketplace validation"></a>
<a href="https://github.com/tempus2016/chartdeck/actions/workflows/codeql.yml"><img src="https://github.com/tempus2016/chartdeck/actions/workflows/codeql.yml/badge.svg" alt="CodeQL"></a>
<a href="https://github.com/tempus2016/chartdeck/commits/main"><img src="https://img.shields.io/github/commit-activity/y/tempus2016/chartdeck" alt="Commit activity"></a>
</p>
Expand Down Expand Up @@ -89,12 +89,15 @@ This page is the summary. What changed in each version is on the [releases page]

## Installation

Chartdeck is in the HACS default store:
Chartdeck is in the Home Assistant Marketplace:

1. Open HACS and search for *Chartdeck*.
2. Download it, then reload your browser.
1. Go to **Settings → Marketplace** and search for *Chartdeck*.
2. Choose **Install**, then reload your browser.

[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=tempus2016&repository=chartdeck&category=lovelace)
[![Open your Home Assistant instance and show Chartdeck in the Marketplace.](https://my.home-assistant.io/badges/marketplace_repository.svg)](https://my.home-assistant.io/redirect/marketplace_repository/?owner=tempus2016&repository=chartdeck)

On Home Assistant older than 2026.11, the Marketplace is still HACS: open HACS, search for
*Chartdeck* and choose **Download**.

To install by hand, save [chartdeck-card.js][latest-release] to `<config>/www/` and add
`/local/chartdeck-card.js` as a dashboard resource of type `module`. The
Expand Down
5 changes: 5 additions & 0 deletions test/box-plot.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,11 @@ describe('box maths', () => {

type Card = HTMLElement & { setConfig(c: CardConfig): void; hass?: HomeAssistant; updateComplete: Promise<boolean> };

// The fixture is relative to now and the tooltip test groups by day, so a real clock moves
// midnight through the readings: early or late in the day the first box holds the 40 spike as
// an outlier. Pin the clock to mid-afternoon local time; only Date is faked, timers stay real.
vi.useFakeTimers({ toFake: ['Date'] });
vi.setSystemTime(new Date(2026, 10, 7, 15, 0, 0));
const now = Date.now();
const H = 3_600_000;
const sec = (msAgo: number) => (now - msAgo) / 1000;
Expand Down
Loading