Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 3 additions & 2 deletions Catchlight/Intents/NewObieIntent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
// upsert demotes the previous Obie on save (owner 2026-06-23 — set it in process,
// remove the old, no confirmation).
//
// App-target only (not shared into the widget extension) — there is no Obie
// Control/widget yet; the routing supports one as a drop-in if wanted later.
// Shared into the widget extension (see project.yml's CatchlightWidgets sources)
// — the Obie Control, launcher widget, and split widget all fire it via
// `Button(intent:)`.
//

import AppIntents
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

27 changes: 1 addition & 26 deletions Catchlight/UI/Theme/CatchlightGlyphs.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
// Custom meaning-led glyphs from the icon refinement pass (HiFi v1.6 §-wide):
// • ImportantGlyph — an exclamation "!" (stem + dot): the app-wide Important mark
// (owner 2026-07-06; replaced the two-Iris glyph, matches the site).
// • DailiesGlyph — two Irises joined by the spine (the timeline motif). Currently
// unused — Important moved to ImportantGlyph — kept for reuse.
// • SequenceGlyph — three smaller beads chained on the spine: a SEQUENCE
// of Takes (sibling concept to Dailies).
// • ObieGlyph — the Obie brand logo (solid italic "O" + catch-dot), the
Expand All @@ -17,19 +15,6 @@

import SwiftUI

/// Two Irises on the spine (Dailies). Stroke-only; colour via .foregroundStyle.
struct DailiesGlyphShape: Shape {
func path(in rect: CGRect) -> Path {
let u = min(rect.width, rect.height) / 16
var p = Path()
p.addEllipse(in: CGRect(x: (8 - 2.3) * u, y: (4.3 - 2.3) * u, width: 4.6 * u, height: 4.6 * u))
p.move(to: CGPoint(x: 8 * u, y: 6.9 * u))
p.addLine(to: CGPoint(x: 8 * u, y: 9.1 * u))
p.addEllipse(in: CGRect(x: (8 - 2.3) * u, y: (11.7 - 2.3) * u, width: 4.6 * u, height: 4.6 * u))
return p
}
}

