mirror of
https://github.com/PR0M3TH3AN/Artstr-Studio.git
synced 2026-11-07 14:10:08 +00:00
The Print / Save PDF button is now context-aware. In the Deck Builder (deck mode, no slide open in the editor) it builds a hidden print-only DOM container with one page per slide, each rendered via the same renderCustomArtPreviewDOM the sorter thumbnails use: - Themed at render time via composeSlideForDeck so the deck's font / background applies (and per-slide ignoreDeckTheme is honoured). - Each page sized to the preview's native dimensions (PREVIEW_BASE_PX / 96 inches wide, aspect-matched from the first slide) so the @page directive is the exact slide size and the slide content fills the page edge-to-edge without scaling. - `page-break-after: always` between slides; no trailing blank. - Print-only CSS hides every other top-level element on body so the editor chrome doesn't bleed through. - document.title is set to "<save-stem>_deck" so the browser defaults the saved PDF's filename helpfully. - A `window.afterprint` listener tears the print container, the injected stylesheet, and the title override back down — so cancelling the dialog leaves no residue. Inside a single-slide editor (deck mode, a slide is open), the Print button still calls printWithCurrentFilename for the existing single-page slide print. TODO.md: move Slide deck PDF export and Copy / paste transform consistency into "Shipped (recent)". Adam's working list is empty. Co-Authored-By: Claude Opus 4.7 <[email protected]>
119 lines
5.7 KiB
Markdown
119 lines
5.7 KiB
Markdown
# Artstr Studio — TODO
|
||
|
||
Running list of deferred work. Detailed specs for the larger items live in
|
||
`docs/`. Each entry notes scope and where the spec is (if any).
|
||
|
||
## Adam's working list
|
||
|
||
_(All of Adam's working-list items are currently shipped — see
|
||
"Shipped (recent)" below. New items go here.)_
|
||
|
||
## QR code layer — remaining phases
|
||
|
||
Phases A and B shipped (the `qr` layer type: data, error-correction level,
|
||
quiet zone, module / background colors, transparent background, renders
|
||
on every surface + canvas export, JSON round-trip; plus "Insert npub" and
|
||
"Insert share link" buttons under the QR data field).
|
||
|
||
- **Phase C — visual polish.** Optional center logo overlay and rounded
|
||
modules. Riskier: a logo eats into the error-correction budget, so it
|
||
should nudge the ECC level up. Skippable.
|
||
|
||
## Editor / tool UX
|
||
|
||
Small editor-usability improvements — no spec doc; scoped here.
|
||
|
||
Shipped: on-canvas drag-resize handles for every layer type, text-box
|
||
resize that never rescales the point size, the expanded Text tool panel
|
||
(font / size / color / alignment / bold / italic), a collapsible sidebar
|
||
toggle that fits the early-web aesthetic. Add new editor-UX items below.
|
||
|
||
## Profile pages — deferred polish
|
||
|
||
(Core profile pages at `/u/<npub>` already shipped.)
|
||
|
||
- Make author chips clickable in the **community thread view** (comments and
|
||
reposts) — currently only feed-card and preview-meta author chips route to
|
||
`openProfilePage`.
|
||
- **About-text clamp** — long bios overflow the profile header; clamp to ~4
|
||
lines with a "Show more" toggle.
|
||
- **Profile-grid pagination** — an author with 100+ designs renders them all
|
||
at once; cap the initial render and add a "Show more" pager.
|
||
|
||
## Edit-published-designs — deferred polish
|
||
|
||
(Core edit-in-place via NIP-33 replaceable semantics already shipped.)
|
||
|
||
- Replace the remaining `confirm()` calls in the edit / publish flow with the
|
||
styled in-app modal pattern, for consistency with the close-project and
|
||
publish-confirm modals.
|
||
- "Editing a previously-deleted design" warning — if the user opens Edit on a
|
||
design they had tombstoned with a kind-5, warn that publishing will
|
||
republish it.
|
||
|
||
## Pixel art — future polish
|
||
|
||
- **`pixelsB64` size-fallback encoder.** The spec calls for each frame
|
||
to store whichever is smaller: `pixels` (RLE pairs) or `pixelsB64`
|
||
(base64 of the raw `Uint8Array` of indices). Only RLE is implemented
|
||
today. For noisy / photo-pixelized content with many palette colours,
|
||
base64 is ~5× smaller — a 24-frame 64×64 sprite tested at 785 KB
|
||
RLE would drop to ~150 KB. Worth shipping alongside a live event-size
|
||
readout in the editor (soft warn at 50% of relay budget, hard block
|
||
at 90%) so users see the budget before publish.
|
||
|
||
## Drafted-but-unbuilt features
|
||
|
||
Each has a full spec in `docs/`.
|
||
|
||
- **Private (encrypted) publishing** — `docs/PRIVATE_PUBLISHING_FEATURE.md`.
|
||
Publish any design encrypted, readable only by the author (Phase 1
|
||
"private to me"). The agreed next build; Phase 0 is a validation spike.
|
||
- **Artstr Stacks** — `docs/STACKS_FEATURE.md`. Interactive fullscreen
|
||
page/card stacks (HyperCard for Nostr) — the Slide Deck extended with
|
||
layer actions and an interactive viewer. Queued after private publishing.
|
||
- **Badges (NIP-58)** — `docs/BADGES_FEATURE.md`. Award / display Nostr
|
||
badges on profile pages.
|
||
- **Collections (NIP-51 sets)** — `docs/COLLECTIONS_FEATURE.md`. Let users
|
||
organize favorite community templates into named sets.
|
||
- **Zap-gated premium templates** — `docs/ZAP_GATED_TEMPLATES_FEATURE.md`.
|
||
Creators mark a template premium with a minimum-zap threshold.
|
||
- **Zaps via Nostr Wallet Connect** — `docs/ZAPS_NWC_FEATURE.md`. In-app
|
||
zapping without the wallet handoff. (Tracked LNURL-pay tips already ship;
|
||
this would be the NWC path.)
|
||
|
||
## Shipped (recent)
|
||
|
||
- **Slide deck PDF export** — multi-page PDF, one page per slide. The
|
||
existing Print / Save PDF button is context-aware: in the Deck Builder
|
||
it builds a hidden print-only container with one page per slide (themed
|
||
via `composeSlideForDeck`, each page sized to the preview's native
|
||
dimensions so the slide fills the page exactly) and emits one PDF via
|
||
`window.print()`. Inside a single-slide editor, the button still prints
|
||
just that slide.
|
||
- **Copy / paste transform consistency** — paste now computes a single
|
||
group bounding box across all clipboard items, applies one shared scale
|
||
(only shrinks, never enlarges) and one shared translation, so cross-
|
||
target paste keeps every layer's relative position and size to the
|
||
others intact.
|
||
- **Pixel-editor colour picker** — ported the OS native `<input type="color">`
|
||
over from the vector tools (same swatch styling; opens the OS picker with
|
||
its built-in eyedropper on click). Removed the Screen-Capture-API screen-
|
||
eyedropper workaround (~170 lines of dead code). Palette swatches and
|
||
the in-canvas eyedropper tool now sync the picker too, so grabbing a
|
||
palette colour as the starting point for a tweaked variant just works.
|
||
|
||
- **Pixel Art** — `docs/PIXEL_ART_FEATURE.md`. Phases A–D all shipped:
|
||
embedded `pixelart` layer + standalone `casewrap-pixelart` design,
|
||
PNG / sprite-sheet / GIF export, drawing tools (line / rect / ellipse,
|
||
flip / rotate, grid resize), animation (multi-frame timeline, playback,
|
||
onion-skin), image → pixelize, and animated previews in every preview
|
||
surface. Undo / redo integrated with the top-level toolbar.
|
||
- **Pixel editor layout expansion** — addressed by the collapsible
|
||
sidebar (gives both the pixel and vector editors a lot more breathing
|
||
room when needed).
|
||
- **Print / Save event ID wrapping** — the event-id `<dd>` already uses
|
||
`overflow-wrap: anywhere; word-break: break-word`, so no horizontal
|
||
scroll.
|
||
- **TMDB auto-fill cleanup** — `docs/TMDB_AUTOFILL_FEATURE.md` removed.
|