Live presenter annotations + keep styling out of saved .md #5

Merged
brenno merged 8 commits from feature/live-annotations-clean-md into main 2026-06-11 17:31:10 +00:00
Owner

Presentatie-bugs

  • Live spiegelen van de lopende pen-/markeerstreek naar het publieksvenster (nieuw inkLive-kanaal): highlights verschijnen meteen tijdens het tekenen, niet pas na loslaten.
  • macOS-menubalk op de beamer afdekken: publieksvenster boven .mainMenu-niveau, zodat de Apple/Wi-Fi-strip tijdens een presentatie verdwijnt.

Opmaak uit het opgeslagen .md

  • generateDeck bakt het themaprofiel niet meer in het bestand; een .md bevat enkel inhoud. Het profiel wordt alleen voor de transient beamer-payload inline gezet (inlineStyleProfile: true), nooit naar schijf.
  • Bij openen past de app het actieve stijlprofiel toe (FileService.openDeck/activeProfileFor, DeckNotifier.loadDeck); applyMarkdown behoudt het huidige profiel.

Kwaliteitsslag / tests

  • Consent-schermvertalingen aangevuld (Engels + 7 ontbrekende strings per taal).
  • Consent-gate in widget/ui-tests gepasseerd door de consent-key te seeden.
  • Markdown round-trip-tests aangepast en dekking toegevoegd voor live-streek en opmaakvrij opslaan.

Brengt tevens enkele eerder niet-gepushte commits naar main (consent-scherm, EUPL-licentie, afbeeldingenbibliotheek, UI-tekstschaling, hover op non-key vensters).

Alle 319 tests groen · flutter analyze schoon · macOS-build slaagt.

🤖 Generated with Claude Code

## Presentatie-bugs - Live spiegelen van de lopende pen-/markeerstreek naar het publieksvenster (nieuw `inkLive`-kanaal): highlights verschijnen meteen tijdens het tekenen, niet pas na loslaten. - macOS-menubalk op de beamer afdekken: publieksvenster boven `.mainMenu`-niveau, zodat de Apple/Wi-Fi-strip tijdens een presentatie verdwijnt. ## Opmaak uit het opgeslagen .md - `generateDeck` bakt het themaprofiel niet meer in het bestand; een `.md` bevat enkel inhoud. Het profiel wordt alleen voor de transient beamer-payload inline gezet (`inlineStyleProfile: true`), nooit naar schijf. - Bij openen past de app het actieve stijlprofiel toe (`FileService.openDeck`/`activeProfileFor`, `DeckNotifier.loadDeck`); `applyMarkdown` behoudt het huidige profiel. ## Kwaliteitsslag / tests - Consent-schermvertalingen aangevuld (Engels + 7 ontbrekende strings per taal). - Consent-gate in widget/ui-tests gepasseerd door de consent-key te seeden. - Markdown round-trip-tests aangepast en dekking toegevoegd voor live-streek en opmaakvrij opslaan. Brengt tevens enkele eerder niet-gepushte commits naar `main` (consent-scherm, EUPL-licentie, afbeeldingenbibliotheek, UI-tekstschaling, hover op non-key vensters). Alle 319 tests groen · `flutter analyze` schoon · macOS-build slaagt. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
brenno added 8 commits 2026-06-11 17:30:48 +00:00
Flutter's macOS engine only sends mouse-moved events to the key window
by default. The borderless audience (beamer) window deliberately never
becomes key, so chart tooltips never appeared on the second screen, and
hover styling stuck around whenever a window lost key status before the
exit event arrived. Track the mouse whenever the app is active instead,
for both the main window and every secondary window.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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>
Duplicaten opruimen (md5) met samenvoegen van tags en opmerkingen en het
omzetten van slideverwijzingen — ook in presentaties op schijf die niet
geopend zijn. Filter om alleen afbeeldingen zonder tags te tonen. De
verwijder-waarschuwing dekt nu ook niet-geopende presentaties. Plus de
eerder uitstaande toegankelijkheids- en tabelplak-verbeteringen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Implement three privacy features:
1. Consent gate at app startup - users must accept privacy terms before using OciDeck
2. License visibility - MIT license displayed in consent dialog
3. Consent revocation - privacy settings tab allows users to withdraw consent and return to consent screen

Changes:
- New ConsentProvider for managing consent state with SharedPreferences persistence
- New ConsentDialog with privacy explanation and MIT license (expandable)
- Added Privacy tab to settings dialog with revoke consent button
- Updated localization strings for Dutch/English consent screens

Consent flow:
- On first launch or after revocation, consent screen blocks app access
- Users can read privacy terms, view license, and accept to proceed
- Consent can be revoked anytime from Settings → Privacy tab
- After revocation, app returns to consent screen on next launch

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
The project uses EUPL v1.2, not MIT. Updated consent dialog to display
the actual EUPL license text and point to the official EUPL license page.

- Changed 'Licentie (MIT)' to 'Licentie (EUPL 1.2)'
- Updated _getLicenseText() with EUPL v1.2 summary
- Fixed license link to https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Complete localization for privacy/consent features in all supported languages:
- Italian (Italiano)
- German (Deutsch)
- French (Français)
- Spanish (Español)
- Frisian (Frysk)
- Papiamento

Each language block now contains 12 consent-related translations covering:
- Welcome and privacy explanation
- License information
- User agreement text
- Revoke consent option
- Required acceptance message

Consent screens are now fully localized for all 8 supported languages.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
The consent gate wrapped ConsentDialog in a second MaterialApp with no
localizationsDelegates. That started a fresh Localizations scope without
the AppLocalizations delegate, so context.l10n inside the dialog resolved
to nothing and the consent screen rendered with no text.

Render the consent screen as a plain Scaffold inside the app's existing
MaterialApp, which already supplies both the theme and the localization
delegates. Text now renders in all languages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sync presenter annotations live, keep styling out of saved .md
Some checks failed
CI / Format · Analyze · Test (push) Has been cancelled
CI / Format · Analyze · Test (pull_request) Has been cancelled
2c4a6f7358
Presentation fixes:
- Mirror the in-progress pen/highlighter stroke to the audience window
  live (new 'inkLive' channel) so highlights appear as they are drawn,
  not only after the pen lifts.
- Cover the macOS menu bar on the beamer: raise the audience window
  above .mainMenu level so the Apple/Wi-Fi strip no longer shows during
  a presentation.

Styling no longer lives in the file:
- generateDeck no longer embeds the ThemeProfile; a saved .md holds only
  content. The profile is inlined only for the transient audience-window
  payload (inlineStyleProfile: true), never to disk.
- On open, the app applies the active style profile (FileService.openDeck
  / activeProfileFor, DeckNotifier.loadDeck); applyMarkdown preserves the
  current profile.

Quality pass / tests green:
- Complete the consent-screen translations (English plus 7 missing
  strings per other language).
- Pass the consent gate in widget/ui-scale tests by seeding the consent
  key, so the app shell renders.
- Update markdown round-trip tests for the new default and add coverage
  for live stroke streaming and styling-free saves.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 6bf85773b0 into main 2026-06-11 17:31:10 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: LibreKAT/Ocideck#5
No description provided.