/// Three beads chained on the spine (Sequence).
struct SequenceGlyphShape: Shape {
func path(in rect: CGRect) -> Path {
Expand All @@ -47,15 +32,6 @@ struct SequenceGlyphShape: Shape {
}

/// Convenience views matching the dock's SF Symbol sizing (icon box ~20pt).
struct DailiesGlyph: View {
var size: CGFloat = 20
var body: some View {
DailiesGlyphShape()
.stroke(style: StrokeStyle(lineWidth: size * 1.2 / 16, lineCap: .round))
.frame(width: size, height: size)
}
}

struct SequenceGlyph: View {
var size: CGFloat = 20
var body: some View {
Expand Down Expand Up @@ -106,7 +82,7 @@ struct TaskCheckbox: View {
}

/// The Important mark — an exclamation "!" (owner 2026-07-06, outline form 2026-07-06).
/// Replaces the two-Iris `DailiesGlyph` as the app-wide Important glyph, matching the
/// Replaces the earlier two-Iris glyph as the app-wide Important glyph, matching the
/// redesigned marketing site where Important is a "!". Drawn as a STROKED OUTLINE — a
/// tapered stem (rounded top corners, narrowing to a rounded foot) above a ring dot — at
/// the house `1.2`-unit weight with round caps/joins, so it sits beside the other line
Expand Down Expand Up @@ -238,7 +214,6 @@ extension EnvironmentValues {
HStack(spacing: 24) {
ImportantGlyph().foregroundStyle(Color.ckEmber)
ImportantGlyphSlashed().foregroundStyle(Color.ckEmber)
DailiesGlyph().foregroundStyle(Color.ckEmber)
SequenceGlyph().foregroundStyle(Color.ckEmber)
ObieGlyph().foregroundStyle(Color.ckTextObie)
}
Expand Down
2 changes: 1 addition & 1 deletion Catchlight/UI/Theme/CatchlightTheme.swift
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ enum Quadrant {

/// Important — the Iris North wedge (owner 2026-06-20, indicator only). Uses the
/// two previously-unused brand swatches, paired for legibility per mode: Shadow
/// #0A0908 (near-black, ~20:1 on the white card) in Daylight, Stone #E7E1D5
/// #0A0908 (near-black, ~20:1 on the white card) in Daylight, Stone #E0D9CE
/// (light warm stone, light-on-dark) in Night. Shown on an Obie too (an Obie
/// auto-flags Important; owner wants the flag visible there alongside the ring).
static func important(_ scheme: ColorScheme) -> Color {
Expand Down
16 changes: 0 additions & 16 deletions Catchlight/UI/Views/DailiesView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,6 @@ struct DailiesView: View {
/// Delete on a recurring reminder asks "this occurrence" vs "the whole series"
/// rather than deleting outright; nil when no such prompt is up.
@State private var pendingRecurringDelete: Take?
/// One-shot scroll target — set to bring a Take into view (e.g. a new Take that
/// landed at the bottom under Oldest-first). The timeline's ScrollViewReader
/// consumes and clears it.
@State private var scrollToTakeID: UUID?
/// Bloom progress (0→1) for the in-place NEW Take's "appear". Driven explicitly
/// (scale+opacity on the row) rather than via a LazyVStack insertion transition,
/// which doesn't animate reliably. 1 at rest so existing rows are unaffected.
Expand Down Expand Up @@ -1232,11 +1228,6 @@ struct DailiesView: View {
editDraft = t
editFocusedBlockID = t.blocks.last?.id
ui.beginEditingInPlace(take)
// Lift the Take above the keyboard via the same one-shot target the new-Take
// and fan paths use (owner 2026-06-19). Previously an existing Take set no
// target and leaned on iOS's native avoidance, which scrolled it up only a
// little — "nowhere near enough" when it started below the keyboard line.
scrollToTakeID = take.id
}

/// Create a NEW Take in place (Phase 2): seed the blank draft, inject it into the
Expand Down Expand Up @@ -1371,13 +1362,6 @@ struct DailiesView: View {
let refocus = newTaskEntryID ?? d.blocks.first?.id
editFocusedBlockID = nil
if let refocus {
// Bring the Take above the rising keyboard (owner 2026-06-19): the ring
// closed with the keyboard down, and re-focusing raises it again. Without
// a scroll target the Take can sit under the keyboard — e.g. a new Take
// just reshaped to a Task, sorted to the bottom under Oldest-first. Same
// one-shot target the new-Take flow uses; the keyboardDidShow handler
// settles it to the low anchor against the keyboard-reduced viewport.
scrollToTakeID = d.id
DispatchQueue.main.async { editFocusedBlockID = refocus }
}
}
Expand Down
8 changes: 6 additions & 2 deletions project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ options:
settings:
base:
SWIFT_VERSION: "5.9"
# iPhone-only (owner 2026-07-23): iPad is not yet in scope — nothing has been
# designed or validated for it, and XcodeGen's default ("1,2") silently opted
# us into iPad App Review + iPad screenshot requirements.
TARGETED_DEVICE_FAMILY: "1"
DEVELOPMENT_TEAM: YTPP9HU9F9 # Mark Stradling (brief §3.1)
MARKETING_VERSION: "1.0.0"
CURRENT_PROJECT_VERSION: "1"
Expand Down Expand Up @@ -93,8 +97,8 @@ targets:
- "CormorantGaramond-Italic[wght].ttf"
- "DMSans[opsz,wght].ttf"
# Launch screen = LaunchScreen.storyboard (owner 2026-06-15), replacing the
# earlier UILaunchScreen dict + centred composite (launch-splash.imageset,
# now unused — retire once the storyboard is device-confirmed). A storyboard
# earlier UILaunchScreen dict + centred composite (its launch-splash.imageset
# retired 2026-07-23, storyboard device-confirmed). A storyboard
# also opts into modern full-screen scene sizing (the gotcha-#1 requirement)
# but, unlike the dict's single CENTRED image, it can pin the real
# catchlight-icon + catchlight-wordmark assets to the EXACT geometry of the
Expand Down
Loading