Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
f55e17f
feat(a12): implement two column layout
TBum1404 Jul 16, 2026
90c5548
chore(wizard-redesign): add roadmap
TBum1404 Jul 16, 2026
8b77fc7
Merge branch 'feature/wizard-redesign' into feat/a12-two-column
TBum1404 Jul 16, 2026
c1ee3c0
feat(a12): move the stepheader and description into the navbar
TBum1404 Jul 16, 2026
bf9794f
feat(a12): align Header with Stepindicator
TBum1404 Jul 17, 2026
deb3dcc
chore(a12): update ROADMAP
TBum1404 Jul 17, 2026
d90b7d9
Merge pull request #72 from visualengineers/feat/a12-two-column
TBum1404 Jul 17, 2026
46c840c
feat(a5): Projektionsparameter in die jeweilige Methodenbox verschieben
TBum1404 Jul 17, 2026
6e86df9
feat(a13): Spaltenauswahl fuer Projektion von Schritt 3 nach Schritt 4
TBum1404 Jul 17, 2026
23c4c87
feat(a13): Projection-Columns-Panel an Design-Vorlage angleichen
TBum1404 Jul 17, 2026
9c85373
feat(a15): einheitliches Tabellen-/Listen-Designsystem in Schritt 2/3/4
TBum1404 Jul 17, 2026
3e6b2a7
feat(a5): Parameterbox in-place aufklappen statt volle Zeile
TBum1404 Jul 17, 2026
ab61d58
feat(a15): Schritt-3-Redesign (Option 1d) + Review-Feedback
TBum1404 Jul 17, 2026
0b44471
feat(a5): Parametersliver im eingeklappten Zustand vollstaendig verst…
TBum1404 Jul 18, 2026
da2f224
feat(a15): Schritt-4-Feature-Liste - Suche/Filter, Drag-Reihenfolge, …
TBum1404 Jul 18, 2026
fdb48aa
fix(a5): Parametersliver durch separaten Clip-Container beseitigen
TBum1404 Jul 18, 2026
8f507ea
feat(a15): Schritt-4-Feinschliff - Preview-Labels, Suggestions-Button…
TBum1404 Jul 18, 2026
3ae7640
Merge pull request #73 from visualengineers/feat/a13-schrittlogik
TBum1404 Jul 18, 2026
0592f2c
Merge feature/wizard-redesign (A13) into feat/a15-table-system
TBum1404 Jul 18, 2026
d3e4077
feat(a15): Tabellen-/Listen-Header auf einheitliche Hoehe (40px)
TBum1404 Jul 18, 2026
a31070f
Merge pull request #75 from visualengineers/feat/a15-table-system
TBum1404 Jul 18, 2026
f651231
Merge feature/wizard-redesign (A13+A15) into feat/a5-gruppierung
TBum1404 Jul 18, 2026
8f4cd95
Merge pull request #74 from visualengineers/feat/a5-gruppierung
TBum1404 Jul 18, 2026
bd685bc
docs(roadmap): A13/A15/A5 auf In Feature-Branch, erweiterten Umfang n…
TBum1404 Jul 18, 2026
5284f1c
docs(roadmap): A12 auf In Feature-Branch
TBum1404 Jul 18, 2026
c70eef5
feat(a2/a9): Smart-Default-Reset ohne Banner und Power-Shortcuts
TBum1404 Jul 19, 2026
b3fea05
feat(a14): Übergangsanimation Schritt 2 zu 3
TBum1404 Jul 19, 2026
b498252
feat(a6/a8): Review-Direktlinks und korrekte Datenanzeige
TBum1404 Jul 19, 2026
5401383
refactor(a14): Übergang als kontinuierlicher Morph statt Fade/Crossfade
TBum1404 Jul 19, 2026
61950de
refactor(a14): Step-2/3-Morph via GSAP Flip statt Angular-Animations
TBum1404 Jul 19, 2026
f86aeca
refactor(a14): Step-2/3-Zustände angleichen für glatteren Flip-Morph
TBum1404 Jul 19, 2026
f738d8b
fix(a14): gleiche Spaltenreihenfolge und Zeilenhöhe für ruhigen Morph…
TBum1404 Jul 19, 2026
67a123e
fix(a6/a8): Review – Projection-Options zweispaltig, Details-Toggle, …
TBum1404 Jul 19, 2026
871c274
fix(a2/a9): Review – inline Resets ohne Verschub, Apply-to-all expliz…
TBum1404 Jul 19, 2026
e065386
Merge pull request #79 from visualengineers/feat/a6-a8-review-datenan…
TBum1404 Jul 20, 2026
71f1343
fix(a2/a9): Step-2-Select – Einzelauswahl sichtbar + Shift-Range inkl…
TBum1404 Jul 20, 2026
195cbf9
Merge remote-tracking branch 'origin/feature/wizard-redesign' into fe…
TBum1404 Jul 20, 2026
d8ee6cf
Merge pull request #78 from visualengineers/feat/a2-a9-defaults-power
TBum1404 Jul 20, 2026
4695286
docs(roadmap): A2/A6/A8/A9 auf In Feature-Branch, A14 In Progress
TBum1404 Jul 20, 2026
61554c6
feat(a3): persistente Fehler- und Statusscreens, Inline-Validierung, …
TBum1404 Jul 20, 2026
cde8f46
feat(a10/a7): Truncation und Tooltips gegen Layout-Bruch, ehrliche Si…
TBum1404 Jul 20, 2026
f77ef0a
feat(a4): Undo/Redo-Historie mit Toolbar, Toast und Tastenkuerzeln
TBum1404 Jul 20, 2026
b42ccd6
docs(a14): Design-Spec ruhiger Morph Schritt 2 zu 3
TBum1404 Jul 20, 2026
e4f12a8
docs(a14): Implementierungsplan ruhiger Morph Schritt 2 zu 3
TBum1404 Jul 20, 2026
0cb7748
feat(a14): ruhiger Zwei-Phasen-Morph Schritt 2 zu 3 (Kollaps links, D…
TBum1404 Jul 20, 2026
617f97a
chore(a14): letztes totes data-flip-id (Flip entfernt) aufraeumen
TBum1404 Jul 20, 2026
e823372
fix(a3): verstaendliche Fehlermeldung, Retry-Feedback, Success-Reproc…
TBum1404 Jul 20, 2026
ab36999
fix(a10/a7): Stepper-Zustaende und Klickbarkeit, einheitliche Chevron…
TBum1404 Jul 20, 2026
fc5ab8d
fix(a4): Cross-Field-Validierung, benannte Undo-Toasts, kein Stacking…
TBum1404 Jul 20, 2026
68e7730
refactor(a14): Morph angeglichen - feste Box-Hoehe, Zeilen-Glide, Hea…
TBum1404 Jul 20, 2026
e4918d9
refactor(a14): ruhiger Morph - gleiche Box-Hoehe, Cross-fade, kein Ve…
TBum1404 Jul 21, 2026
47ced79
fix(a14): weisses Flackern im Morph beseitigen
TBum1404 Jul 21, 2026
65efbcc
fix(a14): weiss->grau->weiss beim Morph beseitigen
TBum1404 Jul 21, 2026
6b78536
perf(a14): Kollaps als Transform statt Layout - kein Ruckeln mehr
TBum1404 Jul 21, 2026
463e4f9
feat(a14): Rail-Header slidet von oben herein statt schlagartig zu er…
TBum1404 Jul 21, 2026
52bdd25
fix(a3): Reprocess-Bug, K7-Fehlerklasse, verstaendliche Fehleranzeige
TBum1404 Jul 21, 2026
5ea463c
Merge pull request #80 from visualengineers/feat/a10-a7-polish
TBum1404 Jul 21, 2026
5a93bb5
Merge pull request #81 from visualengineers/feat/a3-fehleranzeige
TBum1404 Jul 21, 2026
d6d7dcf
Merge branch 'feature/wizard-redesign' into feat/a14-animation
TBum1404 Jul 21, 2026
44ea355
Merge pull request #77 from visualengineers/feat/a14-animation
TBum1404 Jul 21, 2026
d526750
fix(a4): Undo/Redo-Icon als SVG nach Referenz, dezenter Undo-Hinweis …
TBum1404 Jul 21, 2026
090e028
docs(roadmap): A3/A7/A10/A14 In Feature-Branch, A4 In Progress, Stand…
TBum1404 Jul 21, 2026
889d7d6
fix(a4): Undo-Korrektheit (Glyph-Aliasing, Minimum, Farbe) + Historie…
TBum1404 Jul 22, 2026
e409d53
test(a4): Tests fuer Wizard-Shell, SETTING_META-Mapping und restliche…
TBum1404 Jul 22, 2026
0ba2ca1
docs(roadmap): A4 Testvermerk (Undo/Redo durch Tests abgesichert)
TBum1404 Jul 22, 2026
08ce1be
feat(a1): visuelle Projektions-Tooltips und Erklaertexte
TBum1404 Jul 22, 2026
e7af376
fix(a11): Tooltip-Verhalten, Platzierung und Layout-Defekte
TBum1404 Jul 22, 2026
e71e615
Merge origin/feature/wizard-redesign into feat/a4-undo-historie
TBum1404 Jul 22, 2026
a10319a
Merge pull request #82 from visualengineers/feat/a4-undo-historie
TBum1404 Jul 22, 2026
ec89f65
Merge remote-tracking branch 'origin/feature/wizard-redesign' into fe…
TBum1404 Jul 22, 2026
4cbc439
docs(roadmap): A4 In Feature-Branch, A1+A11 In Progress (PR #83), Sta…
TBum1404 Jul 22, 2026
37722ac
Merge pull request #83 from visualengineers/feat/a1-a11-erklaerungen-…
TBum1404 Jul 22, 2026
4df5b2d
docs(roadmap): A1+A11 In Feature-Branch (PR #83 gemergt), alle Ticket…
TBum1404 Jul 22, 2026
8be2bef
docs(roadmap): Umgesetzt-Abschnitte fuer A1 und A11 dokumentiert
TBum1404 Jul 22, 2026
9d945c4
docs(roadmap): Umgesetzt-Abschnitte fuer alle uebrigen Tickets (A2-A1…
TBum1404 Jul 22, 2026
a10f915
docs(roadmap): A2-Nachtrag Smart Defaults (Hochkardinalitaet Schritt …
TBum1404 Jul 22, 2026
a21c899
chore: Planungsartefakte entfernen und docs/superpowers/ ignorieren
TBum1404 Jul 22, 2026
f17e59e
feat(a2): Smart Defaults erweitern - Hochkardinalitaet Schritt 2 + kl…
TBum1404 Jul 22, 2026
c5f281f
Merge pull request #84 from visualengineers/chore/remove-planning-art…
TBum1404 Jul 22, 2026
40fcb7c
Merge pull request #85 from visualengineers/feat/a2-nachtrag-smart-de…
TBum1404 Jul 22, 2026
9b385fa
docs(roadmap): A2-Nachtrag In Feature-Branch (PR #85), Planungsartefa…
TBum1404 Jul 22, 2026
cc1001e
docs(roadmap): Ausblick - manuelles Beenden laufender Reduktionsmetho…
TBum1404 Jul 23, 2026
32c6fd2
fix(wizard): translate step5 status text to English, dedupe K7 column…
TBum1404 Jul 26, 2026
8df39b9
Merge pull request #86 from visualengineers/fix/status-i18n-k7-duplic…
TBum1404 Jul 26, 2026
a4a87c3
feat(wizard): review fixes, 6-step flow, a11y, security and deps
TomBeiTesto Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 67 additions & 10 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
@@ -1,36 +1,93 @@
name: Deploy Angular to GitHub Pages
name: CI and deploy to GitHub Pages

on:
push:
branches:
- main # or master, depending on your default branch
- main
pull_request:

# Least privilege by default; only the deploy job may push to gh-pages.
permissions:
contents: read

jobs:
build-and-deploy:
verify:
runs-on: ubuntu-latest
concurrency:
group: verify-${{ github.ref }}
cancel-in-progress: true

steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v7

- name: 🟢 Setup Node
uses: actions/setup-node@v3
uses: actions/setup-node@v7
with:
node-version: 25
node-version-file: .nvmrc
cache: npm

- name: 📦 Install dependencies
run: npm install
run: npm ci

- name: 🔍 Lint
run: npm run lint

# Vitest runs the unit tests in Playwright's headless Chromium (version pinned by package-lock).
# Not cached on purpose: Playwright advises against it, restoring takes about as long as the
# download, and --with-deps has to install the Linux system packages either way.
- name: 🎭 Install Playwright Chromium
run: npx playwright install --with-deps --only-shell chromium

# The test command lives in package.json ("test:ci") so the runner can be swapped in one place.
- name: 🧪 Unit tests
run: npm run test:ci
env:
# The runner image points CHROME_BIN at its own Google Chrome, which the Angular test
# builder would launch instead of the pinned Playwright Chromium.
CHROME_BIN: ''

- name: 🛠️ Build Angular app
run: npm run build -- --base-href=/glyphspace/ --configuration production

- name: 📄 Create .nojekyll file
run: echo > dist/glyphspace/browser/.nojekyll

# The builder writes the licence list next to browser/, which is the only folder published.
- name: 📜 Publish third-party licences
run: cp dist/glyphspace/3rdpartylicenses.txt dist/glyphspace/browser/

- name: 📤 Upload site artifact
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: actions/upload-artifact@v7
with:
name: site
path: dist/glyphspace/browser/
include-hidden-files: true # keep .nojekyll
if-no-files-found: error
retention-days: 1

deploy:
needs: verify
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: write
concurrency:
group: gh-pages-deploy
cancel-in-progress: false

steps:
- name: 📥 Download site artifact
uses: actions/download-artifact@v8
with:
name: site
path: site

- name: 🚀 Deploy to gh-pages
uses: peaceiris/actions-gh-pages@v3
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist/glyphspace/browser/
publish_dir: ./site
publish_branch: gh-pages
enable_jekyll: false # this adds the .nojekyll file automatically
enable_jekyll: false # this adds the .nojekyll file automatically
13 changes: 10 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
/.sass-cache
/connect.lock
/coverage
# Vitest browser mode: screenshots of failed tests (next to the spec) and their attachment copies
__screenshots__/
/.vitest-attachments
/libpeerconnection.log
npm-debug.log
testem.log
Expand All @@ -42,9 +45,13 @@ testem.log
Thumbs.db

# Miscellaneous
/.angular/cache
/src/assets/__pycache__
/.angular/cache
__pycache__/
.pytest_cache/
/src/assets/tests
/.claude
/.angular
Claude.md
Claude.md

# Planning artifacts (brainstorming/plans/specs) — keep out of the repo
/docs/superpowers/
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
24
86 changes: 38 additions & 48 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,28 @@ Glyphspace is a complete rewrite of the [Glyphboard application](https://github.

See the running demo on Github pages: [https://visual-engineers.org/glyphspace/](https://visual-engineers.org/glyphspace/).

## Usage
## Using the Wizard

... coming soon.
The preprocessing wizard guides you through six steps to prepare your data for visualization:

1. **Upload Data** — Load your CSV file.
2. **Select Columns** — Choose columns to keep; ID and low-value fields can be deselected.
3. **Configure Data & Features** — Set encoding, scaling, missing-value and outlier handling per column.
4. **Projection** — Select columns for dimensionality reduction and pick projection methods (PCA, UMAP, t-SNE).
5. **Glyphs & Color** — Choose glyph features and color encoding for the dashboard's initial view (both changeable later).
6. **Review & Process** — Review your configuration and process the data.

**Undo/Redo:** Use the buttons in the wizard's title bar or Ctrl+Z / Ctrl+Shift+Z (Cmd on Mac) to step back and forth through your changes.

**Try with sample data:** Step 1 offers a Wine Quality (red) dataset as a starter (P. Cortez et al., UCI Machine Learning Repository, CC BY 4.0).

Developer notes on the wizard's architecture are in [docs/wizard.md](docs/wizard.md).

## Data Import

### Dynamic Import

Inside of the running application, you can upload suitable CSV files into the filesystem of Micropython running as a web assembly behind the scenes (see below for CSV file structure). You can also upload ZIP folders with thumbnails for your data. The filename must be the same as your CSV file and the contained files should be named according to the IDs of the data rows.
Inside of the running application, you can upload suitable CSV files into the filesystem of Pyodide (Python compiled to WebAssembly, loaded from the jsDelivr CDN; the version is set in `src/app/workers/pyodide.worker.ts`; see below for CSV file structure). You can also upload ZIP folders with thumbnails for your data. The filename must be the same as your CSV file and the contained files should be named according to the IDs of the data rows.

### Preprocessed Data

Expand All @@ -26,7 +39,7 @@ You can either process CSV files via the command line using:
python tools/process.py <your_csv_file>
```

Which creates the necessary data files inside the `src/assets/data` folder of the project and recreates the file `src/defauult-dataset.ts` which the application picks up after starting. You can also store thumbnails in the folder `src/assets/data/thumbnails/<your_data_name>`, which are in JPG format and have the ID of your data items as filename.
Which creates the necessary data files inside the `src/assets/data` folder of the project and recreates the file `src/default-dataset.ts` which the application picks up after starting. You can also store thumbnails in the folder `src/assets/data/thumbnails/<your_data_name>`, which are in JPG format and have the ID of your data items as filename.

All columns except IDs and positional information are converted with a label encoder if they are strings and then normalized for processing of the meta data (including a histogram, min, max, etc.) as well as a PCA, UMAP, and tSNE multidimensional reduction.

Expand Down Expand Up @@ -55,65 +68,42 @@ Notable changes:
- in feature.json `default-context` is renamed to `defaultcontext` for the same reasons
- IDs are treated as strings

## Angular Development Instructions

This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 19.2.13.

### Development server

To start a local development server, run:

```bash
ng serve
```

Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files.

### Code scaffolding
## Development

Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
**Node version:** v24 (see `.nvmrc`)

```bash
ng generate component component-name
```

For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:

```bash
ng generate --help
```

### Building

To build the project run:
### Setup

```bash
ng build
npm ci # Install dependencies (prefer ci over install for reproducible builds)
npx playwright install chromium # Once per machine: browser for the unit tests
npm start # Start local dev server at http://localhost:4200/
npm test # Run unit tests (Vitest in headless Chromium, watch mode)
npm run test:ci # Run unit tests once (CI mode)
npm run lint # Run ESLint
npm run build # Build for production (output in dist/)
```

This will compile your project and store the build artifacts in the `dist/` directory. By default, the production build optimizes your application for performance and speed.

### Running unit tests
### Python tools

To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
The project includes Python preprocessing tools that run locally via `tools/process.py` (CLI; the dataset file generation lives in `tools/dataset_common.py`, the in-browser import is the wizard's pipeline in `src/assets/preprocessing_processor*.py`):

```bash
ng test
python tools/process.py <your_csv_file> # Process a CSV and generate src/default-dataset.ts
python tools/process.py # Rebuild default dataset list
python -B -m pytest -p no:cacheprovider tools/tests # Run Python tests
```

### Running end-to-end tests
Other tools:
- `tools/make-sample-csv.py` — Generate sample data

For end-to-end (e2e) testing, run:

```bash
ng e2e
```
### Deployment

Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
The app is deployed to GitHub Pages on every push to `main`. See `.github/workflows/deploy.yaml` for the workflow (runs tests, lints, builds on PRs; publishes on merge to main).

### Additional Resources
## Licence

For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
GlyphSpace is licensed under the MIT License (see [LICENSE](LICENSE)). It bundles [DruidJS](https://github.com/saehm/DruidJS) for the dimensionality reductions, which is licensed under the LGPL-3.0-or-later. The deployed site ships the LGPL and GPL texts and a notice in `licenses/` (source: `src/licenses/`), plus `3rdpartylicenses.txt` listing all bundled packages.

<!-- MARKDOWN LINKS & IMAGES -->
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->
Expand Down
Loading
Loading