Version 0.5.2

Adjustable line height in the Card Editor • Tighter text boxes with horizontal-only resize • Reliable text styles when typing & editing

0.5.2 · macOS, iOS

New Features

Adjustable Line Height (macOS & iOS)

Control the vertical density of text on a card, paragraph by paragraph:

  • Line-Height Toolbar Dropdown: A new line-height control sits in the Card Editor toolbar with Single (1.0), 1.15, 1.5, and Double (2.0) presets, plus a Custom… numeric stepper for any value between 0.95 and 2.0
  • Per-Paragraph Granularity: Line height is stored per paragraph, so a single text element can mix tightly-set headings with looser body text without breaking the rest of the card
  • End-to-End Rendering: Live editor, card preview thumbnails, and Mobile Study Mode now all render the same line-height — including sub-1.0 values that pack lines tighter than the natural baseline
  • Backwards Compatible: Cards authored before v0.5.2 stay byte-identical on disk and render with the prior 1.2 default; only paragraphs you touch pick up the new attribute

Improvements

Card Editor Text Boxes (macOS)

  • Tighter Inner Padding: The padding between a selected text element’s outline and its content has been reduced from 12px to 4px so the selection box hugs the text the way modern editors do. The same 4px inset is now applied across the live editor, preview thumbnails, and Mobile Study Mode — so text wraps at exactly the same width on every surface
  • Horizontal-Only Resize: Text boxes now resize horizontally (with handles on both the left and right edges); height follows content automatically as you add or remove lines. This eliminates the “stretch box, then first keystroke snaps it back” pattern that previously caused awkward layout jumps
  • Cleaner Selection Visuals: The decorative drag-grip icon on selected text elements has been removed. The element is still draggable from anywhere on its outline, and the cursor already communicates draggability per macOS convention

Card Editor Toolbar (macOS)

  • Pre-Selecting Styles on Empty Elements: Choosing a font size or text color before typing into a brand-new text element now actually applies — previously, only the font-family dropdown survived the editor blur cycle. The color picker, font-size stepper, and the new line-height stepper all capture their target editor at the moment you open them
  • Stable Styles When Switching Elements: Clicking from one styled text element to another with different styles no longer leaves the toolbar showing stale values for the previous element
  • Stale Line-Height Indicator Fix: The line-height toolbar indicator now refreshes correctly after the editor blurs

Brain Dump & Visual Polish

  • Refreshed Wordmarks: Home screen wordmarks were updated to match the website’s typography for a more consistent brand feel across surfaces

Bug Fixes

Card Editor (macOS)

  • Smart-Quote Substitution No Longer Strips Styles: macOS’s system text-substitution layer (smart quotes, autocorrect) was rewriting the editor’s DOM mid-typing and silently dropping color and font-size marks on every apostrophe, comma, or quote. The Card Editor now opts out of the relevant browser-level substitutions, so your styles survive every keystroke
  • List Wrap Preserves Pending Styles: Typing - + space or 1. + space on an empty line inside a styled paragraph used to convert the line into a list item with default styling, dropping any pending color or font-size. Pending marks now survive the list-wrap transformation, and the bullet/number marker matches the styling of the surrounding paragraph
  • Per-Element Typing Data-Loss Race Fixed: A 300 ms blur timer in the text-element save path could skip saving content during very rapid element-to-element typing. The guard has been removed so every blur unconditionally flushes the editor’s contents
  • Bulk Save Reliability: The Card Editor’s multi-card save pipeline now prepares card payloads in parallel before serializing the writes, with a card-flip flush guaranteeing in-flight changes are captured. When a save does fail on one or more cards, you now get a per-card error breakdown instead of a generic failure message
  • Deck-Switch Race Guard: A reinitialization guard prevents a class of race conditions when switching decks while the Card Editor is loading
  • Cross-App Paste Regression Minimized: Pasting content copied from other apps into a text element behaves more reliably; clipboard payloads are now validated before being inserted, and a new batchAddElements store action handles multi-element pastes atomically
  • Cut/Copy from Text Selection Menu: Cut and copy operations from the in-editor text selection menu have been hardened against a set of editor-handle staleness bugs that could cause silent failures
  • Font-Size Input Validation: The font-size input now rejects non-integer and negative values up front instead of silently accepting and then ignoring them
  • Duplicate Card Navigation Fix: Navigating between an original card and its duplicate (created via Card Controls) no longer causes their contents to appear swapped or corrupted. The backend now assigns fresh per-element IDs when a card is duplicated, and the Card Editor’s element rendering is scoped per-card, so the two cards stay cleanly separated in the editor’s view. *Note: This bug fix was folded into the v0.5.2 re-build we published several hours after deleting the original. Hopefully you never noticed the issue but if you did, it was likely very annoying—v0.5.2 is dedicated to you!

Mobile Study Mode (iOS)

  • Element Bold / Italic / Underline Now Honored: Element-level bold, italic, and underline attributes set in the Card Editor were silently dropped on iOS due to a JSON-decoding key mismatch — they now decode correctly and render on device
  • Color & Font Fidelity in Styled Text: Hex-authored colors and certain bold-italic font combinations could lose fidelity when bridging from SwiftUI to UIKit during text rendering. Typography attributes are now applied on both SwiftUI and UIKit attribute scopes, so the right bytes reach the screen regardless of which renderer Mobile Study Mode picks
  • List Marker Typography Inherits from First Run: List item bullets and numbers now inherit font, weight, and color from the first text run in the list item, keeping markers visually consistent with their content

Technical Updates

  • New LineHeight TipTap extension adds an optional paragraph.attrs.lineHeight attribute (CSS-style unitless multiplier, [0.95, 2.0], default 1.2 serializes as null) so pre-v0.5.2 cards stay diff-clean on disk
  • The preview generator’s default per-paragraph vertical advance was unified with the live editor and iOS at 1.2 (down from a hardcoded 1.3), closing a pre-existing ~7% divergence between thumbnails and the editor. Pre-v0.5.2 thumbnails will re-render ~7% tighter on next preview generation
  • New iOS LineHeightText UIViewRepresentable wraps UITextView to apply NSMutableParagraphStyle.lineHeightMultiple for exact CSS-line-height semantics, including sub-1.0 values that SwiftUI’s .lineSpacing() cannot express
  • Cross-language parity tests (Rust + TypeScript) lock in byte-identical plain-text extraction with and without the new paragraph.attrs.lineHeight attribute
  • The shared TEXT_ELEMENT_INNER_PADDING constant on desktop and its iOS mirror keep selection-outline padding in sync across editor, preview, and Mobile Study Mode from a single source of truth
  • EditorStore save pipeline refactored with a new HistorySnapshot type and parallel-prepare / serial-save phases for better bulk save behavior

Feedback

Found a bug or have a feature request? We’d love to hear from you:

Thank you for using SuperCards!