From 38cf95d55fb7b63aeffb8724907f7f0a8ee1a083 Mon Sep 17 00:00:00 2001 From: Rui Carmo Date: Sat, 13 Dec 2025 10:19:52 +0000 Subject: [PATCH] initial import --- .github/copilot-instructions.md | 22 + .github/workflows/pylint.yml | 33 + .gitignore | 15 + .vscode/settings.json | 7 + LICENSE | 23 + Makefile | 18 + OFL.txt | 93 + README.md | 97 + docs/playlist.png | Bin 0 -> 59719 bytes kata-compose.yaml | 25 + pytest.ini | 2 + requirements.txt | 13 + tests/test_plugins.py | 214 + tests/test_rotation.py | 444 ++ tests/test_weather.py | 44 + trmnl_server/__init__.py | 5 + trmnl_server/__main__.py | 6 + trmnl_server/config.py | 263 + trmnl_server/main.py | 341 + trmnl_server/models.py | 519 ++ trmnl_server/plugins/__init__.py | 3 + trmnl_server/plugins/base.py | 631 ++ trmnl_server/plugins/bing.py | 106 + trmnl_server/plugins/calibration.py | 241 + trmnl_server/plugins/charts.py | 80 + trmnl_server/plugins/hn.py | 147 + trmnl_server/plugins/random_image.py | 91 + trmnl_server/plugins/weather.py | 234 + trmnl_server/plugins/xkcd.py | 118 + trmnl_server/routes/__init__.py | 7 + trmnl_server/routes/api.py | 557 ++ trmnl_server/routes/images.py | 111 + trmnl_server/routes/pages.py | 18 + trmnl_server/services/__init__.py | 1 + trmnl_server/services/plugins.py | 297 + trmnl_server/services/state.py | 1200 ++++ trmnl_server/utils.py | 878 +++ web/css/styles.css | 255 + web/fonts/InterDisplay-Medium.ttf | Bin 0 -> 416668 bytes web/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes web/fonts/otf/SpaceGrotesk-Bold.otf | Bin 0 -> 72748 bytes web/fonts/otf/SpaceGrotesk-Light.otf | Bin 0 -> 72696 bytes web/fonts/otf/SpaceGrotesk-Medium.otf | Bin 0 -> 79400 bytes web/fonts/otf/SpaceGrotesk-Regular.otf | Bin 0 -> 79556 bytes web/fonts/ttf/SpaceGrotesk[wght].ttf | Bin 0 -> 136676 bytes web/fonts/ttf/static/SpaceGrotesk-Bold.ttf | Bin 0 -> 116056 bytes web/fonts/ttf/static/SpaceGrotesk-Light.ttf | Bin 0 -> 114720 bytes web/fonts/ttf/static/SpaceGrotesk-Medium.ttf | Bin 0 -> 116664 bytes web/fonts/ttf/static/SpaceGrotesk-Regular.ttf | Bin 0 -> 114428 bytes web/fonts/woff2/SpaceGrotesk[wght].woff2 | Bin 0 -> 49256 bytes .../woff2/static/SpaceGrotesk-Bold.woff2 | Bin 0 -> 41780 bytes .../woff2/static/SpaceGrotesk-Light.woff2 | Bin 0 -> 42088 bytes .../woff2/static/SpaceGrotesk-Medium.woff2 | Bin 0 -> 42796 bytes .../woff2/static/SpaceGrotesk-Regular.woff2 | Bin 0 -> 42708 bytes web/img/dummy.bmp | Bin 0 -> 48062 bytes web/index.html | 19 + web/js/app.js | 1681 +++++ web/js/vendor/chart.umd.js | 14 + .../vendor/chartjs-adapter-date-fns.bundle.js | 6322 +++++++++++++++++ .../chartjs-adapter-date-fns.bundle.min.js | 7 + web/js/vendor/chartjs-adapter-date-fns.esm.js | 109 + web/js/vendor/chartjs-adapter-date-fns.js | 114 + web/js/vendor/chartjs-adapter-date-fns.min.js | 7 + web/js/vendor/chartjs-adapter-date-fns.umd.js | 1 + web/js/vendor/htm.umd.js | 1 + web/js/vendor/preact-hooks.umd.js | 2 + web/js/vendor/preact.umd.js | 2 + 67 files changed, 15438 insertions(+) create mode 100644 .github/copilot-instructions.md create mode 100644 .github/workflows/pylint.yml create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 OFL.txt create mode 100644 README.md create mode 100644 docs/playlist.png create mode 100644 kata-compose.yaml create mode 100644 pytest.ini create mode 100644 requirements.txt create mode 100644 tests/test_plugins.py create mode 100644 tests/test_rotation.py create mode 100644 tests/test_weather.py create mode 100644 trmnl_server/__init__.py create mode 100644 trmnl_server/__main__.py create mode 100644 trmnl_server/config.py create mode 100644 trmnl_server/main.py create mode 100644 trmnl_server/models.py create mode 100644 trmnl_server/plugins/__init__.py create mode 100644 trmnl_server/plugins/base.py create mode 100644 trmnl_server/plugins/bing.py create mode 100644 trmnl_server/plugins/calibration.py create mode 100644 trmnl_server/plugins/charts.py create mode 100644 trmnl_server/plugins/hn.py create mode 100644 trmnl_server/plugins/random_image.py create mode 100644 trmnl_server/plugins/weather.py create mode 100644 trmnl_server/plugins/xkcd.py create mode 100644 trmnl_server/routes/__init__.py create mode 100644 trmnl_server/routes/api.py create mode 100644 trmnl_server/routes/images.py create mode 100644 trmnl_server/routes/pages.py create mode 100644 trmnl_server/services/__init__.py create mode 100644 trmnl_server/services/plugins.py create mode 100644 trmnl_server/services/state.py create mode 100644 trmnl_server/utils.py create mode 100644 web/css/styles.css create mode 100644 web/fonts/InterDisplay-Medium.ttf create mode 100644 web/fonts/fontawesome-webfont.ttf create mode 100644 web/fonts/otf/SpaceGrotesk-Bold.otf create mode 100644 web/fonts/otf/SpaceGrotesk-Light.otf create mode 100644 web/fonts/otf/SpaceGrotesk-Medium.otf create mode 100644 web/fonts/otf/SpaceGrotesk-Regular.otf create mode 100644 web/fonts/ttf/SpaceGrotesk[wght].ttf create mode 100644 web/fonts/ttf/static/SpaceGrotesk-Bold.ttf create mode 100644 web/fonts/ttf/static/SpaceGrotesk-Light.ttf create mode 100644 web/fonts/ttf/static/SpaceGrotesk-Medium.ttf create mode 100644 web/fonts/ttf/static/SpaceGrotesk-Regular.ttf create mode 100644 web/fonts/woff2/SpaceGrotesk[wght].woff2 create mode 100644 web/fonts/woff2/static/SpaceGrotesk-Bold.woff2 create mode 100644 web/fonts/woff2/static/SpaceGrotesk-Light.woff2 create mode 100644 web/fonts/woff2/static/SpaceGrotesk-Medium.woff2 create mode 100644 web/fonts/woff2/static/SpaceGrotesk-Regular.woff2 create mode 100644 web/img/dummy.bmp create mode 100644 web/index.html create mode 100644 web/js/app.js create mode 100644 web/js/vendor/chart.umd.js create mode 100644 web/js/vendor/chartjs-adapter-date-fns.bundle.js create mode 100644 web/js/vendor/chartjs-adapter-date-fns.bundle.min.js create mode 100644 web/js/vendor/chartjs-adapter-date-fns.esm.js create mode 100644 web/js/vendor/chartjs-adapter-date-fns.js create mode 100644 web/js/vendor/chartjs-adapter-date-fns.min.js create mode 100644 web/js/vendor/chartjs-adapter-date-fns.umd.js create mode 100644 web/js/vendor/htm.umd.js create mode 100644 web/js/vendor/preact-hooks.umd.js create mode 100644 web/js/vendor/preact.umd.js diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..ed04b3e --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,22 @@ +# TRMNL Server + +This project is an e-ink device server that allows a client to connect to it and generates images and data for display on TRMNL e-ink devices. + +## Coding Style Guidelines + +When contributing to this project, please adhere to the following coding style guidelines: + +* DO NOT CREATE NEW CODE FILES unless explicitly told to. +* SPACES, not TABS, for indentation. Use 4 spaces per indentation level. +* Code in a functional style, with concise functions that do one thing only. +* NEVER duplicate code. Always re-use existing code or create new helper functions. If they are reusable, add them to `utils.py` or `models.py` as appropriate. +* When importing, prefer explicit imports (`from sys import stderr`) rather than just importing the module. A critical example is doing `from os.path import join, dirname, abspath` instead of `import os` and then using `os.path.join()`, etc. Never mind how many imports this creates; explicit imports are preferred for clarity. +* Inside a package, prefer package-relative imports (`from .utils import helper_function`) rather than absolute imports (`from trmnl_server.utils import helper_function`). +* When creating new functions, include type hints for all parameters and return values. +* Do not create one-liner wrappers around existing/internal module functions unless absolutely necessary. Use the public ones instead. +* When considering creating utility functions, try not to create one or two-liners. Inline the logic instead if they are that simple. +* Add utility functions to `utils.py` and constants to `config.py`, making sure to import them where needed and that any major configuration parameters are handled in a consistent way. +* NEVER add import statements inside functions or methods. Add any and all imports at the top of the file. +* Only perform database operations in `models.py`. Create or re-use new helpers there as needed. +* Before writing new helpers or adding inline logic for things that might be reusable, check if there are existing ones that can be re-used or adapted in `utils.py` or `models.py`. + diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml new file mode 100644 index 0000000..00bc32f --- /dev/null +++ b/.github/workflows/pylint.yml @@ -0,0 +1,33 @@ +name: Pylint + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10"] + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pylint astroid + pip install -r requirements.txt + - name: Analysing the code with pylint + run: | + pylint_output=$(pylint $(git ls-files '*.py') --output-format=parseable | tee pylint.log) + echo "$pylint_output" + SCORE=$(echo "$pylint_output" | awk -F ' ' '/Your code has been rated at/ {print $7}' | cut -d'/' -f1) + if (( $(echo "$SCORE >= 9.0" | bc -l) )); then + echo "Pylint score ($SCORE) is acceptable." + exit 0 + else + echo "Pylint score ($SCORE) is too low." + exit 1 + fi diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..28d9750 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +.DS_Store +trmnl_log.json +db/clientData.txt +logs/server.log +ssl/cert.pem +config.yaml +ssl/key.pem +db/clientLog.txt +trmnl.db +venv/* +__pycache__/* +web/*.bmp +web/*.png +*.pyc +var/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9b38853 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "python.testing.pytestArgs": [ + "tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..027c6c6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,23 @@ +MIT License + +Based on previous work by the original project owner: https://github.com/ohAnd/trmnlServer + +Copyright (c) 2025 Rui Carmo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f5a5754 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +PYTHON ?= python3 +MODULE ?= trmnl_server +ARGS ?= +export SERVER_PORT ?= 4567 + +.PHONY: serve test clean +serve: + $(PYTHON) -m $(MODULE) $(ARGS) + +test: + $(PYTHON) -m pytest -q tests + +clean: + find . -name '__pycache__' -type d -prune -exec rm -rf {} + + find . -name '*.pyc' -delete + rm -rf .pytest_cache .coverage + rm -rf var/generated + rm -rf var/db diff --git a/OFL.txt b/OFL.txt new file mode 100644 index 0000000..cb512b9 --- /dev/null +++ b/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Space Grotesk Project Authors (https://github.com/floriankarsten/space-grotesk) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..1db4b10 --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +# TRMNL Local Server + +This is a self-hosted FastAPI backend that emulates the TRMNL cloud so e-paper devices can fetch fresh images and metadata from your local network. + +![Obligatory screenshot](docs/playlist.png) + +It is loosely based on a Flask implementation by [@ohAnd](https://github.com/ohAnd/trmnlServer), rewritten (nearly) from scratch to use FastAPI, async I/O, and a plugin-driven architecture for rendering various charts and images, prioritizing greyscale output suitable for later firmware versions but allowing you to force 1-bit BMP for legacy devices on a per-item basis + +The server maintains device/playlists in SQLite, renders plugin-driven charts/photos into BMP/PNG assets, and exposes `/api/display` plus legacy-compatible endpoints expected by the firmware. + +## Non-Goals + +- **Full feature parity with the official TRMNL cloud** – this is a lightweight server for personal use, not a 1:1 clone of the official backend. +- **Advanced security features** – while SSL is supported (but disabled by default to save battery), user authentication, multi-user support, and other advanced features are out of scope. +- **Extensive plugin library** – only a few example plugins are provided; users are encouraged to write their own. +- **Web dashboard for management** – a minimal static UI is included for previewing plugin outputs, but no full-featured admin panel. +- **Browser-based rendering** – all image generation is done server-side using Python libraries to minimize system requirements. + +## Highlights + +- **FastAPI core** – `trmnl_server/main.py` hosts the HTTP API, static assets under `/web`, and middleware-level request logging. +- **Plugin rendering pipeline** – classes in `plugins/` generate images (BMP for the panel, grayscale PNG previews) using Pillow, httpx, pandas, etc. +- **Device + playlist persistence** – SQLAlchemy models in `models.py` keep per-device rotation state, playlists, logs, and battery samples in `var/db/trmnl.db`. +- **Autodiscovered plugin scheduler** – background workers keep assets fresh; see **Plugins & registry** for discovery rules and toggles. +- **Firmware compatibility** – `/api/display` always returns a single `image_url` plus a changing `filename` token so ESP32-based firmware knows when to refresh. +- **Batteries-included tooling** – `Makefile` wraps `make serve` (launch FastAPI via `python -m trmnl_server`) and `make test` (pytest). Plugins can be previewed via helper scripts under the repo root. +- **Color grading + dithering** – "color" grading and multiple dithering algorithms are available to improve image quality on e-ink panels. + +## Deployment + +I am deploying this with `kata`, a Docker-based service manager I wrote, but any method that can run a FastAPI app will work. + +## Running Locally + +```bash +git clone https://github.com/rcarmo/trmnlServer.git +cd trmnlServer +python3 -m venv .venv && source .venv/bin/activate +pip install -r requirements.txt +make serve +``` + +The server logs which port it binds to (default `SERVER_PORT=4567`). Point your TRMNL device at `http://:`. + +Useful commands: + +- `make serve` – start FastAPI using the current working directory as the runtime root. +- `SERVER_PORT=8081 make serve` – override port for quick tests. +- `make serve ARGS=/path/to/workdir` – run the server against a different working directory (`var/` contents plus SSL/generated assets) without touching your source tree. +- `python -m trmnl_server --list-plugins` – print the plugin registry (names + defaults) and exit. +- `python -m trmnl_server --run-plugin WeatherPlugin --plugin-output /tmp --plugin-arg image_root=/path` – run a single plugin once for debugging with optional keyword arguments. +- `make test` – run `pytest` (`tests/test_rotation.py`, `tests/test_plugins.py`, `tests/test_weather.py`). + +## Configuration + +All settings come from environment variables: + +- `SERVER_PORT`, `ENABLE_SSL` – networking defaults (4567/False out of the box, set `ENABLE_SSL=true` when you need TLS). +- `IMAGE_PATH`, `REFRESH_TIME`, `DITHERING_MODE` – rendering and dithering behaviour. +- `PHOTO_GRADING_ENABLED` – enable/disable photographic grading for image-heavy plugins (default: true). +- `EINK_TONE_POINTS`, `EINK_TONE_GAMMA` – optional grayscale response compensation points/gamma for panel-space quantization. +- `BATTERY_MAX_VOLTAGE`, `BATTERY_MIN_VOLTAGE`, `TIME_ZONE` – telemetry scaling. +- `SETUP_API_KEY`, `SETUP_FRIENDLY_ID`, `SETUP_MESSAGE` – `/api/setup` payload fields. +- `ASSETS_ROOT`, `STATIC_ROOT`, `GENERATED_ROOT` – relative directories (inside the working dir) for dashboard assets and generated BMP/PNG output (defaults: `web`, `web`, and `var/generated`). +- `CALIBRATION_PLUGIN_ENABLED` – set to `false` to remove calibration plugins from the registry and skip generating calibration assets. + +Whenever a setting is changed via the `/settings/*` endpoints, the new value is written to SQLite (table `config_entries`). On startup, `config.py` loads environment variables first (highest precedence) and then applies any persisted entries that are not overridden by the environment, so API-driven tweaks survive restarts without fighting `SERVER_PORT=...` overrides in your shell. + +Runtime artefacts now consolidate under `var/` inside your chosen working directory: + +- `var/db/trmnl.db` – SQLite database plus future state. +- `var/logs/` – reserved for future log sinks. +- `var/generated/` – plugin BMP/PNG output served via `/generated/*`. +- `var/ssl/` – self-signed certs generated automatically if SSL is enabled. + +FastAPI creates these directories during startup if they are missing, and `.gitignore` keeps `var/` out of version control. + +## Plugins & registry + +- Plugins are auto-discovered from `trmnl_server/plugins/` by the scheduler; any class inheriting `PluginBase` with `AUTO_REGISTER=True` is registered. +- Set `AUTO_REGISTER = False` on a plugin class to opt it out of the registry. +- Set `CALIBRATION_PLUGIN_ENABLED=false` (ENV or `/settings`) to remove all calibration plugins from the registry and skip generating calibration assets. +- `python -m trmnl_server --list-plugins` shows the active registry; `--run-plugin ` respects these toggles. + +## API + Static Surface + +| Path | Description | +| --------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `GET /api/display` | Main firmware endpoint: returns `image_url`, `filename`, refresh hints, and playlist metadata. | +| `POST /api/log` | Device log ingestion recorded via SQLAlchemy. | +| `POST /api/battery` | Battery + RSSI samples persisted to `BatteryStatus`. | +| `GET /image/screen.bmp` / `screen1.bmp` | Alternating BMP endpoints to break caches. | +| `GET /image/grayscale.png` / `grayscale1.png` | Optional grayscale preview for firmware that supports it. | +| `GET /web/*` | Static dashboard assets (HTML/JS/CSS/fonts and fallback imagery). | +| `GET /generated/*` | Runtime plugin output (BMP/PNG) served as-is. | + +The UI under `web/` shows plugin output previews and rotation metadata; templates in `templates/` are used by specific plugins (e.g., weather renderer). diff --git a/docs/playlist.png b/docs/playlist.png new file mode 100644 index 0000000000000000000000000000000000000000..212ef9deaec08ccba915d7cb3c6de510e4870e37 GIT binary patch literal 59719 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.3.0 +fastapi>=0.109.0 +uvicorn>=0.27.0 +python-multipart>=0.0.9 +psutil>=5.9.4 +PyYAML>=6.0 +httpx>=0.27.0 +sqlalchemy>=2.0.0 +d3blocks>=1.0.0 +html2image>=2.0.0 +pandas>=2.0.0 +feedparser>=6.0.10 +pytest>=8.2.0 \ No newline at end of file diff --git a/tests/test_plugins.py b/tests/test_plugins.py new file mode 100644 index 0000000..ce42771 --- /dev/null +++ b/tests/test_plugins.py @@ -0,0 +1,214 @@ +from io import BytesIO +from pathlib import Path +from typing import Any, Dict, List, Tuple +from unittest.mock import AsyncMock, patch + +import pytest +from PIL import Image + +from trmnl_server.plugins.base import PluginOutput +from trmnl_server.plugins.bing import BingWallpaperPlugin +from trmnl_server.plugins.hn import HNPlugin +from trmnl_server.plugins.random_image import RandomImagePlugin +try: + from trmnl_server.plugins.charts import PageviewsPlugin, VisitorsPlugin # type: ignore[attr-defined] +except ModuleNotFoundError: + PageviewsPlugin = None + VisitorsPlugin = None +from trmnl_server.plugins.xkcd import XKCDPlugin +from trmnl_server.plugins.weather import WeatherPlugin +from trmnl_server.services import plugins as plugin_service +from trmnl_server import config + +pytestmark = pytest.mark.asyncio + +def _make_image_bytes(size: Tuple[int, int] = (32, 32), color: Tuple[int, int, int] = (255, 0, 0)) -> bytes: + img = Image.new('RGB', size, color=color) + buffer = BytesIO() + img.save(buffer, format='PNG') + return buffer.getvalue() + + +def _make_image(size: Tuple[int, int] = (32, 32), color: Tuple[int, int, int] = (0, 255, 0)) -> Image.Image: + return Image.open(BytesIO(_make_image_bytes(size=size, color=color))).convert('RGB') + + +def _plugin_available(plugin_name: str) -> bool: + available = {name.lower() for name in plugin_service.list_available_plugins()} + return plugin_name.lower() in available + + +def _assert_output_assets(output: PluginOutput) -> None: + mono = Path(output.monochrome_path) + gray = Path(output.grayscale_path) + assert mono.is_file() and mono.stat().st_size > 0 + assert gray.is_file() and gray.stat().st_size > 0 + + +async def test_bing_plugin_generates_assets(tmp_path: Path) -> None: + if not _plugin_available(BingWallpaperPlugin.__name__): + pytest.skip('BingWallpaperPlugin not available') + plugin_cls = plugin_service.get_plugin_schedule(BingWallpaperPlugin.__name__).plugin_cls + plugin = plugin_cls() + fake_metadata = {"url": "http://example.com/test_wallpaper.png"} + + with patch.object(plugin, '_fetch_metadata', new=AsyncMock(return_value=fake_metadata)), \ + patch.object(plugin, '_download_image', new=AsyncMock(return_value=_make_image_bytes())): + output = await plugin.run(output_dir=str(tmp_path)) + + assert isinstance(output, PluginOutput) + _assert_output_assets(output) + + +async def test_xkcd_plugin_generates_assets(tmp_path: Path) -> None: + if not _plugin_available(XKCDPlugin.__name__): + pytest.skip('XKCDPlugin not available') + plugin_cls = plugin_service.get_plugin_schedule(XKCDPlugin.__name__).plugin_cls + plugin = plugin_cls() + fake_metadata = { + "img": "http://example.com/comic.png", + "safe_title": "Test XKCD", + "alt": "Alt text", + "transcript": "Transcript text" + } + + with patch.object(plugin, '_fetch_metadata', new=AsyncMock(return_value=fake_metadata)), \ + patch.object(plugin, '_download_image', new=AsyncMock(return_value=_make_image_bytes())), \ + patch.object(plugin, '_load_image', return_value=_make_image()): + output = await plugin.run(output_dir=str(tmp_path)) + + assert isinstance(output, PluginOutput) + _assert_output_assets(output) + + +async def test_hn_plugin_generates_assets(tmp_path: Path) -> None: + if not _plugin_available(HNPlugin.__name__): + pytest.skip('HNPlugin not available') + plugin_cls = plugin_service.get_plugin_schedule(HNPlugin.__name__).plugin_cls + plugin = plugin_cls() + fake_entries: List[Dict[str, Any]] = [ + {"title": "Test headline", "points": 123, "comments": 45}, + {"title": "Another headline", "points": 456, "comments": 78} + ] + + with patch.object(plugin, '_fetch_entries', new=AsyncMock(return_value=fake_entries)): + output = await plugin.run(output_dir=str(tmp_path)) + + assert isinstance(output, PluginOutput) + _assert_output_assets(output) + + +def _fake_stats_data() -> List[Tuple[str, int]]: + return [("00", 0), ("01", 10), ("02", 20), ("03", 5)] + + +async def test_pageviews_plugin_generates_assets(tmp_path: Path) -> None: + if PageviewsPlugin is None or not _plugin_available('PageviewsPlugin'): + pytest.skip('PageviewsPlugin not available') + plugin_cls = plugin_service.get_plugin_schedule('PageviewsPlugin').plugin_cls + plugin = plugin_cls() + fake_data = _fake_stats_data() + + with patch.object(plugin, '_fetch_series', new=AsyncMock(return_value=fake_data)): + output = await plugin.run(output_dir=str(tmp_path)) + + assert isinstance(output, PluginOutput) + _assert_output_assets(output) + + +async def test_visitors_plugin_generates_assets(tmp_path: Path) -> None: + if VisitorsPlugin is None or not _plugin_available('VisitorsPlugin'): + pytest.skip('VisitorsPlugin not available') + plugin_cls = plugin_service.get_plugin_schedule('VisitorsPlugin').plugin_cls + plugin = plugin_cls() + fake_data = _fake_stats_data() + + with patch.object(plugin, '_fetch_series', new=AsyncMock(return_value=fake_data)): + output = await plugin.run(output_dir=str(tmp_path)) + + assert isinstance(output, PluginOutput) + _assert_output_assets(output) + + +async def test_random_image_plugin_generates_assets(tmp_path: Path) -> None: + image_root = tmp_path / "images" + image_root.mkdir() + img_path = image_root / "sample.png" + img = Image.new('RGB', (64, 64), color=(0, 0, 255)) + img.save(img_path) + + if not _plugin_available(RandomImagePlugin.__name__): + pytest.skip('RandomImagePlugin not available') + plugin_cls = plugin_service.get_plugin_schedule(RandomImagePlugin.__name__).plugin_cls + plugin = plugin_cls() + output = await plugin.run(output_dir=str(tmp_path), image_root=str(image_root)) + + assert isinstance(output, PluginOutput) + _assert_output_assets(output) + + +async def test_photo_grading_toggle_changes_prepare_image() -> None: + if not _plugin_available(BingWallpaperPlugin.__name__): + pytest.skip('BingWallpaperPlugin not available') + plugin_cls = plugin_service.get_plugin_schedule(BingWallpaperPlugin.__name__).plugin_cls + plugin = plugin_cls() + + gradient = Image.linear_gradient('L').resize((64, 64)) + rgb = gradient.convert('RGB') + + original = config.PHOTO_GRADING_ENABLED + try: + config.PHOTO_GRADING_ENABLED = False + disabled = plugin.prepare_image(rgb) + assert disabled.mode == 'L' + assert disabled.tobytes() == rgb.convert('L').tobytes() + + config.PHOTO_GRADING_ENABLED = True + enabled = plugin.prepare_image(rgb) + assert enabled.mode == 'L' + assert enabled.tobytes() != rgb.convert('L').tobytes() + finally: + config.PHOTO_GRADING_ENABLED = original + + +async def test_plugin_runner_passes_extra_kwargs(monkeypatch, tmp_path: Path) -> None: + bmp = tmp_path / 'weather.bmp' + png = tmp_path / 'weather.png' + bmp.write_bytes(b'0') + png.write_bytes(b'0') + + async def fake_run(self, **kwargs): # type: ignore[override] + assert kwargs['output_dir'] == str(tmp_path) + assert kwargs['extra'] == 'value' + return PluginOutput(monochrome_path=str(bmp), grayscale_path=str(png)) + + if not _plugin_available(WeatherPlugin.__name__): + pytest.skip('WeatherPlugin not available') + + monkeypatch.setattr(WeatherPlugin, 'run', fake_run) + + result = await plugin_service.run_single_plugin_by_name( + 'WeatherPlugin', + output_dir=str(tmp_path), + plugin_kwargs={'extra': 'value'} + ) + + assert result.monochrome_path == str(bmp) + assert result.grayscale_path == str(png) + + +async def test_plugin_runner_errors_on_unknown_plugin(tmp_path: Path) -> None: + with pytest.raises(ValueError): + await plugin_service.run_single_plugin_by_name('NotAPlugin', output_dir=str(tmp_path)) + + +async def test_calibration_plugins_can_be_disabled(monkeypatch) -> None: + original = config.CALIBRATION_PLUGIN_ENABLED + try: + monkeypatch.setattr(config, 'CALIBRATION_PLUGIN_ENABLED', False) + names = plugin_service.list_available_plugins() + assert all('calibration' not in name.lower() for name in names) + with pytest.raises(ValueError): + plugin_service.get_plugin_schedule('CalibrationPlugin') + finally: + monkeypatch.setattr(config, 'CALIBRATION_PLUGIN_ENABLED', original) diff --git a/tests/test_rotation.py b/tests/test_rotation.py new file mode 100644 index 0000000..8216056 --- /dev/null +++ b/tests/test_rotation.py @@ -0,0 +1,444 @@ +from typing import Dict, List + +from fastapi.testclient import TestClient + +from trmnl_server import main, models +from trmnl_server.services import state +from trmnl_server import utils +from io import BytesIO +from urllib.parse import urlparse + + +def _prime_rotation_master() -> Dict: + master = state.global_state['rotation_master'] + master.clear() + master.update({ + 'bmp_entries': [b'A', b'B'], + 'png_entries': [b'A', b'B'], + 'hashes': ['hashA', 'hashB'], + 'meta': [ + { + 'id': 'hashA', + 'hash': 'hashA', + 'plugin': 'TestPlugin', + 'label': 'Entry A', + 'url_png': '/web/a.png', + 'url_bmp': '/web/a.bmp' + }, + { + 'id': 'hashB', + 'hash': 'hashB', + 'plugin': 'TestPlugin', + 'label': 'Entry B', + 'url_png': '/web/b.png', + 'url_bmp': '/web/b.bmp' + } + ], + 'selected_ids': [], + 'version': 0 + }) + return master + + +def _prime_rotation_with_dummy_frames() -> Dict: + """Populate rotation master with a real BMP and PNG so preview conversion succeeds.""" + master = state.global_state['rotation_master'] + master.clear() + dummy_path = utils.asset_path('img', 'dummy.bmp') + with open(dummy_path, 'rb') as handle: + bmp_bytes = handle.read() + png_bytes = utils.convert_bmp_bytes_to_png(BytesIO(bmp_bytes)).getvalue() + master.update({ + 'bmp_entries': [bmp_bytes], + 'png_entries': [png_bytes], + 'hashes': ['hashA'], + 'meta': [ + { + 'id': 'hashA', + 'hash': 'hashA', + 'plugin': 'TestPlugin', + 'label': 'Entry A', + 'url_png': '/web/a.png', + 'url_bmp': '/web/a.bmp' + } + ], + 'selected_ids': ['hashA'], + 'version': 0 + }) + return master + + +def _prime_rotation_with_two_frames() -> Dict: + """Populate rotation with two distinct frames so we can verify preview updates.""" + master = state.global_state['rotation_master'] + master.clear() + dummy_path = utils.asset_path('img', 'dummy.bmp') + with open(dummy_path, 'rb') as handle: + bmp_bytes1 = handle.read() + # Create a second BMP by toggling one pixel via PIL to ensure valid encoding + img = utils.load_image(str(dummy_path)) + img = utils.ensure_image_mode(img, '1') + img_copy = img.copy() + img_copy.putpixel((0, 0), 0 if img_copy.getpixel((0, 0)) == 255 else 255) + bmp_buffer = BytesIO() + img_copy.save(bmp_buffer, format='BMP') + bmp_bytes2 = bmp_buffer.getvalue() + png_bytes1 = utils.convert_bmp_bytes_to_png(BytesIO(bmp_bytes1)).getvalue() + png_bytes2 = utils.convert_bmp_bytes_to_png(BytesIO(bmp_bytes2)).getvalue() + master.update({ + 'bmp_entries': [bytes(bmp_bytes1), bytes(bmp_bytes2)], + 'png_entries': [png_bytes1, png_bytes2], + 'hashes': ['hashA', 'hashB'], + 'meta': [ + { + 'id': 'hashA', + 'hash': 'hashA', + 'plugin': 'TestPlugin', + 'label': 'Entry A', + 'url_png': '/web/a.png', + 'url_bmp': '/web/a.bmp' + }, + { + 'id': 'hashB', + 'hash': 'hashB', + 'plugin': 'TestPlugin', + 'label': 'Entry B', + 'url_png': '/web/b.png', + 'url_bmp': '/web/b.bmp' + } + ], + 'selected_ids': ['hashA', 'hashB'], + 'version': 0 + }) + return master + + +def _reset_device_context(*device_ids: str) -> None: + for device_id in device_ids: + for key in ('devices', 'device_playlists', 'client_metrics', 'device_profiles'): + state.global_state.setdefault(key, {}).pop(device_id, None) + models.delete_device_state(device_id) + models.delete_rotation_playlist(device_id) + models.delete_device_playlist_binding(device_id) + + +def test_save_playlist_updates_rotation_and_order(): + client = TestClient(main.app) + master = _prime_rotation_master() + device_id = 'test-device' + _reset_device_context(device_id) + + try: + # Initial GET + resp = client.get('/rotation') + assert resp.status_code == 200 + data = resp.json() + assert data['entries'][0]['id'] == 'hashA' + assert data['entries'][1]['id'] == 'hashB' + + # Post new playlist selecting only hashB + resp = client.post('/rotation', json={'playlist': ['hashB']}) + assert resp.status_code == 200 + payload = resp.json() + assert payload['playlists']['default'] == ['hashB'] + assert master['selected_ids'] == ['hashB'] + # Version should bump + assert master['version'] == 1 + + # Trigger display request so device records the new playlist state + resp_display = client.get('/api/display', headers={'X-Device-Id': device_id}) + assert resp_display.status_code == 200 + device_state = state.get_device_state(device_id) + with state.STATE_LOCK: + assert device_state['playlist_indexes'] == [1] + assert device_state['playlist_ids'] == ['hashB'] + assert device_state['request_count'] == 1 + assert device_state['last_entry_hash'] == 'hashB' + finally: + _reset_device_context(device_id) + + +def test_device_specific_playlist_update(): + client = TestClient(main.app) + _prime_rotation_master() + device_id = 'device-specific' + _reset_device_context(device_id) + + try: + resp = client.post('/rotation', json={'playlist': ['hashA'], 'device_id': device_id}) + assert resp.status_code == 200 + payload = resp.json() + device_playlists: Dict[str, List[str]] = payload['playlists'].get('devices') or {} + assert device_playlists.get(device_id) == ['hashA'] + assert state.get_playlist_selection(device_id) == ['hashA'] + finally: + _reset_device_context(device_id) + + +def test_devices_endpoint_lists_known_devices(): + client = TestClient(main.app) + _prime_rotation_master() + device_id = 'metrics-device' + _reset_device_context(device_id) + try: + state.get_device_state(device_id) + state.update_client_metrics(device_id, refresh_rate=90, battery_voltage=3.8, rssi=-55) + + resp = client.get('/devices', params={'include_default': 'false'}) + assert resp.status_code == 200 + payload = resp.json() + devices = payload['devices'] + assert all(entry['device_id'] != state.DEFAULT_DEVICE_ID for entry in devices) + assert any(entry['device_id'] == device_id for entry in devices) + finally: + _reset_device_context(device_id) + + +def test_device_profile_update_endpoint(): + client = TestClient(main.app) + _prime_rotation_master() + device_id = 'kitchen-panel' + _reset_device_context(device_id) + try: + state.get_device_state(device_id) + + resp = client.patch( + f'/devices/{device_id}', + json={ + 'friendly_name': 'Kitchen Display', + 'refresh_interval': 180, + 'playlist': ['hashB'] + } + ) + assert resp.status_code == 200 + payload = resp.json() + assert payload['device_id'] == device_id + assert payload['friendly_name'] == 'Kitchen Display' + assert payload['refresh_interval'] == 180 + assert payload['playlist'] == ['hashB'] + + profile = state.ensure_device_profile(device_id) + assert profile['friendly_name'] == 'Kitchen Display' + + finally: + _reset_device_context(device_id) + +def test_image_token_resolves_device_without_headers(): + client = TestClient(main.app) + _prime_rotation_master() + device_id = 'token-device' + _reset_device_context(device_id) + + try: + # Bind a named playlist so we can verify the resolved frame index. + state.set_named_playlist('Charts', ['hashB']) + state.set_device_playlist_binding(device_id, 'Charts') + + resp_display = client.get('/api/display', headers={'X-Device-Id': device_id, 'fw-version': '1.6.9'}) + assert resp_display.status_code == 200 + image_url = resp_display.json().get('image_url') + assert isinstance(image_url, str) and 'token=' in image_url + token = image_url.split('token=')[-1] + assert token + + device_state = state.get_device_state(device_id) + with state.STATE_LOCK: + pending_idx = device_state.get('pending_entry_index') + assert pending_idx == 1 + + resp_image = client.get(f'/image/grayscale.png?token={token}') + assert resp_image.status_code == 200 + assert resp_image.content == state.get_rotation_png_bytes(pending_idx) + finally: + _reset_device_context(device_id) + + +def test_playlist_entry_forces_bmp_even_when_grayscale_supported(): + client = TestClient(main.app) + _prime_rotation_master() + device_id = 'force-bmp-device' + _reset_device_context(device_id) + + try: + resp = client.post('/rotation', json={'playlist': ['hashB@bmp'], 'device_id': device_id}) + assert resp.status_code == 200 + + resp_display = client.get('/api/display', headers={'X-Device-Id': device_id, 'fw-version': '1.6.9'}) + assert resp_display.status_code == 200 + image_url = resp_display.json().get('image_url') + assert isinstance(image_url, str) + assert '/image/screen' in image_url + + parsed = urlparse(image_url) + resp_image = client.get(f"{parsed.path}?{parsed.query}") + assert resp_image.status_code == 200 + assert resp_image.content == state.get_rotation_bmp_bytes(1) + finally: + _reset_device_context(device_id) + + +def test_playlist_entry_forces_png_when_grayscale_supported(): + client = TestClient(main.app) + _prime_rotation_master() + device_id = 'force-png-device' + _reset_device_context(device_id) + + try: + resp = client.post('/rotation', json={'playlist': ['hashB@png'], 'device_id': device_id}) + assert resp.status_code == 200 + + resp_display = client.get('/api/display', headers={'X-Device-Id': device_id, 'fw-version': '1.6.9'}) + assert resp_display.status_code == 200 + image_url = resp_display.json().get('image_url') + assert isinstance(image_url, str) + assert '/image/grayscale' in image_url + + parsed = urlparse(image_url) + resp_image = client.get(f"{parsed.path}?{parsed.query}") + assert resp_image.status_code == 200 + assert resp_image.content == state.get_rotation_png_bytes(1) + finally: + _reset_device_context(device_id) + + +def test_preview_endpoint_persists_last_frame(): + client = TestClient(main.app) + _prime_rotation_with_dummy_frames() + device_id = 'preview-device' + _reset_device_context(device_id) + + try: + # Trigger a display fetch which should capture the preview + resp = client.get('/api/display', headers={'X-Device-Id': device_id}) + assert resp.status_code == 200 + + device_state = state.get_device_state(device_id) + with state.STATE_LOCK: + preview_index = device_state.get('current_preview_entry_index') + preview_url = device_state.get('current_preview_url') + preview_token = device_state.get('current_preview_token') + + assert preview_index is not None, 'preview index should be cached after display fetch' + assert preview_url and preview_url.startswith(f'/preview/{device_id}') + assert preview_token, 'preview token should be set' + + # Preview endpoint should return the cached PNG + resp_preview = client.get(f'/preview/{device_id}') + assert resp_preview.status_code == 200 + assert resp_preview.headers.get('content-type') == 'image/png' + expected_bytes = state.get_rotation_png_bytes(preview_index) + assert resp_preview.content == expected_bytes + + # A different device with no preview should 404 + resp_missing = client.get('/preview/unknown-device') + assert resp_missing.status_code == 404 + finally: + _reset_device_context(device_id) + + +def test_named_playlist_binding_affects_rotation_and_deletion_unbinds(): + client = TestClient(main.app) + _prime_rotation_master() + device_id = 'bound-device' + _reset_device_context(device_id) + + try: + resp = client.post('/playlists', json={'name': 'morning', 'playlist': ['hashA']}) + assert resp.status_code == 200 + + resp = client.patch(f'/devices/{device_id}', json={'playlist_name': 'morning'}) + assert resp.status_code == 200 + + resp_display = client.get('/api/display', headers={'X-Device-Id': device_id}) + assert resp_display.status_code == 200 + device_state = state.get_device_state(device_id) + with state.STATE_LOCK: + assert device_state['playlist_ids'] == ['hashA'] + + resp_delete = client.delete('/playlists/morning') + assert resp_delete.status_code == 200 + + device_state = state.get_device_state(device_id) + with state.STATE_LOCK: + assert device_state.get('request_count') == 0 + + resp_display = client.get('/api/display', headers={'X-Device-Id': device_id}) + assert resp_display.status_code == 200 + device_state = state.get_device_state(device_id) + with state.STATE_LOCK: + assert device_state['playlist_ids'] == ['hashA', 'hashB'] + finally: + _reset_device_context(device_id) + + +def test_named_playlist_requires_at_least_one_entry(): + client = TestClient(main.app) + _prime_rotation_master() + + resp = client.post('/playlists', json={'name': 'empty', 'playlist': []}) + assert resp.status_code == 400 + + +def test_preview_updates_on_subsequent_frames(): + client = TestClient(main.app) + _prime_rotation_with_two_frames() + device_id = 'preview-advancing' + _reset_device_context(device_id) + + try: + # First frame + resp1 = client.get('/api/display', headers={'X-Device-Id': device_id}) + assert resp1.status_code == 200 + state_after_first = state.get_device_state(device_id) + with state.STATE_LOCK: + first_token = state_after_first.get('current_preview_token') + first_index = state_after_first.get('current_preview_entry_index') + assert first_index is not None + assert first_token + resp_preview_first = client.get(f'/preview/{device_id}') + assert resp_preview_first.status_code == 200 + first_bytes = resp_preview_first.content + + # Second frame (rotation advances) + resp2 = client.get('/api/display', headers={'X-Device-Id': device_id}) + assert resp2.status_code == 200 + state_after_second = state.get_device_state(device_id) + with state.STATE_LOCK: + second_token = state_after_second.get('current_preview_token') + second_index = state_after_second.get('current_preview_entry_index') + assert second_index is not None + assert second_token + resp_preview_second = client.get(f'/preview/{device_id}') + assert resp_preview_second.status_code == 200 + second_bytes = resp_preview_second.content + assert second_bytes + assert second_bytes != first_bytes, 'Preview bytes should update to the next rotation frame' + assert second_token != first_token, 'Preview token should change when preview bytes change' + finally: + _reset_device_context(device_id) + + +def test_preview_sequence_stores_each_frame(): + client = TestClient(main.app) + master = _prime_rotation_with_two_frames() + device_id = 'preview-sequence' + _reset_device_context(device_id) + + try: + expected_sequence = master['png_entries'] + for idx in range(3): + resp = client.get('/api/display', headers={'X-Device-Id': device_id}) + assert resp.status_code == 200 + device_state = state.get_device_state(device_id) + with state.STATE_LOCK: + preview_token = device_state.get('current_preview_token') + preview_index = device_state.get('current_preview_entry_index') + assert preview_index is not None + assert preview_token + expected_bytes = expected_sequence[idx % len(expected_sequence)] + + resp_preview = client.get(f'/preview/{device_id}') + assert resp_preview.status_code == 200 + assert resp_preview.content == expected_bytes + finally: + _reset_device_context(device_id) diff --git a/tests/test_weather.py b/tests/test_weather.py new file mode 100644 index 0000000..f6a7812 --- /dev/null +++ b/tests/test_weather.py @@ -0,0 +1,44 @@ +from pathlib import Path +from typing import Any, Dict +from unittest.mock import AsyncMock, patch + +import pytest + +from trmnl_server.plugins.base import PluginOutput +from trmnl_server.plugins.weather import WeatherPlugin + + +def _sample_weather_payload() -> Dict[str, Any]: + # Minimal structure consumed by WeatherPlugin + times = [f"2025-12-10T{str(h).zfill(2)}:00" for h in range(24)] + temps = [10 + (h % 5) for h in range(24)] + precip = [0.1 * (h % 3) for h in range(24)] + return { + "current_weather": { + "temperature": 21.5, + "windspeed": 12.3 + }, + "hourly": { + "time": times, + "temperature_2m": temps, + "precipitation": precip + } + } + + +@pytest.mark.asyncio +async def test_weather_plugin_generates_assets(tmp_path: Path): + payload = _sample_weather_payload() + with patch.object( + WeatherPlugin, + '_fetch_weather_data', + new=AsyncMock(return_value=payload) + ): + plugin = WeatherPlugin() + output = await plugin.run(output_dir=str(tmp_path)) + + assert isinstance(output, PluginOutput) + mono = Path(output.monochrome_path) + gray = Path(output.grayscale_path) + assert mono.is_file() and mono.stat().st_size > 0 + assert gray.is_file() and gray.stat().st_size > 0 diff --git a/trmnl_server/__init__.py b/trmnl_server/__init__.py new file mode 100644 index 0000000..3ca3a76 --- /dev/null +++ b/trmnl_server/__init__.py @@ -0,0 +1,5 @@ +"""TRMNL local server package.""" + +from . import config # re-export for convenience + +__all__ = ['config'] diff --git a/trmnl_server/__main__.py b/trmnl_server/__main__.py new file mode 100644 index 0000000..0e9d004 --- /dev/null +++ b/trmnl_server/__main__.py @@ -0,0 +1,6 @@ +"""Module entry point for ``python -m trmnl_server``.""" + +from .main import run + +if __name__ == '__main__': + run() diff --git a/trmnl_server/config.py b/trmnl_server/config.py new file mode 100644 index 0000000..d8c71a0 --- /dev/null +++ b/trmnl_server/config.py @@ -0,0 +1,263 @@ +from __future__ import annotations + +import logging +from os import environ, getcwd +from os.path import abspath, isdir, join +from sys import stdout + +# Logging Configuration +LOG_LEVEL = environ.get('LOG_LEVEL', 'DEBUG').upper() +logging.basicConfig( + level=getattr(logging, LOG_LEVEL, logging.DEBUG), + format="%(asctime)s %(levelname)s %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + stream=stdout +) +logger = logging.getLogger('trmnlServer') + +# Pillow emits very noisy DEBUG logs (PNG chunk dumps). Keep them at INFO+. +logging.getLogger('PIL').setLevel(logging.INFO) +logging.getLogger('PIL.PngImagePlugin').setLevel(logging.INFO) +logging.getLogger('httpx').setLevel(logging.WARNING) +logging.getLogger('httpcore').setLevel(logging.WARNING) + +logger.info('[Config] loading module') + +_TRUE_VALUES = {'true', '1', 't', 'yes', 'on'} + +IMAGE_PATH = 'images/screen.bmp' +REFRESH_TIME = 900 +BATTERY_MAX_VOLTAGE = 4.1 +BATTERY_MIN_VOLTAGE = 2.3 +TIME_ZONE = 'UTC' +SERVER_PORT = 4567 +ENABLE_SSL = False +SERVER_SCHEME = 'http' +SETUP_API_KEY = '' +SETUP_FRIENDLY_ID = 'trmnl-byod' +SETUP_MESSAGE = 'Configured' +DITHERING_MODE = 'none' +ASSETS_ROOT = 'web' +STATIC_ROOT = 'web' +GENERATED_ROOT = 'var/generated' + +# Photographic plugin grading +# +# When enabled, photographic plugins apply additional histogram and shadow grading +# prior to tone-curve-aware quantization/dithering. +# When disabled, photographic plugins output raw grayscale (no extra grading), +# which makes it easier to reason about the tone curve/LUT calibration. +PHOTO_GRADING_ENABLED = True + +# Calibration plugin control +# +# When disabled, calibration plugins are excluded from the plugin registry and +# no calibration assets are generated. +CALIBRATION_PLUGIN_ENABLED = False + +# E-ink grayscale response compensation +# +# These settings allow quantization and dithering to operate in a non-linear +# "panel space" so the resulting grays are closer to perceptually uniform on +# real e-ink panels. +# +# - EINK_TONE_POINTS: optional anchor list "in:out" in 0-255, comma-separated +# e.g. "0:0,32:40,128:160,255:255" (digital input -> observed panel output). +# - EINK_TONE_GAMMA: fallback forward gamma (digital -> panel) when points unset. +EINK_TONE_POINTS = '0:0,32:6,64:18,85:32,128:95,170:155,192:190,224:225,255:250' +EINK_TONE_GAMMA = 1.0 + +CONFIG_DIR = getcwd() +VAR_ROOT = join(CONFIG_DIR, 'var') +DATABASE_PATH = join(VAR_ROOT, 'db', 'trmnl.db') +LOGS_DIR = join(VAR_ROOT, 'logs') +SSL_DIR = join(VAR_ROOT, 'ssl') +WEB_ROOT_DIR = join(CONFIG_DIR, ASSETS_ROOT) +WEB_STATIC_DIR = join(CONFIG_DIR, STATIC_ROOT) +WEB_GENERATED_DIR = join(CONFIG_DIR, GENERATED_ROOT) + +_ENV_OVERRIDES: set[str] = set() + + +def _env_str(name: str, default: str, config_key: str) -> str: + value = environ.get(name) + if value is None: + return default + _ENV_OVERRIDES.add(config_key) + return value + + +def _env_bool(name: str, default: bool, config_key: str) -> bool: + value = environ.get(name) + if value is None: + return default + _ENV_OVERRIDES.add(config_key) + return value.strip().lower() in _TRUE_VALUES + + +def _env_int(name: str, default: int, config_key: str) -> int: + value = environ.get(name) + if value is None: + return default + try: + number = int(value) + _ENV_OVERRIDES.add(config_key) + return number + except ValueError: + logger.warning('[Config] Invalid int for %s: %s', name, value) + return default + + +def _env_float(name: str, default: float, config_key: str) -> float: + value = environ.get(name) + if value is None: + return default + try: + number = float(value) + _ENV_OVERRIDES.add(config_key) + return number + except ValueError: + logger.warning('[Config] Invalid float for %s: %s', name, value) + return default + + +def _apply_environment_overrides() -> None: + global IMAGE_PATH, REFRESH_TIME + global BATTERY_MAX_VOLTAGE, BATTERY_MIN_VOLTAGE, TIME_ZONE + global SERVER_PORT, ENABLE_SSL, SERVER_SCHEME + global SETUP_API_KEY, SETUP_FRIENDLY_ID, SETUP_MESSAGE + global DITHERING_MODE, ASSETS_ROOT, STATIC_ROOT, GENERATED_ROOT + global EINK_TONE_POINTS, EINK_TONE_GAMMA + global PHOTO_GRADING_ENABLED, CALIBRATION_PLUGIN_ENABLED + _ENV_OVERRIDES.clear() + + default_eink_tone_points = EINK_TONE_POINTS + default_eink_tone_gamma = EINK_TONE_GAMMA + + IMAGE_PATH = _env_str('IMAGE_PATH', 'images/screen.bmp', 'image_path') + REFRESH_TIME = _env_int('REFRESH_TIME', 900, 'refresh_time') + BATTERY_MAX_VOLTAGE = _env_float('BATTERY_MAX_VOLTAGE', 4.1, 'battery_max_voltage') + BATTERY_MIN_VOLTAGE = _env_float('BATTERY_MIN_VOLTAGE', 2.3, 'battery_min_voltage') + TIME_ZONE = _env_str('TIME_ZONE', 'UTC', 'time_zone') + SERVER_PORT = _env_int('SERVER_PORT', 4567, 'server_port') + ENABLE_SSL = _env_bool('ENABLE_SSL', False, 'enable_ssl') + SETUP_API_KEY = _env_str('SETUP_API_KEY', '', 'setup_api_key') + SETUP_FRIENDLY_ID = _env_str('SETUP_FRIENDLY_ID', 'trmnl-byod', 'setup_friendly_id') + SETUP_MESSAGE = _env_str('SETUP_MESSAGE', 'Configured', 'setup_message') + DITHERING_MODE = _env_str('DITHERING_MODE', 'none', 'dithering_mode') + ASSETS_ROOT = _env_str('ASSETS_ROOT', 'web', 'assets_root') + STATIC_ROOT = _env_str('STATIC_ROOT', 'web', 'static_root') + GENERATED_ROOT = _env_str('GENERATED_ROOT', 'var/generated', 'generated_root') + EINK_TONE_POINTS = _env_str('EINK_TONE_POINTS', default_eink_tone_points, 'eink_tone_points') + EINK_TONE_GAMMA = _env_float('EINK_TONE_GAMMA', default_eink_tone_gamma, 'eink_tone_gamma') + PHOTO_GRADING_ENABLED = _env_bool('PHOTO_GRADING_ENABLED', PHOTO_GRADING_ENABLED, 'photo_grading_enabled') + CALIBRATION_PLUGIN_ENABLED = _env_bool('CALIBRATION_PLUGIN_ENABLED', CALIBRATION_PLUGIN_ENABLED, 'calibration_plugin_enabled') + _refresh_server_scheme() + + +def _refresh_server_scheme() -> None: + global SERVER_SCHEME + SERVER_SCHEME = 'https' if ENABLE_SSL else 'http' + + +def _refresh_path_constants() -> None: + global VAR_ROOT, DATABASE_PATH, LOGS_DIR, SSL_DIR + global WEB_ROOT_DIR, WEB_STATIC_DIR, WEB_GENERATED_DIR + VAR_ROOT = join(CONFIG_DIR, 'var') + DATABASE_PATH = join(VAR_ROOT, 'db', 'trmnl.db') + LOGS_DIR = join(VAR_ROOT, 'logs') + SSL_DIR = join(VAR_ROOT, 'ssl') + WEB_ROOT_DIR = join(CONFIG_DIR, ASSETS_ROOT) + WEB_STATIC_DIR = join(CONFIG_DIR, STATIC_ROOT) + WEB_GENERATED_DIR = join(CONFIG_DIR, GENERATED_ROOT) + + +def load_config(base_dir: str | None = None) -> None: + """Apply environment overrides and update path constants for the provided base directory.""" + global CONFIG_DIR + _apply_environment_overrides() + if base_dir: + candidate = abspath(base_dir) + if not isdir(candidate): + logger.warning('[Config] Provided base_dir %s is not a directory; using current working directory', base_dir) + candidate = getcwd() + CONFIG_DIR = candidate + else: + CONFIG_DIR = getcwd() + _refresh_path_constants() + + +def _coerce_bool(value) -> bool: + if isinstance(value, bool): + return value + if isinstance(value, str): + return value.strip().lower() in _TRUE_VALUES + return bool(value) + + +def update_config(key: str, value) -> None: + """Update an in-memory configuration value.""" + global IMAGE_PATH, REFRESH_TIME + global BATTERY_MAX_VOLTAGE, BATTERY_MIN_VOLTAGE, TIME_ZONE + global SERVER_PORT, ENABLE_SSL, SETUP_API_KEY + global SETUP_FRIENDLY_ID, SETUP_MESSAGE, DITHERING_MODE + global ASSETS_ROOT, STATIC_ROOT, GENERATED_ROOT + global EINK_TONE_POINTS, EINK_TONE_GAMMA + global PHOTO_GRADING_ENABLED, CALIBRATION_PLUGIN_ENABLED + + logger.info('[Config] Updating %s to %s', key, value) + + if key == 'image_path': + IMAGE_PATH = str(value) + elif key == 'refresh_time': + REFRESH_TIME = int(value) + elif key == 'battery_max_voltage': + BATTERY_MAX_VOLTAGE = float(value) + elif key == 'battery_min_voltage': + BATTERY_MIN_VOLTAGE = float(value) + elif key == 'time_zone': + TIME_ZONE = str(value) + elif key == 'server_port': + SERVER_PORT = int(value) + elif key == 'enable_ssl': + ENABLE_SSL = _coerce_bool(value) + _refresh_server_scheme() + elif key == 'setup_api_key': + SETUP_API_KEY = str(value) + elif key == 'setup_friendly_id': + SETUP_FRIENDLY_ID = str(value) + elif key == 'setup_message': + SETUP_MESSAGE = str(value) + elif key == 'dithering_mode': + DITHERING_MODE = str(value) + elif key == 'assets_root': + ASSETS_ROOT = str(value) + _refresh_path_constants() + elif key == 'static_root': + STATIC_ROOT = str(value) + _refresh_path_constants() + elif key == 'generated_root': + GENERATED_ROOT = str(value) + _refresh_path_constants() + elif key == 'eink_tone_points': + EINK_TONE_POINTS = str(value) + elif key == 'eink_tone_gamma': + EINK_TONE_GAMMA = float(value) + elif key == 'photo_grading_enabled': + PHOTO_GRADING_ENABLED = _coerce_bool(value) + elif key == 'calibration_plugin_enabled': + CALIBRATION_PLUGIN_ENABLED = _coerce_bool(value) + else: + logger.warning('[Config] Unknown config key: %s', key) + + +def apply_persisted_config(entries: dict[str, str]) -> None: + """Apply database-backed configuration entries unless overridden by env vars.""" + for key, raw_value in entries.items(): + if key in _ENV_OVERRIDES: + continue + update_config(key, raw_value) + + +_apply_environment_overrides() +_refresh_path_constants() diff --git a/trmnl_server/main.py b/trmnl_server/main.py new file mode 100644 index 0000000..a66eafa --- /dev/null +++ b/trmnl_server/main.py @@ -0,0 +1,341 @@ +#! /usr/bin/env python +"""FastAPI entrypoint and CLI tooling for the TRMNL local server.""" + +from __future__ import annotations + +import argparse +import asyncio +import os +import sys +from contextlib import asynccontextmanager +from typing import Awaitable, Callable, Dict, List, Optional, Tuple + +import uvicorn +from fastapi import FastAPI, Request, Response +from fastapi.staticfiles import StaticFiles + +from . import config, models, utils +from .routes import api_router, image_router, page_router +from .services import plugins, state + +################################################################################################### + +logger = config.logger +logger.info('[Main] Starting trmnlServer') + +API_LOG_PATH_PREFIXES = ('/api',) +MAX_REQUEST_LOG_BODY = 2048 +MAX_RESPONSE_LOG_BODY = 2048 +BINARY_CONTENT_PREFIXES = ( + 'application/octet-stream', + 'application/pdf', + 'application/zip', + 'image/', + 'audio/', + 'video/' +) + +BASE_PATH = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir)) +STATIC_MOUNT_PATHS: Optional[Tuple[str, str]] = None + + +def should_log_request(path: str) -> bool: + return any(path.startswith(prefix) for prefix in API_LOG_PATH_PREFIXES) + + +def format_request_body(body: bytes, limit: int = MAX_REQUEST_LOG_BODY) -> str: + if not body: + return '' + body_text = body.decode('utf-8', errors='replace') + if len(body_text) > limit: + return f"{body_text[:limit]}..." + return body_text + + +def is_binary_content_type(content_type: str) -> bool: + lowered = (content_type or '').lower() + return any(lowered.startswith(prefix) for prefix in BINARY_CONTENT_PREFIXES) + + +def format_response_body(body: bytes, limit: int = MAX_RESPONSE_LOG_BODY) -> str: + if not body: + return '' + text = body.decode('utf-8', errors='replace') + if len(text) > limit: + return f"{text[:limit]}..." + return text + + +@asynccontextmanager +async def lifespan(app: FastAPI): # noqa: ARG001 + logger.info('Running initial plugin refresh') + await plugins.refresh_plugin_assets() + logger.info('Starting plugin refresh workers') + await plugins.start_plugin_refreshers() + yield + logger.info('Stopping plugin refresh workers') + await plugins.stop_plugin_refreshers() + + +app = FastAPI(lifespan=lifespan) + + +@app.middleware('http') +async def log_api_request( + request: Request, + call_next: Callable[[Request], Awaitable[Response]] +) -> Response: + log_this_request = should_log_request(request.url.path) + if log_this_request: + body_bytes = await request.body() + logger.info( + '[RequestDump] method=%s path=%s query=%s headers=%s body=%s', + request.method, + request.url.path, + dict(request.query_params), + dict(request.headers), + format_request_body(body_bytes) + ) + response = await call_next(request) + if log_this_request: + content_type = response.headers.get('content-type', '') + if not is_binary_content_type(content_type): + response_body_chunks = [chunk async for chunk in response.body_iterator] + response_body = b''.join(response_body_chunks) + logger.info( + '[ResponseDump] path=%s status=%s content_type=%s headers=%s body=%s', + request.url.path, + response.status_code, + content_type, + dict(response.headers), + format_response_body(response_body) + ) + return Response( + content=response_body, + status_code=response.status_code, + headers=dict(response.headers), + media_type=response.media_type, + background=response.background + ) + return response +app.include_router(image_router) +app.include_router(api_router) +app.include_router(page_router) + + +def _parse_cli_args(argv: Optional[List[str]] = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description='TRMNL local server') + parser.add_argument('workdir', nargs='?', help='Runtime working directory', default=None) + parser.add_argument('--list-plugins', action='store_true', help='List registered plugins and exit') + parser.add_argument('--run-plugin', metavar='PLUGIN', help='Run a single plugin and exit') + parser.add_argument('--plugin-output', metavar='DIR', help='Override output directory when running a plugin') + parser.add_argument( + '--plugin-arg', + action='append', + default=[], + metavar='KEY=VALUE', + help='Additional keyword arguments for --run-plugin' + ) + return parser.parse_args(argv) + + +def _parse_plugin_kwargs(pairs: List[str]) -> Dict[str, str]: + kwargs: Dict[str, str] = {} + for entry in pairs: + if '=' not in entry: + raise ValueError(f"Invalid plugin arg '{entry}'. Expected KEY=VALUE") + key, value = entry.split('=', 1) + kwargs[key] = value + return kwargs + + +def _resolve_workdir(candidate: Optional[str]) -> str: + if not candidate: + return BASE_PATH + if not os.path.isdir(candidate): + print(f"Path {candidate} is not a directory. Using default path {BASE_PATH}.") + return BASE_PATH + return candidate + + +def _ensure_static_mounts() -> None: + global STATIC_MOUNT_PATHS + desired = (config.WEB_STATIC_DIR, config.WEB_GENERATED_DIR) + if STATIC_MOUNT_PATHS == desired: + return + # Remove existing mounts if present so new directories are reflected + app.router.routes = [ + route for route in app.router.routes + if getattr(route, 'name', None) not in {'web-static', 'web-generated', 'generated-static'} + ] + app.mount('/web', StaticFiles(directory=config.WEB_STATIC_DIR), name='web-static') + # Serve generated, volatile plugin outputs directly under /generated + app.mount('/generated', StaticFiles(directory=config.WEB_GENERATED_DIR), name='generated-static') + STATIC_MOUNT_PATHS = desired + + +def _enforce_runtime_directory_defaults(entries: Optional[Dict[str, str]] = None) -> None: + desired_static = 'web' + desired_assets = 'web' + desired_generated = 'var/generated' + if entries is None: + entries = {} + + persisted_static = entries.get('static_root') + if persisted_static and persisted_static != desired_static: + logger.info( + 'Migrating static_root from %s to %s to align with reorganized web assets', + persisted_static, + desired_static + ) + config.update_config('static_root', desired_static) + models.save_config_entry('static_root', desired_static) + + persisted_assets = entries.get('assets_root') + if persisted_assets and persisted_assets != desired_assets: + logger.info( + 'Migrating assets_root from %s to %s to align with reorganized web assets', + persisted_assets, + desired_assets + ) + config.update_config('assets_root', desired_assets) + models.save_config_entry('assets_root', desired_assets) + + persisted_generated = entries.get('generated_root') + if persisted_generated and persisted_generated != desired_generated: + logger.info( + 'Migrating generated_root from %s to %s to keep volatile assets under var/', + persisted_generated, + desired_generated + ) + config.update_config('generated_root', desired_generated) + models.save_config_entry('generated_root', desired_generated) + + +def _prepare_runtime(current_dir: str) -> str: + config.load_config(current_dir) + os.makedirs(config.VAR_ROOT, exist_ok=True) + os.makedirs(os.path.dirname(config.DATABASE_PATH), exist_ok=True) + models.init_db() + persisted_entries = models.load_config_entries() + config.apply_persisted_config(persisted_entries) + _enforce_runtime_directory_defaults(persisted_entries) + state.initialize_rotation_playlists_from_storage() + + runtime_paths = { + config.VAR_ROOT, + os.path.dirname(config.DATABASE_PATH), + config.LOGS_DIR, + config.SSL_DIR, + config.WEB_STATIC_DIR, + config.WEB_GENERATED_DIR + } + for path in runtime_paths: + os.makedirs(path, exist_ok=True) + + server_ip = utils.get_ip_address() + server_scheme = config.SERVER_SCHEME + server_base_url = f"{server_scheme}://{server_ip}:{config.SERVER_PORT}" + state.set_server_base_url(server_base_url) + logger.info( + 'Server will be running on IP: %s and port: %s (scheme: %s)', + server_ip, + config.SERVER_PORT, + server_scheme + ) + + for path in (config.WEB_ROOT_DIR, config.WEB_STATIC_DIR, config.WEB_GENERATED_DIR, config.SSL_DIR): + os.makedirs(path, exist_ok=True) + _ensure_static_mounts() + return server_ip + + +def _print_available_plugins() -> None: + print('Registered plugins:') + for name in plugins.list_available_plugins(): + print(f' - {name}') + + +def _run_plugin_command(plugin_name: str, output_dir: Optional[str], plugin_kwargs: Dict[str, str]) -> None: + try: + result = asyncio.run( + plugins.run_single_plugin_by_name( + plugin_name, + output_dir=output_dir, + plugin_kwargs=plugin_kwargs + ) + ) + except ValueError as exc: + logger.error('%s', exc) + sys.exit(2) + except RuntimeError as exc: + logger.error('%s', exc) + sys.exit(1) + logger.info( + 'Plugin %s assets saved to %s and %s', + plugin_name, + result.monochrome_path, + result.grayscale_path + ) + + +def _start_http_server(server_ip: str) -> None: + with state.STATE_LOCK: + state.get_device_state(state.DEFAULT_DEVICE_ID)['bmp_send_switch'] = True + if config.ENABLE_SSL: + cert_file = os.path.join(config.SSL_DIR, 'cert.pem') + key_file = os.path.join(config.SSL_DIR, 'key.pem') + + if not os.path.exists(cert_file) or not os.path.exists(key_file): + logger.debug('[Main] cert.pem and key.pem not found, generating new ones') + os.system( + f'openssl req -x509 -newkey rsa:4096 -keyout {key_file} -out {cert_file} ' + f'-days 365 -nodes ' + f'-subj "/C=US/ST=Georgia/L=Atlanta/O=trmnlServer/OU=webapp/CN={server_ip}"' + ) + + logger.debug('[Main] Starting the server with uvicorn and SSL') + uvicorn.run( + app, + host='0.0.0.0', + port=config.SERVER_PORT, + ssl_keyfile=key_file, + ssl_certfile=cert_file, + log_level='info' + ) + else: + logger.debug('[Main] Starting the server without SSL') + uvicorn.run( + app, + host='0.0.0.0', + port=config.SERVER_PORT, + log_level='info' + ) + + +_prepare_runtime(BASE_PATH) + + +def run() -> None: + args = _parse_cli_args(sys.argv[1:]) + current_dir = _resolve_workdir(args.workdir) + server_ip = _prepare_runtime(current_dir) + + if args.list_plugins: + _print_available_plugins() + return + + if args.run_plugin: + try: + plugin_kwargs = _parse_plugin_kwargs(args.plugin_arg) + except ValueError as exc: + logger.error('%s', exc) + sys.exit(2) + _run_plugin_command(args.run_plugin, args.plugin_output, plugin_kwargs) + return + + _start_http_server(server_ip) + + +if __name__ == '__main__': + run() diff --git a/trmnl_server/models.py b/trmnl_server/models.py new file mode 100644 index 0000000..970d2a4 --- /dev/null +++ b/trmnl_server/models.py @@ -0,0 +1,519 @@ +import datetime +import json +from typing import Dict, List, Optional, Tuple + +from sqlalchemy import DateTime, Float, Integer, String, Text, UniqueConstraint, create_engine, inspect, select, text +from sqlalchemy.orm import DeclarativeBase, Mapped, Session, mapped_column, sessionmaker + +from . import config + +logger = config.logger + + +def _utcnow() -> datetime.datetime: + """Return a timezone-aware UTC timestamp for SQLAlchemy defaults.""" + return datetime.datetime.now(datetime.timezone.utc) + + +def _database_url() -> str: + return f"sqlite:///{config.DATABASE_PATH}" + + +engine = create_engine(_database_url(), connect_args={"check_same_thread": False}) +SessionLocal = sessionmaker(autocommit=False, autoflush=False) +SessionLocal.configure(bind=engine) + + +class Base(DeclarativeBase): + pass + + +class BatteryStatus(Base): + __tablename__ = "battery_status" + + id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True) + timestamp: Mapped[datetime.datetime] = mapped_column(DateTime, default=_utcnow) + voltage: Mapped[float] = mapped_column(Float) + rssi: Mapped[int] = mapped_column(Integer) + + def __repr__(self) -> str: + return f"" + + +class LogEntry(Base): + __tablename__ = "logs" + + id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True) + timestamp: Mapped[datetime.datetime] = mapped_column(DateTime, default=_utcnow) + context: Mapped[str] = mapped_column(String) + info: Mapped[str] = mapped_column(String) + + def __repr__(self) -> str: + return f"" + + +class RotationPlaylist(Base): + __tablename__ = "rotation_playlists" + __table_args__ = ( + UniqueConstraint("name", "device_id", name="uq_rotation_playlists_name_device"), + ) + + id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True) + name: Mapped[str] = mapped_column(String, default="default") + device_id: Mapped[Optional[str]] = mapped_column(String, nullable=True) + selected_ids: Mapped[str] = mapped_column(Text, default="[]") + updated_at: Mapped[datetime.datetime] = mapped_column(DateTime, default=_utcnow) + + def __repr__(self) -> str: + return f"" + + +class DevicePlaylistBinding(Base): + __tablename__ = "device_playlist_bindings" + + device_id: Mapped[str] = mapped_column(String, primary_key=True, index=True) + playlist_name: Mapped[str] = mapped_column(String, default="default") + updated_at: Mapped[datetime.datetime] = mapped_column(DateTime, default=_utcnow, onupdate=_utcnow) + + def __repr__(self) -> str: + return f"" + + +class DeviceState(Base): + __tablename__ = "device_states" + + device_id: Mapped[str] = mapped_column(String, primary_key=True, index=True) + rotation_version: Mapped[int] = mapped_column(Integer, default=0) + rotation_index: Mapped[int] = mapped_column(Integer, default=-1) + last_entry_hash: Mapped[Optional[str]] = mapped_column(String, nullable=True) + rotation_hash_order: Mapped[str] = mapped_column(Text, default="[]") + current_plugin_id: Mapped[Optional[str]] = mapped_column(String, nullable=True) + updated_at: Mapped[datetime.datetime] = mapped_column(DateTime, default=_utcnow, onupdate=_utcnow) + + def __repr__(self) -> str: + return ( + f"" + ) + + +class ConfigEntry(Base): + __tablename__ = "config_entries" + + key: Mapped[str] = mapped_column(String, primary_key=True, index=True) + value: Mapped[str] = mapped_column(String) + + def __repr__(self) -> str: + return f"" + + +class DeviceProfile(Base): + __tablename__ = "device_profiles" + + device_id: Mapped[str] = mapped_column(String, primary_key=True, index=True) + friendly_name: Mapped[str] = mapped_column(String, default="") + refresh_interval: Mapped[Optional[int]] = mapped_column(Integer, nullable=True) + time_zone: Mapped[Optional[str]] = mapped_column(String, nullable=True) + created_at: Mapped[datetime.datetime] = mapped_column(DateTime, default=_utcnow) + updated_at: Mapped[datetime.datetime] = mapped_column(DateTime, default=_utcnow, onupdate=_utcnow) + last_seen: Mapped[datetime.datetime] = mapped_column(DateTime, default=_utcnow) + + def __repr__(self) -> str: + return f"" + + +def reconfigure_engine() -> None: + """Recreate the SQLite engine to follow the current config path.""" + global engine + new_engine = create_engine(_database_url(), connect_args={"check_same_thread": False}) + if engine: + engine.dispose() + engine = new_engine + SessionLocal.configure(bind=engine) + + +def init_db() -> None: + """Initialize the database by creating all tables.""" + reconfigure_engine() + Base.metadata.create_all(bind=engine) + _ensure_device_state_schema() + + +def _ensure_device_state_schema() -> None: + try: + inspector = inspect(engine) + columns = {column['name'] for column in inspector.get_columns('device_states')} + except Exception as exc: # noqa: BLE001 + logger.warning("Failed to inspect device_states schema: %s", exc) + return + if 'current_plugin_id' in columns: + return + try: + with engine.begin() as connection: + connection.execute(text('ALTER TABLE device_states ADD COLUMN current_plugin_id VARCHAR')) + except Exception as exc: # noqa: BLE001 + logger.warning("Failed to add current_plugin_id column: %s", exc) + + +def get_db(): + """Dependency to get a database session.""" + db = SessionLocal() + try: + yield db + finally: + db.close() + + +def add_battery_status(voltage: float, rssi: int) -> BatteryStatus: + """Add a new battery status entry.""" + with SessionLocal() as db: + status = BatteryStatus(voltage=voltage, rssi=rssi) + db.add(status) + db.commit() + db.refresh(status) + return status + + +def get_battery_history( + limit: int = 30, + from_date: Optional[datetime.datetime] = None, + to_date: Optional[datetime.datetime] = None +) -> List[BatteryStatus]: + """Get battery history with optional filtering.""" + with SessionLocal() as db: + query = select(BatteryStatus).order_by(BatteryStatus.timestamp.desc()) + + if from_date and to_date: + query = query.where(BatteryStatus.timestamp >= from_date, BatteryStatus.timestamp <= to_date) + + if limit: + query = query.limit(limit) + + result = db.execute(query) + return list(result.scalars().all()) + + +def add_log_entry(context: str, info: str) -> LogEntry: + """Add a new log entry.""" + with SessionLocal() as db: + log = LogEntry(context=context, info=info) + db.add(log) + db.commit() + db.refresh(log) + return log + + +def get_logs(limit: int = 20) -> List[LogEntry]: + """Get the latest log entries ordered oldest-to-newest.""" + with SessionLocal() as db: + query = select(LogEntry).order_by(LogEntry.timestamp.desc()).limit(limit) + result = db.execute(query) + logs = list(result.scalars().all()) + return sorted(logs, key=lambda entry: entry.timestamp) + + +def get_logs_after(last_id: int, limit: int = 50) -> List[LogEntry]: + """Get log entries with an ID greater than the provided cursor.""" + with SessionLocal() as db: + query = ( + select(LogEntry) + .where(LogEntry.id > last_id) + .order_by(LogEntry.timestamp.asc()) + ) + result = db.execute(query) + return list(result.scalars().all()) + + +def _serialize_list(values: Optional[List[str]]) -> str: + return json.dumps(values or []) + + +def _deserialize_list(payload: Optional[str]) -> List[str]: + if not payload: + return [] + try: + data = json.loads(payload) + except json.JSONDecodeError: + return [] + if isinstance(data, list): + return [str(item) for item in data] + return [] + + +def get_rotation_playlist(device_id: Optional[str] = None, name: str = "default") -> Optional[List[str]]: + with SessionLocal() as db: + stmt = ( + select(RotationPlaylist) + .where(RotationPlaylist.name == name) + .where(RotationPlaylist.device_id == device_id) + ) + result = db.execute(stmt).scalars().first() + if result is None: + return None + return _deserialize_list(result.selected_ids) + + +def save_rotation_playlist( + selected_ids: List[str], + device_id: Optional[str] = None, + name: str = "default" +) -> None: + payload = _serialize_list(selected_ids) + timestamp = _utcnow() + with SessionLocal() as db: + stmt = ( + select(RotationPlaylist) + .where(RotationPlaylist.name == name) + .where(RotationPlaylist.device_id == device_id) + ) + row = db.execute(stmt).scalars().first() + if row is None: + row = RotationPlaylist(name=name, device_id=device_id, selected_ids=payload, updated_at=timestamp) + db.add(row) + else: + row.selected_ids = payload + row.updated_at = timestamp + db.commit() + + +def list_device_playlists(name: str = "default") -> List[Tuple[str, List[str]]]: + with SessionLocal() as db: + stmt = ( + select(RotationPlaylist) + .where(RotationPlaylist.name == name) + .where(RotationPlaylist.device_id.isnot(None)) + ) + rows = db.execute(stmt).scalars().all() + return [ + (row.device_id, _deserialize_list(row.selected_ids)) + for row in rows + ] + + +def delete_rotation_playlist(device_id: str, name: str = "default") -> None: + with SessionLocal() as db: + stmt = ( + select(RotationPlaylist) + .where(RotationPlaylist.name == name) + .where(RotationPlaylist.device_id == device_id) + ) + row = db.execute(stmt).scalars().first() + if row is None: + return + db.delete(row) + db.commit() + + +def list_named_rotation_playlists() -> List[Tuple[str, List[str]]]: + with SessionLocal() as db: + stmt = ( + select(RotationPlaylist) + .where(RotationPlaylist.device_id.is_(None)) + .where(RotationPlaylist.name != 'default') + ) + rows = db.execute(stmt).scalars().all() + return [(row.name, _deserialize_list(row.selected_ids)) for row in rows] + + +def delete_named_rotation_playlist(name: str) -> None: + with SessionLocal() as db: + stmt = ( + select(RotationPlaylist) + .where(RotationPlaylist.name == name) + .where(RotationPlaylist.device_id.is_(None)) + ) + row = db.execute(stmt).scalars().first() + if row is None: + return + db.delete(row) + db.commit() + + +def list_device_playlist_bindings() -> List[Tuple[str, str]]: + with SessionLocal() as db: + stmt = select(DevicePlaylistBinding) + rows = db.execute(stmt).scalars().all() + return [(row.device_id, row.playlist_name) for row in rows] + + +def get_device_playlist_binding(device_id: str) -> Optional[str]: + with SessionLocal() as db: + row = db.get(DevicePlaylistBinding, device_id) + if row is None: + return None + return row.playlist_name + + +def set_device_playlist_binding(device_id: str, playlist_name: str) -> None: + timestamp = _utcnow() + with SessionLocal() as db: + row = db.get(DevicePlaylistBinding, device_id) + if row is None: + row = DevicePlaylistBinding(device_id=device_id, playlist_name=playlist_name, updated_at=timestamp) + db.add(row) + else: + row.playlist_name = playlist_name + row.updated_at = timestamp + db.commit() + + +def delete_device_playlist_binding(device_id: str) -> None: + with SessionLocal() as db: + row = db.get(DevicePlaylistBinding, device_id) + if row is None: + return + db.delete(row) + db.commit() + + +def get_device_state(device_id: str) -> Optional[Dict[str, object]]: + with SessionLocal() as db: + row = db.get(DeviceState, device_id) + if row is None: + return None + return { + 'rotation_version': row.rotation_version, + 'rotation_index': row.rotation_index, + 'last_entry_hash': row.last_entry_hash, + 'rotation_hash_order': _deserialize_list(row.rotation_hash_order), + 'current_plugin_id': row.current_plugin_id + } + + +def save_device_state( + device_id: str, + rotation_version: int, + rotation_index: int, + rotation_hash_order: List[str], + last_entry_hash: Optional[str], + current_plugin_id: Optional[str] +) -> None: + timestamp = _utcnow() + payload = _serialize_list(rotation_hash_order) + with SessionLocal() as db: + row = db.get(DeviceState, device_id) + if row is None: + row = DeviceState( + device_id=device_id, + rotation_version=rotation_version, + rotation_index=rotation_index, + last_entry_hash=last_entry_hash, + rotation_hash_order=payload, + current_plugin_id=current_plugin_id, + updated_at=timestamp + ) + db.add(row) + else: + row.rotation_version = rotation_version + row.rotation_index = rotation_index + row.last_entry_hash = last_entry_hash + row.rotation_hash_order = payload + row.current_plugin_id = current_plugin_id + row.updated_at = timestamp + db.commit() + + +def delete_device_state(device_id: str) -> None: + with SessionLocal() as db: + row = db.get(DeviceState, device_id) + if row is None: + return + db.delete(row) + db.commit() + + +def _profile_to_dict(profile: DeviceProfile) -> Dict[str, Optional[str]]: + return { + 'device_id': profile.device_id, + 'friendly_name': profile.friendly_name, + 'refresh_interval': profile.refresh_interval, + 'time_zone': profile.time_zone, + 'last_seen': profile.last_seen + } + + +def get_device_profile(device_id: str) -> Optional[Dict[str, Optional[str]]]: + with SessionLocal() as db: + profile = db.get(DeviceProfile, device_id) + if profile is None: + return None + return _profile_to_dict(profile) + + +def ensure_device_profile(device_id: str) -> Dict[str, Optional[str]]: + timestamp = _utcnow() + with SessionLocal() as db: + profile = db.get(DeviceProfile, device_id) + if profile is None: + profile = DeviceProfile( + device_id=device_id, + created_at=timestamp, + updated_at=timestamp, + last_seen=timestamp + ) + db.add(profile) + db.commit() + db.refresh(profile) + return _profile_to_dict(profile) + + +def update_device_profile( + device_id: str, + *, + friendly_name: Optional[str] = None, + refresh_interval: Optional[int] = None, + time_zone: Optional[str] = None +) -> Dict[str, Optional[str]]: + timestamp = _utcnow() + with SessionLocal() as db: + profile = db.get(DeviceProfile, device_id) + if profile is None: + profile = DeviceProfile(device_id=device_id, created_at=timestamp) + db.add(profile) + if friendly_name is not None: + profile.friendly_name = friendly_name + if refresh_interval is not None: + profile.refresh_interval = refresh_interval + if time_zone is not None: + profile.time_zone = time_zone + profile.updated_at = timestamp + db.commit() + db.refresh(profile) + return _profile_to_dict(profile) + + +def touch_device_last_seen(device_id: str) -> None: + timestamp = _utcnow() + with SessionLocal() as db: + profile = db.get(DeviceProfile, device_id) + if profile is None: + profile = DeviceProfile(device_id=device_id, created_at=timestamp) + db.add(profile) + profile.last_seen = timestamp + db.commit() + + +def list_device_profiles() -> List[Dict[str, Optional[str]]]: + with SessionLocal() as db: + rows = db.execute(select(DeviceProfile).order_by(DeviceProfile.device_id)).scalars().all() + return [_profile_to_dict(row) for row in rows] + + +def save_config_entry(key: str, value: str) -> None: + """Persist a configuration key/value pair for future restarts.""" + with SessionLocal() as db: + entry = db.get(ConfigEntry, key) + if entry is None: + entry = ConfigEntry(key=key, value=str(value)) + db.add(entry) + else: + entry.value = str(value) + db.commit() + + +def load_config_entries() -> Dict[str, str]: + """Return all persisted configuration entries as a key/value mapping.""" + with SessionLocal() as db: + stmt = select(ConfigEntry) + rows = db.execute(stmt).scalars().all() + return {row.key: row.value for row in rows} diff --git a/trmnl_server/plugins/__init__.py b/trmnl_server/plugins/__init__.py new file mode 100644 index 0000000..91d38b0 --- /dev/null +++ b/trmnl_server/plugins/__init__.py @@ -0,0 +1,3 @@ +""" +Plugins package for trmnlServer. +""" diff --git a/trmnl_server/plugins/base.py b/trmnl_server/plugins/base.py new file mode 100644 index 0000000..edec7bd --- /dev/null +++ b/trmnl_server/plugins/base.py @@ -0,0 +1,631 @@ +from abc import ABC, abstractmethod +import asyncio +import logging +import math +import os +from dataclasses import dataclass +from typing import Optional, Tuple, List, Sequence + +from PIL import Image, ImageOps, ImageEnhance, ImageFont, ImageDraw + +from .. import config +from ..utils import save_display_assets, load_font as utils_load_font + +logger = logging.getLogger(__name__) + + +@dataclass(frozen=True) +class PluginOutput: + """Paths to the generated monochrome BMP and grayscale PNG assets.""" + + monochrome_path: str + grayscale_path: str + + +@dataclass(frozen=True) +class ChartBounds: + """Normalized rectangle describing the drawable chart area.""" + + x0: float + y0: float + x1: float + y1: float + + @property + def width(self) -> float: + return self.x1 - self.x0 + + @property + def height(self) -> float: + return self.y1 - self.y0 + + +@dataclass(frozen=True) +class AxisScale: + """Normalized Y-axis scaling parameters.""" + + axis_min: float + axis_max: float + step: float + + @property + def span(self) -> float: + return max(self.axis_max - self.axis_min, 1.0) + + +class PluginBase(ABC): + """Abstract base class for image-producing plugins with optional adjustments.""" + + BASENAME: str = 'plugin' + OUTPUT_SUBDIR: Optional[str] = None + SET_PRIMARY: bool = False + AUTO_REGISTER: bool = True + REFRESH_INTERVAL: Optional[int] = None + REGISTRY_ORDER: int = 100 + + def __init__(self): + self.name = self.__class__.__name__ + + def get_display_name(self) -> str: + display_attr = getattr(self, 'DISPLAY_NAME', None) + return str(display_attr) if display_attr else self.name + + @abstractmethod + async def run(self, **kwargs) -> Optional[PluginOutput]: + """Execute the plugin logic asynchronously.""" + raise NotImplementedError + + def get_adjustment_settings(self) -> Tuple[bool, float, float]: + """Return (apply_contrast, gamma_value, contrast_cutoff).""" + return (False, 1.0, 0.0) + + def get_content_ttl(self) -> int: + """Number of seconds this plugin's output remains fresh.""" + return 900 + + def apply_adjustments(self, image: Image.Image) -> Image.Image: + """Apply optional contrast and gamma adjustments according to plugin settings.""" + apply_contrast, gamma_value, contrast_cutoff = self.get_adjustment_settings() + adjusted = image + + if apply_contrast: + adjusted = ImageOps.autocontrast(adjusted, cutoff=contrast_cutoff) + + if gamma_value and gamma_value != 1.0: + inv_gamma = 1.0 / gamma_value + adjusted = adjusted.point( + lambda value: max(0, min(255, int(round((value / 255.0) ** inv_gamma * 255)))) + ) + + return adjusted + + @staticmethod + def lift_black_point(image: Image.Image, offset: int = 16) -> Image.Image: + """Raise the black point to recover detail in deep shadows.""" + offset = max(0, min(offset, 64)) + lut = [min(255, value + offset) for value in range(256)] + return image.point(lut) + + @staticmethod + def boost_shadows(image: Image.Image, pivot: int = 180, shadow_gamma: float = 0.7) -> Image.Image: + """Brighten tonal values below the pivot using a gamma curve.""" + pivot = max(1, min(pivot, 254)) + pivot_norm = pivot / 255.0 + lut = [] + for value in range(256): + normalized = value / 255.0 + if normalized < pivot_norm: + ratio = normalized / pivot_norm + remapped = (ratio ** shadow_gamma) * pivot_norm + else: + remapped = normalized + lut.append(int(round(remapped * 255))) + return image.point(lut) + + def apply_eink_grading( + self, + image: Image.Image, + *, + shadow_pivot: int = 180, + shadow_gamma: float = 0.65, + brightness: float = 1.1, + contrast_cutoff: float = 0.05 + ) -> Image.Image: + """Apply a shadow lift, brightness tweak, and autocontrast pass.""" + lifted = self.boost_shadows(image, pivot=shadow_pivot, shadow_gamma=shadow_gamma) + brightened = ImageEnhance.Brightness(lifted).enhance(brightness) + return ImageOps.autocontrast(brightened, cutoff=contrast_cutoff) + + def prepare_image(self, image: Image.Image) -> Image.Image: + """Convert plugin output to grayscale and apply the configured adjustments.""" + grayscale = image.convert('L') if image.mode != 'L' else image + return self.apply_adjustments(grayscale) + + def save_assets( + self, + image: Image.Image, + output_dir: str, + basename: str, + dither_mode: Optional[str] = None + ) -> PluginOutput: + """Apply uniform processing and persist BMP/PNG outputs for the plugin.""" + prepared = self.prepare_image(image) + bmp_path, png_path = save_display_assets( + prepared, + output_dir, + basename, + dither_mode=dither_mode + ) + return PluginOutput(monochrome_path=bmp_path, grayscale_path=png_path) + + @staticmethod + def load_font(size: int, fallback_paths: Optional[Tuple[str, ...]] = None) -> ImageFont.ImageFont: + """Attempt to load a font from several candidate paths, falling back gracefully.""" + return utils_load_font(size, fallback_paths) + + +class ChartPlugin(PluginBase): + """Base class for numeric time-series charts with smooth curves and shared styling.""" + + SERIES_LABEL: str = "Series" + BASENAME: str = "chart" + CANVAS_SIZE: Tuple[int, int] = (800, 480) + MARGIN_X: int = 70 + MARGIN_Y: int = 80 + GRID_Y_STEPS: int = 5 + GRID_X_LABELS: int = 8 + CURVE_SAMPLES: int = 12 + CURVE_SMOOTHING: float = 2.5 + TITLE_FONT_SIZE: int = 32 + AXIS_FONT_SIZE: int = 16 + VALUE_FONT_SIZE: int = 20 + CAPTION_FONT_SIZE: int = 14 + GRID_COLOR: int = 210 + AXIS_COLOR: int = 120 + CURVE_COLOR: int = 0 + MAX_MARKER_RADIUS: int = 8 + CHART_STYLE: str = "area" + AREA_GRADIENT_TOP: int = 170 + AREA_GRADIENT_BOTTOM: int = 255 + DITHER_MODE: Optional[str] = 'floyd-steinberg' + CAPTION_TEXT: Optional[str] = None + + def get_content_ttl(self) -> int: + return 1800 # default 30 minutes + + async def run(self, **kwargs) -> Optional[PluginOutput]: + output_dir = kwargs.get('output_dir', 'web') + os.makedirs(output_dir, exist_ok=True) + + dataset = await self._fetch_series() + if not dataset: + logger.warning("%s feed returned no datapoints", self.__class__.__name__) + return None + + chart = await asyncio.to_thread(self._render_chart, dataset) + output = await asyncio.to_thread( + self.save_assets, + chart, + output_dir, + self.BASENAME, + dither_mode=self.DITHER_MODE + ) + logger.info( + "%s assets saved to %s and %s", + self.__class__.__name__, + output.monochrome_path, + output.grayscale_path + ) + return output + + @abstractmethod + async def _fetch_series(self) -> Sequence[Tuple[str, int]]: + ... + + def _render_chart(self, dataset: Sequence[Tuple[str, int]]) -> Image.Image: + image, draw = self._create_canvas() + bounds = self._chart_bounds() + fonts = { + 'title': self.load_font(self.TITLE_FONT_SIZE), + 'axis': self.load_font(self.AXIS_FONT_SIZE), + 'value': self.load_font(self.VALUE_FONT_SIZE), + 'caption': self.load_font(self.CAPTION_FONT_SIZE) + } + + labels: List[str] = [name for name, _ in dataset] + values: List[int] = [int(value) for _, value in dataset] + if not values: + return image + + stats = self._compute_value_stats(values) + axis_scale = self._calculate_axis_scale(stats[0], stats[1]) + points = self._map_points(values, bounds, axis_scale) + smooth_points = self._smooth_points(points) + + self._draw_title(draw, fonts['title']) + self._draw_axes(draw, bounds) + self._draw_grid(draw, bounds, axis_scale) + self._draw_max_band(draw, bounds, axis_scale, stats[1]) + self._draw_area_fill(image, smooth_points, bounds) + self._draw_curve(draw, smooth_points) + self._draw_y_labels(draw, bounds, fonts['axis'], axis_scale) + self._draw_x_labels(draw, bounds, fonts['axis'], labels) + self._draw_max_marker(draw, points, values, fonts['value']) + self._draw_legend(draw, bounds, fonts['axis'], stats, sum(values)) + self._draw_caption(draw, bounds, fonts['caption']) + + return image + + def _create_canvas(self) -> Tuple[Image.Image, ImageDraw.ImageDraw]: + image = Image.new('L', self.CANVAS_SIZE, color=255) + return image, ImageDraw.Draw(image) + + def _chart_bounds(self) -> ChartBounds: + width, height = self.CANVAS_SIZE + return ChartBounds(self.MARGIN_X, self.MARGIN_Y, width - self.MARGIN_X, height - 60) + + def _draw_title(self, draw: ImageDraw.ImageDraw, font: ImageFont.ImageFont) -> None: + title = self.SERIES_LABEL + bbox = draw.textbbox((0, 0), title, font=font) + width, _ = self.CANVAS_SIZE + draw.text(((width - (bbox[2] - bbox[0])) / 2, 20), title, fill=0, font=font) + + def _draw_axes(self, draw: ImageDraw.ImageDraw, bounds: ChartBounds) -> None: + draw.line([(bounds.x0, bounds.y0), (bounds.x0, bounds.y1)], fill=self.AXIS_COLOR, width=2) + draw.line([(bounds.x0, bounds.y1), (bounds.x1, bounds.y1)], fill=self.AXIS_COLOR, width=2) + + def _draw_grid(self, draw: ImageDraw.ImageDraw, bounds: ChartBounds, axis_scale: AxisScale) -> None: + tick_values = self._generate_tick_values(axis_scale) + for value in tick_values: + if value in (axis_scale.axis_min, axis_scale.axis_max): + continue + ratio = (axis_scale.axis_max - value) / axis_scale.span + gy = bounds.y0 + ratio * bounds.height + draw.line([(bounds.x0, gy), (bounds.x1, gy)], fill=self.GRID_COLOR, width=1) + for step in range(1, self.GRID_X_LABELS): + gx = bounds.x0 + (step * bounds.width / self.GRID_X_LABELS) + draw.line([(gx, bounds.y0), (gx, bounds.y1)], fill=self.GRID_COLOR, width=1) + + @staticmethod + def _compute_value_stats(values: Sequence[int]) -> Tuple[int, int, float]: + if not values: + return (0, 1, 1.0) + min_val = min(values) + max_val = max(values) + if min_val == max_val: + max_val += 1 + span = float(max_val - min_val) + return (min_val, max_val, span) + + def _map_points( + self, + values: Sequence[int], + bounds: ChartBounds, + axis_scale: AxisScale + ) -> List[Tuple[float, float]]: + sample_count = max(1, len(values) - 1) + points: List[Tuple[float, float]] = [] + for idx, value in enumerate(values): + px = bounds.x0 + (idx / sample_count) * bounds.width if sample_count else bounds.x0 + normalized = (value - axis_scale.axis_min) / axis_scale.span if axis_scale.span else 0.0 + py = bounds.y1 - normalized * bounds.height + points.append((px, py)) + return points + + def _smooth_points(self, points: Sequence[Tuple[float, float]]) -> List[Tuple[float, float]]: + if len(points) < 2 or self.CURVE_SAMPLES <= 0: + return list(points) + + xs = [px for px, _ in points] + ys = [py for _, py in points] + deltas: List[float] = [] + for idx in range(len(points) - 1): + dx = xs[idx + 1] - xs[idx] + if dx <= 0: + return list(points) + deltas.append((ys[idx + 1] - ys[idx]) / dx) + + slopes = self._compute_monotone_slopes(xs, deltas) + smooth: List[Tuple[float, float]] = [points[0]] + for idx in range(len(points) - 1): + smooth.extend( + self._hermite_segment_samples( + xs[idx], + ys[idx], + xs[idx + 1], + ys[idx + 1], + slopes[idx], + slopes[idx + 1] + ) + ) + smooth.append(points[idx + 1]) + return smooth + + def _compute_monotone_slopes(self, xs: Sequence[float], deltas: Sequence[float]) -> List[float]: + count = len(xs) + slopes = [0.0] * count + if count < 2: + return slopes + + slopes[0] = self._scale_and_clamp_slope(None, deltas[0], deltas[0]) + slopes[-1] = self._scale_and_clamp_slope(deltas[-1], None, deltas[-1]) + for idx in range(1, count - 1): + prev = deltas[idx - 1] + curr = deltas[idx] + if prev == 0 or curr == 0 or prev * curr < 0: + slopes[idx] = 0.0 + continue + dx_prev = xs[idx] - xs[idx - 1] + dx_next = xs[idx + 1] - xs[idx] + w1 = 2 * dx_next + dx_prev + w2 = dx_next + 2 * dx_prev + raw_slope = (w1 + w2) / (w1 / prev + w2 / curr) + slopes[idx] = self._scale_and_clamp_slope(prev, curr, raw_slope) + return slopes + + def _scale_and_clamp_slope( + self, + prev_delta: Optional[float], + next_delta: Optional[float], + slope: float + ) -> float: + if slope == 0.0: + return 0.0 + scaled = slope * self.CURVE_SMOOTHING + limits: List[float] = [] + if prev_delta not in (None, 0.0): + limits.append(3.0 * abs(prev_delta)) + if next_delta not in (None, 0.0): + limits.append(3.0 * abs(next_delta)) + if not limits: + return 0.0 + limit = min(limits) + magnitude = min(abs(scaled), limit) + return math.copysign(magnitude, scaled) + + def _hermite_segment_samples( + self, + x0: float, + y0: float, + x1: float, + y1: float, + m0: float, + m1: float + ) -> List[Tuple[float, float]]: + segment_points: List[Tuple[float, float]] = [] + span = x1 - x0 + if span <= 0: + return segment_points + + for step in range(1, self.CURVE_SAMPLES + 1): + t = step / (self.CURVE_SAMPLES + 1) + t2 = t * t + t3 = t2 * t + h00 = 2 * t3 - 3 * t2 + 1 + h10 = t3 - 2 * t2 + t + h01 = -2 * t3 + 3 * t2 + h11 = t3 - t2 + x = x0 + t * span + y = ( + h00 * y0 + + h10 * span * m0 + + h01 * y1 + + h11 * span * m1 + ) + segment_points.append((x, y)) + + return segment_points + + def _is_area_chart(self) -> bool: + return self.CHART_STYLE.lower() == 'area' + + def _draw_area_fill( + self, + image: Image.Image, + points: Sequence[Tuple[float, float]], + bounds: ChartBounds + ) -> None: + if not self._is_area_chart() or len(points) < 2: + return + polygon = self._build_area_polygon(points, bounds) + area_layer = Image.new('L', self.CANVAS_SIZE, color=self.AREA_GRADIENT_TOP) + gradient_patch = self._build_area_gradient(bounds) + area_layer.paste( + gradient_patch, + (int(round(bounds.x0)), int(round(bounds.y0))) + ) + mask = Image.new('L', self.CANVAS_SIZE, 0) + mask_draw = ImageDraw.Draw(mask) + mask_draw.polygon(self._round_points(polygon), fill=255) + image.paste(area_layer, mask=mask) + + def _build_area_gradient(self, bounds: ChartBounds) -> Image.Image: + width = max(1, int(math.ceil(bounds.width))) + height = max(1, int(math.ceil(bounds.height))) + top = max(0, min(255, self.AREA_GRADIENT_TOP)) + bottom = max(0, min(255, self.AREA_GRADIENT_BOTTOM)) + column = Image.new('L', (1, height), color=top) + for y in range(height): + ratio = y / max(1, height - 1) + value = int(round(top + (bottom - top) * ratio)) + column.putpixel((0, y), value) + return column.resize((width, height)) + + @staticmethod + def _build_area_polygon( + points: Sequence[Tuple[float, float]], + bounds: ChartBounds + ) -> List[Tuple[float, float]]: + polygon: List[Tuple[float, float]] = [(bounds.x0, bounds.y1)] + polygon.extend(points) + polygon.append((points[-1][0], bounds.y1)) + return polygon + + @staticmethod + def _round_points(points: Sequence[Tuple[float, float]]) -> List[Tuple[int, int]]: + return [(int(round(px)), int(round(py))) for px, py in points] + + def _draw_curve(self, draw: ImageDraw.ImageDraw, points: Sequence[Tuple[float, float]]) -> None: + if len(points) < 2: + return + draw.line(points, fill=self.CURVE_COLOR, width=3) + + def _draw_y_labels( + self, + draw: ImageDraw.ImageDraw, + bounds: ChartBounds, + font: ImageFont.ImageFont, + axis_scale: AxisScale + ) -> None: + for value in self._generate_tick_values(axis_scale): + ratio = (axis_scale.axis_max - value) / axis_scale.span + yy = bounds.y0 + ratio * bounds.height + label = f"{int(round(value)):,}" + bbox = draw.textbbox((0, 0), label, font=font) + draw.line([(bounds.x0 - 6, yy), (bounds.x0, yy)], fill=self.AXIS_COLOR, width=1) + draw.text((bounds.x0 - bbox[2] - 12, yy - (bbox[3] - bbox[1]) / 2), label, fill=self.AXIS_COLOR, font=font) + + def _draw_x_labels( + self, + draw: ImageDraw.ImageDraw, + bounds: ChartBounds, + font: ImageFont.ImageFont, + labels: Sequence[str] + ) -> None: + if not labels: + return + step = max(1, len(labels) // self.GRID_X_LABELS) + for idx in range(0, len(labels), step): + label = labels[idx] + bbox = draw.textbbox((0, 0), label, font=font) + px = bounds.x0 + (idx / max(1, len(labels) - 1)) * bounds.width + draw.text((px - (bbox[2] - bbox[0]) / 2, bounds.y1 + 8), label, fill=0, font=font) + + def _draw_max_band( + self, + draw: ImageDraw.ImageDraw, + bounds: ChartBounds, + axis_scale: AxisScale, + max_value: int + ) -> None: + if not axis_scale.span: + return + ratio = (axis_scale.axis_max - max_value) / axis_scale.span + yy = bounds.y0 + ratio * bounds.height + draw.line([(bounds.x0, yy), (bounds.x1, yy)], fill=self.AXIS_COLOR, width=1) + + def _draw_max_marker( + self, + draw: ImageDraw.ImageDraw, + points: Sequence[Tuple[float, float]], + values: Sequence[int], + font: ImageFont.ImageFont + ) -> None: + if not points or not values: + return + max_idx = max(range(len(values)), key=lambda idx: values[idx]) + px, py = points[max_idx] + draw.ellipse( + ( + px - self.MAX_MARKER_RADIUS, + py - self.MAX_MARKER_RADIUS, + px + self.MAX_MARKER_RADIUS, + py + self.MAX_MARKER_RADIUS + ), + outline=self.AXIS_COLOR, + width=2, + fill=255 + ) + inner_radius = max(2, self.MAX_MARKER_RADIUS // 3) + draw.ellipse( + (px - inner_radius, py - inner_radius, px + inner_radius, py + inner_radius), + fill=self.CURVE_COLOR + ) + label = f"{values[max_idx]:,}" + bbox = draw.textbbox((0, 0), label, font=font) + text_width = bbox[2] - bbox[0] + offset = 12 if px < (self.CANVAS_SIZE[0] - 120) else -text_width - 12 + draw.text((px + offset, py - (bbox[3] - bbox[1]) / 2), label, fill=0, font=font) + + def _draw_legend( + self, + draw: ImageDraw.ImageDraw, + bounds: ChartBounds, + font: ImageFont.ImageFont, + stats: Tuple[int, int, float], + total: int + ) -> None: + min_val, max_val, _ = stats + legend = f"min {min_val:,} · max {max_val:,} · total {total:,}" + draw.text((bounds.x0, bounds.y1 + 40), legend, fill=self.AXIS_COLOR, font=font) + + def _draw_caption( + self, + draw: ImageDraw.ImageDraw, + bounds: ChartBounds, + font: ImageFont.ImageFont + ) -> None: + caption = getattr(self, 'CAPTION_TEXT', None) + if not caption: + return + bbox = draw.textbbox((0, 0), caption, font=font) + width = bbox[2] - bbox[0] + x = bounds.x1 - width + y = bounds.y1 + 40 + draw.text((x, y), caption, fill=self.AXIS_COLOR, font=font) + + def _calculate_axis_scale(self, min_value: int, max_value: int, ticks: int = 5) -> AxisScale: + if max_value == min_value: + max_value += 1 + span = max_value - min_value + nice_steps = (1, 2, 2.5, 5, 10) + base_power = max(math.floor(math.log10(max(max_value, 1))) - 1, 0) + base_unit = max(10 ** base_power, 1) + step = nice_steps[-1] * base_unit + desired_ticks = max(ticks, self.GRID_Y_STEPS) + span = span if span > 0 else step + + for candidate in nice_steps: + candidate_step = int(math.ceil(candidate * base_unit)) + ticks_needed = math.ceil(span / candidate_step) + if ticks_needed <= desired_ticks + 2: + step = candidate_step + break + + axis_min = math.floor(min_value / step) * step + axis_max = math.ceil(max_value / step) * step + if axis_max == axis_min: + axis_max = axis_min + step + return AxisScale(axis_min, axis_max, step) + + def _generate_tick_values(self, axis_scale: AxisScale) -> List[float]: + if axis_scale.step <= 0: + return [axis_scale.axis_min, axis_scale.axis_max] + ticks: List[float] = [] + current = axis_scale.axis_min + while current <= axis_scale.axis_max + 1e-6: + ticks.append(current) + current += axis_scale.step + if ticks[-1] != axis_scale.axis_max: + ticks.append(axis_scale.axis_max) + return ticks + + +class PhotographicPlugin(PluginBase): + """Base class for photograph-oriented plugins with enhanced grading.""" + + def get_adjustment_settings(self) -> Tuple[bool, float, float]: + return (True, 1.2, 0.05) + + def apply_adjustments(self, image: Image.Image) -> Image.Image: + if not bool(getattr(config, 'PHOTO_GRADING_ENABLED', True)): + return image + + adjusted = super().apply_adjustments(image) + return self.apply_eink_grading( + adjusted, + shadow_pivot=180, + shadow_gamma=0.65, + brightness=1.1, + contrast_cutoff=0.05 + ) diff --git a/trmnl_server/plugins/bing.py b/trmnl_server/plugins/bing.py new file mode 100644 index 0000000..2f60d45 --- /dev/null +++ b/trmnl_server/plugins/bing.py @@ -0,0 +1,106 @@ +import asyncio +import logging +import os +from io import BytesIO +from typing import Tuple + +import httpx +from PIL import Image, ImageOps + +from .base import PhotographicPlugin, PluginOutput + +logger = logging.getLogger(__name__) + + +class BingWallpaperPlugin(PhotographicPlugin): + """Download the latest Bing wallpaper and adapt it for TRMNL displays.""" + + BASENAME = "bing_wallpaper" + OUTPUT_SUBDIR = "bing" + REGISTRY_ORDER = 20 + REFRESH_INTERVAL = 3600 + DISPLAY_NAME = "Bing Wallpaper" + + API_URL = "https://www.bing.com/HPImageArchive.aspx" + BASE_URL = "https://www.bing.com" + + def __init__(self, market: str = "en-US"): + super().__init__() + self.market = market + + async def run(self, **kwargs): + """Fetch, process, and persist the latest Bing wallpaper image.""" + market = kwargs.get("market", self.market) + target_size: Tuple[int, int] = kwargs.get("target_size", (800, 480)) + output_dir = kwargs.get("output_dir", "web") + os.makedirs(output_dir, exist_ok=True) + + try: + async with httpx.AsyncClient(timeout=20) as client: + metadata = await self._fetch_metadata(client, market) + if not metadata: + logger.warning("No Bing metadata returned") + return None + + image_url = metadata.get("url") or metadata.get("urlbase") + if not image_url: + logger.warning("Bing metadata missing URL") + return None + + full_url = image_url + if not full_url.startswith("http"): + full_url = f"{self.BASE_URL}{image_url}" + + logger.info("Downloading Bing wallpaper from %s", full_url) + image_bytes = await self._download_image(client, full_url) + processed = await asyncio.to_thread(self._prepare_image, image_bytes, target_size) + + output = await asyncio.to_thread( + self.save_assets, + processed, + output_dir, + 'bing_wallpaper', + dither_mode='floyd-steinberg' + ) + logger.info( + "Saved Bing wallpaper assets to %s and %s", + output.monochrome_path, + output.grayscale_path + ) + return output + except Exception as exc: + logger.error("Failed to fetch Bing wallpaper: %s", exc) + raise + + def get_content_ttl(self) -> int: + return 43200 # 12 hours + + async def _fetch_metadata(self, client: httpx.AsyncClient, market: str) -> dict: + params = { + "format": "js", + "idx": 0, + "n": 1, + "mkt": market + } + response = await client.get(self.API_URL, params=params) + response.raise_for_status() + data = response.json() + images = data.get("images", []) + return images[0] if images else {} + + async def _download_image(self, client: httpx.AsyncClient, url: str) -> bytes: + response = await client.get(url) + response.raise_for_status() + return response.content + + def _prepare_image(self, data: bytes, target_size: Tuple[int, int]) -> Image.Image: + with Image.open(BytesIO(data)) as img: + rgb_image = img.convert("RGB") + fitted = ImageOps.fit( + rgb_image, + target_size, + method=Image.Resampling.LANCZOS, + bleed=0.0, + centering=(0.5, 0.5) + ) + return fitted.convert("L") diff --git a/trmnl_server/plugins/calibration.py b/trmnl_server/plugins/calibration.py new file mode 100644 index 0000000..792c5cb --- /dev/null +++ b/trmnl_server/plugins/calibration.py @@ -0,0 +1,241 @@ +from __future__ import annotations + +from os import makedirs +from typing import Optional, Sequence, Tuple + +from PIL import Image, ImageDraw + +from .base import PluginBase, PluginOutput +from .. import config +from ..utils import get_available_dither_modes, get_effective_grayscale_palette_levels, save_display_assets + + +def _draw_labeled_patch( + draw: ImageDraw.ImageDraw, + *, + box: Tuple[int, int, int, int], + fill: Tuple[int, int, int], + label: str, + font +) -> None: + draw.rectangle(box, fill=fill) + x0, y0, x1, _y1 = box + draw.rectangle((x0, y0, x1, y0 + 20), fill=(255, 255, 255)) + draw.text((x0 + 4, y0 + 2), label, fill=(0, 0, 0), font=font) + + +def _render_calibration_canvas( + size: Tuple[int, int], + *, + title: str, + font_title, + font_small, + strip_panel_levels: Optional[Sequence[int]] = None, + strip_digital_levels: Optional[Sequence[int]] = None +) -> Image.Image: + width, _height = size + image = Image.new('RGB', size, color=(255, 255, 255)) + draw = ImageDraw.Draw(image) + + draw.text((18, 14), title, fill=(0, 0, 0), font=font_title) + + # Grayscale gradient ramp + ramp_top = 60 + ramp_height = 40 + for x in range(width): + v = int(round((x / max(width - 1, 1)) * 255)) + draw.line((x, ramp_top, x, ramp_top + ramp_height), fill=(v, v, v)) + draw.rectangle((0, ramp_top, width - 1, ramp_top + ramp_height), outline=(0, 0, 0)) + + # Tick marks every 32 values + for v in range(0, 256, 32): + x = int(round((v / 255.0) * (width - 1))) + draw.line((x, ramp_top + ramp_height + 2, x, ramp_top + ramp_height + 12), fill=(0, 0, 0)) + draw.text((x + 2, ramp_top + ramp_height + 10), str(v), fill=(0, 0, 0), font=font_small) + + # Solid reference strip using the *effective* palette levels. + # This makes it easy to see what the server is actually sending after tone-curve + # compensation (often not 0/85/170/255 in digital space). + strip_top = 122 + strip_height = 20 + strip_x0 = 18 + strip_x1 = width - 18 + strip_gap = 8 + block_w = int((strip_x1 - strip_x0 - (3 * strip_gap)) / 4) + + if strip_panel_levels is None or strip_digital_levels is None: + panel_levels, digital_levels = get_effective_grayscale_palette_levels(4) + else: + panel_levels = list(strip_panel_levels) + digital_levels = list(strip_digital_levels) + + for idx, value in enumerate(digital_levels[:4]): + x0 = strip_x0 + idx * (block_w + strip_gap) + x1 = x0 + block_w + box = (x0, strip_top, x1, strip_top + strip_height) + draw.rectangle(box, fill=(value, value, value), outline=(0, 0, 0)) + text_color = (255, 255, 255) if value < 96 else (0, 0, 0) + panel_value = panel_levels[idx] if idx < len(panel_levels) else value + draw.text((x0 + 4, strip_top + 2), f"{value}/{panel_value}", fill=text_color, font=font_small) + + # Color patches (helps visualize how RGB collapses to grayscale) + patches_top = 150 + patch_w = 190 + patch_h = 78 + gap = 10 + colors: Sequence[Tuple[str, Tuple[int, int, int]]] = ( + ("RED", (255, 0, 0)), + ("GREEN", (0, 255, 0)), + ("BLUE", (0, 0, 255)), + ("CYAN", (0, 255, 255)), + ("MAGENTA", (255, 0, 255)), + ("YELLOW", (255, 255, 0)), + ("ORANGE", (255, 165, 0)), + ("PURPLE", (128, 0, 128)), + ) + + for idx, (label, color) in enumerate(colors): + col = idx % 4 + row = idx // 4 + x0 = 18 + col * (patch_w + gap) + y0 = patches_top + row * (patch_h + gap) + x1 = x0 + patch_w + y1 = y0 + patch_h + _draw_labeled_patch(draw, box=(x0, y0, x1, y1), fill=color, label=label, font=font_small) + draw.rectangle((x0, y0, x1, y1), outline=(0, 0, 0)) + + # Fine detail patterns + patterns_top = 330 + pattern_h = 140 + pattern_w = 250 + + def box_at(index: int) -> Tuple[int, int, int, int]: + x0 = 18 + index * (pattern_w + 10) + y0 = patterns_top + return (x0, y0, x0 + pattern_w, y0 + pattern_h) + + # 1px vertical lines + x0, y0, x1, y1 = box_at(0) + draw.rectangle((x0, y0, x1, y1), fill=(255, 255, 255), outline=(0, 0, 0)) + draw.text((x0 + 4, y0 + 2), "1px vertical", fill=(0, 0, 0), font=font_small) + for x in range(x0 + 8, x1 - 8): + if (x - (x0 + 8)) % 2 == 0: + draw.line((x, y0 + 24, x, y1 - 8), fill=(0, 0, 0)) + + # 1px diagonal + x0, y0, x1, y1 = box_at(1) + draw.rectangle((x0, y0, x1, y1), fill=(255, 255, 255), outline=(0, 0, 0)) + draw.text((x0 + 4, y0 + 2), "diagonal", fill=(0, 0, 0), font=font_small) + for i in range(0, min(x1 - x0, y1 - y0) - 40): + if i % 2 == 0: + draw.point((x0 + 20 + i, y0 + 30 + i), fill=(0, 0, 0)) + + # Checkerboard 2x2 + x0, y0, x1, y1 = box_at(2) + draw.rectangle((x0, y0, x1, y1), fill=(255, 255, 255), outline=(0, 0, 0)) + draw.text((x0 + 4, y0 + 2), "checker 2x2", fill=(0, 0, 0), font=font_small) + cell = 6 + for yy in range(y0 + 26, y1 - 8, cell): + for xx in range(x0 + 8, x1 - 8, cell): + if (((xx - (x0 + 8)) // cell) + ((yy - (y0 + 26)) // cell)) % 2 == 0: + draw.rectangle((xx, yy, xx + cell - 1, yy + cell - 1), fill=(0, 0, 0)) + + return image + + +class CalibrationPlugin(PluginBase): + AUTO_REGISTER: bool = config.CALIBRATION_PLUGIN_ENABLED + DISPLAY_NAME: str = 'Calibration' + BASENAME: str = 'calibration' + OUTPUT_SUBDIR: Optional[str] = 'calibration' + REGISTRY_ORDER: int = 5 + VARIANT_ROOT_NAME: str = 'calibration' + PRIMARY_DITHER_MODE: str = 'floyd-steinberg' + PRIMARY_VARIANT: str = '' + + def prepare_image(self, image: Image.Image) -> Image.Image: + """Calibration output must bypass any plugin-specific grading/tweaks.""" + return image.convert('L') if image.mode != 'L' else image + + def apply_adjustments(self, image: Image.Image) -> Image.Image: + """No-op: calibration images should remain ungraded.""" + return image + + async def run(self, **kwargs) -> Optional[PluginOutput]: + output_dir = str(kwargs.get('output_dir') or '').strip() or 'web' + makedirs(output_dir, exist_ok=True) + + font_title = self.load_font(34) + font_small = self.load_font(14) + + primary_variant = (self.PRIMARY_VARIANT or '').strip().lower() or self.PRIMARY_DITHER_MODE + + plugin_label = self.get_display_name() + title_prefix = f"TRMNL {plugin_label}" if plugin_label else "TRMNL Calibration" + + if primary_variant == 'unquantized': + title = f"{title_prefix} — unquantized (raw, no tone curve/dither)" + elif primary_variant == 'none': + title = f"{title_prefix} — none (tone curve, no dithering)" + else: + title = f"{title_prefix} — {primary_variant} (tone curve + dithering)" + + base = _render_calibration_canvas( + (800, 480), + title=title, + font_title=font_title, + font_small=font_small, + strip_panel_levels=[0, 85, 170, 255] if primary_variant == 'unquantized' else None, + strip_digital_levels=[0, 85, 170, 255] if primary_variant == 'unquantized' else None + ) + + if primary_variant == 'unquantized': + basename = f"{self.VARIANT_ROOT_NAME}_unquantized" + bmp_path, png_path = save_display_assets( + base, + output_dir, + basename, + dither_mode='none', + grayscale_levels=None + ) + return PluginOutput(monochrome_path=bmp_path, grayscale_path=png_path) + + basename = f"{self.VARIANT_ROOT_NAME}_{primary_variant}".replace('-', '_') + bmp_path, png_path = save_display_assets( + base, + output_dir, + basename, + dither_mode=primary_variant + ) + return PluginOutput(monochrome_path=bmp_path, grayscale_path=png_path) + + +class CalibrationNonePlugin(CalibrationPlugin): + """Calibration plugin variant that returns the non-dithered image for rotation.""" + + DISPLAY_NAME: str = 'Calibration (No Dither)' + BASENAME: str = 'calibration_none' + OUTPUT_SUBDIR: Optional[str] = 'calibration' + REGISTRY_ORDER: int = 6 + PRIMARY_DITHER_MODE: str = 'none' + + +class CalibrationUnquantizedPlugin(CalibrationPlugin): + """Calibration plugin variant that returns the unquantized (8-bit) image for rotation.""" + + DISPLAY_NAME: str = 'Calibration (Unquantized)' + BASENAME: str = 'calibration_unquantized' + OUTPUT_SUBDIR: Optional[str] = 'calibration' + REGISTRY_ORDER: int = 7 + PRIMARY_VARIANT: str = 'unquantized' + + +class CalibrationPerceptualPlugin(CalibrationPlugin): + """Calibration plugin variant that returns the unquantized (8-bit) image for rotation.""" + + DISPLAY_NAME: str = 'Calibration (Perceptual)' + BASENAME: str = 'calibration_perceptual' + OUTPUT_SUBDIR: Optional[str] = 'calibration' + REGISTRY_ORDER: int = 7 + PRIMARY_VARIANT: str = 'perceptual' + PRIMARY_DITHER_MODE: str = 'perceptual' diff --git a/trmnl_server/plugins/charts.py b/trmnl_server/plugins/charts.py new file mode 100644 index 0000000..47a6de8 --- /dev/null +++ b/trmnl_server/plugins/charts.py @@ -0,0 +1,80 @@ +import logging +from typing import List, Sequence, Tuple + +import httpx + +from .base import ChartPlugin + +logger = logging.getLogger(__name__) + +# Node-RED API endpoints for local web stats +PAGEVIEWS_URL = "http://192.168.1.100:1880/api/site/pageviews" +VISITORS_URL = "http://192.168.1.100:1880/api/site/visitors" + +# Node-RED API endpoint for total power consumption +TOTAL_POWER_URL = "http://192.168.1.100:1880/api/power/all" + + +async def _fetch_series(url: str) -> List[Tuple[str, int]]: + async with httpx.AsyncClient(timeout=10) as client: + response = await client.get(url) + response.raise_for_status() + payload = response.json() + entries = payload.get('data', []) + parsed: List[Tuple[str, int]] = [] + for entry in entries: + name = str(entry.get('name', '')).zfill(2) + try: + value = int(entry.get('value', 0)) + except (TypeError, ValueError): + value = 0 + parsed.append((name, value)) + return parsed + + +class PageviewsPlugin(ChartPlugin): + """Render hourly pageviews chart.""" + + DISPLAY_NAME = "Web Stats - Pageviews" + SERIES_LABEL = "Pageviews" + BASENAME = "webstats_pageviews" + OUTPUT_SUBDIR = "webstats" + REGISTRY_ORDER = 60 + REFRESH_INTERVAL = 1800 + CHART_STYLE = "area" + CAPTION_TEXT = "Estimated pageviews - last 24h" + + async def _fetch_series(self) -> Sequence[Tuple[str, int]]: + return await _fetch_series(PAGEVIEWS_URL) + + +class VisitorsPlugin(ChartPlugin): + """Render hourly visitors chart.""" + + DISPLAY_NAME = "Web Stats - Visitors" + SERIES_LABEL = "Visitors" + BASENAME = "webstats_visitors" + OUTPUT_SUBDIR = "webstats" + REGISTRY_ORDER = 70 + REFRESH_INTERVAL = 1800 + CHART_STYLE = "area" + CAPTION_TEXT = "Estimated unique visitors - last 24h" + + async def _fetch_series(self) -> Sequence[Tuple[str, int]]: + return await _fetch_series(VISITORS_URL) + + +class TotalPowerPlugin(ChartPlugin): + """Render the total power chart from the local power feed.""" + + DISPLAY_NAME = "Power - Total" + SERIES_LABEL = "Total Power (W)" + BASENAME = "power_total" + OUTPUT_SUBDIR = "power" + REGISTRY_ORDER = 80 + REFRESH_INTERVAL = 1800 + CHART_STYLE = "area" + CAPTION_TEXT = "All smart outlets combined - last 24h" + + async def _fetch_series(self) -> Sequence[Tuple[str, int]]: + return await _fetch_series(TOTAL_POWER_URL) diff --git a/trmnl_server/plugins/hn.py b/trmnl_server/plugins/hn.py new file mode 100644 index 0000000..08d9a0b --- /dev/null +++ b/trmnl_server/plugins/hn.py @@ -0,0 +1,147 @@ +import asyncio +import logging +import os +import re +from html import unescape +from html.parser import HTMLParser +from typing import List, Optional, Tuple + +import feedparser +import httpx +from PIL import Image, ImageDraw, ImageFont + +from .base import PluginBase, PluginOutput + +logger = logging.getLogger(__name__) + + +class HNPlugin(PluginBase): + """Render an e-ink friendly snapshot of Hacker News front page headlines.""" + + BASENAME = "hackernews" + OUTPUT_SUBDIR = "news" + REGISTRY_ORDER = 40 + REFRESH_INTERVAL = 600 + DISPLAY_NAME = "Hacker News" + + FEED_URL = "https://hnrss.org/frontpage" + + def get_content_ttl(self) -> int: + return 1800 # 30 minutes + + async def run(self, **kwargs) -> Optional[PluginOutput]: + target_size = kwargs.get("target_size", (800, 480)) + max_items = kwargs.get("max_items", 10) + output_dir = kwargs.get("output_dir", "web") + os.makedirs(output_dir, exist_ok=True) + + try: + entries = await self._fetch_entries(max_items) + if not entries: + logger.warning("HN feed returned no entries") + return None + + rendered = await asyncio.to_thread(self._render_entries, entries, target_size) + output = await asyncio.to_thread(self.save_assets, rendered, output_dir, 'hackernews') + logger.info( + "Saved Hacker News assets to %s and %s", + output.monochrome_path, + output.grayscale_path + ) + return output + except Exception as exc: + logger.error("Failed to render HN feed: %s", exc) + raise + + async def _fetch_entries(self, max_items: int) -> List[dict]: + async with httpx.AsyncClient(timeout=10) as client: + response = await client.get(self.FEED_URL) + response.raise_for_status() + payload = response.content + feed = feedparser.parse(payload) + entries = [] + for entry in feed.entries[:max_items]: + points, comments = self._parse_metadata(entry) + entries.append({ + 'title': entry.get('title', 'Untitled'), + 'points': points, + 'comments': comments + }) + return entries + + def _parse_metadata(self, entry) -> Tuple[int, int]: + points = 0 + comments = 0 + summary = entry.get('summary', '') + text = self._strip_html(summary) + points_match = re.search(r'Points:\s*(\d+)', text) + comments_match = re.search(r'#\s*Comments:\s*(\d+)', text) + if points_match: + points = int(points_match.group(1)) + if comments_match: + comments = int(comments_match.group(1)) + return points, comments + + def _strip_html(self, html: str) -> str: + parser = _HTMLStripper() + parser.feed(html or '') + return unescape(parser.get_text()) + + def _render_entries(self, entries: List[dict], target_size) -> Image.Image: + canvas = Image.new('L', target_size, color=255) + draw = ImageDraw.Draw(canvas) + + title_font = self.load_font(28) + item_font = self.load_font(20) + meta_font = self.load_font(16) + + draw.text((30, 20), "Hacker News", fill=0, font=title_font) + draw.line([(30, 60), (target_size[0] - 30, 60)], fill=0, width=1) + + y = 80 + line_height = item_font.size + 10 + + for idx, entry in enumerate(entries, start=1): + title = f"{entry['title']}" + wrapped = self._wrap_text(title, item_font, target_size[0] - 60) + for line in wrapped: + draw.text((40, y), line, fill=0, font=item_font) + y += line_height + + meta = f"{entry['points']} points | {entry['comments']} comments" + draw.text((40, y), meta, fill=80, font=meta_font) + y += meta_font.size + 12 + + if y > target_size[1] - line_height: + break + + return canvas + + def _wrap_text(self, text: str, font: ImageFont.ImageFont, max_width: int) -> List[str]: + words = text.split() + lines: List[str] = [] + current: List[str] = [] + + for word in words: + test_line = " ".join(current + [word]).strip() + if font.getlength(test_line) <= max_width: + current.append(word) + else: + if current: + lines.append(" ".join(current)) + current = [word] + if current: + lines.append(" ".join(current)) + return lines + + +class _HTMLStripper(HTMLParser): + def __init__(self): + super().__init__() + self.parts: List[str] = [] + + def handle_data(self, data: str) -> None: + self.parts.append(data) + + def get_text(self) -> str: + return "\n".join(self.parts) \ No newline at end of file diff --git a/trmnl_server/plugins/random_image.py b/trmnl_server/plugins/random_image.py new file mode 100644 index 0000000..bab146d --- /dev/null +++ b/trmnl_server/plugins/random_image.py @@ -0,0 +1,91 @@ +import asyncio +import logging +import os +import random +from pathlib import Path +from typing import Optional, Sequence, Tuple + +from PIL import Image, ImageOps + +from .base import PhotographicPlugin, PluginOutput + +logger = logging.getLogger(__name__) + +DEFAULT_IMAGE_ROOT = Path(os.environ.get('HOME', '~')).expanduser() / 'Pictures' / 'Samurai Jack' +SUPPORTED_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.bmp', '.gif'} + + +class RandomImagePlugin(PhotographicPlugin): + """Select a random image from disk, adapt it, and add it to the rotation.""" + + BASENAME = "random_image" + OUTPUT_SUBDIR = "random" + REGISTRY_ORDER = 50 + REFRESH_INTERVAL = 1800 + DISPLAY_NAME = "Random Image" + + def get_content_ttl(self) -> int: + return 3600 # 60 minutes + + async def run(self, **kwargs) -> Optional[PluginOutput]: + target_size = kwargs.get('target_size', (800, 480)) + output_dir = kwargs.get('output_dir', 'web') + source_root = Path(kwargs.get('image_root', DEFAULT_IMAGE_ROOT)) + return await asyncio.to_thread( + self._run_sync, + target_size, + output_dir, + source_root + ) + + def _run_sync( + self, + target_size: Sequence[int], + output_dir: str, + source_root: Path + ) -> Optional[PluginOutput]: + os.makedirs(output_dir, exist_ok=True) + + if not source_root.exists(): + logger.warning("Random image root %s does not exist", source_root) + return None + + image_path = self._pick_random_image(source_root) + if not image_path: + logger.warning("No images found under %s", source_root) + return None + + adapted = self._prepare_image(image_path, target_size) + output = self.save_assets( + adapted, + output_dir, + 'random_image', + dither_mode='floyd-steinberg' + ) + logger.info( + "Random image assets saved to %s and %s", + output.monochrome_path, + output.grayscale_path + ) + return output + + def _pick_random_image(self, root: Path) -> Optional[Path]: + candidates = [ + path for path in root.rglob('*') + if path.is_file() and path.suffix.lower() in SUPPORTED_EXTENSIONS + ] + if not candidates: + return None + return random.choice(candidates) + + def _prepare_image(self, image_path: Path, target_size: Sequence[int]) -> Image.Image: + with Image.open(image_path) as img: + rgb_image = img.convert('RGB') + fitted = ImageOps.fit( + rgb_image, + target_size, + method=Image.Resampling.LANCZOS, + bleed=0.0, + centering=(0.5, 0.5) + ) + return fitted.convert('L') diff --git a/trmnl_server/plugins/weather.py b/trmnl_server/plugins/weather.py new file mode 100644 index 0000000..ef31c0b --- /dev/null +++ b/trmnl_server/plugins/weather.py @@ -0,0 +1,234 @@ +import asyncio +from typing import Any, Dict, List + +import httpx +from PIL import Image, ImageDraw + +from .base import PluginBase, PluginOutput +import logging +from .. import config + +logger = logging.getLogger(__name__) + +class WeatherPlugin(PluginBase): + """ + Plugin to fetch weather data and generate a Braun-inspired minimalist visualization. + Uses only black and white with clean lines and excellent typography. + """ + + BASENAME = "weather" + OUTPUT_SUBDIR = "weather" + SET_PRIMARY = True + REGISTRY_ORDER = 10 + DISPLAY_NAME = "Weather" + + def __init__(self): + super().__init__() + # Glyphs temporarily disabled — keep keys for compatibility + self.icons = { + 'sun': '', + 'cloud': '', + 'rain': '', + 'wind': '', + 'thermometer': '', + 'droplet': '', + } + + async def run(self, **kwargs): + """ + Fetch weather and generate Braun-inspired black and white image. + kwargs can contain 'latitude' and 'longitude'. + """ + lat = kwargs.get('latitude', 38.7223) # Default: Lisbon, Portugal + lon = kwargs.get('longitude', -9.1393) + output_dir = kwargs.get('output_dir', config.ASSETS_ROOT) + + logger.info(f"Running WeatherPlugin for lat={lat}, lon={lon}") + + try: + data = await self._fetch_weather_data(lat, lon) + + current_weather = data.get('current_weather', {}) + current_temp = current_weather.get('temperature', 'N/A') + current_windspeed = current_weather.get('windspeed', 'N/A') + + hourly = data.get('hourly', {}) + times = hourly.get('time', [])[:24] # Next 24 hours + temps = hourly.get('temperature_2m', [])[:24] + precip = hourly.get('precipitation', [])[:24] + + if not times or not temps: + logger.error("No weather data found") + return + + # Calculate temperature range + min_temp = min(temps) + max_temp = max(temps) + temp_range = max_temp - min_temp if max_temp != min_temp else 1 + + # Calculate precipitation range + max_precip = max(precip) if precip else 0 + + image = await asyncio.to_thread( + self._render_weather_panel, + current_temp, + current_windspeed, + times, + temps, + precip, + min_temp, + max_temp, + max_precip + ) + output = await asyncio.to_thread(self.save_assets, image, output_dir, 'weather') + logger.info( + "Weather plugin execution complete. Assets saved to %s and %s", + output.monochrome_path, + output.grayscale_path + ) + return output + + except Exception as e: + logger.error(f"Error running WeatherPlugin: {e}") + raise + + async def _fetch_weather_data(self, lat: float, lon: float) -> Dict[str, Any]: + url = ( + "https://api.open-meteo.com/v1/forecast" + f"?latitude={lat}&longitude={lon}&hourly=temperature_2m,precipitation¤t_weather=true" + ) + async with httpx.AsyncClient(timeout=10) as client: + response = await client.get(url) + response.raise_for_status() + return response.json() + + def _render_weather_panel( + self, + current_temp: Any, + current_windspeed: Any, + times: List[str], + temps: List[float], + precip: List[float], + min_temp: float, + max_temp: float, + max_precip: float + ) -> Image.Image: + img = Image.new('RGB', (800, 480), color='white') + draw = ImageDraw.Draw(img) + + title_font = self.load_font(32) + temp_font = self.load_font(96) + label_font = self.load_font(18) + small_font = self.load_font(14) + tick_font = self.load_font(11) + # Use the project's default font for icons (Space Grotesk) + icon_font = self.load_font(24) + + margin = 30 + y_pos = margin + + # Title (glyphs removed) — align at left margin + draw.text((margin, y_pos), "WEATHER", fill='black', font=title_font) + y_pos += 50 + + draw.line([(margin, y_pos), (800 - margin, y_pos)], fill='black', width=1) + y_pos += 25 + + draw.text((margin, y_pos), f"{current_temp}°", fill='black', font=temp_font) + + wind_icon_x = margin + 180 + # Wind glyph removed; draw only the text aligned where the icon used to be + draw.text((wind_icon_x, y_pos + 73), f"{current_windspeed} km/h", + fill='black', font=small_font) + y_pos += 120 + + draw.line([(margin, y_pos), (800 - margin, y_pos)], fill='black', width=1) + y_pos += 25 + + chart_y = y_pos + chart_height = 200 + chart_width = 350 + + chart1_x = margin + draw.text((chart1_x, chart_y - 20), "TEMPERATURE", fill='black', font=label_font) + self._draw_braun_bar_chart( + draw, chart1_x, chart_y, chart_width, chart_height, + temps[::2], times[::2], min_temp, max_temp, + tick_font + ) + + chart2_x = margin + chart_width + 40 + # Droplet glyph removed; align label at chart start + draw.text((chart2_x, chart_y - 20), "PRECIPITATION", fill='black', font=label_font) + self._draw_braun_bar_chart( + draw, chart2_x, chart_y, chart_width, chart_height, + precip[::2], times[::2], 0, max_precip if max_precip > 0 else 1, + tick_font + ) + + return img + + def _draw_braun_bar_chart(self, draw, x, y, width, height, values, labels, min_val, max_val, font): + """ + Draw a Braun-inspired minimalist bar chart. + - Thin, clean lines + - No fills, only outlines + - Minimal labels + - Grid lines for readability + """ + # Draw thin axes + draw.line([(x, y + height), (x + width, y + height)], fill='black', width=1) + draw.line([(x, y), (x, y + height)], fill='black', width=1) + + # Draw subtle horizontal grid lines (Braun style) + for i in range(1, 4): + grid_y = y + (i * height / 4) + draw.line([(x, grid_y), (x + width, grid_y)], fill='#CCCCCC', width=1) + + # Calculate bar width + num_bars = len(values) + if num_bars == 0: + return + + bar_spacing = 3 + bar_width = (width - (num_bars + 1) * bar_spacing) / num_bars + + # Draw bars - Braun style: outlined rectangles, no fill + val_range = max_val - min_val if max_val != min_val else 1 + for i, val in enumerate(values): + bar_x = x + bar_spacing + i * (bar_width + bar_spacing) + bar_height = ((val - min_val) / val_range) * height + bar_y = y + height - bar_height + + # Draw outlined bar (no fill for Braun aesthetic) + if bar_height > 2: # Only draw if visible + draw.rectangle( + [(bar_x, bar_y), (bar_x + bar_width, y + height)], + fill='black', # Solid black bars for contrast + outline='black', + width=1 + ) + + # Draw minimal x-axis labels (every 4th) + for i in range(0, len(labels), 4): + if i < len(labels): + label_x = x + bar_spacing + i * (bar_width + bar_spacing) + time_str = labels[i].split('T')[1][:2] # Just hour + bbox = draw.textbbox((0, 0), time_str, font=font) + text_width = bbox[2] - bbox[0] + draw.text((label_x - text_width/2 + bar_width/2, y + height + 5), + time_str, fill='black', font=font) + + # Draw minimal y-axis scale (3 ticks) - closer to axis + for i in range(3): + tick_val = min_val + (val_range * i / 2) + tick_y = y + height - (i / 2) * height + # Small tick mark + draw.line([(x - 3, tick_y), (x, tick_y)], fill='black', width=1) + # Value label - positioned closer to axis + label_text = f"{tick_val:.0f}" + bbox = draw.textbbox((0, 0), label_text, font=font) + text_width = bbox[2] - bbox[0] + draw.text((x - text_width - 8, tick_y - 6), label_text, fill='black', font=font) + + diff --git a/trmnl_server/plugins/xkcd.py b/trmnl_server/plugins/xkcd.py new file mode 100644 index 0000000..fdae32b --- /dev/null +++ b/trmnl_server/plugins/xkcd.py @@ -0,0 +1,118 @@ +import asyncio +import logging +import os +from io import BytesIO +from typing import Optional + +import httpx +from PIL import Image, ImageDraw, ImageFont, ImageOps + +from .base import PluginBase, PluginOutput + +logger = logging.getLogger(__name__) + + +class XKCDPlugin(PluginBase): + """Fetch the current XKCD comic and render a summary panel.""" + + BASENAME = "xkcd" + OUTPUT_SUBDIR = "xkcd" + REGISTRY_ORDER = 30 + REFRESH_INTERVAL = 3600 + DISPLAY_NAME = "XKCD" + + INFO_URL = "https://xkcd.com/info.0.json" + + async def run(self, **kwargs) -> Optional[PluginOutput]: + """Download the comic of the day, render metadata, and store it as BMP.""" + target_size = kwargs.get("target_size", (800, 480)) + output_dir = kwargs.get("output_dir", "web") + os.makedirs(output_dir, exist_ok=True) + + try: + async with httpx.AsyncClient(timeout=15) as client: + metadata = await self._fetch_metadata(client) + if not metadata: + logger.warning("No XKCD metadata available") + return None + image_bytes = await self._download_image(client, metadata.get("img")) + comic_image = await asyncio.to_thread(self._load_image, image_bytes) + rendered = await asyncio.to_thread(self._render_panel, comic_image, metadata, target_size) + output = await asyncio.to_thread(self.save_assets, rendered, output_dir, 'xkcd') + logger.info( + "Saved XKCD assets to %s and %s", + output.monochrome_path, + output.grayscale_path + ) + return output + except Exception as exc: + logger.error("Failed to fetch XKCD comic: %s", exc) + raise + + def get_content_ttl(self) -> int: + return 43200 # 12 hours; comics update daily + + async def _fetch_metadata(self, client: httpx.AsyncClient) -> dict: + response = await client.get(self.INFO_URL) + response.raise_for_status() + return response.json() + + async def _download_image(self, client: httpx.AsyncClient, url: Optional[str]) -> bytes: + if not url: + raise ValueError("XKCD metadata missing image URL") + response = await client.get(url) + response.raise_for_status() + return response.content + + def _load_image(self, data: bytes) -> Image.Image: + return Image.open(BytesIO(data)).convert("RGB") + + def _render_panel(self, comic: Image.Image, metadata: dict, target_size) -> Image.Image: + base_canvas = Image.new("L", target_size, color=255) + base_draw = ImageDraw.Draw(base_canvas) + + title = metadata.get("safe_title") or metadata.get("title", "XKCD") + alt_text = metadata.get("alt", "") + transcript = metadata.get("transcript", "") + + title_font = self.load_font(32) + body_font = self.load_font(18) + + max_comic_height = 280 + max_comic_width = target_size[0] - 60 + fitted = ImageOps.contain(comic, (max_comic_width, max_comic_height)) + fitted = fitted.convert("L") + + top_margin = 30 + comic_x = max(0, (target_size[0] - fitted.width) // 2) + base_canvas.paste(fitted, (comic_x, top_margin)) + draw = ImageDraw.Draw(base_canvas) + + text_y = top_margin + fitted.height + 20 + draw.text((30, text_y), title, fill=0, font=title_font) + text_y += title_font.size + 10 + + wrapped_alt = self._wrap_text(alt_text or transcript, body_font, target_size[0] - 60) + for line in wrapped_alt: + draw.text((30, text_y), line, fill=0, font=body_font) + text_y += body_font.size + 4 + + return base_canvas + + def _wrap_text(self, text: str, font: ImageFont.ImageFont, max_width: int): + words = text.split() + lines = [] + current = [] + + for word in words: + test_line = " ".join(current + [word]).strip() + width = font.getlength(test_line) + if width <= max_width: + current.append(word) + else: + if current: + lines.append(" ".join(current)) + current = [word] + if current: + lines.append(" ".join(current)) + return lines \ No newline at end of file diff --git a/trmnl_server/routes/__init__.py b/trmnl_server/routes/__init__.py new file mode 100644 index 0000000..a7b969a --- /dev/null +++ b/trmnl_server/routes/__init__.py @@ -0,0 +1,7 @@ +"""FastAPI routers for the TRMNL local server.""" + +from .api import router as api_router +from .images import router as image_router +from .pages import router as page_router + +__all__ = ['api_router', 'image_router', 'page_router'] diff --git a/trmnl_server/routes/api.py b/trmnl_server/routes/api.py new file mode 100644 index 0000000..555c7cf --- /dev/null +++ b/trmnl_server/routes/api.py @@ -0,0 +1,557 @@ +"""API routes for TRMNL local server.""" + +from __future__ import annotations + +from datetime import datetime, timedelta, timezone +from typing import Any, Dict, List, Optional +from urllib.parse import quote + +from hashlib import sha256 +from time import time +import psutil +from fastapi import APIRouter, Body, Header, Query, Request +from fastapi.responses import JSONResponse, Response + +from .. import config, models, utils +from ..services import plugins, state + +router = APIRouter() +logger = config.logger + + +def _serialize_device_payload(device_id: str) -> Dict[str, Any]: + profile = state.ensure_device_profile(device_id) + metrics = state.get_client_metrics(device_id) + device_state = state.get_device_state(device_id) + playlist = state.get_playlist_selection(device_id) + binding_name = state.get_device_playlist_binding_name(device_id) or state.DEFAULT_DEVICE_ID + current_entry_hash = device_state.get('last_entry_hash') + preview_url = device_state.get('current_preview_url') or f"/preview/{quote(device_id)}" + preview_token = device_state.get('current_preview_token') + return { + 'device_id': device_id, + 'friendly_name': profile.get('friendly_name') or device_id, + 'refresh_interval': state.get_refresh_interval(device_id), + 'playlist_name': binding_name, + 'playlist': playlist, + 'metrics': { + 'refresh_rate': metrics.get('refresh_rate'), + 'battery_voltage': metrics.get('battery_voltage'), + 'battery_state': utils.get_battery_state(metrics.get('battery_voltage')), + 'rssi': metrics.get('rssi'), + 'last_contact': utils.to_iso_timestamp(metrics.get('last_contact')) + }, + 'profile': { + 'refresh_interval': profile.get('refresh_interval'), + 'time_zone': profile.get('time_zone'), + 'last_seen': utils.to_iso_datetime(profile.get('last_seen')) if profile.get('last_seen') else None + }, + 'state': { + 'supports_grayscale': device_state.get('supports_grayscale'), + 'current_entry_hash': current_entry_hash, + 'current_plugin_id': device_state.get('last_entry_plugin'), + 'current_preview_url': preview_url, + 'current_preview_token': preview_token + } + } + + +@router.get('/api/display') +@router.get('/api/display/') +async def display( + request: Request, + refresh_rate: Optional[str] = Header(None, alias='Refresh-Rate'), + battery_voltage: Optional[str] = Header(None, alias='Battery-Voltage'), + rssi: Optional[str] = Header(None, alias='RSSI') +) -> JSONResponse: + """Main firmware endpoint returning the next image URL and metadata.""" + device_id, device_state = state.get_device_state_from_request(request) + state.ensure_device_profile(device_id) + models.add_log_entry( + 'Request received at /api/display', + f'Headers: {request.headers},URL: {request.url}, device: {device_id}' + ) + logger.info('[API] /api/display - URL: %s device: %s', request.url, device_id) + + fw_version = request.headers.get('fw-version') + grayscale_ready = utils.firmware_supports_grayscale(fw_version) + with state.STATE_LOCK: + device_state['supports_grayscale'] = grayscale_ready + + update_kwargs = { + 'refresh_rate': int(refresh_rate) if refresh_rate is not None else None, + 'battery_voltage': float(battery_voltage) if battery_voltage is not None else None, + 'rssi': int(rssi) if rssi is not None else None + } + state.update_client_metrics(device_id, **update_kwargs) + models.touch_device_last_seen(device_id) + if battery_voltage is not None and rssi is not None: + models.add_battery_status(float(battery_voltage), int(rssi)) + + base_url = state.request_base_url(request) + + grayscale_path: Optional[str] = None + sequence = 0 + with state.STATE_LOCK: + send_switch = device_state['bmp_send_switch'] + adapted_url = base_url + ('/image/screen.bmp' if send_switch else '/image/screen1.bmp') + device_state['bmp_send_switch'] = not send_switch + if grayscale_ready: + grayscale_switch = device_state.get('grayscale_send_switch', True) + grayscale_path = '/image/grayscale.png' if grayscale_switch else '/image/grayscale1.png' + device_state['grayscale_send_switch'] = not grayscale_switch + sequence = device_state.get('token_sequence', 0) + 1 + device_state['token_sequence'] = sequence + + entry_idx: Optional[int] = None + try: + entry_idx = state.schedule_next_rotation_entry(device_id, device_state) + except state.RotationUnavailableError as exc: + logger.warning('[API] rotation unavailable for %s: %s; attempting plugin refresh', device_id, exc) + await plugins.refresh_plugin_assets() + try: + entry_idx = state.schedule_next_rotation_entry(device_id, device_state) + except state.RotationUnavailableError as exc2: + logger.error('[API] rotation still unavailable for %s after refresh: %s', device_id, exc2) + entry_idx = None + + if entry_idx is None: + base_url = state.request_base_url(request) + sequence = 0 + with state.STATE_LOCK: + send_switch = device_state['bmp_send_switch'] + device_state['bmp_send_switch'] = not send_switch + if grayscale_ready: + grayscale_switch = device_state.get('grayscale_send_switch', True) + device_state['grayscale_send_switch'] = not grayscale_switch + sequence = device_state.get('token_sequence', 0) + 1 + device_state['token_sequence'] = sequence + + request_version = device_state.get('request_count', 0) + salt = f"{device_id}-{sequence}-{request_version}-dummy" + token = sha256(salt.encode('utf-8')).hexdigest()[:16] + state.register_image_token(device_id, token) + + separator = '&' if '?' in base_url else '?' + image_url = f"{base_url}/image/dummy.bmp{separator}token={token}" + response = { + 'status': 0, + 'image_url': image_url, + 'filename': token, + 'update_firmware': False, + 'firmware_url': base_url + '/fw/update', + 'refresh_rate': state.get_refresh_interval(device_id), + 'reset_firmware': False, + 'special_function': '', + 'action': '' + } + models.add_log_entry('send json /api/display', f'response: {response}') + return JSONResponse(response) + + state.update_device_preview(device_id, device_state, entry_idx) + + entry_hash = device_state.get('last_entry_hash') or str(entry_idx) + request_version = device_state.get('request_count', 0) + salt = f"{device_id}-{sequence}-{request_version}-{entry_hash}" + token = sha256(salt.encode('utf-8')).hexdigest()[:16] + + state.register_image_token(device_id, token) + + separator = '&' if '?' in adapted_url else '?' + image_url = f"{adapted_url}{separator}token={token}" + pending_media = None + with state.STATE_LOCK: + pending_media = device_state.get('pending_entry_media') + + if grayscale_ready and grayscale_path and pending_media != 'bmp': + image_url = f"{base_url}{grayscale_path}?token={token}" + + response = { + 'status': 0, + 'image_url': image_url, + 'filename': token, + 'update_firmware': False, + 'firmware_url': base_url + '/fw/update', + 'refresh_rate': state.get_refresh_interval(device_id), + 'reset_firmware': False, + 'special_function': '', + 'action': '' + } + + models.add_log_entry('send json /api/display', f'response: {response}') + return JSONResponse(response) + + +@router.get('/api/setup') +@router.get('/api/setup/') +def api_setup(request: Request) -> JSONResponse: + """Provide setup metadata expected by TRMNL clients.""" + base_url = state.request_base_url(request) + payload = { + 'status': 200, + 'api_key': config.SETUP_API_KEY, + 'friendly_id': config.SETUP_FRIENDLY_ID, + 'image_url': base_url + '/image/screen.bmp', + 'message': config.SETUP_MESSAGE + } + models.add_log_entry('send json /api/setup', f'response: {payload}') + return JSONResponse(payload) + + +@router.get('/settings') +def get_settings() -> JSONResponse: + """Retrieve the current settings for the terminal server.""" + return JSONResponse({ + 'config_image_path': config.IMAGE_PATH, + 'config_refresh_time': config.REFRESH_TIME + }) + + +@router.post('/settings/refreshtime') +def update_refresh_time(data: Dict[str, Any] = Body(...)) -> JSONResponse: + """Update the refresh time in the configuration.""" + new_refresh_time = data.get('refresh_rate') + if new_refresh_time is None: + return JSONResponse({'status': 'error', 'message': 'Invalid refresh rate'}, status_code=400) + + config.update_config('refresh_time', new_refresh_time) + models.save_config_entry('refresh_time', str(config.REFRESH_TIME)) + return JSONResponse({'status': 'success', 'new_refresh_time': config.REFRESH_TIME}, status_code=200) + + +@router.post('/settings/imagepath') +def update_image_path(data: Dict[str, Any] = Body(...)) -> JSONResponse: + """Update the fallback image path in the configuration.""" + new_image_path = data.get('bmp_path') + if new_image_path is None: + return JSONResponse({'status': 'error', 'message': 'Invalid new_image_path'}, status_code=400) + + config.update_config('image_path', new_image_path) + models.save_config_entry('image_path', config.IMAGE_PATH) + return JSONResponse({'status': 'success', 'new_image_path': config.IMAGE_PATH}, status_code=200) + + +@router.post('/api/log') +@router.post('/api/log/') +async def api_log(request: Request) -> JSONResponse: + """Capture and persist client log payloads while echoing them to stdout.""" + raw_body = await request.body() + body_text = raw_body.decode('utf-8', errors='replace') if raw_body else '' + + logger.info('[API] /api/log - payload: %s', body_text) + print(body_text) + models.add_log_entry('Request received at /api/log', body_text) + + parsed_content: Dict[str, Any] = {} + try: + parsed_content = await request.json() + except ValueError: + pass + + logs_array: List[Any] = [] + if isinstance(parsed_content, dict): + log_block = parsed_content.get('log') + if isinstance(log_block, dict): + logs_array = log_block.get('logs_array') or [] + + for log_entry in logs_array: + models.add_log_entry('Client Log', str(log_entry)) + print(str(log_entry)) + + return JSONResponse({'status': 'logged'}, status_code=200) + + +@router.get('/rotation') +def get_rotation_playlist() -> JSONResponse: + """Expose the current rotation entries and default playlist selection.""" + snapshot = state.build_rotation_snapshot() + return JSONResponse(snapshot) + + +@router.post('/rotation') +def update_rotation_playlist(data: Dict[str, Any] = Body(...)) -> JSONResponse: + """Update the default or per-device rotation playlist using entry IDs.""" + playlist_ids = data.get('playlist') + device_id = data.get('device_id') + + if not isinstance(playlist_ids, list) or not all(isinstance(pid, str) for pid in playlist_ids): + return JSONResponse({'status': 'error', 'message': 'playlist must be a list of IDs'}, status_code=400) + + try: + if device_id: + state.set_device_playlist(device_id, playlist_ids) + else: + state.set_default_playlist(playlist_ids) + except ValueError as exc: + return JSONResponse({'status': 'error', 'message': str(exc)}, status_code=400) + + snapshot = state.build_rotation_snapshot() + return JSONResponse(snapshot) + + +@router.post('/playlists') +def upsert_named_playlist(data: Dict[str, Any] = Body(...)) -> JSONResponse: + """Create or update a named rotation playlist entity.""" + name = data.get('name') + playlist_ids = data.get('playlist') + + if not isinstance(name, str) or not name.strip() or name.strip() == state.DEFAULT_DEVICE_ID: + return JSONResponse({'status': 'error', 'message': 'name must be a non-default string'}, status_code=400) + if not isinstance(playlist_ids, list) or not all(isinstance(pid, str) for pid in playlist_ids): + return JSONResponse({'status': 'error', 'message': 'playlist must be a list of IDs'}, status_code=400) + + try: + state.set_named_playlist(name.strip(), playlist_ids) + except ValueError as exc: + return JSONResponse({'status': 'error', 'message': str(exc)}, status_code=400) + + snapshot = state.build_rotation_snapshot() + return JSONResponse(snapshot) + + +@router.delete('/playlists/{name}') +def delete_named_playlist(name: str) -> JSONResponse: + """Delete a named playlist and unbind any devices using it.""" + if not name or name.strip() == state.DEFAULT_DEVICE_ID: + return JSONResponse({'status': 'error', 'message': 'default playlist cannot be deleted'}, status_code=400) + try: + state.delete_named_playlist(name.strip()) + except ValueError as exc: + return JSONResponse({'status': 'error', 'message': str(exc)}, status_code=400) + snapshot = state.build_rotation_snapshot() + return JSONResponse(snapshot) + + +@router.delete('/rotation/{device_id}') +def delete_rotation_playlist(device_id: str) -> JSONResponse: + """Remove a per-device playlist override and fall back to the default selection.""" + normalized = (device_id or '').strip() or state.DEFAULT_DEVICE_ID + if normalized == state.DEFAULT_DEVICE_ID: + return JSONResponse({'status': 'error', 'message': 'default playlist cannot be deleted'}, status_code=400) + + state.clear_device_playlist(normalized) + snapshot = state.build_rotation_snapshot() + return JSONResponse(snapshot) + + +@router.get('/devices') +def list_devices(include_default: bool = Query(True, alias='include_default')) -> JSONResponse: + """List known devices along with their profiles, metrics, and playlists.""" + device_ids = state.known_device_ids(include_default=include_default) + devices = [_serialize_device_payload(device_id) for device_id in device_ids] + return JSONResponse({'devices': devices}) + + +@router.get('/devices/{device_id}') +def get_device(device_id: str) -> JSONResponse: + """Return metadata and metrics for a specific device.""" + normalized_id = device_id.strip() or state.DEFAULT_DEVICE_ID + payload = _serialize_device_payload(normalized_id) + return JSONResponse(payload) + + +@router.patch('/devices/{device_id}') +def update_device( + device_id: str, + data: Dict[str, Any] = Body(...) +) -> JSONResponse: + """Update device profile fields and optionally override its playlist.""" + normalized_id = device_id.strip() or state.DEFAULT_DEVICE_ID + friendly_name = data.get('friendly_name') + refresh_interval = data.get('refresh_interval') + time_zone = data.get('time_zone') + playlist_ids = data.get('playlist') + has_playlist_name = 'playlist_name' in data + playlist_name = data.get('playlist_name') + + refresh_override: Optional[int] = None + if refresh_interval is not None: + if not isinstance(refresh_interval, int) or refresh_interval <= 0: + return JSONResponse({'status': 'error', 'message': 'refresh_interval must be a positive integer'}, status_code=400) + refresh_override = refresh_interval + + if playlist_ids is not None: + if not isinstance(playlist_ids, list) or not all(isinstance(pid, str) for pid in playlist_ids): + return JSONResponse({'status': 'error', 'message': 'playlist must be a list of IDs'}, status_code=400) + + state.update_device_profile( + normalized_id, + friendly_name=friendly_name, + refresh_interval=refresh_override, + time_zone=time_zone + ) + + if playlist_ids is not None: + try: + state.set_device_playlist(normalized_id, playlist_ids) + except ValueError as exc: + return JSONResponse({'status': 'error', 'message': str(exc)}, status_code=400) + + if has_playlist_name: + if playlist_name is not None and not isinstance(playlist_name, str): + return JSONResponse({'status': 'error', 'message': 'playlist_name must be a string or null'}, status_code=400) + try: + state.set_device_playlist_binding(normalized_id, playlist_name) + except ValueError as exc: + return JSONResponse({'status': 'error', 'message': str(exc)}, status_code=400) + + payload = _serialize_device_payload(normalized_id) + return JSONResponse(payload) + + +@router.get('/server/log') +def log_view( + request: Request, + limit: int = Query(30, ge=1, le=200), + after: Optional[int] = Query(None), + response_format: str = Query('text', alias='format') +) -> Response: + """Return recent logs with optional cursor-based pagination.""" + logs = models.get_logs_after(after, limit) if after is not None else models.get_logs(limit=limit) + + wants_json = 'application/json' in (request.headers.get('accept') or '').lower() or response_format.lower() == 'json' + if wants_json: + payload = [ + { + 'id': log.id, + 'timestamp': utils.to_iso_datetime(log.timestamp), + 'context': log.context, + 'info': log.info + } + for log in logs + ] + return JSONResponse(payload) + + formatted_logs = '\n'.join([f"{log.timestamp} -- [{log.context}] -- {log.info}" for log in logs]) + response = Response(content=formatted_logs, media_type='text/plain') + if logs: + response.headers['X-Log-Last-Id'] = str(logs[-1].id) + return response + + +@router.get('/server/battery') +def battery_view( + all_data: Optional[str] = Query(None, alias='all'), + from_date: Optional[str] = Query(None, alias='from'), + to_date: Optional[str] = Query(None, alias='to') +) -> JSONResponse: + """Fetch battery data from the client database and return it in JSON format.""" + from_dt = None + to_dt = None + if from_date: + try: + from_dt = datetime.strptime(from_date, '%Y-%m-%d') + except ValueError: + pass + if to_date: + try: + to_dt = datetime.strptime(to_date, '%Y-%m-%d') + except ValueError: + pass + + if not all_data and not from_dt and not to_dt: + today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) + from_dt = today + to_dt = today + timedelta(days=1) + + limit = None if all_data else 1000 + history = models.get_battery_history(limit=limit, from_date=from_dt, to_date=to_dt) + + response_data = [ + { + 'timestamp': utils.to_iso_datetime(entry.timestamp), + 'battery_voltage': entry.voltage, + 'rssi': entry.rssi + } + for entry in history + ] + response_data.sort(key=lambda x: x['timestamp']) + + return JSONResponse(response_data) + + +@router.get('/status') +def status_view(device_id: Optional[str] = Query(None, alias='device_id')) -> JSONResponse: + """Retrieve the current status of the server and connected devices.""" + selected_device_id = device_id or state.DEFAULT_DEVICE_ID + uptime_seconds = int(time() - state.start_time) + uptime = str(timedelta(seconds=uptime_seconds)) + + cpu_load = psutil.cpu_percent(interval=None) + current_time = utils.to_iso_datetime(datetime.now(timezone.utc)) + + metrics = state.get_client_metrics(selected_device_id) + profile = state.ensure_device_profile(selected_device_id) + refresh_interval = state.get_refresh_interval(selected_device_id) + battery_voltage = metrics['battery_voltage'] + battery_state = utils.get_battery_state(battery_voltage) + wifi_signal = metrics['rssi'] + wifi_signal_strength = utils.get_wifi_signal_strength(wifi_signal) + + battery_history = models.get_battery_history(limit=30) + client_data_db = [ + { + 'timestamp': utils.to_iso_datetime(entry.timestamp), + 'battery_voltage': entry.voltage, + 'rssi': entry.rssi + } + for entry in battery_history + ] + client_data_db.sort(key=lambda x: x['timestamp']) + + device_state = state.get_device_state(selected_device_id) + current_entry_hash = device_state.get('last_entry_hash') + current_preview_url = device_state.get('current_preview_url') or f"/preview/{quote(selected_device_id)}" + current_preview_token = device_state.get('current_preview_token') + + metrics_store = state.get_all_client_metrics() + + def _has_contact(device_id: str) -> bool: + metrics_record = metrics_store.get(device_id) or {} + last_contact = metrics_record.get('last_contact') + return isinstance(last_contact, (int, float)) and last_contact > 0 + + filtered_ids = [] + seen_ids = set() + for known_id in state.known_device_ids(include_default=False): + if _has_contact(known_id): + filtered_ids.append(known_id) + seen_ids.add(known_id) + if selected_device_id and selected_device_id != state.DEFAULT_DEVICE_ID and selected_device_id not in seen_ids: + filtered_ids.append(selected_device_id) + devices_summary = [_serialize_device_payload(known_id) for known_id in filtered_ids] + playlists_summary = state.list_playlist_targets() + + status_data = { + 'server': { + 'uptime': uptime, + 'cpu_load': cpu_load, + 'current_time': current_time + }, + 'client': { + 'device_id': selected_device_id, + 'friendly_name': profile.get('friendly_name') or selected_device_id, + 'battery_voltage': battery_voltage, + 'battery_voltage_max': config.BATTERY_MAX_VOLTAGE, + 'battery_voltage_min': config.BATTERY_MIN_VOLTAGE, + 'battery_state': battery_state, + 'wifi_signal': wifi_signal, + 'wifi_signal_strength': wifi_signal_strength, + 'refresh_time': refresh_interval, + 'last_contact': utils.to_iso_timestamp(metrics['last_contact']), + 'profile': { + 'refresh_interval': profile.get('refresh_interval'), + 'time_zone': profile.get('time_zone'), + 'last_seen': utils.to_iso_datetime(profile.get('last_seen')) if profile.get('last_seen') else None + }, + 'supports_grayscale': device_state.get('supports_grayscale'), + 'current_entry_hash': current_entry_hash, + 'current_plugin_id': device_state.get('last_entry_plugin'), + 'current_preview_url': current_preview_url, + 'current_preview_token': current_preview_token + }, + 'devices': devices_summary, + 'playlists': playlists_summary, + 'client_data_db': client_data_db + } + return JSONResponse(status_data) diff --git a/trmnl_server/routes/images.py b/trmnl_server/routes/images.py new file mode 100644 index 0000000..5f11a79 --- /dev/null +++ b/trmnl_server/routes/images.py @@ -0,0 +1,111 @@ +"""Image-serving routes for TRMNL local server.""" + +from __future__ import annotations + +from io import BytesIO + +from fastapi import APIRouter, HTTPException, Request +from fastapi.responses import FileResponse, Response + +from .. import config, models, utils +from ..services import state + +router = APIRouter() +logger = config.logger + +SCREEN_VARIANTS = {'screen.bmp', 'screen1.bmp'} +ORIGINAL_VARIANTS = {'original.bmp', 'original1.bmp'} +GRAYSCALE_VARIANTS = {'grayscale.png', 'grayscale1.png'} + + +def _device_context_for_image_request(request: Request) -> tuple[str, dict]: + token = request.query_params.get('token') + resolved = state.resolve_device_id_from_token(token) + if resolved: + return resolved, state.get_device_state(resolved) + return state.get_device_state_from_request(request) + + +def _binary_response(image_blob: BytesIO, media_type: str) -> Response: + payload = image_blob.getvalue() + headers = {'Content-Length': str(len(payload))} + return Response(content=payload, media_type=media_type, headers=headers) + + +def _client_host(request: Request) -> str: + client = request.client + return client.host if client else 'unknown' + + +def _serve_bmp_frame(request: Request, route: str) -> Response: + device_id, device_state = _device_context_for_image_request(request) + try: + frame = state.get_next_bmp_frame(device_id, device_state) + except state.RotationUnavailableError as exc: + raise HTTPException(status_code=503, detail=str(exc)) from exc + client_host = _client_host(request) + models.add_log_entry( + f'Request received at {route}', + f'serving image for IP: {client_host} device: {device_id}' + ) + logger.info('[API] %s - serving image for IP: %s device: %s', route, client_host, device_id) + return _binary_response(frame, 'image/bmp') + + +def _serve_original_image(request: Request) -> Response: + _, device_state = _device_context_for_image_request(request) + entry_idx = state.current_frame_entry_index(device_state) + if entry_idx is None: + raise HTTPException(status_code=404, detail='No original image available') + png_bytes = state.get_rotation_png_bytes(entry_idx) + return _binary_response(BytesIO(png_bytes), 'image/png') + + +def _serve_grayscale_frame(request: Request) -> Response: + device_id, device_state = _device_context_for_image_request(request) + try: + png_blob = state.get_next_png_frame(device_id, device_state) + except state.RotationUnavailableError as exc: + raise HTTPException(status_code=503, detail=str(exc)) from exc + return _binary_response(png_blob, 'image/png') + + +@router.get('/image/{image_name}') +def serve_image_variant(request: Request, image_name: str) -> Response: + """Serve BMP, PNG, or placeholder assets behind /image/* routes.""" + route = f'/image/{image_name}' + if image_name in SCREEN_VARIANTS: + return _serve_bmp_frame(request, route) + if image_name in ORIGINAL_VARIANTS: + return _serve_original_image(request) + if image_name in GRAYSCALE_VARIANTS: + return _serve_grayscale_frame(request) + if image_name == 'dummy.bmp': + return FileResponse(utils.asset_path('img', 'dummy.bmp'), media_type='image/bmp') + raise HTTPException(status_code=404, detail='Unknown image path') + + +@router.get('/images/current.png') +def serve_current_png(request: Request) -> Response: + """Convert the current BMP frame to PNG for browser viewing.""" + _, device_state = _device_context_for_image_request(request) + entry_idx = state.current_frame_entry_index(device_state) + if entry_idx is None: + raise HTTPException(status_code=404, detail='No current image available') + bmp_blob = BytesIO(state.get_rotation_bmp_bytes(entry_idx)) + png_bytes = utils.convert_bmp_bytes_to_png(bmp_blob) + return _binary_response(png_bytes, 'image/png') + + +@router.get('/preview/{device_id}') +def serve_preview(device_id: str) -> Response: + """Serve the last rotation PNG fetched by a device.""" + device_state = state.get_device_state(device_id or state.DEFAULT_DEVICE_ID) + entry_idx = state.preview_frame_entry_index(device_state) + if entry_idx is None: + raise HTTPException(status_code=404, detail='No preview available') + payload = state.get_rotation_png_bytes(entry_idx) + response = _binary_response(BytesIO(payload), 'image/png') + response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0' + response.headers['Pragma'] = 'no-cache' + return response diff --git a/trmnl_server/routes/pages.py b/trmnl_server/routes/pages.py new file mode 100644 index 0000000..c2b91bf --- /dev/null +++ b/trmnl_server/routes/pages.py @@ -0,0 +1,18 @@ +"""Page routes for TRMNL local server.""" + +from __future__ import annotations + +from fastapi import APIRouter +from fastapi.responses import HTMLResponse + +from .. import utils + +router = APIRouter() + + +@router.get('/') +def index() -> HTMLResponse: + """Serve the main HTML dashboard.""" + index_path = utils.asset_path('index.html') + with open(index_path, 'r', encoding='utf-8') as file: + return HTMLResponse(file.read()) diff --git a/trmnl_server/services/__init__.py b/trmnl_server/services/__init__.py new file mode 100644 index 0000000..50c8a69 --- /dev/null +++ b/trmnl_server/services/__init__.py @@ -0,0 +1 @@ +"""Service modules for rotation, device state, and plugin scheduling.""" diff --git a/trmnl_server/services/plugins.py b/trmnl_server/services/plugins.py new file mode 100644 index 0000000..2f98080 --- /dev/null +++ b/trmnl_server/services/plugins.py @@ -0,0 +1,297 @@ +"""Plugin refresh scheduling, orchestration, and CLI helpers.""" + +from __future__ import annotations + +import inspect +from asyncio import CancelledError, Task, create_task, gather, sleep +from dataclasses import dataclass +from importlib import import_module +from os.path import exists +from pkgutil import walk_packages +from time import time +from typing import Any, Dict, List, Optional, Tuple, Type + +from .. import config, plugins as plugins_pkg +from ..utils import asset_path, get_generated_assets_root +from ..plugins.base import PluginBase, PluginOutput + +from . import state + +logger = config.logger + +PLUGIN_REFRESH_RETRY = 300 +plugin_tasks: Dict[str, Task] = {} +_ttl_cache: Dict[str, int] = {} + + +@dataclass(frozen=True) +class PluginSchedule: + """Typed plugin configuration entry used by the scheduler and CLI.""" + + plugin_cls: Type[PluginBase] + basename: str + set_primary: bool = False + refresh_interval: Optional[int] = None + output_subdir: Optional[str] = None + + @property + def name(self) -> str: + return self.plugin_cls.__name__ + + def fallback_assets(self) -> Tuple[str, str]: + return _asset_paths(self.basename) + + def resolved_refresh_interval(self) -> int: + if self.refresh_interval: + return self.refresh_interval + return _default_plugin_ttl(self.plugin_cls) + + def resolved_output_directory(self) -> str: + root = get_generated_assets_root() + target = root / self.output_subdir if self.output_subdir else root + target.mkdir(parents=True, exist_ok=True) + return target.as_posix() + + @classmethod + def from_plugin(cls, plugin_cls: Type[PluginBase]) -> PluginSchedule: + basename = getattr(plugin_cls, 'BASENAME', plugin_cls.__name__.lower()) + output_subdir = getattr(plugin_cls, 'OUTPUT_SUBDIR', None) or basename + return cls( + plugin_cls=plugin_cls, + basename=basename, + set_primary=bool(getattr(plugin_cls, 'SET_PRIMARY', False)), + refresh_interval=getattr(plugin_cls, 'REFRESH_INTERVAL', None), + output_subdir=output_subdir + ) + + +def _discover_plugin_classes() -> List[Type[PluginBase]]: + classes: List[Type[PluginBase]] = [] + prefix = f"{plugins_pkg.__name__}." + for _, module_name, _ in walk_packages(plugins_pkg.__path__, prefix): + if module_name.endswith('.base'): + continue + if (not config.CALIBRATION_PLUGIN_ENABLED) and module_name.endswith('.calibration'): + continue + try: + module = import_module(module_name) + except Exception as exc: # noqa: BLE001 + logger.warning("Failed to import plugin module %s: %s", module_name, exc) + continue + for attribute in vars(module).values(): + if not inspect.isclass(attribute): + continue + if not issubclass(attribute, PluginBase): + continue + if attribute is PluginBase: + continue + if attribute.__module__ != module.__name__: + continue + if inspect.isabstract(attribute): + continue + if not getattr(attribute, 'AUTO_REGISTER', True): + continue + classes.append(attribute) + classes.sort(key=lambda cls: (getattr(cls, 'REGISTRY_ORDER', 100), cls.__name__)) + return classes + + +def _is_calibration_plugin_class(plugin_cls: Type[PluginBase]) -> bool: + return plugin_cls.__module__.endswith('.calibration') or getattr(plugin_cls, 'BASENAME', '').startswith('calibration') + + +def _build_plugin_registry() -> List[PluginSchedule]: + return [PluginSchedule.from_plugin(plugin_cls) for plugin_cls in _discover_plugin_classes()] + + +PLUGIN_REGISTRY: List[PluginSchedule] = _build_plugin_registry() + + +def _asset_paths(basename: str) -> Tuple[str, str]: + bmp_path = asset_path(f'{basename}.bmp') + png_path = asset_path(f'{basename}.png') + return (bmp_path.as_posix(), png_path.as_posix()) + + +def _default_plugin_ttl(plugin_cls: Type[PluginBase]) -> int: + cached = _ttl_cache.get(plugin_cls.__name__) + if cached: + return cached + try: + instance = plugin_cls() + ttl_default = max(60, int(instance.get_content_ttl())) + except Exception: # noqa: BLE001 + ttl_default = 900 + _ttl_cache[plugin_cls.__name__] = ttl_default + return ttl_default + + +def plugin_schedules() -> List[PluginSchedule]: + """Return a shallow copy of the plugin registry for iteration.""" + schedules = list(PLUGIN_REGISTRY) + if not config.CALIBRATION_PLUGIN_ENABLED: + schedules = [schedule for schedule in schedules if not _is_calibration_plugin_class(schedule.plugin_cls)] + return schedules + + +def list_available_plugins() -> List[str]: + return [schedule.name for schedule in plugin_schedules()] + + +def get_plugin_schedule(plugin_name: str) -> PluginSchedule: + normalized = plugin_name.lower() + for schedule in plugin_schedules(): + if schedule.name.lower() == normalized: + return schedule + raise ValueError(f"Unknown plugin '{plugin_name}'. Available: {', '.join(list_available_plugins())}") + + +async def run_single_plugin_by_name( + plugin_name: str, + *, + output_dir: Optional[str] = None, + plugin_kwargs: Optional[Dict[str, Any]] = None +) -> PluginOutput: + schedule = get_plugin_schedule(plugin_name) + plugin_instance = schedule.plugin_cls() + kwargs: Dict[str, Any] = dict(plugin_kwargs or {}) + kwargs.setdefault('output_dir', output_dir or schedule.resolved_output_directory()) + result = await plugin_instance.run(**kwargs) + if not result or not _assets_exist(result): + raise RuntimeError(f"Plugin {plugin_name} produced no output") + return result + + +def _assets_exist(assets: Optional[PluginOutput]) -> bool: + if not assets: + return False + return exists(assets.monochrome_path) and exists(assets.grayscale_path) + + +def _seconds_until_plugin_refresh( + plugin_name: str, + default_interval: int = 900, + min_interval: int = 60 +) -> int: + with state.STATE_LOCK: + cache_entry = state.global_state.get('plugins', {}).get(plugin_name, {}) + expires_at = cache_entry.get('expires_at') + if expires_at: + delay = max(0, expires_at - time()) + return max(min_interval, int(delay)) + return default_interval + + +async def process_plugin_output(schedule: PluginSchedule) -> None: + plugin_cls = schedule.plugin_cls + plugin_name = plugin_cls.__name__ + fallback_assets = schedule.fallback_assets() + with state.STATE_LOCK: + cache_entry = state.global_state['plugins'].setdefault(plugin_name, {}) + cached_assets: Optional[PluginOutput] = cache_entry.get('assets') + expires_at = cache_entry.get('expires_at', 0) + display_name: Optional[str] = cache_entry.get('display_name') or getattr(plugin_cls, 'DISPLAY_NAME', None) + now = time() + + assets_valid = _assets_exist(cached_assets) + needs_refresh = (not assets_valid) or (expires_at <= now) + assets = cached_assets if assets_valid else None + + if needs_refresh: + plugin_instance = plugin_cls() + output_dir = schedule.resolved_output_directory() + try: + refreshed_assets = await plugin_instance.run(output_dir=output_dir) + if _assets_exist(refreshed_assets): + ttl_seconds = max(1, plugin_instance.get_content_ttl()) + try: + display_name = plugin_instance.get_display_name() + except Exception: # noqa: BLE001 + display_name = getattr(plugin_cls, 'DISPLAY_NAME', None) or plugin_name + with state.STATE_LOCK: + cache_entry = state.global_state['plugins'].setdefault(plugin_name, cache_entry) + cache_entry['expires_at'] = time() + ttl_seconds + cache_entry['assets'] = refreshed_assets + cache_entry['display_name'] = display_name + assets = refreshed_assets + logger.info("%s refreshed; next refresh in %.0f seconds", plugin_name, ttl_seconds) + else: + logger.warning("%s produced no output; attempting fallback", plugin_name) + with state.STATE_LOCK: + cache_entry = state.global_state['plugins'].setdefault(plugin_name, cache_entry) + cache_entry['expires_at'] = time() + PLUGIN_REFRESH_RETRY + except Exception as exc: # noqa: BLE001 + logger.error("Failed to run %s: %s", plugin_name, exc) + with state.STATE_LOCK: + cache_entry = state.global_state['plugins'].setdefault(plugin_name, cache_entry) + cache_entry['expires_at'] = time() + PLUGIN_REFRESH_RETRY + + if (not assets) and fallback_assets: + bmp_path, png_path = fallback_assets + if exists(bmp_path) and exists(png_path): + assets = PluginOutput(monochrome_path=bmp_path, grayscale_path=png_path) + with state.STATE_LOCK: + cache_entry = state.global_state['plugins'].setdefault(plugin_name, cache_entry) + cache_entry['assets'] = assets + + if not assets: + logger.warning("No valid asset available for %s", plugin_name) + return + + if schedule.set_primary: + state.set_primary_rotation_assets(plugin_name, assets, display_name) + else: + state.append_rotation_assets(plugin_name, assets, display_name) + + +async def refresh_plugin_assets() -> None: + """Run all plugin refresh operations concurrently off the event loop.""" + schedules = plugin_schedules() + tasks = [process_plugin_output(schedule) for schedule in schedules] + if not tasks: + return + results = await gather(*tasks, return_exceptions=True) + for schedule, result in zip(schedules, results): + if isinstance(result, Exception): + logger.error("Plugin refresh task failed for %s: %s", schedule.name, result) + + +async def _plugin_refresh_worker( + schedule: PluginSchedule +) -> None: + plugin_name = schedule.name + logger.info("Starting refresh worker for %s", plugin_name) + try: + while True: + try: + await process_plugin_output(schedule) + except Exception as exc: # noqa: BLE001 + logger.error("Plugin refresh task failed for %s: %s", plugin_name, exc) + delay = _seconds_until_plugin_refresh(plugin_name, schedule.resolved_refresh_interval(), 60) + try: + await sleep(delay) + except CancelledError: + logger.info("Plugin refresh worker cancelled for %s", plugin_name) + raise + except CancelledError: + pass + + +async def start_plugin_refreshers() -> None: + """Launch background tasks to refresh each plugin independently.""" + if plugin_tasks: + return + for schedule in plugin_schedules(): + plugin_name = schedule.name + task = create_task(_plugin_refresh_worker(schedule)) + plugin_tasks[plugin_name] = task + + +async def stop_plugin_refreshers() -> None: + """Cancel all plugin refresh tasks and wait for them to stop.""" + if not plugin_tasks: + return + for task in plugin_tasks.values(): + task.cancel() + await gather(*plugin_tasks.values(), return_exceptions=True) + plugin_tasks.clear() \ No newline at end of file diff --git a/trmnl_server/services/state.py b/trmnl_server/services/state.py new file mode 100644 index 0000000..b4a95de --- /dev/null +++ b/trmnl_server/services/state.py @@ -0,0 +1,1200 @@ +"""Shared device, rotation, and state management utilities.""" + +from __future__ import annotations + +from hashlib import sha1 +from os.path import abspath +from time import time +from io import BytesIO +from threading import RLock +from typing import Any, Dict, List, Optional, Tuple +from urllib.parse import quote + +from fastapi import Request + +from .. import config, models, utils +from ..plugins.base import PluginOutput + +logger = config.logger + +DEFAULT_DEVICE_ID = 'default' +STATE_LOCK = RLock() +start_time = time() + +_IMAGE_TOKEN_TTL_SECONDS = 600.0 + +_server_base_url = '' + + +class RotationUnavailableError(RuntimeError): + """Raised when no rotation entries are available for a device.""" + pass + + +def set_server_base_url(base_url: str) -> None: + """Persist the server base URL so freshly created device states have a default.""" + global _server_base_url + _server_base_url = base_url.rstrip('/') if base_url else '' + + +def get_server_base_url() -> str: + return _server_base_url or f"{config.SERVER_SCHEME}://{utils.get_ip_address()}:{config.SERVER_PORT}" + + +def update_device_preview( + device_id: str, + device_state: Optional[Dict[str, Any]], + entry_index: Optional[int] +) -> Tuple[Optional[str], Optional[str]]: + if entry_index is None or entry_index < 0: + return None, None + target_state = device_state or get_device_state(device_id) + with STATE_LOCK: + previous_index = target_state.get('current_preview_entry_index') + target_state['current_preview_entry_index'] = entry_index + existing_token = target_state.get('current_preview_token') + if previous_index == entry_index and existing_token: + token = str(existing_token) + else: + sequence = int(target_state.get('token_sequence', 0)) + token = sha1(f"{device_id}-{entry_index}-{sequence}".encode('utf-8')).hexdigest()[:16] + target_state['current_preview_token'] = token + target_state['current_preview_url'] = f"/preview/{quote(device_id)}?token={token}" + return target_state['current_preview_url'], token + + +def _client_metrics_store() -> Dict[str, Dict[str, Any]]: + return global_state.setdefault('client_metrics', {}) + + +def get_client_metrics(device_id: str) -> Dict[str, Any]: + with STATE_LOCK: + store = _client_metrics_store() + metrics = store.get(device_id) + if metrics is None: + metrics = { + 'refresh_rate': config.REFRESH_TIME, + 'battery_voltage': config.BATTERY_MAX_VOLTAGE, + 'rssi': -100, + 'last_contact': 0.0 + } + store[device_id] = metrics + return metrics + + +def update_client_metrics( + device_id: str, + *, + refresh_rate: Optional[int] = None, + battery_voltage: Optional[float] = None, + rssi: Optional[int] = None +) -> None: + with STATE_LOCK: + metrics = get_client_metrics(device_id) + if refresh_rate is not None: + metrics['refresh_rate'] = refresh_rate + if battery_voltage is not None: + metrics['battery_voltage'] = battery_voltage + if rssi is not None: + metrics['rssi'] = rssi + metrics['last_contact'] = time() + + +def get_all_client_metrics() -> Dict[str, Dict[str, Any]]: + with STATE_LOCK: + return {device_id: dict(metrics) for device_id, metrics in _client_metrics_store().items()} + + +def _device_profile_cache() -> Dict[str, Dict[str, Any]]: + return global_state.setdefault('device_profiles', {}) + + +def ensure_device_profile(device_id: str) -> Dict[str, Any]: + with STATE_LOCK: + cache = _device_profile_cache() + profile = cache.get(device_id) + if profile is None: + profile = models.ensure_device_profile(device_id) + with STATE_LOCK: + cache = _device_profile_cache() + cache[device_id] = profile + return profile + + +def refresh_device_profile(device_id: str) -> Dict[str, Any]: + profile = models.ensure_device_profile(device_id) + with STATE_LOCK: + cache = _device_profile_cache() + cache[device_id] = profile + return profile + + +def update_device_profile( + device_id: str, + *, + friendly_name: Optional[str] = None, + refresh_interval: Optional[int] = None, + time_zone: Optional[str] = None +) -> Dict[str, Any]: + profile = models.update_device_profile( + device_id, + friendly_name=friendly_name, + refresh_interval=refresh_interval, + time_zone=time_zone + ) + with STATE_LOCK: + cache = _device_profile_cache() + cache[device_id] = profile + return profile + + +def get_refresh_interval(device_id: str) -> int: + profile = ensure_device_profile(device_id) + refresh_interval = profile.get('refresh_interval') + if isinstance(refresh_interval, int) and refresh_interval > 0: + return refresh_interval + metrics = get_client_metrics(device_id) + return int(metrics.get('refresh_rate', config.REFRESH_TIME)) + + +def _build_device_state() -> Dict[str, Any]: + return { + 'bmp_send_switch': True, + 'current_preview_url': None, + 'current_preview_token': None, + 'current_preview_entry_index': None, + 'playlist_ids': [], + 'playlist_indexes': [], + 'playlist_media': [], + 'current_playlist_index': -1, + 'current_entry_index': -1, + 'current_entry_media': 'auto', + 'request_count': 0, + 'last_entry_hash': None, + 'last_entry_plugin': None, + 'pending_entry_index': None, + 'pending_entry_media': None, + 'supports_grayscale': False, + 'grayscale_send_switch': True, + 'token_sequence': 0 + } + + +global_state: Dict[str, Any] = { + 'rotation_master': { + 'bmp_entries': [], + 'png_entries': [], + 'hashes': [], + 'meta': [], + 'selected_ids': [], + 'version': 0 + }, + 'devices': {}, + 'device_playlists': {}, + 'device_profiles': {}, + 'client_metrics': {}, + 'server': { + 'uptime': 0, + 'cpu_load': 0, + 'current_time': 0 + }, + 'client': { + 'battery_voltage': 0, + 'battery_voltage_max': 0 + }, + 'plugins': {} +} + + +def _image_token_store() -> Dict[str, Dict[str, Any]]: + return global_state.setdefault('image_tokens', {}) + + +def register_image_token(device_id: str, token: str) -> None: + normalized_device = (device_id or '').strip() or DEFAULT_DEVICE_ID + if normalized_device == DEFAULT_DEVICE_ID: + return + token_value = (token or '').strip() + if not token_value: + return + now = time() + cutoff = now - _IMAGE_TOKEN_TTL_SECONDS + with STATE_LOCK: + store = _image_token_store() + store[token_value] = {'device_id': normalized_device, 'ts': now} + for key, payload in list(store.items()): + if not isinstance(payload, dict): + store.pop(key, None) + continue + ts = payload.get('ts') + if not isinstance(ts, (int, float)) or ts < cutoff: + store.pop(key, None) + + +def resolve_device_id_from_token(token: Optional[str]) -> Optional[str]: + token_value = (token or '').strip() + if not token_value: + return None + now = time() + cutoff = now - _IMAGE_TOKEN_TTL_SECONDS + with STATE_LOCK: + store = _image_token_store() + payload = store.get(token_value) + if not isinstance(payload, dict): + return None + ts = payload.get('ts') + if not isinstance(ts, (int, float)) or ts < cutoff: + store.pop(token_value, None) + return None + device_id = payload.get('device_id') + if isinstance(device_id, str) and device_id.strip() and device_id.strip() != DEFAULT_DEVICE_ID: + return device_id.strip() + return None + + +def _read_image_bytes(image_path: str) -> bytes: + with open(image_path, 'rb') as file: + return file.read() + + +def _digest_bytes(data: bytes) -> str: + return sha1(data).hexdigest() + + +def _rotation_entry_id(plugin_name: str, bmp_path: str, png_path: str) -> str: + plugin = (plugin_name or '').strip() + bmp_url = utils.path_to_web_url(bmp_path) + png_url = utils.path_to_web_url(png_path) + return f"{plugin}:{bmp_url}|{png_url}" + + +def _collision_safe_rotation_id(preferred: str, disallowed: set[str]) -> str: + if preferred not in disallowed: + return preferred + for idx in range(1, 100): + candidate = f"{preferred}#{idx}" + if candidate not in disallowed: + return candidate + return f"{preferred}#{len(disallowed) + 1}" + + +def rotation_master() -> Dict[str, Any]: + """Return the shared rotation master structure.""" + return global_state['rotation_master'] + + +def _selected_matches_all(master: Dict[str, Any]) -> bool: + selected_ids = master.get('selected_ids') or [] + meta = master.get('meta') or [] + ids = [entry.get('id') for entry in meta if entry.get('id')] + if len(selected_ids) != len(ids): + return False + return all(lhs == rhs for lhs, rhs in zip(selected_ids, ids)) + + +def _prune_missing_selected_ids(master: Dict[str, Any]) -> bool: + selected_ids = master.get('selected_ids') or [] + if not selected_ids: + return False + meta = master.get('meta') or [] + valid_ids = {entry.get('id') for entry in meta if entry.get('id')} + filtered_ids: List[str] = [] + for entry in selected_ids: + base_id, _ = _parse_playlist_entry_id(entry) + if base_id in valid_ids: + filtered_ids.append(entry) + if len(filtered_ids) == len(selected_ids): + return False + master['selected_ids'] = filtered_ids + return True + + +def persist_default_playlist(selected_ids: List[str]) -> None: + try: + models.save_rotation_playlist(selected_ids) + except Exception as exc: # noqa: BLE001 + logger.warning("Failed to persist default playlist: %s", exc) + + +def persist_device_playlist(device_id: str, selected_ids: List[str]) -> None: + try: + models.save_rotation_playlist(selected_ids, device_id=device_id) + except Exception as exc: # noqa: BLE001 + logger.warning("Failed to persist playlist for %s: %s", device_id, exc) + + +def cache_device_playlist(device_id: str, selected_ids: Optional[List[str]]) -> None: + with STATE_LOCK: + playlists = global_state.setdefault('device_playlists', {}) + if selected_ids is None: + playlists.pop(device_id, None) + else: + playlists[device_id] = selected_ids + + +def _named_playlists_store() -> Dict[str, List[str]]: + return global_state.setdefault('named_playlists', {}) + + +def cache_named_playlist(name: str, selected_ids: Optional[List[str]]) -> None: + normalized = (name or '').strip() + if not normalized or normalized == DEFAULT_DEVICE_ID: + return + with STATE_LOCK: + store = _named_playlists_store() + if selected_ids is None: + store.pop(normalized, None) + else: + store[normalized] = list(selected_ids) + + +def _device_playlist_binding_store() -> Dict[str, str]: + return global_state.setdefault('device_playlist_bindings', {}) + + +def cache_device_playlist_binding(device_id: str, playlist_name: Optional[str]) -> None: + normalized_device = (device_id or '').strip() or DEFAULT_DEVICE_ID + normalized_name = (playlist_name or '').strip() or DEFAULT_DEVICE_ID + if normalized_device == DEFAULT_DEVICE_ID: + return + with STATE_LOCK: + store = _device_playlist_binding_store() + if normalized_name == DEFAULT_DEVICE_ID: + store.pop(normalized_device, None) + else: + store[normalized_device] = normalized_name + + +def get_device_playlist_binding_name(device_id: str) -> Optional[str]: + normalized_device = (device_id or '').strip() or DEFAULT_DEVICE_ID + if normalized_device == DEFAULT_DEVICE_ID: + return None + with STATE_LOCK: + store = _device_playlist_binding_store() + cached = store.get(normalized_device) + if cached: + return cached + bound = models.get_device_playlist_binding(normalized_device) + cache_device_playlist_binding(normalized_device, bound) + if bound and bound.strip() and bound.strip() != DEFAULT_DEVICE_ID: + return bound.strip() + return None + + +def get_named_playlist_selection(name: str) -> Optional[List[str]]: + normalized = (name or '').strip() + if not normalized or normalized == DEFAULT_DEVICE_ID: + return None + with STATE_LOCK: + store = _named_playlists_store() + cached = store.get(normalized) + if cached is not None: + return list(cached) + selected = models.get_rotation_playlist(device_id=None, name=normalized) + cache_named_playlist(normalized, selected) + if selected is None: + return None + return list(selected) + + +def _ensure_device_playlist_cached(device_id: str) -> Optional[List[str]]: + with STATE_LOCK: + playlists = global_state.setdefault('device_playlists', {}) + if device_id in playlists: + return playlists[device_id] + selected_ids = models.get_rotation_playlist(device_id=device_id) + cache_device_playlist(device_id, selected_ids) + return selected_ids + + +def initialize_rotation_playlists_from_storage() -> None: + default_playlist = models.get_rotation_playlist() + if default_playlist is not None: + with STATE_LOCK: + master = rotation_master() + master['selected_ids'] = default_playlist + for device_id, selected_ids in models.list_device_playlists(): + cache_device_playlist(device_id, selected_ids) + + for name, selected_ids in models.list_named_rotation_playlists(): + cache_named_playlist(name, selected_ids) + + for device_id, playlist_name in models.list_device_playlist_bindings(): + cache_device_playlist_binding(device_id, playlist_name) + + +def _replace_selected_hash(master: Dict[str, Any], previous_hash: Optional[str], new_hash: str) -> None: + if not previous_hash: + return + selected_ids = master.get('selected_ids') + if not selected_ids: + return + master['selected_ids'] = [new_hash if entry == previous_hash else entry for entry in selected_ids] + + +def _selected_ids_for_device(device_id: Optional[str]) -> List[str]: + if device_id: + bound_name = get_device_playlist_binding_name(device_id) + if bound_name: + bound_playlist = get_named_playlist_selection(bound_name) + if bound_playlist: + return list(bound_playlist) + cached = _ensure_device_playlist_cached(device_id) + if cached is not None: + return list(cached) + master = rotation_master() + selected_ids = master.get('selected_ids') or [] + if selected_ids: + return list(selected_ids) + meta = master.get('meta') or [] + return [entry.get('id') for entry in meta if entry.get('id')] + + +def get_playlist_selection(device_id: Optional[str] = None) -> List[str]: + return _selected_ids_for_device(device_id) + + +def known_device_ids(include_default: bool = True) -> List[str]: + with STATE_LOCK: + ids = set(global_state.get('devices', {}).keys()) + ids.update((global_state.get('device_playlists') or {}).keys()) + ids.update((global_state.get('device_playlist_bindings') or {}).keys()) + ids.update((global_state.get('client_metrics') or {}).keys()) + ids.update((global_state.get('device_profiles') or {}).keys()) + if include_default: + ids.add(DEFAULT_DEVICE_ID) + return sorted(ids) + + +def list_playlist_targets(include_default: bool = True) -> List[Dict[str, Any]]: + assignments: List[Dict[str, Any]] = [] + if include_default: + default_playlist = _selected_ids_for_device(None) + assignments.append({ + 'device_id': DEFAULT_DEVICE_ID, + 'friendly_name': 'Default playlist', + 'playlist': list(default_playlist), + 'count': len(default_playlist) + }) + with STATE_LOCK: + overrides = list((global_state.get('device_playlists') or {}).items()) + for device_id, playlist_ids in sorted(overrides, key=lambda item: item[0]): + current_playlist = list(playlist_ids or []) + profile = ensure_device_profile(device_id) + assignments.append({ + 'device_id': device_id, + 'friendly_name': profile.get('friendly_name') or device_id, + 'playlist': current_playlist, + 'count': len(current_playlist) + }) + return assignments + + +def set_named_playlist(name: str, playlist_ids: List[str]) -> None: + normalized = (name or '').strip() + if not normalized or normalized == DEFAULT_DEVICE_ID: + raise ValueError('invalid playlist name') + if not playlist_ids: + raise ValueError('playlist must contain at least one active entry') + validate_playlist_ids(playlist_ids) + models.save_rotation_playlist(list(playlist_ids), device_id=None, name=normalized) + cache_named_playlist(normalized, list(playlist_ids)) + + +def delete_named_playlist(name: str) -> None: + normalized = (name or '').strip() + if not normalized or normalized == DEFAULT_DEVICE_ID: + raise ValueError('default playlist cannot be deleted') + + with STATE_LOCK: + bindings = dict(_device_playlist_binding_store()) + for device_id, playlist_name in bindings.items(): + if playlist_name == normalized: + models.delete_device_playlist_binding(device_id) + cache_device_playlist_binding(device_id, None) + with STATE_LOCK: + device_state = get_device_state(device_id) + device_state['request_count'] = 0 + device_state['current_playlist_index'] = -1 + device_state['current_entry_index'] = -1 + device_state['last_entry_hash'] = None + device_state['last_entry_plugin'] = None + persist_device_state(device_id, 0, -1, [], None, None) + + models.delete_named_rotation_playlist(normalized) + cache_named_playlist(normalized, None) + + +def set_device_playlist_binding(device_id: str, playlist_name: Optional[str]) -> None: + normalized_device = (device_id or '').strip() or DEFAULT_DEVICE_ID + if normalized_device == DEFAULT_DEVICE_ID: + raise ValueError('invalid device id') + + normalized_name = (playlist_name or '').strip() or DEFAULT_DEVICE_ID + # Binding is the primary assignment mechanism; clear any legacy per-device overrides + # so the binding is reflected immediately in rotation selection. + cache_device_playlist(normalized_device, None) + try: + models.delete_rotation_playlist(device_id=normalized_device) + except Exception as exc: # noqa: BLE001 + logger.warning("Failed to delete legacy rotation playlist for %s: %s", normalized_device, exc) + + if normalized_name != DEFAULT_DEVICE_ID: + selection = get_named_playlist_selection(normalized_name) + if not selection: + raise ValueError('unknown playlist') + models.set_device_playlist_binding(normalized_device, normalized_name) + cache_device_playlist_binding(normalized_device, normalized_name) + else: + models.delete_device_playlist_binding(normalized_device) + cache_device_playlist_binding(normalized_device, None) + + with STATE_LOCK: + device_state = get_device_state(normalized_device) + device_state['request_count'] = 0 + device_state['current_playlist_index'] = -1 + device_state['current_entry_index'] = -1 + device_state['pending_entry_index'] = None + device_state['last_entry_hash'] = None + device_state['last_entry_plugin'] = None + persist_device_state(normalized_device, 0, -1, [], None, None) + + +def _playlist_index_map(master: Optional[Dict[str, Any]] = None) -> Dict[str, int]: + if master is None: + master = rotation_master() + meta = master.get('meta') or [] + return {entry.get('id'): idx for idx, entry in enumerate(meta) if entry.get('id')} + + +def _parse_playlist_entry_id(entry_id: str) -> Tuple[str, Optional[str]]: + """Parse playlist entry IDs with optional media directives. + + Supported suffixes: '@bmp'/'@mono' forces 1-bit BMP delivery; '@png'/'@gray' + forces grayscale PNG delivery; '@auto' uses the default device behavior. + + Returns (base_id, media) where media is 'bmp', 'png', or None. + """ + raw = (entry_id or '').strip() + if not raw or '@' not in raw: + return raw, None + + base, suffix = raw.rsplit('@', 1) + suffix_norm = suffix.strip().lower() + if suffix_norm in ('bmp', 'mono', '1bit', '1-bit'): + return base, 'bmp' + if suffix_norm in ('png', 'gray', 'grayscale'): + return base, 'png' + if suffix_norm in ('auto',): + return base, None + return raw, None + + +def _resolved_playlist_for_device(device_id: Optional[str]) -> Tuple[List[str], List[int]]: + master = rotation_master() + playlist_ids = _selected_ids_for_device(device_id) + if not playlist_ids: + playlist_ids = [entry.get('id') for entry in master.get('meta') or [] if entry.get('id')] + mapping = _playlist_index_map(master) + resolved_ids: List[str] = [] + resolved_indexes: List[int] = [] + resolved_media: List[str] = [] + for entry_id in playlist_ids: + base_id, media = _parse_playlist_entry_id(entry_id) + index = mapping.get(base_id) + if index is None: + continue + resolved_ids.append(entry_id) + resolved_indexes.append(index) + resolved_media.append(media or 'auto') + return resolved_ids, resolved_indexes, resolved_media + + +def _update_playlist_snapshot(device_id: str, device_state: Dict[str, Any]) -> Tuple[List[str], List[int]]: + resolved_ids, resolved_indexes, resolved_media = _resolved_playlist_for_device(device_id) + device_state['playlist_ids'] = list(resolved_ids) + device_state['playlist_indexes'] = list(resolved_indexes) + device_state['playlist_media'] = list(resolved_media) + if resolved_indexes: + max_index = len(resolved_indexes) - 1 + if device_state.get('current_playlist_index', -1) > max_index: + device_state['current_playlist_index'] = -1 + else: + device_state['current_playlist_index'] = -1 + device_state['current_entry_index'] = -1 + device_state['current_entry_media'] = 'auto' + return device_state['playlist_ids'], device_state['playlist_indexes'] + + +def _select_next_playlist_entry(device_id: str, device_state: Dict[str, Any]) -> Tuple[int, str]: + with STATE_LOCK: + _, playlist_indexes = _update_playlist_snapshot(device_id, device_state) + if not playlist_indexes: + raise RotationUnavailableError(f'No rotation entries are available for {device_id}') + request_count = int(device_state.get('request_count') or 0) + position = request_count % len(playlist_indexes) + entry_index = playlist_indexes[position] + playlist_media = device_state.get('playlist_media') or [] + media = str(playlist_media[position]) if position < len(playlist_media) else 'auto' + if media not in ('bmp', 'png'): + media = 'auto' + master = rotation_master() + meta_list = master.get('meta') or [] + if entry_index < 0 or entry_index >= len(meta_list): + raise RotationUnavailableError(f'Playlist entry {entry_index} is invalid for {device_id}') + entry = meta_list[entry_index] + entry_id = entry.get('id') + plugin_id = entry.get('plugin') + device_state['request_count'] = request_count + 1 + device_state['current_playlist_index'] = position + device_state['current_entry_index'] = entry_index + device_state['current_entry_media'] = media + device_state['last_entry_hash'] = entry_id + device_state['last_entry_plugin'] = plugin_id + playlist_snapshot = list(playlist_indexes) + request_snapshot = device_state['request_count'] + persist_device_state( + device_id, + request_snapshot, + position, + playlist_snapshot, + entry_id, + plugin_id + ) + return entry_index, media + + +def validate_playlist_ids(playlist_ids: List[str]) -> None: + mapping = _playlist_index_map() + unknown: List[str] = [] + for pid in playlist_ids: + base_id, _ = _parse_playlist_entry_id(pid) + if base_id not in mapping: + unknown.append(pid) + if unknown: + raise ValueError(f'unknown playlist ids: {unknown}') + + +def set_default_playlist(playlist_ids: List[str]) -> None: + master = rotation_master() + mapping = _playlist_index_map(master) + unknown: List[str] = [] + for pid in playlist_ids: + base_id, _ = _parse_playlist_entry_id(pid) + if base_id not in mapping: + unknown.append(pid) + if unknown: + raise ValueError(f'unknown playlist ids: {unknown}') + with STATE_LOCK: + master = rotation_master() + master['selected_ids'] = playlist_ids + master['version'] += 1 + selection_snapshot = list(master['selected_ids']) + persist_default_playlist(selection_snapshot) + + +def set_device_playlist(device_id: str, playlist_ids: List[str]) -> None: + master = rotation_master() + mapping = _playlist_index_map(master) + unknown: List[str] = [] + resolved_indexes: List[int] = [] + for pid in playlist_ids: + base_id, _ = _parse_playlist_entry_id(pid) + idx = mapping.get(base_id) + if idx is None: + unknown.append(pid) + else: + resolved_indexes.append(idx) + if unknown: + raise ValueError(f'unknown playlist ids: {unknown}') + + playlist_indexes = resolved_indexes + with STATE_LOCK: + device_state = get_device_state(device_id) + device_state['playlist_ids'] = list(playlist_ids) + device_state['playlist_indexes'] = list(playlist_indexes) + device_state['playlist_media'] = [] + device_state['request_count'] = 0 + device_state['current_playlist_index'] = -1 + device_state['current_entry_index'] = -1 + device_state['current_entry_media'] = 'auto' + device_state['last_entry_hash'] = None + device_state['last_entry_plugin'] = None + device_state['pending_entry_media'] = None + cache_device_playlist(device_id, list(playlist_ids)) + persist_device_playlist(device_id, list(playlist_ids)) + persist_device_state(device_id, 0, -1, playlist_indexes, None, None) + + +def clear_device_playlist(device_id: str) -> None: + with STATE_LOCK: + playlists = global_state.setdefault('device_playlists', {}) + playlists.pop(device_id, None) + devices = global_state.setdefault('devices', {}) + device_state = devices.setdefault(device_id, _build_device_state()) + device_state['playlist_ids'] = [] + device_state['playlist_indexes'] = [] + device_state['request_count'] = 0 + device_state['current_playlist_index'] = -1 + device_state['current_entry_index'] = -1 + device_state['last_entry_hash'] = None + device_state['last_entry_plugin'] = None + + models.delete_rotation_playlist(device_id=device_id) + persist_device_state(device_id, 0, -1, [], None, None) + + +def persist_device_state( + device_id: str, + request_count: int, + playlist_position: int, + playlist_indexes: List[int], + current_entry_id: Optional[str], + current_plugin_id: Optional[str] +) -> None: + try: + snapshot = [str(idx) for idx in playlist_indexes] + models.save_device_state( + device_id=device_id, + rotation_version=request_count, + rotation_index=playlist_position, + rotation_hash_order=snapshot, + last_entry_hash=current_entry_id, + current_plugin_id=current_plugin_id + ) + except Exception as exc: # noqa: BLE001 + logger.warning("Failed to persist device state for %s: %s", device_id, exc) + + +def schedule_next_rotation_entry(device_id: str, device_state: Dict[str, Any]) -> int: + entry_idx, media = _select_next_playlist_entry(device_id, device_state) + with STATE_LOCK: + device_state['pending_entry_index'] = entry_idx + device_state['pending_entry_media'] = media + return entry_idx + + +def _pop_pending_entry_index(device_state: Dict[str, Any]) -> Optional[int]: + with STATE_LOCK: + pending = device_state.get('pending_entry_index') + device_state['pending_entry_index'] = None + device_state['pending_entry_media'] = None + return pending + + +def _resolve_next_entry(device_id: str, device_state: Dict[str, Any]) -> int: + pending = _pop_pending_entry_index(device_state) + if pending is not None: + return pending + entry_idx, _ = _select_next_playlist_entry(device_id, device_state) + return entry_idx + + +def _rotation_frame_bytes(entry_idx: int, media: str) -> bytes: + key = 'bmp_entries' if media == 'bmp' else 'png_entries' + with STATE_LOCK: + master = rotation_master() + entries = master.get(key) or [] + if entry_idx < 0 or entry_idx >= len(entries): + raise RotationUnavailableError(f'Rotation index {entry_idx} is out of range for {media.upper()} frames') + return entries[entry_idx] + + +def get_rotation_bmp_bytes(entry_idx: int) -> bytes: + return _rotation_frame_bytes(entry_idx, 'bmp') + + +def get_rotation_png_bytes(entry_idx: int) -> bytes: + return _rotation_frame_bytes(entry_idx, 'png') + + +def current_frame_entry_index(device_state: Dict[str, Any]) -> Optional[int]: + with STATE_LOCK: + pending = device_state.get('pending_entry_index') + if isinstance(pending, int) and pending >= 0: + return pending + current = device_state.get('current_entry_index') + if isinstance(current, int) and current >= 0: + return current + return None + + +def preview_frame_entry_index(device_state: Dict[str, Any]) -> Optional[int]: + with STATE_LOCK: + preview = device_state.get('current_preview_entry_index') + if isinstance(preview, int) and preview >= 0: + return preview + return None + + +def get_next_bmp_frame(device_id: str, device_state: Dict[str, Any]) -> BytesIO: + entry_idx = _resolve_next_entry(device_id, device_state) + bmp_bytes = get_rotation_bmp_bytes(entry_idx) + return BytesIO(bmp_bytes) + + +def get_next_png_frame(device_id: str, device_state: Dict[str, Any]) -> BytesIO: + entry_idx = _resolve_next_entry(device_id, device_state) + png_bytes = get_rotation_png_bytes(entry_idx) + return BytesIO(png_bytes) + + +def _build_rotation_meta( + plugin_name: str, + bmp_path: str, + png_path: str, + entry_id: str, + content_hash: str, + display_name: Optional[str] = None +) -> Dict[str, Any]: + label = display_name or plugin_name + return { + 'id': entry_id, + 'hash': content_hash, + 'plugin': plugin_name, + 'label': label, + 'bmp_path': abspath(bmp_path), + 'png_path': abspath(png_path), + 'url_bmp': utils.path_to_web_url(bmp_path), + 'url_png': utils.path_to_web_url(png_path) + } + + +def set_primary_rotation_assets( + plugin_name: str, + assets: PluginOutput, + display_name: Optional[str] = None +) -> None: + bmp_bytes = _read_image_bytes(assets.monochrome_path) + png_bytes = _read_image_bytes(assets.grayscale_path) + content_hash = _digest_bytes(b"|".join((bmp_bytes, png_bytes))) + preferred_id = _rotation_entry_id(plugin_name, assets.monochrome_path, assets.grayscale_path) + + selection_snapshot: Optional[List[str]] = None + with STATE_LOCK: + master = rotation_master() + if _prune_missing_selected_ids(master): + selection_snapshot = list(master.get('selected_ids') or []) + bmp_entries = master.setdefault('bmp_entries', []) + png_entries = master.setdefault('png_entries', []) + hashes = master.setdefault('hashes', []) + meta_list = master.setdefault('meta', []) + had_entries = bool(bmp_entries) + auto_fill_enabled = _selected_matches_all(master) + + previous_id = None + if had_entries and meta_list: + previous_id = meta_list[0].get('id') + disallowed_ids = {entry.get('id') for entry in meta_list if entry.get('id')} + if previous_id: + disallowed_ids.discard(previous_id) + entry_id = previous_id or preferred_id + entry_id = _collision_safe_rotation_id(entry_id, disallowed_ids) + meta_entry = _build_rotation_meta( + plugin_name, + assets.monochrome_path, + assets.grayscale_path, + entry_id, + content_hash, + display_name + ) + + if bmp_entries: + bmp_entries[0] = bmp_bytes + png_entries[0] = png_bytes + hashes[0] = content_hash + if meta_list: + meta_list[0] = meta_entry + else: + meta_list.append(meta_entry) + else: + bmp_entries.append(bmp_bytes) + png_entries.append(png_bytes) + hashes.append(content_hash) + meta_list.append(meta_entry) + + if not had_entries: + master['version'] += 1 + + if (not master.get('selected_ids')) or auto_fill_enabled: + master['selected_ids'] = [entry.get('id') for entry in meta_list if entry.get('id')] + selection_snapshot = list(master['selected_ids']) + + if selection_snapshot is not None: + persist_default_playlist(selection_snapshot) + + +def append_rotation_assets( + plugin_name: str, + assets: PluginOutput, + display_name: Optional[str] = None +) -> None: + bmp_bytes = _read_image_bytes(assets.monochrome_path) + png_bytes = _read_image_bytes(assets.grayscale_path) + content_hash = _digest_bytes(b"|".join((bmp_bytes, png_bytes))) + preferred_id = _rotation_entry_id(plugin_name, assets.monochrome_path, assets.grayscale_path) + selection_snapshot: Optional[List[str]] = None + replaced_entry = False + skip_append = False + with STATE_LOCK: + master = rotation_master() + if _prune_missing_selected_ids(master): + selection_snapshot = list(master.get('selected_ids') or []) + hashes = master.setdefault('hashes', []) + meta_list = master.setdefault('meta', []) + bmp_entries = master.setdefault('bmp_entries', []) + png_entries = master.setdefault('png_entries', []) + auto_fill_enabled = _selected_matches_all(master) + + replace_index = None + for idx, meta_entry in enumerate(meta_list): + if meta_entry.get('plugin') == plugin_name: + replace_index = idx + break + + if replace_index is not None: + previous_id = meta_list[replace_index].get('id') if replace_index < len(meta_list) else None + disallowed_ids = {entry.get('id') for entry in meta_list if entry.get('id')} + if previous_id: + disallowed_ids.discard(previous_id) + entry_id = previous_id or preferred_id + entry_id = _collision_safe_rotation_id(entry_id, disallowed_ids) + bmp_entries[replace_index] = bmp_bytes + png_entries[replace_index] = png_bytes + hashes[replace_index] = content_hash + meta_list[replace_index] = _build_rotation_meta( + plugin_name, + assets.monochrome_path, + assets.grayscale_path, + entry_id, + content_hash, + display_name + ) + selection_snapshot = list(master.get('selected_ids') or []) + replaced_entry = True + + if replace_index is None: + disallowed_ids = {entry.get('id') for entry in meta_list if entry.get('id')} + entry_id = _collision_safe_rotation_id(preferred_id, disallowed_ids) + + bmp_entries.append(bmp_bytes) + png_entries.append(png_bytes) + hashes.append(content_hash) + meta_list.append( + _build_rotation_meta( + plugin_name, + assets.monochrome_path, + assets.grayscale_path, + entry_id, + content_hash, + display_name + ) + ) + master['version'] += 1 + if (not master.get('selected_ids')) or auto_fill_enabled: + master['selected_ids'] = [entry.get('id') for entry in meta_list if entry.get('id')] + selection_snapshot = list(master['selected_ids']) + + if selection_snapshot is not None: + persist_default_playlist(selection_snapshot) + + if skip_append or replaced_entry: + return + + +def build_rotation_snapshot() -> Dict[str, Any]: + persist_default: Optional[List[str]] = None + persist_devices: Dict[str, List[str]] = {} + persist_named: Dict[str, List[str]] = {} + + with STATE_LOCK: + master = rotation_master() + if _prune_missing_selected_ids(master): + persist_default = list(master.get('selected_ids') or []) + + meta = list(master.get('meta') or []) + selected_ids = list(master.get('selected_ids') or []) + version = master.get('version', 0) + + device_playlists = { + device_id: list(playlist or []) + for device_id, playlist in (global_state.get('device_playlists') or {}).items() + if playlist is not None + } + named_playlists = { + name: list(value or []) + for name, value in (global_state.get('named_playlists') or {}).items() + if value is not None + } + bindings = { + device_id: playlist_name + for device_id, playlist_name in (global_state.get('device_playlist_bindings') or {}).items() + if playlist_name and playlist_name != DEFAULT_DEVICE_ID + } + entries: List[Dict[str, Any]] = [] + for entry in meta: + entries.append({ + 'id': entry.get('id'), + 'label': entry.get('label'), + 'plugin': entry.get('plugin'), + 'url_png': entry.get('url_png'), + 'url_bmp': entry.get('url_bmp') + }) + + valid_ids = {e.get('id') for e in entries if e.get('id')} + entry_fallback = [e.get('id') for e in entries if e.get('id')] + + # Hygiene: prune IDs that no longer exist in the current rotation entries. + original_default = list(selected_ids) + selected_ids = [entry_id for entry_id in selected_ids if _parse_playlist_entry_id(entry_id)[0] in valid_ids] + if selected_ids != original_default: + persist_default = list(selected_ids) + with STATE_LOCK: + master = rotation_master() + master['selected_ids'] = list(selected_ids) + + for device_id, playlist in list(device_playlists.items()): + original = list(playlist or []) + filtered = [entry_id for entry_id in original if _parse_playlist_entry_id(entry_id)[0] in valid_ids] + if filtered != original: + device_playlists[device_id] = filtered + persist_devices[device_id] = filtered + with STATE_LOCK: + global_state.setdefault('device_playlists', {})[device_id] = list(filtered) + + for name, playlist in list(named_playlists.items()): + original = list(playlist or []) + filtered = [entry_id for entry_id in original if _parse_playlist_entry_id(entry_id)[0] in valid_ids] + if filtered != original: + named_playlists[name] = filtered + persist_named[name] = filtered + with STATE_LOCK: + global_state.setdefault('named_playlists', {})[name] = list(filtered) + + default_playlist = selected_ids or entry_fallback + payload = { + 'version': version, + 'playlists': { + 'default': default_playlist + }, + 'entries': entries + } + if device_playlists: + payload['playlists']['devices'] = device_playlists + if named_playlists: + payload['playlists']['named'] = named_playlists + if bindings: + payload['playlists']['bindings'] = bindings + + # Persist pruned playlists back to SQLite (outside the state lock). + if persist_default is not None: + persist_default_playlist(list(persist_default)) + for device_id, playlist in persist_devices.items(): + persist_device_playlist(device_id, list(playlist)) + for name, playlist in persist_named.items(): + try: + models.save_rotation_playlist(list(playlist), device_id=None, name=name) + except Exception as exc: # noqa: BLE001 + logger.warning("Failed to persist named playlist '%s': %s", name, exc) + + return payload + + +def get_rotation_entry(entry_hash: Optional[str]) -> Optional[Dict[str, Any]]: + if not entry_hash: + return None + master = rotation_master() + for entry in master.get('meta') or []: + if entry.get('hash') == entry_hash or entry.get('id') == entry_hash: + return entry + return None + + +def _decode_persisted_playlist_indexes(device_id: str, stored_indexes: List[Any]) -> List[int]: + parsed: List[int] = [] + if not stored_indexes: + return parsed + mapping: Optional[Dict[str, int]] = None + for value in stored_indexes: + if isinstance(value, int): + parsed.append(value) + continue + try: + parsed.append(int(value)) + continue + except (TypeError, ValueError): + entry_id = str(value).strip() + if not entry_id: + continue + if mapping is None: + mapping = _playlist_index_map() + resolved_index = mapping.get(entry_id) + if resolved_index is None: + logger.info("Dropping legacy rotation entry '%s' for %s", entry_id, device_id) + continue + parsed.append(resolved_index) + return parsed + + +def get_device_state(device_id: str) -> Dict[str, Any]: + created = False + with STATE_LOCK: + devices = global_state.setdefault('devices', {}) + if device_id not in devices: + devices[device_id] = _build_device_state() + created = True + state = devices[device_id] + ensure_device_profile(device_id) + get_client_metrics(device_id) + if created: + persisted = models.get_device_state(device_id) + if persisted: + with STATE_LOCK: + state['request_count'] = int(persisted.get('rotation_version') or 0) + state['current_playlist_index'] = int(persisted.get('rotation_index', -1)) + stored_indexes = persisted.get('rotation_hash_order') or [] + parsed_indexes = _decode_persisted_playlist_indexes(device_id, stored_indexes) + state['playlist_indexes'] = parsed_indexes + state['last_entry_hash'] = persisted.get('last_entry_hash') + state['last_entry_plugin'] = persisted.get('current_plugin_id') + if 0 <= state['current_playlist_index'] < len(parsed_indexes): + state['current_entry_index'] = parsed_indexes[state['current_playlist_index']] + else: + state['current_playlist_index'] = -1 + state['current_entry_index'] = -1 + if 'grayscale_send_switch' not in state: + state['grayscale_send_switch'] = True + return state + + +def _extract_device_id(request: Optional[Request]) -> str: + if not request: + return DEFAULT_DEVICE_ID + for header in ('x-device-id', 'device-id', 'id'): + value = request.headers.get(header) + if value: + return value.strip() + query_params = request.query_params + for key in ('device', 'device_id', 'id', 'deviceId'): + candidate = query_params.get(key) + if candidate: + return candidate.strip() + return DEFAULT_DEVICE_ID + + +def request_base_url(request: Optional[Request]) -> str: + if not request: + return get_server_base_url() + base = str(request.base_url) + if base: + return base[:-1] if base.endswith('/') else base + host = request.headers.get('host') + scheme = request.url.scheme if request.url.scheme else config.SERVER_SCHEME + if host: + return f"{scheme}://{host}" + return get_server_base_url() + + +def get_device_state_from_request(request: Request) -> Tuple[str, Dict[str, Any]]: + device_id = _extract_device_id(request) + return device_id, get_device_state(device_id) diff --git a/trmnl_server/utils.py b/trmnl_server/utils.py new file mode 100644 index 0000000..1e50347 --- /dev/null +++ b/trmnl_server/utils.py @@ -0,0 +1,878 @@ +import os +import socket +from io import BytesIO +from functools import lru_cache +from pathlib import Path +from typing import List, Optional, Sequence, Tuple, Union +import hashlib +import math +import httpx +import datetime +from PIL import Image, ImageDraw, ImageFont +from . import config + +# Constants +PACKAGE_ROOT = Path(__file__).resolve().parent +PROJECT_ROOT = PACKAGE_ROOT.parent + +AVAILABLE_DITHER_MODES: Tuple[str, ...] = ( + 'none', + 'floyd-steinberg', + 'ordered-blue-noise', + 'perceptual', + 'multi-pass' +) + +_DITHER_TRUE_VALUES = {'true', '1', 'yes', 'on'} +_DITHER_MODE_ALIASES = { + 'none': 'none', + 'off': 'none', + '0': 'none', + 'false': 'none', + 'floyd': 'floyd-steinberg', + 'fs': 'floyd-steinberg', + 'floyd-steinberg': 'floyd-steinberg', + 'ordered': 'ordered-blue-noise', + 'blue-noise': 'ordered-blue-noise', + 'ordered-blue-noise': 'ordered-blue-noise', + 'perceptual': 'perceptual', + 'multi-pass': 'multi-pass', + 'multipass': 'multi-pass', + 'multi': 'multi-pass' +} + +BLUE_NOISE_MATRIX: List[List[int]] = [ + [50, 47, 14, 52, 44, 8, 56, 61], + [24, 23, 36, 37, 22, 12, 57, 34], + [42, 38, 32, 33, 63, 27, 58, 3], + [43, 31, 28, 11, 40, 17, 15, 20], + [62, 39, 5, 16, 10, 60, 26, 48], + [54, 35, 59, 45, 53, 9, 4, 46], + [25, 19, 55, 29, 2, 1, 49, 21], + [13, 41, 7, 6, 18, 0, 51, 30] +] +BLUE_NOISE_HEIGHT = len(BLUE_NOISE_MATRIX) +BLUE_NOISE_WIDTH = len(BLUE_NOISE_MATRIX[0]) +BLUE_NOISE_AREA = BLUE_NOISE_HEIGHT * BLUE_NOISE_WIDTH + + +def _clamp_byte(value: int) -> int: + return max(0, min(255, int(value))) + + +def _parse_tone_points(raw: str) -> List[Tuple[int, int]]: + """Parse EINK_TONE_POINTS as comma-separated "in:out" byte pairs.""" + points: List[Tuple[int, int]] = [] + raw = (raw or '').strip() + if not raw: + return points + + for token in raw.split(','): + token = token.strip() + if not token: + continue + if ':' not in token: + continue + left, right = token.split(':', 1) + left = left.strip() + right = right.strip() + if not left or not right: + continue + try: + x = _clamp_byte(int(left)) + y = _clamp_byte(int(right)) + except ValueError: + continue + points.append((x, y)) + + points = sorted(set(points), key=lambda pair: pair[0]) + return points + + +def _enforce_monotonic(values: List[int]) -> List[int]: + last = 0 + for idx, value in enumerate(values): + if idx == 0: + last = _clamp_byte(value) + values[idx] = last + continue + last = max(last, _clamp_byte(value)) + values[idx] = last + return values + + +@lru_cache(maxsize=32) +def _tone_curve_forward_lut_cached(points_raw: str, gamma: float) -> List[int]: + """Return 256-entry LUT mapping digital gray -> panel gray for the given settings.""" + points = _parse_tone_points(points_raw) + if points: + if points[0][0] != 0: + points = [(0, 0)] + points + if points[-1][0] != 255: + points = points + [(255, 255)] + + lut: List[int] = [0] * 256 + for (x0, y0), (x1, y1) in zip(points, points[1:]): + if x1 <= x0: + continue + span = x1 - x0 + for x in range(x0, x1 + 1): + if x < 0 or x > 255: + continue + t = (x - x0) / float(span) + lut[x] = _clamp_byte(int(round(y0 + (y1 - y0) * t))) + return _enforce_monotonic(lut) + + if gamma and gamma != 1.0: + lut = [_clamp_byte(int(round((math.pow(i / 255.0, gamma)) * 255))) for i in range(256)] + return _enforce_monotonic(lut) + + return list(range(256)) + + +def _tone_curve_forward_lut() -> List[int]: + """Return 256-entry LUT mapping digital gray -> panel gray.""" + points_raw = str(getattr(config, 'EINK_TONE_POINTS', '') or '') + gamma = float(getattr(config, 'EINK_TONE_GAMMA', 1.0) or 1.0) + return _tone_curve_forward_lut_cached(points_raw, gamma) + + +@lru_cache(maxsize=32) +def _tone_curve_inverse_lut_cached(points_raw: str, gamma: float) -> List[int]: + """Return 256-entry LUT mapping desired panel gray -> digital gray for the given settings.""" + forward = _tone_curve_forward_lut_cached(points_raw, gamma) + inverse: List[int] = [0] * 256 + + idx = 0 + for target in range(256): + while idx < 255 and forward[idx] < target: + idx += 1 + if idx == 0: + inverse[target] = 0 + continue + if forward[idx] == target or forward[idx] == forward[idx - 1]: + inverse[target] = idx + continue + y0 = forward[idx - 1] + y1 = forward[idx] + t = (target - y0) / float(y1 - y0) + inverse[target] = _clamp_byte(int(round((idx - 1) + t))) + + inverse[0] = 0 + inverse[255] = 255 + return _enforce_monotonic(inverse) + + +def _tone_curve_inverse_lut() -> List[int]: + """Return 256-entry LUT mapping desired panel gray -> digital gray.""" + points_raw = str(getattr(config, 'EINK_TONE_POINTS', '') or '') + gamma = float(getattr(config, 'EINK_TONE_GAMMA', 1.0) or 1.0) + return _tone_curve_inverse_lut_cached(points_raw, gamma) + + +def _tone_curve_enabled() -> bool: + points = (getattr(config, 'EINK_TONE_POINTS', '') or '').strip() + gamma = float(getattr(config, 'EINK_TONE_GAMMA', 1.0) or 1.0) + return bool(points) or (gamma != 1.0) + + +def _palette_levels_digital(levels: int) -> List[int]: + """Return list of palette gray values in digital space (0-255).""" + if levels <= 1: + return [0] + inverse = _tone_curve_inverse_lut() + + if not _tone_curve_enabled(): + step_values_panel = [int(round(index * 255 / (levels - 1))) for index in range(levels)] + else: + forward = _tone_curve_forward_lut() + panel_min = int(forward[0]) + panel_max = int(forward[255]) + if panel_max <= panel_min: + panel_min = 0 + panel_max = 255 + step_values_panel = [ + int(round(panel_min + (index * (panel_max - panel_min) / (levels - 1)))) + for index in range(levels) + ] + values = [inverse[v] for v in step_values_panel] + + for idx in range(1, len(values)): + if values[idx] <= values[idx - 1]: + values[idx] = min(255, values[idx - 1] + 1) + if len(set(values)) != len(values): + values = [int(round(index * 255 / (levels - 1))) for index in range(levels)] + return values + + +def get_effective_grayscale_palette_levels(levels: int = 4) -> Tuple[List[int], List[int]]: + """Return (panel_levels, digital_levels) used for grayscale palette generation. + + - panel_levels are the target levels in "panel space" (0-255) that the palette + aims to represent. + - digital_levels are the pixel values (0-255) that will be written into the + generated grayscale PNG/BMP assets. + """ + if levels <= 1: + return ([0], [0]) + + if not _tone_curve_enabled(): + levels_minus = levels - 1 + panel_levels = [int(round(index * 255 / levels_minus)) for index in range(levels)] + return (panel_levels, panel_levels) + + forward = _tone_curve_forward_lut() + panel_min = int(forward[0]) + panel_max = int(forward[255]) + if panel_max <= panel_min: + panel_min = 0 + panel_max = 255 + + levels_minus = levels - 1 + panel_levels = [ + int(round(panel_min + (index * (panel_max - panel_min) / levels_minus))) + for index in range(levels) + ] + return (panel_levels, _palette_levels_digital(levels)) + + +def get_assets_root() -> Path: + """Return the absolute path to the configured assets directory.""" + return Path(config.WEB_ROOT_DIR) + + +def asset_path(*parts: str) -> Path: + """Build a path inside the configured assets directory.""" + return static_asset_path(*parts) + + +def get_static_assets_root() -> Path: + """Return the absolute path to the static assets directory.""" + return Path(config.WEB_STATIC_DIR) + + +def get_generated_assets_root() -> Path: + """Return the absolute path to the generated assets directory.""" + return Path(config.WEB_GENERATED_DIR) + + +def static_asset_path(*parts: str) -> Path: + """Build a path inside the static assets directory.""" + return get_static_assets_root().joinpath(*parts) + + +def generated_asset_path(*parts: str) -> Path: + """Build a path inside the generated assets directory.""" + return get_generated_assets_root().joinpath(*parts) + + +def _default_font_candidates() -> Tuple[str, ...]: + return ( + asset_path('fonts/ttf/static/SpaceGrotesk-Medium.ttf').as_posix(), + asset_path('fonts/ttf/static/SpaceGrotesk-Regular.ttf').as_posix() + ) + + +def get_available_dither_modes() -> Tuple[str, ...]: + """Return the supported dithering mode names.""" + return AVAILABLE_DITHER_MODES + + +def path_to_web_url(path: str, prefix: str = '/web') -> Optional[str]: + """Convert a filesystem path into the correct static or generated URL.""" + candidate = Path(path) + try: + candidate = candidate.resolve() + except FileNotFoundError: + candidate = candidate if candidate.is_absolute() else (PROJECT_ROOT / candidate) + + lookups: Tuple[Tuple[Path, str], ...] = ( + (get_static_assets_root(), prefix), + (get_generated_assets_root(), '/generated'), + (get_assets_root(), prefix) + ) + for root, base in lookups: + try: + relative = candidate.relative_to(root) + return f"{base}/{relative.as_posix()}" + except ValueError: + continue + return None + + +def resolve_dither_mode(mode: Optional[str]) -> str: + """Normalize a user-specified dithering mode to a canonical value.""" + if not mode: + return config.DITHERING_MODE + + lowered = mode.strip().lower() + if lowered in _DITHER_TRUE_VALUES: + return config.DITHERING_MODE + if lowered in _DITHER_MODE_ALIASES: + return _DITHER_MODE_ALIASES[lowered] + + config.logger.warning("[dither] Unknown mode '%s', falling back to %s", mode, config.DITHERING_MODE) + return config.DITHERING_MODE + + +def load_font(size: int, candidates: Optional[Sequence[str]] = None) -> ImageFont.ImageFont: + """Load the first available font from the candidate list or fall back to default.""" + font_candidates = candidates or _default_font_candidates() + for candidate in font_candidates: + candidate_path = Path(candidate) + if not candidate_path.is_absolute(): + candidate_path = PROJECT_ROOT / candidate_path + if candidate_path.exists(): + try: + return ImageFont.truetype(candidate_path.as_posix(), size) + except OSError as exc: + config.logger.warning("[font] failed to load %s: %s", candidate_path, exc) + config.logger.warning("[font] falling back to default font") + return ImageFont.load_default() + +def get_ip_address() -> str: + """ + Get the local IP address of the machine. + """ + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + # doesn't even have to be reachable + s.connect(('10.254.254.254', 1)) + ip = s.getsockname()[0] + except (IndexError, KeyError): + ip = '127.0.0.1' + finally: + s.close() + return ip + +def get_battery_state(battery_voltage: float) -> float: + """ + Calculate the battery state based on the given battery voltage. + """ + if float(battery_voltage) > 4.6: # is charging + return 255 + + try: + battery_state = round( + ( + (float(battery_voltage) - config.BATTERY_MIN_VOLTAGE) / + ( + config.BATTERY_MAX_VOLTAGE - + config.BATTERY_MIN_VOLTAGE + )) * 100, 1 + ) + except ZeroDivisionError: + battery_state = 0 + + if battery_state > 100: + battery_state = 100 + elif battery_state < 0: + battery_state = 0 + return battery_state + +def get_wifi_signal_strength(rssi: int) -> int: + """ + Calculate the WiFi signal strength quality based on the RSSI value. + """ + if rssi <= -100: + quality = 0 + elif rssi >= -50: + quality = 100 + else: + quality = 2 * (rssi + 100) + return quality + +def load_image(image_path: str) -> BytesIO: + """ + Load an image from a local file path or a URL. + """ + if image_path.startswith('http://') or image_path.startswith('https://'): + response = httpx.get(image_path, timeout=10) + response.raise_for_status() + return BytesIO(response.content) + with open(image_path, 'rb') as image_file: + return BytesIO(image_file.read()) + + +def ensure_image_mode(image: Union[Image.Image, BytesIO, bytes, bytearray], mode: str) -> Image.Image: + """Return the image in the requested mode, converting only if needed.""" + if isinstance(image, (bytes, bytearray)): + image = BytesIO(image) + if isinstance(image, BytesIO): + image.seek(0) + image = Image.open(image) + if image.mode == mode: + return image + return image.convert(mode) + +def get_no_image() -> BytesIO: + """ + Create a blank image with a white background and overlay text indicating no image is available, + along with the current date and time. The image is saved in BMP format and returned as + a BytesIO object. + """ + # Create a blank image with white background + img = Image.new('1', (800, 480), color=1) # '1' mode for 1-bit pixels, black and white + + # Initialize ImageDraw + d = ImageDraw.Draw(img) + + # Load font + text_font = load_font(24, ( + asset_path('DejaVuSans.ttf').as_posix(), + "DejaVuSans.ttf" + )) + + # Define text position and content + text = "No image available" + date_time = datetime.datetime.now().strftime("%d.%m.%Y %H:%M:%S") + text = f"{text}\n{date_time}" + text_bbox = d.textbbox((0, 0), text, font=text_font) + text_width, text_height = text_bbox[2] - text_bbox[0], text_bbox[3] - text_bbox[1] + text_position = ((img.width - text_width) // 2, (img.height - text_height) // 2) + + # Draw text on the image + d.text(text_position, text, fill=0, font=text_font) # fill=0 for black + + # Save the image to a BytesIO object + img_io = BytesIO() + img.save(img_io, format="BMP") + img_io.seek(0) + return img_io + +def convert_bmp_bytes_to_png(bmp_bytes: BytesIO) -> BytesIO: + """Convert a BMP image stored in memory to PNG format. + + The input BytesIO position is reset to the beginning before reading and the + returned BytesIO is positioned at the start of the PNG data. + """ + bmp_bytes.seek(0) + image = Image.open(bmp_bytes) + png_io = BytesIO() + image.save(png_io, format="PNG") + png_io.seek(0) + return png_io + + +def convert_to_grayscale_levels(image: Image.Image, levels: int = 4) -> Image.Image: + """Convert an image to discrete grayscale levels without dithering.""" + if levels < 2: + return image.convert('L') + + gray = image.convert('L') + levels_minus = max(levels - 1, 1) + + if not _tone_curve_enabled(): + step = 255 / levels_minus + + def _quantize(value: int) -> int: + return int(round(value / step) * step) + + return gray.point(_quantize) + + forward = _tone_curve_forward_lut() + panel_levels, digital_levels = get_effective_grayscale_palette_levels(levels) + panel_min = int(panel_levels[0]) if panel_levels else 0 + panel_max = int(panel_levels[-1]) if panel_levels else 255 + panel_min_n = panel_min / 255.0 + panel_max_n = panel_max / 255.0 + span_n = panel_max_n - panel_min_n + + remap: List[int] = [] + if span_n <= 0.0: + remap = list(range(256)) + return gray.point(remap) + + for value in range(256): + panel_value_n = forward[value] / 255.0 + scaled = (panel_value_n - panel_min_n) / span_n + scaled = max(0.0, min(1.0, scaled)) + level = int(round(scaled * levels_minus)) + level = max(0, min(level, levels_minus)) + remap.append(int(digital_levels[level])) + + return gray.point(remap) + + +def _build_grayscale_palette(levels: int) -> Tuple[List[int], List[int]]: + step_values = _palette_levels_digital(levels) + if step_values: + step_values[0] = 0 + step_values[-1] = 255 + palette: List[int] = [] + for value in step_values: + palette.extend([value, value, value]) + palette.extend([0] * (768 - len(palette))) + + remap_table: List[int] = [] + value_to_index = {value: idx for idx, value in enumerate(step_values)} + if not _tone_curve_enabled(): + for value in range(256): + target = value + closest = min(step_values, key=lambda candidate, t=target: abs(candidate - t)) + remap_table.append(value_to_index[closest]) + return palette, remap_table + + forward = _tone_curve_forward_lut() + palette_panel = [forward[value] for value in step_values] + for value in range(256): + panel_value = forward[value] + closest_index = min( + range(len(palette_panel)), + key=lambda idx, pv=panel_value: abs(palette_panel[idx] - pv) + ) + remap_table.append(closest_index) + return palette, remap_table + + +def _ordered_blue_noise_dither(image: Image.Image, levels: int) -> Image.Image: + gray = image.convert('L') + width, height = gray.size + result = Image.new('L', gray.size) + src = gray.load() + dst = result.load() + levels_minus = max(levels - 1, 1) + + if not _tone_curve_enabled(): + for y in range(height): + for x in range(width): + threshold = BLUE_NOISE_MATRIX[y % BLUE_NOISE_HEIGHT][x % BLUE_NOISE_WIDTH] / BLUE_NOISE_AREA + value = src[x, y] / 255.0 + scaled = value * levels_minus + base_level = math.floor(scaled) + frac = scaled - base_level + level = base_level + if frac > threshold and level < levels_minus: + level += 1 + dst[x, y] = int(round((level / levels_minus) * 255)) if levels_minus else 0 + return result + + forward = _tone_curve_forward_lut() + panel_levels, digital_levels = get_effective_grayscale_palette_levels(levels) + panel_min = int(panel_levels[0]) if panel_levels else 0 + panel_max = int(panel_levels[-1]) if panel_levels else 255 + panel_min_n = panel_min / 255.0 + panel_max_n = panel_max / 255.0 + span_n = panel_max_n - panel_min_n + if span_n <= 0.0: + return gray + + for y in range(height): + for x in range(width): + threshold = BLUE_NOISE_MATRIX[y % BLUE_NOISE_HEIGHT][x % BLUE_NOISE_WIDTH] / BLUE_NOISE_AREA + value = forward[int(src[x, y])] / 255.0 + scaled = (value - panel_min_n) / span_n + scaled = max(0.0, min(1.0, scaled)) * levels_minus + base_level = math.floor(scaled) + frac = scaled - base_level + level = base_level + if frac > threshold and level < levels_minus: + level += 1 + level = max(0, min(int(level), levels_minus)) + dst[x, y] = int(digital_levels[level]) + return result + + +def _error_diffusion_dither(image: Image.Image, levels: int, gamma: Optional[float] = None) -> Image.Image: + gray = image.convert('L') + width, height = gray.size + levels_minus = max(levels - 1, 1) + work: List[List[float]] = [] + + if _tone_curve_enabled(): + forward = _tone_curve_forward_lut() + panel_levels, digital_levels = get_effective_grayscale_palette_levels(levels) + panel_min = int(panel_levels[0]) if panel_levels else 0 + panel_max = int(panel_levels[-1]) if panel_levels else 255 + panel_min_n = panel_min / 255.0 + panel_max_n = panel_max / 255.0 + span_n = panel_max_n - panel_min_n + if span_n <= 0.0: + return image.convert('L') + + use_gamma = bool(gamma) and float(gamma) != 1.0 + for y in range(height): + row: List[float] = [] + for x in range(width): + value = forward[int(gray.getpixel((x, y)))] / 255.0 + scaled = (value - panel_min_n) / span_n + scaled = max(0.0, min(1.0, scaled)) + if use_gamma: + scaled = math.pow(scaled, float(gamma)) + row.append(scaled) + work.append(row) + result = Image.new('L', gray.size) + dst = result.load() + kernel = ( + (1, 0, 7 / 16), + (-1, 1, 3 / 16), + (0, 1, 5 / 16), + (1, 1, 1 / 16) + ) + + for y in range(height): + for x in range(width): + value = work[y][x] + scaled = max(0.0, min(1.0, value)) + level = int(round(scaled * levels_minus)) + level = max(0, min(level, levels_minus)) + + if levels_minus: + linear_level = level / levels_minus + else: + linear_level = 0.0 + quantized = math.pow(linear_level, float(gamma)) if use_gamma else linear_level + dst[x, y] = int(digital_levels[level]) + error = value - quantized + + for dx, dy, weight in kernel: + nx = x + dx + ny = y + dy + if 0 <= nx < width and 0 <= ny < height: + work[ny][nx] += error * weight + work[ny][nx] = max(0.0, min(1.0, work[ny][nx])) + return result + + inv_gamma = 1.0 / gamma if gamma else None + + for y in range(height): + row = [] + for x in range(width): + linear = gray.getpixel((x, y)) / 255.0 + row.append(math.pow(linear, gamma) if gamma else linear) + work.append(row) + + result = Image.new('L', gray.size) + dst = result.load() + kernel = ( + (1, 0, 7 / 16), + (-1, 1, 3 / 16), + (0, 1, 5 / 16), + (1, 1, 1 / 16) + ) + + for y in range(height): + for x in range(width): + value = work[y][x] + scaled = value * levels_minus + level = round(scaled) + level = max(0, min(level, levels_minus)) + quantized = level / levels_minus if levels_minus else 0.0 + linear_value = math.pow(quantized, inv_gamma) if inv_gamma else quantized + dst[x, y] = int(round(linear_value * 255)) + error = value - quantized + + for dx, dy, weight in kernel: + nx = x + dx + ny = y + dy + if 0 <= nx < width and 0 <= ny < height: + work[ny][nx] += error * weight + work[ny][nx] = max(0.0, min(1.0, work[ny][nx])) + + return result + + +def _multi_pass_dither(image: Image.Image, levels: int) -> Image.Image: + higher_levels = min(levels * 2, 16) + ordered = _ordered_blue_noise_dither(image, higher_levels) + return _error_diffusion_dither(ordered, levels) + + +def apply_dithering( + image: Image.Image, + levels: int, + mode: Optional[str] = None +) -> Image.Image: + """Apply the configured dithering mode to the provided image.""" + normalized = resolve_dither_mode(mode) + + if normalized == 'none': + return convert_to_grayscale_levels(image, levels) + if normalized == 'ordered-blue-noise': + return _ordered_blue_noise_dither(image, levels) + if normalized == 'perceptual': + return _error_diffusion_dither(image, levels, gamma=2.2) + if normalized == 'multi-pass': + return _multi_pass_dither(image, levels) + # Default to Floyd-Steinberg + return _error_diffusion_dither(image, levels) + + +def ensure_monochrome_bmp(image_blob: BytesIO, dither_mode: Optional[str] = None) -> BytesIO: + """Convert arbitrary bytes into a TRMNL-compatible 1-bit, palette BMP.""" + image_blob.seek(0) + image = Image.open(image_blob) + + if image.size != (800, 480): + image = image.resize((800, 480), resample=Image.Resampling.NEAREST) + + dithered = apply_dithering(image, levels=2, mode=dither_mode) + mono = dithered.point(lambda value: 255 if value >= 128 else 0, mode='1') + + mono_io = BytesIO() + mono.save(mono_io, format='BMP') + mono_io.seek(0) + image_blob.seek(0) + + bmp_bytes = bytearray(mono_io.getvalue()) + # force 2 color table entries (black, white) + bmp_bytes[46:50] = (2).to_bytes(4, 'little') + bmp_bytes[54:62] = bytes([0, 0, 0, 0, 255, 255, 255, 0]) + + corrected = BytesIO(bmp_bytes) + corrected.seek(0) + return corrected + + +def save_display_assets( + image: Image.Image, + output_dir: str, + basename: str, + dither_mode: Optional[str] = None, + grayscale_levels: Optional[int] = 4 +) -> Tuple[str, str]: + """Persist monochrome BMP plus grayscale PNG assets with optional dithering.""" + os.makedirs(output_dir, exist_ok=True) + safe_name = Path(basename).stem or 'plugin_output' + + if grayscale_levels is None: + grayscale = image.convert('L') if image.mode != 'L' else image + else: + levels = int(grayscale_levels) + if dither_mode: + grayscale = apply_dithering(image, levels=levels, mode=dither_mode) + else: + grayscale = convert_to_grayscale_levels(image, levels=levels) + png_path = os.path.abspath(os.path.join(output_dir, f"{safe_name}.png")) + grayscale.save(png_path, format='PNG') + + bmp_path = os.path.abspath(os.path.join(output_dir, f"{safe_name}.bmp")) + if grayscale_levels is None: + mono = grayscale.point(lambda value: 255 if value >= 128 else 0, mode='1') + mono_io = BytesIO() + mono.save(mono_io, format='BMP') + mono_io.seek(0) + bmp_bytes = bytearray(mono_io.getvalue()) + bmp_bytes[46:50] = (2).to_bytes(4, 'little') + bmp_bytes[54:62] = bytes([0, 0, 0, 0, 255, 255, 255, 0]) + with open(bmp_path, 'wb') as file: + file.write(bytes(bmp_bytes)) + else: + buffer = BytesIO() + grayscale.save(buffer, format='PNG') + buffer.seek(0) + mono_blob = ensure_monochrome_bmp(buffer, dither_mode=dither_mode) + with open(bmp_path, 'wb') as file: + file.write(mono_blob.getvalue()) + + return bmp_path, png_path + + +def generate_image_token( + image_blob: BytesIO, + length: int = 16, + salt: Optional[str] = None +) -> str: + """Return a short digest that identifies the current image payload.""" + position = image_blob.tell() + image_blob.seek(0) + hasher = hashlib.sha256() + hasher.update(image_blob.read()) + if salt: + hasher.update(salt.encode('utf-8')) + digest = hasher.hexdigest() + image_blob.seek(position) + return digest[:length] + + +def generate_grayscale_png(image_blob: BytesIO, levels: int = 4) -> BytesIO: + """Convert the provided image into a palette PNG with limited grayscale levels.""" + if levels < 2: + raise ValueError("levels must be >= 2 for grayscale rendering") + + position = image_blob.tell() + image_blob.seek(0) + image = Image.open(image_blob) + quantized = convert_to_grayscale_levels(image, levels) + palette, remap_table = _build_grayscale_palette(levels) + + indexed = quantized.point(remap_table, 'P') + indexed.putpalette(palette) + + png_io = BytesIO() + indexed.save(png_io, format='PNG', optimize=True) + png_io.seek(0) + image_blob.seek(position) + return png_io + + +def generate_dithered_grayscale_png( + image_blob: BytesIO, + levels: int = 4, + mode: Optional[str] = None +) -> BytesIO: + """Create a multi-tone PNG using the selected dithering strategy.""" + if levels < 2: + raise ValueError("levels must be >= 2 for grayscale rendering") + + position = image_blob.tell() + image_blob.seek(0) + image = Image.open(image_blob) + dithered = apply_dithering(image, levels, mode=mode) + palette, remap_table = _build_grayscale_palette(levels) + + indexed = dithered.point(remap_table, 'P') + indexed.putpalette(palette) + + png_io = BytesIO() + indexed.save(png_io, format='PNG', optimize=True) + png_io.seek(0) + image_blob.seek(position) + return png_io + + +def parse_semver(version: Optional[str]) -> Tuple[int, int, int]: + """Parse a semantic version string into a numeric tuple.""" + if not version: + return (0, 0, 0) + parts = version.split('.') + numbers = [] + for part in parts[:3]: + digits = ''.join(ch for ch in part if ch.isdigit()) + if digits: + numbers.append(int(digits)) + else: + numbers.append(0) + while len(numbers) < 3: + numbers.append(0) + return numbers[0], numbers[1], numbers[2] + + +def firmware_supports_grayscale( + version: Optional[str], + minimum: Tuple[int, int, int] = (1, 6, 0) +) -> bool: + """Return True if the firmware version meets the minimum required for grayscale.""" + parsed = parse_semver(version) + return parsed >= minimum + + +def to_iso_datetime(value: Optional[datetime.datetime]) -> str: + """Return an ISO-8601 representation for datetimes or POSIX timestamps.""" + if value is None: + return '' + if isinstance(value, (int, float)): + if value <= 0: + return '' + value = datetime.datetime.fromtimestamp(value, datetime.timezone.utc) + trimmed = value.replace(microsecond=0) + return trimmed.isoformat() + + +def to_iso_timestamp(timestamp: Optional[float]) -> str: + """Return an ISO-8601 string for a POSIX timestamp in seconds.""" + if timestamp is None or timestamp <= 0: + return '' + dt = datetime.datetime.fromtimestamp(timestamp, datetime.timezone.utc) + return to_iso_datetime(dt) + diff --git a/web/css/styles.css b/web/css/styles.css new file mode 100644 index 0000000..201ba49 --- /dev/null +++ b/web/css/styles.css @@ -0,0 +1,255 @@ +@font-face { + font-family: 'Space Grotesk Local'; + src: url('/web/fonts/woff2/static/SpaceGrotesk-Regular.woff2') format('woff2'), + url('/web/fonts/ttf/static/SpaceGrotesk-Regular.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Space Grotesk Local'; + src: url('/web/fonts/woff2/static/SpaceGrotesk-Medium.woff2') format('woff2'), + url('/web/fonts/ttf/static/SpaceGrotesk-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Space Grotesk Local'; + src: url('/web/fonts/woff2/static/SpaceGrotesk-Bold.woff2') format('woff2'), + url('/web/fonts/ttf/static/SpaceGrotesk-Bold.ttf') format('truetype'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +:root { + color-scheme: light; + --color-bg: #f5f7fb; + --color-surface: #ffffff; + --color-border: #dfe3ec; + --color-border-strong: #c4cad8; + --color-text: #0d111a; + --color-muted: #5f6677; + --color-accent: #2f7bff; + --color-menu-bg: var(--color-surface); + --color-menu-active: rgba(47, 123, 255, 0.12); + --color-menu-text: var(--color-text); + --color-topbar-bg: var(--color-surface); + --color-topbar-text: var(--color-text); + --color-log-bg: #f4f6fb; + --color-log-entry-bg: #ffffff; + --color-log-border: #dde3f0; + --color-log-text: #1f2535; + --color-card-bg: #ffffff; + --color-card-border: #dfe3ec; + --color-card-thumb-bg: #eff3ff; + --color-progress-blue: #1b6bff; + --color-progress-green: #1dab7b; + --device-card-padding: 18px; +} + +:root[data-theme='dark'] { + color-scheme: dark; + --color-bg: #05070e; + --color-surface: #101526; + --color-border: #232a3d; + --color-border-strong: #3a4356; + --color-text: #e2e7f5; + --color-muted: #9aa7c1; + --color-accent: #73c6ff; + --color-menu-bg: var(--color-surface); + --color-menu-active: rgba(115, 198, 255, 0.16); + --color-menu-text: var(--color-text); + --color-topbar-bg: var(--color-surface); + --color-topbar-text: var(--color-text); + --color-log-bg: #05070b; + --color-log-entry-bg: #10131f; + --color-log-border: #1e232f; + --color-log-text: #f4f6ff; + --color-card-bg: #0f1117; + --color-card-border: #272d3a; + --color-card-thumb-bg: #080b14; + --color-progress-blue: #589dff; + --color-progress-green: #2fd3a6; + --device-card-padding: 18px; +} + +body { + margin: 0; + padding: 0; + min-height: 100vh; + background: var(--color-bg); + color: var(--color-text); + font-family: 'Space Grotesk Local', 'Space Grotesk', 'IBM Plex Sans', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + font-size: 16px; + line-height: 1.5; +} + + button { + font-family: inherit; + font-size: 0.9rem; + padding: 6px 14px; + border-radius: 6px; + border: 1px solid var(--color-border); + background: var(--color-surface); + color: var(--color-text); + cursor: pointer; + transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease; + } + + button:hover { + background: var(--color-bg); + border-color: var(--color-border-strong); + } + + button:disabled { + opacity: 0.6; + cursor: not-allowed; + } + + .app-shell { display: flex; min-height: 100vh; } + .menu { width: 200px; position: fixed; top: 56px; left: 0; height: calc(100% - 56px); background-color: var(--color-menu-bg); color: var(--color-menu-text); padding: 20px 0; box-sizing: border-box; border-right: 1px solid var(--color-border); box-shadow: 8px 0 24px rgba(15, 23, 42, 0.04); } + .menu a { padding: 10px 20px; text-decoration: none; font-size: 0.95rem; font-weight: 500; color: inherit; display: block; cursor: pointer; transition: background 0.2s ease, color 0.2s ease; } + .menu a:hover, .menu a.active { background-color: var(--color-menu-active); color: var(--color-accent); } + .menu a .icon { margin-right: 10px; } + .icon { display: inline-block; width: 20px; } + .topbar { position: fixed; top: 0; left: 0; right: 0; height: 56px; background-color: var(--color-topbar-bg); color: var(--color-topbar-text); display: flex; align-items: center; justify-content: space-between; padding: 0 20px; box-sizing: border-box; z-index: 1000; gap: 20px; border-bottom: 1px solid var(--color-border); box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08); } + .topbar-left { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; } + .topbar-item { display: flex; align-items: center; } + .topbar-title { font-size: 1.1rem; font-weight: 600; color: inherit; } + .topbar-metrics { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; } + .topbar .status-item { display: flex; align-items: center; gap: 6px; font-size: 0.85rem; color: var(--color-topbar-text); } + .topbar .status-item i { color: var(--color-accent); } + .container-wrapper { flex: 1; margin-left: 200px; padding-top: 70px; } + .container { display: none; padding: 10px; } + .container.active { display: block; } + .section { margin: 10px; padding: 16px; border: 1px solid var(--color-border); border-radius: 12px; background: var(--color-surface); box-shadow: 0 10px 30px rgba(15, 23, 42, 0.08); box-sizing: border-box; } + .section-subtitle { font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--color-muted); } + .device-meta { display: flex; gap: 14px; font-size: 0.85rem; color: var(--color-muted); } + .device-meta span { display: flex; align-items: center; gap: 6px; } + .section-heading { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 12px; } + .section h2, .section h3 { margin-top: 0; color: var(--color-text); } + .status-item { display: flex; align-items: center; margin-bottom: 10px; color: var(--color-text); } + .status-name { width: 200px; color: var(--color-muted); } + .status-value { width: 100px; text-align: right; margin-right: 20px; } + .progress-bar { width: 100%; background-color: rgba(0,0,0,0.07); border-radius: 5px; overflow: hidden; } + .progress-bar-inner { height: 20px; transition: width 0.9s ease-in-out; } + .progress-bar-blue { background-color: var(--color-progress-blue); } + .progress-bar-green { background-color: var(--color-progress-green); } + .home-row { display: grid; grid-template-columns: minmax(320px, 2fr) minmax(260px, 1fr); gap: 18px; margin-bottom: 18px; align-items: stretch; } + .home-row .section { margin: 0; height: 100%; } + .home-card { height: 100%; } + .home-card-status .status-item { margin-bottom: 12px; } + .device-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px; } + .device-grid-empty { padding: 24px; text-align: center; color: var(--color-muted); border: 1px dashed var(--color-border); border-radius: 12px; } + .device-card { border: 1px solid var(--color-card-border); border-radius: 12px; background: var(--color-card-bg); padding: var(--device-card-padding); text-align: left; cursor: pointer; transition: transform 0.15s ease, border-color 0.2s ease, box-shadow 0.2s ease; box-shadow: 0 4px 14px rgba(15, 23, 42, 0.08); display: flex; flex-direction: column; gap: 12px; color: inherit; } + .device-card:hover { transform: translateY(-2px); border-color: var(--color-accent); } + .device-card.active { border-color: var(--color-accent); box-shadow: 0 6px 18px rgba(47, 123, 255, 0.24); } + .device-card-preview { width: 100%; } + .device-card-thumb { width: 100%; } + .device-card-thumb-placeholder { width: 100%; min-height: 160px; max-height: 160px; border: 1px dashed var(--color-card-border); border-radius: 4px; display: flex; align-items: center; justify-content: center; color: var(--color-muted); font-size: 0.85rem; background: var(--color-card-thumb-bg); } + .device-card-header { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; flex-wrap: wrap; } + .device-card-name { font-weight: 600; font-size: 1rem; word-break: break-word; overflow-wrap: anywhere; min-width: 0; } + .device-card-id { font-size: 0.78rem; color: var(--color-muted); word-break: break-word; overflow-wrap: anywhere; min-width: 0; } + .device-card-body { display: flex; flex-direction: column; gap: 6px; color: var(--color-muted); font-size: 0.9rem; word-break: break-word; overflow-wrap: anywhere; } + .device-card-metric { display: flex; align-items: center; gap: 6px; } + .device-card-footer { font-size: 0.8rem; color: var(--color-muted); word-break: break-word; overflow-wrap: anywhere; display: flex; flex-direction: column; gap: 2px; } + .device-card-playlist { font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-muted); } + .device-card-plugin { font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-muted); } + + .device-selector { display: flex; flex-direction: column; gap: 4px; color: var(--color-topbar-text); font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; } + .device-selector select, .rotation-target-control select, .rotation-target-control input, .device-form input, .device-form select { + border: 1px solid var(--color-border); + border-radius: 999px; + background: var(--color-surface); + color: var(--color-text); + padding: 6px 12px; + font-family: inherit; + } + .topbar .device-selector select { min-width: 180px; background: var(--color-bg); color: var(--color-text); border-color: var(--color-border); } + .rotation-heading { align-items: flex-start; } + .rotation-target-control { display: flex; flex-direction: column; gap: 6px; font-size: 0.8rem; color: var(--color-muted); } + .rotation-target-row { display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap; } + .rotation-target-row > label { display: flex; flex-direction: column; gap: 4px; } + .rotation-target-row > label input { min-width: 220px; } + .rotation-assignment { margin-top: 18px; border-top: 1px solid var(--color-border); padding-top: 12px; display: flex; flex-direction: column; gap: 12px; } + .rotation-assignment h4 { margin: 0; font-size: 0.95rem; } + .rotation-playlist-manager { gap: 12px; } + .rotation-assignment-list { display: flex; flex-direction: column; gap: 10px; } + .rotation-assignment-row { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 12px; padding: 10px 14px; border: 1px solid var(--color-border); border-radius: 10px; background: var(--color-card-bg); cursor: pointer; } + .rotation-assignment-row.active { border-color: var(--color-accent); box-shadow: 0 6px 16px rgba(47, 128, 237, 0.2); } + .rotation-assignment-row input { margin: 0; accent-color: var(--color-accent); } + .rotation-assignment-info { display: flex; flex-direction: column; gap: 4px; font-size: 0.85rem; color: var(--color-muted); } + .rotation-assignment-info strong { font-size: 0.95rem; color: var(--color-text); } + .rotation-assignment-detail { font-size: 0.8rem; color: var(--color-muted); text-transform: uppercase; letter-spacing: 0.08em; } + .rotation-assignment-empty { font-size: 0.85rem; color: var(--color-muted); } + .button-danger { border-color: #d9534f; color: #d9534f; } + .button-danger:hover { border-color: #b52b27; color: #b52b27; background: rgba(217, 83, 79, 0.08); } + + .devices-page { padding: 10px; display: flex; flex-direction: column; gap: 16px; } + .devices-layout { display: grid; grid-template-columns: minmax(320px, 1fr) minmax(360px, 1fr); gap: 24px; align-items: flex-start; } + .devices-column { display: flex; flex-direction: column; gap: 16px; } + .devices-card, .metrics-card { border: 1px solid var(--color-border); border-radius: 16px; padding: 20px; background: var(--color-surface); box-shadow: 0 12px 30px rgba(15, 23, 42, 0.08); } + .devices-card .device-card { padding: var(--device-card-padding); } + .devices-list-card { padding-bottom: 0; } + .device-settings-card .device-form { margin-top: 12px; } + .device-stats { display: flex; flex-wrap: wrap; gap: 12px; font-size: 0.85rem; color: var(--color-muted); } + .device-stats span { display: flex; align-items: center; gap: 6px; } + .device-form { display: flex; flex-direction: column; gap: 12px; } + .device-form label { display: flex; flex-direction: column; gap: 6px; font-size: 0.85rem; color: var(--color-muted); } + .device-form input { border-radius: 10px; background: rgba(15, 23, 42, 0.03); color: var(--color-text); } + .device-form input:focus { outline: 2px solid var(--color-accent); border-color: transparent; } + .device-form-actions { display: flex; align-items: center; gap: 10px; } + .device-form-feedback { font-size: 0.85rem; color: var(--color-progress-green); } + .device-history-empty { font-size: 0.85rem; color: var(--color-muted); margin-top: 8px; } + .log-controls { display: flex; align-items: center; justify-content: flex-end; gap: 12px; flex-wrap: wrap; } + .log-autorefresh { display: flex; align-items: center; gap: 6px; font-size: 0.9rem; color: var(--color-muted); } + .log-autorefresh input { accent-color: var(--color-accent); } + .log-container { height: 70vh; overflow-y: auto; border: 1px solid var(--color-border); padding: 10px; background: var(--color-log-bg); } + .log-entry { margin: 10px 0; padding: 10px; border: 1px solid var(--color-log-border); border-radius: 6px; background: var(--color-log-entry-bg); color: var(--color-log-text); box-shadow: 0 1px 2px rgba(0,0,0,0.08); } + .log-entry-header { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 6px; gap: 12px; } + .timestamp { font-weight: 600; font-size: 0.9rem; color: var(--color-accent); white-space: nowrap; } + .context { color: var(--color-accent); font-size: 0.9rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .info { color: var(--color-log-text); font-family: 'SFMono-Regular', Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; font-size: 0.85rem; margin: 0; white-space: pre-wrap; word-break: break-word; } + .rotation-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 15px; width: 100%; } + .rotation-card { border: 1px solid var(--color-border); border-radius: 8px; padding: 10px; background: var(--color-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); display: flex; flex-direction: column; gap: 8px; } + .rotation-card img { width: 100%; height: 120px; object-fit: cover; border-radius: 5px; border: 1px solid var(--color-border); } + .rotation-actions { display: flex; align-items: center; gap: 12px; margin-top: 12px; flex-wrap: wrap; } + .rotation-feedback { font-size: 0.9rem; color: var(--color-progress-green); } + .client-playlist-row { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid var(--color-border); } + .client-playlist-row:last-child { border-bottom: none; } + .client-playlist-row select { min-width: 180px; background: var(--color-surface); color: var(--color-text); border: 1px solid var(--color-border); border-radius: 4px; } + .device-playlist-row { display: flex; align-items: center; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid var(--color-border); } + .device-playlist-row:last-child { border-bottom: none; } + .battery-charts { display: flex; gap: 20px; flex-wrap: wrap; } + .battery-chart { flex: 1 1 400px; min-height: 220px; } + .battery-chart canvas { width: 100% !important; height: 100% !important; } + .playlist-grid { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 12px; } + .playlist-card { position: relative; border: 1px solid var(--color-card-border); border-radius: 6px; background: var(--color-card-bg); padding: 8px; cursor: grab; display: flex; flex-direction: column; gap: 6px; align-items: stretch; flex: 0 1 180px; color: var(--color-text); } + .playlist-card:active { cursor: grabbing; } + .playlist-card.disabled { opacity: 0.4; } + .playlist-card-thumb { width: 100%; height: 160px; object-fit: contain; border-radius: 4px; border: 1px solid var(--color-card-border); background: var(--color-card-thumb-bg); } + .playlist-dropzone { flex: 0 0 12px; align-self: stretch; min-height: 120px; border: 2px dashed transparent; border-radius: 4px; margin: 0 2px; box-sizing: border-box; } + .playlist-dropzone.active { border-color: var(--color-accent); background: rgba(78, 161, 255, 0.1); } + .playlist-card-label { font-size: 0.9rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--color-text); } + .playlist-card-toggle { display: flex; align-items: center; gap: 6px; font-size: 0.75rem; color: var(--color-muted); } + .stats-table-wrapper { overflow-x: auto; margin-top: 12px; } + .stats-table { width: 100%; border-collapse: collapse; font-size: 0.9rem; color: var(--color-text); } + .stats-table th, .stats-table td { padding: 6px 8px; border-bottom: 1px solid var(--color-border); text-align: right; } + .stats-table th:nth-child(1), .stats-table td:nth-child(1) { text-align: left; white-space: nowrap; } + .stats-table tbody tr:hover { background: rgba(0,0,0,0.05); } + .stats-table-note { margin-top: 6px; font-size: 0.8rem; color: var(--color-muted); } + .theme-toggle { display: flex; align-items: center; gap: 6px; border: 1px solid var(--color-border); background: var(--color-bg); color: var(--color-text); padding: 6px 14px; border-radius: 999px; cursor: pointer; font-size: 0.85rem; box-shadow: 0 6px 18px rgba(15, 23, 42, 0.1); } + .theme-toggle:hover { background: var(--color-surface); } + .theme-toggle i { font-size: 0.9rem; color: var(--color-accent); } + @media (max-width: 768px) { + .menu { width: 100%; height: auto; position: static; top: 0; padding-top: 0; } + .menu a { float: left; } + .topbar { position: static; width: 100%; height: auto; padding: 8px 16px; } + .container-wrapper { margin-left: 0; padding-top: 0; } + .home-row { grid-template-columns: 1fr; } + .devices-layout { grid-template-columns: 1fr; } + } + @media (max-width: 480px) { .menu a { text-align: center; float: none; } } + diff --git a/web/fonts/InterDisplay-Medium.ttf b/web/fonts/InterDisplay-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..394f88d265d41cfab22dc19b0b7f6764510dbca8 GIT binary patch literal 416668 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 apVkh>|E(KXdN(pLxNK%kVPkM{VE_OHgaOb1 literal 0 HcmV?d00001 diff --git a/web/fonts/fontawesome-webfont.ttf b/web/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 literal 0 HcmV?d00001 diff --git a/web/fonts/otf/SpaceGrotesk-Bold.otf b/web/fonts/otf/SpaceGrotesk-Bold.otf new file mode 100644 index 0000000000000000000000000000000000000000..fad946238ef5694e014a230b54c68781f0f3056e GIT binary patch literal 72748 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 literal 0 HcmV?d00001 diff --git a/web/fonts/otf/SpaceGrotesk-Light.otf b/web/fonts/otf/SpaceGrotesk-Light.otf new file mode 100644 index 0000000000000000000000000000000000000000..0fdb747685f624132a50bb01a3f33eb617c8a17d GIT binary patch literal 72696 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 H7#J7;xlaA0 literal 0 HcmV?d00001 diff --git a/web/fonts/otf/SpaceGrotesk-Medium.otf b/web/fonts/otf/SpaceGrotesk-Medium.otf new file mode 100644 index 0000000000000000000000000000000000000000..dedd82f5f73fd83090f2a277769546239c4e20e4 GIT binary patch literal 79400 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 literal 0 HcmV?d00001 diff --git a/web/fonts/otf/SpaceGrotesk-Regular.otf b/web/fonts/otf/SpaceGrotesk-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..c71366c5cd4d0bb2864b3f962edcb60c39ca0a76 GIT binary patch literal 79556 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 IP#72(01jw3iU0rr literal 0 HcmV?d00001 diff --git a/web/fonts/ttf/SpaceGrotesk[wght].ttf b/web/fonts/ttf/SpaceGrotesk[wght].ttf new file mode 100644 index 0000000000000000000000000000000000000000..a1b2e6c26093066510a31147e7aec9abdc8d6c5e GIT binary patch literal 136676 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 literal 0 HcmV?d00001 diff --git a/web/fonts/ttf/static/SpaceGrotesk-Bold.ttf b/web/fonts/ttf/static/SpaceGrotesk-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f8eb245d1ec7fd02d77f5a9b55ef6afc4c9ed1c1 GIT binary patch literal 116056 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

?cwe@1!}J_fYyhD+zC1B1LRInIjRN`XWYpI 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 literal 0 HcmV?d00001 diff --git a/web/fonts/ttf/static/SpaceGrotesk-Regular.ttf b/web/fonts/ttf/static/SpaceGrotesk-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..46aa5dada9c4833e55256a4f3437388f42c5f666 GIT binary patch literal 114428 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ʦMczhq4Bv2DJZ-G!h6&CT#4=;CUruXoDTpz+lw# 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 literal 0 HcmV?d00001 diff --git a/web/fonts/woff2/static/SpaceGrotesk-Bold.woff2 b/web/fonts/woff2/static/SpaceGrotesk-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6025ccfa08b3f8d8d9383a61fb3a3a07c628553c GIT binary patch literal 41780 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 literal 0 HcmV?d00001 diff --git a/web/fonts/woff2/static/SpaceGrotesk-Light.woff2 b/web/fonts/woff2/static/SpaceGrotesk-Light.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..57348b89d3b76cfda93af9451c98cf5e0760f440 GIT binary patch literal 42088 zcmXT-cQayOWME)mSdzgY$iTqBcz}a}VF?oh6G#jbOEnuvH*R;3nH$HJz%ZeLqmhYo z4v!!QSMz6q=G|e8W=tx~^HsR}Ll{^TSUU~aPiXTrdPj%Op2)rRq)qK|h67U3EK~2T z@!I*3|DUvM$GN-NUUy`|9xYh<`~Ji$8V6xk|e(Sb?V0W(%OgFuj?D0sMIcKKi>N76A%QA!uOKdN8t-a=a+H9Nd$#vgd zF0DP>A!)eqli!u865me*pJp>&_NgF#>8_KW-I1@iS5a7$v%;r!~3gE zocHy*N7c=*4|GR}ZHm(ANPk=Svr+VW1M~aj)H{oRd7e`IJL_`HXRTd)AxGc$+kcyR zeSS*sWsTe4n9uEwV6|GdVcBb!NxdsRZqH=PakJkR!k$-?;%(u*=y;gPlZUHLL>Cq< z;V```TJp@DCq5wXy!DwMi7TpBT?}nLb-h7HO+7v0h~=&Q=l{e@Y?*uW$_KM~MN9Xu zUuCecB2MR|9 zu5;!$&JPlj7@}>Kl;1Avj zJbL^RN?B1!-O5_uSLzEEZrrj=b$myah z5bopp^6y*i$pTI%+Gi%dD=x2Jf0;v|Z0_1AYp>RBl~uUw!`=2|M~6`=D^Frei;mv( z(|4a1O)r!b-jvubcxXn`A`4~b*9Qy>`}UPSWLhm9{rjrl?rCLj-+!^ToL+l-yULYi zWx>ghIhNe@wRQg8k?A!>}yPOG$9!wz3_cd6(XrR3pK2Q$<7R>S5bod1f*XBtrKDTxv?HO( z6)r;WeFC|YruG*YX|gs8t^4R(ucfZZu=@F_=C9K<*E@Xp_^oW7!PBFA7tUM0am}jx z201r6H0Ed-7F!3~iELa}eQ3*P2N{-yPBsN^YV8-Tna*mqv5_xz*~PSj<`&DvKY987 zQ0iYHpp`m-=fAOv{_is16q2@jpBylyeX)PZlZh|F2*_*u}@yE&(FVb=U;^L zEfrR$nJM8uTW&vm{hz%y#J!r6=ZFong~U!(1KCyL$HW{b=tx@e%2u5%ef>XwRo&Za z;}#AprYX!nl?!XW@PA#rXXUcYe-f*5&BgD|w$A_X;aMUBlY&cv!weM%)k9Iu4H>}; zn9~>n7(8AFU)(t1aNCj}EpO0pnp;Wn;@A1pW?i{-rg(o;0Y{wW6rZ}A6ZibSdR$$6>6KlRwPZIn^8{;o zM^q%Z>ol-kVrV#g_;u@_&zW1@BQ|K6rB6S!BT~<9pA7F4qs5JU?T=@ku9z2NdHYRp z@9B_PKE2L6AD?qKJ*_)YBTcl~$ir9X!}3+Nx^nXOw!55+3XajQJ9pK0z4y)E+ULWj zveF@u#bLZxI zx^BPX9{Pf>$zaQ_e{a*7PSzjfW+_xqXZY!OL1BTz1%r+)LQ3nK9&8a5m0Xn9^CCjw zS6D|QuaKThi%{JIW|{x2b9^5#`A^<)`jTpsowugSFF~bWBn?1%I>mWx2;w1l%v!7 zWYqtjD9q}YS^oV5L#0EPj{QIPyTTsb%v+toYP*%z{nuz;I`=W?br6k z?*araTu&9vxPQRmUtmpjT1H+<2t(KOCl!6qn{!U~#eeKQz~{N^N7%o^S{8rvFLt0dOv`2X9^!{#pfpa(Nc&7Wlsa&RYe@eaV^<&?+{Zrt)@Y&=1@{HBb z!}ChyRgcS6>^b|!{Hyx!**_Jm_Z?!MS@keab(W*fp^Z!bXD=05VA?Q6M$Y1E5po0Gq{xxfA}je>?p%A!9*7+2KvI%8J_lcWv~ZCwA`feJkHOW81}-go`qs zJna2dYL(C;BP}cHV4HE~$@3G<@ejp%t!}5V$WL&!(y`gR%jdz2zZbu&iyh3}Y1Vd7 zuH$mc59xdVa-viub2t)Yb>*istiByP|H}UZ3cKri9Adw{UiN%*#W^i0nZ&g=VM|nG zy9I33MXl@FJ6C54yycOX5STStq+T_>=fW_NjpB^$9zx)wyBEL%ENFyi1yC;Pf zz8klNgf3g2m$B&Sk(jj1rTN{`yZm}J!aVYBF1eXpV|#wb&BuBdp3JV9`FmnP*rK`H zraPn;9Diap%SJgiVWRM~O6S?-J8s+km}{rXvCE0^*bz60^63_8SMDZw{f|$%rQkec zVxrOKWwXvMOJDmed+Rk#hO4&~xOP1=y%;dvxXYpNjLgZEhYy|W=b8C)vhsF@PfyB) z&LxS-iKUoxFFWJ3VpBktP7m8+Wn;G3V_VuczDdn#)0xBBop4O4a-+s^Np@|!bt#eE z({$6@&t1$~*)>Jacj~ISVXN~ZXFuB|qq|}At;l)VZ|2O_i5J%{c;2gh<@LWVn=cuv zzrL(Lv*2Lp4Abpi-SgJonzi+6)x)pns~=r>&=dAE5w*uXe{4=Zw*O=6KZo#tow?tp zYrM&id0l_x=705*KkG9;)N3yJ8?E`;{#^I})sFw{ZMJ=QH|_P?hu5m^Jl?xz|G&Li z8xHQxTd{C&=8}nfbJuLlHM{!e-q$rtYqQpFt<79K{q`>Y9|?X&Cl{@M!oU3QZ<}}* zS9Om)cP52$Do!zYVUTdB$=71KQ|md6WSK)ZUx!TJ)vLHHB1t<&uq$MW#UrgKL#w3` zM>XR(tD@JsosHW1T3~ts)0dy^zgq0K2p2B$JJV^+xqV03wTs_QzA)ghK04RW;Pr&H zwv&o(SbfylX?5K9SW8Iql_Zm-lFK(H-MIQh)~&0kcGpB(mv0<5lT+*`-c?dkQWH{A zHBwUlsM4r1k*O#|dG{$B6$z*IBS{8|IUdUxOJ20tMI~Ib{Y| zO<@#G@N$~BKx>86s>ZB^p95q|7+1ARE%0XYWjf2G%f!!A$@fHc!gYsxOqKjklqZ~b z*vIsf?+LpEqg$h4g3JsCwMNYZsTquEjg|>=5e)Mf{2N^#NN!-UVGlbL;eWe(OYV}l zskh>mzxBPfuPOh5^$*6nruYZuKbZeD)i;PNUAp0Y)Hzw_=Cd|! zb(@_hC(md4BO>JL<0Link;9Wl&87gSl>&i_Sq>fl8j-LvRVSTQFwE$Lz~P<^w{p|C zqa~C5zoo^0d+xyZY>(ib!t;;Ks&1w=bk1Swb69ji!b?jk%BqUZO)X8#FUISv`2C2w z1D*RmG}p5{P+<~e$x~M^Qr2I!_?q5A&a)Yg+P4ZM-|lGQi#ci{nLXDz|CxW#C~b-6OD}Q}<1RzS-6r z9vq5~5}i0yd8~M5Y)BA3_wt5Wf#_1*Q_Phb{ZBT2@!ZdIV!?-0kG7AE{uvhpon<&x zCOSz;rc88}V-*Q>k`%r2>3e3^R*}~$Jy)Jwsk!o^$ok;ql{24dH=j%@-eDsgyoWKs zLoevq-H_1BH)}Sg)NH+%Q~vw#$7Q?Qzt4>S_hWgHqN@$3ir9phBXcA&m!?cP+&TH| z9T7{(qSYtXH^#TGkmS5{PNdxRo^V%OK+~e87t&mfW{&(~37XR)^IAKmvhhlqC2iK- zCRJ=)UZmfz>MeLQd(Y8jJX$9VPv<;8W$Hd}=d(zK`%bJ}x#BOGdztyHo}_Myzo}6&CBn`}#LP=g<#t<8+uXS;rZi`J+Lr&~JJl(i;q(5io_pqA zlj=z?(v4TRvS@vp6Sb(IV5#Tyj}ZsVziNN5cF+*=USd?4<+8BX=$^sJD?27`>|8l> zXY10dFRaREtGX}eh*9eFS$OFM&$H>Xe%=2RZ*o@N|KnrlMcx5!7BAkqb_gl^HK}My zSj%mc{uZ=_Cq?r>zm}LzxqJt=2UqOWtgS1}uT9XaPd^u1QgugJ!Zhtpi)Zk%vonnI z4+{J1R;8URJ{`6uYV$kSdxtXDUVgvWcjJx1oHIuqCv1FQ_v7XC`~QBtj?d+1cMwSM zU}8~LDc3mU7`^NIy^8EvI}0c9M`kfJC^0PHcyRBU&AaLPTaLG_(A3S9y}P~p-D&+z z@8c5mKP1&Zi`RA5<;qRTNyI)~Kvyl3%?~A|&<1rny}Ut9q>`?U-JmR>~s(#A35W?|+lsPxcf~dp$o& zxIx9EOF%^=^U#uoo`Q^ zgA_zBMOd9qm{}mjwUEPWA5Dw6=Oq_q5*W zWOX96s5eI4{Df~&_Z_vlP1daCobSZ$DDMa_kiXNM`oQ_1R+RJl3u+&9KgfPCU%<(E zhryPmisg&M3+I_4+qpOl0**BZGpT4?XkqlW_~6pO!D%G2;=+Q%4V>I&GCMvzC_W%~ z++)I|o+nEbR9AXBTV0y0C^?aH<|NC=NurUHc`YBc80+mwdRx?9{imHl(D2Aa2O-TR zmWLzH70%<1c_K7@=ONQ|#m%$tJTfcaaoYCX=Z1EhM~2=y&WuM{c&w~1O^s=Cv3N26 z*YtmD|G(J(YyQ9WhFjH&PVsD>AzR#V)0lnc;~ByR?GIYoxbrFwdH*;N<t@xJks;Dr4QpTZsf@t=@b5XQ19*>*bj7F7H82}QbuP4s;tVA*=wOZ(0t{Y%d{CPt=Aw~VW3@n4cZJ^Hcnw4X-~ycOM1 zcJkon4ZGE?vdibLuI8A<5twwu`_cL<^>5$wIBx4dvCYK#wm>C=@fNEcVGavJIpxYZ zoLUzqCnP0u`@deAS-pq1;CNK|LTlUb*6{LMqLZHTDYAKn;n{H)SO!aN4d|sQoR=6RvMXpRyM)=wh?vopy8C6fVEPI~+Nh*KudH0sj zH^u8;-=9_Fwyp1N{F}c2$KR#pExx0&YtOyQvtDeU==9Z1q(%DnCwuM*aw?vap6p#C zb8_l(t376`tlur$Zu)v3yIj?p`wJA6O}8-yt~pusV1xIQgoK0yuFZ!9CMWeSm}=~M zGP08E@|8okV#-XfAHVlx+qp+;wI|jmt0XSI{>>;MBi`wDp^whQvnPLxB&n9!#r6n^ zuFT|)4Osu{gU5a^@rxI(Tr$&J`OQUPX_Ko`fs1kzBgcy-*?V7q`jp4c6P?*Kd&3+? ztBJ3+#0HhE+I-sR825sE3yvNTD-d14<}a?)sA4qn@Qod}j(;jO-;kDLduWmD+nLYG zrdbwgm*+ngn&#*Cex-?C!{v8#c@$qgl2c00-N)JftK`7+p2gD9(a#D*pZ}5iDR*nt zjLnIg`13T3ALV}R<-Q*wwdM4@lXZC;>auRAWbCbKPyf8WEGd!w%JJp%ROC)7G^UoFL|?#q5 zyb><@)5v?aei8rKSu@v8@(;dr_(RLBgAIpY-Fs3!Np1O~vXmcXCvGm64BZ%U$4FTC z&%Pr{|CDNXPvJgx`&5$oyUf15V)o8I%baekxx~7AUcbV_J|EvNJ+XU=r%hd+U3uQz zwc}FxyX=Q2HaqW-&)B8R{5YFo+UF3p7mAY|s`=EG)$9&w*|+V{>A?Hk3m>fEoiz7O z=Jl0Vi*>4A7waFIb1;qTBmbYdPyPR=FO84&e#P--&8lCkXEprV|JGbkY1g*fQE87n zEGxy%%sO_bS}c6yi^}El#(Of;7yZ5y{4^wQvat4JGtFyhMV7DA*Erm}SRn8JXRY1Z zRjsBg-`&0T%z(px%4gd&N!HzV{%b>z2iaG>$X-{Ia`vH)o@M3DMK8BL-RWS$nNg&B zLyPgn+tuf@BZBU^REnvrv^{m*hs`PZz~7bIoF87DEwZsnecHRyboKn8aK*$)3t~Sv z{hGj9=;*X*dz#o3H@@hkmHvr^2WD`r&#kMw)c@;k)6}v9dHHqC*CXqLC+@m)=TcR8 z`S;$RGiTh~oBYxAl})#Stemj#%%|dk{&rsuz0`OuJxAlUp!B+I2}T8j%}>o&2>eKk zOPeuWzUcakt;}Z9HFus(6JBwa+kAH;#AUhD1N>*Cp@<{tSO z+H?2O#JAghx3ETW%yj?Iy@~Dly|phNC-%Nts32BzbLPsF;%R$-sLaVe?sh#o?%|yD zcDd^AjKnWjU)p}mdFmZ|NV!}1EO(|*v-r)-R~3i;aoTzCJM#HgnN&`Ax65qvRO{D| z?_{>k?YrM&9Prt*rupmS^^S4Vmi?Y?){|>k9(&S-S)NPXjlJgA42g5u5uFM(JI@Q1 ze+vFAF-PqGzA4K;y4ol15Pw-QKRsxYhE@BMJuS}~lf_&%>Cc!gT{d;zyncfdnT~Ef zljbPR-2QFt{V>}fP!q5D@?k5exm$Rr&N(w4|2~&Prms+LGn27 zIe-6{{5f-Pls?SVUSHsC^7E4FZNAxQRkIWS_iin(T%NLi@+bcIZyT%s@QdHQQRs2% zLGq%PNA4WBbnC{kYn{c_yYk+;f1NYC_FaY51B-aGrn%d^w@J^{zwfPAcHaEmhvxsb z?x*GpF*GkyNZgPjg@<^x!p!z@iAskq%}UNP z&57Ck>}=N6U6$r|ZtRK9%XM7;yZX^W_vkCj>%9vZ>So4s=AB!0eRe9N)%$JoHFvfK z{okzr`^ozH-$FcxFI*4Upz%ewu%S-<(kbl zZSdxoH5O*u+FR=;Q4w~er~CQTh@uaZ__C+x9Lf1=Y5w@o9Pi~ZHw$tP_NtzG{btXZ zf4`2svyn^g-Tp)ByP3xOqv!rAGWCC19betKAwP7Bvg?{;&9gH_XXn z$-zfNh3CnUE>~B}rxQih`KEMfF}+@I@5Cn2(7_|gal(YrQP|h*v`BD($<+{r%RcGT zCDWK^ChKjI^?Bow7yj_8N_~Q=RAi_6txGHWa@J{0vsxv3U0U|-wB39A4l?rhm-zUV zo;hEtqgPqFIJtWDt-F!;>{s;lfAjO7cK-Y-Z#nLo?|z^E+5Y>#UROk?+tt);;oLb_ ze0(#PhfldRE9m~lo4T4sX=|?WeA$(>g?En5!|=lzrV>1DE*wnW9EvGnxU(n3kv$L47B#2`%9Bo>UriR8&@|wfA*(S^zMHC@?!3#<@H(X_db_2 zut+`e!AAK?u$s?0%iv|p&&-&ce(ui{)ziT`YqIr%o~Rz}*ttZ-^ZGT(^gQpIoANis z?A(59^QS!TR<3;S)KlxCTDw+!xc+8F^RbR!kE)*o2X7BqLwe_A?{*J=l zyq%?|-d`sI|r zckhK|XSKiH`^{bZ<)hlSo6{fv`&E7R@8pofGgJ&*yADp#Xq>R((*)sg!71637{$yc zC|;gmwu$$4&mFVuqHw=M8cv-s%F~aZ$o@T9%{G~zM^#?Z z)6Q^OP1c^7oRfWhXTD21S94xW$82lb+U`>QJ=I&1CN^obGHnc5px7}{G;u>Zo3~i- zlhkXsy4U!5PQ2xG!EMUS5P_?Sio)N_5a{B6BzlrJNqvm}jNUj(=TxG~ebx z!pUo2wmlEt{{NT5u?_Dp8YO8j?(>|z#nWZ`|04}YD*nW751GCGpY!eG#td8nimEN& z4mmnoA4t48eew~Jg1Ek=ON?d3j6_aEuHd}M`7l*)gG9b=rnQrw@)I7XqGvxuBoYlB zSnjpkeQ^}<(wJ=&cZmH$+V75b-1VqDGKqvI2b=s?ZgLz1x&JT7Zw->vu$s_dxxni?)r-?Ceh_{&c~})=h;h2 zTzz3Ky!VE4x&6w_10UAw?mg*pe*X2c<^9p|zi;p5i?NFDj#%Y=t6Y^cU(Kj~zKUm| z+9!MMvUQK$W{NSt^tkQX8tB-dol#|-u}*?VUHlZ^v_-;d7i8?%OZoXtW=m#BIGmMK zDrU?&u3&VFi;MSXFzdyS&ZV`kTW!0#GQ;)4Z8gl5YVK}aeEZ_A2myt?e6~rhJuCV} z6BjXtxpe(l!y(4ISt-uMYw85U?EH7KdGB;v%wNA~aA@qX@;cC5>0ufywWTXuEKqx~ z@4-qgK9BgICAU|F1v}`Q&24LX=NrSLcyWqc#F7OXVL^eR!PhTbxpZyfLgv@9=4DA~ zd5KT29P{V(^|f|C+vBm+Jpa?esz6qrIV=(u%pE}q4}=aJs7yb+lZ)l*d2@!qdixzF zJJ-HH=zPoe;m*3&J*-D~<)0WIIAH#h+u-g$Q+qa-_c8a^zHVojWH&i2%fbG!+=|72 z8FFSnJezdoN=v20kvy^7ludQ4jDJq$@4Im&#c6GVA)n&DZOeOV>aPjdE7*7Xe>pby zr}LS-^?c9XuUfuo|2gyL*3(a|wK%&WO81)Q&brTToNQN86Vkqsp`{eQ#Lzdgqlqj^Qhf+xU*(kX+^ynDNx? zQO}KEH~O@EEZ$F$-xu z(RZFQ_E#SBzV~6Cf6Y_>e}Vs{vyvHH0zPxT4r{yjvV2p|8pg}3LYpNGZ`_EwsuBKf zRkoV%s<7N$I(bJAE^d0J`Ds6ASdL{;=@rh#7gyf~f3*wAGrgvAep8?xkNm2WtDly% zZaDmY^22@psiAAy_Dy?!fA{Y-HzV^TT)Sf`L>{tUw{j3TRpl7Y^hIC1vSm~BhZnQ> zPTv+@@q62Sdz-zN65IQBKkJ&KeUtN*I-iv?W5xDcxmOR$ChY&|=eT9h)t(#oR{Y)^ z^<$>1wb}MS|{ z&DY!P?bp8B(|j{l_n)AoKs`AqGQMG`lzwe>!Fq!21-F{5>cz*Ke)rXFx-X@||BSy*?zxrYcY#8U zirp`cRlKP<{xR3V^u9ooTf4VN)%Vp^YYh(jtiP2pdG5BV(`EU;_wP~uCT#ZWAd5t! zDp#`gj73#X_WgVJeL?$7y~>xTqrMfDXX@_W(-(XH?AJH1RGJI=ij%X!gAgw|CpwSp_A|Nol>3de?9H z@#pL3ztWuX1{cYHMi38Zy86AZsI+< zRrko=^qp>Pp2k3a>sR8ubUb&Wzmw` z_YWGU9a2g-yUXICdyb3a9^sdv!TVm%dL;77N9nBG`}3>jW_%(*p$m{C!`)B2SI&wY&bV zL+8wmza-SoR&DfS6nL{%@y1(Usc-Cu!mlkkr(gViN}Se?^gY`{ES*hkZ;F=(m5aOz zk+RU@PCFZ6l6h}VX0Y16I*a11yQW&~F?TZ*4ZR*SDci^E)4kccd(DI84(R&H_`JI} zJO0?&+%vxU7kzW@`l|eSHF4Vd1ER9KzP4n#9}DExU-UyrYxSOE|K3+>-<;Yf&0jh5 zqjoTN>uLVQ4(;>GTw+7!OkaQCt@^PmkWqBg^m|Q5e|fI%sV((WyR}8kdD-{4M>p#& zKF3~^ReOA>d;OYY^XmV)J&SbzZeNxodukQ4s`Y`%Q)ltbHp&fc-IODny3x<|+xb)f zO;4Nmm7Un($vrP}(~x1icf!&6JBliwSMQbdlwI-ygT)UD=aKj+xKjB$rjbq zVQbDk)>pB9yXm%^y2Z(peub+p&w0m_ZdEDFpRg%Pl*5wJmq={{1_%zGewuaKC8qZ|*eH-zWKGoNrl2PrI32y!Pa>*}41F zb+=t9TD|wh)4+R2{7kO;6zhK3k{%vQvCq-yCqJHt+~{6!o3(v~ zmR?Ps))j4yl>&DjX-J3_gjC#I)Ar&Um%sEu3xVttw%tD3eqL8hyWkgxaHaL2Uc_a*RS|D`=I^uPo4MK8|o|AzX%^-NMF*D zx1ZbM692kMrL&rH)pX~){~x*Qh^Xhioucm!S#8@fy*gVww_0M;voqZ1Z4b|DZE;QH zl(@VuB&dH*-ci%*zs<^{_8QL-TJGx{`8n$9GQY2Dl(_`G3r}6J6kX}F^;f4y*-SNC zm&8WhGRud2;)g7cN`BIK#?%|LXy)md$7*-)Je*g)BQ<8v1K#=>&$^l(r0rDA3(lMt z7Z|DQ|J23O@_c-a?W6m`#vdIFit~=oUT;x)cH(Nw{x9i)F$()%7<0aTUz9lY9RGps zyxx0D`aa236nvT!!o1LOZH6=Zu8Dj5y4FdkYWugwzq4wYx5=%Yam}5FKQwQ;Ogs=- z&Mba+ZA@)s><63o-^%RHJ@6_PXD`_!bur)6tifJ-XKP`)4a*j5{p!8mHIC(XUY3WH z#DDeY8hKg&el&&prJlX&TP zFna_4`nvlY4~OrI5si_Hl8f1wm^%CUe4BWt2Y*v#bcKE;EUw7?x90gPo!X6C{+KW` zFtB`(YxvJl#$ch?!ssyXwl%vpOHT`H;_ad*J2P~H^`1tlYi&_t*xJ9VMzv{s^xH7Q zsSz)yMn+DJ-8nVFG_b;F2g@r;)?u$L9E#dpWbk+8(cjso5Om9XH zooc^lHS{Maf+iw3#TCQmRCHdO_Q?M3MXiukL2KP|pIzC#=B{XX>8{xi%w|+iP;8r- z))x89{oXvel4s2C9@Kt5!L=p4D1*>K6@Og(DmAv-svp#t^d%4ra zvmEQsF5g%m8+ofpWMzeyKB8oc=6eM_i~x~#y_igZfuT_`CJ+K>@aii9u1y- zD|L^4oGZ4|I4NvhNvc;_*rzPsHRtY}n;koQ`tJ9q*M5rU|9g9JLWV+OhJlI6lsDIm z?pKLL`<0(x{3cZIdx5|gwOe*2Me^KtZr5y|dEZWS%i2%hwq`XIh%^2WOZ=gyID?(_ zeq)>b#GIOqCF1Gt7rl|2{%X-m-L_*EQ;xUD&c1W#q&`!gj*)g*mFlLjm06WR)AVy$ zFNJF)KVR~0*7n_xzNRVV>3!{OxgXKeyS-XiGuPy(?vkC$CvKbZZJz7B$y>fHKm9xU z_qM$XKcrY{WO?p0eDM~MQ(*co*!)xFL7;f?n>jP%GWT4bbMNTw_YKN2&kEe#Dz(a= zu{?NSCRX*~-L*q}&%Seh|KlaFt=Ma;|4r$)E%y~4Jl?kJu3+cBt21kgQm3rEvwP>6 zp6_%1p2+=CoxAn_9sftw4-eV?eY?N)@#(2s+1LKvx#ff5*_OW+$!2Ol`d{6uT2Wso zvi|*_w7H)jr2f8ZbuYv6)$HuP?>#EVylO6VGRB{O7+brv?6ddIsO0~e=O)_QOp4rP zkP`9Ajc?BPBNHu7>|o|hmY8%P%}{=l;~oy~q6M~(KATTF)M2Ug?8c{At!Mk4PVSO9 zJ(u;xk*yCkwu(&e?klyDal4uI{-^)3vU`V${>v>h6xtOt&xob?VNtIIJeqy zuDr{q)n1C5ILYL4y5EcYku#L*_3TeP`nbg0{`y+?mm+hIEsDIWl;YOT`!TFDJ^Een zeC3t%qU}AOH<}za~e`LnH@iW8X zCtQ^dX$zIhV|Gv^LOT>FnQ9t`N% zuH~UThkIpll+hFB_;;Qv+dag3K9st5XB_)BBTu_q_*8GstLtxTPyC!S=k*+S$0M=v zB3vG+2`}8zr$lP}V`LZh=w>RK{Y5EO|LDat^RGTHn6S6zaqTy2;iRr`f9YPk^jQlg zZS)MWd}*D;SXAhvRQT6hQAS)ZVP!(K^(hTDpBJsYCCaXKf=4!A`n2iH2~$qR4bLkh zgr=(6zxgwDz3nE&ZVinJmyIqfR18C=S*-G4Qk~=y>gjCi>0Wx$f%l|MI!ou@Iaj*Y zTWhWG$X9NC@oM9;oj1PREWLCm_t&nYvm%m;`;?b_O5s0sXsw~HZ?4u-s}Q%+m2y{? zvt60+YT`Vm(v6EIZ=AT4N%>}XpjB4dbvT(|uoIsKPj11e~ zrz~A_i0ORv6Ok2$hvk&{x?c23hirfKG${A2hf3tqvPY6!lU4?oR7haW8)PYE^5bS+byI>AR^f3v#7SPB`r2zJH<=$FVStnNdsMIGx-m zmu?yTy+X(&O?Bon(d)CtmfsIc39P=6dc;fosOsrtnPpp^&X@Bks?C4@H*i z?|o{v?EZG`+ds8y8P4C0{-#^;aA#%HuUlvLY*k*G7&garF}t8h_T~AD zYX(le%l{HgPkwQFqUoTk`ARZT-9)G}jq8HfFEh1>gMD#bdF%_?YvVInnWspUF}VG> zn=JClYu@}lRx0bCinJ7|?TBpHVZNWopqrI(I?Kjc6U`OYJe4;4^mhBH8(pytVQ)Ae zIS3q={ONGev+jY8eZfTe9Z|hbcQ_vTX~^Z&Jk;F(VN!g>Y5f|VBhwY?TCV^1ZHbS* z^3N_Sd+v*p?;(3Wr#<#xcyZGE9G!n2f8R@-ViX9tZN}(O%h_;nI>StfhDdit`(KI) z*YX*H>lh+_%6l;UkrZbtJh!>dNKj|~x4Rr$&G-J`c8EHwIO(wEawlKU2{CS}N(}G6 z)qJ|~V$Zkd({K5=eeqkgs&Z1*LI#I-i&;a354`BqYjzZ3R*v&!IQV5khP(fx&5HaL z2h`XU-2-h+J-gl5-OcSiJ@{CSP8zUUu}e;WsW!_nNc4ucVuGBJS%IdQQ}MwSGnk4w z#MlZM*dz_bZw1Nd^~Y7&^f%XBSGJkEMPd5FbD75JN?Ym-ejI$G6VlPSF;27pOLi!u z!`e5y)HqK1yGW))=c2lxQeWiV<@%`C1Hsx$S?`GjQTa{<~ z$F*~(ZMq}%@NEe1y4xLx(;nV3X>UIB@#6|Hp}r0Fv;O{(`m>uSp6Q%g&LPbMFQX%K zk1NOS`6Ipl*}d(%y@I|6n_oMsc7?Bbx`)LP=9$l>nfemLgm!+KC*UA-XVd8^deee3 z0>xdE=k4^3()sLauD!hNb9nB|pUax^Ug!TDIiAd3%`wZ zXxrbgSQoD+n(Nyp%vwKDEZ6H+Wx`>%zFAYM@&gQ?%)Kk>Dp#OTb<*X^?a8nAZDDrc zU3o(Kp#ekLU&ZHQnX;WPmQ`if@ANt*bau{@qUlQncYU3as?4%mYr&sWkDJw%^m)Gt zN3A)Z-v2H!P*a9|pq367%Lsz?0s>w?u63X z;~Yz!J=&SdZcc16R}!|!y!tmO z_I|kZ=hcfu{6 zMv>V^Wsa@C=*$^9;lj#zm0y-Wo=o_@{J{M%}H_UxPU;&Gu}KiuzJHU6T9UlbtagEC;e@+5g;|^*mJNq1r};lr@_h z+c;WQNM66;;&y8j+X?5J2@VssT)&vPDZs->On%kun8Q0;K7C0_Zew-kUUR0g=8NCf zBXJ)ix32ij!^6E_X6B+>xsJR752hEZDjq+gps?Y(g0Zx~*7p~yebOQh?2!6+d;4zI zG`HN%W*ej~=vr%Ow?(HL?VC4E^N0kO82_fc;3STh3RhOO-@BZyvAQ>>=323O*sPjO z9l5LxAu1But?k{Z{rjC>202VK_9>IUTxWjm%A_fktDeRc@HXfqcX7e+K(6)qj@XWn8|g zX)fPEzfa=-SEkD-ubf{z@sjYh^Sh;;drkDxJ-ly3JD#s_zn7j=Wmo@2pyiTg`Ygtm zThB;d^w=0zx^&CFq#azsJu$1!?a#j?C3itF{DaD?8mo{K$%$`II5I8c{d{8IoEMV| zdN)Z2^S`e9sv0XH(<`(uw8NZRpe5{n@HLmeM#(A5r>U<$XHc;vU3mYS)L$<%Y%WKi z-S_ZD_C{tq?wo(Q2@^~6kEZU)yLr1&BE`A^1UxBddqk5D(8(em%aUPa7Cr^ zn-|@6f~Pb?x*27-p1sjJSYW-Kd-Yq6_cqpIk`tr%rtOivdiGA3-R20-)2nrkHP0%3 znw!_GaNN(n={iI0t#jS1c8^4&u6zhCG3c}GJvJpP+T&(HEAQRBA4mD*rd+6f>~H>C z-ZRH^+?DzJh~U1KAWY@iLdr&OsihXa(E7>*_o84@@I$d-*c@=@ZS67eyPM+u?{xJYwwkQ zRNcFE!z_BX*&X&b%KX;5Ur&phKPzi?Vf?*}{k{*})_Rt3=xT>(%ZG}WL~Q?3aHc!v z`_XO3olfUA3LkNddAfE980rM-L@0I#dnqrY#ev|j;`Z=+Dn}1IVQ99Jowl;FfCP$h4 z1;PcgFX@t&)yqwX$h)1{V!Pazjl46hcD}dKU2L`B0p*WE4p=n&-<+S0m%U039b_Z zYmca0+O}fKwX=7w=rUK|4qi85-n1(-HPq<0qaamifD`o&Uk?Bsk&8JbhC) zU%i`~c7EcRu}}Qy>Q}7Q@7cFh22C%LzEx`|{e8A|Wt{sqrOnTSD)0P!q$;Xnf1G#v zg@k$@W1SjBC;v$^W~LrK*)}b`S^xX1g&Oy&&oC=1)Z6s%+kL*17O?8mo-Iy9vS7z89dExzR_V%=Uvz$M>E-ijPw|@4FY<;GtkEI<6=eYkp&)XV&ZQ8q; zl`4Dfc_f}@JF4U=&9S`TlyOGu>3>oCt@*LaYB##B2eV4733dyKW*g(@$34pi`qig_D(&%Hlg!D?BNzATaz_=nKqx#`xt3e^x|Mp<_F#M z;06J&oqJ7;v&{|8);-oLtiL_e>srIBlg9%>dIOUkBqf+w(mC%K@9vh1kaVlK{dw+* zUrQ$?`R`t_u(YR`Ms z`RQC47y83k_CB6;T=lW^#T)Hg)|6aMzNA{bJo(DKKIZsW2kk!X5pX)Gp=6yYUX~{F zaCuKoL*E~PZdr@niu$E4q2f#mi@vWo@XPhk`<31`CfvHE#{!sknPl*q|2H^N>zAXp z{AFGq^VSnrlfJsX>~X8VyS+zL&q=fMLJ@ zJL0NdOi0#?=|70;M;K}tQc{9fUYouB!Y`@Y|Q%Oj*4 zw=TSzUp#Pi(SwbglU<(&U*K%w&@H~PM{x6jbw~SM9eB?#sPo**!fI`}=hGs_4zIml zH)fpp9b_P)ER|GNr*pr`EGBu$;YayZR*rTjcv2Ts^M*LIhN7sMb)%@Pol&a@gn84vG<0R1SC+;gP zSUOK)j;pxE3gKxl?%uThy1iZ6wQ=#jvI%m(b^H!h{0_Q!p*d^e^2>3}ZP8DIl=)9N zA72!BHa+vrb9OPwt7j#*tu)+uFJyv)>i%t|sz0Q5@E1g!i+ZGyXyH_q;JuWUWkyYR zWd0l5GzW{+jMF(g-L{z9)SnHt&CkyX{(VgK$;>%v3o3(~4?Dl<(d=C;!L~p&)l%1GQF#mPE-Khamq%Y-&=u*i zGMceR(YQIXG~BpcYWsnUOGGEsr0B{dDpZ_GOzGIm#m~~_7{JqZ=!}~%}eY*9`Ez76k>{@o5CVU>`_Iomu>DgQ^kVJikB6=t zYa{ZtbhO{K@xr_}Z)hvu)p7ez!gUZnD*! zYtLl&ivow6qGsr>xM97Me{Et$;M%tQB>fu(W&Awlu?`bomw9;<-CxC=JGC=jVQ178 zMzv`gYwmeYTBCl_Gbnid$@_PYpS+S$_IJ-aGfhp?NUb-1p{*~!Fr0EYyZpA)?x)+^ z4?F6HiSd28Htn`%KyZmv)Wyy;UFYuj`%JqY9-Vw7?7>~@eWvnJvm`A&pD1na%}>?8 zrMu;zwYP2v+wA)%a@ew?-B_lu@6TD(vB2YHaC6obd7YrUk3xN;_NeJDD3;Eh-1JWN zrrf%HQ+Jlssz}GH{9Lx(P|&X}ZsQlfJdGdkWc*oKJv7-Qww(KZ@QuCe{mJne84dB@ zH{H#>a`wVhsk!>?f!mgfU)r`y_(aRCZ(QrwUs|abllbJ%-~2cY9W$+|E3{RvyuN)j zg;iJWDA&eqDywgVEL~Y}_0r7shP%oa9$FLhu+fb3Sj0!uSsitIlh(E7zHGUoyR`p= zd+5PU4hj)rUo&I8wv;&TSuXFNA)m)O*WcQ7R&~Kcma7|CW$s>Lw-czj@^8n_#l77X z@mFp1Hs2L!GOgpY;JHM`(ea)@R3ovRY-Qo{U}tu}GtFfluE zv#l)VZYuMeSAG$T8rL-@l>hd$ns4&t$v>fnnShnw_{oBpI>*mseLysc&l{v!!LFf_p{KX5xdbq}dMczs`>_11H%a&Hd zS0ASJuvG4=(e_CzjALEC&p7o!i1D(l|Fv=3qgKp`ym%wxLc~EG{#KKJlXe^y_kVFo zVW&UC&n>JL=U-mP)Ggimb-za*UpdR4$Bp){Z~w8cxqP4X{^WUemVV2A&0nDM!&EgW z(d}pcg6s*w&ptJrY?EH_e(H*|IcNTd+$uVC;EB+kd8L!(Ul(p@oRgcU{=ttsW9G@I zFkSZF#g)>&un=EAu)2sjuLwxuF)Sw4^C0Q>C@|#y>{!-OrBLOz_h^&@0p! zU|xPzxi+UYYAv6XSM1lc32|Ev>$r)C%#SaStDN%aL5&9m{U`T|J3d#w?pEBt)mClQ`X=UZ>4WS|{Ws*r zSM0g^)P%W9`{@a%cVAu~V0`j;lchcb*DA-3O3j8t zS+}0Fy<5dzZ7$ zdF}otgyWzz?}A32t=c7BliE%NEpvLJA$X{uGvG;pfw#0)?(b&>>W?SYC(63l89qHC z7ch3G{go$ydceCExyVr$f!IH&`FC@IsP?6P8h${N0`=ONAe@Q#z|IKUv z&fZfR)#Q04b8q?Yk5i^^m&#bSaO%6Z4CcvxKF*5O-{*wBn9QW-zu=aqSt-}W1ru{* zE?v&$S{(gN?M|$X)j7`YNps5%Dm}N|+H3plhtWwN`E+fQ8Rt$uUc&Fx)N=g(v1>C9 zi~jj%VLT=Chz57oLIdR$TZ&f}o!z5h(3O5JwAVF7^>#;9wCCf-Wyhatb3T6Mmp{Gm zYSsT!3tcbo4(Ewv->uxetT?iNVdKl#iH@%Wu6H%Q3|Qp1de@%0$F3%Gr}-SczBc6N z;U!gdrw$dz~*}foT(SPerOM|}ONt!#y zU*y#lQQ4%$3tiiOPT|@YslIkcnw|F9SvQMUvOK(@=(Suva-FCC?GGUz!?iqDw93m> zc>Vva`RlspgeSKbwZ}x2riNA5@2b1=#!BMV&FIFjS#5TIC%g3)+PZNG_)S>9SYF-0 zKTptBwDbQ${?++M7ro!)b?AhxihgC*(bK$pw_j6Tm%Y1mbz~h56~K&2jJfe>(o(?f-d8XW+s`EW*zMbl)?Dm!|2i)6ji> zxcP(89p6{3e?zMNMeyGX=D&XV{i*NgZh2Q|&iWQ;_EB1C|FlG{-w*Ed^W~>y{N-%C z@a*t~u(V4?r+Vs)FG^nO6z$H+RTx6_Q{#WJ9e|H$mg8+u-JalzaHk#hyL!Jn=>i5G;FuctgP3aEA9!; zy_^z!KR;ys-X+s#ynERB^-BGjt^W>&<%&&S8To#X#(^^;OAA-Ty-zX!tzE*{%JE}E z*uqQKls#^ok?#G*_F6{7S7gygCux3Tv+U(b>z7;XOfQZ(Kjp_=x8$k+(+`COKV{U@ z@Nt@Wf^BQb>h*bR7SFt}xbM!^jq9^dH48UB+?8*<`nWVx$jn9GUS*^d)V9kMdUi8O z7zf;c_OZg&;P)o0|H6L~x7){GeDPm<=|8!vT6;7z=1e`_bmN&B(|eQ6y0b2jhD!y!eU-~|&*@x_&ToIikBK^wyVd-+~hkk}9P5JY7 zxlC@D`Ez2*^?iIlHNMZCFel>h$v2JDpYlA-dHcn8?GcuZ`Q5F)zAY}o^%pwe1p{6oB8_y0Jh9Z6x?ThpTUYFipc&zS!$RI9?`{mMsrhoUC@4lTR(|Nqw7M@3hz zRqWkr%9rlzVj9Whk{`HwZ{viu-T&%W$y$CD`#4R;?&$yju?O>mKA9E%{`~&JZb!D= z`>bOoHXVOGmyg@+k&>aR$+55_JGZQ|EU(|C+b!nlp&tG!Q?u~NgUHHr-7%WFQ%<~f z;@zE6#&C4$@AH03k6aLKOzB(LH+TK{tBw1oYUM9^R-2e!z5lXNV8be51wEMqg5i4` z{uBtwuaUS?x?xhpQa|ov4zgw^gG575(+Fw}<%yNrlqGYtQQLn#g!bII->b zFZWq)$5Lk8^ohG`tGD;^%a})6rGZw#np0brKF{j@v}DuVMc?M^;Vd+o=5k3jaYBE% zW5H4{*OXPq_PZa?6&2k!@p4pW&U&#w&i?DHw-y*C-?A!|n>b}j!B?+z^|NzkT0~3D z`*^UO?WZW)`otdw`I8v^7wmU8RMYo~+Noc#cJi)=<)8LH*jN%KOw1qu@Vb{!FVq54X$i-h6JlORC|wy_@rS9G%Z6{+2!=z57=C!iUeVTwppA zd;YD_)v)(BKGw{NRcJBwe|u-+Xa4FohaJzRtC!7*n4T!kbuFg8=J?0;Z!?_^Hr2mv zNLU~8Ds++2dUvkFv9r%C54jh){>Y@8!k1jkH8*UqZS>&?37H{jxnHBIUGpt>n7jES z-{{j_it-D$Eyz9Q{gGW{Px$KP>M_#7Rl0}Nx6XWTXcDOBdpX0gv#r?v;DHS{->@Xj zb9DZ4s-W82m)G`)ft$uzwe5{&yU%L3Eqo}+%W<(-#;QTSVcNdi%MMHo)tMXp;Q;5S z7OS=DU!nunW|%S^oB1F<RSp(}U#-28N%KX>yH!_)lpicgvC$`g5UW<|8$^?s%~`&Ojt?3?Hud_u5A zUffP){%n)kKeQ69=MK@3dtQ$u+)OnQVLXX@8f-fZRB@+!Az4U6WQAf=@G%#AW-j!E`5#b=66 zUO5vzHEeywn-CTmarx=uVC$`g_d}xGuS2u=Uf^sXMObo;|GL!SQsd_GEhxzsmSKEz^T1{kQhl z{CMBy6K9>(uP;dw37Hos|4_Nbw%+sk6F#SA{nVG1><>zJ_jQ_HkXjKKW~jEob zI@hv;ew=T4_~XaJmY2Uf64rQyg)UjOX3~KN)4v8C%H3o)TUE}zUX6EzJFi>Xl|RiYPK&>{fon(5 zn+KvhzidDG+FO}9_y3RcGJo~V>=L6Nd|ocz-}!QtQBc!2$=?A7OP2p(68Uf-escVF z)3V9ZqDz>Tx?1e~kaet1Y_8Au+>1PmK7Zui_Wf$-q1*#zJ5Cj5Mc$wGuXS(qw7Eqm zR&Qfm`@#9jq#n~~f0LikL1*!Zz{QCJj!o}C*?< z^Hf4Q!e&b6-B`OVzos~cdFNjA2z;=Dm80O#Z zUH5yv**wjTSr;towQBxMeR%fp^P{1Le9!dvm3-XvBDK6RW5K3a83P^WX?If?dWz3o zH~O@4)l8N224TC$7al!)@z6ZY{rtb4VxGeXJ~*2lm?!e3=Wo~lS�{{c-!Vz}KJ3 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

*P3i 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 literal 0 HcmV?d00001 diff --git a/web/fonts/woff2/static/SpaceGrotesk-Regular.woff2 b/web/fonts/woff2/static/SpaceGrotesk-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..568d15a2e9dc9d77b93d85a5bc4d8cf9d0d071ef GIT binary patch literal 42708 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 + + + + + TRMNL Server + + + + + + +

+ + + + + diff --git a/web/js/app.js b/web/js/app.js new file mode 100644 index 0000000..6ac9fc5 --- /dev/null +++ b/web/js/app.js @@ -0,0 +1,1681 @@ +(function () { + const { h, render, Fragment } = preact; + const { useState, useEffect, useMemo, useCallback, useRef } = preactHooks; + const html = htm.bind(h); + + const TABS = [ + { id: 'home', label: 'Home', icon: 'fa-home' }, + { id: 'devices', label: 'Devices', icon: 'fa-tablet-screen-button' }, + { id: 'logs', label: 'Server Logs', icon: 'fa-history' }, + { id: 'rotation', label: 'Playlists', icon: 'fa-images' } + ]; + + const LOG_PAGE_SIZE = 50; + const LOG_BUFFER_LIMIT = 200; + + function parsePlaylistToken(value) { + if (typeof value !== 'string') { + return { id: value, mode: null, raw: value }; + } + const trimmed = value.trim(); + if (!trimmed) { + return { id: '', mode: null, raw: value }; + } + const atIndex = trimmed.indexOf('@'); + const baseId = atIndex >= 0 ? trimmed.slice(0, atIndex) : trimmed; + const suffix = atIndex >= 0 ? trimmed.slice(atIndex + 1).trim().toLowerCase() : ''; + if (!suffix || suffix === 'auto') { + return { id: baseId, mode: null, raw: baseId }; + } + if (suffix === 'bmp' || suffix === 'mono') { + return { id: baseId, mode: 'bmp', raw: `${baseId}@bmp` }; + } + if (suffix === 'png' || suffix === 'gray' || suffix === 'grayscale') { + return { id: baseId, mode: 'png', raw: `${baseId}@png` }; + } + return { id: baseId, mode: null, raw: baseId }; + } + + function buildPlaylistTokensFromOrder(orderIds, tokens) { + const tokenByBase = new Map(); + (tokens || []).forEach((token) => { + const parsed = parsePlaylistToken(token); + if (parsed && parsed.id) { + tokenByBase.set(parsed.id, parsed.raw); + } + }); + return Array.from(orderIds || []).filter((id) => tokenByBase.has(id)).map((id) => tokenByBase.get(id)); + } + + function uniqueOrdered(list) { + const seen = new Set(); + const out = []; + (list || []).forEach((value) => { + if (!seen.has(value)) { + seen.add(value); + out.push(value); + } + }); + return out; + } + + const DEFAULT_STATUS = { + server: { cpu_load: 0, current_time: '', uptime: '' }, + client: { + device_id: '', + friendly_name: '', + battery_voltage: 0, + battery_voltage_max: 5, + battery_voltage_min: 2.5, + battery_state: 0, + wifi_signal: 0, + wifi_signal_strength: 0, + refresh_time: 0, + last_contact: '', + current_entry_hash: '', + current_plugin_id: '', + current_preview_url: '', + current_preview_token: '', + profile: { + refresh_interval: null, + time_zone: null, + last_seen: null + } + }, + client_data_db: [], + devices: [], + playlists: [] + }; + + function withCacheBuster(url, seed, fallbackToNow = true) { + if (!url) { + return url; + } + if (seed == null && !fallbackToNow) { + return url; + } + const raw = seed != null ? seed : Date.now(); + const marker = encodeURIComponent(String(raw)); + const separator = url.includes('?') ? '&' : '?'; + return `${url}${separator}_=${marker}`; + } + + function useInterval(callback, delay, enabled = true) { + useEffect(() => { + if (!enabled || delay == null) return undefined; + const id = setInterval(callback, delay); + return () => clearInterval(id); + }, [callback, delay, enabled]); + } + + function computeRotationOrder(entries, playlistIds, prevOrder = []) { + const entryIds = (entries || []).map((e) => e.id).filter(Boolean); + const seen = new Set(); + const ordered = []; + + const playlistBaseIds = uniqueOrdered((playlistIds || []).map((token) => parsePlaylistToken(token).id).filter(Boolean)); + + // 1) Playlist (active) order from server/client + (playlistBaseIds || []).forEach((id) => { + if (entryIds.includes(id) && !seen.has(id)) { + ordered.push(id); + seen.add(id); + } + }); + + // 2) Preserve previous ordering for remaining entries + prevOrder.forEach((id) => { + if (entryIds.includes(id) && !seen.has(id)) { + ordered.push(id); + seen.add(id); + } + }); + + // 3) Append any new entries not seen before + entryIds.forEach((id) => { + if (!seen.has(id)) { + ordered.push(id); + seen.add(id); + } + }); + + return ordered; + } + + function parseUptime(uptimeStr) { + if (!uptimeStr || typeof uptimeStr !== 'string') { + return null; + } + const trimmed = uptimeStr.trim(); + if (!trimmed) { + return null; + } + let dayCount = 0; + let timePortion = trimmed; + const dayMatch = trimmed.match(/(\d+)\s+day/); + if (dayMatch) { + dayCount = Number(dayMatch[1]) || 0; + const commaIndex = trimmed.indexOf(','); + timePortion = commaIndex >= 0 ? trimmed.slice(commaIndex + 1).trim() : trimmed; + } + const parts = timePortion.split(':').map((value) => Number(value)); + if (parts.some((value) => Number.isNaN(value))) { + return null; + } + let hours = 0; + let minutes = 0; + let seconds = 0; + if (parts.length === 3) { + [hours, minutes, seconds] = parts; + } else if (parts.length === 2) { + [minutes, seconds] = parts; + } else if (parts.length === 1) { + [seconds] = parts; + } else { + return null; + } + return (dayCount * 86400) + (hours * 3600) + (minutes * 60) + seconds; + } + + function formatUptime(totalSeconds) { + if (!Number.isFinite(totalSeconds)) { + return ''; + } + const rounded = Math.max(0, Math.floor(totalSeconds)); + const days = Math.floor(rounded / 86400); + let remainder = rounded - (days * 86400); + const hours = Math.floor(remainder / 3600); + remainder -= hours * 3600; + const minutes = Math.floor(remainder / 60); + const seconds = remainder - (minutes * 60); + const timePart = `${hours}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`; + if (days > 0) { + return `${days} day${days === 1 ? '' : 's'}, ${timePart}`; + } + return timePart; + } + + function formatDisplayTimestamp(value) { + if (value == null || value === '') { + return 'N/A'; + } + let candidate = ''; + if (typeof value === 'number') { + if (value <= 0) { + return 'N/A'; + } + candidate = new Date(value * 1000).toISOString(); + } else if (typeof value === 'string') { + candidate = value.trim(); + if (!candidate) { + return 'N/A'; + } + } else { + return 'N/A'; + } + const match = candidate.match(/^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2})/); + if (match) { + return `${match[1]} ${match[2]}`; + } + if (candidate.includes('T')) { + return candidate.replace('T', ' '); + } + return candidate; + } + + function arraysEqual(lhs = [], rhs = []) { + if (lhs === rhs) { + return true; + } + if (!lhs || !rhs || lhs.length !== rhs.length) { + return false; + } + for (let idx = 0; idx < lhs.length; idx += 1) { + if (lhs[idx] !== rhs[idx]) { + return false; + } + } + return true; + } + + function normalizeDevicesList(rawDevices = []) { + if (!Array.isArray(rawDevices)) { + return []; + } + const seen = new Set(); + return rawDevices.filter((device) => { + if (!device || !device.device_id || device.device_id === 'default') { + return false; + } + if (seen.has(device.device_id)) { + return false; + } + seen.add(device.device_id); + return true; + }); + } + + function App() { + const [activeTab, setActiveTab] = useState('home'); + const [status, setStatus] = useState(DEFAULT_STATUS); + const [devices, setDevices] = useState([]); + const [selectedDeviceId, setSelectedDeviceId] = useState(''); + const [rotation, setRotation] = useState({ entries: [], playlists: { default: [] } }); + const [rotationOrder, setRotationOrder] = useState([]); + const [activeRotationIds, setActiveRotationIds] = useState([]); + const [activePlaylistTokens, setActivePlaylistTokens] = useState([]); + const [rotationTarget, setRotationTarget] = useState('default'); + const [draftPlaylists, setDraftPlaylists] = useState({}); + const [logsData, setLogsData] = useState([]); + const [logsAutoRefresh, setLogsAutoRefresh] = useState(true); + const [logsLoading, setLogsLoading] = useState(false); + const [logsError, setLogsError] = useState(null); + const [rotationFeedback, setRotationFeedback] = useState(''); + const [theme, setTheme] = useState(() => { + if (typeof window === 'undefined') { + return 'light'; + } + const stored = window.localStorage.getItem('trmnl-theme'); + if (stored === 'light' || stored === 'dark') { + return stored; + } + return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + }); + const [pageVisible, setPageVisible] = useState(() => { + if (typeof document === 'undefined') { + return true; + } + return document.visibilityState !== 'hidden'; + }); + const lastLogIdRef = useRef(null); + const pendingLogResetRef = useRef(0); + const mergeDevices = useCallback((incoming) => { + if (!Array.isArray(incoming) || incoming.length === 0) { + return; + } + setDevices((prev) => { + const map = new Map(); + (Array.isArray(prev) ? prev : []).forEach((device) => { + if (device && device.device_id && device.device_id !== 'default') { + map.set(device.device_id, device); + } + }); + incoming.forEach((device) => { + if (device && device.device_id && device.device_id !== 'default') { + map.set(device.device_id, device); + } + }); + return Array.from(map.values()); + }); + }, []); + const statusInterval = useMemo(() => { + const refreshSeconds = Number(status?.client?.refresh_time) || 60; + return Math.max(5000, (refreshSeconds * 1000) / 2); + }, [status?.client?.refresh_time]); + const deviceOptions = useMemo(() => { + const source = devices.length ? devices : (status.devices || []); + return normalizeDevicesList(source); + }, [devices, status.devices]); + const handleDeviceSelect = useCallback((nextId) => { + if (!nextId) { + return; + } + setSelectedDeviceId(nextId); + }, []); + const toggleTheme = useCallback(() => { + setTheme((prev) => (prev === 'dark' ? 'light' : 'dark')); + }, []); + const handleRotationTargetChange = useCallback((value) => { + const nextTarget = value || 'default'; + if (rotationTarget && rotationTarget !== 'default') { + setDraftPlaylists((prev) => { + if (!Object.prototype.hasOwnProperty.call(prev, rotationTarget)) { + return prev; + } + const activeOrdered = rotationOrder.filter((id) => activeRotationIds.includes(id)); + const current = Array.isArray(prev[rotationTarget]) ? prev[rotationTarget] : []; + if (arraysEqual(current, activeOrdered)) { + return prev; + } + return { ...prev, [rotationTarget]: activeOrdered }; + }); + } + setRotationTarget(nextTarget); + }, [activeRotationIds, rotationOrder, rotationTarget]); + const resolvePlaylistForTarget = useCallback((snapshot, target, drafts) => { + if (!snapshot || !snapshot.playlists) { + return []; + } + if (target && target !== 'default') { + if (drafts && Object.prototype.hasOwnProperty.call(drafts, target)) { + return Array.from(drafts[target] || []); + } + const named = snapshot.playlists?.named || {}; + if (named[target]) { + return Array.from(named[target]); + } + } + return Array.from(snapshot.playlists?.default || []); + }, []); + const fetchStatus = useCallback(async (deviceOverride) => { + try { + const targetDevice = deviceOverride || selectedDeviceId; + const params = new URLSearchParams(); + if (targetDevice) { + params.set('device_id', targetDevice); + } + const query = params.toString(); + const res = await fetch(withCacheBuster(query ? `/status?${query}` : '/status')); + if (!res.ok) return; + const data = await res.json(); + setStatus(data); + if (Array.isArray(data?.devices)) { + mergeDevices(data.devices); + } + const incomingDeviceId = data?.client?.device_id; + if (incomingDeviceId) { + if (!selectedDeviceId) { + setSelectedDeviceId(incomingDeviceId); + } else if (deviceOverride && incomingDeviceId !== selectedDeviceId) { + setSelectedDeviceId(incomingDeviceId); + } + } + } catch (e) { + console.warn('status fetch failed', e); + } + }, [mergeDevices, selectedDeviceId]); + + const fetchDevices = useCallback(async () => { + try { + const res = await fetch(withCacheBuster('/devices?include_default=false')); + if (!res.ok) return; + const data = await res.json(); + if (Array.isArray(data?.devices)) { + mergeDevices(data.devices); + } + } catch (e) { + console.warn('devices fetch failed', e); + } + }, [mergeDevices]); + + useEffect(() => { + if (typeof document !== 'undefined') { + document.documentElement.dataset.theme = theme; + } + if (typeof window !== 'undefined' && window.localStorage) { + window.localStorage.setItem('trmnl-theme', theme); + } + }, [theme]); + + useEffect(() => { + if (typeof document === 'undefined') { + return undefined; + } + const handleVisibilityChange = () => setPageVisible(document.visibilityState !== 'hidden'); + document.addEventListener('visibilitychange', handleVisibilityChange); + return () => document.removeEventListener('visibilitychange', handleVisibilityChange); + }, []); + + const fetchRotation = useCallback(async () => { + try { + const res = await fetch(withCacheBuster('/rotation')); + if (!res.ok) return; + const data = await res.json(); + setRotation(data); + } catch (e) { + console.warn('rotation fetch failed', e); + } + }, []); + + const handleDeviceUpdate = useCallback( + async (deviceId, payload) => { + if (!deviceId) { + return false; + } + try { + const res = await fetch(withCacheBuster(`/devices/${deviceId}`), { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); + if (!res.ok) { + throw new Error(`Status ${res.status}`); + } + const nextStatusDevice = deviceId === selectedDeviceId ? deviceId : (selectedDeviceId || deviceId); + await fetchStatus(nextStatusDevice); + await fetchRotation(); + return true; + } catch (err) { + console.warn('device update failed', err); + return false; + } + }, + [fetchRotation, fetchStatus, selectedDeviceId] + ); + + const fetchLogs = useCallback( + async (options = {}) => { + const { reset = false } = options; + if (reset) { + lastLogIdRef.current = null; + pendingLogResetRef.current += 1; + setLogsLoading(true); + } + setLogsError(null); + try { + const params = new URLSearchParams({ + format: 'json', + limit: String(LOG_PAGE_SIZE) + }); + if (!reset && lastLogIdRef.current != null) { + params.set('after', String(lastLogIdRef.current)); + } + const res = await fetch(withCacheBuster(`/server/log?${params.toString()}`), { + cache: 'no-store', + headers: { Accept: 'application/json' } + }); + if (!res.ok) throw new Error(`status ${res.status}`); + const data = await res.json(); + if (reset) { + setLogsData(data.slice(-LOG_BUFFER_LIMIT)); + } else if (data.length) { + setLogsData((prev) => { + const existingIds = new Set(prev.map((entry) => entry.id)); + const merged = [...prev]; + data.forEach((entry) => { + if (!existingIds.has(entry.id)) { + merged.push(entry); + } + }); + if (merged.length > LOG_BUFFER_LIMIT) { + return merged.slice(-LOG_BUFFER_LIMIT); + } + return merged; + }); + } + if (data.length) { + lastLogIdRef.current = data[data.length - 1].id; + } + } catch (e) { + console.warn('logs fetch failed', e); + setLogsError(e.message || String(e)); + } finally { + if (reset) { + pendingLogResetRef.current = Math.max(0, pendingLogResetRef.current - 1); + if (pendingLogResetRef.current === 0) { + setLogsLoading(false); + } + } + } + }, + [] + ); + + const refreshLogs = useCallback(() => { + fetchLogs({ reset: true }); + }, [fetchLogs]); + + const appendLogs = useCallback(() => { + fetchLogs({ reset: false }); + }, [fetchLogs]); + + useEffect(() => { + fetchStatus(); + fetchRotation(); + fetchDevices(); + }, [fetchStatus, fetchRotation, fetchDevices]); + + useEffect(() => { + if (activeTab === 'rotation') { + fetchRotation(); + fetchDevices(); + } + }, [activeTab, fetchRotation, fetchDevices]); + + useEffect(() => { + if (activeTab === 'home') { + fetchStatus(); + } + }, [activeTab, fetchStatus]); + + useEffect(() => { + if (activeTab !== 'rotation' && selectedDeviceId) { + fetchStatus(selectedDeviceId); + } + }, [activeTab, selectedDeviceId, fetchStatus]); + + useEffect(() => { + if (!rotation || !rotation.entries) { + return; + } + const playlistTokens = resolvePlaylistForTarget(rotation, rotationTarget, draftPlaylists); + const playlistBaseIds = uniqueOrdered((playlistTokens || []).map((token) => parsePlaylistToken(token).id).filter(Boolean)); + setActivePlaylistTokens((prev) => (arraysEqual(prev, playlistTokens) ? prev : playlistTokens)); + setActiveRotationIds((prev) => (arraysEqual(prev, playlistBaseIds) ? prev : playlistBaseIds)); + setRotationOrder((prev) => { + const next = computeRotationOrder(rotation.entries, playlistTokens, prev); + return arraysEqual(prev, next) ? prev : next; + }); + }, [rotation, rotationTarget, resolvePlaylistForTarget, draftPlaylists]); + + useInterval(fetchStatus, statusInterval, pageVisible && activeTab !== 'rotation'); + useInterval(appendLogs, 5000, activeTab === 'logs' && logsAutoRefresh); + + useEffect(() => { + if (activeTab === 'logs') { + refreshLogs(); + } + }, [activeTab, refreshLogs]); + + const toggleSelection = (id) => { + setActivePlaylistTokens((prevTokens) => { + const existing = (prevTokens || []).find((token) => parsePlaylistToken(token).id === id); + const nextTokens = existing + ? (prevTokens || []).filter((token) => parsePlaylistToken(token).id !== id) + : [...(prevTokens || []), id]; + + const nextActiveIds = uniqueOrdered(nextTokens.map((token) => parsePlaylistToken(token).id).filter(Boolean)); + setActiveRotationIds((prevIds) => (arraysEqual(prevIds, nextActiveIds) ? prevIds : nextActiveIds)); + + if (rotationTarget && rotationTarget !== 'default') { + setDraftPlaylists((draftPrev) => { + if (!Object.prototype.hasOwnProperty.call(draftPrev, rotationTarget)) { + return draftPrev; + } + const orderedTokens = buildPlaylistTokensFromOrder(rotationOrder, nextTokens); + const current = Array.isArray(draftPrev[rotationTarget]) ? draftPrev[rotationTarget] : []; + if (arraysEqual(current, orderedTokens)) { + return draftPrev; + } + return { ...draftPrev, [rotationTarget]: orderedTokens }; + }); + } + return nextTokens; + }); + }; + + const toggleForceOneBit = useCallback((id, enabled) => { + setActivePlaylistTokens((prevTokens) => { + const tokens = Array.isArray(prevTokens) ? prevTokens : []; + const idx = tokens.findIndex((token) => parsePlaylistToken(token).id === id); + if (idx < 0) { + return tokens; + } + const current = parsePlaylistToken(tokens[idx]); + const nextRaw = enabled ? `${current.id}@bmp` : current.id; + const nextTokens = tokens.slice(); + nextTokens[idx] = nextRaw; + + if (rotationTarget && rotationTarget !== 'default') { + setDraftPlaylists((draftPrev) => { + if (!Object.prototype.hasOwnProperty.call(draftPrev, rotationTarget)) { + return draftPrev; + } + const orderedTokens = buildPlaylistTokensFromOrder(rotationOrder, nextTokens); + const currentDraft = Array.isArray(draftPrev[rotationTarget]) ? draftPrev[rotationTarget] : []; + if (arraysEqual(currentDraft, orderedTokens)) { + return draftPrev; + } + return { ...draftPrev, [rotationTarget]: orderedTokens }; + }); + } + return nextTokens; + }); + }, [rotationOrder, rotationTarget]); + + const handleRotationReorder = useCallback((nextOrder) => { + setRotationOrder(nextOrder); + if (rotationTarget && rotationTarget !== 'default') { + setDraftPlaylists((prev) => { + if (!Object.prototype.hasOwnProperty.call(prev, rotationTarget)) { + return prev; + } + const ordered = buildPlaylistTokensFromOrder(nextOrder || [], activePlaylistTokens); + const current = Array.isArray(prev[rotationTarget]) ? prev[rotationTarget] : []; + if (arraysEqual(current, ordered)) { + return prev; + } + return { ...prev, [rotationTarget]: ordered }; + }); + } + }, [activePlaylistTokens, rotationTarget]); + + const buildActivePlaylist = useCallback(() => { + return buildPlaylistTokensFromOrder(rotationOrder, activePlaylistTokens); + }, [rotationOrder, activePlaylistTokens]); + + const savePlaylistForTarget = useCallback( + async (targetId) => { + const playlist = buildActivePlaylist(); + if (!playlist.length) { + return { success: false, count: 0, message: 'Select at least one plugin' }; + } + try { + const isDefault = !targetId || targetId === 'default'; + const endpoint = isDefault ? '/rotation' : '/playlists'; + const payload = isDefault ? { playlist } : { name: targetId, playlist }; + const res = await fetch(withCacheBuster(endpoint), { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); + if (!res.ok) { + throw new Error(`Status ${res.status}`); + } + const data = await res.json(); + setRotation(data); + if (!isDefault) { + setDraftPlaylists((prev) => { + if (!Object.prototype.hasOwnProperty.call(prev, targetId)) { + return prev; + } + const next = { ...prev }; + delete next[targetId]; + return next; + }); + } + return { success: true, count: playlist.length }; + } catch (err) { + console.error('playlist save failed', err); + return { success: false, count: playlist.length, message: 'Failed to save playlist' }; + } + }, + [buildActivePlaylist, setRotation] + ); + + const deletePlaylist = useCallback(async (name) => { + const target = (name || '').trim(); + if (!target || target === 'default') { + return false; + } + if (Object.prototype.hasOwnProperty.call(draftPlaylists, target)) { + setDraftPlaylists((prev) => { + const next = { ...prev }; + delete next[target]; + return next; + }); + if (rotationTarget === target) { + setRotationTarget('default'); + } + return true; + } + try { + const res = await fetch(withCacheBuster(`/playlists/${encodeURIComponent(target)}`), { method: 'DELETE' }); + if (!res.ok) { + throw new Error(`Status ${res.status}`); + } + const data = await res.json(); + setRotation(data); + if (rotationTarget === target) { + setRotationTarget('default'); + } + return true; + } catch (err) { + console.warn('playlist delete failed', err); + setRotationFeedback('Unable to delete playlist'); + return false; + } + }, [draftPlaylists, rotationTarget, setRotation, setRotationFeedback]); + + const createPlaylist = useCallback((rawName) => { + const target = (rawName || '').trim(); + if (!target || target === 'default') { + setRotationFeedback('Invalid playlist name'); + return false; + } + const existing = rotation?.playlists?.named || {}; + if (existing[target] || Object.prototype.hasOwnProperty.call(draftPlaylists, target)) { + setRotationFeedback('Playlist already exists'); + return false; + } + setDraftPlaylists((prev) => ({ ...prev, [target]: [] })); + setRotationTarget(target); + setRotationFeedback('New playlist created. Toggle at least one plugin, then Save.'); + return true; + }, [draftPlaylists, rotation, setRotationFeedback]); + + const persistRotation = async () => { + setRotationFeedback(''); + const scopeLabel = rotationTarget === 'default' ? 'default playlist' : `playlist ${rotationTarget}`; + const result = await savePlaylistForTarget(rotationTarget); + if (result.success) { + setRotationFeedback(`Saved ${result.count} image(s) for ${scopeLabel}`); + } else { + setRotationFeedback(result.message || 'Failed to save playlist'); + } + }; + + const handleDeviceAssignmentToggle = useCallback( + async (deviceId, enabled) => { + if (!deviceId || deviceId === 'default' || !rotationTarget || rotationTarget === 'default') { + return; + } + const named = rotation?.playlists?.named || {}; + const isDraft = Object.prototype.hasOwnProperty.call(draftPlaylists, rotationTarget) && !named[rotationTarget]; + if (isDraft) { + setRotationFeedback('Save the playlist before assigning devices'); + return; + } + const payload = enabled ? { playlist_name: rotationTarget } : { playlist_name: null }; + const ok = await handleDeviceUpdate(deviceId, payload); + if (ok) { + setRotationFeedback(enabled ? `Assigned ${deviceId} to ${rotationTarget}` : `Unassigned ${deviceId}`); + } else { + setRotationFeedback('Failed to update device assignment'); + } + }, + [draftPlaylists, handleDeviceUpdate, rotation, rotationTarget, setRotationFeedback] + ); + + const logsList = useMemo(() => { + if (!logsData || logsData.length === 0) { + return []; + } + return [...logsData].reverse(); + }, [logsData]); + + return html` +
+ <${Menu} activeTab=${activeTab} setActiveTab=${setActiveTab} /> + <${Topbar} + status=${status} + theme=${theme} + onToggleTheme=${toggleTheme} + uptimeRaw=${status?.server?.uptime} + devices=${deviceOptions} + selectedDeviceId=${selectedDeviceId} + onSelectDevice=${handleDeviceSelect} + /> +
+ ${activeTab === 'home' + ? html`<${Container} id="home" activeTab=${activeTab}> + <${HomeTab} + status=${status} + devices=${deviceOptions} + onSelectDevice=${handleDeviceSelect} + selectedDeviceId=${selectedDeviceId} + /> + ` + : null} + ${activeTab === 'devices' + ? html`<${Container} id="devices" activeTab=${activeTab}> + <${DevicesTab} + devices=${deviceOptions} + selectedDeviceId=${selectedDeviceId} + onSelectDevice=${handleDeviceSelect} + onUpdateDevice=${handleDeviceUpdate} + deviceHistory=${status.client_data_db} + clientStats=${status.client} + /> + ` + : null} + ${activeTab === 'logs' + ? html`<${Container} id="logs" activeTab=${activeTab}> + <${LogsTab} + logsList=${logsList} + onRefresh=${refreshLogs} + autoRefresh=${logsAutoRefresh} + setAutoRefresh=${setLogsAutoRefresh} + loading=${logsLoading} + error=${logsError} + /> + ` + : null} + ${activeTab === 'rotation' + ? html`<${Container} id="rotation" activeTab=${activeTab}> + <${RotationTab} + rotation=${rotation} + rotationOrder=${rotationOrder} + activeRotationIds=${activeRotationIds} + activePlaylistTokens=${activePlaylistTokens} + toggleSelection=${toggleSelection} + toggleForceOneBit=${toggleForceOneBit} + persistRotation=${persistRotation} + rotationFeedback=${rotationFeedback} + onReorder=${handleRotationReorder} + rotationTarget=${rotationTarget} + onTargetChange=${handleRotationTargetChange} + devices=${deviceOptions} + onAssignmentToggle=${handleDeviceAssignmentToggle} + onCreatePlaylist=${createPlaylist} + onDeletePlaylist=${deletePlaylist} + draftNames=${Object.keys(draftPlaylists || {})} + /> + ` + : null} +
+
+ `; + } + + function Menu({ activeTab, setActiveTab }) { + return html` +
+ `; + } + + function Topbar({ status, theme, onToggleTheme, uptimeRaw, devices, selectedDeviceId, onSelectDevice }) { + const deviceList = normalizeDevicesList((Array.isArray(devices) && devices.length ? devices : status.devices) || []); + const selectorValue = selectedDeviceId || (deviceList[0]?.device_id || ''); + const uptimeDisplay = uptimeRaw || status.server.uptime || '--'; + return html` +
+
+ +

TRMNL Server

+
+
+
+ + ${uptimeDisplay} +
+
+ +
+
+
+ `; + } + + function Container({ id, activeTab, children }) { + return html`
${children}
`; + } + + function HomeTab({ status, devices, onSelectDevice, selectedDeviceId }) { + const serverTimeDisplay = formatDisplayTimestamp(status.server.current_time); + const deviceList = normalizeDevicesList((devices && devices.length ? devices : status.devices) || []); + const effectiveSelectedId = selectedDeviceId || status.client.device_id || 'default'; + const deviceSubtitle = deviceList.length ? `${deviceList.length} active` : 'Waiting for devices'; + const serverSubtitle = serverTimeDisplay !== 'N/A' ? `Updated ${serverTimeDisplay}` : 'Awaiting metrics'; + return html` + <${Fragment}> +
+
+
+

Connected Devices

+ ${deviceSubtitle} +
+ ${deviceList.length + ? html` + <${DeviceGrid} + devices=${deviceList} + selectedDeviceId=${effectiveSelectedId} + onSelectDevice=${onSelectDevice} + /> + ` + : html`
No devices have checked in yet.
`} +
+
+
+

Server Status

+ ${serverSubtitle} +
+ <${StatusItem} + name="CPU Load" + value=${`${status.server.cpu_load} %`} + barId="cpu-load-bar" + barValue=${status.server.cpu_load} + barClass="progress-bar-blue" + /> +

Current Time:

${serverTimeDisplay}

+

Uptime:

${status.server.uptime}

+

Devices Online:

${deviceList.length}

+
+
+ + `; + } + + function StatusItem({ name, value, barId, barValue, barClass }) { + return html` +
+

${name}:

+

${value}

+
+
+
+
+ `; + } + + function DeviceGrid({ devices, selectedDeviceId, onSelectDevice }) { + const normalizedDevices = normalizeDevicesList(devices || []); + if (!normalizedDevices.length) { + return html`
No devices recorded yet
`; + } + return html` +
+ ${normalizedDevices.map((device) => { + const friendly = device.friendly_name || device.device_id; + const metrics = device.metrics || {}; + const profile = device.profile || {}; + const voltageValue = Number(metrics.battery_voltage); + const wifiValue = metrics.rssi; + const voltage = Number.isFinite(voltageValue) ? `${voltageValue.toFixed(2)} V` : 'N/A'; + const wifi = Number.isFinite(wifiValue) ? `${wifiValue} dBm` : 'N/A'; + const rawRefresh = metrics.refresh_rate ?? profile.refresh_interval; + const refreshNumber = Number(rawRefresh); + const refreshText = Number.isFinite(refreshNumber) && refreshNumber > 0 ? `${refreshNumber}s` : 'N/A'; + const lastContact = formatDisplayTimestamp(metrics.last_contact || profile.last_seen); + const previewUrl = device.state?.current_preview_url; + const previewSeed = device.state?.current_preview_token || device.state?.current_entry_hash; + const previewSrc = withCacheBuster(previewUrl, previewSeed, false); + const pluginLabel = device.state?.current_plugin_id || 'Awaiting rotation'; + const playlistName = (device.playlist_name && String(device.playlist_name).trim()) ? String(device.playlist_name).trim() : 'default'; + const playlistLabel = playlistName === 'default' ? 'Default playlist' : playlistName; + const isActive = device.device_id === selectedDeviceId; + return html` + + `; + })} +
+ `; + } + + function DevicesTab({ + devices, + selectedDeviceId, + onSelectDevice, + onUpdateDevice, + deviceHistory, + clientStats + }) { + const deviceList = normalizeDevicesList(devices || []); + const activeDevice = deviceList.find((device) => device.device_id === selectedDeviceId) || deviceList[0]; + const hasDevices = deviceList.length > 0; + const [formValues, setFormValues] = useState({ friendly_name: '', refresh_interval: '', time_zone: '' }); + const [saving, setSaving] = useState(false); + const [feedback, setFeedback] = useState(''); + const history = Array.isArray(deviceHistory) ? deviceHistory : []; + const historyMatchesSelection = activeDevice && clientStats?.device_id === activeDevice.device_id; + let filteredHistory = historyMatchesSelection ? history : []; + if (filteredHistory && filteredHistory.length > 10) { + filteredHistory = filteredHistory.slice(-10); + } + + useEffect(() => { + if (!activeDevice) { + return; + } + setFormValues({ + friendly_name: activeDevice.friendly_name || '', + refresh_interval: activeDevice.refresh_interval || activeDevice.metrics?.refresh_rate || '', + time_zone: (activeDevice.profile && activeDevice.profile.time_zone) || '' + }); + setFeedback(''); + }, [activeDevice]); + + useEffect(() => { + if (!deviceList.length || !onSelectDevice) { + return; + } + const exists = deviceList.some((device) => device.device_id === selectedDeviceId); + if (!exists && deviceList[0]) { + onSelectDevice(deviceList[0].device_id); + } + }, [deviceList, onSelectDevice, selectedDeviceId]); + + const handleInput = (key, value) => { + setFormValues((prev) => ({ ...prev, [key]: value })); + }; + + const handleSubmit = async (event) => { + event.preventDefault(); + if (!activeDevice || !onUpdateDevice) { + return; + } + setSaving(true); + const payload = {}; + if (formValues.friendly_name !== (activeDevice.friendly_name || '')) { + payload.friendly_name = formValues.friendly_name; + } + const refreshValue = Number(formValues.refresh_interval); + if (Number.isFinite(refreshValue) && refreshValue > 0) { + payload.refresh_interval = refreshValue; + } + if (formValues.time_zone !== ((activeDevice.profile && activeDevice.profile.time_zone) || '')) { + payload.time_zone = formValues.time_zone; + } + if (!Object.keys(payload).length) { + setFeedback('Nothing to update'); + setSaving(false); + return; + } + const success = await onUpdateDevice(activeDevice.device_id, payload); + setFeedback(success ? 'Saved' : 'Unable to save'); + setSaving(false); + }; + + const metrics = activeDevice?.metrics || {}; + const profile = activeDevice?.profile || {}; + const batteryValue = Number(metrics.battery_voltage); + const batteryText = Number.isFinite(batteryValue) ? `${batteryValue.toFixed(2)} V` : 'N/A'; + const wifiValue = Number(metrics.rssi); + const wifiText = Number.isFinite(wifiValue) ? `${wifiValue} dBm` : 'N/A'; + const lastSeenText = formatDisplayTimestamp(metrics.last_contact || profile.last_seen); + + if (!hasDevices) { + return html` +
+
+ No devices found in the database yet. A TRMNL will appear here once it checks in. +
+
+ `; + } + return html` +
+
+
+
+
+

Devices

+ ${deviceList.length} total +
+ <${DeviceGrid} + devices=${deviceList} + selectedDeviceId=${selectedDeviceId} + onSelectDevice=${onSelectDevice} + /> +
+ ${activeDevice + ? html` +
+
+

Device settings

+ ID: ${activeDevice.device_id} +
+
+ ${batteryText} + ${wifiText} + ${lastSeenText} +
+
+ + + +
+ + +
+
+
` + : html`

Select a device to edit settings.

`} +
+
+ ${activeDevice + ? html` +
+
+

Battery & Signal

+ + ${filteredHistory.length ? `${filteredHistory.length} samples (most recent)` : 'No telemetry yet'} + +
+ ${filteredHistory.length + ? html` + <${BatteryCharts} + data=${filteredHistory} + batteryMin=${clientStats?.battery_voltage_min} + batteryMax=${clientStats?.battery_voltage_max} + /> + ` + : html`

No telemetry stored for this device yet.

`} +
+
+
+

Telemetry samples

+ Latest readings +
+ ${filteredHistory.length + ? html`<${StatsTable} data=${filteredHistory} />` + : html`

No telemetry stored for this device yet.

`} +
+ ` + : html`

Select a device to view metrics.

`} +
+
+
+ `; + } + + function BatteryCharts({ data, batteryMin = 2.5, batteryMax = 5.0 }) { + const voltageCanvasRef = useRef(null); + const rssiCanvasRef = useRef(null); + const voltageChartRef = useRef(null); + const rssiChartRef = useRef(null); + + useEffect(() => { + if (!data || data.length === 0 || typeof Chart === 'undefined') { + return undefined; + } + + const timestamps = data.map((entry) => entry.timestamp); + const voltages = data.map((entry) => entry.battery_voltage); + const socs = data.map((entry) => { + const v = entry.battery_voltage; + const soc = ((v - batteryMin) / (batteryMax - batteryMin)) * 100; + return Math.max(0, Math.min(soc, 100)); + }); + + if (voltageChartRef.current) { + voltageChartRef.current.destroy(); + } + + voltageChartRef.current = new Chart(voltageCanvasRef.current.getContext('2d'), { + type: 'line', + data: { + labels: timestamps, + datasets: [ + { + label: 'Battery Voltage', + data: voltages, + borderColor: 'rgba(75, 192, 192, 1)', + backgroundColor: 'rgba(75, 192, 192, 0.2)', + fill: true, + yAxisID: 'y-voltage' + }, + { + label: 'Battery SOC (%)', + data: socs, + borderColor: 'rgba(255, 99, 132, 1)', + backgroundColor: 'rgba(255, 99, 132, 0.2)', + fill: true, + yAxisID: 'y-soc' + } + ] + }, + options: { + animation: false, + responsive: true, + maintainAspectRatio: false, + scales: { + x: { + type: 'time', + time: { unit: 'hour', displayFormats: { hour: 'dd.MM. HH:mm' } } + }, + 'y-voltage': { + beginAtZero: false, + title: { display: true, text: 'Battery Voltage (V)' }, + position: 'left' + }, + 'y-soc': { + beginAtZero: true, + title: { display: true, text: 'Battery SOC (%)' }, + position: 'right', + grid: { drawOnChartArea: false } + } + } + } + }); + + const rssiValues = data.map((entry) => entry.rssi); + if (rssiChartRef.current) { + rssiChartRef.current.destroy(); + } + rssiChartRef.current = new Chart(rssiCanvasRef.current.getContext('2d'), { + type: 'line', + data: { + labels: timestamps, + datasets: [ + { + label: 'WiFi Signal Strength (dBm)', + data: rssiValues, + borderColor: 'rgba(75, 192, 192, 1)', + backgroundColor: 'rgba(75, 192, 192, 0.2)', + fill: true, + yAxisID: 'y-rssi' + }, + { + label: 'WiFi Signal Strength (%)', + data: rssiValues.map(getWifiStrength), + borderColor: 'rgba(255, 99, 132, 1)', + backgroundColor: 'rgba(255, 99, 132, 0.2)', + fill: true, + yAxisID: 'y-strength' + } + ] + }, + options: { + animation: false, + responsive: true, + maintainAspectRatio: false, + scales: { + x: { + type: 'time', + time: { unit: 'hour', displayFormats: { hour: 'dd.MM. HH:mm' } } + }, + 'y-rssi': { + beginAtZero: false, + title: { display: true, text: 'RSSI (dBm)' } + }, + 'y-strength': { + beginAtZero: false, + title: { display: true, text: 'Wifi Strength (%)' }, + position: 'right' + } + } + } + }); + + return () => { + if (voltageChartRef.current) { + voltageChartRef.current.destroy(); + voltageChartRef.current = null; + } + if (rssiChartRef.current) { + rssiChartRef.current.destroy(); + rssiChartRef.current = null; + } + }; + }, [data, batteryMin, batteryMax]); + + if (!data || data.length === 0) { + return html`
No data
`; + } + + return html` +
+
+
+
+ `; + } + + function StatsTable({ data }) { + if (!data || data.length === 0) { + return html`
No data
`; + } + const rows = [...data].slice(-100).reverse(); + return html` +
+ + + + + + ${rows.map( + (entry, idx) => html` + + + + + + + ` + )} + +
TimestampVoltage (V)RSSI (dBm)WiFi (%)
${formatDisplayTimestamp(entry.timestamp)}${entry.battery_voltage != null ? Number(entry.battery_voltage).toFixed(2) : ''}${entry.rssi != null ? entry.rssi : ''}${entry.rssi != null ? Math.round(getWifiStrength(entry.rssi)) : ''}
+ ${data.length > 100 + ? html`
Showing latest 100 of ${data.length} entries
` + : null} +
+ `; + } + + function LogsTab({ logsList, onRefresh, autoRefresh, setAutoRefresh, loading, error }) { + return html` +
+
+

Server Logs

+
+ + +
+
+ ${loading + ? html`
Loading...
` + : error + ? html`
Error: ${error}
` + : html`
+ ${logsList.length === 0 + ? html`
No logs available.
` + : logsList.map( + (log) => html` +
+
+ ${formatDisplayTimestamp(log.timestamp)} + ${ + log.context ? `[${log.context}]` : '(no context)' + } +
+
${log.info || ''}
+
+ ` + )} +
`} +
+ `; + } + + function RotationTab({ + rotation, + rotationOrder, + activeRotationIds, + activePlaylistTokens, + toggleSelection, + toggleForceOneBit, + persistRotation, + rotationFeedback, + onReorder, + rotationTarget, + onTargetChange, + devices, + onAssignmentToggle, + onCreatePlaylist, + onDeletePlaylist, + draftNames + }) { + const entries = rotation.entries || []; + const [newPlaylistName, setNewPlaylistName] = useState(''); + const entriesById = useMemo(() => { + const map = {}; + entries.forEach((e) => { + map[e.id] = e; + }); + return map; + }, [entries]); + + const orderedIds = useMemo(() => { + return rotationOrder && rotationOrder.length ? rotationOrder : entries.map((e) => e.id); + }, [rotationOrder, entries]); + + const forceOneBitIds = useMemo(() => { + const forced = new Set(); + (activePlaylistTokens || []).forEach((token) => { + const parsed = parsePlaylistToken(token); + if (parsed && parsed.id && parsed.mode === 'bmp') { + forced.add(parsed.id); + } + }); + return forced; + }, [activePlaylistTokens]); + const normalizedDevices = useMemo(() => normalizeDevicesList(devices || []), [devices]); + const namedPlaylists = rotation.playlists?.named || {}; + const bindings = rotation.playlists?.bindings || {}; + const playlistOptions = useMemo(() => { + const seen = new Set(['default']); + const base = [{ id: 'default', label: 'Default playlist' }]; + Object.keys(namedPlaylists || {}).sort().forEach((name) => { + if (!seen.has(name)) { + base.push({ id: name, label: name }); + seen.add(name); + } + }); + (Array.isArray(draftNames) ? draftNames : []).sort().forEach((name) => { + if (name && !seen.has(name)) { + base.push({ id: name, label: name }); + seen.add(name); + } + }); + return base; + }, [namedPlaylists, draftNames]); + const playlistLabel = rotationTarget === 'default' ? 'Default playlist' : rotationTarget; + const isDraft = rotationTarget && rotationTarget !== 'default' + && Array.isArray(draftNames) + && draftNames.includes(rotationTarget) + && !namedPlaylists[rotationTarget]; + const canDelete = rotationTarget && rotationTarget !== 'default' && (isDraft || namedPlaylists[rotationTarget]); + + return html` +
+
+
+

Playlist

+

Editing: ${playlistLabel}${isDraft ? ' (unsaved)' : ''}

+
+
+
+ + + + +
+
+
+

Drag thumbnails to reorder. Toggle to enable/disable; disabled plugins stay in the grid but are skipped by the server.

+ <${PlaylistGrid} + entriesById=${entriesById} + orderedIds=${orderedIds} + activeIds=${activeRotationIds} + forceOneBitIds=${forceOneBitIds} + onReorder=${onReorder} + onToggleActive=${toggleSelection} + onToggleForceOneBit=${toggleForceOneBit} + /> +
+ + ${rotationFeedback} +
+
+
+

Device assignments

+ Select devices that should use this playlist +
+ ${rotationTarget === 'default' + ? html`

Default playlist applies to unassigned devices.

` + : isDraft + ? html`

Save this playlist before assigning devices.

` + : normalizedDevices.length + ? html` +
+ ${normalizedDevices.map((device) => { + const deviceId = device.device_id; + const assigned = bindings[deviceId] === rotationTarget; + const detail = assigned ? 'Assigned' : 'Follows default'; + return html` + `; + })} +
` + : html`

No devices available for assignment yet.

`} +
+
+ `; + } + + function PlaylistGrid({ entriesById, orderedIds, activeIds, forceOneBitIds, onReorder, onToggleActive, onToggleForceOneBit }) { + const [draggingId, setDraggingId] = useState(null); + const [dropIndex, setDropIndex] = useState(null); + const uniqueOrderedIds = useMemo(() => Array.from(new Set(orderedIds)), [orderedIds]); + + const handleDropAt = (index) => { + if (!draggingId) return; + const next = uniqueOrderedIds.filter((id) => id !== draggingId); + next.splice(index, 0, draggingId); + onReorder(next); + setDraggingId(null); + setDropIndex(null); + }; + + const renderDropZone = (index) => html` +
{ + e.preventDefault(); + setDropIndex(index); + }} + onDragOver=${(e) => { + e.preventDefault(); + setDropIndex(index); + }} + onDragLeave=${(e) => { + e.preventDefault(); + setDropIndex((cur) => (cur === index ? null : cur)); + }} + onDrop=${(e) => { + e.preventDefault(); + handleDropAt(index); + }} + >
+ `; + + const items = []; + items.push(renderDropZone(0)); + uniqueOrderedIds.forEach((id, idx) => { + const entry = entriesById[id] || { label: id, id }; + const active = activeIds.includes(id); + const forceOneBit = forceOneBitIds && typeof forceOneBitIds.has === 'function' ? forceOneBitIds.has(id) : false; + items.push(html` +
{ + setDraggingId(id); + if (e.dataTransfer) { + e.dataTransfer.effectAllowed = 'move'; + e.dataTransfer.setData('text/plain', id); + } + }} + onDragEnd=${() => { + setDraggingId(null); + setDropIndex(null); + }} + > + ${entry.label} +
${entry.label || entry.id}
+ + +
+ `); + items.push(renderDropZone(idx + 1)); + }); + + return html`
${items}
`; + } + + function getWifiStrength(rssi) { + if (rssi <= -100) { + return 0; + } + if (rssi >= -50) { + return 100; + } + return 2 * (rssi + 100); + } + + render(html`<${App} />`, document.getElementById('app-root')); +})(); diff --git a/web/js/vendor/chart.umd.js b/web/js/vendor/chart.umd.js new file mode 100644 index 0000000..44f8065 --- /dev/null +++ b/web/js/vendor/chart.umd.js @@ -0,0 +1,14 @@ +/*! + * Chart.js v4.4.1 + * https://www.chartjs.org + * (c) 2023 Chart.js Contributors + * Released under the MIT License + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return Go},get Decimation(){return Qo},get Filler(){return ma},get Legend(){return ya},get SubTitle(){return ka},get Title(){return Ma},get Tooltip(){return Ba}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;at,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)t-e)).pop(),e}function N(t){return!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return nt[s][e]et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const ht="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ct(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,ht.call(window,(()=>{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=J(Math.min(it(r,l,h).lo,i?s:it(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?J(Math.max(it(r,a.axis,c,!0).hi+1,i?0:it(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class bt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var xt=new bt; +/*! + * @kurkle/color v0.3.2 + * https://github.com/kurkle/color#readme + * (c) 2023 Jukka Kurkela + * Released under the MIT License + */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Zt{constructor(t){if(t instanceof Zt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Zt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Jt(t)?t:new Zt(t)}function te(t){return Jt(t)?t:new Zt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function be(t,e){return me(t).getPropertyValue(e)}const xe=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=xe[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const ye=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function ve(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(ye(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const Me=t=>Math.round(10*t)/10;function we(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=Me(Math.min(h,a,l.maxWidth)),c=Me(Math.min(c,r,l.maxHeight)),h&&!c&&(c=Me(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=Me(Math.floor(c*s))),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};fe()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch(t){}return t}();function Pe(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Ce(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Oe(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function Re(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),s(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;ct[0])){const o=i||t;void 0===s&&(s=ti("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>je([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>qe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=ti(Ue(o,t),i),void 0!==n)return Xe(t,n)?Je(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ei(t).includes(e),ownKeys:t=>ei(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function $e(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ye(t,s),setContext:e=>$e(t,e,i,s),override:n=>$e(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>qe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let l=e(o,a||s);r.delete(t),Xe(t,l)&&(l=Je(n._scopes,n,t,l));return l}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(void 0!==a.index&&s(t))return e[a.index%e.length];if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Je(s,n,t,o);e.push($e(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Xe(e,h)&&(h=$e(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ue=(t,e)=>t?t+w(e):e,Xe=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function Ke(t,e,i){return S(t)?t(e,i):t}const Ge=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Ze(t,e,i,s,n){for(const o of e){const e=Ge(i,o);if(e){t.add(e);const o=Ke(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function Je(t,e,i,s){const a=e._rootScopes,r=Ke(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Qe(h,l,i,r||i,s);return null!==c&&((void 0===r||r===i||(c=Qe(h,l,r,c,s),null!==c))&&je(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Qe(t,e,i,s,n){for(;i;)i=Ze(t,e,i,s,n);return i}function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=ni(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)ri(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,di=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),ui=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,fi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ci(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ci(t)?t:di(t,.075,.3),easeOutElastic:t=>ci(t)?t:ui(t,.075,.3),easeInOutElastic(t){const e=.1125;return ci(t)?t:t<.5?.5*di(2*t,e,.45):.5+.5*ui(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-fi.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*fi.easeInBounce(2*t):.5*fi.easeOutBounce(2*t-1)+.5};function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function mi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=gi(t,n,i),r=gi(n,o,i),l=gi(o,e,i),h=gi(a,r,i),c=gi(r,l,i);return gi(h,c,i)}const bi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,xi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function _i(t,e){const i=(""+t).match(bi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}const yi=t=>+t||0;function vi(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=yi(a(t));return i}function Mi(t){return vi(t,{top:"y",right:"x",bottom:"y",left:"x"})}function wi(t){return vi(t,["topLeft","topRight","bottomLeft","bottomRight"])}function ki(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Si(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(xi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:_i(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=De(n),n}function Pi(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;oi&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ci(t,e){return Object.assign(Object.create(t),e)}function Oi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ai(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Ti(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Li(t){return"angle"===t?{between:Z,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ei({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Ri(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Li(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Li(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hx||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ei({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(Ei({start:_,end:d,loop:u,count:a,style:f})),g}function Ii(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Fi(t,[{start:a,end:r,loop:o}],i,e);return Fi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Xi={evaluateInteractionItems:Hi,modes:{index(t,e,i,s){const n=ve(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?ji(t,n,o,s,a):Yi(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?ji(t,n,o,s,a):Yi(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tji(t,ve(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return Yi(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>Ui(t,ve(e,t),"x",i.intersect,s),y:(t,e,i,s)=>Ui(t,ve(e,t),"y",i.intersect,s)}};const qi=["left","top","right","bottom"];function Ki(t,e){return t.filter((t=>t.pos===e))}function Gi(t,e){return t.filter((t=>-1===qi.indexOf(t.pos)&&t.box.axis===e))}function Zi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Ji(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!qi.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function ss(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Zi(Ki(e,"left"),!0),n=Zi(Ki(e,"right")),o=Zi(Ki(e,"top"),!0),a=Zi(Ki(e,"bottom")),r=Gi(e,"x"),l=Gi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ki(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);ts(f,ki(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=Ji(l.concat(h),d);ss(r.fullSize,g,d,p),ss(l,g,d,p),ss(h,g,d,p)&&ss(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),os(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,os(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class rs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class ls extends rs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const hs="$chartjs",cs={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},ds=t=>null===t||""===t;const us=!!Se&&{passive:!0};function fs(t,e,i){t.canvas.removeEventListener(e,i,us)}function gs(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function ps(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||gs(i.addedNodes,s),e=e&&!gs(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function ms(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||gs(i.removedNodes,s),e=e&&!gs(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const bs=new Map;let xs=0;function _s(){const t=window.devicePixelRatio;t!==xs&&(xs=t,bs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function ys(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){bs.size||window.addEventListener("resize",_s),bs.set(t,e)}(t,o),a}function vs(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){bs.delete(t),bs.size||window.removeEventListener("resize",_s)}(t)}function Ms(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=cs[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t.addEventListener(e,i,us)}(s,e,n),n}class ws extends rs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t[hs]={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",ds(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(ds(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[hs])return!1;const i=e[hs].initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e[hs],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:ps,detach:ms,resize:ys}[e]||Ms;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:vs,detach:vs,resize:vs}[e]||fs)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return we(t,e,i,s)}isAttached(t){const e=ge(t);return!(!e||!e.isConnected)}}function ks(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?ls:ws}var Ss=Object.freeze({__proto__:null,BasePlatform:rs,BasicPlatform:ls,DomPlatform:ws,_detectPlatform:ks});const Ps="transparent",Ds={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||Ps),n=s.valid&&Qt(e||Ps);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Cs{constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const o=Pi([t.from,n,s]);this._active=!0,this._fn=t.fn||Ds[t.type||typeof o],this._easing=fi[t.easing]||fi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Pi([t.to,e,s,t.from]),this._from=Pi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new Cs(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(xt.add(this._chart,i),!0):void 0}}function As(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Ts(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function zs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Vs(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Bs=t=>"reset"===t||"none"===t,Ws=(t,e)=>e?t:Object.assign({},t);class Ns{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Es(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Vs(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Fs(t,"x")),o=e.yAxisID=l(i.yAxisID,Fs(t,"y")),a=e.rAxisID=l(i.rAxisID,Fs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Vs(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]t&&!e.hidden&&e._stacked&&{keys:Ts(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ws(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Os(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Bs(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Bs(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Bs(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function js(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;io)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for($s(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,Us=(t,e)=>Math.min(e||t,t);function Xs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Ks(t){return t.drawTicks?t.tickLength:0}function Gs(t,e){if(!t.display)return 0;const i=Si(t.font,e),s=ki(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function Zs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class Js extends Hs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Di(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=J(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ks(t.grid)-e.padding-Gs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(J((h.highest.height+6)/o,-1,1)),Math.asin(J(a/r,-1,1))-Math.asin(J(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Gs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ks(n)+o):(t.height=this.maxHeight,t.width=Ks(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:r[t]||0,height:l[t]||0});return{first:P(0),last:P(e-1),widest:P(k),highest:P(S),widths:r,heights:l}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Ae(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Ks(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(t){return Ae(i,t,p)};let x,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)x=b(this.bottom),w=this.bottom-u,S=x-m,D=b(t.top)+m,O=t.bottom;else if("bottom"===a)x=b(this.top),D=t.top,O=b(t.bottom)-m,w=x+m,S=this.top+u;else if("left"===a)x=b(this.right),M=this.right-u,k=x-m,P=b(t.left)+m,C=t.right;else if("right"===a)x=b(this.left),P=t.left,C=b(t.right)-m,M=x+m,k=this.left+u;else if("x"===e){if("center"===a)x=b((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=x+m,S=w+u}else if("y"===e){if("center"===a)x=b((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}M=x-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_0&&(o-=s/2)}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}b.push({label:v,font:P,textOffset:O,options:{rotation:m,color:i,strokeColor:o,strokeWidth:h,textAlign:f,textBaseline:A,translation:[M,w],backdrop:d}})}return b}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-$(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,l;return"left"===e?s?(l=this.right+n,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l+=a)):(l=this.right-o,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l=this.left)):"right"===e?s?(l=this.left+n,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l-=a)):(l=this.left+o,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l=this.right)):r="right",{textAlign:r,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class tn{constructor(){this.controllers=new Qs(Ns,"datasets",!0),this.elements=new Qs(Hs,"elements"),this.plugins=new Qs(Object,"plugins"),this.scales=new Qs(Js,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function nn(t,e){return e||!1!==t?!0===t?{}:t:null}function on(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function an(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function rn(t){if("x"===t||"y"===t||"r"===t)return t}function ln(t,...e){if(rn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&rn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function hn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function cn(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=an(t.type,e),a=Object.create(null);return Object.keys(s).forEach((e=>{const r=s[e];if(!o(r))return console.error(`Invalid scale configuration for scale: ${e}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const l=ln(e,r,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return hn(t,"x",i[0])||hn(t,"y",i[0])}return{}}(e,t),ue.scales[r.type]),h=function(t,e){return t===e?"_index_":"_value_"}(l,n),c=i.scales||{};a[e]=x(Object.create(null),[{axis:l},r,c[l],c[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||an(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),x(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];x(e,[ue.scales[e.type],ue.scale])})),a}function dn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=cn(t,e)}function un(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const fn=new Map,gn=new Set;function pn(t,e){let i=fn.get(t);return i||(i=e(),fn.set(t,i),gn.add(i)),i}const mn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class bn{constructor(t){this._config=function(t){return(t=t||{}).data=un(t.data),dn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=un(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),dn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return pn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return pn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return pn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return pn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>mn(r,t,e)))),e.forEach((t=>mn(r,s,t))),e.forEach((t=>mn(r,re[n]||{},t))),e.forEach((t=>mn(r,ue,t))),e.forEach((t=>mn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),gn.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=xn(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=Ye(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||_n(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=$e(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=xn(this._resolverCache,t,i);return o(e)?$e(n,e,void 0,s):n}}function xn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:je(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const _n=t=>o(t)&&Object.getOwnPropertyNames(t).some((e=>S(t[e])));const yn=["top","bottom","left","right","chartArea"];function vn(t,e){return"top"===t||"bottom"===t||-1===yn.indexOf(t)&&"x"===e}function Mn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function wn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function kn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function Sn(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Pn={},Dn=t=>{const e=Sn(t);return Object.values(Pn).filter((t=>t.canvas===e)).pop()};function Cn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}function On(t,e,i){return t.options.clip?t[i]:e[i]}class An{static defaults=ue;static instances=Pn;static overrides=re;static registry=en;static version="4.4.1";static getChart=Dn;static register(...t){en.add(...t),Tn()}static unregister(...t){en.remove(...t),Tn()}constructor(t,e){const s=this.config=new bn(e),n=Sn(t),o=Dn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||ks(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new sn,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],Pn[this.id]=this,r&&l?(xt.listen(this,"complete",wn),xt.listen(this,"progress",kn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return en}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Te(this.canvas,this.ctx),this}stop(){return xt.stop(this),this}resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=ln(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=ln(o,n),r=l(n.type,e.dtype);void 0!==n.position&&vn(n.position,a)===vn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(en.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{as.configure(this,t,t.options),as.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Mn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{as.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){Cn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;as.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t,e){const{xScale:i,yScale:s}=t;return i&&s?{left:On(i,e,"left"),right:On(i,e,"right"),top:On(s,e,"top"),bottom:On(s,e,"bottom")}:e}(t,this.chartArea),o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Ie(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&ze(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Re(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Xi.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ci(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function Tn(){return u(An.instances,(t=>t._plugins.invalidate()))}function Ln(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class En{static override(t){Object.assign(En.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return Ln()}parse(){return Ln()}format(){return Ln()}add(){return Ln()}diff(){return Ln()}startOf(){return Ln()}endOf(){return Ln()}}var Rn={_date:En};function In(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function Fn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;nZ(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Z(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),b=g(C,h,d),x=g(C+E,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var Yn=Object.freeze({__proto__:null,BarController:class extends Ns{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return Fn(t,e,i,s)}parseArrayData(t,e,i,s){return Fn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;dt.controller.options.grouped)),o=i.options.stacked,a=[],r=t=>{const i=t.controller.getParsed(e),n=i&&i[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!r(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(u,e,r)*a,f===r&&(b-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);b=Math.max(Math.min(b,h),o),d=b+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(b))}if(b===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;b+=t,u-=t}return{size:u,base:b,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,l="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=b?g:{};if(i=x){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),b||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PieController:class extends jn{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},PolarAreaController:$n,RadarController:class extends Ns{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let c=e;c0&&Math.abs(i[f]-_[f])>b,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),x||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Un(t,e,i,s){const n=vi(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return J(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:J(n.innerStart,0,a),innerEnd:J(n.innerEnd,0,a)}}function Xn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function qn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=Un(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,D=u+v,O=m+y/P,A=b-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=Xn(w,S,a,r);t.arc(e.x,e.y,_,S,b+E)}const i=Xn(D,b,a,r);if(t.lineTo(i.x,i.y),v>0){const e=Xn(D,A,a,r);t.arc(e.x,e.y,v,b+E,A+Math.PI)}const s=(b-v/u+(m+y/u))/2;if(t.arc(a,r,u,b-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=Xn(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=Xn(M,m,a,r);if(t.lineTo(n.x,n.y),x>0){const e=Xn(M,k,a,r);t.arc(e.x,e.y,x,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function Kn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c,borderDash:d,borderDashOffset:u}=l,f="inner"===l.borderAlign;if(!h)return;t.setLineDash(d||[]),t.lineDashOffset=u,f?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let g=e.endAngle;if(o){qn(t,e,i,s,g,n);for(let e=0;en?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,g),o||(qn(t,e,i,s,g,n),t.stroke())}function Gn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function Zn(t,e,i){t.lineTo(i.x,i.y)}function Jn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=nr&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function eo(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?to:Qn}const io="function"==typeof Path2D;function so(t,e,i,s){io&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Gn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=eo(e);for(const r of n)Gn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class no extends Hs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;hi(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=zi(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ii(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?pi:t.tension||"monotone"===t.cubicInterpolationMode?mi:gi}(i);let l,h;for(l=0,h=o.length;l"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=X(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),u=(this.options.spacing+this.options.borderWidth)/2,f=l(d,r-a)>=O||Z(n,a,r),g=tt(o,h+u,c+u);return f&&g}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){qn(t,e,i,s,l,n);for(let e=0;e("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function po(t){const e=this.getLabels();return t>=0&&ts=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,b=!s(a),x=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!b&&!x)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),b&&x&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=b?a:M,w=x?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(b&&(u&&M!==a?(i.push({value:a}),Mr)break;i.push({value:t})}return x&&u&&w!==r?i.length&&V(i[i.length-1].value,r,mo(r,y,t))?i[i.length-1].value=r:i.push({value:r}):x&&w!==r||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&j(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return ne(t,this.chart.options.locale,this.options.ticks.format)}}class xo extends bo{static id="linear";static defaults={ticks:{callback:ae.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?t:0,this.max=a(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=$(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}const _o=t=>Math.floor(z(t)),yo=(t,e)=>Math.pow(10,_o(t)+e);function vo(t){return 1===t/Math.pow(10,_o(t))}function Mo(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function wo(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=_o(e);let o=function(t,e){let i=_o(e-t);for(;Mo(t,e,i)>10;)i++;for(;Mo(t,e,i)<10;)i--;return Math.min(i,_o(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:vo(g),significand:u}),s}class ko extends Js{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=bo.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===yo(this.min,0)?yo(this.min,-1):yo(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(yo(i,-1)),o(yo(s,1)))),i<=0&&n(yo(s,-1)),s<=0&&o(yo(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=wo({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function So(t){const e=t.ticks;if(e.display&&t.display){const t=ki(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function Po(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function Do(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;ue.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Oo(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=i,l=t.getPointPosition(e,s+n+a,o),h=Math.round(Y(G(l.angle+E))),c=function(t,e,i){90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e);return t}(l.y,r.h,h),d=function(t){if(0===t||180===t)return"center";if(t<180)return"left";return"right"}(h),u=function(t,e,i){"right"===i?t-=e:"center"===i&&(t-=e/2);return t}(l.x,r.w,d);return{visible:!0,x:l.x,y:c,textAlign:d,left:u,top:c,right:u+r.w,bottom:c+r.h}}function Ao(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;return!(Re({x:i,y:s},e)||Re({x:i,y:o},e)||Re({x:n,y:s},e)||Re({x:n,y:o},e))}function To(t,e,i){const{left:n,top:o,right:a,bottom:r}=i,{backdropColor:l}=e;if(!s(l)){const i=wi(e.borderRadius),s=ki(e.backdropPadding);t.fillStyle=l;const h=n-s.left,c=o-s.top,d=a-n+s.width,u=r-o+s.height;Object.values(i).some((t=>0!==t))?(t.beginPath(),He(t,{x:h,y:c,w:d,h:u,radius:i}),t.fill()):t.fillRect(h,c,d,u)}}function Lo(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=ki(So(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/So(this.options))}generateTickLabels(t){bo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?Do(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;n--){const e=t._pointLabelItems[n];if(!e.visible)continue;const o=s.setContext(t.getPointLabelContext(n));To(i,o,e);const a=Si(o.font),{x:r,y:l,textAlign:h}=e;Ne(i,t._pointLabels[n],r,l+a.lineHeight/2,a,{color:o.color,textAlign:h,textBaseline:"middle"})}}(this,o),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){r=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),a=s.setContext(i),l=n.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash),o.lineDashOffset=n.dashOffset,o.beginPath(),Lo(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,a,r,o,l)}})),i.display){for(t.save(),a=o-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=Si(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=ki(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}Ne(t,s.label,0,-n,l,{color:r.color,strokeColor:r.textStrokeColor,strokeWidth:r.textStrokeWidth})})),t.restore()}drawTitle(){}}const Ro={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Io=Object.keys(Ro);function zo(t,e){return t-e}function Fo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!N(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function Vo(t,e,i,s){const n=Io.length;for(let o=Io.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function Wo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class No extends Js{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new Rn._date(t.adapters.date);s.init(e),x(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Fo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?Vo(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=Io.length-1;o>=Io.indexOf(i);o--){const i=Io[o];if(Ro[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return Io[i?Io.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=Io.indexOf(t)+1,i=Io.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=J(s,0,o),n=J(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||Vo(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=N(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;d+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var jo=Object.freeze({__proto__:null,CategoryScale:class extends Js{static id="category";static defaults={ticks:{callback:po}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:J(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:go(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return po.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:xo,LogarithmicScale:ko,RadialLinearScale:Eo,TimeScale:No,TimeSeriesScale:class extends No{static id="timeseries";static defaults=No.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Ho(e,this.min),this._tableRange=Ho(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;ot-e))}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(Ho(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return Ho(this._table,i*this._tableRange+this._minPos,!0)}}});const $o=["rgb(54, 162, 235)","rgb(255, 99, 132)","rgb(255, 159, 64)","rgb(255, 205, 86)","rgb(75, 192, 192)","rgb(153, 102, 255)","rgb(201, 203, 207)"],Yo=$o.map((t=>t.replace("rgb(","rgba(").replace(")",", 0.5)")));function Uo(t){return $o[t%$o.length]}function Xo(t){return Yo[t%Yo.length]}function qo(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof jn?e=function(t,e){return t.backgroundColor=t.data.map((()=>Uo(e++))),e}(i,e):n instanceof $n?e=function(t,e){return t.backgroundColor=t.data.map((()=>Xo(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Uo(e),t.backgroundColor=Xo(e),++e}(i,e))}}function Ko(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var Go={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n;if(!i.forceOverride&&(Ko(s)||(a=n)&&(a.borderColor||a.backgroundColor)||o&&Ko(o)))return;var a;const r=qo(t);s.forEach(r)}};function Zo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Jo(t){t.data.datasets.forEach((t=>{Zo(t)}))}var Qo={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Jo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===Pi([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=J(it(e,o.axis,a).lo,0,i-1)),s=h?J(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void Zo(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const b=[],x=e+i-1,_=t[e].x,y=t[x].x-_;for(o=e;og&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&b.push({...t[e],x:p}),s!==u&&s!==i&&b.push({...t[s],x:p})}o>0&&i!==u&&b.push(t[i]),b.push(a),h=e,m=0,f=g=l,c=d=u=o}}return b}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){Jo(t)}};function ta(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function ea(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function ia(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function sa(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=ea(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new no({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function na(t){return t&&!1!==t.fill}function oa(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function aa(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function ra(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&da(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;na(i)&&da(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;na(s)&&"beforeDatasetDraw"===i.drawTime&&da(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const ba=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class xa extends Hs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Si(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=ba(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=_a(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Oi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Ie(t,this),this._draw(),ze(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Oi(t.rtl,this.left,this.width),h=Si(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=ba(o,d),b=this.isHorizontal(),x=this._computeTitleHeight();f=b?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+x,line:0}:{x:this.left+c,y:ft(n,this.top+x+c,this.bottom-e[0].height),line:0},Ai(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),b?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+x+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Ee(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=wi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?He(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,b?S+k:this.right,t.rtl),function(t,e,i){Ne(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),b)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=_a(y,t)+c}else f.y+=_})),Ti(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Si(e.font),s=ki(e.padding);if(!e.display)return;const n=Oi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,Ne(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=Si(t.font),i=ki(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=ki(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class va extends Hs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=ki(i.padding);const o=s*Si(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Si(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);Ne(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var Ma={id:"title",_element:va,start(t,e,i){!function(t,e){const i=new va({ctx:t.ctx,options:e,chart:t});as.configure(t,i,e),as.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;as.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;as.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const wa=new WeakMap;var ka={id:"subtitle",start(t,e,i){const s=new va({ctx:t.ctx,options:i,chart:t});as.configure(t,s,i),as.addBox(t,s),wa.set(t,s)},stop(t){as.removeBox(t,wa.get(t)),wa.delete(t)},beforeUpdate(t,e,i){const s=wa.get(t);as.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Sa={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function Ca(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Oa(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=Si(e.bodyFont),h=Si(e.titleFont),c=Si(e.footerFont),d=o.length,f=n.length,g=s.length,p=ki(e.padding);let m=p.height,b=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-g)*l.lineHeight+(x-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){b=Math.max(b,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),b+=p.width,{width:b,height:m}}function Aa(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Ta(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Aa(t,e,i,s),yAlign:s}}function La(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=wi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:J(g,0,s.width-e.width),y:J(p,0,s.height-e.height)}}function Ea(t,e,i){const s=ki(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Ra(t){return Pa([],Da(t))}function Ia(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const za={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=Ia(i,t);Pa(e.before,Da(Fa(n,"beforeLabel",this,t))),Pa(e.lines,Fa(n,"label",this,t)),Pa(e.after,Da(Fa(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return Ra(Fa(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Fa(i,"beforeFooter",this,t),n=Fa(i,"footer",this,t),o=Fa(i,"afterFooter",this,t);let a=[];return a=Pa(a,Da(s)),a=Pa(a,Da(n)),a=Pa(a,Da(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Ia(t.callbacks,e);s.push(Fa(i,"labelColor",this,e)),n.push(Fa(i,"labelPointStyle",this,e)),o.push(Fa(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Sa[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Oa(this,i),a=Object.assign({},t,e),r=Ta(this.chart,i,a),l=La(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=wi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Oi(i.rtl,this.x,this.width);for(t.x=Ea(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=Si(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,He(t,{x:e,y:g,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),He(t,{x:i,y:g+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,h,l),t.strokeRect(e,g,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=Si(i.bodyFont);let d=c.lineHeight,f=0;const g=Oi(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let b,x,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Ea(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Sa[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Oa(this,t),a=Object.assign({},i,this._size),r=Ta(e,t,a),l=La(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=ki(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ai(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Ti(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e.filter((t=>this.chart.data.datasets[t.datasetIndex]&&void 0!==this.chart.getDatasetMeta(t.datasetIndex).controller.getParsed(t.index)));const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Sa[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Ba={id:"tooltip",_element:Va,positioners:Sa,afterInit(t,e,i){i&&(t.tooltip=new Va({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:za},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return An.register(Yn,jo,fo,t),An.helpers={...Wi},An._adapters=Rn,An.Animation=Cs,An.Animations=Os,An.animator=xt,An.controllers=en.controllers.items,An.DatasetController=Ns,An.Element=Hs,An.elements=fo,An.Interaction=Xi,An.layouts=as,An.platforms=Ss,An.Scale=Js,An.Ticks=ae,Object.assign(An,Yn,jo,fo,t,Ss),An.Chart=An,"undefined"!=typeof window&&(window.Chart=An),An})); +//# sourceMappingURL=chart.umd.js.map diff --git a/web/js/vendor/chartjs-adapter-date-fns.bundle.js b/web/js/vendor/chartjs-adapter-date-fns.bundle.js new file mode 100644 index 0000000..39c150e --- /dev/null +++ b/web/js/vendor/chartjs-adapter-date-fns.bundle.js @@ -0,0 +1,6322 @@ +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('chart.js')) : +typeof define === 'function' && define.amd ? define(['chart.js'], factory) : +(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Chart)); +})(this, (function (chart_js) { 'use strict'; + +function toInteger(dirtyNumber) { + if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { + return NaN; + } + + var number = Number(dirtyNumber); + + if (isNaN(number)) { + return number; + } + + return number < 0 ? Math.ceil(number) : Math.floor(number); +} + +function requiredArgs(required, args) { + if (args.length < required) { + throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present'); + } +} + +/** + * @name toDate + * @category Common Helpers + * @summary Convert the given argument to an instance of Date. + * + * @description + * Convert the given argument to an instance of Date. + * + * If the argument is an instance of Date, the function returns its clone. + * + * If the argument is a number, it is treated as a timestamp. + * + * If the argument is none of the above, the function returns Invalid Date. + * + * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. + * + * @param {Date|Number} argument - the value to convert + * @returns {Date} the parsed date in the local time zone + * @throws {TypeError} 1 argument required + * + * @example + * // Clone the date: + * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) + * //=> Tue Feb 11 2014 11:30:30 + * + * @example + * // Convert the timestamp to date: + * const result = toDate(1392098430000) + * //=> Tue Feb 11 2014 11:30:30 + */ + +function toDate(argument) { + requiredArgs(1, arguments); + var argStr = Object.prototype.toString.call(argument); // Clone the date + + if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') { + // Prevent the date to lose the milliseconds when passed to new Date() in IE10 + return new Date(argument.getTime()); + } else if (typeof argument === 'number' || argStr === '[object Number]') { + return new Date(argument); + } else { + if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') { + // eslint-disable-next-line no-console + console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"); // eslint-disable-next-line no-console + + console.warn(new Error().stack); + } + + return new Date(NaN); + } +} + +/** + * @name addDays + * @category Day Helpers + * @summary Add the specified number of days to the given date. + * + * @description + * Add the specified number of days to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the days added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 10 days to 1 September 2014: + * const result = addDays(new Date(2014, 8, 1), 10) + * //=> Thu Sep 11 2014 00:00:00 + */ + +function addDays(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var amount = toInteger(dirtyAmount); + + if (isNaN(amount)) { + return new Date(NaN); + } + + if (!amount) { + // If 0 days, no-op to avoid changing times in the hour before end of DST + return date; + } + + date.setDate(date.getDate() + amount); + return date; +} + +/** + * @name addMonths + * @category Month Helpers + * @summary Add the specified number of months to the given date. + * + * @description + * Add the specified number of months to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the months added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 5 months to 1 September 2014: + * const result = addMonths(new Date(2014, 8, 1), 5) + * //=> Sun Feb 01 2015 00:00:00 + */ + +function addMonths(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var amount = toInteger(dirtyAmount); + + if (isNaN(amount)) { + return new Date(NaN); + } + + if (!amount) { + // If 0 months, no-op to avoid changing times in the hour before end of DST + return date; + } + + var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for + // month, day, etc. For example, new Date(2020, 1, 0) returns 31 Dec 2019 and + // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we + // want except that dates will wrap around the end of a month, meaning that + // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So + // we'll default to the end of the desired month by adding 1 to the desired + // month and using a date of 0 to back up one day to the end of the desired + // month. + + var endOfDesiredMonth = new Date(date.getTime()); + endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0); + var daysInMonth = endOfDesiredMonth.getDate(); + + if (dayOfMonth >= daysInMonth) { + // If we're already at the end of the month, then this is the correct date + // and we're done. + return endOfDesiredMonth; + } else { + // Otherwise, we now know that setting the original day-of-month value won't + // cause an overflow, so set the desired day-of-month. Note that we can't + // just set the date of `endOfDesiredMonth` because that object may have had + // its time changed in the unusual case where where a DST transition was on + // the last day of the month and its local time was in the hour skipped or + // repeated next to a DST transition. So we use `date` instead which is + // guaranteed to still have the original time. + date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth); + return date; + } +} + +/** + * @name addMilliseconds + * @category Millisecond Helpers + * @summary Add the specified number of milliseconds to the given date. + * + * @description + * Add the specified number of milliseconds to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the milliseconds added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 750 milliseconds to 10 July 2014 12:45:30.000: + * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) + * //=> Thu Jul 10 2014 12:45:30.750 + */ + +function addMilliseconds(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var timestamp = toDate(dirtyDate).getTime(); + var amount = toInteger(dirtyAmount); + return new Date(timestamp + amount); +} + +var MILLISECONDS_IN_HOUR$3 = 3600000; +/** + * @name addHours + * @category Hour Helpers + * @summary Add the specified number of hours to the given date. + * + * @description + * Add the specified number of hours to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the hours added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 2 hours to 10 July 2014 23:00:00: + * const result = addHours(new Date(2014, 6, 10, 23, 0), 2) + * //=> Fri Jul 11 2014 01:00:00 + */ + +function addHours(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR$3); +} + +/** + * @name startOfWeek + * @category Week Helpers + * @summary Return the start of a week for the given date. + * + * @description + * Return the start of a week for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @param {Object} [options] - an object with options. + * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale} + * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) + * @returns {Date} the start of a week + * @throws {TypeError} 1 argument required + * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 + * + * @example + * // The start of a week for 2 September 2014 11:55:00: + * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Sun Aug 31 2014 00:00:00 + * + * @example + * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00: + * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) + * //=> Mon Sep 01 2014 00:00:00 + */ + +function startOfWeek(dirtyDate, dirtyOptions) { + requiredArgs(1, arguments); + var options = dirtyOptions || {}; + var locale = options.locale; + var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn; + var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn); + var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN + + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); + } + + var date = toDate(dirtyDate); + var day = date.getDay(); + var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + date.setDate(date.getDate() - diff); + date.setHours(0, 0, 0, 0); + return date; +} + +/** + * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds. + * They usually appear for dates that denote time before the timezones were introduced + * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891 + * and GMT+01:00:00 after that date) + * + * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above, + * which would lead to incorrect calculations. + * + * This function returns the timezone offset in milliseconds that takes seconds in account. + */ +function getTimezoneOffsetInMilliseconds(date) { + var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())); + utcDate.setUTCFullYear(date.getFullYear()); + return date.getTime() - utcDate.getTime(); +} + +/** + * @name startOfDay + * @category Day Helpers + * @summary Return the start of a day for the given date. + * + * @description + * Return the start of a day for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the start of a day + * @throws {TypeError} 1 argument required + * + * @example + * // The start of a day for 2 September 2014 11:55:00: + * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 02 2014 00:00:00 + */ + +function startOfDay(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setHours(0, 0, 0, 0); + return date; +} + +var MILLISECONDS_IN_DAY$1 = 86400000; +/** + * @name differenceInCalendarDays + * @category Day Helpers + * @summary Get the number of calendar days between the given dates. + * + * @description + * Get the number of calendar days between the given dates. This means that the times are removed + * from the dates and then the difference in days is calculated. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of calendar days + * @throws {TypeError} 2 arguments required + * + * @example + * // How many calendar days are between + * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00? + * var result = differenceInCalendarDays( + * new Date(2012, 6, 2, 0, 0), + * new Date(2011, 6, 2, 23, 0) + * ) + * //=> 366 + * // How many calendar days are between + * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00? + * var result = differenceInCalendarDays( + * new Date(2011, 6, 3, 0, 1), + * new Date(2011, 6, 2, 23, 59) + * ) + * //=> 1 + */ + +function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var startOfDayLeft = startOfDay(dirtyDateLeft); + var startOfDayRight = startOfDay(dirtyDateRight); + var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft); + var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer + // because the number of milliseconds in a day is not constant + // (e.g. it's different in the day of the daylight saving time clock shift) + + return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY$1); +} + +var MILLISECONDS_IN_MINUTE$3 = 60000; +/** + * @name addMinutes + * @category Minute Helpers + * @summary Add the specified number of minutes to the given date. + * + * @description + * Add the specified number of minutes to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the minutes added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 30 minutes to 10 July 2014 12:00:00: + * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30) + * //=> Thu Jul 10 2014 12:30:00 + */ + +function addMinutes(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE$3); +} + +/** + * @name addQuarters + * @category Quarter Helpers + * @summary Add the specified number of year quarters to the given date. + * + * @description + * Add the specified number of year quarters to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the quarters added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 1 quarter to 1 September 2014: + * const result = addQuarters(new Date(2014, 8, 1), 1) + * //=> Mon Dec 01 2014 00:00:00 + */ + +function addQuarters(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + var months = amount * 3; + return addMonths(dirtyDate, months); +} + +/** + * @name addSeconds + * @category Second Helpers + * @summary Add the specified number of seconds to the given date. + * + * @description + * Add the specified number of seconds to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the seconds added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 30 seconds to 10 July 2014 12:45:00: + * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30) + * //=> Thu Jul 10 2014 12:45:30 + */ + +function addSeconds(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + return addMilliseconds(dirtyDate, amount * 1000); +} + +/** + * @name addWeeks + * @category Week Helpers + * @summary Add the specified number of weeks to the given date. + * + * @description + * Add the specified number of week to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the weeks added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 4 weeks to 1 September 2014: + * const result = addWeeks(new Date(2014, 8, 1), 4) + * //=> Mon Sep 29 2014 00:00:00 + */ + +function addWeeks(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + var days = amount * 7; + return addDays(dirtyDate, days); +} + +/** + * @name addYears + * @category Year Helpers + * @summary Add the specified number of years to the given date. + * + * @description + * Add the specified number of years to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the years added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 5 years to 1 September 2014: + * const result = addYears(new Date(2014, 8, 1), 5) + * //=> Sun Sep 01 2019 00:00:00 + */ + +function addYears(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + return addMonths(dirtyDate, amount * 12); +} + +/** + * @name compareAsc + * @category Common Helpers + * @summary Compare the two dates and return -1, 0 or 1. + * + * @description + * Compare the two dates and return 1 if the first date is after the second, + * -1 if the first date is before the second or 0 if dates are equal. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the first date to compare + * @param {Date|Number} dateRight - the second date to compare + * @returns {Number} the result of the comparison + * @throws {TypeError} 2 arguments required + * + * @example + * // Compare 11 February 1987 and 10 July 1989: + * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10)) + * //=> -1 + * + * @example + * // Sort the array of dates: + * const result = [ + * new Date(1995, 6, 2), + * new Date(1987, 1, 11), + * new Date(1989, 6, 10) + * ].sort(compareAsc) + * //=> [ + * // Wed Feb 11 1987 00:00:00, + * // Mon Jul 10 1989 00:00:00, + * // Sun Jul 02 1995 00:00:00 + * // ] + */ + +function compareAsc(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + var diff = dateLeft.getTime() - dateRight.getTime(); + + if (diff < 0) { + return -1; + } else if (diff > 0) { + return 1; // Return 0 if diff is 0; return NaN if diff is NaN + } else { + return diff; + } +} + +/** + * @name isValid + * @category Common Helpers + * @summary Is the given date valid? + * + * @description + * Returns false if argument is Invalid Date and true otherwise. + * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate} + * Invalid Date is a Date, whose time value is NaN. + * + * Time value of Date: http://es5.github.io/#x15.9.1.1 + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * - Now `isValid` doesn't throw an exception + * if the first argument is not an instance of Date. + * Instead, argument is converted beforehand using `toDate`. + * + * Examples: + * + * | `isValid` argument | Before v2.0.0 | v2.0.0 onward | + * |---------------------------|---------------|---------------| + * | `new Date()` | `true` | `true` | + * | `new Date('2016-01-01')` | `true` | `true` | + * | `new Date('')` | `false` | `false` | + * | `new Date(1488370835081)` | `true` | `true` | + * | `new Date(NaN)` | `false` | `false` | + * | `'2016-01-01'` | `TypeError` | `false` | + * | `''` | `TypeError` | `false` | + * | `1488370835081` | `TypeError` | `true` | + * | `NaN` | `TypeError` | `false` | + * + * We introduce this change to make *date-fns* consistent with ECMAScript behavior + * that try to coerce arguments to the expected type + * (which is also the case with other *date-fns* functions). + * + * @param {*} date - the date to check + * @returns {Boolean} the date is valid + * @throws {TypeError} 1 argument required + * + * @example + * // For the valid date: + * var result = isValid(new Date(2014, 1, 31)) + * //=> true + * + * @example + * // For the value, convertable into a date: + * var result = isValid(1393804800000) + * //=> true + * + * @example + * // For the invalid date: + * var result = isValid(new Date('')) + * //=> false + */ + +function isValid(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + return !isNaN(date); +} + +/** + * @name differenceInCalendarMonths + * @category Month Helpers + * @summary Get the number of calendar months between the given dates. + * + * @description + * Get the number of calendar months between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of calendar months + * @throws {TypeError} 2 arguments required + * + * @example + * // How many calendar months are between 31 January 2014 and 1 September 2014? + * var result = differenceInCalendarMonths( + * new Date(2014, 8, 1), + * new Date(2014, 0, 31) + * ) + * //=> 8 + */ + +function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear(); + var monthDiff = dateLeft.getMonth() - dateRight.getMonth(); + return yearDiff * 12 + monthDiff; +} + +/** + * @name differenceInCalendarYears + * @category Year Helpers + * @summary Get the number of calendar years between the given dates. + * + * @description + * Get the number of calendar years between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of calendar years + * @throws {TypeError} 2 arguments required + * + * @example + * // How many calendar years are between 31 December 2013 and 11 February 2015? + * var result = differenceInCalendarYears( + * new Date(2015, 1, 11), + * new Date(2013, 11, 31) + * ) + * //=> 2 + */ + +function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + return dateLeft.getFullYear() - dateRight.getFullYear(); +} + +// for accurate equality comparisons of UTC timestamps that end up +// having the same representation in local time, e.g. one hour before +// DST ends vs. the instant that DST ends. + +function compareLocalAsc(dateLeft, dateRight) { + var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds(); + + if (diff < 0) { + return -1; + } else if (diff > 0) { + return 1; // Return 0 if diff is 0; return NaN if diff is NaN + } else { + return diff; + } +} +/** + * @name differenceInDays + * @category Day Helpers + * @summary Get the number of full days between the given dates. + * + * @description + * Get the number of full day periods between two dates. Fractional days are + * truncated towards zero. + * + * One "full day" is the distance between a local time in one day to the same + * local time on the next or previous day. A full day can sometimes be less than + * or more than 24 hours if a daylight savings change happens between two dates. + * + * To ignore DST and only measure exact 24-hour periods, use this instead: + * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`. + * + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of full days according to the local timezone + * @throws {TypeError} 2 arguments required + * + * @example + * // How many full days are between + * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00? + * var result = differenceInDays( + * new Date(2012, 6, 2, 0, 0), + * new Date(2011, 6, 2, 23, 0) + * ) + * //=> 365 + * // How many full days are between + * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00? + * var result = differenceInDays( + * new Date(2011, 6, 3, 0, 1), + * new Date(2011, 6, 2, 23, 59) + * ) + * //=> 0 + * // How many full days are between + * // 1 March 2020 0:00 and 1 June 2020 0:00 ? + * // Note: because local time is used, the + * // result will always be 92 days, even in + * // time zones where DST starts and the + * // period has only 92*24-1 hours. + * var result = differenceInDays( + * new Date(2020, 5, 1), + * new Date(2020, 2, 1) + * ) +//=> 92 + */ + + +function differenceInDays(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + var sign = compareLocalAsc(dateLeft, dateRight); + var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight)); + dateLeft.setDate(dateLeft.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full + // If so, result must be decreased by 1 in absolute value + + var isLastDayNotFull = compareLocalAsc(dateLeft, dateRight) === -sign; + var result = sign * (difference - isLastDayNotFull); // Prevent negative zero + + return result === 0 ? 0 : result; +} + +/** + * @name differenceInMilliseconds + * @category Millisecond Helpers + * @summary Get the number of milliseconds between the given dates. + * + * @description + * Get the number of milliseconds between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of milliseconds + * @throws {TypeError} 2 arguments required + * + * @example + * // How many milliseconds are between + * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700? + * var result = differenceInMilliseconds( + * new Date(2014, 6, 2, 12, 30, 21, 700), + * new Date(2014, 6, 2, 12, 30, 20, 600) + * ) + * //=> 1100 + */ + +function differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + return dateLeft.getTime() - dateRight.getTime(); +} + +var MILLISECONDS_IN_HOUR$2 = 3600000; +/** + * @name differenceInHours + * @category Hour Helpers + * @summary Get the number of hours between the given dates. + * + * @description + * Get the number of hours between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of hours + * @throws {TypeError} 2 arguments required + * + * @example + * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00? + * var result = differenceInHours( + * new Date(2014, 6, 2, 19, 0), + * new Date(2014, 6, 2, 6, 50) + * ) + * //=> 12 + */ + +function differenceInHours(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_HOUR$2; + return diff > 0 ? Math.floor(diff) : Math.ceil(diff); +} + +var MILLISECONDS_IN_MINUTE$2 = 60000; +/** + * @name differenceInMinutes + * @category Minute Helpers + * @summary Get the number of minutes between the given dates. + * + * @description + * Get the signed number of full (rounded towards 0) minutes between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of minutes + * @throws {TypeError} 2 arguments required + * + * @example + * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00? + * var result = differenceInMinutes( + * new Date(2014, 6, 2, 12, 20, 0), + * new Date(2014, 6, 2, 12, 7, 59) + * ) + * //=> 12 + * + * @example + * // How many minutes are from 10:01:59 to 10:00:00 + * var result = differenceInMinutes( + * new Date(2000, 0, 1, 10, 0, 0), + * new Date(2000, 0, 1, 10, 1, 59) + * ) + * //=> -1 + */ + +function differenceInMinutes(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_MINUTE$2; + return diff > 0 ? Math.floor(diff) : Math.ceil(diff); +} + +/** + * @name endOfDay + * @category Day Helpers + * @summary Return the end of a day for the given date. + * + * @description + * Return the end of a day for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the end of a day + * @throws {TypeError} 1 argument required + * + * @example + * // The end of a day for 2 September 2014 11:55:00: + * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 02 2014 23:59:59.999 + */ + +function endOfDay(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setHours(23, 59, 59, 999); + return date; +} + +/** + * @name endOfMonth + * @category Month Helpers + * @summary Return the end of a month for the given date. + * + * @description + * Return the end of a month for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the end of a month + * @throws {TypeError} 1 argument required + * + * @example + * // The end of a month for 2 September 2014 11:55:00: + * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 30 2014 23:59:59.999 + */ + +function endOfMonth(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var month = date.getMonth(); + date.setFullYear(date.getFullYear(), month + 1, 0); + date.setHours(23, 59, 59, 999); + return date; +} + +/** + * @name isLastDayOfMonth + * @category Month Helpers + * @summary Is the given date the last day of a month? + * + * @description + * Is the given date the last day of a month? + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to check + * @returns {Boolean} the date is the last day of a month + * @throws {TypeError} 1 argument required + * + * @example + * // Is 28 February 2014 the last day of a month? + * var result = isLastDayOfMonth(new Date(2014, 1, 28)) + * //=> true + */ + +function isLastDayOfMonth(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + return endOfDay(date).getTime() === endOfMonth(date).getTime(); +} + +/** + * @name differenceInMonths + * @category Month Helpers + * @summary Get the number of full months between the given dates. + * + * @description + * Get the number of full months between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of full months + * @throws {TypeError} 2 arguments required + * + * @example + * // How many full months are between 31 January 2014 and 1 September 2014? + * var result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31)) + * //=> 7 + */ + +function differenceInMonths(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + var sign = compareAsc(dateLeft, dateRight); + var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight)); + var result; // Check for the difference of less than month + + if (difference < 1) { + result = 0; + } else { + if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) { + // This will check if the date is end of Feb and assign a higher end of month date + // to compare it with Jan + dateLeft.setDate(30); + } + + dateLeft.setMonth(dateLeft.getMonth() - sign * difference); // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full + // If so, result must be decreased by 1 in absolute value + + var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; // Check for cases of one full calendar month + + if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) { + isLastMonthNotFull = false; + } + + result = sign * (difference - isLastMonthNotFull); + } // Prevent negative zero + + + return result === 0 ? 0 : result; +} + +/** + * @name differenceInQuarters + * @category Quarter Helpers + * @summary Get the number of full quarters between the given dates. + * + * @description + * Get the number of full quarters between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of full quarters + * @throws {TypeError} 2 arguments required + * + * @example + * // How many full quarters are between 31 December 2013 and 2 July 2014? + * var result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31)) + * //=> 2 + */ + +function differenceInQuarters(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var diff = differenceInMonths(dirtyDateLeft, dirtyDateRight) / 3; + return diff > 0 ? Math.floor(diff) : Math.ceil(diff); +} + +/** + * @name differenceInSeconds + * @category Second Helpers + * @summary Get the number of seconds between the given dates. + * + * @description + * Get the number of seconds between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of seconds + * @throws {TypeError} 2 arguments required + * + * @example + * // How many seconds are between + * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000? + * var result = differenceInSeconds( + * new Date(2014, 6, 2, 12, 30, 20, 0), + * new Date(2014, 6, 2, 12, 30, 7, 999) + * ) + * //=> 12 + */ + +function differenceInSeconds(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000; + return diff > 0 ? Math.floor(diff) : Math.ceil(diff); +} + +/** + * @name differenceInWeeks + * @category Week Helpers + * @summary Get the number of full weeks between the given dates. + * + * @description + * Get the number of full weeks between two dates. Fractional weeks are + * truncated towards zero. + * + * One "full week" is the distance between a local time in one day to the same + * local time 7 days earlier or later. A full week can sometimes be less than + * or more than 7*24 hours if a daylight savings change happens between two dates. + * + * To ignore DST and only measure exact 7*24-hour periods, use this instead: + * `Math.floor(differenceInHours(dateLeft, dateRight)/(7*24))|0`. + * + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of full weeks + * @throws {TypeError} 2 arguments required + * + * @example + * // How many full weeks are between 5 July 2014 and 20 July 2014? + * var result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5)) + * //=> 2 + * + * // How many full weeks are between + * // 1 March 2020 0:00 and 6 June 2020 0:00 ? + * // Note: because local time is used, the + * // result will always be 8 weeks (54 days), + * // even if DST starts and the period has + * // only 54*24-1 hours. + * var result = differenceInWeeks( + * new Date(2020, 5, 1), + * new Date(2020, 2, 6) + * ) + * //=> 8 + */ + +function differenceInWeeks(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var diff = differenceInDays(dirtyDateLeft, dirtyDateRight) / 7; + return diff > 0 ? Math.floor(diff) : Math.ceil(diff); +} + +/** + * @name differenceInYears + * @category Year Helpers + * @summary Get the number of full years between the given dates. + * + * @description + * Get the number of full years between the given dates. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} dateLeft - the later date + * @param {Date|Number} dateRight - the earlier date + * @returns {Number} the number of full years + * @throws {TypeError} 2 arguments required + * + * @example + * // How many full years are between 31 December 2013 and 11 February 2015? + * var result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31)) + * //=> 1 + */ + +function differenceInYears(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + var sign = compareAsc(dateLeft, dateRight); + var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight)); // Set both dates to a valid leap year for accurate comparison when dealing + // with leap days + + dateLeft.setFullYear('1584'); + dateRight.setFullYear('1584'); // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full + // If so, result must be decreased by 1 in absolute value + + var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign; + var result = sign * (difference - isLastYearNotFull); // Prevent negative zero + + return result === 0 ? 0 : result; +} + +/** + * @name startOfQuarter + * @category Quarter Helpers + * @summary Return the start of a year quarter for the given date. + * + * @description + * Return the start of a year quarter for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the start of a quarter + * @throws {TypeError} 1 argument required + * + * @example + * // The start of a quarter for 2 September 2014 11:55:00: + * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Jul 01 2014 00:00:00 + */ + +function startOfQuarter(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var currentMonth = date.getMonth(); + var month = currentMonth - currentMonth % 3; + date.setMonth(month, 1); + date.setHours(0, 0, 0, 0); + return date; +} + +/** + * @name startOfMonth + * @category Month Helpers + * @summary Return the start of a month for the given date. + * + * @description + * Return the start of a month for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the start of a month + * @throws {TypeError} 1 argument required + * + * @example + * // The start of a month for 2 September 2014 11:55:00: + * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Mon Sep 01 2014 00:00:00 + */ + +function startOfMonth(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setDate(1); + date.setHours(0, 0, 0, 0); + return date; +} + +/** + * @name startOfYear + * @category Year Helpers + * @summary Return the start of a year for the given date. + * + * @description + * Return the start of a year for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the start of a year + * @throws {TypeError} 1 argument required + * + * @example + * // The start of a year for 2 September 2014 11:55:00: + * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00)) + * //=> Wed Jan 01 2014 00:00:00 + */ + +function startOfYear(dirtyDate) { + requiredArgs(1, arguments); + var cleanDate = toDate(dirtyDate); + var date = new Date(0); + date.setFullYear(cleanDate.getFullYear(), 0, 1); + date.setHours(0, 0, 0, 0); + return date; +} + +/** + * @name endOfYear + * @category Year Helpers + * @summary Return the end of a year for the given date. + * + * @description + * Return the end of a year for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the end of a year + * @throws {TypeError} 1 argument required + * + * @example + * // The end of a year for 2 September 2014 11:55:00: + * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00)) + * //=> Wed Dec 31 2014 23:59:59.999 + */ + +function endOfYear(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var year = date.getFullYear(); + date.setFullYear(year + 1, 0, 0); + date.setHours(23, 59, 59, 999); + return date; +} + +/** + * @name endOfHour + * @category Hour Helpers + * @summary Return the end of an hour for the given date. + * + * @description + * Return the end of an hour for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the end of an hour + * @throws {TypeError} 1 argument required + * + * @example + * // The end of an hour for 2 September 2014 11:55:00: + * const result = endOfHour(new Date(2014, 8, 2, 11, 55)) + * //=> Tue Sep 02 2014 11:59:59.999 + */ + +function endOfHour(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setMinutes(59, 59, 999); + return date; +} + +/** + * @name endOfWeek + * @category Week Helpers + * @summary Return the end of a week for the given date. + * + * @description + * Return the end of a week for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @param {Object} [options] - an object with options. + * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale} + * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) + * @returns {Date} the end of a week + * @throws {TypeError} 1 argument required + * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 + * + * @example + * // The end of a week for 2 September 2014 11:55:00: + * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Sat Sep 06 2014 23:59:59.999 + * + * @example + * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00: + * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) + * //=> Sun Sep 07 2014 23:59:59.999 + */ +function endOfWeek(dirtyDate, dirtyOptions) { + requiredArgs(1, arguments); + var options = dirtyOptions || {}; + var locale = options.locale; + var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn; + var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn); + var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN + + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); + } + + var date = toDate(dirtyDate); + var day = date.getDay(); + var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); + date.setDate(date.getDate() + diff); + date.setHours(23, 59, 59, 999); + return date; +} + +/** + * @name endOfMinute + * @category Minute Helpers + * @summary Return the end of a minute for the given date. + * + * @description + * Return the end of a minute for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the end of a minute + * @throws {TypeError} 1 argument required + * + * @example + * // The end of a minute for 1 December 2014 22:15:45.400: + * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400)) + * //=> Mon Dec 01 2014 22:15:59.999 + */ + +function endOfMinute(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setSeconds(59, 999); + return date; +} + +/** + * @name endOfQuarter + * @category Quarter Helpers + * @summary Return the end of a year quarter for the given date. + * + * @description + * Return the end of a year quarter for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the end of a quarter + * @throws {TypeError} 1 argument required + * + * @example + * // The end of a quarter for 2 September 2014 11:55:00: + * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0)) + * //=> Tue Sep 30 2014 23:59:59.999 + */ + +function endOfQuarter(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var currentMonth = date.getMonth(); + var month = currentMonth - currentMonth % 3 + 3; + date.setMonth(month, 0); + date.setHours(23, 59, 59, 999); + return date; +} + +/** + * @name endOfSecond + * @category Second Helpers + * @summary Return the end of a second for the given date. + * + * @description + * Return the end of a second for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the end of a second + * @throws {TypeError} 1 argument required + * + * @example + * // The end of a second for 1 December 2014 22:15:45.400: + * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400)) + * //=> Mon Dec 01 2014 22:15:45.999 + */ + +function endOfSecond(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setMilliseconds(999); + return date; +} + +var formatDistanceLocale = { + lessThanXSeconds: { + one: 'less than a second', + other: 'less than {{count}} seconds' + }, + xSeconds: { + one: '1 second', + other: '{{count}} seconds' + }, + halfAMinute: 'half a minute', + lessThanXMinutes: { + one: 'less than a minute', + other: 'less than {{count}} minutes' + }, + xMinutes: { + one: '1 minute', + other: '{{count}} minutes' + }, + aboutXHours: { + one: 'about 1 hour', + other: 'about {{count}} hours' + }, + xHours: { + one: '1 hour', + other: '{{count}} hours' + }, + xDays: { + one: '1 day', + other: '{{count}} days' + }, + aboutXWeeks: { + one: 'about 1 week', + other: 'about {{count}} weeks' + }, + xWeeks: { + one: '1 week', + other: '{{count}} weeks' + }, + aboutXMonths: { + one: 'about 1 month', + other: 'about {{count}} months' + }, + xMonths: { + one: '1 month', + other: '{{count}} months' + }, + aboutXYears: { + one: 'about 1 year', + other: 'about {{count}} years' + }, + xYears: { + one: '1 year', + other: '{{count}} years' + }, + overXYears: { + one: 'over 1 year', + other: 'over {{count}} years' + }, + almostXYears: { + one: 'almost 1 year', + other: 'almost {{count}} years' + } +}; +function formatDistance(token, count, options) { + options = options || {}; + var result; + + if (typeof formatDistanceLocale[token] === 'string') { + result = formatDistanceLocale[token]; + } else if (count === 1) { + result = formatDistanceLocale[token].one; + } else { + result = formatDistanceLocale[token].other.replace('{{count}}', count); + } + + if (options.addSuffix) { + if (options.comparison > 0) { + return 'in ' + result; + } else { + return result + ' ago'; + } + } + + return result; +} + +function buildFormatLongFn(args) { + return function (dirtyOptions) { + var options = dirtyOptions || {}; + var width = options.width ? String(options.width) : args.defaultWidth; + var format = args.formats[width] || args.formats[args.defaultWidth]; + return format; + }; +} + +var dateFormats = { + full: 'EEEE, MMMM do, y', + long: 'MMMM do, y', + medium: 'MMM d, y', + short: 'MM/dd/yyyy' +}; +var timeFormats = { + full: 'h:mm:ss a zzzz', + long: 'h:mm:ss a z', + medium: 'h:mm:ss a', + short: 'h:mm a' +}; +var dateTimeFormats = { + full: "{{date}} 'at' {{time}}", + long: "{{date}} 'at' {{time}}", + medium: '{{date}}, {{time}}', + short: '{{date}}, {{time}}' +}; +var formatLong = { + date: buildFormatLongFn({ + formats: dateFormats, + defaultWidth: 'full' + }), + time: buildFormatLongFn({ + formats: timeFormats, + defaultWidth: 'full' + }), + dateTime: buildFormatLongFn({ + formats: dateTimeFormats, + defaultWidth: 'full' + }) +}; +var formatLong$1 = formatLong; + +var formatRelativeLocale = { + lastWeek: "'last' eeee 'at' p", + yesterday: "'yesterday at' p", + today: "'today at' p", + tomorrow: "'tomorrow at' p", + nextWeek: "eeee 'at' p", + other: 'P' +}; +function formatRelative(token, _date, _baseDate, _options) { + return formatRelativeLocale[token]; +} + +function buildLocalizeFn(args) { + return function (dirtyIndex, dirtyOptions) { + var options = dirtyOptions || {}; + var context = options.context ? String(options.context) : 'standalone'; + var valuesArray; + + if (context === 'formatting' && args.formattingValues) { + var defaultWidth = args.defaultFormattingWidth || args.defaultWidth; + var width = options.width ? String(options.width) : defaultWidth; + valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; + } else { + var _defaultWidth = args.defaultWidth; + + var _width = options.width ? String(options.width) : args.defaultWidth; + + valuesArray = args.values[_width] || args.values[_defaultWidth]; + } + + var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; + return valuesArray[index]; + }; +} + +var eraValues = { + narrow: ['B', 'A'], + abbreviated: ['BC', 'AD'], + wide: ['Before Christ', 'Anno Domini'] +}; +var quarterValues = { + narrow: ['1', '2', '3', '4'], + abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'], + wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter'] // Note: in English, the names of days of the week and months are capitalized. + // If you are making a new locale based on this one, check if the same is true for the language you're working on. + // Generally, formatted dates should look like they are in the middle of a sentence, + // e.g. in Spanish language the weekdays and months should be in the lowercase. + +}; +var monthValues = { + narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'], + abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] +}; +var dayValues = { + narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], + short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], + abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] +}; +var dayPeriodValues = { + narrow: { + am: 'a', + pm: 'p', + midnight: 'mi', + noon: 'n', + morning: 'morning', + afternoon: 'afternoon', + evening: 'evening', + night: 'night' + }, + abbreviated: { + am: 'AM', + pm: 'PM', + midnight: 'midnight', + noon: 'noon', + morning: 'morning', + afternoon: 'afternoon', + evening: 'evening', + night: 'night' + }, + wide: { + am: 'a.m.', + pm: 'p.m.', + midnight: 'midnight', + noon: 'noon', + morning: 'morning', + afternoon: 'afternoon', + evening: 'evening', + night: 'night' + } +}; +var formattingDayPeriodValues = { + narrow: { + am: 'a', + pm: 'p', + midnight: 'mi', + noon: 'n', + morning: 'in the morning', + afternoon: 'in the afternoon', + evening: 'in the evening', + night: 'at night' + }, + abbreviated: { + am: 'AM', + pm: 'PM', + midnight: 'midnight', + noon: 'noon', + morning: 'in the morning', + afternoon: 'in the afternoon', + evening: 'in the evening', + night: 'at night' + }, + wide: { + am: 'a.m.', + pm: 'p.m.', + midnight: 'midnight', + noon: 'noon', + morning: 'in the morning', + afternoon: 'in the afternoon', + evening: 'in the evening', + night: 'at night' + } +}; + +function ordinalNumber(dirtyNumber, _dirtyOptions) { + var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example, + // if they are different for different grammatical genders, + // use `options.unit`: + // + // var options = dirtyOptions || {} + // var unit = String(options.unit) + // + // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear', + // 'day', 'hour', 'minute', 'second' + + var rem100 = number % 100; + + if (rem100 > 20 || rem100 < 10) { + switch (rem100 % 10) { + case 1: + return number + 'st'; + + case 2: + return number + 'nd'; + + case 3: + return number + 'rd'; + } + } + + return number + 'th'; +} + +var localize = { + ordinalNumber: ordinalNumber, + era: buildLocalizeFn({ + values: eraValues, + defaultWidth: 'wide' + }), + quarter: buildLocalizeFn({ + values: quarterValues, + defaultWidth: 'wide', + argumentCallback: function (quarter) { + return Number(quarter) - 1; + } + }), + month: buildLocalizeFn({ + values: monthValues, + defaultWidth: 'wide' + }), + day: buildLocalizeFn({ + values: dayValues, + defaultWidth: 'wide' + }), + dayPeriod: buildLocalizeFn({ + values: dayPeriodValues, + defaultWidth: 'wide', + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: 'wide' + }) +}; +var localize$1 = localize; + +function buildMatchPatternFn(args) { + return function (dirtyString, dirtyOptions) { + var string = String(dirtyString); + var options = dirtyOptions || {}; + var matchResult = string.match(args.matchPattern); + + if (!matchResult) { + return null; + } + + var matchedString = matchResult[0]; + var parseResult = string.match(args.parsePattern); + + if (!parseResult) { + return null; + } + + var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; + value = options.valueCallback ? options.valueCallback(value) : value; + return { + value: value, + rest: string.slice(matchedString.length) + }; + }; +} + +function buildMatchFn(args) { + return function (dirtyString, dirtyOptions) { + var string = String(dirtyString); + var options = dirtyOptions || {}; + var width = options.width; + var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; + var matchResult = string.match(matchPattern); + + if (!matchResult) { + return null; + } + + var matchedString = matchResult[0]; + var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; + var value; + + if (Object.prototype.toString.call(parsePatterns) === '[object Array]') { + value = findIndex(parsePatterns, function (pattern) { + return pattern.test(matchedString); + }); + } else { + value = findKey(parsePatterns, function (pattern) { + return pattern.test(matchedString); + }); + } + + value = args.valueCallback ? args.valueCallback(value) : value; + value = options.valueCallback ? options.valueCallback(value) : value; + return { + value: value, + rest: string.slice(matchedString.length) + }; + }; +} + +function findKey(object, predicate) { + for (var key in object) { + if (object.hasOwnProperty(key) && predicate(object[key])) { + return key; + } + } +} + +function findIndex(array, predicate) { + for (var key = 0; key < array.length; key++) { + if (predicate(array[key])) { + return key; + } + } +} + +var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; +var parseOrdinalNumberPattern = /\d+/i; +var matchEraPatterns = { + narrow: /^(b|a)/i, + abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, + wide: /^(before christ|before common era|anno domini|common era)/i +}; +var parseEraPatterns = { + any: [/^b/i, /^(a|c)/i] +}; +var matchQuarterPatterns = { + narrow: /^[1234]/i, + abbreviated: /^q[1234]/i, + wide: /^[1234](th|st|nd|rd)? quarter/i +}; +var parseQuarterPatterns = { + any: [/1/i, /2/i, /3/i, /4/i] +}; +var matchMonthPatterns = { + narrow: /^[jfmasond]/i, + abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, + wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i +}; +var parseMonthPatterns = { + narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i], + any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i] +}; +var matchDayPatterns = { + narrow: /^[smtwf]/i, + short: /^(su|mo|tu|we|th|fr|sa)/i, + abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, + wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i +}; +var parseDayPatterns = { + narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], + any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] +}; +var matchDayPeriodPatterns = { + narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, + any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i +}; +var parseDayPeriodPatterns = { + any: { + am: /^a/i, + pm: /^p/i, + midnight: /^mi/i, + noon: /^no/i, + morning: /morning/i, + afternoon: /afternoon/i, + evening: /evening/i, + night: /night/i + } +}; +var match = { + ordinalNumber: buildMatchPatternFn({ + matchPattern: matchOrdinalNumberPattern, + parsePattern: parseOrdinalNumberPattern, + valueCallback: function (value) { + return parseInt(value, 10); + } + }), + era: buildMatchFn({ + matchPatterns: matchEraPatterns, + defaultMatchWidth: 'wide', + parsePatterns: parseEraPatterns, + defaultParseWidth: 'any' + }), + quarter: buildMatchFn({ + matchPatterns: matchQuarterPatterns, + defaultMatchWidth: 'wide', + parsePatterns: parseQuarterPatterns, + defaultParseWidth: 'any', + valueCallback: function (index) { + return index + 1; + } + }), + month: buildMatchFn({ + matchPatterns: matchMonthPatterns, + defaultMatchWidth: 'wide', + parsePatterns: parseMonthPatterns, + defaultParseWidth: 'any' + }), + day: buildMatchFn({ + matchPatterns: matchDayPatterns, + defaultMatchWidth: 'wide', + parsePatterns: parseDayPatterns, + defaultParseWidth: 'any' + }), + dayPeriod: buildMatchFn({ + matchPatterns: matchDayPeriodPatterns, + defaultMatchWidth: 'any', + parsePatterns: parseDayPeriodPatterns, + defaultParseWidth: 'any' + }) +}; +var match$1 = match; + +/** + * @type {Locale} + * @category Locales + * @summary English locale (United States). + * @language English + * @iso-639-2 eng + * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp} + * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss} + */ + +var locale = { + code: 'en-US', + formatDistance: formatDistance, + formatLong: formatLong$1, + formatRelative: formatRelative, + localize: localize$1, + match: match$1, + options: { + weekStartsOn: 0 + /* Sunday */ + , + firstWeekContainsDate: 1 + } +}; +var defaultLocale = locale; + +/** + * @name subMilliseconds + * @category Millisecond Helpers + * @summary Subtract the specified number of milliseconds from the given date. + * + * @description + * Subtract the specified number of milliseconds from the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the milliseconds subtracted + * @throws {TypeError} 2 arguments required + * + * @example + * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000: + * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) + * //=> Thu Jul 10 2014 12:45:29.250 + */ + +function subMilliseconds(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + return addMilliseconds(dirtyDate, -amount); +} + +function addLeadingZeros(number, targetLength) { + var sign = number < 0 ? '-' : ''; + var output = Math.abs(number).toString(); + + while (output.length < targetLength) { + output = '0' + output; + } + + return sign + output; +} + +/* + * | | Unit | | Unit | + * |-----|--------------------------------|-----|--------------------------------| + * | a | AM, PM | A* | | + * | d | Day of month | D | | + * | h | Hour [1-12] | H | Hour [0-23] | + * | m | Minute | M | Month | + * | s | Second | S | Fraction of second | + * | y | Year (abs) | Y | | + * + * Letters marked by * are not implemented but reserved by Unicode standard. + */ + +var formatters$2 = { + // Year + y: function (date, token) { + // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens + // | Year | y | yy | yyy | yyyy | yyyyy | + // |----------|-------|----|-------|-------|-------| + // | AD 1 | 1 | 01 | 001 | 0001 | 00001 | + // | AD 12 | 12 | 12 | 012 | 0012 | 00012 | + // | AD 123 | 123 | 23 | 123 | 0123 | 00123 | + // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 | + // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 | + var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript) + + var year = signedYear > 0 ? signedYear : 1 - signedYear; + return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length); + }, + // Month + M: function (date, token) { + var month = date.getUTCMonth(); + return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2); + }, + // Day of the month + d: function (date, token) { + return addLeadingZeros(date.getUTCDate(), token.length); + }, + // AM or PM + a: function (date, token) { + var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am'; + + switch (token) { + case 'a': + case 'aa': + return dayPeriodEnumValue.toUpperCase(); + + case 'aaa': + return dayPeriodEnumValue; + + case 'aaaaa': + return dayPeriodEnumValue[0]; + + case 'aaaa': + default: + return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.'; + } + }, + // Hour [1-12] + h: function (date, token) { + return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length); + }, + // Hour [0-23] + H: function (date, token) { + return addLeadingZeros(date.getUTCHours(), token.length); + }, + // Minute + m: function (date, token) { + return addLeadingZeros(date.getUTCMinutes(), token.length); + }, + // Second + s: function (date, token) { + return addLeadingZeros(date.getUTCSeconds(), token.length); + }, + // Fraction of second + S: function (date, token) { + var numberOfDigits = token.length; + var milliseconds = date.getUTCMilliseconds(); + var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3)); + return addLeadingZeros(fractionalSeconds, token.length); + } +}; +var formatters$3 = formatters$2; + +var MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented. +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function getUTCDayOfYear(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var timestamp = date.getTime(); + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + var startOfYearTimestamp = date.getTime(); + var difference = timestamp - startOfYearTimestamp; + return Math.floor(difference / MILLISECONDS_IN_DAY) + 1; +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function startOfUTCISOWeek(dirtyDate) { + requiredArgs(1, arguments); + var weekStartsOn = 1; + var date = toDate(dirtyDate); + var day = date.getUTCDay(); + var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + date.setUTCDate(date.getUTCDate() - diff); + date.setUTCHours(0, 0, 0, 0); + return date; +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function getUTCISOWeekYear(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var year = date.getUTCFullYear(); + var fourthOfJanuaryOfNextYear = new Date(0); + fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0); + var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear); + var fourthOfJanuaryOfThisYear = new Date(0); + fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0); + var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear); + + if (date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function startOfUTCISOWeekYear(dirtyDate) { + requiredArgs(1, arguments); + var year = getUTCISOWeekYear(dirtyDate); + var fourthOfJanuary = new Date(0); + fourthOfJanuary.setUTCFullYear(year, 0, 4); + fourthOfJanuary.setUTCHours(0, 0, 0, 0); + var date = startOfUTCISOWeek(fourthOfJanuary); + return date; +} + +var MILLISECONDS_IN_WEEK$1 = 604800000; // This function will be a part of public API when UTC function will be implemented. +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function getUTCISOWeek(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer + // because the number of milliseconds in a week is not constant + // (e.g. it's different in the week of the daylight saving time clock shift) + + return Math.round(diff / MILLISECONDS_IN_WEEK$1) + 1; +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function startOfUTCWeek(dirtyDate, dirtyOptions) { + requiredArgs(1, arguments); + var options = dirtyOptions || {}; + var locale = options.locale; + var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn; + var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn); + var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN + + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); + } + + var date = toDate(dirtyDate); + var day = date.getUTCDay(); + var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + date.setUTCDate(date.getUTCDate() - diff); + date.setUTCHours(0, 0, 0, 0); + return date; +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function getUTCWeekYear(dirtyDate, dirtyOptions) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate, dirtyOptions); + var year = date.getUTCFullYear(); + var options = dirtyOptions || {}; + var locale = options.locale; + var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate; + var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate); + var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN + + if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { + throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively'); + } + + var firstWeekOfNextYear = new Date(0); + firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setUTCHours(0, 0, 0, 0); + var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions); + var firstWeekOfThisYear = new Date(0); + firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setUTCHours(0, 0, 0, 0); + var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions); + + if (date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; + } +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function startOfUTCWeekYear(dirtyDate, dirtyOptions) { + requiredArgs(1, arguments); + var options = dirtyOptions || {}; + var locale = options.locale; + var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate; + var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate); + var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); + var year = getUTCWeekYear(dirtyDate, dirtyOptions); + var firstWeek = new Date(0); + firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate); + firstWeek.setUTCHours(0, 0, 0, 0); + var date = startOfUTCWeek(firstWeek, dirtyOptions); + return date; +} + +var MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented. +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function getUTCWeek(dirtyDate, options) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer + // because the number of milliseconds in a week is not constant + // (e.g. it's different in the week of the daylight saving time clock shift) + + return Math.round(diff / MILLISECONDS_IN_WEEK) + 1; +} + +var dayPeriodEnum = { + am: 'am', + pm: 'pm', + midnight: 'midnight', + noon: 'noon', + morning: 'morning', + afternoon: 'afternoon', + evening: 'evening', + night: 'night' + /* + * | | Unit | | Unit | + * |-----|--------------------------------|-----|--------------------------------| + * | a | AM, PM | A* | Milliseconds in day | + * | b | AM, PM, noon, midnight | B | Flexible day period | + * | c | Stand-alone local day of week | C* | Localized hour w/ day period | + * | d | Day of month | D | Day of year | + * | e | Local day of week | E | Day of week | + * | f | | F* | Day of week in month | + * | g* | Modified Julian day | G | Era | + * | h | Hour [1-12] | H | Hour [0-23] | + * | i! | ISO day of week | I! | ISO week of year | + * | j* | Localized hour w/ day period | J* | Localized hour w/o day period | + * | k | Hour [1-24] | K | Hour [0-11] | + * | l* | (deprecated) | L | Stand-alone month | + * | m | Minute | M | Month | + * | n | | N | | + * | o! | Ordinal number modifier | O | Timezone (GMT) | + * | p! | Long localized time | P! | Long localized date | + * | q | Stand-alone quarter | Q | Quarter | + * | r* | Related Gregorian year | R! | ISO week-numbering year | + * | s | Second | S | Fraction of second | + * | t! | Seconds timestamp | T! | Milliseconds timestamp | + * | u | Extended year | U* | Cyclic year | + * | v* | Timezone (generic non-locat.) | V* | Timezone (location) | + * | w | Local week of year | W* | Week of month | + * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) | + * | y | Year (abs) | Y | Local week-numbering year | + * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) | + * + * Letters marked by * are not implemented but reserved by Unicode standard. + * + * Letters marked by ! are non-standard, but implemented by date-fns: + * - `o` modifies the previous token to turn it into an ordinal (see `format` docs) + * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days, + * i.e. 7 for Sunday, 1 for Monday, etc. + * - `I` is ISO week of year, as opposed to `w` which is local week of year. + * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year. + * `R` is supposed to be used in conjunction with `I` and `i` + * for universal ISO week-numbering date, whereas + * `Y` is supposed to be used in conjunction with `w` and `e` + * for week-numbering date specific to the locale. + * - `P` is long localized date format + * - `p` is long localized time format + */ + +}; +var formatters = { + // Era + G: function (date, token, localize) { + var era = date.getUTCFullYear() > 0 ? 1 : 0; + + switch (token) { + // AD, BC + case 'G': + case 'GG': + case 'GGG': + return localize.era(era, { + width: 'abbreviated' + }); + // A, B + + case 'GGGGG': + return localize.era(era, { + width: 'narrow' + }); + // Anno Domini, Before Christ + + case 'GGGG': + default: + return localize.era(era, { + width: 'wide' + }); + } + }, + // Year + y: function (date, token, localize) { + // Ordinal number + if (token === 'yo') { + var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript) + + var year = signedYear > 0 ? signedYear : 1 - signedYear; + return localize.ordinalNumber(year, { + unit: 'year' + }); + } + + return formatters$3.y(date, token); + }, + // Local week-numbering year + Y: function (date, token, localize, options) { + var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript) + + var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year + + if (token === 'YY') { + var twoDigitYear = weekYear % 100; + return addLeadingZeros(twoDigitYear, 2); + } // Ordinal number + + + if (token === 'Yo') { + return localize.ordinalNumber(weekYear, { + unit: 'year' + }); + } // Padding + + + return addLeadingZeros(weekYear, token.length); + }, + // ISO week-numbering year + R: function (date, token) { + var isoWeekYear = getUTCISOWeekYear(date); // Padding + + return addLeadingZeros(isoWeekYear, token.length); + }, + // Extended year. This is a single number designating the year of this calendar system. + // The main difference between `y` and `u` localizers are B.C. years: + // | Year | `y` | `u` | + // |------|-----|-----| + // | AC 1 | 1 | 1 | + // | BC 1 | 1 | 0 | + // | BC 2 | 2 | -1 | + // Also `yy` always returns the last two digits of a year, + // while `uu` pads single digit years to 2 characters and returns other years unchanged. + u: function (date, token) { + var year = date.getUTCFullYear(); + return addLeadingZeros(year, token.length); + }, + // Quarter + Q: function (date, token, localize) { + var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); + + switch (token) { + // 1, 2, 3, 4 + case 'Q': + return String(quarter); + // 01, 02, 03, 04 + + case 'QQ': + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + + case 'Qo': + return localize.ordinalNumber(quarter, { + unit: 'quarter' + }); + // Q1, Q2, Q3, Q4 + + case 'QQQ': + return localize.quarter(quarter, { + width: 'abbreviated', + context: 'formatting' + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + + case 'QQQQQ': + return localize.quarter(quarter, { + width: 'narrow', + context: 'formatting' + }); + // 1st quarter, 2nd quarter, ... + + case 'QQQQ': + default: + return localize.quarter(quarter, { + width: 'wide', + context: 'formatting' + }); + } + }, + // Stand-alone quarter + q: function (date, token, localize) { + var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); + + switch (token) { + // 1, 2, 3, 4 + case 'q': + return String(quarter); + // 01, 02, 03, 04 + + case 'qq': + return addLeadingZeros(quarter, 2); + // 1st, 2nd, 3rd, 4th + + case 'qo': + return localize.ordinalNumber(quarter, { + unit: 'quarter' + }); + // Q1, Q2, Q3, Q4 + + case 'qqq': + return localize.quarter(quarter, { + width: 'abbreviated', + context: 'standalone' + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + + case 'qqqqq': + return localize.quarter(quarter, { + width: 'narrow', + context: 'standalone' + }); + // 1st quarter, 2nd quarter, ... + + case 'qqqq': + default: + return localize.quarter(quarter, { + width: 'wide', + context: 'standalone' + }); + } + }, + // Month + M: function (date, token, localize) { + var month = date.getUTCMonth(); + + switch (token) { + case 'M': + case 'MM': + return formatters$3.M(date, token); + // 1st, 2nd, ..., 12th + + case 'Mo': + return localize.ordinalNumber(month + 1, { + unit: 'month' + }); + // Jan, Feb, ..., Dec + + case 'MMM': + return localize.month(month, { + width: 'abbreviated', + context: 'formatting' + }); + // J, F, ..., D + + case 'MMMMM': + return localize.month(month, { + width: 'narrow', + context: 'formatting' + }); + // January, February, ..., December + + case 'MMMM': + default: + return localize.month(month, { + width: 'wide', + context: 'formatting' + }); + } + }, + // Stand-alone month + L: function (date, token, localize) { + var month = date.getUTCMonth(); + + switch (token) { + // 1, 2, ..., 12 + case 'L': + return String(month + 1); + // 01, 02, ..., 12 + + case 'LL': + return addLeadingZeros(month + 1, 2); + // 1st, 2nd, ..., 12th + + case 'Lo': + return localize.ordinalNumber(month + 1, { + unit: 'month' + }); + // Jan, Feb, ..., Dec + + case 'LLL': + return localize.month(month, { + width: 'abbreviated', + context: 'standalone' + }); + // J, F, ..., D + + case 'LLLLL': + return localize.month(month, { + width: 'narrow', + context: 'standalone' + }); + // January, February, ..., December + + case 'LLLL': + default: + return localize.month(month, { + width: 'wide', + context: 'standalone' + }); + } + }, + // Local week of year + w: function (date, token, localize, options) { + var week = getUTCWeek(date, options); + + if (token === 'wo') { + return localize.ordinalNumber(week, { + unit: 'week' + }); + } + + return addLeadingZeros(week, token.length); + }, + // ISO week of year + I: function (date, token, localize) { + var isoWeek = getUTCISOWeek(date); + + if (token === 'Io') { + return localize.ordinalNumber(isoWeek, { + unit: 'week' + }); + } + + return addLeadingZeros(isoWeek, token.length); + }, + // Day of the month + d: function (date, token, localize) { + if (token === 'do') { + return localize.ordinalNumber(date.getUTCDate(), { + unit: 'date' + }); + } + + return formatters$3.d(date, token); + }, + // Day of year + D: function (date, token, localize) { + var dayOfYear = getUTCDayOfYear(date); + + if (token === 'Do') { + return localize.ordinalNumber(dayOfYear, { + unit: 'dayOfYear' + }); + } + + return addLeadingZeros(dayOfYear, token.length); + }, + // Day of week + E: function (date, token, localize) { + var dayOfWeek = date.getUTCDay(); + + switch (token) { + // Tue + case 'E': + case 'EE': + case 'EEE': + return localize.day(dayOfWeek, { + width: 'abbreviated', + context: 'formatting' + }); + // T + + case 'EEEEE': + return localize.day(dayOfWeek, { + width: 'narrow', + context: 'formatting' + }); + // Tu + + case 'EEEEEE': + return localize.day(dayOfWeek, { + width: 'short', + context: 'formatting' + }); + // Tuesday + + case 'EEEE': + default: + return localize.day(dayOfWeek, { + width: 'wide', + context: 'formatting' + }); + } + }, + // Local day of week + e: function (date, token, localize, options) { + var dayOfWeek = date.getUTCDay(); + var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + + switch (token) { + // Numerical value (Nth day of week with current locale or weekStartsOn) + case 'e': + return String(localDayOfWeek); + // Padded numerical value + + case 'ee': + return addLeadingZeros(localDayOfWeek, 2); + // 1st, 2nd, ..., 7th + + case 'eo': + return localize.ordinalNumber(localDayOfWeek, { + unit: 'day' + }); + + case 'eee': + return localize.day(dayOfWeek, { + width: 'abbreviated', + context: 'formatting' + }); + // T + + case 'eeeee': + return localize.day(dayOfWeek, { + width: 'narrow', + context: 'formatting' + }); + // Tu + + case 'eeeeee': + return localize.day(dayOfWeek, { + width: 'short', + context: 'formatting' + }); + // Tuesday + + case 'eeee': + default: + return localize.day(dayOfWeek, { + width: 'wide', + context: 'formatting' + }); + } + }, + // Stand-alone local day of week + c: function (date, token, localize, options) { + var dayOfWeek = date.getUTCDay(); + var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + + switch (token) { + // Numerical value (same as in `e`) + case 'c': + return String(localDayOfWeek); + // Padded numerical value + + case 'cc': + return addLeadingZeros(localDayOfWeek, token.length); + // 1st, 2nd, ..., 7th + + case 'co': + return localize.ordinalNumber(localDayOfWeek, { + unit: 'day' + }); + + case 'ccc': + return localize.day(dayOfWeek, { + width: 'abbreviated', + context: 'standalone' + }); + // T + + case 'ccccc': + return localize.day(dayOfWeek, { + width: 'narrow', + context: 'standalone' + }); + // Tu + + case 'cccccc': + return localize.day(dayOfWeek, { + width: 'short', + context: 'standalone' + }); + // Tuesday + + case 'cccc': + default: + return localize.day(dayOfWeek, { + width: 'wide', + context: 'standalone' + }); + } + }, + // ISO day of week + i: function (date, token, localize) { + var dayOfWeek = date.getUTCDay(); + var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + + switch (token) { + // 2 + case 'i': + return String(isoDayOfWeek); + // 02 + + case 'ii': + return addLeadingZeros(isoDayOfWeek, token.length); + // 2nd + + case 'io': + return localize.ordinalNumber(isoDayOfWeek, { + unit: 'day' + }); + // Tue + + case 'iii': + return localize.day(dayOfWeek, { + width: 'abbreviated', + context: 'formatting' + }); + // T + + case 'iiiii': + return localize.day(dayOfWeek, { + width: 'narrow', + context: 'formatting' + }); + // Tu + + case 'iiiiii': + return localize.day(dayOfWeek, { + width: 'short', + context: 'formatting' + }); + // Tuesday + + case 'iiii': + default: + return localize.day(dayOfWeek, { + width: 'wide', + context: 'formatting' + }); + } + }, + // AM or PM + a: function (date, token, localize) { + var hours = date.getUTCHours(); + var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'; + + switch (token) { + case 'a': + case 'aa': + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'abbreviated', + context: 'formatting' + }); + + case 'aaa': + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'abbreviated', + context: 'formatting' + }).toLowerCase(); + + case 'aaaaa': + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'narrow', + context: 'formatting' + }); + + case 'aaaa': + default: + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'wide', + context: 'formatting' + }); + } + }, + // AM, PM, midnight, noon + b: function (date, token, localize) { + var hours = date.getUTCHours(); + var dayPeriodEnumValue; + + if (hours === 12) { + dayPeriodEnumValue = dayPeriodEnum.noon; + } else if (hours === 0) { + dayPeriodEnumValue = dayPeriodEnum.midnight; + } else { + dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'; + } + + switch (token) { + case 'b': + case 'bb': + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'abbreviated', + context: 'formatting' + }); + + case 'bbb': + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'abbreviated', + context: 'formatting' + }).toLowerCase(); + + case 'bbbbb': + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'narrow', + context: 'formatting' + }); + + case 'bbbb': + default: + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'wide', + context: 'formatting' + }); + } + }, + // in the morning, in the afternoon, in the evening, at night + B: function (date, token, localize) { + var hours = date.getUTCHours(); + var dayPeriodEnumValue; + + if (hours >= 17) { + dayPeriodEnumValue = dayPeriodEnum.evening; + } else if (hours >= 12) { + dayPeriodEnumValue = dayPeriodEnum.afternoon; + } else if (hours >= 4) { + dayPeriodEnumValue = dayPeriodEnum.morning; + } else { + dayPeriodEnumValue = dayPeriodEnum.night; + } + + switch (token) { + case 'B': + case 'BB': + case 'BBB': + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'abbreviated', + context: 'formatting' + }); + + case 'BBBBB': + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'narrow', + context: 'formatting' + }); + + case 'BBBB': + default: + return localize.dayPeriod(dayPeriodEnumValue, { + width: 'wide', + context: 'formatting' + }); + } + }, + // Hour [1-12] + h: function (date, token, localize) { + if (token === 'ho') { + var hours = date.getUTCHours() % 12; + if (hours === 0) hours = 12; + return localize.ordinalNumber(hours, { + unit: 'hour' + }); + } + + return formatters$3.h(date, token); + }, + // Hour [0-23] + H: function (date, token, localize) { + if (token === 'Ho') { + return localize.ordinalNumber(date.getUTCHours(), { + unit: 'hour' + }); + } + + return formatters$3.H(date, token); + }, + // Hour [0-11] + K: function (date, token, localize) { + var hours = date.getUTCHours() % 12; + + if (token === 'Ko') { + return localize.ordinalNumber(hours, { + unit: 'hour' + }); + } + + return addLeadingZeros(hours, token.length); + }, + // Hour [1-24] + k: function (date, token, localize) { + var hours = date.getUTCHours(); + if (hours === 0) hours = 24; + + if (token === 'ko') { + return localize.ordinalNumber(hours, { + unit: 'hour' + }); + } + + return addLeadingZeros(hours, token.length); + }, + // Minute + m: function (date, token, localize) { + if (token === 'mo') { + return localize.ordinalNumber(date.getUTCMinutes(), { + unit: 'minute' + }); + } + + return formatters$3.m(date, token); + }, + // Second + s: function (date, token, localize) { + if (token === 'so') { + return localize.ordinalNumber(date.getUTCSeconds(), { + unit: 'second' + }); + } + + return formatters$3.s(date, token); + }, + // Fraction of second + S: function (date, token) { + return formatters$3.S(date, token); + }, + // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) + X: function (date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timezoneOffset = originalDate.getTimezoneOffset(); + + if (timezoneOffset === 0) { + return 'Z'; + } + + switch (token) { + // Hours and optional minutes + case 'X': + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XX` + + case 'XXXX': + case 'XX': + // Hours and minutes without `:` delimiter + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `XXX` + + case 'XXXXX': + case 'XXX': // Hours and minutes with `:` delimiter + + default: + return formatTimezone(timezoneOffset, ':'); + } + }, + // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) + x: function (date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timezoneOffset = originalDate.getTimezoneOffset(); + + switch (token) { + // Hours and optional minutes + case 'x': + return formatTimezoneWithOptionalMinutes(timezoneOffset); + // Hours, minutes and optional seconds without `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xx` + + case 'xxxx': + case 'xx': + // Hours and minutes without `:` delimiter + return formatTimezone(timezoneOffset); + // Hours, minutes and optional seconds with `:` delimiter + // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets + // so this token always has the same output as `xxx` + + case 'xxxxx': + case 'xxx': // Hours and minutes with `:` delimiter + + default: + return formatTimezone(timezoneOffset, ':'); + } + }, + // Timezone (GMT) + O: function (date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timezoneOffset = originalDate.getTimezoneOffset(); + + switch (token) { + // Short + case 'O': + case 'OO': + case 'OOO': + return 'GMT' + formatTimezoneShort(timezoneOffset, ':'); + // Long + + case 'OOOO': + default: + return 'GMT' + formatTimezone(timezoneOffset, ':'); + } + }, + // Timezone (specific non-location) + z: function (date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timezoneOffset = originalDate.getTimezoneOffset(); + + switch (token) { + // Short + case 'z': + case 'zz': + case 'zzz': + return 'GMT' + formatTimezoneShort(timezoneOffset, ':'); + // Long + + case 'zzzz': + default: + return 'GMT' + formatTimezone(timezoneOffset, ':'); + } + }, + // Seconds timestamp + t: function (date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timestamp = Math.floor(originalDate.getTime() / 1000); + return addLeadingZeros(timestamp, token.length); + }, + // Milliseconds timestamp + T: function (date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timestamp = originalDate.getTime(); + return addLeadingZeros(timestamp, token.length); + } +}; + +function formatTimezoneShort(offset, dirtyDelimiter) { + var sign = offset > 0 ? '-' : '+'; + var absOffset = Math.abs(offset); + var hours = Math.floor(absOffset / 60); + var minutes = absOffset % 60; + + if (minutes === 0) { + return sign + String(hours); + } + + var delimiter = dirtyDelimiter || ''; + return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); +} + +function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) { + if (offset % 60 === 0) { + var sign = offset > 0 ? '-' : '+'; + return sign + addLeadingZeros(Math.abs(offset) / 60, 2); + } + + return formatTimezone(offset, dirtyDelimiter); +} + +function formatTimezone(offset, dirtyDelimiter) { + var delimiter = dirtyDelimiter || ''; + var sign = offset > 0 ? '-' : '+'; + var absOffset = Math.abs(offset); + var hours = addLeadingZeros(Math.floor(absOffset / 60), 2); + var minutes = addLeadingZeros(absOffset % 60, 2); + return sign + hours + delimiter + minutes; +} + +var formatters$1 = formatters; + +function dateLongFormatter(pattern, formatLong) { + switch (pattern) { + case 'P': + return formatLong.date({ + width: 'short' + }); + + case 'PP': + return formatLong.date({ + width: 'medium' + }); + + case 'PPP': + return formatLong.date({ + width: 'long' + }); + + case 'PPPP': + default: + return formatLong.date({ + width: 'full' + }); + } +} + +function timeLongFormatter(pattern, formatLong) { + switch (pattern) { + case 'p': + return formatLong.time({ + width: 'short' + }); + + case 'pp': + return formatLong.time({ + width: 'medium' + }); + + case 'ppp': + return formatLong.time({ + width: 'long' + }); + + case 'pppp': + default: + return formatLong.time({ + width: 'full' + }); + } +} + +function dateTimeLongFormatter(pattern, formatLong) { + var matchResult = pattern.match(/(P+)(p+)?/); + var datePattern = matchResult[1]; + var timePattern = matchResult[2]; + + if (!timePattern) { + return dateLongFormatter(pattern, formatLong); + } + + var dateTimeFormat; + + switch (datePattern) { + case 'P': + dateTimeFormat = formatLong.dateTime({ + width: 'short' + }); + break; + + case 'PP': + dateTimeFormat = formatLong.dateTime({ + width: 'medium' + }); + break; + + case 'PPP': + dateTimeFormat = formatLong.dateTime({ + width: 'long' + }); + break; + + case 'PPPP': + default: + dateTimeFormat = formatLong.dateTime({ + width: 'full' + }); + break; + } + + return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong)); +} + +var longFormatters = { + p: timeLongFormatter, + P: dateTimeLongFormatter +}; +var longFormatters$1 = longFormatters; + +var protectedDayOfYearTokens = ['D', 'DD']; +var protectedWeekYearTokens = ['YY', 'YYYY']; +function isProtectedDayOfYearToken(token) { + return protectedDayOfYearTokens.indexOf(token) !== -1; +} +function isProtectedWeekYearToken(token) { + return protectedWeekYearTokens.indexOf(token) !== -1; +} +function throwProtectedError(token, format, input) { + if (token === 'YYYY') { + throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://git.io/fxCyr")); + } else if (token === 'YY') { + throw new RangeError("Use `yy` instead of `YY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://git.io/fxCyr")); + } else if (token === 'D') { + throw new RangeError("Use `d` instead of `D` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://git.io/fxCyr")); + } else if (token === 'DD') { + throw new RangeError("Use `dd` instead of `DD` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://git.io/fxCyr")); + } +} + +// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token +// (one of the certain letters followed by `o`) +// - (\w)\1* matches any sequences of the same letter +// - '' matches two quote characters in a row +// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), +// except a single quote symbol, which ends the sequence. +// Two quote characters do not end the sequence. +// If there is no matching single quote +// then the sequence will continue until the end of the string. +// - . matches any single character unmatched by previous parts of the RegExps + +var formattingTokensRegExp$1 = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also +// sequences of symbols P, p, and the combinations like `PPPPPPPppppp` + +var longFormattingTokensRegExp$1 = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; +var escapedStringRegExp$1 = /^'([^]*?)'?$/; +var doubleQuoteRegExp$1 = /''/g; +var unescapedLatinCharacterRegExp$1 = /[a-zA-Z]/; +/** + * @name format + * @category Common Helpers + * @summary Format the date. + * + * @description + * Return the formatted date string in the given format. The result may vary by locale. + * + * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. + * > See: https://git.io/fxCyr + * + * The characters wrapped between two single quotes characters (') are escaped. + * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. + * (see the last example) + * + * Format of the string is based on Unicode Technical Standard #35: + * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table + * with a few additions (see note 7 below the table). + * + * Accepted patterns: + * | Unit | Pattern | Result examples | Notes | + * |---------------------------------|---------|-----------------------------------|-------| + * | Era | G..GGG | AD, BC | | + * | | GGGG | Anno Domini, Before Christ | 2 | + * | | GGGGG | A, B | | + * | Calendar year | y | 44, 1, 1900, 2017 | 5 | + * | | yo | 44th, 1st, 0th, 17th | 5,7 | + * | | yy | 44, 01, 00, 17 | 5 | + * | | yyy | 044, 001, 1900, 2017 | 5 | + * | | yyyy | 0044, 0001, 1900, 2017 | 5 | + * | | yyyyy | ... | 3,5 | + * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 | + * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 | + * | | YY | 44, 01, 00, 17 | 5,8 | + * | | YYY | 044, 001, 1900, 2017 | 5 | + * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 | + * | | YYYYY | ... | 3,5 | + * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 | + * | | RR | -43, 00, 01, 1900, 2017 | 5,7 | + * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 | + * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 | + * | | RRRRR | ... | 3,5,7 | + * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 | + * | | uu | -43, 01, 1900, 2017 | 5 | + * | | uuu | -043, 001, 1900, 2017 | 5 | + * | | uuuu | -0043, 0001, 1900, 2017 | 5 | + * | | uuuuu | ... | 3,5 | + * | Quarter (formatting) | Q | 1, 2, 3, 4 | | + * | | Qo | 1st, 2nd, 3rd, 4th | 7 | + * | | QQ | 01, 02, 03, 04 | | + * | | QQQ | Q1, Q2, Q3, Q4 | | + * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | + * | | QQQQQ | 1, 2, 3, 4 | 4 | + * | Quarter (stand-alone) | q | 1, 2, 3, 4 | | + * | | qo | 1st, 2nd, 3rd, 4th | 7 | + * | | qq | 01, 02, 03, 04 | | + * | | qqq | Q1, Q2, Q3, Q4 | | + * | | qqqq | 1st quarter, 2nd quarter, ... | 2 | + * | | qqqqq | 1, 2, 3, 4 | 4 | + * | Month (formatting) | M | 1, 2, ..., 12 | | + * | | Mo | 1st, 2nd, ..., 12th | 7 | + * | | MM | 01, 02, ..., 12 | | + * | | MMM | Jan, Feb, ..., Dec | | + * | | MMMM | January, February, ..., December | 2 | + * | | MMMMM | J, F, ..., D | | + * | Month (stand-alone) | L | 1, 2, ..., 12 | | + * | | Lo | 1st, 2nd, ..., 12th | 7 | + * | | LL | 01, 02, ..., 12 | | + * | | LLL | Jan, Feb, ..., Dec | | + * | | LLLL | January, February, ..., December | 2 | + * | | LLLLL | J, F, ..., D | | + * | Local week of year | w | 1, 2, ..., 53 | | + * | | wo | 1st, 2nd, ..., 53th | 7 | + * | | ww | 01, 02, ..., 53 | | + * | ISO week of year | I | 1, 2, ..., 53 | 7 | + * | | Io | 1st, 2nd, ..., 53th | 7 | + * | | II | 01, 02, ..., 53 | 7 | + * | Day of month | d | 1, 2, ..., 31 | | + * | | do | 1st, 2nd, ..., 31st | 7 | + * | | dd | 01, 02, ..., 31 | | + * | Day of year | D | 1, 2, ..., 365, 366 | 9 | + * | | Do | 1st, 2nd, ..., 365th, 366th | 7 | + * | | DD | 01, 02, ..., 365, 366 | 9 | + * | | DDD | 001, 002, ..., 365, 366 | | + * | | DDDD | ... | 3 | + * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | | + * | | EEEE | Monday, Tuesday, ..., Sunday | 2 | + * | | EEEEE | M, T, W, T, F, S, S | | + * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | | + * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 | + * | | io | 1st, 2nd, ..., 7th | 7 | + * | | ii | 01, 02, ..., 07 | 7 | + * | | iii | Mon, Tue, Wed, ..., Sun | 7 | + * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 | + * | | iiiii | M, T, W, T, F, S, S | 7 | + * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 | + * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | | + * | | eo | 2nd, 3rd, ..., 1st | 7 | + * | | ee | 02, 03, ..., 01 | | + * | | eee | Mon, Tue, Wed, ..., Sun | | + * | | eeee | Monday, Tuesday, ..., Sunday | 2 | + * | | eeeee | M, T, W, T, F, S, S | | + * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | | + * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | | + * | | co | 2nd, 3rd, ..., 1st | 7 | + * | | cc | 02, 03, ..., 01 | | + * | | ccc | Mon, Tue, Wed, ..., Sun | | + * | | cccc | Monday, Tuesday, ..., Sunday | 2 | + * | | ccccc | M, T, W, T, F, S, S | | + * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | | + * | AM, PM | a..aa | AM, PM | | + * | | aaa | am, pm | | + * | | aaaa | a.m., p.m. | 2 | + * | | aaaaa | a, p | | + * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | | + * | | bbb | am, pm, noon, midnight | | + * | | bbbb | a.m., p.m., noon, midnight | 2 | + * | | bbbbb | a, p, n, mi | | + * | Flexible day period | B..BBB | at night, in the morning, ... | | + * | | BBBB | at night, in the morning, ... | 2 | + * | | BBBBB | at night, in the morning, ... | | + * | Hour [1-12] | h | 1, 2, ..., 11, 12 | | + * | | ho | 1st, 2nd, ..., 11th, 12th | 7 | + * | | hh | 01, 02, ..., 11, 12 | | + * | Hour [0-23] | H | 0, 1, 2, ..., 23 | | + * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 | + * | | HH | 00, 01, 02, ..., 23 | | + * | Hour [0-11] | K | 1, 2, ..., 11, 0 | | + * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 | + * | | KK | 01, 02, ..., 11, 00 | | + * | Hour [1-24] | k | 24, 1, 2, ..., 23 | | + * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 | + * | | kk | 24, 01, 02, ..., 23 | | + * | Minute | m | 0, 1, ..., 59 | | + * | | mo | 0th, 1st, ..., 59th | 7 | + * | | mm | 00, 01, ..., 59 | | + * | Second | s | 0, 1, ..., 59 | | + * | | so | 0th, 1st, ..., 59th | 7 | + * | | ss | 00, 01, ..., 59 | | + * | Fraction of second | S | 0, 1, ..., 9 | | + * | | SS | 00, 01, ..., 99 | | + * | | SSS | 000, 0001, ..., 999 | | + * | | SSSS | ... | 3 | + * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | | + * | | XX | -0800, +0530, Z | | + * | | XXX | -08:00, +05:30, Z | | + * | | XXXX | -0800, +0530, Z, +123456 | 2 | + * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | + * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | | + * | | xx | -0800, +0530, +0000 | | + * | | xxx | -08:00, +05:30, +00:00 | 2 | + * | | xxxx | -0800, +0530, +0000, +123456 | | + * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | + * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | | + * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 | + * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 | + * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 | + * | Seconds timestamp | t | 512969520 | 7 | + * | | tt | ... | 3,7 | + * | Milliseconds timestamp | T | 512969520900 | 7 | + * | | TT | ... | 3,7 | + * | Long localized date | P | 04/29/1453 | 7 | + * | | PP | Apr 29, 1453 | 7 | + * | | PPP | April 29th, 1453 | 7 | + * | | PPPP | Friday, April 29th, 1453 | 2,7 | + * | Long localized time | p | 12:00 AM | 7 | + * | | pp | 12:00:00 AM | 7 | + * | | ppp | 12:00:00 AM GMT+2 | 7 | + * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 | + * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 | + * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 | + * | | PPPppp | April 29th, 1453 at ... | 7 | + * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 | + * Notes: + * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale + * are the same as "stand-alone" units, but are different in some languages. + * "Formatting" units are declined according to the rules of the language + * in the context of a date. "Stand-alone" units are always nominative singular: + * + * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` + * + * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` + * + * 2. Any sequence of the identical letters is a pattern, unless it is escaped by + * the single quote characters (see below). + * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`) + * the output will be the same as default pattern for this unit, usually + * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units + * are marked with "2" in the last column of the table. + * + * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'` + * + * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'` + * + * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'` + * + * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'` + * + * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'` + * + * 3. Some patterns could be unlimited length (such as `yyyyyyyy`). + * The output will be padded with zeros to match the length of the pattern. + * + * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'` + * + * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. + * These tokens represent the shortest form of the quarter. + * + * 5. The main difference between `y` and `u` patterns are B.C. years: + * + * | Year | `y` | `u` | + * |------|-----|-----| + * | AC 1 | 1 | 1 | + * | BC 1 | 1 | 0 | + * | BC 2 | 2 | -1 | + * + * Also `yy` always returns the last two digits of a year, + * while `uu` pads single digit years to 2 characters and returns other years unchanged: + * + * | Year | `yy` | `uu` | + * |------|------|------| + * | 1 | 01 | 01 | + * | 14 | 14 | 14 | + * | 376 | 76 | 376 | + * | 1453 | 53 | 1453 | + * + * The same difference is true for local and ISO week-numbering years (`Y` and `R`), + * except local week-numbering years are dependent on `options.weekStartsOn` + * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear} + * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}). + * + * 6. Specific non-location timezones are currently unavailable in `date-fns`, + * so right now these tokens fall back to GMT timezones. + * + * 7. These patterns are not in the Unicode Technical Standard #35: + * - `i`: ISO day of week + * - `I`: ISO week of year + * - `R`: ISO week-numbering year + * - `t`: seconds timestamp + * - `T`: milliseconds timestamp + * - `o`: ordinal number modifier + * - `P`: long localized date + * - `p`: long localized time + * + * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. + * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr + * + * 9. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month. + * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * - The second argument is now required for the sake of explicitness. + * + * ```javascript + * // Before v2.0.0 + * format(new Date(2016, 0, 1)) + * + * // v2.0.0 onward + * format(new Date(2016, 0, 1), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx") + * ``` + * + * - New format string API for `format` function + * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). + * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details. + * + * - Characters are now escaped using single quote symbols (`'`) instead of square brackets. + * + * @param {Date|Number} date - the original date + * @param {String} format - the string of tokens + * @param {Object} [options] - an object with options. + * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale} + * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) + * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is + * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`; + * see: https://git.io/fxCyr + * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`; + * see: https://git.io/fxCyr + * @returns {String} the formatted date string + * @throws {TypeError} 2 arguments required + * @throws {RangeError} `date` must not be Invalid Date + * @throws {RangeError} `options.locale` must contain `localize` property + * @throws {RangeError} `options.locale` must contain `formatLong` property + * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 + * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7 + * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr + * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr + * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr + * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr + * @throws {RangeError} format string contains an unescaped latin alphabet character + * + * @example + * // Represent 11 February 2014 in middle-endian format: + * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy') + * //=> '02/11/2014' + * + * @example + * // Represent 2 July 2014 in Esperanto: + * import { eoLocale } from 'date-fns/locale/eo' + * var result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", { + * locale: eoLocale + * }) + * //=> '2-a de julio 2014' + * + * @example + * // Escape string by single quote characters: + * var result = format(new Date(2014, 6, 2, 15), "h 'o''clock'") + * //=> "3 o'clock" + */ + +function format(dirtyDate, dirtyFormatStr, dirtyOptions) { + requiredArgs(2, arguments); + var formatStr = String(dirtyFormatStr); + var options = dirtyOptions || {}; + var locale = options.locale || defaultLocale; + var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate; + var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate); + var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN + + if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { + throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively'); + } + + var localeWeekStartsOn = locale.options && locale.options.weekStartsOn; + var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn); + var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN + + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); + } + + if (!locale.localize) { + throw new RangeError('locale must contain localize property'); + } + + if (!locale.formatLong) { + throw new RangeError('locale must contain formatLong property'); + } + + var originalDate = toDate(dirtyDate); + + if (!isValid(originalDate)) { + throw new RangeError('Invalid time value'); + } // Convert the date in system timezone to the same date in UTC+00:00 timezone. + // This ensures that when UTC functions will be implemented, locales will be compatible with them. + // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376 + + + var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate); + var utcDate = subMilliseconds(originalDate, timezoneOffset); + var formatterOptions = { + firstWeekContainsDate: firstWeekContainsDate, + weekStartsOn: weekStartsOn, + locale: locale, + _originalDate: originalDate + }; + var result = formatStr.match(longFormattingTokensRegExp$1).map(function (substring) { + var firstCharacter = substring[0]; + + if (firstCharacter === 'p' || firstCharacter === 'P') { + var longFormatter = longFormatters$1[firstCharacter]; + return longFormatter(substring, locale.formatLong, formatterOptions); + } + + return substring; + }).join('').match(formattingTokensRegExp$1).map(function (substring) { + // Replace two single quote characters with one single quote character + if (substring === "''") { + return "'"; + } + + var firstCharacter = substring[0]; + + if (firstCharacter === "'") { + return cleanEscapedString$1(substring); + } + + var formatter = formatters$1[firstCharacter]; + + if (formatter) { + if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) { + throwProtectedError(substring, dirtyFormatStr, dirtyDate); + } + + if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) { + throwProtectedError(substring, dirtyFormatStr, dirtyDate); + } + + return formatter(utcDate, substring, locale.localize, formatterOptions); + } + + if (firstCharacter.match(unescapedLatinCharacterRegExp$1)) { + throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`'); + } + + return substring; + }).join(''); + return result; +} + +function cleanEscapedString$1(input) { + return input.match(escapedStringRegExp$1)[1].replace(doubleQuoteRegExp$1, "'"); +} + +function assign(target, dirtyObject) { + if (target == null) { + throw new TypeError('assign requires that input parameter not be null or undefined'); + } + + dirtyObject = dirtyObject || {}; + + for (var property in dirtyObject) { + if (dirtyObject.hasOwnProperty(property)) { + target[property] = dirtyObject[property]; + } + } + + return target; +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) { + requiredArgs(2, arguments); + var options = dirtyOptions || {}; + var locale = options.locale; + var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn; + var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn); + var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN + + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); + } + + var date = toDate(dirtyDate); + var day = toInteger(dirtyDay); + var currentDay = date.getUTCDay(); + var remainder = day % 7; + var dayIndex = (remainder + 7) % 7; + var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay; + date.setUTCDate(date.getUTCDate() + diff); + return date; +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function setUTCISODay(dirtyDate, dirtyDay) { + requiredArgs(2, arguments); + var day = toInteger(dirtyDay); + + if (day % 7 === 0) { + day = day - 7; + } + + var weekStartsOn = 1; + var date = toDate(dirtyDate); + var currentDay = date.getUTCDay(); + var remainder = day % 7; + var dayIndex = (remainder + 7) % 7; + var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay; + date.setUTCDate(date.getUTCDate() + diff); + return date; +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function setUTCISOWeek(dirtyDate, dirtyISOWeek) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var isoWeek = toInteger(dirtyISOWeek); + var diff = getUTCISOWeek(date) - isoWeek; + date.setUTCDate(date.getUTCDate() - diff * 7); + return date; +} + +// See issue: https://github.com/date-fns/date-fns/issues/376 + +function setUTCWeek(dirtyDate, dirtyWeek, options) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var week = toInteger(dirtyWeek); + var diff = getUTCWeek(date, options) - week; + date.setUTCDate(date.getUTCDate() - diff * 7); + return date; +} + +var MILLISECONDS_IN_HOUR$1 = 3600000; +var MILLISECONDS_IN_MINUTE$1 = 60000; +var MILLISECONDS_IN_SECOND = 1000; +var numericPatterns = { + month: /^(1[0-2]|0?\d)/, + // 0 to 12 + date: /^(3[0-1]|[0-2]?\d)/, + // 0 to 31 + dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/, + // 0 to 366 + week: /^(5[0-3]|[0-4]?\d)/, + // 0 to 53 + hour23h: /^(2[0-3]|[0-1]?\d)/, + // 0 to 23 + hour24h: /^(2[0-4]|[0-1]?\d)/, + // 0 to 24 + hour11h: /^(1[0-1]|0?\d)/, + // 0 to 11 + hour12h: /^(1[0-2]|0?\d)/, + // 0 to 12 + minute: /^[0-5]?\d/, + // 0 to 59 + second: /^[0-5]?\d/, + // 0 to 59 + singleDigit: /^\d/, + // 0 to 9 + twoDigits: /^\d{1,2}/, + // 0 to 99 + threeDigits: /^\d{1,3}/, + // 0 to 999 + fourDigits: /^\d{1,4}/, + // 0 to 9999 + anyDigitsSigned: /^-?\d+/, + singleDigitSigned: /^-?\d/, + // 0 to 9, -0 to -9 + twoDigitsSigned: /^-?\d{1,2}/, + // 0 to 99, -0 to -99 + threeDigitsSigned: /^-?\d{1,3}/, + // 0 to 999, -0 to -999 + fourDigitsSigned: /^-?\d{1,4}/ // 0 to 9999, -0 to -9999 + +}; +var timezonePatterns = { + basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/, + basic: /^([+-])(\d{2})(\d{2})|Z/, + basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/, + extended: /^([+-])(\d{2}):(\d{2})|Z/, + extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/ +}; + +function parseNumericPattern(pattern, string, valueCallback) { + var matchResult = string.match(pattern); + + if (!matchResult) { + return null; + } + + var value = parseInt(matchResult[0], 10); + return { + value: valueCallback ? valueCallback(value) : value, + rest: string.slice(matchResult[0].length) + }; +} + +function parseTimezonePattern(pattern, string) { + var matchResult = string.match(pattern); + + if (!matchResult) { + return null; + } // Input is 'Z' + + + if (matchResult[0] === 'Z') { + return { + value: 0, + rest: string.slice(1) + }; + } + + var sign = matchResult[1] === '+' ? 1 : -1; + var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0; + var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0; + var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0; + return { + value: sign * (hours * MILLISECONDS_IN_HOUR$1 + minutes * MILLISECONDS_IN_MINUTE$1 + seconds * MILLISECONDS_IN_SECOND), + rest: string.slice(matchResult[0].length) + }; +} + +function parseAnyDigitsSigned(string, valueCallback) { + return parseNumericPattern(numericPatterns.anyDigitsSigned, string, valueCallback); +} + +function parseNDigits(n, string, valueCallback) { + switch (n) { + case 1: + return parseNumericPattern(numericPatterns.singleDigit, string, valueCallback); + + case 2: + return parseNumericPattern(numericPatterns.twoDigits, string, valueCallback); + + case 3: + return parseNumericPattern(numericPatterns.threeDigits, string, valueCallback); + + case 4: + return parseNumericPattern(numericPatterns.fourDigits, string, valueCallback); + + default: + return parseNumericPattern(new RegExp('^\\d{1,' + n + '}'), string, valueCallback); + } +} + +function parseNDigitsSigned(n, string, valueCallback) { + switch (n) { + case 1: + return parseNumericPattern(numericPatterns.singleDigitSigned, string, valueCallback); + + case 2: + return parseNumericPattern(numericPatterns.twoDigitsSigned, string, valueCallback); + + case 3: + return parseNumericPattern(numericPatterns.threeDigitsSigned, string, valueCallback); + + case 4: + return parseNumericPattern(numericPatterns.fourDigitsSigned, string, valueCallback); + + default: + return parseNumericPattern(new RegExp('^-?\\d{1,' + n + '}'), string, valueCallback); + } +} + +function dayPeriodEnumToHours(enumValue) { + switch (enumValue) { + case 'morning': + return 4; + + case 'evening': + return 17; + + case 'pm': + case 'noon': + case 'afternoon': + return 12; + + case 'am': + case 'midnight': + case 'night': + default: + return 0; + } +} + +function normalizeTwoDigitYear(twoDigitYear, currentYear) { + var isCommonEra = currentYear > 0; // Absolute number of the current year: + // 1 -> 1 AC + // 0 -> 1 BC + // -1 -> 2 BC + + var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear; + var result; + + if (absCurrentYear <= 50) { + result = twoDigitYear || 100; + } else { + var rangeEnd = absCurrentYear + 50; + var rangeEndCentury = Math.floor(rangeEnd / 100) * 100; + var isPreviousCentury = twoDigitYear >= rangeEnd % 100; + result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0); + } + + return isCommonEra ? result : 1 - result; +} + +var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +var DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // User for validation + +function isLeapYearIndex$1(year) { + return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; +} +/* + * | | Unit | | Unit | + * |-----|--------------------------------|-----|--------------------------------| + * | a | AM, PM | A* | Milliseconds in day | + * | b | AM, PM, noon, midnight | B | Flexible day period | + * | c | Stand-alone local day of week | C* | Localized hour w/ day period | + * | d | Day of month | D | Day of year | + * | e | Local day of week | E | Day of week | + * | f | | F* | Day of week in month | + * | g* | Modified Julian day | G | Era | + * | h | Hour [1-12] | H | Hour [0-23] | + * | i! | ISO day of week | I! | ISO week of year | + * | j* | Localized hour w/ day period | J* | Localized hour w/o day period | + * | k | Hour [1-24] | K | Hour [0-11] | + * | l* | (deprecated) | L | Stand-alone month | + * | m | Minute | M | Month | + * | n | | N | | + * | o! | Ordinal number modifier | O* | Timezone (GMT) | + * | p | | P | | + * | q | Stand-alone quarter | Q | Quarter | + * | r* | Related Gregorian year | R! | ISO week-numbering year | + * | s | Second | S | Fraction of second | + * | t! | Seconds timestamp | T! | Milliseconds timestamp | + * | u | Extended year | U* | Cyclic year | + * | v* | Timezone (generic non-locat.) | V* | Timezone (location) | + * | w | Local week of year | W* | Week of month | + * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) | + * | y | Year (abs) | Y | Local week-numbering year | + * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) | + * + * Letters marked by * are not implemented but reserved by Unicode standard. + * + * Letters marked by ! are non-standard, but implemented by date-fns: + * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs) + * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days, + * i.e. 7 for Sunday, 1 for Monday, etc. + * - `I` is ISO week of year, as opposed to `w` which is local week of year. + * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year. + * `R` is supposed to be used in conjunction with `I` and `i` + * for universal ISO week-numbering date, whereas + * `Y` is supposed to be used in conjunction with `w` and `e` + * for week-numbering date specific to the locale. + */ + + +var parsers = { + // Era + G: { + priority: 140, + parse: function (string, token, match, _options) { + switch (token) { + // AD, BC + case 'G': + case 'GG': + case 'GGG': + return match.era(string, { + width: 'abbreviated' + }) || match.era(string, { + width: 'narrow' + }); + // A, B + + case 'GGGGG': + return match.era(string, { + width: 'narrow' + }); + // Anno Domini, Before Christ + + case 'GGGG': + default: + return match.era(string, { + width: 'wide' + }) || match.era(string, { + width: 'abbreviated' + }) || match.era(string, { + width: 'narrow' + }); + } + }, + set: function (date, flags, value, _options) { + flags.era = value; + date.setUTCFullYear(value, 0, 1); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['R', 'u', 't', 'T'] + }, + // Year + y: { + // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns + // | Year | y | yy | yyy | yyyy | yyyyy | + // |----------|-------|----|-------|-------|-------| + // | AD 1 | 1 | 01 | 001 | 0001 | 00001 | + // | AD 12 | 12 | 12 | 012 | 0012 | 00012 | + // | AD 123 | 123 | 23 | 123 | 0123 | 00123 | + // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 | + // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 | + priority: 130, + parse: function (string, token, match, _options) { + var valueCallback = function (year) { + return { + year: year, + isTwoDigitYear: token === 'yy' + }; + }; + + switch (token) { + case 'y': + return parseNDigits(4, string, valueCallback); + + case 'yo': + return match.ordinalNumber(string, { + unit: 'year', + valueCallback: valueCallback + }); + + default: + return parseNDigits(token.length, string, valueCallback); + } + }, + validate: function (_date, value, _options) { + return value.isTwoDigitYear || value.year > 0; + }, + set: function (date, flags, value, _options) { + var currentYear = date.getUTCFullYear(); + + if (value.isTwoDigitYear) { + var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear); + date.setUTCFullYear(normalizedTwoDigitYear, 0, 1); + date.setUTCHours(0, 0, 0, 0); + return date; + } + + var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year; + date.setUTCFullYear(year, 0, 1); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T'] + }, + // Local week-numbering year + Y: { + priority: 130, + parse: function (string, token, match, _options) { + var valueCallback = function (year) { + return { + year: year, + isTwoDigitYear: token === 'YY' + }; + }; + + switch (token) { + case 'Y': + return parseNDigits(4, string, valueCallback); + + case 'Yo': + return match.ordinalNumber(string, { + unit: 'year', + valueCallback: valueCallback + }); + + default: + return parseNDigits(token.length, string, valueCallback); + } + }, + validate: function (_date, value, _options) { + return value.isTwoDigitYear || value.year > 0; + }, + set: function (date, flags, value, options) { + var currentYear = getUTCWeekYear(date, options); + + if (value.isTwoDigitYear) { + var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear); + date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate); + date.setUTCHours(0, 0, 0, 0); + return startOfUTCWeek(date, options); + } + + var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year; + date.setUTCFullYear(year, 0, options.firstWeekContainsDate); + date.setUTCHours(0, 0, 0, 0); + return startOfUTCWeek(date, options); + }, + incompatibleTokens: ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T'] + }, + // ISO week-numbering year + R: { + priority: 130, + parse: function (string, token, _match, _options) { + if (token === 'R') { + return parseNDigitsSigned(4, string); + } + + return parseNDigitsSigned(token.length, string); + }, + set: function (_date, _flags, value, _options) { + var firstWeekOfYear = new Date(0); + firstWeekOfYear.setUTCFullYear(value, 0, 4); + firstWeekOfYear.setUTCHours(0, 0, 0, 0); + return startOfUTCISOWeek(firstWeekOfYear); + }, + incompatibleTokens: ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T'] + }, + // Extended year + u: { + priority: 130, + parse: function (string, token, _match, _options) { + if (token === 'u') { + return parseNDigitsSigned(4, string); + } + + return parseNDigitsSigned(token.length, string); + }, + set: function (date, _flags, value, _options) { + date.setUTCFullYear(value, 0, 1); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T'] + }, + // Quarter + Q: { + priority: 120, + parse: function (string, token, match, _options) { + switch (token) { + // 1, 2, 3, 4 + case 'Q': + case 'QQ': + // 01, 02, 03, 04 + return parseNDigits(token.length, string); + // 1st, 2nd, 3rd, 4th + + case 'Qo': + return match.ordinalNumber(string, { + unit: 'quarter' + }); + // Q1, Q2, Q3, Q4 + + case 'QQQ': + return match.quarter(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.quarter(string, { + width: 'narrow', + context: 'formatting' + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + + case 'QQQQQ': + return match.quarter(string, { + width: 'narrow', + context: 'formatting' + }); + // 1st quarter, 2nd quarter, ... + + case 'QQQQ': + default: + return match.quarter(string, { + width: 'wide', + context: 'formatting' + }) || match.quarter(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.quarter(string, { + width: 'narrow', + context: 'formatting' + }); + } + }, + validate: function (_date, value, _options) { + return value >= 1 && value <= 4; + }, + set: function (date, _flags, value, _options) { + date.setUTCMonth((value - 1) * 3, 1); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T'] + }, + // Stand-alone quarter + q: { + priority: 120, + parse: function (string, token, match, _options) { + switch (token) { + // 1, 2, 3, 4 + case 'q': + case 'qq': + // 01, 02, 03, 04 + return parseNDigits(token.length, string); + // 1st, 2nd, 3rd, 4th + + case 'qo': + return match.ordinalNumber(string, { + unit: 'quarter' + }); + // Q1, Q2, Q3, Q4 + + case 'qqq': + return match.quarter(string, { + width: 'abbreviated', + context: 'standalone' + }) || match.quarter(string, { + width: 'narrow', + context: 'standalone' + }); + // 1, 2, 3, 4 (narrow quarter; could be not numerical) + + case 'qqqqq': + return match.quarter(string, { + width: 'narrow', + context: 'standalone' + }); + // 1st quarter, 2nd quarter, ... + + case 'qqqq': + default: + return match.quarter(string, { + width: 'wide', + context: 'standalone' + }) || match.quarter(string, { + width: 'abbreviated', + context: 'standalone' + }) || match.quarter(string, { + width: 'narrow', + context: 'standalone' + }); + } + }, + validate: function (_date, value, _options) { + return value >= 1 && value <= 4; + }, + set: function (date, _flags, value, _options) { + date.setUTCMonth((value - 1) * 3, 1); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T'] + }, + // Month + M: { + priority: 110, + parse: function (string, token, match, _options) { + var valueCallback = function (value) { + return value - 1; + }; + + switch (token) { + // 1, 2, ..., 12 + case 'M': + return parseNumericPattern(numericPatterns.month, string, valueCallback); + // 01, 02, ..., 12 + + case 'MM': + return parseNDigits(2, string, valueCallback); + // 1st, 2nd, ..., 12th + + case 'Mo': + return match.ordinalNumber(string, { + unit: 'month', + valueCallback: valueCallback + }); + // Jan, Feb, ..., Dec + + case 'MMM': + return match.month(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.month(string, { + width: 'narrow', + context: 'formatting' + }); + // J, F, ..., D + + case 'MMMMM': + return match.month(string, { + width: 'narrow', + context: 'formatting' + }); + // January, February, ..., December + + case 'MMMM': + default: + return match.month(string, { + width: 'wide', + context: 'formatting' + }) || match.month(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.month(string, { + width: 'narrow', + context: 'formatting' + }); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 11; + }, + set: function (date, _flags, value, _options) { + date.setUTCMonth(value, 1); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T'] + }, + // Stand-alone month + L: { + priority: 110, + parse: function (string, token, match, _options) { + var valueCallback = function (value) { + return value - 1; + }; + + switch (token) { + // 1, 2, ..., 12 + case 'L': + return parseNumericPattern(numericPatterns.month, string, valueCallback); + // 01, 02, ..., 12 + + case 'LL': + return parseNDigits(2, string, valueCallback); + // 1st, 2nd, ..., 12th + + case 'Lo': + return match.ordinalNumber(string, { + unit: 'month', + valueCallback: valueCallback + }); + // Jan, Feb, ..., Dec + + case 'LLL': + return match.month(string, { + width: 'abbreviated', + context: 'standalone' + }) || match.month(string, { + width: 'narrow', + context: 'standalone' + }); + // J, F, ..., D + + case 'LLLLL': + return match.month(string, { + width: 'narrow', + context: 'standalone' + }); + // January, February, ..., December + + case 'LLLL': + default: + return match.month(string, { + width: 'wide', + context: 'standalone' + }) || match.month(string, { + width: 'abbreviated', + context: 'standalone' + }) || match.month(string, { + width: 'narrow', + context: 'standalone' + }); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 11; + }, + set: function (date, _flags, value, _options) { + date.setUTCMonth(value, 1); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T'] + }, + // Local week of year + w: { + priority: 100, + parse: function (string, token, match, _options) { + switch (token) { + case 'w': + return parseNumericPattern(numericPatterns.week, string); + + case 'wo': + return match.ordinalNumber(string, { + unit: 'week' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (_date, value, _options) { + return value >= 1 && value <= 53; + }, + set: function (date, _flags, value, options) { + return startOfUTCWeek(setUTCWeek(date, value, options), options); + }, + incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T'] + }, + // ISO week of year + I: { + priority: 100, + parse: function (string, token, match, _options) { + switch (token) { + case 'I': + return parseNumericPattern(numericPatterns.week, string); + + case 'Io': + return match.ordinalNumber(string, { + unit: 'week' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (_date, value, _options) { + return value >= 1 && value <= 53; + }, + set: function (date, _flags, value, options) { + return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options); + }, + incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T'] + }, + // Day of the month + d: { + priority: 90, + subPriority: 1, + parse: function (string, token, match, _options) { + switch (token) { + case 'd': + return parseNumericPattern(numericPatterns.date, string); + + case 'do': + return match.ordinalNumber(string, { + unit: 'date' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (date, value, _options) { + var year = date.getUTCFullYear(); + var isLeapYear = isLeapYearIndex$1(year); + var month = date.getUTCMonth(); + + if (isLeapYear) { + return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]; + } else { + return value >= 1 && value <= DAYS_IN_MONTH[month]; + } + }, + set: function (date, _flags, value, _options) { + date.setUTCDate(value); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T'] + }, + // Day of year + D: { + priority: 90, + subPriority: 1, + parse: function (string, token, match, _options) { + switch (token) { + case 'D': + case 'DD': + return parseNumericPattern(numericPatterns.dayOfYear, string); + + case 'Do': + return match.ordinalNumber(string, { + unit: 'date' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (date, value, _options) { + var year = date.getUTCFullYear(); + var isLeapYear = isLeapYearIndex$1(year); + + if (isLeapYear) { + return value >= 1 && value <= 366; + } else { + return value >= 1 && value <= 365; + } + }, + set: function (date, _flags, value, _options) { + date.setUTCMonth(0, value); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T'] + }, + // Day of week + E: { + priority: 90, + parse: function (string, token, match, _options) { + switch (token) { + // Tue + case 'E': + case 'EE': + case 'EEE': + return match.day(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.day(string, { + width: 'short', + context: 'formatting' + }) || match.day(string, { + width: 'narrow', + context: 'formatting' + }); + // T + + case 'EEEEE': + return match.day(string, { + width: 'narrow', + context: 'formatting' + }); + // Tu + + case 'EEEEEE': + return match.day(string, { + width: 'short', + context: 'formatting' + }) || match.day(string, { + width: 'narrow', + context: 'formatting' + }); + // Tuesday + + case 'EEEE': + default: + return match.day(string, { + width: 'wide', + context: 'formatting' + }) || match.day(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.day(string, { + width: 'short', + context: 'formatting' + }) || match.day(string, { + width: 'narrow', + context: 'formatting' + }); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 6; + }, + set: function (date, _flags, value, options) { + date = setUTCDay(date, value, options); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T'] + }, + // Local day of week + e: { + priority: 90, + parse: function (string, token, match, options) { + var valueCallback = function (value) { + var wholeWeekDays = Math.floor((value - 1) / 7) * 7; + return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; + }; + + switch (token) { + // 3 + case 'e': + case 'ee': + // 03 + return parseNDigits(token.length, string, valueCallback); + // 3rd + + case 'eo': + return match.ordinalNumber(string, { + unit: 'day', + valueCallback: valueCallback + }); + // Tue + + case 'eee': + return match.day(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.day(string, { + width: 'short', + context: 'formatting' + }) || match.day(string, { + width: 'narrow', + context: 'formatting' + }); + // T + + case 'eeeee': + return match.day(string, { + width: 'narrow', + context: 'formatting' + }); + // Tu + + case 'eeeeee': + return match.day(string, { + width: 'short', + context: 'formatting' + }) || match.day(string, { + width: 'narrow', + context: 'formatting' + }); + // Tuesday + + case 'eeee': + default: + return match.day(string, { + width: 'wide', + context: 'formatting' + }) || match.day(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.day(string, { + width: 'short', + context: 'formatting' + }) || match.day(string, { + width: 'narrow', + context: 'formatting' + }); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 6; + }, + set: function (date, _flags, value, options) { + date = setUTCDay(date, value, options); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T'] + }, + // Stand-alone local day of week + c: { + priority: 90, + parse: function (string, token, match, options) { + var valueCallback = function (value) { + var wholeWeekDays = Math.floor((value - 1) / 7) * 7; + return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; + }; + + switch (token) { + // 3 + case 'c': + case 'cc': + // 03 + return parseNDigits(token.length, string, valueCallback); + // 3rd + + case 'co': + return match.ordinalNumber(string, { + unit: 'day', + valueCallback: valueCallback + }); + // Tue + + case 'ccc': + return match.day(string, { + width: 'abbreviated', + context: 'standalone' + }) || match.day(string, { + width: 'short', + context: 'standalone' + }) || match.day(string, { + width: 'narrow', + context: 'standalone' + }); + // T + + case 'ccccc': + return match.day(string, { + width: 'narrow', + context: 'standalone' + }); + // Tu + + case 'cccccc': + return match.day(string, { + width: 'short', + context: 'standalone' + }) || match.day(string, { + width: 'narrow', + context: 'standalone' + }); + // Tuesday + + case 'cccc': + default: + return match.day(string, { + width: 'wide', + context: 'standalone' + }) || match.day(string, { + width: 'abbreviated', + context: 'standalone' + }) || match.day(string, { + width: 'short', + context: 'standalone' + }) || match.day(string, { + width: 'narrow', + context: 'standalone' + }); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 6; + }, + set: function (date, _flags, value, options) { + date = setUTCDay(date, value, options); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T'] + }, + // ISO day of week + i: { + priority: 90, + parse: function (string, token, match, _options) { + var valueCallback = function (value) { + if (value === 0) { + return 7; + } + + return value; + }; + + switch (token) { + // 2 + case 'i': + case 'ii': + // 02 + return parseNDigits(token.length, string); + // 2nd + + case 'io': + return match.ordinalNumber(string, { + unit: 'day' + }); + // Tue + + case 'iii': + return match.day(string, { + width: 'abbreviated', + context: 'formatting', + valueCallback: valueCallback + }) || match.day(string, { + width: 'short', + context: 'formatting', + valueCallback: valueCallback + }) || match.day(string, { + width: 'narrow', + context: 'formatting', + valueCallback: valueCallback + }); + // T + + case 'iiiii': + return match.day(string, { + width: 'narrow', + context: 'formatting', + valueCallback: valueCallback + }); + // Tu + + case 'iiiiii': + return match.day(string, { + width: 'short', + context: 'formatting', + valueCallback: valueCallback + }) || match.day(string, { + width: 'narrow', + context: 'formatting', + valueCallback: valueCallback + }); + // Tuesday + + case 'iiii': + default: + return match.day(string, { + width: 'wide', + context: 'formatting', + valueCallback: valueCallback + }) || match.day(string, { + width: 'abbreviated', + context: 'formatting', + valueCallback: valueCallback + }) || match.day(string, { + width: 'short', + context: 'formatting', + valueCallback: valueCallback + }) || match.day(string, { + width: 'narrow', + context: 'formatting', + valueCallback: valueCallback + }); + } + }, + validate: function (_date, value, _options) { + return value >= 1 && value <= 7; + }, + set: function (date, _flags, value, options) { + date = setUTCISODay(date, value, options); + date.setUTCHours(0, 0, 0, 0); + return date; + }, + incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T'] + }, + // AM or PM + a: { + priority: 80, + parse: function (string, token, match, _options) { + switch (token) { + case 'a': + case 'aa': + case 'aaa': + return match.dayPeriod(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + + case 'aaaaa': + return match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + + case 'aaaa': + default: + return match.dayPeriod(string, { + width: 'wide', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + } + }, + set: function (date, _flags, value, _options) { + date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); + return date; + }, + incompatibleTokens: ['b', 'B', 'H', 'K', 'k', 't', 'T'] + }, + // AM, PM, midnight + b: { + priority: 80, + parse: function (string, token, match, _options) { + switch (token) { + case 'b': + case 'bb': + case 'bbb': + return match.dayPeriod(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + + case 'bbbbb': + return match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + + case 'bbbb': + default: + return match.dayPeriod(string, { + width: 'wide', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + } + }, + set: function (date, _flags, value, _options) { + date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); + return date; + }, + incompatibleTokens: ['a', 'B', 'H', 'K', 'k', 't', 'T'] + }, + // in the morning, in the afternoon, in the evening, at night + B: { + priority: 80, + parse: function (string, token, match, _options) { + switch (token) { + case 'B': + case 'BB': + case 'BBB': + return match.dayPeriod(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + + case 'BBBBB': + return match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + + case 'BBBB': + default: + return match.dayPeriod(string, { + width: 'wide', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'abbreviated', + context: 'formatting' + }) || match.dayPeriod(string, { + width: 'narrow', + context: 'formatting' + }); + } + }, + set: function (date, _flags, value, _options) { + date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); + return date; + }, + incompatibleTokens: ['a', 'b', 't', 'T'] + }, + // Hour [1-12] + h: { + priority: 70, + parse: function (string, token, match, _options) { + switch (token) { + case 'h': + return parseNumericPattern(numericPatterns.hour12h, string); + + case 'ho': + return match.ordinalNumber(string, { + unit: 'hour' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (_date, value, _options) { + return value >= 1 && value <= 12; + }, + set: function (date, _flags, value, _options) { + var isPM = date.getUTCHours() >= 12; + + if (isPM && value < 12) { + date.setUTCHours(value + 12, 0, 0, 0); + } else if (!isPM && value === 12) { + date.setUTCHours(0, 0, 0, 0); + } else { + date.setUTCHours(value, 0, 0, 0); + } + + return date; + }, + incompatibleTokens: ['H', 'K', 'k', 't', 'T'] + }, + // Hour [0-23] + H: { + priority: 70, + parse: function (string, token, match, _options) { + switch (token) { + case 'H': + return parseNumericPattern(numericPatterns.hour23h, string); + + case 'Ho': + return match.ordinalNumber(string, { + unit: 'hour' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 23; + }, + set: function (date, _flags, value, _options) { + date.setUTCHours(value, 0, 0, 0); + return date; + }, + incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T'] + }, + // Hour [0-11] + K: { + priority: 70, + parse: function (string, token, match, _options) { + switch (token) { + case 'K': + return parseNumericPattern(numericPatterns.hour11h, string); + + case 'Ko': + return match.ordinalNumber(string, { + unit: 'hour' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 11; + }, + set: function (date, _flags, value, _options) { + var isPM = date.getUTCHours() >= 12; + + if (isPM && value < 12) { + date.setUTCHours(value + 12, 0, 0, 0); + } else { + date.setUTCHours(value, 0, 0, 0); + } + + return date; + }, + incompatibleTokens: ['a', 'b', 'h', 'H', 'k', 't', 'T'] + }, + // Hour [1-24] + k: { + priority: 70, + parse: function (string, token, match, _options) { + switch (token) { + case 'k': + return parseNumericPattern(numericPatterns.hour24h, string); + + case 'ko': + return match.ordinalNumber(string, { + unit: 'hour' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (_date, value, _options) { + return value >= 1 && value <= 24; + }, + set: function (date, _flags, value, _options) { + var hours = value <= 24 ? value % 24 : value; + date.setUTCHours(hours, 0, 0, 0); + return date; + }, + incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T'] + }, + // Minute + m: { + priority: 60, + parse: function (string, token, match, _options) { + switch (token) { + case 'm': + return parseNumericPattern(numericPatterns.minute, string); + + case 'mo': + return match.ordinalNumber(string, { + unit: 'minute' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 59; + }, + set: function (date, _flags, value, _options) { + date.setUTCMinutes(value, 0, 0); + return date; + }, + incompatibleTokens: ['t', 'T'] + }, + // Second + s: { + priority: 50, + parse: function (string, token, match, _options) { + switch (token) { + case 's': + return parseNumericPattern(numericPatterns.second, string); + + case 'so': + return match.ordinalNumber(string, { + unit: 'second' + }); + + default: + return parseNDigits(token.length, string); + } + }, + validate: function (_date, value, _options) { + return value >= 0 && value <= 59; + }, + set: function (date, _flags, value, _options) { + date.setUTCSeconds(value, 0); + return date; + }, + incompatibleTokens: ['t', 'T'] + }, + // Fraction of second + S: { + priority: 30, + parse: function (string, token, _match, _options) { + var valueCallback = function (value) { + return Math.floor(value * Math.pow(10, -token.length + 3)); + }; + + return parseNDigits(token.length, string, valueCallback); + }, + set: function (date, _flags, value, _options) { + date.setUTCMilliseconds(value); + return date; + }, + incompatibleTokens: ['t', 'T'] + }, + // Timezone (ISO-8601. +00:00 is `'Z'`) + X: { + priority: 10, + parse: function (string, token, _match, _options) { + switch (token) { + case 'X': + return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string); + + case 'XX': + return parseTimezonePattern(timezonePatterns.basic, string); + + case 'XXXX': + return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string); + + case 'XXXXX': + return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string); + + case 'XXX': + default: + return parseTimezonePattern(timezonePatterns.extended, string); + } + }, + set: function (date, flags, value, _options) { + if (flags.timestampIsSet) { + return date; + } + + return new Date(date.getTime() - value); + }, + incompatibleTokens: ['t', 'T', 'x'] + }, + // Timezone (ISO-8601) + x: { + priority: 10, + parse: function (string, token, _match, _options) { + switch (token) { + case 'x': + return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string); + + case 'xx': + return parseTimezonePattern(timezonePatterns.basic, string); + + case 'xxxx': + return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string); + + case 'xxxxx': + return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string); + + case 'xxx': + default: + return parseTimezonePattern(timezonePatterns.extended, string); + } + }, + set: function (date, flags, value, _options) { + if (flags.timestampIsSet) { + return date; + } + + return new Date(date.getTime() - value); + }, + incompatibleTokens: ['t', 'T', 'X'] + }, + // Seconds timestamp + t: { + priority: 40, + parse: function (string, _token, _match, _options) { + return parseAnyDigitsSigned(string); + }, + set: function (_date, _flags, value, _options) { + return [new Date(value * 1000), { + timestampIsSet: true + }]; + }, + incompatibleTokens: '*' + }, + // Milliseconds timestamp + T: { + priority: 20, + parse: function (string, _token, _match, _options) { + return parseAnyDigitsSigned(string); + }, + set: function (_date, _flags, value, _options) { + return [new Date(value), { + timestampIsSet: true + }]; + }, + incompatibleTokens: '*' + } +}; +var parsers$1 = parsers; + +var TIMEZONE_UNIT_PRIORITY = 10; // This RegExp consists of three parts separated by `|`: +// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token +// (one of the certain letters followed by `o`) +// - (\w)\1* matches any sequences of the same letter +// - '' matches two quote characters in a row +// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), +// except a single quote symbol, which ends the sequence. +// Two quote characters do not end the sequence. +// If there is no matching single quote +// then the sequence will continue until the end of the string. +// - . matches any single character unmatched by previous parts of the RegExps + +var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also +// sequences of symbols P, p, and the combinations like `PPPPPPPppppp` + +var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; +var escapedStringRegExp = /^'([^]*?)'?$/; +var doubleQuoteRegExp = /''/g; +var notWhitespaceRegExp = /\S/; +var unescapedLatinCharacterRegExp = /[a-zA-Z]/; +/** + * @name parse + * @category Common Helpers + * @summary Parse the date. + * + * @description + * Return the date parsed from string using the given format string. + * + * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. + * > See: https://git.io/fxCyr + * + * The characters in the format string wrapped between two single quotes characters (') are escaped. + * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. + * + * Format of the format string is based on Unicode Technical Standard #35: + * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table + * with a few additions (see note 5 below the table). + * + * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited + * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception: + * + * ```javascript + * parse('23 AM', 'HH a', new Date()) + * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time + * ``` + * + * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true + * + * Accepted format string patterns: + * | Unit |Prior| Pattern | Result examples | Notes | + * |---------------------------------|-----|---------|-----------------------------------|-------| + * | Era | 140 | G..GGG | AD, BC | | + * | | | GGGG | Anno Domini, Before Christ | 2 | + * | | | GGGGG | A, B | | + * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 | + * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 | + * | | | yy | 44, 01, 00, 17 | 4 | + * | | | yyy | 044, 001, 123, 999 | 4 | + * | | | yyyy | 0044, 0001, 1900, 2017 | 4 | + * | | | yyyyy | ... | 2,4 | + * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 | + * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 | + * | | | YY | 44, 01, 00, 17 | 4,6 | + * | | | YYY | 044, 001, 123, 999 | 4 | + * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 | + * | | | YYYYY | ... | 2,4 | + * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 | + * | | | RR | -43, 01, 00, 17 | 4,5 | + * | | | RRR | -043, 001, 123, 999, -999 | 4,5 | + * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 | + * | | | RRRRR | ... | 2,4,5 | + * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 | + * | | | uu | -43, 01, 99, -99 | 4 | + * | | | uuu | -043, 001, 123, 999, -999 | 4 | + * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 | + * | | | uuuuu | ... | 2,4 | + * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | | + * | | | Qo | 1st, 2nd, 3rd, 4th | 5 | + * | | | QQ | 01, 02, 03, 04 | | + * | | | QQQ | Q1, Q2, Q3, Q4 | | + * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | + * | | | QQQQQ | 1, 2, 3, 4 | 4 | + * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | | + * | | | qo | 1st, 2nd, 3rd, 4th | 5 | + * | | | qq | 01, 02, 03, 04 | | + * | | | qqq | Q1, Q2, Q3, Q4 | | + * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 | + * | | | qqqqq | 1, 2, 3, 4 | 3 | + * | Month (formatting) | 110 | M | 1, 2, ..., 12 | | + * | | | Mo | 1st, 2nd, ..., 12th | 5 | + * | | | MM | 01, 02, ..., 12 | | + * | | | MMM | Jan, Feb, ..., Dec | | + * | | | MMMM | January, February, ..., December | 2 | + * | | | MMMMM | J, F, ..., D | | + * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | | + * | | | Lo | 1st, 2nd, ..., 12th | 5 | + * | | | LL | 01, 02, ..., 12 | | + * | | | LLL | Jan, Feb, ..., Dec | | + * | | | LLLL | January, February, ..., December | 2 | + * | | | LLLLL | J, F, ..., D | | + * | Local week of year | 100 | w | 1, 2, ..., 53 | | + * | | | wo | 1st, 2nd, ..., 53th | 5 | + * | | | ww | 01, 02, ..., 53 | | + * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 | + * | | | Io | 1st, 2nd, ..., 53th | 5 | + * | | | II | 01, 02, ..., 53 | 5 | + * | Day of month | 90 | d | 1, 2, ..., 31 | | + * | | | do | 1st, 2nd, ..., 31st | 5 | + * | | | dd | 01, 02, ..., 31 | | + * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 | + * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 | + * | | | DD | 01, 02, ..., 365, 366 | 7 | + * | | | DDD | 001, 002, ..., 365, 366 | | + * | | | DDDD | ... | 2 | + * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | | + * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 | + * | | | EEEEE | M, T, W, T, F, S, S | | + * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | | + * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 | + * | | | io | 1st, 2nd, ..., 7th | 5 | + * | | | ii | 01, 02, ..., 07 | 5 | + * | | | iii | Mon, Tue, Wed, ..., Sun | 5 | + * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 | + * | | | iiiii | M, T, W, T, F, S, S | 5 | + * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 | + * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | | + * | | | eo | 2nd, 3rd, ..., 1st | 5 | + * | | | ee | 02, 03, ..., 01 | | + * | | | eee | Mon, Tue, Wed, ..., Sun | | + * | | | eeee | Monday, Tuesday, ..., Sunday | 2 | + * | | | eeeee | M, T, W, T, F, S, S | | + * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | | + * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | | + * | | | co | 2nd, 3rd, ..., 1st | 5 | + * | | | cc | 02, 03, ..., 01 | | + * | | | ccc | Mon, Tue, Wed, ..., Sun | | + * | | | cccc | Monday, Tuesday, ..., Sunday | 2 | + * | | | ccccc | M, T, W, T, F, S, S | | + * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | | + * | AM, PM | 80 | a..aaa | AM, PM | | + * | | | aaaa | a.m., p.m. | 2 | + * | | | aaaaa | a, p | | + * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | | + * | | | bbbb | a.m., p.m., noon, midnight | 2 | + * | | | bbbbb | a, p, n, mi | | + * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | | + * | | | BBBB | at night, in the morning, ... | 2 | + * | | | BBBBB | at night, in the morning, ... | | + * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | | + * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 | + * | | | hh | 01, 02, ..., 11, 12 | | + * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | | + * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 | + * | | | HH | 00, 01, 02, ..., 23 | | + * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | | + * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 | + * | | | KK | 01, 02, ..., 11, 00 | | + * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | | + * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 | + * | | | kk | 24, 01, 02, ..., 23 | | + * | Minute | 60 | m | 0, 1, ..., 59 | | + * | | | mo | 0th, 1st, ..., 59th | 5 | + * | | | mm | 00, 01, ..., 59 | | + * | Second | 50 | s | 0, 1, ..., 59 | | + * | | | so | 0th, 1st, ..., 59th | 5 | + * | | | ss | 00, 01, ..., 59 | | + * | Seconds timestamp | 40 | t | 512969520 | | + * | | | tt | ... | 2 | + * | Fraction of second | 30 | S | 0, 1, ..., 9 | | + * | | | SS | 00, 01, ..., 99 | | + * | | | SSS | 000, 0001, ..., 999 | | + * | | | SSSS | ... | 2 | + * | Milliseconds timestamp | 20 | T | 512969520900 | | + * | | | TT | ... | 2 | + * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | | + * | | | XX | -0800, +0530, Z | | + * | | | XXX | -08:00, +05:30, Z | | + * | | | XXXX | -0800, +0530, Z, +123456 | 2 | + * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | + * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | | + * | | | xx | -0800, +0530, +0000 | | + * | | | xxx | -08:00, +05:30, +00:00 | 2 | + * | | | xxxx | -0800, +0530, +0000, +123456 | | + * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | + * | Long localized date | NA | P | 05/29/1453 | 5,8 | + * | | | PP | May 29, 1453 | | + * | | | PPP | May 29th, 1453 | | + * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 | + * | Long localized time | NA | p | 12:00 AM | 5,8 | + * | | | pp | 12:00:00 AM | | + * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | | + * | | | PPpp | May 29, 1453, 12:00:00 AM | | + * | | | PPPpp | May 29th, 1453 at ... | | + * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 | + * Notes: + * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale + * are the same as "stand-alone" units, but are different in some languages. + * "Formatting" units are declined according to the rules of the language + * in the context of a date. "Stand-alone" units are always nominative singular. + * In `format` function, they will produce different result: + * + * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` + * + * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` + * + * `parse` will try to match both formatting and stand-alone units interchangably. + * + * 2. Any sequence of the identical letters is a pattern, unless it is escaped by + * the single quote characters (see below). + * If the sequence is longer than listed in table: + * - for numerical units (`yyyyyyyy`) `parse` will try to match a number + * as wide as the sequence + * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit. + * These variations are marked with "2" in the last column of the table. + * + * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. + * These tokens represent the shortest form of the quarter. + * + * 4. The main difference between `y` and `u` patterns are B.C. years: + * + * | Year | `y` | `u` | + * |------|-----|-----| + * | AC 1 | 1 | 1 | + * | BC 1 | 1 | 0 | + * | BC 2 | 2 | -1 | + * + * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`: + * + * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00` + * + * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00` + * + * while `uu` will just assign the year as is: + * + * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00` + * + * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00` + * + * The same difference is true for local and ISO week-numbering years (`Y` and `R`), + * except local week-numbering years are dependent on `options.weekStartsOn` + * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear} + * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}). + * + * 5. These patterns are not in the Unicode Technical Standard #35: + * - `i`: ISO day of week + * - `I`: ISO week of year + * - `R`: ISO week-numbering year + * - `o`: ordinal number modifier + * - `P`: long localized date + * - `p`: long localized time + * + * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. + * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr + * + * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month. + * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr + * + * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based + * on the given locale. + * + * using `en-US` locale: `P` => `MM/dd/yyyy` + * using `en-US` locale: `p` => `hh:mm a` + * using `pt-BR` locale: `P` => `dd/MM/yyyy` + * using `pt-BR` locale: `p` => `HH:mm` + * + * Values will be assigned to the date in the descending order of its unit's priority. + * Units of an equal priority overwrite each other in the order of appearance. + * + * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year), + * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing. + * + * `referenceDate` must be passed for correct work of the function. + * If you're not sure which `referenceDate` to supply, create a new instance of Date: + * `parse('02/11/2014', 'MM/dd/yyyy', new Date())` + * In this case parsing will be done in the context of the current date. + * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`, + * then `Invalid Date` will be returned. + * + * The result may vary by locale. + * + * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned. + * + * If parsing failed, `Invalid Date` will be returned. + * Invalid Date is a Date, whose time value is NaN. + * Time value of Date: http://es5.github.io/#x15.9.1.1 + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * - Old `parse` was renamed to `toDate`. + * Now `parse` is a new function which parses a string using a provided format. + * + * ```javascript + * // Before v2.0.0 + * parse('2016-01-01') + * + * // v2.0.0 onward (toDate no longer accepts a string) + * toDate(1392098430000) // Unix to timestamp + * toDate(new Date(2014, 1, 11, 11, 30, 30)) // Cloning the date + * parse('2016-01-01', 'yyyy-MM-dd', new Date()) + * ``` + * + * @param {String} dateString - the string to parse + * @param {String} formatString - the string of tokens + * @param {Date|Number} referenceDate - defines values missing from the parsed dateString + * @param {Object} [options] - an object with options. + * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale} + * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) + * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year + * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`; + * see: https://git.io/fxCyr + * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`; + * see: https://git.io/fxCyr + * @returns {Date} the parsed date + * @throws {TypeError} 3 arguments required + * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 + * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7 + * @throws {RangeError} `options.locale` must contain `match` property + * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr + * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr + * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr + * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr + * @throws {RangeError} format string contains an unescaped latin alphabet character + * + * @example + * // Parse 11 February 2014 from middle-endian format: + * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date()) + * //=> Tue Feb 11 2014 00:00:00 + * + * @example + * // Parse 28th of February in Esperanto locale in the context of 2010 year: + * import eo from 'date-fns/locale/eo' + * var result = parse('28-a de februaro', "do 'de' MMMM", new Date(2010, 0, 1), { + * locale: eo + * }) + * //=> Sun Feb 28 2010 00:00:00 + */ + +function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, dirtyOptions) { + requiredArgs(3, arguments); + var dateString = String(dirtyDateString); + var formatString = String(dirtyFormatString); + var options = dirtyOptions || {}; + var locale = options.locale || defaultLocale; + + if (!locale.match) { + throw new RangeError('locale must contain match property'); + } + + var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate; + var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate); + var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN + + if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { + throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively'); + } + + var localeWeekStartsOn = locale.options && locale.options.weekStartsOn; + var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn); + var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN + + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); + } + + if (formatString === '') { + if (dateString === '') { + return toDate(dirtyReferenceDate); + } else { + return new Date(NaN); + } + } + + var subFnOptions = { + firstWeekContainsDate: firstWeekContainsDate, + weekStartsOn: weekStartsOn, + locale: locale // If timezone isn't specified, it will be set to the system timezone + + }; + var setters = [{ + priority: TIMEZONE_UNIT_PRIORITY, + subPriority: -1, + set: dateToSystemTimezone, + index: 0 + }]; + var i; + var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) { + var firstCharacter = substring[0]; + + if (firstCharacter === 'p' || firstCharacter === 'P') { + var longFormatter = longFormatters$1[firstCharacter]; + return longFormatter(substring, locale.formatLong, subFnOptions); + } + + return substring; + }).join('').match(formattingTokensRegExp); + var usedTokens = []; + + for (i = 0; i < tokens.length; i++) { + var token = tokens[i]; + + if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) { + throwProtectedError(token, formatString, dirtyDateString); + } + + if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { + throwProtectedError(token, formatString, dirtyDateString); + } + + var firstCharacter = token[0]; + var parser = parsers$1[firstCharacter]; + + if (parser) { + var incompatibleTokens = parser.incompatibleTokens; + + if (Array.isArray(incompatibleTokens)) { + var incompatibleToken = void 0; + + for (var _i = 0; _i < usedTokens.length; _i++) { + var usedToken = usedTokens[_i].token; + + if (incompatibleTokens.indexOf(usedToken) !== -1 || usedToken === firstCharacter) { + incompatibleToken = usedTokens[_i]; + break; + } + } + + if (incompatibleToken) { + throw new RangeError("The format string mustn't contain `".concat(incompatibleToken.fullToken, "` and `").concat(token, "` at the same time")); + } + } else if (parser.incompatibleTokens === '*' && usedTokens.length) { + throw new RangeError("The format string mustn't contain `".concat(token, "` and any other token at the same time")); + } + + usedTokens.push({ + token: firstCharacter, + fullToken: token + }); + var parseResult = parser.parse(dateString, token, locale.match, subFnOptions); + + if (!parseResult) { + return new Date(NaN); + } + + setters.push({ + priority: parser.priority, + subPriority: parser.subPriority || 0, + set: parser.set, + validate: parser.validate, + value: parseResult.value, + index: setters.length + }); + dateString = parseResult.rest; + } else { + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`'); + } // Replace two single quote characters with one single quote character + + + if (token === "''") { + token = "'"; + } else if (firstCharacter === "'") { + token = cleanEscapedString(token); + } // Cut token from string, or, if string doesn't match the token, return Invalid Date + + + if (dateString.indexOf(token) === 0) { + dateString = dateString.slice(token.length); + } else { + return new Date(NaN); + } + } + } // Check if the remaining input contains something other than whitespace + + + if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) { + return new Date(NaN); + } + + var uniquePrioritySetters = setters.map(function (setter) { + return setter.priority; + }).sort(function (a, b) { + return b - a; + }).filter(function (priority, index, array) { + return array.indexOf(priority) === index; + }).map(function (priority) { + return setters.filter(function (setter) { + return setter.priority === priority; + }).sort(function (a, b) { + return b.subPriority - a.subPriority; + }); + }).map(function (setterArray) { + return setterArray[0]; + }); + var date = toDate(dirtyReferenceDate); + + if (isNaN(date)) { + return new Date(NaN); + } // Convert the date in system timezone to the same date in UTC+00:00 timezone. + // This ensures that when UTC functions will be implemented, locales will be compatible with them. + // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37 + + + var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date)); + var flags = {}; + + for (i = 0; i < uniquePrioritySetters.length; i++) { + var setter = uniquePrioritySetters[i]; + + if (setter.validate && !setter.validate(utcDate, setter.value, subFnOptions)) { + return new Date(NaN); + } + + var result = setter.set(utcDate, flags, setter.value, subFnOptions); // Result is tuple (date, flags) + + if (result[0]) { + utcDate = result[0]; + assign(flags, result[1]); // Result is date + } else { + utcDate = result; + } + } + + return utcDate; +} + +function dateToSystemTimezone(date, flags) { + if (flags.timestampIsSet) { + return date; + } + + var convertedDate = new Date(0); + convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()); + convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()); + return convertedDate; +} + +function cleanEscapedString(input) { + return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'"); +} + +/** + * @name startOfHour + * @category Hour Helpers + * @summary Return the start of an hour for the given date. + * + * @description + * Return the start of an hour for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the start of an hour + * @throws {TypeError} 1 argument required + * + * @example + * // The start of an hour for 2 September 2014 11:55:00: + * const result = startOfHour(new Date(2014, 8, 2, 11, 55)) + * //=> Tue Sep 02 2014 11:00:00 + */ + +function startOfHour(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setMinutes(0, 0, 0); + return date; +} + +/** + * @name startOfMinute + * @category Minute Helpers + * @summary Return the start of a minute for the given date. + * + * @description + * Return the start of a minute for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the start of a minute + * @throws {TypeError} 1 argument required + * + * @example + * // The start of a minute for 1 December 2014 22:15:45.400: + * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400)) + * //=> Mon Dec 01 2014 22:15:00 + */ + +function startOfMinute(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setSeconds(0, 0); + return date; +} + +/** + * @name startOfSecond + * @category Second Helpers + * @summary Return the start of a second for the given date. + * + * @description + * Return the start of a second for the given date. + * The result will be in the local timezone. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the original date + * @returns {Date} the start of a second + * @throws {TypeError} 1 argument required + * + * @example + * // The start of a second for 1 December 2014 22:15:45.400: + * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400)) + * //=> Mon Dec 01 2014 22:15:45.000 + */ + +function startOfSecond(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setMilliseconds(0); + return date; +} + +var MILLISECONDS_IN_HOUR = 3600000; +var MILLISECONDS_IN_MINUTE = 60000; +var DEFAULT_ADDITIONAL_DIGITS = 2; +var patterns = { + dateTimeDelimiter: /[T ]/, + timeZoneDelimiter: /[Z ]/i, + timezone: /([Z+-].*)$/ +}; +var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/; +var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/; +var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/; +/** + * @name parseISO + * @category Common Helpers + * @summary Parse ISO string + * + * @description + * Parse the given string in ISO 8601 format and return an instance of Date. + * + * Function accepts complete ISO 8601 formats as well as partial implementations. + * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601 + * + * If the argument isn't a string, the function cannot parse the string or + * the values are invalid, it returns Invalid Date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * - The previous `parse` implementation was renamed to `parseISO`. + * + * ```javascript + * // Before v2.0.0 + * parse('2016-01-01') + * + * // v2.0.0 onward + * parseISO('2016-01-01') + * ``` + * + * - `parseISO` now validates separate date and time values in ISO-8601 strings + * and returns `Invalid Date` if the date is invalid. + * + * ```javascript + * parseISO('2018-13-32') + * //=> Invalid Date + * ``` + * + * - `parseISO` now doesn't fall back to `new Date` constructor + * if it fails to parse a string argument. Instead, it returns `Invalid Date`. + * + * @param {String} argument - the value to convert + * @param {Object} [options] - an object with options. + * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format + * @returns {Date} the parsed date in the local time zone + * @throws {TypeError} 1 argument required + * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2 + * + * @example + * // Convert string '2014-02-11T11:30:30' to date: + * var result = parseISO('2014-02-11T11:30:30') + * //=> Tue Feb 11 2014 11:30:30 + * + * @example + * // Convert string '+02014101' to date, + * // if the additional number of digits in the extended year format is 1: + * var result = parseISO('+02014101', { additionalDigits: 1 }) + * //=> Fri Apr 11 2014 00:00:00 + */ + +function parseISO(argument, dirtyOptions) { + requiredArgs(1, arguments); + var options = dirtyOptions || {}; + var additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : toInteger(options.additionalDigits); + + if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) { + throw new RangeError('additionalDigits must be 0, 1 or 2'); + } + + if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) { + return new Date(NaN); + } + + var dateStrings = splitDateString(argument); + var date; + + if (dateStrings.date) { + var parseYearResult = parseYear(dateStrings.date, additionalDigits); + date = parseDate(parseYearResult.restDateString, parseYearResult.year); + } + + if (isNaN(date) || !date) { + return new Date(NaN); + } + + var timestamp = date.getTime(); + var time = 0; + var offset; + + if (dateStrings.time) { + time = parseTime(dateStrings.time); + + if (isNaN(time) || time === null) { + return new Date(NaN); + } + } + + if (dateStrings.timezone) { + offset = parseTimezone(dateStrings.timezone); + + if (isNaN(offset)) { + return new Date(NaN); + } + } else { + var dirtyDate = new Date(timestamp + time); // js parsed string assuming it's in UTC timezone + // but we need it to be parsed in our timezone + // so we use utc values to build date in our timezone. + // Year values from 0 to 99 map to the years 1900 to 1999 + // so set year explicitly with setFullYear. + + var result = new Date(0); + result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate()); + result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds()); + return result; + } + + return new Date(timestamp + time + offset); +} + +function splitDateString(dateString) { + var dateStrings = {}; + var array = dateString.split(patterns.dateTimeDelimiter); + var timeString; // The regex match should only return at maximum two array elements. + // [date], [time], or [date, time]. + + if (array.length > 2) { + return dateStrings; + } + + if (/:/.test(array[0])) { + dateStrings.date = null; + timeString = array[0]; + } else { + dateStrings.date = array[0]; + timeString = array[1]; + + if (patterns.timeZoneDelimiter.test(dateStrings.date)) { + dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]; + timeString = dateString.substr(dateStrings.date.length, dateString.length); + } + } + + if (timeString) { + var token = patterns.timezone.exec(timeString); + + if (token) { + dateStrings.time = timeString.replace(token[1], ''); + dateStrings.timezone = token[1]; + } else { + dateStrings.time = timeString; + } + } + + return dateStrings; +} + +function parseYear(dateString, additionalDigits) { + var regex = new RegExp('^(?:(\\d{4}|[+-]\\d{' + (4 + additionalDigits) + '})|(\\d{2}|[+-]\\d{' + (2 + additionalDigits) + '})$)'); + var captures = dateString.match(regex); // Invalid ISO-formatted year + + if (!captures) return { + year: null + }; + var year = captures[1] && parseInt(captures[1]); + var century = captures[2] && parseInt(captures[2]); + return { + year: century == null ? year : century * 100, + restDateString: dateString.slice((captures[1] || captures[2]).length) + }; +} + +function parseDate(dateString, year) { + // Invalid ISO-formatted year + if (year === null) return null; + var captures = dateString.match(dateRegex); // Invalid ISO-formatted string + + if (!captures) return null; + var isWeekDate = !!captures[4]; + var dayOfYear = parseDateUnit(captures[1]); + var month = parseDateUnit(captures[2]) - 1; + var day = parseDateUnit(captures[3]); + var week = parseDateUnit(captures[4]); + var dayOfWeek = parseDateUnit(captures[5]) - 1; + + if (isWeekDate) { + if (!validateWeekDate(year, week, dayOfWeek)) { + return new Date(NaN); + } + + return dayOfISOWeekYear(year, week, dayOfWeek); + } else { + var date = new Date(0); + + if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) { + return new Date(NaN); + } + + date.setUTCFullYear(year, month, Math.max(dayOfYear, day)); + return date; + } +} + +function parseDateUnit(value) { + return value ? parseInt(value) : 1; +} + +function parseTime(timeString) { + var captures = timeString.match(timeRegex); + if (!captures) return null; // Invalid ISO-formatted time + + var hours = parseTimeUnit(captures[1]); + var minutes = parseTimeUnit(captures[2]); + var seconds = parseTimeUnit(captures[3]); + + if (!validateTime(hours, minutes, seconds)) { + return NaN; + } + + return hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000; +} + +function parseTimeUnit(value) { + return value && parseFloat(value.replace(',', '.')) || 0; +} + +function parseTimezone(timezoneString) { + if (timezoneString === 'Z') return 0; + var captures = timezoneString.match(timezoneRegex); + if (!captures) return 0; + var sign = captures[1] === '+' ? -1 : 1; + var hours = parseInt(captures[2]); + var minutes = captures[3] && parseInt(captures[3]) || 0; + + if (!validateTimezone(hours, minutes)) { + return NaN; + } + + return sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE); +} + +function dayOfISOWeekYear(isoWeekYear, week, day) { + var date = new Date(0); + date.setUTCFullYear(isoWeekYear, 0, 4); + var fourthOfJanuaryDay = date.getUTCDay() || 7; + var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay; + date.setUTCDate(date.getUTCDate() + diff); + return date; +} // Validation functions +// February is null to handle the leap year (using ||) + + +var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + +function isLeapYearIndex(year) { + return year % 400 === 0 || year % 4 === 0 && year % 100; +} + +function validateDate(year, month, date) { + return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28)); +} + +function validateDayOfYearDate(year, dayOfYear) { + return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365); +} + +function validateWeekDate(_year, week, day) { + return week >= 1 && week <= 53 && day >= 0 && day <= 6; +} + +function validateTime(hours, minutes, seconds) { + if (hours === 24) { + return minutes === 0 && seconds === 0; + } + + return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25; +} + +function validateTimezone(_hours, minutes) { + return minutes >= 0 && minutes <= 59; +} + +const FORMATS = { + datetime: 'MMM d, yyyy, h:mm:ss aaaa', + millisecond: 'h:mm:ss.SSS aaaa', + second: 'h:mm:ss aaaa', + minute: 'h:mm aaaa', + hour: 'ha', + day: 'MMM d', + week: 'PP', + month: 'MMM yyyy', + quarter: 'qqq - yyyy', + year: 'yyyy' +}; + +chart_js._adapters._date.override({ + _id: 'date-fns', // DEBUG + + formats: function() { + return FORMATS; + }, + + parse: function(value, fmt) { + if (value === null || typeof value === 'undefined') { + return null; + } + const type = typeof value; + if (type === 'number' || value instanceof Date) { + value = toDate(value); + } else if (type === 'string') { + if (typeof fmt === 'string') { + value = parse(value, fmt, new Date(), this.options); + } else { + value = parseISO(value, this.options); + } + } + return isValid(value) ? value.getTime() : null; + }, + + format: function(time, fmt) { + return format(time, fmt, this.options); + }, + + add: function(time, amount, unit) { + switch (unit) { + case 'millisecond': return addMilliseconds(time, amount); + case 'second': return addSeconds(time, amount); + case 'minute': return addMinutes(time, amount); + case 'hour': return addHours(time, amount); + case 'day': return addDays(time, amount); + case 'week': return addWeeks(time, amount); + case 'month': return addMonths(time, amount); + case 'quarter': return addQuarters(time, amount); + case 'year': return addYears(time, amount); + default: return time; + } + }, + + diff: function(max, min, unit) { + switch (unit) { + case 'millisecond': return differenceInMilliseconds(max, min); + case 'second': return differenceInSeconds(max, min); + case 'minute': return differenceInMinutes(max, min); + case 'hour': return differenceInHours(max, min); + case 'day': return differenceInDays(max, min); + case 'week': return differenceInWeeks(max, min); + case 'month': return differenceInMonths(max, min); + case 'quarter': return differenceInQuarters(max, min); + case 'year': return differenceInYears(max, min); + default: return 0; + } + }, + + startOf: function(time, unit, weekday) { + switch (unit) { + case 'second': return startOfSecond(time); + case 'minute': return startOfMinute(time); + case 'hour': return startOfHour(time); + case 'day': return startOfDay(time); + case 'week': return startOfWeek(time); + case 'isoWeek': return startOfWeek(time, {weekStartsOn: +weekday}); + case 'month': return startOfMonth(time); + case 'quarter': return startOfQuarter(time); + case 'year': return startOfYear(time); + default: return time; + } + }, + + endOf: function(time, unit) { + switch (unit) { + case 'second': return endOfSecond(time); + case 'minute': return endOfMinute(time); + case 'hour': return endOfHour(time); + case 'day': return endOfDay(time); + case 'week': return endOfWeek(time); + case 'month': return endOfMonth(time); + case 'quarter': return endOfQuarter(time); + case 'year': return endOfYear(time); + default: return time; + } + } +}); + +})); diff --git a/web/js/vendor/chartjs-adapter-date-fns.bundle.min.js b/web/js/vendor/chartjs-adapter-date-fns.bundle.min.js new file mode 100644 index 0000000..37bffe6 --- /dev/null +++ b/web/js/vendor/chartjs-adapter-date-fns.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * chartjs-adapter-date-fns v3.0.0 + * https://www.chartjs.org + * (c) 2022 chartjs-adapter-date-fns Contributors + * Released under the MIT license + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("chart.js")):"function"==typeof define&&define.amd?define(["chart.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Chart)}(this,(function(t){"use strict";function e(t){if(null===t||!0===t||!1===t)return NaN;var e=Number(t);return isNaN(e)?e:e<0?Math.ceil(e):Math.floor(e)}function r(t,e){if(e.length1?"s":"")+" required, but only "+e.length+" present")}function n(t){r(1,arguments);var e=Object.prototype.toString.call(t);return t instanceof Date||"object"==typeof t&&"[object Date]"===e?new Date(t.getTime()):"number"==typeof t||"[object Number]"===e?new Date(t):("string"!=typeof t&&"[object String]"!==e||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}function a(t,a){r(2,arguments);var i=n(t),o=e(a);return isNaN(o)?new Date(NaN):o?(i.setDate(i.getDate()+o),i):i}function i(t,a){r(2,arguments);var i=n(t),o=e(a);if(isNaN(o))return new Date(NaN);if(!o)return i;var u=i.getDate(),s=new Date(i.getTime());s.setMonth(i.getMonth()+o+1,0);var c=s.getDate();return u>=c?s:(i.setFullYear(s.getFullYear(),s.getMonth(),u),i)}function o(t,a){r(2,arguments);var i=n(t).getTime(),o=e(a);return new Date(i+o)}var u=36e5;function s(t,a){r(1,arguments);var i=a||{},o=i.locale,u=o&&o.options&&o.options.weekStartsOn,s=null==u?0:e(u),c=null==i.weekStartsOn?s:e(i.weekStartsOn);if(!(c>=0&&c<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=n(t),l=d.getDay(),f=(l0?1:o}function m(t){r(1,arguments);var e=n(t);return!isNaN(e)}function w(t,e){r(2,arguments);var a=n(t),i=n(e),o=a.getFullYear()-i.getFullYear(),u=a.getMonth()-i.getMonth();return 12*o+u}function g(t,e){r(2,arguments);var a=n(t),i=n(e);return a.getFullYear()-i.getFullYear()}function v(t,e){var r=t.getFullYear()-e.getFullYear()||t.getMonth()-e.getMonth()||t.getDate()-e.getDate()||t.getHours()-e.getHours()||t.getMinutes()-e.getMinutes()||t.getSeconds()-e.getSeconds()||t.getMilliseconds()-e.getMilliseconds();return r<0?-1:r>0?1:r}function y(t,e){r(2,arguments);var a=n(t),i=n(e),o=v(a,i),u=Math.abs(f(a,i));a.setDate(a.getDate()-o*u);var s=v(a,i)===-o,c=o*(u-s);return 0===c?0:c}function b(t,e){r(2,arguments);var a=n(t),i=n(e);return a.getTime()-i.getTime()}var T=36e5;function p(t){r(1,arguments);var e=n(t);return e.setHours(23,59,59,999),e}function C(t){r(1,arguments);var e=n(t),a=e.getMonth();return e.setFullYear(e.getFullYear(),a+1,0),e.setHours(23,59,59,999),e}function M(t){r(1,arguments);var e=n(t);return p(e).getTime()===C(e).getTime()}function D(t,e){r(2,arguments);var a,i=n(t),o=n(e),u=h(i,o),s=Math.abs(w(i,o));if(s<1)a=0;else{1===i.getMonth()&&i.getDate()>27&&i.setDate(30),i.setMonth(i.getMonth()-u*s);var c=h(i,o)===-u;M(n(t))&&1===s&&1===h(t,o)&&(c=!1),a=u*(s-c)}return 0===a?0:a}var x={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function k(t){return function(e){var r=e||{},n=r.width?String(r.width):t.defaultWidth;return t.formats[n]||t.formats[t.defaultWidth]}}var U={date:k({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:k({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:k({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},Y={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function N(t){return function(e,r){var n,a=r||{};if("formatting"===(a.context?String(a.context):"standalone")&&t.formattingValues){var i=t.defaultFormattingWidth||t.defaultWidth,o=a.width?String(a.width):i;n=t.formattingValues[o]||t.formattingValues[i]}else{var u=t.defaultWidth,s=a.width?String(a.width):t.defaultWidth;n=t.values[s]||t.values[u]}return n[t.argumentCallback?t.argumentCallback(e):e]}}function S(t){return function(e,r){var n=String(e),a=r||{},i=a.width,o=i&&t.matchPatterns[i]||t.matchPatterns[t.defaultMatchWidth],u=n.match(o);if(!u)return null;var s,c=u[0],d=i&&t.parsePatterns[i]||t.parsePatterns[t.defaultParseWidth];return s="[object Array]"===Object.prototype.toString.call(d)?function(t,e){for(var r=0;r0?"in "+n:n+" ago":n},formatLong:U,formatRelative:function(t,e,r,n){return Y[t]},localize:{ordinalNumber:function(t,e){var r=Number(t),n=r%100;if(n>20||n<10)switch(n%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},era:N({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:N({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(t){return Number(t)-1}}),month:N({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:N({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:N({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(P={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(t){return parseInt(t,10)}},function(t,e){var r=String(t),n=e||{},a=r.match(P.matchPattern);if(!a)return null;var i=a[0],o=r.match(P.parsePattern);if(!o)return null;var u=P.valueCallback?P.valueCallback(o[0]):o[0];return{value:u=n.valueCallback?n.valueCallback(u):u,rest:r.slice(i.length)}}),era:S({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:S({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(t){return t+1}}),month:S({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:S({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:S({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};function H(t,n){r(2,arguments);var a=e(n);return o(t,-a)}function E(t,e){for(var r=t<0?"-":"",n=Math.abs(t).toString();n.length0?r:1-r;return E("yy"===e?n%100:n,e.length)},M:function(t,e){var r=t.getUTCMonth();return"M"===e?String(r+1):E(r+1,2)},d:function(t,e){return E(t.getUTCDate(),e.length)},a:function(t,e){var r=t.getUTCHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return"am"===r?"a.m.":"p.m."}},h:function(t,e){return E(t.getUTCHours()%12||12,e.length)},H:function(t,e){return E(t.getUTCHours(),e.length)},m:function(t,e){return E(t.getUTCMinutes(),e.length)},s:function(t,e){return E(t.getUTCSeconds(),e.length)},S:function(t,e){var r=e.length,n=t.getUTCMilliseconds();return E(Math.floor(n*Math.pow(10,r-3)),e.length)}},F=864e5;function W(t){r(1,arguments);var e=1,a=n(t),i=a.getUTCDay(),o=(i=o.getTime()?a+1:e.getTime()>=s.getTime()?a:a-1}function Q(t){r(1,arguments);var e=L(t),n=new Date(0);n.setUTCFullYear(e,0,4),n.setUTCHours(0,0,0,0);var a=W(n);return a}var R=6048e5;function I(t){r(1,arguments);var e=n(t),a=W(e).getTime()-Q(e).getTime();return Math.round(a/R)+1}function G(t,a){r(1,arguments);var i=a||{},o=i.locale,u=o&&o.options&&o.options.weekStartsOn,s=null==u?0:e(u),c=null==i.weekStartsOn?s:e(i.weekStartsOn);if(!(c>=0&&c<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=n(t),l=d.getUTCDay(),f=(l=1&&l<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var f=new Date(0);f.setUTCFullYear(o+1,0,l),f.setUTCHours(0,0,0,0);var h=G(f,a),m=new Date(0);m.setUTCFullYear(o,0,l),m.setUTCHours(0,0,0,0);var w=G(m,a);return i.getTime()>=h.getTime()?o+1:i.getTime()>=w.getTime()?o:o-1}function j(t,n){r(1,arguments);var a=n||{},i=a.locale,o=i&&i.options&&i.options.firstWeekContainsDate,u=null==o?1:e(o),s=null==a.firstWeekContainsDate?u:e(a.firstWeekContainsDate),c=X(t,n),d=new Date(0);d.setUTCFullYear(c,0,s),d.setUTCHours(0,0,0,0);var l=G(d,n);return l}var B=6048e5;function z(t,e){r(1,arguments);var a=n(t),i=G(a,e).getTime()-j(a,e).getTime();return Math.round(i/B)+1}var A="midnight",Z="noon",K="morning",$="afternoon",_="evening",J="night",V={G:function(t,e,r){var n=t.getUTCFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return r.era(n,{width:"abbreviated"});case"GGGGG":return r.era(n,{width:"narrow"});default:return r.era(n,{width:"wide"})}},y:function(t,e,r){if("yo"===e){var n=t.getUTCFullYear(),a=n>0?n:1-n;return r.ordinalNumber(a,{unit:"year"})}return O.y(t,e)},Y:function(t,e,r,n){var a=X(t,n),i=a>0?a:1-a;return"YY"===e?E(i%100,2):"Yo"===e?r.ordinalNumber(i,{unit:"year"}):E(i,e.length)},R:function(t,e){return E(L(t),e.length)},u:function(t,e){return E(t.getUTCFullYear(),e.length)},Q:function(t,e,r){var n=Math.ceil((t.getUTCMonth()+1)/3);switch(e){case"Q":return String(n);case"QQ":return E(n,2);case"Qo":return r.ordinalNumber(n,{unit:"quarter"});case"QQQ":return r.quarter(n,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(n,{width:"narrow",context:"formatting"});default:return r.quarter(n,{width:"wide",context:"formatting"})}},q:function(t,e,r){var n=Math.ceil((t.getUTCMonth()+1)/3);switch(e){case"q":return String(n);case"qq":return E(n,2);case"qo":return r.ordinalNumber(n,{unit:"quarter"});case"qqq":return r.quarter(n,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(n,{width:"narrow",context:"standalone"});default:return r.quarter(n,{width:"wide",context:"standalone"})}},M:function(t,e,r){var n=t.getUTCMonth();switch(e){case"M":case"MM":return O.M(t,e);case"Mo":return r.ordinalNumber(n+1,{unit:"month"});case"MMM":return r.month(n,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(n,{width:"narrow",context:"formatting"});default:return r.month(n,{width:"wide",context:"formatting"})}},L:function(t,e,r){var n=t.getUTCMonth();switch(e){case"L":return String(n+1);case"LL":return E(n+1,2);case"Lo":return r.ordinalNumber(n+1,{unit:"month"});case"LLL":return r.month(n,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(n,{width:"narrow",context:"standalone"});default:return r.month(n,{width:"wide",context:"standalone"})}},w:function(t,e,r,n){var a=z(t,n);return"wo"===e?r.ordinalNumber(a,{unit:"week"}):E(a,e.length)},I:function(t,e,r){var n=I(t);return"Io"===e?r.ordinalNumber(n,{unit:"week"}):E(n,e.length)},d:function(t,e,r){return"do"===e?r.ordinalNumber(t.getUTCDate(),{unit:"date"}):O.d(t,e)},D:function(t,e,a){var i=function(t){r(1,arguments);var e=n(t),a=e.getTime();e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0);var i=e.getTime(),o=a-i;return Math.floor(o/F)+1}(t);return"Do"===e?a.ordinalNumber(i,{unit:"dayOfYear"}):E(i,e.length)},E:function(t,e,r){var n=t.getUTCDay();switch(e){case"E":case"EE":case"EEE":return r.day(n,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(n,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},e:function(t,e,r,n){var a=t.getUTCDay(),i=(a-n.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return E(i,2);case"eo":return r.ordinalNumber(i,{unit:"day"});case"eee":return r.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(a,{width:"short",context:"formatting"});default:return r.day(a,{width:"wide",context:"formatting"})}},c:function(t,e,r,n){var a=t.getUTCDay(),i=(a-n.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return E(i,e.length);case"co":return r.ordinalNumber(i,{unit:"day"});case"ccc":return r.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(a,{width:"narrow",context:"standalone"});case"cccccc":return r.day(a,{width:"short",context:"standalone"});default:return r.day(a,{width:"wide",context:"standalone"})}},i:function(t,e,r){var n=t.getUTCDay(),a=0===n?7:n;switch(e){case"i":return String(a);case"ii":return E(a,e.length);case"io":return r.ordinalNumber(a,{unit:"day"});case"iii":return r.day(n,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(n,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},a:function(t,e,r){var n=t.getUTCHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(t,e,r){var n,a=t.getUTCHours();switch(n=12===a?Z:0===a?A:a/12>=1?"pm":"am",e){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(t,e,r){var n,a=t.getUTCHours();switch(n=a>=17?_:a>=12?$:a>=4?K:J,e){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(t,e,r){if("ho"===e){var n=t.getUTCHours()%12;return 0===n&&(n=12),r.ordinalNumber(n,{unit:"hour"})}return O.h(t,e)},H:function(t,e,r){return"Ho"===e?r.ordinalNumber(t.getUTCHours(),{unit:"hour"}):O.H(t,e)},K:function(t,e,r){var n=t.getUTCHours()%12;return"Ko"===e?r.ordinalNumber(n,{unit:"hour"}):E(n,e.length)},k:function(t,e,r){var n=t.getUTCHours();return 0===n&&(n=24),"ko"===e?r.ordinalNumber(n,{unit:"hour"}):E(n,e.length)},m:function(t,e,r){return"mo"===e?r.ordinalNumber(t.getUTCMinutes(),{unit:"minute"}):O.m(t,e)},s:function(t,e,r){return"so"===e?r.ordinalNumber(t.getUTCSeconds(),{unit:"second"}):O.s(t,e)},S:function(t,e){return O.S(t,e)},X:function(t,e,r,n){var a=(n._originalDate||t).getTimezoneOffset();if(0===a)return"Z";switch(e){case"X":return et(a);case"XXXX":case"XX":return rt(a);default:return rt(a,":")}},x:function(t,e,r,n){var a=(n._originalDate||t).getTimezoneOffset();switch(e){case"x":return et(a);case"xxxx":case"xx":return rt(a);default:return rt(a,":")}},O:function(t,e,r,n){var a=(n._originalDate||t).getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+tt(a,":");default:return"GMT"+rt(a,":")}},z:function(t,e,r,n){var a=(n._originalDate||t).getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+tt(a,":");default:return"GMT"+rt(a,":")}},t:function(t,e,r,n){var a=n._originalDate||t;return E(Math.floor(a.getTime()/1e3),e.length)},T:function(t,e,r,n){return E((n._originalDate||t).getTime(),e.length)}};function tt(t,e){var r=t>0?"-":"+",n=Math.abs(t),a=Math.floor(n/60),i=n%60;if(0===i)return r+String(a);var o=e||"";return r+String(a)+o+E(i,2)}function et(t,e){return t%60==0?(t>0?"-":"+")+E(Math.abs(t)/60,2):rt(t,e)}function rt(t,e){var r=e||"",n=t>0?"-":"+",a=Math.abs(t);return n+E(Math.floor(a/60),2)+r+E(a%60,2)}var nt=V;function at(t,e){switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});default:return e.date({width:"full"})}}function it(t,e){switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});default:return e.time({width:"full"})}}var ot={p:it,P:function(t,e){var r,n=t.match(/(P+)(p+)?/),a=n[1],i=n[2];if(!i)return at(t,e);switch(a){case"P":r=e.dateTime({width:"short"});break;case"PP":r=e.dateTime({width:"medium"});break;case"PPP":r=e.dateTime({width:"long"});break;default:r=e.dateTime({width:"full"})}return r.replace("{{date}}",at(a,e)).replace("{{time}}",it(i,e))}},ut=ot,st=["D","DD"],ct=["YY","YYYY"];function dt(t){return-1!==st.indexOf(t)}function lt(t){return-1!==ct.indexOf(t)}function ft(t,e,r){if("YYYY"===t)throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(e,"`) for formatting years to the input `").concat(r,"`; see: https://git.io/fxCyr"));if("YY"===t)throw new RangeError("Use `yy` instead of `YY` (in `".concat(e,"`) for formatting years to the input `").concat(r,"`; see: https://git.io/fxCyr"));if("D"===t)throw new RangeError("Use `d` instead of `D` (in `".concat(e,"`) for formatting days of the month to the input `").concat(r,"`; see: https://git.io/fxCyr"));if("DD"===t)throw new RangeError("Use `dd` instead of `DD` (in `".concat(e,"`) for formatting days of the month to the input `").concat(r,"`; see: https://git.io/fxCyr"))}var ht=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,mt=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,wt=/^'([^]*?)'?$/,gt=/''/g,vt=/[a-zA-Z]/;function yt(t){return t.match(wt)[1].replace(gt,"'")}function bt(t,e){if(null==t)throw new TypeError("assign requires that input parameter not be null or undefined");for(var r in e=e||{})e.hasOwnProperty(r)&&(t[r]=e[r]);return t}function Tt(t,a,i){r(2,arguments);var o=i||{},u=o.locale,s=u&&u.options&&u.options.weekStartsOn,c=null==s?0:e(s),d=null==o.weekStartsOn?c:e(o.weekStartsOn);if(!(d>=0&&d<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var l=n(t),f=e(a),h=l.getUTCDay(),m=f%7,w=(m+7)%7,g=(w0,a=n?e:1-e;if(a<=50)r=t||100;else{var i=a+50;r=t+100*Math.floor(i/100)-(t>=i%100?100:0)}return n?r:1-r}var Jt=[31,28,31,30,31,30,31,31,30,31,30,31],Vt=[31,29,31,30,31,30,31,31,30,31,30,31];function te(t){return t%400==0||t%4==0&&t%100!=0}var ee={G:{priority:140,parse:function(t,e,r,n){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}},set:function(t,e,r,n){return e.era=r,t.setUTCFullYear(r,0,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["R","u","t","T"]},y:{priority:130,parse:function(t,e,r,n){var a=function(t){return{year:t,isTwoDigitYear:"yy"===e}};switch(e){case"y":return Zt(4,t,a);case"yo":return r.ordinalNumber(t,{unit:"year",valueCallback:a});default:return Zt(e.length,t,a)}},validate:function(t,e,r){return e.isTwoDigitYear||e.year>0},set:function(t,e,r,n){var a=t.getUTCFullYear();if(r.isTwoDigitYear){var i=_t(r.year,a);return t.setUTCFullYear(i,0,1),t.setUTCHours(0,0,0,0),t}var o="era"in e&&1!==e.era?1-r.year:r.year;return t.setUTCFullYear(o,0,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","u","w","I","i","e","c","t","T"]},Y:{priority:130,parse:function(t,e,r,n){var a=function(t){return{year:t,isTwoDigitYear:"YY"===e}};switch(e){case"Y":return Zt(4,t,a);case"Yo":return r.ordinalNumber(t,{unit:"year",valueCallback:a});default:return Zt(e.length,t,a)}},validate:function(t,e,r){return e.isTwoDigitYear||e.year>0},set:function(t,e,r,n){var a=X(t,n);if(r.isTwoDigitYear){var i=_t(r.year,a);return t.setUTCFullYear(i,0,n.firstWeekContainsDate),t.setUTCHours(0,0,0,0),G(t,n)}var o="era"in e&&1!==e.era?1-r.year:r.year;return t.setUTCFullYear(o,0,n.firstWeekContainsDate),t.setUTCHours(0,0,0,0),G(t,n)},incompatibleTokens:["y","R","u","Q","q","M","L","I","d","D","i","t","T"]},R:{priority:130,parse:function(t,e,r,n){return Kt("R"===e?4:e.length,t)},set:function(t,e,r,n){var a=new Date(0);return a.setUTCFullYear(r,0,4),a.setUTCHours(0,0,0,0),W(a)},incompatibleTokens:["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"]},u:{priority:130,parse:function(t,e,r,n){return Kt("u"===e?4:e.length,t)},set:function(t,e,r,n){return t.setUTCFullYear(r,0,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["G","y","Y","R","w","I","i","e","c","t","T"]},Q:{priority:120,parse:function(t,e,r,n){switch(e){case"Q":case"QQ":return Zt(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}},validate:function(t,e,r){return e>=1&&e<=4},set:function(t,e,r,n){return t.setUTCMonth(3*(r-1),1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"]},q:{priority:120,parse:function(t,e,r,n){switch(e){case"q":case"qq":return Zt(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}},validate:function(t,e,r){return e>=1&&e<=4},set:function(t,e,r,n){return t.setUTCMonth(3*(r-1),1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"]},M:{priority:110,parse:function(t,e,r,n){var a=function(t){return t-1};switch(e){case"M":return Bt(pt,t,a);case"MM":return Zt(2,t,a);case"Mo":return r.ordinalNumber(t,{unit:"month",valueCallback:a});case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}},validate:function(t,e,r){return e>=0&&e<=11},set:function(t,e,r,n){return t.setUTCMonth(r,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]},L:{priority:110,parse:function(t,e,r,n){var a=function(t){return t-1};switch(e){case"L":return Bt(pt,t,a);case"LL":return Zt(2,t,a);case"Lo":return r.ordinalNumber(t,{unit:"month",valueCallback:a});case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}},validate:function(t,e,r){return e>=0&&e<=11},set:function(t,e,r,n){return t.setUTCMonth(r,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","Q","M","w","I","D","i","e","c","t","T"]},w:{priority:100,parse:function(t,e,r,n){switch(e){case"w":return Bt(Dt,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=1&&e<=53},set:function(t,a,i,o){return G(function(t,a,i){r(2,arguments);var o=n(t),u=e(a),s=z(o,i)-u;return o.setUTCDate(o.getUTCDate()-7*s),o}(t,i,o),o)},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","i","t","T"]},I:{priority:100,parse:function(t,e,r,n){switch(e){case"I":return Bt(Dt,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=1&&e<=53},set:function(t,a,i,o){return W(function(t,a){r(2,arguments);var i=n(t),o=e(a),u=I(i)-o;return i.setUTCDate(i.getUTCDate()-7*u),i}(t,i,o),o)},incompatibleTokens:["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"]},d:{priority:90,subPriority:1,parse:function(t,e,r,n){switch(e){case"d":return Bt(Ct,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return Zt(e.length,t)}},validate:function(t,e,r){var n=te(t.getUTCFullYear()),a=t.getUTCMonth();return n?e>=1&&e<=Vt[a]:e>=1&&e<=Jt[a]},set:function(t,e,r,n){return t.setUTCDate(r),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","Q","w","I","D","i","e","c","t","T"]},D:{priority:90,subPriority:1,parse:function(t,e,r,n){switch(e){case"D":case"DD":return Bt(Mt,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return Zt(e.length,t)}},validate:function(t,e,r){return te(t.getUTCFullYear())?e>=1&&e<=366:e>=1&&e<=365},set:function(t,e,r,n){return t.setUTCMonth(0,r),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"]},E:{priority:90,parse:function(t,e,r,n){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}},validate:function(t,e,r){return e>=0&&e<=6},set:function(t,e,r,n){return(t=Tt(t,r,n)).setUTCHours(0,0,0,0),t},incompatibleTokens:["D","i","e","c","t","T"]},e:{priority:90,parse:function(t,e,r,n){var a=function(t){var e=7*Math.floor((t-1)/7);return(t+n.weekStartsOn+6)%7+e};switch(e){case"e":case"ee":return Zt(e.length,t,a);case"eo":return r.ordinalNumber(t,{unit:"day",valueCallback:a});case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}},validate:function(t,e,r){return e>=0&&e<=6},set:function(t,e,r,n){return(t=Tt(t,r,n)).setUTCHours(0,0,0,0),t},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"]},c:{priority:90,parse:function(t,e,r,n){var a=function(t){var e=7*Math.floor((t-1)/7);return(t+n.weekStartsOn+6)%7+e};switch(e){case"c":case"cc":return Zt(e.length,t,a);case"co":return r.ordinalNumber(t,{unit:"day",valueCallback:a});case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}},validate:function(t,e,r){return e>=0&&e<=6},set:function(t,e,r,n){return(t=Tt(t,r,n)).setUTCHours(0,0,0,0),t},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"]},i:{priority:90,parse:function(t,e,r,n){var a=function(t){return 0===t?7:t};switch(e){case"i":case"ii":return Zt(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return r.day(t,{width:"abbreviated",context:"formatting",valueCallback:a})||r.day(t,{width:"short",context:"formatting",valueCallback:a})||r.day(t,{width:"narrow",context:"formatting",valueCallback:a});case"iiiii":return r.day(t,{width:"narrow",context:"formatting",valueCallback:a});case"iiiiii":return r.day(t,{width:"short",context:"formatting",valueCallback:a})||r.day(t,{width:"narrow",context:"formatting",valueCallback:a});default:return r.day(t,{width:"wide",context:"formatting",valueCallback:a})||r.day(t,{width:"abbreviated",context:"formatting",valueCallback:a})||r.day(t,{width:"short",context:"formatting",valueCallback:a})||r.day(t,{width:"narrow",context:"formatting",valueCallback:a})}},validate:function(t,e,r){return e>=1&&e<=7},set:function(t,a,i,o){return t=function(t,a){r(2,arguments);var i=e(a);i%7==0&&(i-=7);var o=1,u=n(t),s=u.getUTCDay(),c=((i%7+7)%7=1&&e<=12},set:function(t,e,r,n){var a=t.getUTCHours()>=12;return a&&r<12?t.setUTCHours(r+12,0,0,0):a||12!==r?t.setUTCHours(r,0,0,0):t.setUTCHours(0,0,0,0),t},incompatibleTokens:["H","K","k","t","T"]},H:{priority:70,parse:function(t,e,r,n){switch(e){case"H":return Bt(xt,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=0&&e<=23},set:function(t,e,r,n){return t.setUTCHours(r,0,0,0),t},incompatibleTokens:["a","b","h","K","k","t","T"]},K:{priority:70,parse:function(t,e,r,n){switch(e){case"K":return Bt(Ut,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=0&&e<=11},set:function(t,e,r,n){return t.getUTCHours()>=12&&r<12?t.setUTCHours(r+12,0,0,0):t.setUTCHours(r,0,0,0),t},incompatibleTokens:["a","b","h","H","k","t","T"]},k:{priority:70,parse:function(t,e,r,n){switch(e){case"k":return Bt(kt,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=1&&e<=24},set:function(t,e,r,n){var a=r<=24?r%24:r;return t.setUTCHours(a,0,0,0),t},incompatibleTokens:["a","b","h","H","K","t","T"]},m:{priority:60,parse:function(t,e,r,n){switch(e){case"m":return Bt(Nt,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=0&&e<=59},set:function(t,e,r,n){return t.setUTCMinutes(r,0,0),t},incompatibleTokens:["t","T"]},s:{priority:50,parse:function(t,e,r,n){switch(e){case"s":return Bt(St,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=0&&e<=59},set:function(t,e,r,n){return t.setUTCSeconds(r,0),t},incompatibleTokens:["t","T"]},S:{priority:30,parse:function(t,e,r,n){return Zt(e.length,t,(function(t){return Math.floor(t*Math.pow(10,3-e.length))}))},set:function(t,e,r,n){return t.setUTCMilliseconds(r),t},incompatibleTokens:["t","T"]},X:{priority:10,parse:function(t,e,r,n){switch(e){case"X":return zt(Rt,t);case"XX":return zt(It,t);case"XXXX":return zt(Gt,t);case"XXXXX":return zt(jt,t);default:return zt(Xt,t)}},set:function(t,e,r,n){return e.timestampIsSet?t:new Date(t.getTime()-r)},incompatibleTokens:["t","T","x"]},x:{priority:10,parse:function(t,e,r,n){switch(e){case"x":return zt(Rt,t);case"xx":return zt(It,t);case"xxxx":return zt(Gt,t);case"xxxxx":return zt(jt,t);default:return zt(Xt,t)}},set:function(t,e,r,n){return e.timestampIsSet?t:new Date(t.getTime()-r)},incompatibleTokens:["t","T","X"]},t:{priority:40,parse:function(t,e,r,n){return At(t)},set:function(t,e,r,n){return[new Date(1e3*r),{timestampIsSet:!0}]},incompatibleTokens:"*"},T:{priority:20,parse:function(t,e,r,n){return At(t)},set:function(t,e,r,n){return[new Date(r),{timestampIsSet:!0}]},incompatibleTokens:"*"}},re=ee,ne=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,ae=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,ie=/^'([^]*?)'?$/,oe=/''/g,ue=/\S/,se=/[a-zA-Z]/;function ce(t,e){if(e.timestampIsSet)return t;var r=new Date(0);return r.setFullYear(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()),r.setHours(t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),t.getUTCMilliseconds()),r}function de(t){return t.match(ie)[1].replace(oe,"'")}var le=36e5,fe={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},he=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,me=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,we=/^([+-])(\d{2})(?::?(\d{2}))?$/;function ge(t){var e,r={},n=t.split(fe.dateTimeDelimiter);if(n.length>2)return r;if(/:/.test(n[0])?(r.date=null,e=n[0]):(r.date=n[0],e=n[1],fe.timeZoneDelimiter.test(r.date)&&(r.date=t.split(fe.timeZoneDelimiter)[0],e=t.substr(r.date.length,t.length))),e){var a=fe.timezone.exec(e);a?(r.time=e.replace(a[1],""),r.timezone=a[1]):r.time=e}return r}function ve(t,e){var r=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+e)+"})|(\\d{2}|[+-]\\d{"+(2+e)+"})$)"),n=t.match(r);if(!n)return{year:null};var a=n[1]&&parseInt(n[1]),i=n[2]&&parseInt(n[2]);return{year:null==i?a:100*i,restDateString:t.slice((n[1]||n[2]).length)}}function ye(t,e){if(null===e)return null;var r=t.match(he);if(!r)return null;var n=!!r[4],a=be(r[1]),i=be(r[2])-1,o=be(r[3]),u=be(r[4]),s=be(r[5])-1;if(n)return function(t,e,r){return e>=1&&e<=53&&r>=0&&r<=6}(0,u,s)?function(t,e,r){var n=new Date(0);n.setUTCFullYear(t,0,4);var a=n.getUTCDay()||7,i=7*(e-1)+r+1-a;return n.setUTCDate(n.getUTCDate()+i),n}(e,u,s):new Date(NaN);var c=new Date(0);return function(t,e,r){return e>=0&&e<=11&&r>=1&&r<=(Me[e]||(De(t)?29:28))}(e,i,o)&&function(t,e){return e>=1&&e<=(De(t)?366:365)}(e,a)?(c.setUTCFullYear(e,i,Math.max(a,o)),c):new Date(NaN)}function be(t){return t?parseInt(t):1}function Te(t){var e=t.match(me);if(!e)return null;var r=pe(e[1]),n=pe(e[2]),a=pe(e[3]);return function(t,e,r){if(24===t)return 0===e&&0===r;return r>=0&&r<60&&e>=0&&e<60&&t>=0&&t<25}(r,n,a)?r*le+6e4*n+1e3*a:NaN}function pe(t){return t&&parseFloat(t.replace(",","."))||0}function Ce(t){if("Z"===t)return 0;var e=t.match(we);if(!e)return 0;var r="+"===e[1]?-1:1,n=parseInt(e[2]),a=e[3]&&parseInt(e[3])||0;return function(t,e){return e>=0&&e<=59}(0,a)?r*(n*le+6e4*a):NaN}var Me=[31,null,31,30,31,30,31,31,30,31,30,31];function De(t){return t%400==0||t%4==0&&t%100}const xe={datetime:"MMM d, yyyy, h:mm:ss aaaa",millisecond:"h:mm:ss.SSS aaaa",second:"h:mm:ss aaaa",minute:"h:mm aaaa",hour:"ha",day:"MMM d",week:"PP",month:"MMM yyyy",quarter:"qqq - yyyy",year:"yyyy"};t._adapters._date.override({_id:"date-fns",formats:function(){return xe},parse:function(t,a){if(null==t)return null;const i=typeof t;return"number"===i||t instanceof Date?t=n(t):"string"===i&&(t="string"==typeof a?function(t,a,i,o){r(3,arguments);var u=String(t),s=String(a),d=o||{},l=d.locale||q;if(!l.match)throw new RangeError("locale must contain match property");var f=l.options&&l.options.firstWeekContainsDate,h=null==f?1:e(f),m=null==d.firstWeekContainsDate?h:e(d.firstWeekContainsDate);if(!(m>=1&&m<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var w=l.options&&l.options.weekStartsOn,g=null==w?0:e(w),v=null==d.weekStartsOn?g:e(d.weekStartsOn);if(!(v>=0&&v<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(""===s)return""===u?n(i):new Date(NaN);var y,b={firstWeekContainsDate:m,weekStartsOn:v,locale:l},T=[{priority:10,subPriority:-1,set:ce,index:0}],p=s.match(ae).map((function(t){var e=t[0];return"p"===e||"P"===e?(0,ut[e])(t,l.formatLong,b):t})).join("").match(ne),C=[];for(y=0;y0&&ue.test(u))return new Date(NaN);var P=T.map((function(t){return t.priority})).sort((function(t,e){return e-t})).filter((function(t,e,r){return r.indexOf(t)===e})).map((function(t){return T.filter((function(e){return e.priority===t})).sort((function(t,e){return e.subPriority-t.subPriority}))})).map((function(t){return t[0]})),E=n(i);if(isNaN(E))return new Date(NaN);var O=H(E,c(E)),F={};for(y=0;y=1&&f<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var h=s.options&&s.options.weekStartsOn,w=null==h?0:e(h),g=null==u.weekStartsOn?w:e(u.weekStartsOn);if(!(g>=0&&g<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!s.localize)throw new RangeError("locale must contain localize property");if(!s.formatLong)throw new RangeError("locale must contain formatLong property");var v=n(t);if(!m(v))throw new RangeError("Invalid time value");var y=c(v),b=H(v,y),T={firstWeekContainsDate:f,weekStartsOn:g,locale:s,_originalDate:v},p=o.match(mt).map((function(t){var e=t[0];return"p"===e||"P"===e?(0,ut[e])(t,s.formatLong,T):t})).join("").match(ht).map((function(e){if("''"===e)return"'";var r=e[0];if("'"===r)return yt(e);var n=nt[r];if(n)return!u.useAdditionalWeekYearTokens&<(e)&&ft(e,a,t),!u.useAdditionalDayOfYearTokens&&dt(e)&&ft(e,a,t),n(b,e,s.localize,T);if(r.match(vt))throw new RangeError("Format string contains an unescaped latin alphabet character `"+r+"`");return e})).join("");return p}(t,a,this.options)},add:function(t,n,s){switch(s){case"millisecond":return o(t,n);case"second":return function(t,n){r(2,arguments);var a=e(n);return o(t,1e3*a)}(t,n);case"minute":return function(t,n){r(2,arguments);var a=e(n);return o(t,6e4*a)}(t,n);case"hour":return function(t,n){r(2,arguments);var a=e(n);return o(t,a*u)}(t,n);case"day":return a(t,n);case"week":return function(t,n){r(2,arguments);var i=e(n),o=7*i;return a(t,o)}(t,n);case"month":return i(t,n);case"quarter":return function(t,n){r(2,arguments);var a=e(n),o=3*a;return i(t,o)}(t,n);case"year":return function(t,n){r(2,arguments);var a=e(n);return i(t,12*a)}(t,n);default:return t}},diff:function(t,e,a){switch(a){case"millisecond":return b(t,e);case"second":return function(t,e){r(2,arguments);var n=b(t,e)/1e3;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"minute":return function(t,e){r(2,arguments);var n=b(t,e)/6e4;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"hour":return function(t,e){r(2,arguments);var n=b(t,e)/T;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"day":return y(t,e);case"week":return function(t,e){r(2,arguments);var n=y(t,e)/7;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"month":return D(t,e);case"quarter":return function(t,e){r(2,arguments);var n=D(t,e)/3;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"year":return function(t,e){r(2,arguments);var a=n(t),i=n(e),o=h(a,i),u=Math.abs(g(a,i));a.setFullYear("1584"),i.setFullYear("1584");var s=h(a,i)===-o,c=o*(u-s);return 0===c?0:c}(t,e);default:return 0}},startOf:function(t,e,a){switch(e){case"second":return function(t){r(1,arguments);var e=n(t);return e.setMilliseconds(0),e}(t);case"minute":return function(t){r(1,arguments);var e=n(t);return e.setSeconds(0,0),e}(t);case"hour":return function(t){r(1,arguments);var e=n(t);return e.setMinutes(0,0,0),e}(t);case"day":return d(t);case"week":return s(t);case"isoWeek":return s(t,{weekStartsOn:+a});case"month":return function(t){r(1,arguments);var e=n(t);return e.setDate(1),e.setHours(0,0,0,0),e}(t);case"quarter":return function(t){r(1,arguments);var e=n(t),a=e.getMonth(),i=a-a%3;return e.setMonth(i,1),e.setHours(0,0,0,0),e}(t);case"year":return function(t){r(1,arguments);var e=n(t),a=new Date(0);return a.setFullYear(e.getFullYear(),0,1),a.setHours(0,0,0,0),a}(t);default:return t}},endOf:function(t,a){switch(a){case"second":return function(t){r(1,arguments);var e=n(t);return e.setMilliseconds(999),e}(t);case"minute":return function(t){r(1,arguments);var e=n(t);return e.setSeconds(59,999),e}(t);case"hour":return function(t){r(1,arguments);var e=n(t);return e.setMinutes(59,59,999),e}(t);case"day":return p(t);case"week":return function(t,a){r(1,arguments);var i=a||{},o=i.locale,u=o&&o.options&&o.options.weekStartsOn,s=null==u?0:e(u),c=null==i.weekStartsOn?s:e(i.weekStartsOn);if(!(c>=0&&c<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=n(t),l=d.getDay(),f=6+(l=5&&((s||!n&&5===u)&&(p.push(u,0,s,t),u=6),n&&(p.push(u,n,0,t),u=6)),s=""},o=0;o"===e?(u=1,s=""):s=e+s[0]:r?e===r?r="":s+=e:'"'===e||"'"===e?r=e:">"===e?(h(),u=1):u&&("="===e?(u=5,t=s,s=""):"/"===e&&(u<5||">"===n[o][f+1])?(h(),3===u&&(p=p[0]),u=p,(p=p[0]).push(2,0,u),u=0):" "===e||"\t"===e||"\n"===e||"\r"===e?(h(),u=2):s+=e),3===u&&"!--"===s&&(u=4,p=p[0])}return h(),p}(t)),u),arguments,[])).length>1?u:u[0]}}); diff --git a/web/js/vendor/preact-hooks.umd.js b/web/js/vendor/preact-hooks.umd.js new file mode 100644 index 0000000..47ab528 --- /dev/null +++ b/web/js/vendor/preact-hooks.umd.js @@ -0,0 +1,2 @@ +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("preact")):"function"==typeof define&&define.amd?define(["exports","preact"],t):t((n||self).preactHooks={},n.preact)}(this,function(n,t){var u,r,i,o,f=0,e=[],c=[],a=t.options.__b,v=t.options.__r,l=t.options.diffed,d=t.options.__c,s=t.options.unmount;function p(n,u){t.options.__h&&t.options.__h(r,n,f||u),f=0;var i=r.__H||(r.__H={__:[],__h:[]});return n>=i.__.length&&i.__.push({__V:c}),i.__[n]}function h(n){return f=1,y(g,n)}function y(n,t,i){var o=p(u++,2);if(o.t=n,!o.__c&&(o.__=[i?i(t):g(void 0,t),function(n){var t=o.__N?o.__N[0]:o.__[0],u=o.t(t,n);t!==u&&(o.__N=[u,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,u){if(!o.__c.__H)return!0;var r=o.__c.__H.__.filter(function(n){return n.__c});if(r.every(function(n){return!n.__N}))return!e||e.call(this,n,t,u);var i=!1;return r.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!e||e.call(this,n,t,u))};r.u=!0;var e=r.shouldComponentUpdate,c=r.componentWillUpdate;r.componentWillUpdate=function(n,t,u){if(this.__e){var r=e;e=void 0,f(n,t,u),e=r}c&&c.call(this,n,t,u)},r.shouldComponentUpdate=f}return o.__N||o.__}function m(n,i){var o=p(u++,4);!t.options.__s&&F(o.__H,i)&&(o.__=n,o.i=i,r.__h.push(o))}function _(n,t){var r=p(u++,7);return F(r.__H,t)?(r.__V=n(),r.i=t,r.__h=n,r.__V):r.__}function T(){for(var n;n=e.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(x),n.__H.__h.forEach(A),n.__H.__h=[]}catch(u){n.__H.__h=[],t.options.__e(u,n.__v)}}t.options.__b=function(n){r=null,a&&a(n)},t.options.__r=function(n){v&&v(n),u=0;var t=(r=n.__c).__H;t&&(i===r?(t.__h=[],r.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(t.__h.forEach(x),t.__h.forEach(A),t.__h=[],u=0)),i=r},t.options.diffed=function(n){l&&l(n);var u=n.__c;u&&u.__H&&(u.__H.__h.length&&(1!==e.push(u)&&o===t.options.requestAnimationFrame||((o=t.options.requestAnimationFrame)||q)(T)),u.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),i=r=null},t.options.__c=function(n,u){u.some(function(n){try{n.__h.forEach(x),n.__h=n.__h.filter(function(n){return!n.__||A(n)})}catch(r){u.some(function(n){n.__h&&(n.__h=[])}),u=[],t.options.__e(r,n.__v)}}),d&&d(n,u)},t.options.unmount=function(n){s&&s(n);var u,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{x(n)}catch(n){u=n}}),r.__H=void 0,u&&t.options.__e(u,r.__v))};var b="function"==typeof requestAnimationFrame;function q(n){var t,u=function(){clearTimeout(r),b&&cancelAnimationFrame(t),setTimeout(n)},r=setTimeout(u,100);b&&(t=requestAnimationFrame(u))}function x(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t}function A(n){var t=r;n.__c=n.__(),r=t}function F(n,t){return!n||n.length!==t.length||t.some(function(t,u){return t!==n[u]})}function g(n,t){return"function"==typeof t?t(n):t}n.useCallback=function(n,t){return f=8,_(function(){return n},t)},n.useContext=function(n){var t=r.context[n.__c],i=p(u++,9);return i.c=n,t?(null==i.__&&(i.__=!0,t.sub(r)),t.props.value):n.__},n.useDebugValue=function(n,u){t.options.useDebugValue&&t.options.useDebugValue(u?u(n):n)},n.useEffect=function(n,i){var o=p(u++,3);!t.options.__s&&F(o.__H,i)&&(o.__=n,o.i=i,r.__H.__h.push(o))},n.useErrorBoundary=function(n){var t=p(u++,10),i=h();return t.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,u){t.__&&t.__(n,u),i[1](n)}),[i[0],function(){i[1](void 0)}]},n.useId=function(){var n=p(u++,11);if(!n.__){for(var t=r.__v;null!==t&&!t.__m&&null!==t.__;)t=t.__;var i=t.__m||(t.__m=[0,0]);n.__="P"+i[0]+"-"+i[1]++}return n.__},n.useImperativeHandle=function(n,t,u){f=6,m(function(){return"function"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==u?u:u.concat(n))},n.useLayoutEffect=m,n.useMemo=_,n.useReducer=y,n.useRef=function(n){return f=5,_(function(){return{current:n}},[])},n.useState=h}); +//# sourceMappingURL=hooks.umd.js.map diff --git a/web/js/vendor/preact.umd.js b/web/js/vendor/preact.umd.js new file mode 100644 index 0000000..e259989 --- /dev/null +++ b/web/js/vendor/preact.umd.js @@ -0,0 +1,2 @@ +!function(n,l){"object"==typeof exports&&"undefined"!=typeof module?l(exports):"function"==typeof define&&define.amd?define(["exports"],l):l((n||self).preact={})}(this,function(n){var l,u,t,i,o,r,f,e,c,s=65536,a=1<<17,h={},p=[],v=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function _(n){var l=n.parentNode;l&&l.removeChild(n)}function b(n,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?l.call(arguments,2):t),"function"==typeof n&&null!=n.defaultProps)for(r in n.defaultProps)void 0===f[r]&&(f[r]=n.defaultProps[r]);return g(n,f,i,o,null)}function g(n,l,i,o,r){var f={type:n,props:l,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++t:r,__i:-1,__u:0};return null==r&&null!=u.vnode&&u.vnode(f),f}function m(n){return n.children}function k(n,l){this.props=n,this.context=l}function w(n,l){if(null==l)return n.__?w(n.__,n.__i+1):null;for(var u;ll&&o.sort(e));S.__r=0}function T(n,l,u,t,i,o,r,f,e,c,a){var v,y,d,_,b,g=t&&t.__k||p,m=l.length;for(u.__d=e,$(u,l,g),e=u.__d,v=0;v0?g(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=H(i,u,r=t+p,h),i.__i=f,o=null,-1!==f&&(h--,(o=u[f])&&(o.__u|=a)),null==o||null===o.__v?(-1==f&&p--,"function"!=typeof i.type&&(i.__u|=s)):f!==r&&(f===r+1?p++:f>r?h>e-r?p+=f-r:p--:p=f(null!=e&&0==(e.__u&a)?1:0))for(;r>=0||f=0){if((e=l[r])&&0==(e.__u&a)&&i==e.key&&o===e.type)return r;r--}if(f2&&(e.children=arguments.length>3?l.call(arguments,2):t),g(n.type,e,i||n.key,o||n.ref,null)},n.createContext=function(n,l){var u={__c:l="__cC"+c++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,P(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u},n.createElement=b,n.createRef=function(){return{current:null}},n.h=b,n.hydrate=function n(l,u){B(l,u,n)},n.isValidElement=i,n.options=u,n.render=B,n.toChildArray=function n(l,u){return u=u||[],null==l||"boolean"==typeof l||(y(l)?l.some(function(l){n(l,u)}):u.push(l)),u}}); +//# sourceMappingURL=preact.umd.js.map

@R$w*11Q}wfyaLs8Q7V8m=c*vm};2rG5u#&XJBODXG~-AWdijK zlE8NulrmK@onpGd^njUxIg)u6NH?P&10y52wE#|UAoGM67#YE}KRE3&F|aYPFo4ou z2EzdcDaH`SP=;d0T*gHVrHo4$uQGsUvjiAG`|3e%1Km|%!XOT6>oaLH`7s4B1u=y% zg)zl3B{QWmr88wRWiu5ql`&N_oo2ep^pKg6If@xnj*El*0CufEQy^0?Qz%mmQxa1O zQyNnSQx;Pp6S~VmA;rYN#UKL>r7rOO7oZ%;3i1_rW(QP*f<)Lrw`Gvz8kkQE7(_|Z zCrW}3KzmC-IS14W0>!xjLl8p=0}BHeg8+jVgA9{D=!OoaKn5nJQ%u1OOiVYJLP7Up zAgKsoU}Dl{3SwYlI?WWqz{GTuDU5-Mc{Y*?@GT!qX<#!lz-DBjnUM-MBOPo;CfJN@ zuo;XDEZ|m35>qlb?Ll111{#TA0F^hOa0Q8hZrNaAe8-%^_!)Et4g(9rDn?euPt4s6 zuozMS#|P+q22d>wq8S*t89?nRO}LC110#6;je&s&ECagx1QG{~3?fX=QCt8z`H7Js z32wdy*c8x>D4<=_Ab0VB%>bPe1u7GvDVhOQwiB#|7j7~rEip0f0-g2402;Lg66bc$l9sTQe_Xp2@U_X(MwTb1~B-W)Ws*a9aYVN{)et`59w6V+La;(_W@c%=OGA zOp}>KnO&IO8JHND7%Uh-ZD2PBcLpwmt&BVjT+A1ljhN>$Phi^2w1T;mIg6>285BMc za~T=f7+!+i3Tk^o#F!YaF>oC|HoVQ^sTVX$Rd&0xc{jlq$b zkHM1Jl);`km%)y?g29@3GJ_TK0tO4PE)k{)OcR;bGi_kn#k8AQh*_A~lG%#6khzGt zhPjq`I`a(XCCp2i?=wF{wSoCQvnBHq=IKnknAS7bFc&gSU>0JU$h3iJH?uIa6>|}D zE%OZKrC?nm3>FNQ3|0)*3^ok540a6m3=RyAOa%SFe4W{pc>(ierfp2CnJbucnR=M{ zNU~u9(|V>|%tFkT%!SM~%+r~dFoQ^irYlU3m}W9fXZB!;=E>kRGK+ZuIGtPvrxeJ&PoVT21G)={A&7y4L5M+$K?%`6Vw%su z%%IGm#E88Iu{97}S^+F)%TxgYJG}&;;Gn#PAlBo4~gwfzBOd zVo+uP(Xbc=m1vKdFEL+XzQ%lm`4;mX=6lQ!m>)4eWd@bVJPa1h7nv_JUuC||e3SV$ z^IecjnV&F&M#x|$*nsDMFkCP>6ayFY0ch(JwbjVQUVrfMqwTc-)eF7fLb}Vwc L6xvr|U|;|MiQoiX literal 0 HcmV?d00001 diff --git a/web/fonts/ttf/static/SpaceGrotesk-Medium.ttf b/web/fonts/ttf/static/SpaceGrotesk-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..341b633572a9af2c4440fa8060f83d08bca70a7f GIT binary patch literal 116664 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 z zM$oDN$$$t4GX_=`ZWdPV1_lleX!nnSo0}yOwD?WOmzRr)ot-HO+(GhX;N)aT;9+E7 z&|vVBh73PC;ML85(96rn#l@6}#T*AG239t1HdF_&v8nljUBSS@q5~cWPXbTFgG_;r z@gqAXGSWfW*$K4#+{xeB-@(q@L|;csQ$t-1kkeh?SkTS?Rm$%}Xj(71$I^obufS z-SQpvWE}tX%DMX*&sq~Ow?v?LUSKSvWT-c{S6G-Ak7pPI6N3r^1CtZe9tH&lO$J{F zFAjDlHfGS+2QvpF8#^-_XlVy@?1KR`gTTee&d!hk8i-I~@B{VARh1Prl{7)?U!|dq zZ%{von?p?77?L*4O~LCnAbkvQ$pRajRtGh9K_Z`QVolu)4V=tkt;$l3T-*#w)8peG zR8|_fdFX^#I|lOe@_X6a25X0znOhnsCx`z#6@K5`(h_v70fR0hE8|n9Jq-E`*$(o; zLi~K(T3yA zvMdbX;VGB|WYSEZL0?KxN=gv4AV}EMSlnD)-CSJUT;0@IlwI81T%4U<+}v1HS)E;6 zoLya=U0hVz)LfmNUESPVon1G`oz==p*Gh|r+ku-$%SzYMiq$PB$c@#?5=qd?iq)O* zfCCpdM1gx?pgTkXHy1<~NC8+7Vic%72wI1g#9Ydx#sE6`j-BZ=!$fd91R`Dn7uRMu zg+-i=DLD+%u7s#BhpJ~|o()<(`Tsw7omUcbBTSsB3{)Jz#RFmD%#3-+=D^&;#^hIk zEWQD%o}D?0VFkoJ|09`NKy%O#_cN`Q2nUSz`?-C$Wa7Z zZO+NWoX*Y2$-u_K$p&81o&cGd1}$mlg02~pb}#_xVBlbEAXZDHgM@$p1A~CDfUuAt z1E}i)S(3{GT9L~LTM@4)s%WarE-a|bEXK&p_~qXnMvi|!7&ZUp?6LVF&;?y258icA z@vr0me+KjadZ2v^Olk~l3=9mQ>BS9Tzk}A+hA@NT2qLb{a2ty_8&h%`Bn(m2voXb? zh=bw?Voo)~b+9?0(|9w$VapDh4Pfqg3o!>Q4z?F8&J+jgvi<)L+nd0|#!wE{58gij zPFoyccb{fxKoSSJ8zQa^IuG^#fACsdcCfi1aWh+k5vx_Qtg>R37YQU?qXzTs$vxU_ZiZ6`}Y~tG=r)M0{cl2oF}vy z?tt75_7g&!jVUez9A;2)P+Wo3voX&uf{26CS{67gg}~;VW>^L`2O7C_?c%!~|8NcMu#K3JUT zA;WB};(iRRQ1N9X()DNqzvVlU3EtjvA3aO1{>jQz0Un$bM1 zl!>J@?O*kx*-o<;L3cKR>Qqp^_5z2sC^&Ak8TNtwj4IB?6z2sAYtR42OkUu03sMhC zw?{$gotY6@9%%mm#AFFJ544+xok^QvFW5X(aW3wICyP1IPFP*{dbyS3D`XlaZuWW zh{Mu0syG`{GBj;N#6f8fq#lvBA>yF42Nq{4gSG)6;-It#5(lNdMkISdX%8$8FLxp8 zL2U-GICB)kF0ASwGR%aEM}pS8GpR8^)T=XEg2j~>7??xB;RD(@1uCDeg2ln>w87$_ zT|J<9IfO-=jVT$l#_|7u$hvNDc?nX_##9DvJAvkHg~8^?g2PiATK=JmvoXb4L&6^- z4hkQL`f7$Xpeh4gR)F@h@H0pHnuSBsR8e6i8Y?cc<;51 zDJNuK3nPQ)e+%$FA`$TV6VQ5m&=?!IaD}bL2aQI6v#|zfYbb*Vg9v2tCt}|cXr%`m zc+B6_6tcN!uRxBOPFu1}`d;V`qd)icO~U1ZnZVnO7?{9w#w)<(hAe}pgBuqkGXrSc zr-6YLG=yHq$<72?$P~{3*~!4h#*)a*$ikw<;>XFsz#s*l3>6aK<>8R!l!fk&;Ng(e z7KZMQ0G9}`c~PjC2wPPUqhL^bVRNptlY=dYUCHRn$eWb(@AJQzvv9Job2cz=ahe@^Z5=v#_(Wq%&}FaBxL3aB*=Y3NmtVaRdqqaBzTzlp&i3r6fc}1XKl8IrusF zK~u|IoJd2>LTuvN!sf>8isr`bj8Mm8_fW2DRRW`cZ&k)WdyscfyvFpcuCA``UpOug z{{Ii2lhy>+%b-)R*_cj2+eM(cYE7mcOlk}uadyTuhE?Evf-26&lmr^$ft#}$s-BH` z7PLHqsNV?_XDW4sI+#Hy_Y)rn;dHLpm(qsG$ z7guKl6+Fx!e=!F${$?;@uw-yyRPf%Q9}wZd!_UXW$fT~u#K{KQ-T>xuL%ETVip!LN z1$06;Qv(Ah8#@~(djl6EBQGNxCnH-rXsa6B1b+ZVaRH8@JI$^^To%o z{G8C~)@G(QJTbgx5q9>0Vtn%9rf#Wb|E4kf*jZTf`wN@+TG}Pa^Kt3;>}OO_+(OgedUy;$s+R^#nOHVrv zWhF&Ta9T9^uLs)4z@)|i+Di}WV@-pKe_~Pvr(Li(V;Tdbj0f#8K!~$3B|-Zh=;ARb z;(OrcS22L@5d^Kx{K#a&^ar#8mchlr5mXY1ihy<#a4~v;w(m1Cu{6N8|Ec+c3U7u) z&?0&*20ujwMg|Qv1zkm5ULMG%3h<(SHpu=yGjk&`abq=gc6D<#b#pOsb8&Vt(4acn zY6cUZVn^Ey2Qzm`eu*eOV{KJk1q*#G6U~U2-V*09$huiZhhiUY?|eH(Wtl`LdsS-@ z{y;%#Yc+GHV-5XNqa%D-eIp}%S$!iwZ6A>TA2ID=P-9R8*JZIxZt!rd1D6e8apq3Y znGOH{L-sO&#g)Kqk5iS9JPk5O0vzrjaZs57sk>3d*_e``eL-~b7!+|(nE^6~jj1#U z*?dr$0TyRw09`-{cMqt{0E;vEf`)g&;*m@e;IaWE4(bbv!u=%ycRxE*6~h*&xCN65 z*!?PCeYU7|Wgl#aUiQ>go(Z*R|7`)|8}y#weXR8ZdXVPIgK4|5Bsf64IZ-*jmIayqns3EF!h z4+=X5(1b52-$2SMRB<*YSh)ld2i3J8^=!1&$=@fK~1C;-a!S;g18Pgb!fWir!zY*eWOi9o>7@{6zFGxKb^Q zfmGZE`iuWu2B1OA}W8Mby3tx9BLgI0-XYvlDk z3mqK`Jw4K81Z2}3+_SC!wK50UTUmj2WraGqXG#jlq@QFIWbv@H_WJh*R(eBsJ=mBS z+u9d+t2_9aC~3>uY1tZ^*noCxIsN+(?#t;D9`3{G3!3VJruh_bT!L;#V`EGM^&I~H z2i1&>JqU58n2(UKHvezTSPIJfpbI}m3EMXo}B|)9EU0w8R;O% z$e^YIYWQ%lF<3BKfaa?~>r2(mLEGoREB(PU7VuMp*ueW@pm7bF7-ka{f$sZeTx1(= z%o!&fuWf9muA!l>EH9&LqpRYfpYBxRV-sttU@RvlE3fISk;$j&q9GHbtD>qVAi!@R zr=%?+WT339r4r=&&x3JGM2(Y{r=GTrwh%AB5Erk2roDkDXwVa~9{_Y_4HD-K<5Q9fc7J>F*0y-F|l(nzzz(8ZcX6e z;7nlPd1p5nBoQ)|7 z+Mj@kgUT$BdN$@+(EI`s2bEc1ai&t}csN8HRAzz2nHiEH`2`{lvzLv@7h0A<#6kTM zka|$RWDZvMJOC|K0{bhH$)52olN!Wdpj$@3>h(Z-6~K82)S+T$N@7?J76-5U2aB75 z!U5ivMHNT1Wg+4qe}UAq!TkkZvkx{0wEh{Crze5UM-^vdiUAFCfY#%H*7$?NAFQ6K zilGNQUg7iKg2@NGmr(RPGtsG!kpb=9gzvH|(lw2gV=M%3-vpJx zmj5jnPlDSGYM^*$PzNo+`~RQ8{=WqiGt&+RHHOC^ai(`raZue{&G?&%jR`d7%*de5 zz`!KQ_?AHkREDsEj#mKBY)V2l6R?A}>`SnKa;*@9kT7U}l^_Q@WFN00=oB9C5=79h zBEe!G#!o)7`T=^Ty^Pbs!$G@8WB}+4CwuTZ0J(q&2NMQ17SO3nxHN$G z+}pr3gC?XwdL0ZI*w|Uw*;uh?106d6+Nf{i3!cPIgzAZmbdXh60`TOT3#cfCuBTTA*94-l;!7R2EgaJIU1sj(ZJDB|s;b87&g13m6df9}6Cn+YV;h?3>Eh#201zHcK!WhCh zk?AM{H-k9xzDhe^R`_u{_6&ZYlCt+fmc45%kc!3%Z4mrIvsEM3YtHRAmFh=19THb2ZvVTL5{4Wa=N4od8dj2w&% zoQw>h9U#iSY>c3jD?lSDYQ9{I;QB+_L4lQ#nT?T&k(ntSO*vEvWGk*PgD|X$5d?3= z1=lce2Z3vumrIv|owao7u87&;J9dQ6j@SiS_wfG{;|``%3?>ZD3`N^*^+lK&SwM*u za;zNMu`!e$FQclgATJ{YKJLnd(FD}X2dz>BEw_R-IY2EAbHp|V_)&8rV&b4)KRbBg zJu~PSLv=MZbPC*n;h|!pNsO!p)?ylh z>^A1Qd^u5qe5UqVsw!$+{N675%1ZjI2Ck~%zS6?#2FgkrN?d}T4o1pK+U#DjjAop? z^2%H+yzJckN(x*Y3{0Te1}1K%Jq&^j(x7o^4n|f6&&&}as@BvJN-9S0;V#K0gX zA|x#=%^=7iC@83|$jKq4tthArS_}f(eq^jDs4S=~$P8KgAu1xq$Rui?Xl{}0z$g_R zTr44B>EOtyZWw9JZ4+Vm*M%wV?<~feSN6ti#`fSfyypMEFim7S0X}Eaj$timEtB^K z{(uMvO9nP}PIk5;22KtR&H~W#K~~TSf6xsj3>-X+EKD3MS&*|PBSGVL42j^gCIh7% ztRZ?qqqrRGoE+ejDv8w{>7c9#KC05%%EHW0Uq@R*O~Fpl4*8%;UJfyB(2^=v=)4qY zwH9c3q&m`qAW=~fF>|Oq=vWi*sYyy~AYss1f8e7AW7_7=Zxd{rH?NJKH#sjanKvaj zH_yq>-@(l-NLo%tQAye|$dzaI)RL*Q!9-wwL1}(|etu~|zPF!umUm!)y`Z?1qM}@f ztb&cGfP)_c3xf%x7UK=3Qw;nJ(hRx`W(=925Os)CW@O`F^xTCDP=Jxa%)~%XMps5xM@vIpURGRGKw40mlbwN| zkslTsjG!a|JG?>!vI87eUYUcp3y83bLJnI}Ru(k{g%xP+6eF8Wyt#S24TSWLiShP{ ziD3y$!E*}n}8JOcaL1(rxF#CfS ziiit{i;0RLEfx_L8Hq$09N_uyQi9X0kJ~aWitVuyLk?gqgrciY4-bjvxz^_TIo95aD2o zW(ZhcBs&`uGe{#dNFxISL}NT34;Ke7E9f*?iVB+Q3i^ur`r51<658hK=4z%U=IZ9+;1&^lgqmHPU7bx? zN!{ECeC{sjR3K1=C6?=GqoZTvXd~yYq3$7P<7guyAt7SpXk!}?VB4$fp{3=a3noJ# zLI?$N9_kwIAPqV?dRiWOdLG(Zo_cy7TA=+an*V#4ESU`$)ERUcOc>l8oOR?xg;HOT7(k0>nLr&!W=00)ItEZ44`%?K!3a7K0K98Sok3kxRur^T zg%z}B5tIzY#6g?iOw7zpjYVN+*{Oqezkv?kV-^t;H)UfqQBxN+Gh<{;s>-%Cv5Pj$ zi%Aa4&DPhni!&`qJY=9B&!}N)Xlz`P$y1#vDQWA$^@88P$2ugPGb5WfH(o`>*oylG zzk#n!NIp*{Q?-T;-(miLnVLF$7r3k#7(r`vnCzKOF~~9$Kn6ZE8CY1ESXr1F*ch4E z86jJ+;O!I84mHkrXd6k|K^>-+0ebKqLJx{cNNY-#K~_*uSXo$EP!QUhg7ny-`ySvm z5@?gFqNs(Jn_F30T6u<@xw&0I0b^L)>5$^g!oo}&J4;7L%hHh3aiH-7b_NEfRHi)) z;tci{`e zSlKjw;lhjqHLC?y*Br=LxNu=kL#Rb4W7NMRj5hz4g<6C*fHvHM_O13XsWYW8$TFyc z_W39&%1BCxiU2ouX~mQXKpTUhO4N$ z9nZgAJT_Y5F6q2kjA;&myo@fqfuJ6=$p5cQ1x&{om>JkMGlAB-i>ot=`&u$7TXO3& zEe4I}u`2WPI%$r zVi9B&oMN?BnMN^Y;F=*AYXGAze zKtqGqglUn&C&uAx_&-x!S2Bhb{4Ldu4bktM!MQsni^^f z=8ERXVJ%EbSc@A&>Qd0w9Cc;1)676sE~JYKYINd=gGtWb-p;+1-OJEy0wPm7AU_m#VI=Di3IP77vKUr3%`k_5VME;Qz18YD~u&)R;kI zU}}tprl7T9n;F-Gq7W)CjV{kTm+>@IUgG~(<{Ys6BnAcsHAcf~haK>9V%^)q!co`LF@ z`2U$XA1se-eZ$po6V0=bX(|7T_ykUVn^L|zjt z&v*c2J_92|Dnl<5JCi;GH)!`40}~@FQ#dmtBMTz~E2v}5!~{Osn~BvQt-G!YYfFF{ zqihQoCN5aeyC`naqPRsMGa2=n*cp2X?41FvMln?sO=Vofs1Mpa!^n`qFp-IcNt=P2 zfo(GjsLV1~2ek^!#X&8BRZiXAPCY$faw3TA>H?A744^5X1SWQ-81ViwX$D6JI|fEJ zP=&^j$-u2gfbbAfJGD(bf(6|orkeO0nEgZ%5aZ~o$(%ct&bmMf0hVn zn=dmHb24ZhBY3l&8l#`IgA@bKJ)@BhLZCH1NNai6K-)%56-8MgA^0zjaS>xfT->6# zI0ib>o&RuRZUe* zSw&MA?f)HQT+)=DE0C8qy9v|=OaYyv12&r*bYeT`$RK7WMg|TBFVMs?185{1wn>VE zgM*ucTauYgTpP4G3*-Qha}kaJIR@sCmr26}92La? ziVM&=_DbM%V&PzloX$BIS=m6RJ+iT}$8$2Wv#YTC@$fJ}_anjwsz9e$A*XzhcNih5 z|KC5xMYE^IO_>rmbv7t9gW4<}j4PN_z-!U;z`bE*(EKkGV;ckLq$5yBfeu4tU;^bW z#HlWz4!$t>8U|%{j|FoUlokpUFs@(}`S<4HMNr;iC}Cn}a%T_*o%qPX&cx&;B*?_( z$qYUnh=GYQos|)EDp5EqBLf3lJZKvZ0~^Q!$PgE3n2VDQbX1|Sxw5ITxj4JAs4^I< zo2O0|Uv*L?TCx~KE5}IQi*t#~l=X>oiOZ4$EnZ<{uxI$oq{FzML6*S+>>phL&}KMB zCT1odenti_&}r?ApeYY+fdxn`zI!ww8vJBP?0S>+}SLrgcFzGR}vdA;Cv9m&4$iM(~8v_#yBU2^=Xoxow zbZrG23wtI5D=X+|NLDtGi`7A{=3tZ47RKvhX1uca{SyH7Ek6%7-!dkEyelOtB*?>I zk6`}$1!jwZCc}_~!TC6qVGp?6Wo2-K^wPzdL91(+3K>9q|3JMIP-(-+;4keU29jZF zLzjqj0PQq@A49JSIc8+dznzSW_7ulmWMF2{V>rTO$M}OmmO+!j6cpObjEtO&>}-te znLHfa%xtU-Y>^DmGgiR@Yz&DkTucmX41wBO@^Xv}hWc8j+NP??a+>m*(ozy)pkpsM z*%@RRWqH}ew2?Ll5k18Qc#*hjTp)zw|KRm}MW_{>#wT-4QFbRZlB z85I>7X%&^P(kd#_GAb%Z)Lr%TT-9YHC1nt-2o*Uw6=cl7#Gu4DkueE6o@EJ6?Rv15 z7%MnXBjJPSObmgbkt#@C0vVeE%>{#!J8WAlcrh*7*wi6i4{dEwR~1AmYH2AdYH2Y} z)Nt3+b=S~v*VS{^2-H#ni7RO_fc8*-VlrX6$RNR>%HZH&DJjV3|N$z;AW>#i?vSGuL4I82a+S>)%8RHn^{w?~qD1ecVk^diP@c|=4 z^M4D*m*BBw&^Z#Ip(;kuLT6@XaFv91rih9nE1RS?;;;-+WhL-Y9?hxJ#%jGF;zXPr z(>gViIJv(;Y9^qvT!Vpu$(K2TffIB-83QvTGwASg&|pA10}~4i*cagQw3t{xr7ieC zZb3mdHYsgmW@S^zvE`SYGj_Z2tx%ZxtW74-J~<(*V~;Y7WW->mpDH34%u16$R}XU#94YQ8MPFQ$hKY|N2Rz9wTCSpET&Z@{n@?4K$K|GyriID;r? z1qzfO$*_+>kb#X^9XzKE3Xc@<9GC)VKP&?)D`O(4y{GKU1uBf8Y|zFP=6FzsRrBTM zWP-Lk7#VmJc))kTfC@-aVbC2XkhwWfj~Kai3R=dEbVf2Lwv+{#WaTw95e=ozEf4>fg*cZt zfPsNY8GNUdv4a6C=%^l03m!DJ2i_u}3_6F9J)Q&7G-F@@T_6SCEg+-_I`_sHbUYBa zO9Gl;1!ZT@=q6~cJYbr1cej!H$%WDrCK#zF$~{h4pk|UNSDoC6B?C%Hl9~t8qt}yLkW@k2HU|@`coQlF22U+&=|38B?V;o}u(@AD_=DAqq zB^U!4gTeYIV9JBX@#7fgGsl73thx?b;E7bw)l{~ivooxHL4#g4%zmK040109eGV6N zc1D_nqN0R^qN2SY(+7D8aRmi&3Hg6{ppq0+zL_z`G4?PWVGstL4-A?(mj*4vKsg`S z8gf3c4d}dV0}C?67V=co11~CR%P@Tua4PMp-T1deHI@Ozr z2|V*}>I*u=19B;l8H1mMI3t6!l(?*ftNxW&K@nR*A$g{m8w znJbHlo%fGn~7G0E|7kNyHWRiqnmS z8U3)ROJY$*RR{Lh8i>2rK-~rQ7ihm1$X#qqMefje0l62v&IlyV&Q!y23|vM-{JRfo zE<4jrhNVd2-4Jm`cBXKK0)`6=92=P!H(UT`WLOxoutC%?uro)1_MI~@gZElN)-K62 zXo5;k9&RSk>3X0xF!cTaP@|gxJTlD~&&J3Ixp+@gT}eS+Rzi$HltDz19efcM{30Rv zxp-Lb!1H9(vyV4bH5P~5fOlkvv7MdqjvZ#Uwq`q+_7J@P4pbL2Fo5pwV^U*a1+CX( z?)d-qe>MZ>MrOtx|Fc0J{{J65c;N#IL&iF&ntd2*!28j`=?b(cSe+@6VFM%|fcBq* z&cuSweQ`1fGJtLtV`hd01rrmv$p;Av&_#I+oD3X_tl(fkn$o#)eWGw3nOIzpZu1|HmV#XJh&gDh@z< zeE-KIsb^#Q4_b-|b$1SU9TwQ#jFLp!pcIzZ9{r9+Z#4`=UYWA^u}vU=qbJ z=PY9&x;YFCOd;TWjBMX+Mq4cE*unW2NgeZS20sQ+K4xOv0L{ms{jdoCu`v~yLGm%! zy`b=h?7N5T;|7H*=srSbP(B8k3(Ch+;O=K<2IXT8P?}{5XNU*qV@9NW47Q7f9lDoa z4Rj^|BWTCwPKL>l96uRSwm{Tzps53$T!5+$nsyk}7@G`1tDQS;LfsB_BWO=6$c=2w zvq95Q(0$g(X9mPU_r{t3d(9Ngbc#uh0dh7#E@;0tXf4(MPfW>7dl-xuCT&v@Wda>K z4q2xn2O4f+Vk`pREdW3MHi-px#5UyYdU=p4W=5t4T*@4jv8aHZ#+?K@1WJp+FA{tl zx3Z$FjD#5Yh)N?yBX-EKHLxQpK?j?IC)v%-O~L2VfbJ|XGc#5c1sw*AIO2R+bVjzJ zy1KTmoW7QtynM-YbvNx?r!rqgw)tGVBK+z~Rw_w+$-!FM8VZU^e4;{@%F5=_S$v8< z4*vofS4ULYcTVCG;^h-y6X4gfH}FaTwdFy3-Gjk)Z1bfhvb4`{PI(r`2%XgJ#3m>smch8Z*?hv8Hk z*Q&(NK2;fev#N7!tSrGU&VlSD{qqN#!y)A)V-2{x1|2}b#-t5hH?7aWz*qw+4;dli zexPW_a?V8@zAbQh%L6HI|8K!4Zy|PdL-c~% zR$MsL1VYq+c29w-MUcJ!Baz+Dtey`JR|X9R2F7O4xh0TrV4nRG)LdZ%ogc#Z5S-Vv z9W;=NHRv(Dpll32pT? z)j{HnJ3;LZcz*ySo{S`(%mCgy#^CwyHRzsZCN&1oY#lpOE=>IYCl=6}AvFfjQgC(# zUM2;w`JVqjv4F}Fs5s+JnE1cfOz`tY7(nL0&aE*<5eJ`x0;)g%TQGsf%An>jsKd