Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
65b11ae
Add named palettes with tab bar, export, and palette management
superhighfives Apr 8, 2026
a4f24a5
Polish palette UX: fix animations, swap behavior, and navigation
superhighfives Apr 8, 2026
568e199
Fix window corner clipping, menu layout, and export when palettes hidden
superhighfives Apr 8, 2026
b227aff
Revert window edge clipping changes
superhighfives Apr 8, 2026
b934cae
Address PR review feedback from #200
superhighfives Apr 8, 2026
98dbd10
Add tooltip shortcuts, directional palette transitions, and bug fixes
superhighfives Apr 8, 2026
dd3d2fa
Fix slide direction timing, deletePalette selection, and date formatter
superhighfives Apr 8, 2026
9884575
Fix deletePalette index tracking, savePalette slide direction, and scope
superhighfives Apr 8, 2026
a713853
Redesign preferences layout, fix palette slide and visualization reopen
superhighfives Apr 9, 2026
f90fe31
Polish preferences UI: extract VisualisationHeader, widen window, fad…
superhighfives Apr 9, 2026
1dbd487
Refine preferences dropdowns, add help divider, adjust header heights
superhighfives Apr 9, 2026
1787b0f
Add URL trigger translations, fix drawer dividers and gradient overlay
superhighfives Apr 9, 2026
b306835
Fix translation file style to use per-entry English comments
superhighfives Apr 9, 2026
65ad15e
Bump version to 1.6.0-beta2 (build 76)
superhighfives Apr 9, 2026
8368dce
Bump version to 1.6.0-beta3 (build 77)
superhighfives Apr 10, 2026
face04d
Add compliance/preview URL triggers, seed data, and system picker his…
superhighfives Apr 10, 2026
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
12 changes: 6 additions & 6 deletions Pika.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1183,7 +1183,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 75;
CURRENT_PROJECT_VERSION = 77;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_ASSET_PATHS = "\"Pika/Preview Content\"";
DEVELOPMENT_TEAM = TGHU37N6EX;
Expand All @@ -1197,7 +1197,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 14.0;
MARKETING_VERSION = 1.6.0-beta1;
MARKETING_VERSION = 1.6.0-beta3;
PRODUCT_BUNDLE_IDENTIFIER = com.superhighfives.Pika;
PRODUCT_NAME = Pika;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG TARGET_SPARKLE";
Expand All @@ -1215,7 +1215,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 75;
CURRENT_PROJECT_VERSION = 77;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_ASSET_PATHS = "\"Pika/Preview Content\"";
DEVELOPMENT_TEAM = TGHU37N6EX;
Expand All @@ -1229,7 +1229,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 14.0;
MARKETING_VERSION = 1.6.0-beta1;
MARKETING_VERSION = 1.6.0-beta3;
PRODUCT_BUNDLE_IDENTIFIER = com.superhighfives.Pika;
PRODUCT_NAME = Pika;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = TARGET_SPARKLE;
Expand Down Expand Up @@ -1262,7 +1262,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 14.0;
MARKETING_VERSION = 1.6.0-beta1;
MARKETING_VERSION = 1.6.0-beta3;
PRODUCT_BUNDLE_IDENTIFIER = com.superhighfives.Pika;
PRODUCT_NAME = Pika;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG TARGET_MAS";
Expand Down Expand Up @@ -1295,7 +1295,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 14.0;
MARKETING_VERSION = 1.6.0-beta1;
MARKETING_VERSION = 1.6.0-beta3;
PRODUCT_BUNDLE_IDENTIFIER = com.superhighfives.Pika;
PRODUCT_NAME = Pika;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = TARGET_MAS;
Expand Down
31 changes: 31 additions & 0 deletions Pika/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {

func applicationDidFinishLaunching(_: Notification) {
LaunchAtLogin.migrateIfNeeded()
migrateHistoryToPalettes()

#if TARGET_MAS
if let mainMenu = NSApp.mainMenu?.item(withTitle: PikaText.textAppName)?.submenu {
Expand Down Expand Up @@ -94,6 +95,11 @@ class AppDelegate: NSObject, NSApplicationDelegate {

NSEvent.addLocalMonitorForEvents(matching: .keyDown) { event in
guard Defaults[.historyDrawerVisible] else { return event }
if let responder = NSApp.keyWindow?.firstResponder,
responder is NSTextView || responder is NSTextField
{
return event
}
switch event.keyCode {
case 123: // left arrow
self.notificationCenter.post(name: .historyNext, object: self)
Expand Down Expand Up @@ -121,6 +127,27 @@ class AppDelegate: NSObject, NSApplicationDelegate {
true
}

// MARK: - Migration

private func migrateHistoryToPalettes() {
let existing = Defaults[.colorHistory]
guard !existing.isEmpty else { return }
let history = Palette(id: UUID(), name: nil, pairs: existing, createdAt: Date())
var palettes = Defaults[.palettes]
if palettes.isEmpty {
palettes = [history]
} else {
palettes[0] = Palette(
id: palettes[0].id,
name: palettes[0].name,
pairs: existing + palettes[0].pairs,
createdAt: palettes[0].createdAt
)
}
Defaults[.palettes] = palettes
Defaults[.colorHistory] = []
}

// MARK: - Window forwarding

@objc func closeSplashWindow() { windowCoordinator.closeSplashWindow() }
Expand Down Expand Up @@ -167,6 +194,10 @@ class AppDelegate: NSObject, NSApplicationDelegate {
notificationCenter.post(name: .toggleColorPreview, object: self)
}

@IBAction func triggerToggleCompliance(_: Any) {
notificationCenter.post(name: .toggleCompliance, object: self)
}

@IBAction func triggerHistoryPrevious(_: Any) {
notificationCenter.post(name: .historyPrevious, object: self)
}
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions Pika/Assets/de.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -408,3 +408,63 @@

/* Toggle color preview */
"color.preview.toggle" = "Farbvorschau umschalten";

/* Pick */
"help.url.group.pick" = "Auswählen";

/* Copy */
"help.url.group.copy" = "Kopieren";

/* Change Format */
"help.url.group.change_format" = "Format ändern";

/* Actions */
"help.url.group.actions" = "Aktionen";

/* Set Color */
"help.url.group.set_color" = "Farbe setzen";

/* History */
"help.url.group.history" = "Verlauf";

/* Window */
"help.url.group.window" = "Fenster";

/* Appearance */
"help.url.group.appearance" = "Erscheinungsbild";

/* Set foreground color */
"help.url.set.foreground" = "Vordergrundfarbe setzen";

/* Set background color */
"help.url.set.background" = "Hintergrundfarbe setzen";

/* Show the history drawer */
"help.url.history.show" = "Verlaufsleiste anzeigen";

/* Hide the history drawer */
"help.url.history.hide" = "Verlaufsleiste ausblenden";

/* Toggle the history drawer */
"help.url.history.toggle" = "Verlaufsleiste umschalten";

/* Open the About window */
"help.url.window.about" = "Über-Fenster öffnen";

/* Open the Help window */
"help.url.window.help" = "Hilfe-Fenster öffnen";

/* Open the Preferences window */
"help.url.window.preferences" = "Einstellungen-Fenster öffnen";

/* Resize window */
"help.url.window.resize" = "Fenstergröße ändern";

/* Force light appearance */
"help.url.appearance.light" = "Helles Erscheinungsbild erzwingen";

/* Force dark appearance */
"help.url.appearance.dark" = "Dunkles Erscheinungsbild erzwingen";

/* Restore system appearance */
"help.url.appearance.system" = "Systemerscheinungsbild wiederherstellen";
121 changes: 119 additions & 2 deletions Pika/Assets/en.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -388,12 +388,15 @@
/* History */
"history.title" = "History";

/* Toggle history */
"history.toggle" = "Toggle history";
/* Toggle palettes */
"history.toggle" = "Toggle palettes";

/* Toggle color preview */
"color.preview.toggle" = "Toggle color preview";

/* Toggle compliance */
"compliance.toggle" = "Toggle compliance";

/* Sample preview text */
"color.preview.sample" = "The quick brown fox jumps over the lazy dog";

Expand All @@ -408,3 +411,117 @@

/* Clear history */
"history.clear" = "Clear history";

/* New palette… */
"palette.new" = "New palette…";

/* Rename palette */
"palette.rename" = "Rename palette";

/* Delete palette */
"palette.delete" = "Delete palette";

/* Remove from palette */
"palette.remove" = "Remove from palette";

/* Palette name */
"palette.name.prompt" = "Palette name";

/* My palette */
"palette.name.placeholder" = "My palette";

/* Add to palette */
"palette.add" = "Add to palette";

/* Export palette */
"palette.export" = "Export palette";

/* Export color history */
"history.export" = "Export color history";

/* Are you sure you want to clear all history? */
"history.clear.confirm" = "Are you sure you want to clear all history?";

/* Pick */
"help.url.group.pick" = "Pick";

/* Copy */
"help.url.group.copy" = "Copy";

/* Change Format */
"help.url.group.change_format" = "Change Format";

/* Actions */
"help.url.group.actions" = "Actions";

/* Set Color */
"help.url.group.set_color" = "Set Color";

/* History */
"help.url.group.history" = "History";

/* Window */
"help.url.group.window" = "Window";

/* Appearance */
"help.url.group.appearance" = "Appearance";

/* Set foreground color */
"help.url.set.foreground" = "Set foreground color";

/* Set background color */
"help.url.set.background" = "Set background color";

/* Show the history drawer */
"help.url.history.show" = "Show the history drawer";

/* Hide the history drawer */
"help.url.history.hide" = "Hide the history drawer";

/* Toggle the history drawer */
"help.url.history.toggle" = "Toggle the history drawer";

/* Show compliance */
"help.url.compliance.show" = "Show compliance";

/* Hide compliance */
"help.url.compliance.hide" = "Hide compliance";

/* Toggle compliance */
"help.url.compliance.toggle" = "Toggle compliance";

/* Show colour preview */
"help.url.preview.show" = "Show colour preview";

/* Hide colour preview */
"help.url.preview.hide" = "Hide colour preview";

/* Toggle colour preview */
"help.url.preview.toggle" = "Toggle colour preview";

/* Compliance */
"help.url.group.compliance" = "Compliance";

/* Preview */
"help.url.group.preview" = "Preview";

/* Open the About window */
"help.url.window.about" = "Open the About window";

/* Open the Help window */
"help.url.window.help" = "Open the Help window";

/* Open the Preferences window */
"help.url.window.preferences" = "Open the Preferences window";

/* Resize window */
"help.url.window.resize" = "Resize window";

/* Force light appearance */
"help.url.appearance.light" = "Force light appearance";

/* Force dark appearance */
"help.url.appearance.dark" = "Force dark appearance";

/* Restore system appearance */
"help.url.appearance.system" = "Restore system appearance";
60 changes: 60 additions & 0 deletions Pika/Assets/es.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -408,3 +408,63 @@

/* Toggle color preview */
"color.preview.toggle" = "Alternar vista previa de color";

/* Pick */
"help.url.group.pick" = "Seleccionar";

/* Copy */
"help.url.group.copy" = "Copiar";

/* Change Format */
"help.url.group.change_format" = "Cambiar formato";

/* Actions */
"help.url.group.actions" = "Acciones";

/* Set Color */
"help.url.group.set_color" = "Establecer color";

/* History */
"help.url.group.history" = "Historial";

/* Window */
"help.url.group.window" = "Ventana";

/* Appearance */
"help.url.group.appearance" = "Apariencia";

/* Set foreground color */
"help.url.set.foreground" = "Establecer color de primer plano";

/* Set background color */
"help.url.set.background" = "Establecer color de fondo";

/* Show the history drawer */
"help.url.history.show" = "Mostrar el panel de historial";

/* Hide the history drawer */
"help.url.history.hide" = "Ocultar el panel de historial";

/* Toggle the history drawer */
"help.url.history.toggle" = "Alternar el panel de historial";

/* Open the About window */
"help.url.window.about" = "Abrir la ventana Acerca de";

/* Open the Help window */
"help.url.window.help" = "Abrir la ventana de Ayuda";

/* Open the Preferences window */
"help.url.window.preferences" = "Abrir la ventana de Preferencias";

/* Resize window */
"help.url.window.resize" = "Redimensionar ventana";

/* Force light appearance */
"help.url.appearance.light" = "Forzar apariencia clara";

/* Force dark appearance */
"help.url.appearance.dark" = "Forzar apariencia oscura";

/* Restore system appearance */
"help.url.appearance.system" = "Restaurar apariencia del sistema";
Loading
Loading