Add project docs, EUPL licence, and open-source licence check
Documentation & licensing:
- Add the EUPL-1.2 licence (LICENSE.md) and set the project licence; refresh
the README (name origin wink, updated feature list, documentation index).
- Add CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, CHANGELOG, AUTHORS, and
THIRD_PARTY_NOTICES, plus docs/ (ARCHITECTURE, BUILD, USER_GUIDE, SHORTCUTS,
LICENSE_COMPLIANCE) and .github/ (CI workflow, issue/PR templates).
- Bring docs/FILE_FORMAT.md in line with current behaviour (code & chart
slides, per-slide TLP comment, annotation .ink.json sidecar, chart data/ CSVs).
Open-source compliance:
- Add tool/check_licenses.dart and a `make licenses` target (wired into
check-full and CI) that verifies every resolved dependency uses a recognised
open-source licence. A scan of all 151 packages and bundled assets found only
OSI-approved licences.
Charts (Fase 1.1):
- Replace the chart CSV textarea with an in-app editable data grid (editable
series/labels/values, add/remove row & column, read-only when linked).
- Centralize the linked-CSV directory name (`data/`) in a shared constant.
Also normalize formatting repo-wide with `dart format` and fix one
curly-braces lint, so `make check` and CI are green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 12:19:56 +02:00
|
|
|
|
# Changelog
|
|
|
|
|
|
|
|
|
|
|
|
All notable changes to OciDeck are documented in this file.
|
|
|
|
|
|
|
|
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
|
|
|
and the project aims to follow [Semantic Versioning](https://semver.org/).
|
|
|
|
|
|
|
|
|
|
|
|
## [Unreleased]
|
|
|
|
|
|
|
|
|
|
|
|
### Added
|
Add image-library dedupe and untagged filter, UI text scaling, table paste
Image library:
- "Clean up duplicates" finds byte-identical images by md5, keeps one
file per group (preferring the most-used, then the oldest), merges
the tags/descriptions and captions of the copies, repoints slides in
open decks and in .md presentations on disk, and deletes the copies
after a confirmation that lists every group.
- A header toggle filters to images without tags/description, so it is
easy to see which ones still need attention.
- The delete warning now also lists presentations on disk that still
reference the image (marked "not open"), next to the open decks.
Editor and accessibility (already in tree):
- Interface text scaling up to 200%, keyboard-operable panel divider,
keyboard-first add-slide dialog, and screen-reader improvements.
- Paste a spreadsheet/CSV/markdown selection into a table cell to fill
the whole grid.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 13:36:44 +02:00
|
|
|
|
- **Duplicate clean-up in the image library** — a footer button finds
|
|
|
|
|
|
byte-identical images by md5 checksum, keeps one file per group (preferring
|
|
|
|
|
|
the one used in slides, then the oldest), merges the tags/descriptions and
|
|
|
|
|
|
captions of the copies onto it, repoints slides that used a copy — in open
|
|
|
|
|
|
decks and in `.md` presentations on disk that are not currently open — and
|
|
|
|
|
|
deletes the copies after confirmation.
|
|
|
|
|
|
- **Untagged-images filter in the image library** — a toggle next to the search
|
|
|
|
|
|
box shows only images without a description/tags, making it easy to see which
|
|
|
|
|
|
ones still need attention.
|
|
|
|
|
|
- **Delete warning covers decks on disk** — deleting an image from the library
|
|
|
|
|
|
now also warns when presentations that are not currently open still
|
|
|
|
|
|
reference it.
|
Move radar scale to a side legend and add point tooltips
- The radar/spider scale no longer clutters the figure: the evenly spaced
tick values now sit in a slim legend beside the chart, both in the live
preview and in the SVG/HTML export.
- Hovering a radar point shows a tooltip (axis, series, value) like the other
charts; the invisible scale-anchor dataset is ignored.
- Refresh the documentation (README, user guide, file format, changelog) for
all recent work: code-slide theming with custom hex colours, the spider/radar
chart type, chart min/max, legend hover, and the chart tooltip behaviour.
- Drop two redundant non-null assertions in the chart preview tests.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:04:47 +02:00
|
|
|
|
- **Source-code slides** — a "code sheet" with per-language syntax highlighting,
|
2026-06-08 14:28:04 +02:00
|
|
|
|
stored as a fenced code block. Background, text colour and monospace font are
|
|
|
|
|
|
part of the style profile, with a syntax-colouring toggle; turning it off renders
|
|
|
|
|
|
the block in a single colour (e.g. green on black for a CRT-terminal look). The
|
|
|
|
|
|
code is sized to fill the panel — larger when there's room, smaller for long
|
|
|
|
|
|
fragments.
|
Move radar scale to a side legend and add point tooltips
- The radar/spider scale no longer clutters the figure: the evenly spaced
tick values now sit in a slim legend beside the chart, both in the live
preview and in the SVG/HTML export.
- Hovering a radar point shows a tooltip (axis, series, value) like the other
charts; the invisible scale-anchor dataset is ignored.
- Refresh the documentation (README, user guide, file format, changelog) for
all recent work: code-slide theming with custom hex colours, the spider/radar
chart type, chart min/max, legend hover, and the chart tooltip behaviour.
- Drop two redundant non-null assertions in the chart preview tests.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:04:47 +02:00
|
|
|
|
- **Charts** — bar, line, pie, and **spider/radar** chart slides. Data is entered
|
|
|
|
|
|
in an in-app grid or imported from CSV; the spec is stored as JSON in a ```chart
|
|
|
|
|
|
block. Data can stay inline or be linked to a CSV in a separate `data/`
|
|
|
|
|
|
directory. Rendered natively in-app (preview, presenter, PDF, PPTX) and as
|
|
|
|
|
|
self-contained SVG in the HTML export.
|
|
|
|
|
|
- Optional **min/max**: horizontal reference lines on bar/line charts, or a
|
|
|
|
|
|
fixed scale on spider/radar charts shown as a small legend beside the figure.
|
|
|
|
|
|
- **Legend hover** highlights the matching series (or pie slice). Line-chart
|
|
|
|
|
|
tooltips attach to the dot under the cursor (showing every overlapping dot),
|
|
|
|
|
|
and spider/radar points show a tooltip on hover too.
|
|
|
|
|
|
- **Custom theme colours** — every style-profile colour can be entered as a custom
|
|
|
|
|
|
hex value in addition to the presets.
|
Add project docs, EUPL licence, and open-source licence check
Documentation & licensing:
- Add the EUPL-1.2 licence (LICENSE.md) and set the project licence; refresh
the README (name origin wink, updated feature list, documentation index).
- Add CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, CHANGELOG, AUTHORS, and
THIRD_PARTY_NOTICES, plus docs/ (ARCHITECTURE, BUILD, USER_GUIDE, SHORTCUTS,
LICENSE_COMPLIANCE) and .github/ (CI workflow, issue/PR templates).
- Bring docs/FILE_FORMAT.md in line with current behaviour (code & chart
slides, per-slide TLP comment, annotation .ink.json sidecar, chart data/ CSVs).
Open-source compliance:
- Add tool/check_licenses.dart and a `make licenses` target (wired into
check-full and CI) that verifies every resolved dependency uses a recognised
open-source licence. A scan of all 151 packages and bundled assets found only
OSI-approved licences.
Charts (Fase 1.1):
- Replace the chart CSV textarea with an in-app editable data grid (editable
series/labels/values, add/remove row & column, read-only when linked).
- Centralize the linked-CSV directory name (`data/`) in a shared constant.
Also normalize formatting repo-wide with `dart format` and fix one
curly-braces lint, so `make check` and CI are green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 12:19:56 +02:00
|
|
|
|
- **Per-slide TLP classification** — each slide can carry its own Traffic Light
|
|
|
|
|
|
Protocol level; slides classified stricter than the level the deck is shown at
|
|
|
|
|
|
are withheld when presenting and exporting.
|
2026-06-12 00:26:29 +02:00
|
|
|
|
- **Export release ceiling** — an optional maximum TLP level that may be
|
|
|
|
|
|
exported. When set, a deck classified *above* it cannot be exported in any
|
|
|
|
|
|
format; the gate is enforced at the single export chokepoint and fails closed
|
|
|
|
|
|
(no file is written when blocked, and the export dialog explains why).
|
|
|
|
|
|
Classifying a deck stays optional — the ceiling only stops decks that exceed
|
|
|
|
|
|
it, and it is off by default.
|
Add project docs, EUPL licence, and open-source licence check
Documentation & licensing:
- Add the EUPL-1.2 licence (LICENSE.md) and set the project licence; refresh
the README (name origin wink, updated feature list, documentation index).
- Add CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, CHANGELOG, AUTHORS, and
THIRD_PARTY_NOTICES, plus docs/ (ARCHITECTURE, BUILD, USER_GUIDE, SHORTCUTS,
LICENSE_COMPLIANCE) and .github/ (CI workflow, issue/PR templates).
- Bring docs/FILE_FORMAT.md in line with current behaviour (code & chart
slides, per-slide TLP comment, annotation .ink.json sidecar, chart data/ CSVs).
Open-source compliance:
- Add tool/check_licenses.dart and a `make licenses` target (wired into
check-full and CI) that verifies every resolved dependency uses a recognised
open-source licence. A scan of all 151 packages and bundled assets found only
OSI-approved licences.
Charts (Fase 1.1):
- Replace the chart CSV textarea with an in-app editable data grid (editable
series/labels/values, add/remove row & column, read-only when linked).
- Centralize the linked-CSV directory name (`data/`) in a shared constant.
Also normalize formatting repo-wide with `dart format` and fix one
curly-braces lint, so `make check` and CI are green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 12:19:56 +02:00
|
|
|
|
- **Dual-screen presenter** — on a second display the beamer shows the slide
|
|
|
|
|
|
while the laptop shows the presenter view (current/next slide, notes, timer),
|
|
|
|
|
|
kept in sync over method channels.
|
|
|
|
|
|
- **Annotation layer** — draw on slides while presenting (pen, highlighter,
|
|
|
|
|
|
eraser, laser pointer). Kept fully separate from the Marp Markdown, mirrored
|
|
|
|
|
|
live to the beamer, and persisted in a `<name>.ink.json` sidecar.
|
|
|
|
|
|
- **App theming** — customizable app appearance profiles, including a dark
|
|
|
|
|
|
interface.
|
Add image-library dedupe and untagged filter, UI text scaling, table paste
Image library:
- "Clean up duplicates" finds byte-identical images by md5, keeps one
file per group (preferring the most-used, then the oldest), merges
the tags/descriptions and captions of the copies, repoints slides in
open decks and in .md presentations on disk, and deletes the copies
after a confirmation that lists every group.
- A header toggle filters to images without tags/description, so it is
easy to see which ones still need attention.
- The delete warning now also lists presentations on disk that still
reference the image (marked "not open"), next to the open decks.
Editor and accessibility (already in tree):
- Interface text scaling up to 200%, keyboard-operable panel divider,
keyboard-first add-slide dialog, and screen-reader improvements.
- Paste a spreadsheet/CSV/markdown selection into a table cell to fill
the whole grid.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 13:36:44 +02:00
|
|
|
|
- **Paste a table into a table cell** — pasting a spreadsheet selection (Excel,
|
|
|
|
|
|
Numbers, LibreOffice Calc, Google Sheets), CSV (comma or semicolon), or a
|
|
|
|
|
|
markdown table into any cell of the table editor fills the whole grid from
|
|
|
|
|
|
that cell, growing rows and columns as needed. Works with `Ctrl/Cmd+V` and
|
|
|
|
|
|
`Shift+Insert` on macOS, Windows, and Linux; plain text still pastes into the
|
|
|
|
|
|
single cell.
|
|
|
|
|
|
- **Slide-type chooser previews** — the add-slide dialog shows a miniature
|
|
|
|
|
|
wireframe of each layout (in the spirit of other presentation tools) instead
|
|
|
|
|
|
of an abstract icon, and is fully keyboard-operable (`Tab`/`Enter`/`Esc`).
|
|
|
|
|
|
- **Accessibility (WCAG 2.1)**:
|
|
|
|
|
|
- An **interface text size** setting (100–200%, Settings → General →
|
|
|
|
|
|
Accessibility) that scales all editor text; slides themselves keep their
|
|
|
|
|
|
fixed design size.
|
|
|
|
|
|
- The panel divider is focusable and **keyboard-resizable** (arrow keys), with
|
|
|
|
|
|
a visible focus state, and presents itself to screen readers as a slider.
|
|
|
|
|
|
- **Screen-reader support**: slide thumbnails announce one concise label
|
|
|
|
|
|
("Slide 3/12: title") instead of their full content; charts expose their
|
|
|
|
|
|
type, title, and underlying values as a text alternative; the presenter
|
|
|
|
|
|
announces each slide change.
|
|
|
|
|
|
- Improved contrast for hint/label text in the editors.
|
Add project docs, EUPL licence, and open-source licence check
Documentation & licensing:
- Add the EUPL-1.2 licence (LICENSE.md) and set the project licence; refresh
the README (name origin wink, updated feature list, documentation index).
- Add CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, CHANGELOG, AUTHORS, and
THIRD_PARTY_NOTICES, plus docs/ (ARCHITECTURE, BUILD, USER_GUIDE, SHORTCUTS,
LICENSE_COMPLIANCE) and .github/ (CI workflow, issue/PR templates).
- Bring docs/FILE_FORMAT.md in line with current behaviour (code & chart
slides, per-slide TLP comment, annotation .ink.json sidecar, chart data/ CSVs).
Open-source compliance:
- Add tool/check_licenses.dart and a `make licenses` target (wired into
check-full and CI) that verifies every resolved dependency uses a recognised
open-source licence. A scan of all 151 packages and bundled assets found only
OSI-approved licences.
Charts (Fase 1.1):
- Replace the chart CSV textarea with an in-app editable data grid (editable
series/labels/values, add/remove row & column, read-only when linked).
- Centralize the linked-CSV directory name (`data/`) in a shared constant.
Also normalize formatting repo-wide with `dart format` and fix one
curly-braces lint, so `make check` and CI are green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 12:19:56 +02:00
|
|
|
|
- Project documentation: contributing guide, security policy, architecture and
|
|
|
|
|
|
build notes, user guide, keyboard-shortcut reference, third-party notices, and
|
|
|
|
|
|
the EUPL-1.2 licence text.
|
|
|
|
|
|
|
|
|
|
|
|
### Changed
|
2026-06-08 21:48:06 +02:00
|
|
|
|
- **Bullet slides** can now carry an optional **subheading** under the title; the
|
|
|
|
|
|
**two bullet columns** type can have an optional **heading above each column**,
|
|
|
|
|
|
separate from the slide title.
|
|
|
|
|
|
- Slide text auto-sizing now measures with the deck's own font, so text grows to
|
|
|
|
|
|
use the available space more accurately instead of staying smaller than needed.
|
Add image-library dedupe and untagged filter, UI text scaling, table paste
Image library:
- "Clean up duplicates" finds byte-identical images by md5, keeps one
file per group (preferring the most-used, then the oldest), merges
the tags/descriptions and captions of the copies, repoints slides in
open decks and in .md presentations on disk, and deletes the copies
after a confirmation that lists every group.
- A header toggle filters to images without tags/description, so it is
easy to see which ones still need attention.
- The delete warning now also lists presentations on disk that still
reference the image (marked "not open"), next to the open decks.
Editor and accessibility (already in tree):
- Interface text scaling up to 200%, keyboard-operable panel divider,
keyboard-first add-slide dialog, and screen-reader improvements.
- Paste a spreadsheet/CSV/markdown selection into a table cell to fill
the whole grid.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 13:36:44 +02:00
|
|
|
|
- The two bullet columns are measured **independently** and then rendered at a
|
|
|
|
|
|
**shared size** set by the busiest column, so the two columns always look
|
|
|
|
|
|
typographically related. Dense two-column slides spend less height on the
|
|
|
|
|
|
title, headings, and gaps so the list items themselves render larger.
|
Add project docs, EUPL licence, and open-source licence check
Documentation & licensing:
- Add the EUPL-1.2 licence (LICENSE.md) and set the project licence; refresh
the README (name origin wink, updated feature list, documentation index).
- Add CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, CHANGELOG, AUTHORS, and
THIRD_PARTY_NOTICES, plus docs/ (ARCHITECTURE, BUILD, USER_GUIDE, SHORTCUTS,
LICENSE_COMPLIANCE) and .github/ (CI workflow, issue/PR templates).
- Bring docs/FILE_FORMAT.md in line with current behaviour (code & chart
slides, per-slide TLP comment, annotation .ink.json sidecar, chart data/ CSVs).
Open-source compliance:
- Add tool/check_licenses.dart and a `make licenses` target (wired into
check-full and CI) that verifies every resolved dependency uses a recognised
open-source licence. A scan of all 151 packages and bundled assets found only
OSI-approved licences.
Charts (Fase 1.1):
- Replace the chart CSV textarea with an in-app editable data grid (editable
series/labels/values, add/remove row & column, read-only when linked).
- Centralize the linked-CSV directory name (`data/`) in a shared constant.
Also normalize formatting repo-wide with `dart format` and fix one
curly-braces lint, so `make check` and CI are green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 12:19:56 +02:00
|
|
|
|
- Slide transitions in the presenter no longer flash a black frame (neighbour
|
|
|
|
|
|
images are precached and `gaplessPlayback` is enabled) — important for
|
|
|
|
|
|
recording.
|
Add image-library dedupe and untagged filter, UI text scaling, table paste
Image library:
- "Clean up duplicates" finds byte-identical images by md5, keeps one
file per group (preferring the most-used, then the oldest), merges
the tags/descriptions and captions of the copies, repoints slides in
open decks and in .md presentations on disk, and deletes the copies
after a confirmation that lists every group.
- A header toggle filters to images without tags/description, so it is
easy to see which ones still need attention.
- The delete warning now also lists presentations on disk that still
reference the image (marked "not open"), next to the open decks.
Editor and accessibility (already in tree):
- Interface text scaling up to 200%, keyboard-operable panel divider,
keyboard-first add-slide dialog, and screen-reader improvements.
- Paste a spreadsheet/CSV/markdown selection into a table cell to fill
the whole grid.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 13:36:44 +02:00
|
|
|
|
- **Spider/radar charts** now use the available space: axis labels are measured
|
|
|
|
|
|
and placed snugly around the polygon (up to three lines, full remaining
|
|
|
|
|
|
width), so the diagram renders considerably larger and long labels stay
|
|
|
|
|
|
readable instead of being truncated.
|
|
|
|
|
|
- Bullet auto-fit now stops growing at ≈32 pt (on a 16:9 deck) — the upper end
|
|
|
|
|
|
of the 24–32 pt range presentation-design guidance recommends for body text —
|
|
|
|
|
|
so slides with few bullets no longer render body text that competes with the
|
|
|
|
|
|
title.
|
|
|
|
|
|
- After resizing the slide panel (dragging the divider or resizing the window),
|
|
|
|
|
|
the list scrolls the slide being edited back into view.
|
|
|
|
|
|
|
|
|
|
|
|
### Fixed
|
|
|
|
|
|
- Hover on charts (tooltips, legend highlight) now works on a second screen:
|
|
|
|
|
|
macOS only delivered mouse-moved events to the key window, so the borderless
|
|
|
|
|
|
beamer window never saw them; the stuck hover state after the pointer left a
|
|
|
|
|
|
window is gone for the same reason.
|
|
|
|
|
|
- Bar-chart x-axis labels could run through each other: the spacing maths now
|
|
|
|
|
|
matches how bar groups are actually laid out, and the final label shrinks to
|
|
|
|
|
|
the real gap when it sits closer than a full step.
|
|
|
|
|
|
- A crash in the slide list ("A _RenderLayoutBuilder was mutated…") when its
|
|
|
|
|
|
keyed items were rebuilt during layout — both the resize-detection inside the
|
|
|
|
|
|
panel and the shell's width computation now avoid LayoutBuilders above the
|
|
|
|
|
|
reorderable list.
|
Add project docs, EUPL licence, and open-source licence check
Documentation & licensing:
- Add the EUPL-1.2 licence (LICENSE.md) and set the project licence; refresh
the README (name origin wink, updated feature list, documentation index).
- Add CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, CHANGELOG, AUTHORS, and
THIRD_PARTY_NOTICES, plus docs/ (ARCHITECTURE, BUILD, USER_GUIDE, SHORTCUTS,
LICENSE_COMPLIANCE) and .github/ (CI workflow, issue/PR templates).
- Bring docs/FILE_FORMAT.md in line with current behaviour (code & chart
slides, per-slide TLP comment, annotation .ink.json sidecar, chart data/ CSVs).
Open-source compliance:
- Add tool/check_licenses.dart and a `make licenses` target (wired into
check-full and CI) that verifies every resolved dependency uses a recognised
open-source licence. A scan of all 151 packages and bundled assets found only
OSI-approved licences.
Charts (Fase 1.1):
- Replace the chart CSV textarea with an in-app editable data grid (editable
series/labels/values, add/remove row & column, read-only when linked).
- Centralize the linked-CSV directory name (`data/`) in a shared constant.
Also normalize formatting repo-wide with `dart format` and fix one
curly-braces lint, so `make check` and CI are green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 12:19:56 +02:00
|
|
|
|
|
|
|
|
|
|
## [1.0.0]
|
|
|
|
|
|
|
|
|
|
|
|
### Added
|
|
|
|
|
|
- Initial release: structured, slide-by-slide editor for Marp presentations with
|
|
|
|
|
|
typed slide templates, live preview, fullscreen presenter, deck-wide TLP
|
|
|
|
|
|
marking, media handling, import, and export to Marp Markdown, PDF, PPTX, and
|
|
|
|
|
|
self-contained HTML. Decks save as a self-contained project/package with copied
|
|
|
|
|
|
assets. Localized in Dutch, English, Italian, German, French, Spanish, Frisian,
|
|
|
|
|
|
and Papiamento.
|
|
|
|
|
|
|
|
|
|
|
|
[Unreleased]: https://example.com/ocideck/compare/v1.0.0...HEAD
|
|
|
|
|
|
[1.0.0]: https://example.com/ocideck/releases/tag/v1.0.0
|