30 Commits
Author SHA1 Message Date
Ninosaurier 19d7eaf763 chore(release): prepare 0.2.0 release
CI / lint-and-format (push) Successful in 28s
CI / changeset-check (push) Successful in 27s
CI / unit-tests (push) Successful in 35s
CI / component-tests (push) Successful in 23s
CI / lint-and-format (pull_request) Successful in 31s
CI / changeset-check (pull_request) Successful in 27s
CI / unit-tests (pull_request) Successful in 32s
CI / component-tests (pull_request) Successful in 29s
2026-09-01 18:16:49 +02:00
Ninosaurier b8ba06f846 Update(package.json): Changeset set the wrong version 2026-09-01 18:08:02 +02:00
Ninosaurier 369370a55c fix(adrs) Typo errors in headers of adrs 2026-09-01 17:06:57 +02:00
Ninosaurier e6ea5a7b40 update(readme) Updated readme.md 2026-09-01 17:02:36 +02:00
Ninosaurier f00b7c0ba9 update(docs) Updated the roadmap 2026-09-01 16:49:30 +02:00
Ninosaurier c04432cfe5 Merge pull request 'Storybook/#8 set up' (#32) from storybook/#8-set-up into dev
CI / lint-and-format (push) Successful in 29s
CI / changeset-check (push) Successful in 27s
CI / unit-tests (push) Successful in 33s
CI / component-tests (push) Successful in 26s
Reviewed-on: #32
2026-09-01 14:13:59 +00:00
Ninosaurier 6d015f0861 ci(test) Added arg for passing without test
CI / lint-and-format (push) Successful in 27s
CI / changeset-check (push) Successful in 21s
CI / unit-tests (push) Successful in 32s
CI / component-tests (push) Successful in 32s
CI / lint-and-format (pull_request) Successful in 38s
CI / changeset-check (pull_request) Successful in 27s
CI / unit-tests (pull_request) Successful in 32s
CI / component-tests (pull_request) Successful in 32s
2026-09-01 15:48:57 +02:00
Ninosaurier 854fb662ba ci(test): handle empty test suites
CI / lint-and-format (push) Successful in 31s
CI / changeset-check (push) Successful in 30s
CI / unit-tests (push) Successful in 34s
CI / component-tests (push) Failing after 27s
2026-09-01 15:44:53 +02:00
Ninosaurier b549bb4e85 storybook: Deleted unecessary files
CI / lint-and-format (push) Successful in 34s
CI / changeset-check (push) Successful in 31s
CI / unit-tests (push) Successful in 39s
CI / component-tests (push) Failing after 25s
- Deleted "my-components"
2026-09-01 15:23:03 +02:00
Ninosaurier 4f2208f427 Merge pull request 'Enhancement/#30 adding more existing adrs' (#31) from enhancement/#30-adding-more-existing-adrs into dev
CI / lint-and-format (push) Successful in 24s
CI / changeset-check (push) Successful in 27s
CI / unit-tests (push) Successful in 36s
CI / component-tests (push) Successful in 34s
Reviewed-on: #31
2026-09-01 10:58:35 +00:00
Ninosaurier b019dadd27 fix(readme) Found some false references
CI / lint-and-format (push) Successful in 27s
CI / changeset-check (push) Successful in 33s
CI / unit-tests (push) Successful in 38s
CI / component-tests (push) Successful in 37s
CI / lint-and-format (pull_request) Successful in 34s
CI / changeset-check (pull_request) Successful in 28s
CI / unit-tests (pull_request) Successful in 39s
CI / component-tests (pull_request) Successful in 31s
- updatet the current status
- Removed Svelte and plain HTML, bevause the focus is on React, Vue and Angular
- Fixed some lint errors
2026-09-01 12:13:08 +02:00
Ninosaurier a3421596fa Update(doc): Added more ADRs
- More ADRs are added  to provide a view of the bigger picture
2026-09-01 12:11:11 +02:00
Ninosaurier ba7196f412 Merge pull request 'Fix/#28 update milestones in astrojs' (#29) from fix/#28-update-milestones-in-astrojs into dev
CI / lint-and-format (push) Successful in 32s
CI / changeset-check (push) Successful in 28s
CI / unit-tests (push) Successful in 36s
CI / component-tests (push) Successful in 34s
Reviewed-on: #29
2026-08-31 15:14:39 +00:00
Ninosaurier e8ed817d85 update(docs) Updated the documentation
CI / lint-and-format (push) Successful in 38s
CI / changeset-check (push) Successful in 25s
CI / unit-tests (push) Successful in 41s
CI / component-tests (push) Successful in 30s
CI / lint-and-format (pull_request) Successful in 33s
CI / changeset-check (pull_request) Successful in 23s
CI / unit-tests (pull_request) Successful in 34s
CI / component-tests (pull_request) Successful in 37s
- Fixed some typos
- Updated ADRs 100, 200 and 300
-  porject structure changed from .github to .gitea
- Updated the content of the roadmap and the milestones
2026-08-31 15:25:57 +02:00
Ninosaurier bca90c9921 update(gitignore) Added specific file
- .vscode folder added in gitignore
2026-08-30 16:19:05 +02:00
Ninosaurier 7998cda2f7 Merge pull request 'Fix/#26 re upgrade to astro 7' (#27) from fix/#26-re-upgrade-to-astro-7 into dev
CI / lint-and-format (push) Successful in 32s
CI / changeset-check (push) Successful in 35s
CI / unit-tests (push) Successful in 35s
CI / component-tests (push) Successful in 35s
Reviewed-on: #27
2026-08-30 12:47:46 +00:00
Ninosaurier 1dbd692a20 update(readme): Updated "Prerequisites" section
CI / lint-and-format (push) Successful in 34s
CI / changeset-check (push) Successful in 28s
CI / unit-tests (push) Successful in 34s
CI / component-tests (push) Successful in 32s
CI / lint-and-format (pull_request) Successful in 29s
CI / changeset-check (pull_request) Successful in 29s
CI / unit-tests (pull_request) Successful in 39s
CI / component-tests (pull_request) Successful in 30s
- Added a link to node version manager
- Minimum node version 24 is required
- how to install node version 24
2026-08-30 14:17:18 +02:00
Ninosaurier 4afa8ba33e fix(astrojs): upgrade Node.js engine and dependencies for Astro
CI / lint-and-format (push) Successful in 33s
CI / changeset-check (push) Successful in 30s
CI / unit-tests (push) Successful in 30s
CI / component-tests (push) Successful in 32s
- Upgrade required Node.js runtime from 22 to 24 in package.json
- Update pnpm to version 12
- Upgrade astro to 7.2.9 and @astrojs/starlight to 0.41.9
- Update README.md to include NVM and the Node.js 24 requirement
- Update pnpm-workspace.yaml to only install environment-specific dependencies
2026-08-28 15:02:10 +02:00
Ninosaurier a63fe47402 Merge pull request 'Fix/#23 astro compiler pnpm linux binary' (#25) from fix/#23-astro-compiler-pnpm-linux-binary into dev
CI / lint-and-format (push) Successful in 40s
CI / changeset-check (push) Successful in 29s
CI / unit-tests (push) Successful in 45s
CI / component-tests (push) Successful in 35s
Reviewed-on: #25
2026-08-26 18:38:21 +00:00
Ninosaurier 471654f24b chore: update pnpm-workspace.yaml
CI / lint-and-format (push) Successful in 42s
CI / changeset-check (push) Successful in 30s
CI / unit-tests (push) Successful in 41s
CI / component-tests (push) Successful in 37s
CI / lint-and-format (pull_request) Successful in 39s
CI / changeset-check (pull_request) Successful in 31s
CI / unit-tests (pull_request) Successful in 40s
CI / component-tests (pull_request) Successful in 36s
Brings the workspace configuration up to date with the latest directory layout.
2026-08-26 14:41:50 +02:00
Ninosaurier dba81e6e7a build(deps): downgrade astro and remove root compiler bindings
- Downgraded astro to ^6.4.8 and starlight to ^0.40.0 in docs/
- Removed platform-specific astro compiler bindings from root package.json
- Updated pnpm-lock.yaml
2026-08-26 14:41:09 +02:00
Ninosaurier 9d4b046f5d chore(docs): remove unused pnpm-workspace.yaml
The workspace configuration is not needed inside the docs directory.
2026-08-26 14:26:24 +02:00
Ninosaurier cbcb9a4572 Merge pull request 'fix(docs): resolve missing native Astro compiler bindings in root execution' (#24) from fix/#23-astro-compiler-pnpm-linux-binary into dev
CI / lint-and-format (push) Successful in 34s
CI / changeset-check (push) Successful in 31s
CI / unit-tests (push) Successful in 41s
CI / component-tests (push) Successful in 33s
Reviewed-on: #24

Merge pull request #24 from Ninosaurier/fix/#23-astro-compiler-pnpm-linux-binary

Fixes #23: Move optional Astro compiler bindings to root devDependencies to prevent pnpm v11 workspace purging and ensure deterministic binary downloads.
2026-08-16 07:28:45 +00:00
Ninosaurier 88991e353e fix(docs): resolve missing native Astro compiler bindings in root execution
CI / lint-and-format (push) Successful in 37s
CI / changeset-check (push) Successful in 27s
CI / unit-tests (push) Successful in 42s
CI / component-tests (push) Successful in 32s
CI / lint-and-format (pull_request) Successful in 35s
CI / changeset-check (pull_request) Successful in 25s
CI / unit-tests (pull_request) Successful in 37s
CI / component-tests (pull_request) Successful in 34s
pnpm v11 aggressively purges nested optional platform-specific dependencies during hoisted workspace resolution if the host detection mismatches local metadata. Moving these packages to root devDependencies bypasses pnpm's optional filtering logic, forcing a deterministic physical download of the required Rust compiler binary without cluttering the published library's package.json.

Fixes: #23
2026-08-15 21:33:53 +02:00
Ninosaurier 63dbbdb971 Merge pull request 'sync: merge main into dev' (#22) from main into dev
CI / lint-and-format (push) Successful in 34s
CI / changeset-check (push) Successful in 28s
CI / unit-tests (push) Successful in 39s
CI / component-tests (push) Successful in 29s
Reviewed-on: #22
2026-08-12 12:03:05 +00:00
Ninosaurier b480ecb268 Merge pull request 'docs(readme): remove outdated storybook root-script gap notice' (#21) from docs/fix-readme-storybook into main
CI / lint-and-format (push) Successful in 37s
CI / changeset-check (push) Successful in 27s
CI / unit-tests (push) Successful in 34s
CI / component-tests (push) Successful in 30s
CI / lint-and-format (pull_request) Successful in 33s
CI / changeset-check (pull_request) Successful in 28s
CI / unit-tests (pull_request) Successful in 39s
CI / component-tests (pull_request) Successful in 29s
Reviewed-on: #21
2026-08-12 11:52:15 +00:00
Ninosaurier 475a6cb634 docs(readme): remove outdated storybook root-script gap notice
CI / lint-and-format (push) Successful in 35s
CI / changeset-check (push) Successful in 27s
CI / unit-tests (push) Successful in 41s
CI / component-tests (push) Successful in 32s
CI / lint-and-format (pull_request) Successful in 35s
CI / changeset-check (pull_request) Successful in 31s
CI / unit-tests (pull_request) Successful in 37s
CI / component-tests (pull_request) Successful in 31s
Removes the note stating that running Storybook from the repository
root isn't set up yet, along with the old cd-into-package workaround
instructions. This gap was closed by the root-level pnpm run
storybook script added in #11, so the outdated guidance is no longer
accurate.
2026-08-12 13:47:01 +02:00
Ninosaurier f0c59a9b6f Merge pull request 'sync: merge dev into main' (#20) from dev into main
CI / lint-and-format (push) Successful in 38s
CI / changeset-check (push) Successful in 29s
CI / unit-tests (push) Successful in 37s
CI / component-tests (push) Successful in 29s
Reviewed-on: #20

Merge pull request #20 from dev into main

sync: merge dev into main

Syncs dev into main following the merge of PR #19 (storybook root
script).

Closes #11.
2026-08-12 11:22:40 +00:00
Ninosaurier 61ec0d839e Merge pull request 'build(scripts): add root-level pnpm run storybook script' (#19) from build/11-root-storybook-script into dev
CI / lint-and-format (push) Successful in 35s
CI / changeset-check (push) Successful in 32s
CI / unit-tests (push) Successful in 37s
CI / component-tests (push) Successful in 30s
CI / lint-and-format (pull_request) Successful in 36s
CI / changeset-check (pull_request) Successful in 28s
CI / unit-tests (pull_request) Successful in 38s
CI / component-tests (pull_request) Successful in 31s
Reviewed-on: #19

Adds a storybook script to the root package.json that filters into
the luna-charts package, so Storybook can be launched directly from
the repository root instead of requiring a manual cd into
packages/luna-charts. Updates README.md to document the new command
as part of the standard developer workflow.

Closes #11.
2026-08-12 10:48:59 +00:00
Ninosaurier 382536168b build(scripts): add root-level pnpm run storybook script
CI / lint-and-format (push) Successful in 34s
CI / changeset-check (push) Successful in 27s
CI / unit-tests (push) Successful in 41s
CI / component-tests (push) Successful in 30s
CI / lint-and-format (pull_request) Successful in 34s
CI / changeset-check (pull_request) Successful in 27s
CI / unit-tests (pull_request) Successful in 36s
CI / component-tests (pull_request) Successful in 30s
Adds a storybook script to the root package.json that filters into
the luna-charts package, so Storybook can be launched directly from
the repository root instead of requiring a manual cd into
packages/luna-charts. Updates README.md to document the new command
as part of the standard developer workflow.

 Closes #11.
2026-08-12 12:30:48 +02:00
28 changed files with 1871 additions and 5602 deletions
-5
View File
@@ -1,5 +0,0 @@
---
'luna-charts': minor
---
Establish the initial project foundation with architecture, documentation, governance, and development tooling.
+1 -1
View File
@@ -87,4 +87,4 @@ jobs:
- name: Run component tests (Playwright) - name: Run component tests (Playwright)
working-directory: packages/luna-charts working-directory: packages/luna-charts
run: pnpm test:browser run: pnpm test:browser --passWithNoTests
+1 -1
View File
@@ -18,4 +18,4 @@ WORKDIR /app/packages/luna-charts
RUN pnpm add -D @rolldown/binding-linux-x64-gnu RUN pnpm add -D @rolldown/binding-linux-x64-gnu
CMD ["pnpm", "test:browser"] CMD ["pnpm", "test:browser", "--", "--passWithNoTests"]
+6 -15
View File
@@ -2,7 +2,7 @@
LUNA Charts is a reusable, developer-friendly charting library designed to make accessible, WCAG-oriented data visualization the default rather than an afterthought. LUNA Charts is a reusable, developer-friendly charting library designed to make accessible, WCAG-oriented data visualization the default rather than an afterthought.
> **Project status:** Groundwork phase. Core architecture and tooling are in place; production-ready chart components (starting with `BarChart`) are still in development. See the [Roadmap](./docs/src/content/docs/getting-started/roadmap.mdx) for details. > **Project status:** Working on First Proof of Concept v0.3.0 phase. This milestone focuses on validating the core technical and accessibility assumptions of the library through a first working implementation. The goal is to prove that the chosen architecture (SVG rendering, Web Components, accessibility-first approach) actually works in practice before committing to a broader component set. See the [Roadmap](./docs/src/content/docs/getting-started/roadmap.mdx) for details.
## Preface & Repository Mirror Notice ## Preface & Repository Mirror Notice
@@ -17,7 +17,7 @@ Please be aware of our repository structure:
Most charting libraries treat accessibility as an add-on. LUNA Charts builds it in from the start: Most charting libraries treat accessibility as an add-on. LUNA Charts builds it in from the start:
* **Accessible by default** — components are designed and tested against WCAG guidance from day one, not patched in afterward * **Accessible by default** — components are designed and tested against WCAG guidance from day one, not patched in afterward
* **Framework-agnostic** — built as standard Web Components (Stencil), usable in React, Vue, Angular, Svelte, or plain HTML * **Framework-agnostic** — built as standard Web Components (Stencil), usable in React, Vue or Angular.
* **SVG-based rendering** — inspectable, stylable, and screen-reader-friendly output instead of an opaque canvas * **SVG-based rendering** — inspectable, stylable, and screen-reader-friendly output instead of an opaque canvas
## Tech Stack ## Tech Stack
@@ -59,8 +59,9 @@ luna-charts/
### Prerequisites ### Prerequisites
* Node.js `>= 22.0.0` * [Node Version manager](https://github.com/nvm-sh/nvm/blob/master/README.md) `0.40.7`
* pnpm `11.11.0` (see `devEngines` in `package.json`; pnpm will be downloaded automatically via Corepack if missing) * Node.js `>= 24.0.0`. Use `nvm install 24` for it
* pnpm `12.0.0`
* Docker (required for running component/browser tests locally, see below) * Docker (required for running component/browser tests locally, see below)
### Installation ### Installation
@@ -91,17 +92,7 @@ pnpm install
| `pnpm run lint` | Run the linter to check for code style and quality issues | | `pnpm run lint` | Run the linter to check for code style and quality issues |
| `pnpm run format` | Run the formatter to automatically fix code style issues | | `pnpm run format` | Run the formatter to automatically fix code style issues |
| `pnpm run test:browser` | Run browser tests (only works inside the `packages/luna-charts` directory) | | `pnpm run test:browser` | Run browser tests (only works inside the `packages/luna-charts` directory) |
| `pnpm run storybook` | Start the storybook documentation |
### Storybook
Storybook currently needs to be started from within the library package directly:
```bash
cd packages/luna-charts
pnpm run storybook
```
> **Note:** Running Storybook from the repository root isn't set up yet. This is a known gap — contributions to add a root-level `pnpm --filter` script are welcome.
Component and browser tests run inside Docker (`docker-compose.test.yaml`), based on the same `Dockerfile.test` used to build the image CI tests against, to guarantee a reproducible browser environment — you don't need Playwright browsers installed locally. Locally this image is built on demand; in CI a prebuilt version of the same image is pulled directly (see [ADR-0002](./docs/src/content/docs/architecture/adr/000200-technology-stack.mdx) and the [Technology Architecture](./docs/src/content/docs/architecture/adm/technology-architecture.mdx#66-test-execution-environment) doc for details). Component and browser tests run inside Docker (`docker-compose.test.yaml`), based on the same `Dockerfile.test` used to build the image CI tests against, to guarantee a reproducible browser environment — you don't need Playwright browsers installed locally. Locally this image is built on demand; in CI a prebuilt version of the same image is pulled directly (see [ADR-0002](./docs/src/content/docs/architecture/adr/000200-technology-stack.mdx) and the [Technology Architecture](./docs/src/content/docs/architecture/adm/technology-architecture.mdx#66-test-execution-environment) doc for details).
+3
View File
@@ -19,3 +19,6 @@ pnpm-debug.log*
# macOS-specific files # macOS-specific files
.DS_Store .DS_Store
# IDE specific files
.vscode
+13
View File
@@ -0,0 +1,13 @@
# docs
## 0.2.0
### Minor Changes
- This release introduces the next iteration of LUNA Charts with improvements to the component architecture, development workflow, testing infrastructure, and documentation.
- Improved component development and project structure
- Enhanced component testing infrastructure
- Improved CI/CD test handling, including projects without test files
- Updated and extended project documentation
- Various improvements and fixes across the library
+3 -3
View File
@@ -1,7 +1,7 @@
{ {
"name": "docs", "name": "docs",
"type": "module", "type": "module",
"version": "0.0.1", "version": "0.2.0",
"scripts": { "scripts": {
"dev": "astro dev", "dev": "astro dev",
"start": "astro dev", "start": "astro dev",
@@ -10,8 +10,8 @@
"astro": "astro" "astro": "astro"
}, },
"dependencies": { "dependencies": {
"@astrojs/starlight": "^0.41.3", "@astrojs/starlight": "^0.41.9",
"astro": "^7.0.2", "astro": "^7.2.9",
"sharp": "^0.34.5" "sharp": "^0.34.5"
} }
} }
-4323
View File
File diff suppressed because it is too large Load Diff
-3
View File
@@ -1,3 +0,0 @@
allowBuilds:
esbuild: true
sharp: true
@@ -1,11 +1,11 @@
--- ---
title: "ADR-0001000: Repository Structure" title: "ADR-000100: Repository Structure"
description: "Decision to use a pnpm-based monorepo structure for LUNA Charts." description: "Decision to use a pnpm-based monorepo structure for LUNA Charts."
--- ---
* **Status:** Accepted * **Status:** Accepted
* **Date:** 2026-07-12 * **Date:** 2026-07-12
* **Last Updated:** 2026-07-17 * **Last Updated:** 2026-08-31
* **Decision Makers:** LUNA Charts Maintainers * **Decision Makers:** LUNA Charts Maintainers
--- ---
@@ -1,11 +1,11 @@
--- ---
title: "ADR-0002000: Technology Stack" title: "ADR-000200: Technology Stack"
description: "Selection of the technology stack for LUNA Charts based on the TOGAF architectural principles." description: "Selection of the technology stack for LUNA Charts based on the TOGAF architectural principles."
--- ---
* **Status:** Accepted * **Status:** Accepted
* **Date:** 2026-07-12 * **Date:** 2026-07-12
* **Last Updated:** 2006-07-17 * **Last Updated:** 2026-07-17
* **Decision Makers:** LUNA Charts Maintainers * **Decision Makers:** LUNA Charts Maintainers
--- ---
@@ -58,7 +58,7 @@ The following factors influenced the decision:
| Code Formatting | Manual Formatting, Prettier | **Prettier** | | Code Formatting | Manual Formatting, Prettier | **Prettier** |
| Static Analysis | TSLint, ESLint | **ESLint** | | Static Analysis | TSLint, ESLint | **ESLint** |
| Versioning | Manual Versioning, Semantic Release, Changesets | **Changesets** | | Versioning | Manual Versioning, Semantic Release, Changesets | **Changesets** |
| Continuous Integration | GitLab CI, Azure Pipelines, GitHub Actions | **GitHub Actions** | | Continuous Integration | GitLab CI, Azure Pipelines, Gitea Actions | **Gitea Actions** |
The selected technologies best support the project's architectural goals while remaining broadly adopted and well documented. The selected technologies best support the project's architectural goals while remaining broadly adopted and well documented.
@@ -1,5 +1,5 @@
--- ---
title: "ADR-0003000: Web Components as Public API" title: "ADR-000300: Web Components as Public API"
description: "Decision to make LUNA Charts' public API available exclusively via Web Components." description: "Decision to make LUNA Charts' public API available exclusively via Web Components."
--- ---
@@ -0,0 +1,111 @@
---
title: "ADR-000600: Declarative Component API"
description: "LUNA Charts exposes chart functionality through a strongly typed, component-based declarative API."
---
* **Status:** Accepted
* **Date:** 2026-08-31
* **Decision Makers:** LUNA Charts Maintainers
---
## Context
LUNA Charts must provide a developer-facing API that is easy to understand, strongly typed, framework-agnostic, and capable of enforcing accessibility and validation rules consistently.
Several API models were considered, including a pure domain-specific language (DSL), JSON-based configuration, and a component-based API. The architecture also requires a controlled system boundary so that developers provide chart data and configuration without directly interfering with internal processing.
The Information Systems Architecture defines chart-specific components such as `<BarChart />`, `<LineChart />`, and `<PieChart />`, each with its own strongly typed data model. A single controlled entry point is used for developer interaction, while validation, configuration resolution, accessibility enforcement, and rendering remain under the ownership of the library.
---
## Decision Drivers
* Developer Experience
* Type Safety
* Framework Agnosticism
* Accessibility
* Maintainability
* Predictable Behavior
* Clear System Boundaries
* Simplicity
---
## Considered Alternatives
| Alternative | Description |
| ----------- | ----------- |
| Component-based declarative API | Developers configure charts through strongly typed chart components and their properties. |
| JSON-based API | Developers provide chart definitions as JSON objects that are interpreted by the library. |
| Pure DSL | A dedicated textual or configuration language is used to describe charts. |
| Imperative API | Developers directly invoke rendering and processing operations. |
The component-based declarative API was selected because it provides a natural developer experience, strong TypeScript integration, and a clear boundary between public inputs and internal processing. JSON and pure DSL approaches would require an additional abstraction layer and provide less natural integration with component-based frontend ecosystems. An imperative API would expose more implementation details and weaken the controlled processing model.
---
## Decision
LUNA Charts uses a **component-based declarative API** as its primary developer interaction model.
Developers interact with chart-specific components such as:
* `<BarChart />`
* `<LineChart />`
* `<PieChart />`
Each chart component exposes a strongly typed data and configuration model.
The public API is the controlled entry point into the library. Developers provide structured data and configuration, while the internal processing pipeline remains under the control of LUNA Charts.
---
## Rationale
A component-based declarative API aligns the developer experience with modern web component and framework ecosystems while allowing TypeScript to express valid data and configuration structures.
The model also supports LUNA Charts' architectural goals:
* Developers describe the desired chart rather than controlling rendering steps.
* Type-safe contracts make invalid inputs more explicit.
* Internal validation and accessibility enforcement remain centrally controlled.
* The same conceptual API can be consumed through framework-specific integrations.
* The API remains predictable and maintainable as additional chart types are introduced.
---
## Consequences
### Positive
* Clear and approachable developer API.
* Strong TypeScript integration and type safety.
* Declarative usage reduces exposure to internal implementation details.
* Consistent integration model across supported frontend ecosystems.
* Internal accessibility and validation rules remain centrally enforceable.
* New chart types can follow the same API pattern.
### Negative
* Developers have less low-level control over internal processing.
* Custom behavior outside the defined API requires changes by the LUNA Charts maintainers.
* Strong API constraints can make unusual use cases harder to support.
* Each chart type requires a dedicated typed model.
---
## Related TOGAF Phases
* Architecture Vision (Phase A)
* Business Architecture (Phase B)
* Information Systems Architecture (Phase C)
* Technology Architecture (Phase D)
---
## References
* [Information Systems Architecture](../adm/information-systems-architecture/)
* [Technology Architecture](../adm/technology-architecture/)
* [ADR-000300 Web Components as Public API](./000300-web-components-as-public-api/)
@@ -0,0 +1,102 @@
---
title: "ADR-0007000: No Plugin or Extension System"
description: "LUNA Charts does not provide a consumer-facing plugin or extension mechanism."
---
* **Status:** Accepted
* **Date:** 2026-08-31
* **Decision Makers:** LUNA Charts Maintainers
---
## Context
LUNA Charts is designed as an opinionated charting library with a controlled internal processing pipeline. Accessibility, validation, configuration resolution, and rendering are library-owned responsibilities.
An extension mechanism could allow consumers to modify internal behavior or add functionality without changing the core library. However, unrestricted extensibility could also introduce inconsistent behavior, weaken accessibility guarantees, and increase architectural and maintenance complexity.
The Information Systems Architecture therefore defines LUNA Charts as a closed system with a strict input boundary and no external plugin or extension mechanism.
---
## Decision Drivers
* Accessibility
* Maintainability
* Predictable Behavior
* Simplicity
* Quality Control
* Security
* Developer Experience
---
## Considered Alternatives
| Alternative | Description |
| ----------- | ----------- |
| No plugin or extension system | Consumers use only the public API provided by LUNA Charts. |
| Consumer plugin system | Consumers can register plugins that modify or extend library behavior. |
| Extension hooks | Consumers can inject custom logic into selected processing stages. |
| Fully extensible architecture | Internal layers and chart types can be extended directly by consumers. |
The no-plugin approach was selected because the library's accessibility and rendering behavior must remain centrally controlled. Plugin systems and extension hooks would increase the number of execution paths that must be validated and supported.
---
## Decision
LUNA Charts **does not provide a consumer-facing plugin or extension system**.
Consumers interact with the library exclusively through its defined public API. Internal processing stages cannot be replaced, intercepted, or extended by consumers.
New chart types, accessibility behavior, rendering capabilities, and other architectural functionality are implemented and maintained within the LUNA Charts project itself.
---
## Rationale
LUNA Charts is intentionally opinionated. Its value depends not only on providing chart visualizations but also on providing predictable and accessible implementations.
Allowing consumers to modify internal behavior would make it harder to guarantee consistent accessibility and quality. A closed architecture keeps the processing pipeline deterministic and allows maintainers to evolve the implementation under a single quality and accessibility model.
This decision also avoids the additional API surface, compatibility requirements, documentation burden, and support obligations associated with a plugin ecosystem.
---
## Consequences
### Positive
* Centralized control over accessibility behavior.
* Predictable and deterministic processing.
* Smaller public API surface.
* Lower maintenance and compatibility burden.
* Easier quality assurance and testing.
* No plugin ecosystem needs to be designed or maintained.
* Reduced risk that consumer extensions bypass architectural safeguards.
### Negative
* Consumers cannot add custom processing stages.
* Consumers cannot introduce custom chart types through plugins.
* Unusual use cases may require changes to LUNA Charts itself.
* The architecture places more responsibility on the maintainers to evolve the library.
---
## Related TOGAF Phases
* Architecture Vision (Phase A)
* Business Architecture (Phase B)
* Information Systems Architecture (Phase C)
* Technology Architecture (Phase D)
---
## References
* [Business Architecture](../adm/business-architecture/)
* [Information Systems Architecture](../adm/information-systems-architecture/)
* [Technology Architecture](../adm/technology-architecture/)
* [ADR-000500 Accessibility as a Cross-Cutting Concern](./000500-accessibility-as-a-cross-cutting-concern/)
@@ -0,0 +1,101 @@
---
title: "ADR-000800: Single-Package Distribution Model"
description: "LUNA Charts is distributed as one unified package rather than separate packages per chart type or internal module."
---
* **Status:** Accepted
* **Date:** 2026-08-31
* **Decision Makers:** LUNA Charts Maintainers
---
## Context
LUNA Charts is developed as a monorepo and contains multiple internal modules and chart types. The repository structure must remain flexible for implementation while the public distribution model should remain simple for consumers.
The architecture distinguishes between internal implementation boundaries and the public package boundary. Chart types such as BarChart, LineChart, and PieChart are not intended to become independent npm packages.
LUNA Charts is intended to be consumed as one coherent, accessibility-focused library.
---
## Decision Drivers
* Developer Experience
* Simplicity
* Accessibility
* Maintainability
* Consistent API Behavior
* Framework Agnosticism
* Release Management
* Reduced Package Fragmentation
---
## Considered Alternatives
| Alternative | Description |
| ----------- | ----------- |
| Single package | All public chart functionality is distributed through one LUNA Charts package. |
| Package per chart type | Each chart type is published as an independent npm package. |
| Package per internal module | Internal modules such as core and charts are independently published. |
| Monorepo with multiple public packages | The repository remains a monorepo while several independently versioned packages are published. |
The single-package model was selected because the library is intended to provide one coherent developer experience and one consistent accessibility model. Publishing chart types or internal modules separately would increase package, versioning, dependency, and compatibility complexity.
---
## Decision
LUNA Charts is distributed as **one unified public npm package**.
Chart types, core functionality, accessibility mechanisms, and other implementation modules remain internal parts of the distribution and are not published as separate public packages.
Framework-specific integrations generated from the Stencil-based implementation are considered part of the overall LUNA Charts distribution model rather than independent chart packages.
---
## Rationale
A single package gives consumers one installation target and one coherent version of the library.
It also supports the project's accessibility-first architecture. Accessibility enforcement, validation, rendering, and chart functionality can evolve together without requiring consumers to coordinate compatible versions of several packages.
The monorepo therefore provides internal organizational and architectural separation without exposing unnecessary package fragmentation to consumers.
---
## Consequences
### Positive
* Simple installation and onboarding.
* One public version and release lifecycle.
* Consistent accessibility and API behavior across chart types.
* No dependency coordination between separate chart packages.
* Easier documentation and support.
* Internal modules can evolve without becoming public package contracts.
### Negative
* Consumers cannot install only an individual chart package.
* The public package may contain functionality that a particular consumer does not use.
* A change in one part of the library may require a release of the unified package.
* Package-level boundaries cannot be used to independently version individual chart types.
---
## Related TOGAF Phases
* Architecture Vision (Phase A)
* Business Architecture (Phase B)
* Information Systems Architecture (Phase C)
* Technology Architecture (Phase D)
---
## References
* [Repository Structure](./000100-repository-structure/)
* [Technology Architecture](../adm/technology-architecture/)
* [Information Systems Architecture](../adm/information-systems-architecture/)
@@ -0,0 +1,116 @@
---
title: "ADR-000900: Multi-Layer Testing Strategy"
description: "LUNA Charts uses multiple complementary quality assurance layers with automated release gates."
---
* **Status:** Accepted
* **Date:** 2026-08-31
* **Decision Makers:** LUNA Charts Maintainers
---
## Context
LUNA Charts is an accessibility-focused charting library whose output must be correct, stable, and usable across supported environments.
No single testing technique can adequately validate the library. Functional correctness, accessibility constraints, DOM and SVG structure, visual stability, code quality, and real-world usability require different forms of verification.
The Technology Architecture therefore defines a multi-layer quality assurance model covering functional tests, accessibility tests, linting, visual regression testing, and usability testing. Automated checks are combined with release gating so that defined quality requirements are evaluated before releases.
---
## Decision Drivers
* Accessibility
* Reliability
* Visual Stability
* Maintainability
* Developer Experience
* Reproducibility
* Release Quality
* Automation
---
## Considered Alternatives
| Alternative | Description |
| ----------- | ----------- |
| Multi-layer testing strategy | Multiple complementary test and quality layers are combined into release gates. |
| Unit tests only | Functional behavior is validated primarily through unit tests. |
| End-to-end tests only | Browser-based tests are used as the primary validation mechanism. |
| Manual testing only | Quality is validated through manual verification before releases. |
The multi-layer approach was selected because each alternative alone leaves important quality risks uncovered. Unit tests do not sufficiently validate browser behavior or accessibility, while browser tests alone are less efficient for isolated logic. Manual testing remains valuable for usability but cannot provide sufficient automated regression coverage.
---
## Decision
LUNA Charts uses a **multi-layer testing and quality assurance strategy**.
The strategy includes:
1. **Functional testing** for core logic and processing behavior.
2. **Accessibility testing** for machine-verifiable accessibility requirements and ARIA structure.
3. **Code quality checks** including linting and formatting-related quality controls.
4. **Visual regression testing** to detect unintended visual and structural changes.
5. **Usability testing** for relevant minor and major releases and significant user-facing changes.
6. **Release gates** that prevent releases when required automated quality checks fail.
Browser-based tests use a reproducible test execution environment so that local and CI execution can use a controlled environment.
---
## Rationale
LUNA Charts has accessibility and visual output as central quality attributes. These cannot be reliably validated through unit tests alone.
A layered strategy assigns each quality concern to an appropriate verification mechanism:
* Unit tests provide fast feedback for logic.
* Accessibility tests validate machine-verifiable accessibility constraints.
* Linting protects code and architectural consistency.
* Visual regression tests protect rendered output and relevant DOM structure.
* Usability testing evaluates aspects that cannot be reliably automated.
* Release gates ensure required automated checks are completed before distribution.
The approach balances fast developer feedback with stronger release confidence.
---
## Consequences
### Positive
* Higher confidence in functional correctness.
* Accessibility becomes part of the quality process rather than a final manual check.
* Visual regressions can be detected automatically.
* Release quality is enforced consistently.
* Different test types can remain focused on the problems they are best suited to detect.
* Reproducible browser test execution reduces environment-related differences between developers and CI.
### Negative
* More tooling and infrastructure must be maintained.
* Test execution can require more time and resources than unit tests alone.
* Visual regression tests require maintenance when intentional visual changes occur.
* Usability testing introduces manual effort.
* Release gates can delay releases when infrastructure or tests fail.
---
## Related TOGAF Phases
* Architecture Vision (Phase A)
* Technology Architecture (Phase D)
* Opportunities and Solutions (Phase E)
* Implementation Governance (Phase G)
---
## References
* [Technology Architecture](../adm/technology-architecture/)
* [Testing and Quality Strategy](../adm/technology-architecture/#6-testing--quality-strategy)
* [ADR-000500 Accessibility as a Cross-Cutting Concern](./000500-accessibility-as-a-cross-cutting-concern/)
@@ -17,7 +17,7 @@ luna-charts/
├── examples/ ├── examples/
├── .github/ ├── .gitea/
├── package.json ├── package.json
└── pnpm-workspace.yaml └── pnpm-workspace.yaml
@@ -11,77 +11,92 @@ Instead of implementing features immediately, the project establishes a solid ar
--- ---
## Current Status ## Completed Milestones ✅
**Current Phase:** Groundwork <details>
<summary>**Completed:** Groundwork (v0.1.0)</summary>
The project is currently preparing the technical and organizational foundation for future development. The project is preparing the technical and organizational foundation for future development.
Completed work includes: Completed work includes:
- Repository structure - **Repository structure:** Standardized layout for code, configurations, and assets.
- Development workflow - \*\*Development workflow: Definition of branching strategies, commit rules, and review processes.
- Architecture documentation (TOGAF ADM) - **Architecture documentation (TOGAF ADM):** Architecture framework set up according to the TOGAF standard.
- Architecture Decision Records (ADRs) - **Architecture Decision Records (ADRs 1-5):** System established for transparent documentation of architectural decisions.
- Project governance - **Project governance:** Defined roles, responsibilities, and decision-making processes.
- Documentation infrastructure - **Documentation infrastructure:** "Docs-as-Code" setup integrated into the repository.
At this stage, no production-ready chart components are available. At this stage, no production-ready chart components are available.
--- </details>
## Upcoming Milestones
### Foundation
- Create the initial StencilJS library
- Establish Storybook for component development
- Configure testing infrastructure
- Configure CI/CD pipeline
--- ---
### First Proof of Concept <details>
<summary>
Completed Foundation v0.2.0
</summary>
This milestone focuses on setting up the technical core of the component library. The goal is to build an automated,
testable, and documented environment for efficient StencilJS component development.
Deliver the first functional chart implementation to validate the technical architecture. This milestone focuses on setting up the technical core of the component library. The goal is to build an automated,
testable, and documented environment for efficient StencilJS component development.
- **Create the initial StencilJS library:** Initialize the codebase and core configurations for the web component engine.
- **Establish Storybook for component development:** Set up Storybook as the development environment and isolated playground for component creation.
- **Configure testing infrastructure:** Configure unit, integration, or visual regression testing frameworks.
- **Configure CI/CD pipeline:** Automate linting, testing, and initial build checks on every repository push or pull request.
</details>
---
## Current Status ⏳
### First Proof of Concept v0.3.0
This milestone focuses on validating the core technical and accessibility assumptions of the library through a first
working implementation. The goal is to prove that the chosen architecture (SVG rendering, Web Components, accessibility-first
approach) actually works in practice before committing to a broader component set.
Goals include: Goals include:
- SVG rendering - **SVG rendering:** Implement a first chart component using SVG-based rendering.
- Accessibility validation - **Accessibility validation:** Verify WCAG compliance with automated (axe-core) and manual (screen reader) testing.
- Framework integration - **Framework integration:** Confirm the component works correctly when consumed from at
- Community feedback least one external framework (e.g. React or Vue).
- **Community feedback:** Share the proof of concept for early feedback before scaling to further components.
--- ---
### Minimum Viable Product (MVP) ## Upcoming Milestones 🚀
Provide the first publicly usable version of LUNA Charts. ### Minimum Viable Product (MVP) v1.0.0
This milestone marks the first public-ready release. The goal is a stable, documented,
and accessible set of chart components that can be safely adopted by external users.
The MVP focuses on delivering value rather than completeness. The MVP focuses on delivering value rather than completeness.
Expected outcomes include: Expected outcomes include:
- Initial chart collection - **Initial chart collection:** Ship a first stable set of chart types built on the validated architecture.
- Stable public API - **Stable public API:** Freeze the public component API surface and document breaking-change policy.
- Documentation - **Documentation:** Complete user-facing documentation (usage guides, API reference, accessibility notes).
- Example applications - **Example applications:** Provide working examples for common framework integrations.
- Accessibility support - **Accessibility support:** Ensure all shipped components meet the project's WCAG target across the full component set.
--- ---
### Community Growth ### Community Growth
After the MVP, the project will gradually expand. With a stable MVP in place, this milestone shifts focus toward expanding the library's reach,
capabilities, and contributor base.
Future work may include: Future work may include:
- Additional chart types - **Additional chart types:** Expand the component library beyond the initial MVP set.
- Advanced customization - **Advanced customization:** Add theming, styling, and configuration options requested by users.
- Performance improvements - **Performance improvements:** Optimize rendering and bundle size based on real-world usage.
- Extended framework support - **Extended framework support:** Broaden compatibility with additional frameworks and build tools.
- Community contributions - **Community contributions:** Establish a smooth path for external contributors (good-first-issue labeling, contributor docs).
- Governance evolution - **Governance evolution:** Revisit and evolve project governance as the contributor base grows.
--- ---
+8 -6
View File
@@ -1,6 +1,6 @@
{ {
"name": "LUNA-Charts", "name": "LUNA-Charts",
"version": "1.0.0", "version": "0.2.0",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
@@ -11,6 +11,7 @@
"changeset": "changeset", "changeset": "changeset",
"version": "changeset version", "version": "changeset version",
"release": "changeset publish", "release": "changeset publish",
"storybook": "pnpm --filter luna-charts run storybook",
"test:unit": "pnpm --filter luna-charts test:unit", "test:unit": "pnpm --filter luna-charts test:unit",
"test:component": "docker compose -f docker-compose.test.yaml up --build --abort-on-container-exit --exit-code-from test", "test:component": "docker compose -f docker-compose.test.yaml up --build --abort-on-container-exit --exit-code-from test",
"test": "pnpm test:unit && pnpm test:component" "test": "pnpm test:unit && pnpm test:component"
@@ -19,16 +20,17 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"devEngines": { "devEngines": {
"runtime": {
"name": "node",
"version": ">=22.0.0"
},
"packageManager": { "packageManager": {
"name": "pnpm", "name": "pnpm",
"version": "11.11.0", "version": "12.0.0",
"onFail": "download" "onFail": "download"
},
"runtime": {
"name": "node",
"version": ">=24.0.0"
} }
}, },
"packageManager": "pnpm@12.0.0",
"type": "module", "type": "module",
"devDependencies": { "devDependencies": {
"@changesets/cli": "^2.31.0", "@changesets/cli": "^2.31.0",
+15
View File
@@ -0,0 +1,15 @@
# luna-charts
## 0.2.0
### Minor Changes
- This release introduces the next iteration of LUNA Charts with improvements to the component architecture, development workflow, testing infrastructure, and documentation.
- Improved component development and project structure
- Enhanced component testing infrastructure
- Improved CI/CD test handling, including projects without test files
- Updated and extended project documentation
- Various improvements and fixes across the library
- 72c49e6: Establish the initial project foundation with architecture, documentation, governance, and development tooling.
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "luna-charts", "name": "luna-charts",
"version": "0.0.1", "version": "0.2.0",
"description": "Stencil Component Starter", "description": "Stencil Component Starter",
"main": "dist/index.cjs.js", "main": "dist/index.cjs.js",
"module": "dist/index.js", "module": "dist/index.js",
@@ -1,37 +0,0 @@
import { render, h, describe, it, expect } from '@stencil/vitest';
import { runA11yChecks } from '../../testing/a11y';
describe('my-component', () => {
it('renders', async () => {
const { root } = await render(<my-component></my-component>);
await expect(root).toEqualHtml(`
<my-component class="hydrated">
<mock:shadow-root>
<div>
Hello, World! I'm
</div>
</mock:shadow-root>
</my-component>
`);
});
it('has no accessibility violations', async () => {
const { root } = await render(<my-component></my-component>);
const results = await runA11yChecks(root);
expect(results).toHaveNoA11yViolations();
});
it('renders with values', async () => {
const { root } = await render(<my-component first="Stencil" middle="'Don't call me a framework'" last="JS"></my-component>);
await expect(root).toEqualHtml(`
<my-component class="hydrated">
<mock:shadow-root>
<div>
Hello, World! I'm Stencil 'Don't call me a framework' JS
</div>
</mock:shadow-root>
</my-component>
`);
});
});
@@ -1,3 +0,0 @@
:host {
display: block;
}
@@ -1,41 +0,0 @@
import type { Meta, StoryObj } from '@stencil/storybook-plugin';
import { h } from '@stencil/core';
import { MyComponent } from './my-component';
const meta: Meta<MyComponent> = {
title: 'MyComponent',
component: MyComponent,
parameters: {
layout: 'centered',
},
argTypes: {
first: { control: 'text' },
last: { control: 'text' },
middle: { control: 'text' },
},
args: { first: 'John', last: 'Doe', middle: 'Michael' },
};
export default meta;
type Story = StoryObj<MyComponent>;
export const Primary: Story = {
args: {
first: 'John',
last: 'Doe',
middle: 'Michael',
},
render: props => <my-component {...props} />,
};
/**
* Storybook story without custom render function
*/
export const Secondary: Story = {
args: {
first: 'Jane',
last: 'Smith',
middle: 'Marie',
},
};
@@ -1,32 +0,0 @@
import { Component, Prop, h } from '@stencil/core';
import { format } from '../../utils/utils';
@Component({
tag: 'my-component',
styleUrl: 'my-component.css',
shadow: true,
})
export class MyComponent {
/**
* The first name
*/
@Prop() first?: string;
/**
* The middle name
*/
@Prop() middle?: string;
/**
* The last name
*/
@Prop() last?: string;
private getText(): string {
return format(this.first, this.middle, this.last);
}
render() {
return <div>Hello, World! I'm {this.getText()}</div>;
}
}
@@ -1,15 +0,0 @@
# my-component
<!-- Auto Generated Below -->
## Properties
| Property | Attribute | Description | Type | Default |
| -------- | --------- | --------------- | --------------------- | ----------- |
| `first` | `first` | The first name | `string \| undefined` | `undefined` |
| `last` | `last` | The last name | `string \| undefined` | `undefined` |
| `middle` | `middle` | The middle name | `string \| undefined` | `undefined` |
---
_Built with [StencilJS](https://stenciljs.com/)_
+1317 -1059
View File
File diff suppressed because it is too large Load Diff
+7 -6
View File
@@ -3,19 +3,20 @@ packages:
- "docs/" - "docs/"
allowBuilds: allowBuilds:
esbuild: true
sharp: true sharp: true
esbuild: true
playwright: true
onlyBuiltDependencies: fetchTimeout: 300000
- playwright fetchRetries: 10
supportedArchitectures: supportedArchitectures:
os: os:
- current - current
- linux
cpu: cpu:
- current - current
- x64
libc: libc:
- current - current
- glibc
minimumReleaseAgeExclude:
- astro@7.2.9