From 42db3798614590932bf4ea849f1314f9929ac27b Mon Sep 17 00:00:00 2001 From: matchaboar <224671045+matchaboar@users.noreply.github.com> Date: Sun, 16 Aug 2026 12:37:14 -0700 Subject: [PATCH] feat: polish file browser appearance --- .github/workflows/build.yml | 25 +- Sources/mindle/BrowserDisplaySettings.swift | 9 + Sources/mindle/ContentView.swift | 144 ++--------- Sources/mindle/DocumentStore.swift | 52 ++-- Sources/mindle/FileBrowserPresentation.swift | 42 +++ Sources/mindle/FileBrowserView.swift | 239 ++++++++++++++++++ Sources/mindle/SettingsView.swift | 6 + Sources/mindle/Theme.swift | 4 + Sources/mindle/TitleBarDoubleClick.swift | 19 ++ Tests/README.md | 28 ++ .../BrowserDisplaySettingsChecks.swift | 22 ++ .../FileBrowserPresentationChecks.swift | 67 +++++ Tests/harness/TitleBarDoubleClickChecks.swift | 45 ++++ Tests/harness/main.swift | 3 + .../snapshots/FileBrowserSnapshotTests.swift | 195 ++++++++++++++ Tests/snapshots/file-browser-dark.png | Bin 0 -> 40006 bytes Tests/snapshots/file-browser-empty.png | Bin 0 -> 29634 bytes Tests/snapshots/file-browser-error.png | Bin 0 -> 34487 bytes Tests/snapshots/file-browser-light.png | Bin 0 -> 38734 bytes run-screenshot-tests.sh | 15 ++ run-tests.sh | 7 + 21 files changed, 776 insertions(+), 146 deletions(-) create mode 100644 Sources/mindle/BrowserDisplaySettings.swift create mode 100644 Sources/mindle/FileBrowserPresentation.swift create mode 100644 Sources/mindle/FileBrowserView.swift create mode 100644 Sources/mindle/TitleBarDoubleClick.swift create mode 100644 Tests/README.md create mode 100644 Tests/harness/BrowserDisplaySettingsChecks.swift create mode 100644 Tests/harness/FileBrowserPresentationChecks.swift create mode 100644 Tests/harness/TitleBarDoubleClickChecks.swift create mode 100644 Tests/snapshots/FileBrowserSnapshotTests.swift create mode 100644 Tests/snapshots/file-browser-dark.png create mode 100644 Tests/snapshots/file-browser-empty.png create mode 100644 Tests/snapshots/file-browser-error.png create mode 100644 Tests/snapshots/file-browser-light.png create mode 100755 run-screenshot-tests.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 96f0069..1235ad4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,28 @@ permissions: contents: write jobs: + tests: + permissions: + contents: read + runs-on: macos-26 + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Select Xcode + run: sudo xcode-select -s /Applications/Xcode_26.2.app || sudo xcode-select -s /Applications/Xcode.app + + - name: Run logic and screenshot tests + run: | + chmod +x run-tests.sh run-screenshot-tests.sh + ./run-tests.sh + ./run-screenshot-tests.sh + build: + needs: tests + permissions: + contents: write runs-on: macos-26 env: # Non-secret mirror so `if:` conditions can gate on signing availability. @@ -27,6 +48,7 @@ jobs: with: fetch-depth: 0 # full history so build.sh's rev-list count is accurate fetch-tags: true # ensure local refs/tags/* so `git describe` resolves the tag + persist-credentials: false - name: Select Xcode # Xcode 26 ships the macOS 26 SDK, which is what lights up @@ -206,6 +228,7 @@ jobs: - name: Sign DMG for Sparkle and update appcast if: env.SIGN_IDENTITY != '' && startsWith(github.ref, 'refs/tags/v') env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SPARKLE_ED_PRIVATE_KEY: ${{ secrets.SPARKLE_ED_PRIVATE_KEY }} run: | set -euo pipefail @@ -264,7 +287,7 @@ jobs: git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git add docs/appcast.xml git commit -m "Update appcast for $TAG_NAME (signed DMG entry)" - git push origin main + git push "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" main - name: Package zip (fallback) run: | diff --git a/Sources/mindle/BrowserDisplaySettings.swift b/Sources/mindle/BrowserDisplaySettings.swift new file mode 100644 index 0000000..bcf6e90 --- /dev/null +++ b/Sources/mindle/BrowserDisplaySettings.swift @@ -0,0 +1,9 @@ +import Foundation + +enum BrowserDisplaySettings { + static let highlightActiveFileKey = "mindle.fileBrowser.highlightActiveFile" + + static func highlightActiveFile(defaults: UserDefaults = .standard) -> Bool { + defaults.object(forKey: highlightActiveFileKey) as? Bool ?? true + } +} diff --git a/Sources/mindle/ContentView.swift b/Sources/mindle/ContentView.swift index f9cad66..d640d15 100644 --- a/Sources/mindle/ContentView.swift +++ b/Sources/mindle/ContentView.swift @@ -71,6 +71,12 @@ struct ContentView: View { .lineLimit(1) .truncationMode(.middle) .padding(.horizontal, 14) + .contentShape(Rectangle()) + .onTapGesture(count: 2) { + if let window = NSApp.keyWindow { + TitleBarDoubleClick.perform(on: window) + } + } } ToolbarItemGroup(placement: .primaryAction) { @@ -1288,133 +1294,21 @@ struct AnnotationMessageRow: View { struct FileBrowserSidebar: View { @EnvironmentObject var store: DocumentStore + @AppStorage(BrowserDisplaySettings.highlightActiveFileKey) + private var highlightActiveFile = true var body: some View { - let c = store.theme.colors - VStack(alignment: .leading, spacing: 0) { - HStack(spacing: 8) { - Image(systemName: "folder") - .foregroundStyle(c.accent) - Text("Files") - .font(.system(size: 13, weight: .semibold, design: .serif)) - .foregroundStyle(c.text) - Spacer() - Button { - store.refreshFileTree() - } label: { - Image(systemName: "arrow.clockwise") - .font(.system(size: 11)) - } - .buttonStyle(.plain) - .foregroundStyle(c.muted) - .help("Refresh file list") - } - .padding(.horizontal, 16) - .padding(.vertical, 12) - - Rectangle().fill(c.rule.opacity(0.4)).frame(height: 0.5) - - if let tree = store.fileTree, let children = tree.children, !children.isEmpty { - ScrollView { - // Non-lazy VStack so the tree's content size stays constant - // when other window state changes (e.g. fileURL flipping - // isCurrent on a row, or the TabBar appearing/disappearing - // as tabs.count crosses the 2-to-1 boundary). LazyVStack - // re-measured rows on those events and could nudge the - // scroll position, making the active row appear to shift - // (#36). The directories Mindle browses are typically - // small enough that eager realization is fine. - VStack(alignment: .leading, spacing: 0) { - ForEach(children) { child in - FileTreeRow(node: child, depth: 0) - } - } - .padding(.vertical, 6) - } - } else { - VStack(spacing: 8) { - Image(systemName: "tray") - .font(.system(size: 28, weight: .ultraLight)) - .foregroundStyle(c.muted.opacity(0.7)) - Text("No markdown files\nin this directory.") - .multilineTextAlignment(.center) - .font(.system(size: 12, design: .serif).italic()) - .foregroundStyle(c.muted) - .padding(.horizontal, 24) - } - .frame(maxWidth: .infinity, maxHeight: .infinity) - } - } - .background(c.sidebar) - } -} - -struct FileTreeRow: View { - let node: FileNode - let depth: Int - @EnvironmentObject var store: DocumentStore - @State private var isExpanded: Bool = true - - var body: some View { - let c = store.theme.colors - if node.isDirectory { - Button { - withAnimation(.easeInOut(duration: 0.12)) { isExpanded.toggle() } - } label: { - HStack(spacing: 6) { - Image(systemName: isExpanded ? "chevron.down" : "chevron.right") - .font(.system(size: 9, weight: .semibold)) - .foregroundStyle(c.muted) - .frame(width: 10) - Image(systemName: "folder") - .font(.system(size: 11)) - .foregroundStyle(c.muted) - Text(node.name) - .font(.system(size: 12, weight: .medium, design: .serif)) - .foregroundStyle(c.text) - .lineLimit(1) - .truncationMode(.middle) - Spacer(minLength: 0) - } - .padding(.leading, CGFloat(depth) * 14 + 8) - .padding(.trailing, 10) - .padding(.vertical, 4) - .frame(maxWidth: .infinity, alignment: .leading) - .contentShape(Rectangle()) - } - .buttonStyle(.plain) - - if isExpanded { - ForEach(node.children ?? []) { child in - FileTreeRow(node: child, depth: depth + 1) - } - } - } else { - let isCurrent = store.fileURL?.standardizedFileURL == node.url.standardizedFileURL - Button { - store.open(url: node.url) - } label: { - HStack(spacing: 6) { - Spacer().frame(width: 10) - Image(systemName: "doc.text") - .font(.system(size: 11)) - .foregroundStyle(isCurrent ? c.accent : c.muted) - Text(node.name) - .font(.system(size: 12, design: .serif)) - .foregroundStyle(c.text) - .lineLimit(1) - .truncationMode(.middle) - Spacer(minLength: 0) - } - .padding(.leading, CGFloat(depth) * 14 + 8) - .padding(.trailing, 10) - .padding(.vertical, 4) - .frame(maxWidth: .infinity, alignment: .leading) - .background(isCurrent ? c.accent.opacity(0.14) : Color.clear) - .contentShape(Rectangle()) - } - .buttonStyle(.plain) - } + FileBrowserSidebarContent( + rootURL: store.fileTree?.url ?? store.fileURL?.deletingLastPathComponent(), + tree: store.fileTree, + selectedURL: store.fileURL, + isLoading: store.fileBrowserIsLoading, + errorMessage: store.fileBrowserErrorMessage, + highlightActiveFile: highlightActiveFile, + theme: store.theme, + onRefresh: store.refreshFileTree, + onOpen: store.open + ) } } diff --git a/Sources/mindle/DocumentStore.swift b/Sources/mindle/DocumentStore.swift index e74209a..c87fe5c 100644 --- a/Sources/mindle/DocumentStore.swift +++ b/Sources/mindle/DocumentStore.swift @@ -16,10 +16,6 @@ extension URL { } } -enum ReaderTheme: String, CaseIterable, Codable { - case light, sepia, dark -} - /// What kind of document is in the active tab — picks the renderer pipeline. /// Markdown flows through the WKWebView + markdown-it pipeline; PDF flows /// through the native PDFKit pipeline. Derived from the file URL's extension @@ -169,14 +165,6 @@ enum AnnotationStatus: String, Codable { case open, resolved, wontfix } -struct FileNode: Identifiable, Equatable { - var id: URL { url } - let url: URL - let name: String - let isDirectory: Bool - let children: [FileNode]? // nil = leaf file; non-nil = directory -} - /// One open document inside a window. Active-tab state still lives in /// the window-scoped @Published vars (`fileURL`, `rawText`, `annotations`, /// `lastSyncedText`) so all existing features keep working untouched; @@ -301,6 +289,9 @@ final class DocumentStore: ObservableObject { @Published var showAnnotations: Bool = false @Published var showFileBrowser: Bool = false @Published var fileTree: FileNode? = nil + @Published var fileBrowserIsLoading = false + @Published var fileBrowserErrorMessage: String? + private var fileBrowserRefreshGeneration = 0 // Tabs (per-window). Empty when no document is open; otherwise the active // tab's state mirrors `fileURL` / `rawText` / `annotations` above. @@ -1175,8 +1166,31 @@ final class DocumentStore: ObservableObject { static let browsableExtensions: Set = ["md", "markdown", "mdown", "mkd", "txt", "pdf"] func refreshFileTree() { - guard let url = fileURL else { fileTree = nil; return } - fileTree = Self.buildTree(at: url.deletingLastPathComponent()) + guard let url = fileURL else { + fileBrowserRefreshGeneration += 1 + fileTree = nil + fileBrowserIsLoading = false + fileBrowserErrorMessage = nil + return + } + let rootURL = url.deletingLastPathComponent() + fileBrowserRefreshGeneration += 1 + let generation = fileBrowserRefreshGeneration + fileBrowserIsLoading = true + fileBrowserErrorMessage = nil + + Task { @MainActor [weak self] in + await Task.yield() + guard let self, self.fileBrowserRefreshGeneration == generation else { return } + do { + self.fileTree = try Self.buildTree(at: rootURL) + self.fileBrowserErrorMessage = nil + } catch { + self.fileTree = nil + self.fileBrowserErrorMessage = error.localizedDescription + } + self.fileBrowserIsLoading = false + } } private static func isDescendant(url: URL, of ancestor: URL) -> Bool { @@ -1186,21 +1200,19 @@ final class DocumentStore: ObservableObject { return uPath.hasPrefix(prefix) } - private static func buildTree(at dir: URL) -> FileNode? { + private static func buildTree(at dir: URL) throws -> FileNode { let fm = FileManager.default - guard let entries = try? fm.contentsOfDirectory( + let entries = try fm.contentsOfDirectory( at: dir, includingPropertiesForKeys: [.isDirectoryKey], options: [.skipsHiddenFiles] - ) else { - return FileNode(url: dir, name: dir.lastPathComponent, isDirectory: true, children: []) - } + ) var children: [FileNode] = [] for entry in entries { let isDir = (try? entry.resourceValues(forKeys: [.isDirectoryKey]).isDirectory) ?? false if isDir { - if let sub = buildTree(at: entry), !(sub.children ?? []).isEmpty { + if let sub = try? buildTree(at: entry), !(sub.children ?? []).isEmpty { children.append(sub) } } else if browsableExtensions.contains(entry.pathExtension.lowercased()) { diff --git a/Sources/mindle/FileBrowserPresentation.swift b/Sources/mindle/FileBrowserPresentation.swift new file mode 100644 index 0000000..2eb5f89 --- /dev/null +++ b/Sources/mindle/FileBrowserPresentation.swift @@ -0,0 +1,42 @@ +import Foundation + +struct FileNode: Identifiable, Equatable { + var id: URL { url } + let url: URL + let name: String + let isDirectory: Bool + let children: [FileNode]? +} + +enum FileBrowserPresentationState: Equatable { + case loading + case error(String) + case populated + case empty +} + +enum FileBrowserPresentation { + static func headerTitle(rootURL: URL?) -> String { + guard let title = rootURL?.lastPathComponent, !title.isEmpty else { + return "Files" + } + return title + } + + static func state( + tree: FileNode?, + isLoading: Bool, + errorMessage: String? + ) -> FileBrowserPresentationState { + if isLoading && tree == nil { + return .loading + } + if let errorMessage { + return .error(errorMessage) + } + if let children = tree?.children, !children.isEmpty { + return .populated + } + return .empty + } +} diff --git a/Sources/mindle/FileBrowserView.swift b/Sources/mindle/FileBrowserView.swift new file mode 100644 index 0000000..203f75f --- /dev/null +++ b/Sources/mindle/FileBrowserView.swift @@ -0,0 +1,239 @@ +import SwiftUI + +struct FileBrowserSidebarContent: View { + let rootURL: URL? + let tree: FileNode? + let selectedURL: URL? + let isLoading: Bool + let errorMessage: String? + let highlightActiveFile: Bool + let theme: ReaderTheme + let onRefresh: () -> Void + let onOpen: (URL) -> Void + + var body: some View { + let c = theme.colors + VStack(alignment: .leading, spacing: 0) { + HStack(spacing: 8) { + Image(systemName: "folder.fill") + .font(.system(size: 12)) + .foregroundStyle(c.accent) + Text(FileBrowserPresentation.headerTitle(rootURL: rootURL)) + .font(.system(size: 13, weight: .semibold, design: .serif)) + .foregroundStyle(c.text) + .lineLimit(1) + .truncationMode(.middle) + .help(rootURL?.path ?? "Files") + Spacer() + Button(action: onRefresh) { + Group { + if isLoading { + ProgressView() + .controlSize(.small) + } else { + Image(systemName: "arrow.clockwise") + .font(.system(size: 11, weight: .medium)) + } + } + .frame(width: 24, height: 24) + } + .buttonStyle(.plain) + .foregroundStyle(c.muted) + .disabled(isLoading) + .help(isLoading ? "Refreshing file list" : "Refresh file list") + } + .padding(.horizontal, 16) + .padding(.vertical, 8) + + Rectangle().fill(c.rule.opacity(0.4)).frame(height: 0.5) + + switch FileBrowserPresentation.state( + tree: tree, + isLoading: isLoading, + errorMessage: errorMessage + ) { + case .loading: + FileBrowserLoadingState(theme: theme) + case .error(let message): + FileBrowserErrorState(message: message, theme: theme, onRetry: onRefresh) + case .populated: + ScrollView { + // Eager rows keep the tree's measured height stable when + // the active file or tab bar changes, avoiding #36's + // apparent selection jump. + VStack(alignment: .leading, spacing: 0) { + ForEach(tree?.children ?? []) { child in + FileTreeRow( + node: child, + depth: 0, + selectedURL: selectedURL, + highlightActiveFile: highlightActiveFile, + theme: theme, + onOpen: onOpen + ) + } + } + .padding(.vertical, 6) + } + case .empty: + FileBrowserEmptyState(theme: theme) + } + } + .background(c.sidebar) + } +} + +private struct FileBrowserLoadingState: View { + let theme: ReaderTheme + + var body: some View { + let c = theme.colors + VStack(spacing: 10) { + ProgressView() + .controlSize(.small) + Text("Looking for supported files…") + .font(.system(size: 11, design: .serif)) + .foregroundStyle(c.muted) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} + +private struct FileBrowserErrorState: View { + let message: String + let theme: ReaderTheme + let onRetry: () -> Void + + var body: some View { + let c = theme.colors + VStack(spacing: 10) { + Image(systemName: "exclamationmark.triangle") + .font(.system(size: 24, weight: .ultraLight)) + .foregroundStyle(c.muted) + Text("Couldn’t load this folder") + .font(.system(size: 13, weight: .semibold, design: .serif)) + .foregroundStyle(c.text) + Text(message) + .font(.system(size: 11, design: .serif)) + .foregroundStyle(c.muted) + .multilineTextAlignment(.center) + .lineLimit(4) + Button("Try Again", action: onRetry) + .buttonStyle(.borderless) + .foregroundStyle(c.accent) + } + .padding(24) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} + +private struct FileBrowserEmptyState: View { + let theme: ReaderTheme + + var body: some View { + let c = theme.colors + VStack(spacing: 8) { + Image(systemName: "tray") + .font(.system(size: 28, weight: .ultraLight)) + .foregroundStyle(c.muted.opacity(0.7)) + Text("No supported files\nin this folder.") + .multilineTextAlignment(.center) + .font(.system(size: 12, design: .serif).italic()) + .foregroundStyle(c.muted) + .padding(.horizontal, 24) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} + +private struct FileTreeRow: View { + let node: FileNode + let depth: Int + let selectedURL: URL? + let highlightActiveFile: Bool + let theme: ReaderTheme + let onOpen: (URL) -> Void + @State private var isExpanded = true + + var body: some View { + let c = theme.colors + if node.isDirectory { + Button { + withAnimation(.easeInOut(duration: 0.12)) { + isExpanded.toggle() + } + } label: { + HStack(spacing: 6) { + Image(systemName: isExpanded ? "chevron.down" : "chevron.right") + .font(.system(size: 9, weight: .semibold)) + .foregroundStyle(c.muted) + .frame(width: 10) + Image(systemName: "folder") + .font(.system(size: 11)) + .foregroundStyle(c.muted) + Text(node.name) + .font(.system(size: 12, weight: .medium, design: .serif)) + .foregroundStyle(c.text) + .lineLimit(1) + .truncationMode(.middle) + Spacer(minLength: 0) + } + .padding(.leading, CGFloat(depth) * 14 + 8) + .padding(.trailing, 10) + .padding(.vertical, 4) + .frame(maxWidth: .infinity, alignment: .leading) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + + if isExpanded { + ForEach(node.children ?? []) { child in + FileTreeRow( + node: child, + depth: depth + 1, + selectedURL: selectedURL, + highlightActiveFile: highlightActiveFile, + theme: theme, + onOpen: onOpen + ) + } + } + } else { + let isCurrent = selectedURL?.standardizedFileURL == node.url.standardizedFileURL + let isHighlighted = highlightActiveFile && isCurrent + Button { + onOpen(node.url) + } label: { + HStack(spacing: 6) { + Spacer().frame(width: 10) + Image(systemName: "doc.text") + .font(.system(size: 11)) + .foregroundStyle(isHighlighted ? c.accent : c.muted) + Text(node.name) + .font(.system( + size: 12, + weight: isHighlighted ? .medium : .regular, + design: .serif + )) + .foregroundStyle(c.text) + .lineLimit(1) + .truncationMode(.middle) + Spacer(minLength: 0) + } + .padding(.leading, CGFloat(depth) * 14 + 8) + .padding(.trailing, 10) + .padding(.vertical, 4) + .frame(maxWidth: .infinity, alignment: .leading) + .background { + if isHighlighted { + RoundedRectangle(cornerRadius: 5, style: .continuous) + .fill(c.accent.opacity(theme == .dark ? 0.28 : 0.22)) + .padding(.horizontal, 4) + } + } + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + } + } +} diff --git a/Sources/mindle/SettingsView.swift b/Sources/mindle/SettingsView.swift index 533bccc..68fea25 100644 --- a/Sources/mindle/SettingsView.swift +++ b/Sources/mindle/SettingsView.swift @@ -2,6 +2,8 @@ import SwiftUI struct SettingsView: View { @AppStorage("mindle.fontScale") private var defaultFontScale: Double = 1.0 + @AppStorage(BrowserDisplaySettings.highlightActiveFileKey) + private var highlightActiveFile = true var body: some View { Form { @@ -35,6 +37,10 @@ struct SettingsView: View { .frame(maxWidth: .infinity, alignment: .leading) } } + + Section("File Browser") { + Toggle("Highlight the active file", isOn: $highlightActiveFile) + } } .formStyle(.grouped) .frame(width: 450) diff --git a/Sources/mindle/Theme.swift b/Sources/mindle/Theme.swift index 770dfaf..8af9d27 100644 --- a/Sources/mindle/Theme.swift +++ b/Sources/mindle/Theme.swift @@ -1,6 +1,10 @@ import SwiftUI import AppKit +enum ReaderTheme: String, CaseIterable, Codable { + case light, sepia, dark +} + struct ThemeColors { let background: Color let surface: Color diff --git a/Sources/mindle/TitleBarDoubleClick.swift b/Sources/mindle/TitleBarDoubleClick.swift new file mode 100644 index 0000000..b6547bb --- /dev/null +++ b/Sources/mindle/TitleBarDoubleClick.swift @@ -0,0 +1,19 @@ +import AppKit + +enum TitleBarDoubleClick { + static func perform( + on window: NSWindow, + preference: String? = UserDefaults.standard.string( + forKey: "AppleActionOnDoubleClick" + ) + ) { + switch preference?.lowercased() { + case "minimize": + window.miniaturize(nil) + case "none": + break + default: + window.performZoom(nil) + } + } +} diff --git a/Tests/README.md b/Tests/README.md new file mode 100644 index 0000000..5549bff --- /dev/null +++ b/Tests/README.md @@ -0,0 +1,28 @@ +# Test Results + +Environment: macOS 26.6.1 (arm64), Swift 6.3.1. + +## Screenshot regression runs + +| Run | Command | Result | Duration | +| --- | --- | --- | ---: | +| Red | `./run-screenshot-tests.sh` | Failed: all four baselines were missing | 2.11s | +| Record | `./run-screenshot-tests.sh --record` | Passed; baselines recorded | 1.66s | +| Verify 1 | `./run-screenshot-tests.sh` | Passed | 1.63s | +| Verify 2 | `./run-screenshot-tests.sh` | Passed | 1.77s | +| Verify 3 | `./run-screenshot-tests.sh` | Passed | 1.68s | + +The populated light and dark baselines cover the scoped folder header, refresh +affordance, expanded hierarchy, and active-file treatment. The remaining +baselines cover the light empty state and dark error state with retry action. + +## Focused validation + +| Phase | Command | Result | Duration | +| --- | --- | --- | ---: | +| UI logic red | `./run-tests.sh` | Failed: presentation/settings/title-bar implementations were absent | 0.39s | +| UI logic green | `./run-tests.sh` | Passed: 14 focused UI checks plus the existing harness | 3.21s | +| App build | `./build.sh` | Passed | 16.88s | + +These are correctness and screenshot-regression results, not performance +measurements. diff --git a/Tests/harness/BrowserDisplaySettingsChecks.swift b/Tests/harness/BrowserDisplaySettingsChecks.swift new file mode 100644 index 0000000..16cf67f --- /dev/null +++ b/Tests/harness/BrowserDisplaySettingsChecks.swift @@ -0,0 +1,22 @@ +import Foundation + +func runBrowserDisplaySettingsChecks() -> Int { + let checks = Checks("BrowserDisplaySettings") + let suiteName = "BrowserDisplaySettingsChecks.\(UUID().uuidString)" + let defaults = UserDefaults(suiteName: suiteName)! + defer { defaults.removePersistentDomain(forName: suiteName) } + + checks.expect( + BrowserDisplaySettings.highlightActiveFile(defaults: defaults), + "active-file highlighting defaults on" + ) + + defaults.set(false, forKey: BrowserDisplaySettings.highlightActiveFileKey) + checks.expect( + !BrowserDisplaySettings.highlightActiveFile(defaults: defaults), + "stored active-file preference is respected" + ) + + print("BrowserDisplaySettings: \(checks.passed) passed, \(checks.failures) failed") + return checks.failures +} diff --git a/Tests/harness/FileBrowserPresentationChecks.swift b/Tests/harness/FileBrowserPresentationChecks.swift new file mode 100644 index 0000000..e17ea97 --- /dev/null +++ b/Tests/harness/FileBrowserPresentationChecks.swift @@ -0,0 +1,67 @@ +import Foundation + +func runFileBrowserPresentationChecks() -> Int { + let checks = Checks("FileBrowserPresentation") + let root = URL(fileURLWithPath: "/Users/reader/Field Notes", isDirectory: true) + let file = root.appendingPathComponent("chapter.md") + let populatedTree = FileNode( + url: root, + name: "Field Notes", + isDirectory: true, + children: [ + FileNode(url: file, name: "chapter.md", isDirectory: false, children: nil) + ] + ) + let emptyTree = FileNode( + url: root, + name: "Field Notes", + isDirectory: true, + children: [] + ) + + checks.equal( + FileBrowserPresentation.headerTitle(rootURL: root), + "Field Notes", + "header uses the scoped folder name" + ) + checks.equal( + FileBrowserPresentation.headerTitle(rootURL: nil), + "Files", + "header falls back when no scope is available" + ) + checks.equal( + FileBrowserPresentation.state(tree: nil, isLoading: true, errorMessage: nil), + .loading, + "initial scan shows loading" + ) + checks.equal( + FileBrowserPresentation.state( + tree: nil, + isLoading: false, + errorMessage: "Permission denied." + ), + .error("Permission denied."), + "scan failures show an error" + ) + checks.equal( + FileBrowserPresentation.state( + tree: populatedTree, + isLoading: true, + errorMessage: nil + ), + .populated, + "refresh preserves populated content" + ) + checks.equal( + FileBrowserPresentation.state( + tree: emptyTree, + isLoading: false, + errorMessage: nil + ), + .empty, + "empty folders show the empty state" + ) + + print("FileBrowserPresentation: \(checks.passed) passed, \(checks.failures) failed") + return checks.failures +} diff --git a/Tests/harness/TitleBarDoubleClickChecks.swift b/Tests/harness/TitleBarDoubleClickChecks.swift new file mode 100644 index 0000000..52c16bb --- /dev/null +++ b/Tests/harness/TitleBarDoubleClickChecks.swift @@ -0,0 +1,45 @@ +import AppKit + +func runTitleBarDoubleClickChecks() -> Int { + let checks = Checks("TitleBarDoubleClick") + let window = RecordingWindow() + + TitleBarDoubleClick.perform(on: window, preference: "Maximize") + checks.equal(window.zoomCount, 1, "Maximize preference zooms") + checks.equal(window.miniaturizeCount, 0, "Maximize does not minimize") + + TitleBarDoubleClick.perform(on: window, preference: "Minimize") + checks.equal(window.miniaturizeCount, 1, "Minimize preference minimizes") + + TitleBarDoubleClick.perform(on: window, preference: "None") + checks.equal(window.zoomCount, 1, "None leaves zoom unchanged") + checks.equal(window.miniaturizeCount, 1, "None leaves minimize unchanged") + + TitleBarDoubleClick.perform(on: window, preference: nil) + checks.equal(window.zoomCount, 2, "missing preference defaults to zoom") + + print("TitleBarDoubleClick: \(checks.passed) passed, \(checks.failures) failed") + return checks.failures +} + +private final class RecordingWindow: NSWindow { + var zoomCount = 0 + var miniaturizeCount = 0 + + init() { + super.init( + contentRect: NSRect(x: 0, y: 0, width: 800, height: 600), + styleMask: [.titled, .resizable, .miniaturizable], + backing: .buffered, + defer: false + ) + } + + override func performZoom(_ sender: Any?) { + zoomCount += 1 + } + + override func miniaturize(_ sender: Any?) { + miniaturizeCount += 1 + } +} diff --git a/Tests/harness/main.swift b/Tests/harness/main.swift index 0192d27..cff70ed 100644 --- a/Tests/harness/main.swift +++ b/Tests/harness/main.swift @@ -1,8 +1,11 @@ import Foundation var failures = 0 +failures += runBrowserDisplaySettingsChecks() +failures += runFileBrowserPresentationChecks() failures += runSSHTargetChecks() failures += await runSSHTransportChecks() +failures += runTitleBarDoubleClickChecks() if failures > 0 { print("\nFAILED: \(failures) check(s)") diff --git a/Tests/snapshots/FileBrowserSnapshotTests.swift b/Tests/snapshots/FileBrowserSnapshotTests.swift new file mode 100644 index 0000000..3825fd9 --- /dev/null +++ b/Tests/snapshots/FileBrowserSnapshotTests.swift @@ -0,0 +1,195 @@ +import AppKit +import SwiftUI + +@main +@MainActor +struct FileBrowserSnapshotTests { + private static let size = NSSize(width: 320, height: 360) + + static func main() throws { + _ = NSApplication.shared + let record = CommandLine.arguments.contains("--record") + let fixtures: [(String, ReaderTheme, SnapshotState)] = [ + ("file-browser-light", .light, .populated), + ("file-browser-dark", .dark, .populated), + ("file-browser-empty", .light, .empty), + ("file-browser-error", .dark, .error) + ] + + var failures = 0 + for (name, theme, state) in fixtures { + let actual = try render(theme: theme, state: state) + let baselineURL = URL(fileURLWithPath: "Tests/snapshots/\(name).png") + if record { + try actual.write(to: baselineURL, options: .atomic) + print("Recorded \(baselineURL.path)") + continue + } + + guard let expected = try? Data(contentsOf: baselineURL) else { + print("✗ Missing snapshot: \(baselineURL.path)") + failures += 1 + continue + } + if actual == expected { + print("✓ \(name)") + continue + } + + let difference = try imageDifference(expected: expected, actual: actual) + if difference.meanChannelDelta <= 0.015 + && difference.changedPixelFraction <= 0.025 { + print("✓ \(name) (within rendering tolerance)") + } else { + let outputURL = URL(fileURLWithPath: ".build/\(name)-actual.png") + try actual.write(to: outputURL, options: .atomic) + print( + "✗ \(name): mean delta \(formatted(difference.meanChannelDelta)), " + + "changed pixels \(formatted(difference.changedPixelFraction)); " + + "actual written to \(outputURL.path)" + ) + failures += 1 + } + } + + if failures > 0 { + exit(1) + } + print("ALL SCREENSHOT TESTS PASSED") + } + + private static func render(theme: ReaderTheme, state: SnapshotState) throws -> Data { + let root = URL(fileURLWithPath: "/fixture/Field Notes", isDirectory: true) + let chapters = root.appendingPathComponent("Chapters", isDirectory: true) + let active = chapters.appendingPathComponent("01-introduction.md") + let draft = chapters.appendingPathComponent("02-open-questions.md") + let notes = root.appendingPathComponent("meeting-notes.txt") + let populatedTree = FileNode( + url: root, + name: root.lastPathComponent, + isDirectory: true, + children: [ + FileNode( + url: chapters, + name: "Chapters", + isDirectory: true, + children: [ + FileNode( + url: active, + name: "01-introduction.md", + isDirectory: false, + children: nil + ), + FileNode( + url: draft, + name: "02-open-questions.md", + isDirectory: false, + children: nil + ) + ] + ), + FileNode( + url: notes, + name: "meeting-notes.txt", + isDirectory: false, + children: nil + ) + ] + ) + let emptyTree = FileNode( + url: root, + name: root.lastPathComponent, + isDirectory: true, + children: [] + ) + let view = FileBrowserSidebarContent( + rootURL: root, + tree: state == .populated ? populatedTree : (state == .empty ? emptyTree : nil), + selectedURL: active, + isLoading: false, + errorMessage: state == .error ? "The folder couldn’t be read." : nil, + highlightActiveFile: true, + theme: theme, + onRefresh: {}, + onOpen: { _ in } + ) + .frame(width: size.width, height: size.height) + .environment(\.colorScheme, theme == .dark ? .dark : .light) + + let hostingView = NSHostingView(rootView: view) + hostingView.frame = NSRect(origin: .zero, size: size) + hostingView.appearance = NSAppearance(named: theme == .dark ? .darkAqua : .aqua) + let window = NSWindow( + contentRect: hostingView.frame, + styleMask: [.borderless], + backing: .buffered, + defer: false + ) + window.contentView = hostingView + hostingView.layoutSubtreeIfNeeded() + window.layoutIfNeeded() + + guard let bitmap = hostingView.bitmapImageRepForCachingDisplay(in: hostingView.bounds) else { + throw SnapshotError.renderFailed + } + hostingView.cacheDisplay(in: hostingView.bounds, to: bitmap) + guard let png = bitmap.representation(using: .png, properties: [:]) else { + throw SnapshotError.renderFailed + } + return png + } + + private static func imageDifference( + expected: Data, + actual: Data + ) throws -> (meanChannelDelta: Double, changedPixelFraction: Double) { + guard let expectedImage = NSBitmapImageRep(data: expected), + let actualImage = NSBitmapImageRep(data: actual), + expectedImage.pixelsWide == actualImage.pixelsWide, + expectedImage.pixelsHigh == actualImage.pixelsHigh else { + throw SnapshotError.incompatibleImages + } + + var totalDelta = 0.0 + var changedPixels = 0 + let pixelCount = expectedImage.pixelsWide * expectedImage.pixelsHigh + for y in 0.. 0.10 { + changedPixels += 1 + } + } + } + return ( + totalDelta / Double(pixelCount), + Double(changedPixels) / Double(pixelCount) + ) + } + + private static func formatted(_ value: Double) -> String { + String(format: "%.4f", value) + } + + private enum SnapshotError: Error { + case renderFailed + case incompatibleImages + } + + private enum SnapshotState { + case populated + case empty + case error + } +} diff --git a/Tests/snapshots/file-browser-dark.png b/Tests/snapshots/file-browser-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1fabdffebb6828048fb5ca43c03873ce017c76bb GIT binary patch literal 40006 zcmeFYRa6{Z7p~h7NN|?~CqQryu0euBaCZyt?w*9;?(U5Tr*R1o+}+*X;Z#1$zc0?^ z8RJ}RMipJXx@*;{C9~f7%-LT*$%-K(;30rOAY=(~5d{zk+85YI;9deHAmR225D1~# zOj!7ngs?ElCwm(cGfQI-Nc?MD!Yd`kS)AZu2nS>YBT}|73vLXagyI4uS8*s-@9^+UOvH+fUqwNkyGoNE#L64un=UjuRdE7 zTfg``vHXLu^zwN4xuobEc9s{EDITkMJKHQB8F3rDVS5?w;Wz{#5$3)c2aW6 z5aj+s-?lZNREs2h&Dwr;JKFCwzVUPbztvCa@yV!*di^bwn7V)*Rti&l!`e+!{}PKq z$2*6IIJ<_o8V$I9?`Lf67fCj`j7)s$T$shUIK;5gAW0P;KZH zzIqoXxn)t^x<35#&1f9blx+f zd!`1B6Mz3mX;_H>!gGWg5qW3WBL$Ti4aI5Pt@zWS*D!IEk&XmPS@0Ei8(Jc?lwPRw zHUh67BOFW?33Qh~ITP-QFPsrHml`PE7dsOTD*#y!k?K`b8&L%+0ZhmTGES%=U&IxJ zdKB*V7bCFl?NUr2eqT~J{}VLq><`?L=td~Bg5hY0XTi`}wp4hM{t6_d?7@x6~ zkm3Y4N3089-eGg2r1>#?AROT<#NP{964KR!$!~L<0oD2zw9_RbhqPCo5U9bKw!7Iv zHKQ;D(5}9)ec}1C1=^)U`$WnW4GQkfsL*$G&A^}=GIVj4=-{7G#^UG--;~}uiL;Ic zFNicos{S-ZLJ{s{Vyb;DCk^)wrL)sWKVE;zpr84k2|3XrF(uLZ7ibGV{@Y~loE~2V zf#qA3FWSEJUGWAb6}=VPm1#3N2d@ZF3W5yR7HmoD$+ftxnXT!qUzHI}`|r11uDm>T zZAMvoc^nkc=5We&BlN)j0QF$@fb7Zmgy|>E^p+FDAFdCETAv~-wj#s!n{B{JDwBv3 zSu!Ty7jzMRJ9IlfJI2Z+*RUBWg11F6iR6q5bku1-{FOcylciDekweI0`raA2*kh?n z4^bvWp++%AH}z#u<6&8R6EJ2M{h%&Zl>g(?k^GW;krHAtBU@6ku(nufR(c+PzPCbF z(M*x8(hbdkGK~_Rl67IT3Po{pNtN<;@m5iMF_AnZ|4uTj&?IZCyhm9xUnR>~>o9yS zlUru-1D_C|qF3pi_odXH7oICJVwfOu%SXQ+qOfW_zW0G9lII1dpG!V_m~ERu90}4S zwnxTyyDtJRobP<|gY&CRnzw`o5e8$DwKcxP2jPfGW!LEJS4>%zGAbhFR}{eIgOe0E zHhW?t=G^C6=AaMX9=adO9x`$xr3t1XrG;^aaYr~ZH%>LmHzGQ^?4?h8<%vz7Ppt1^ z?-EWmm80%!?u+d+PA%v7DEo}GjgZU;np6y~fZJ(>>4kMW9Xkhu3y|)^K7U;LXpl4b zu^>!`>HQna;6V8v&feEdQyeJFDzA^(tvQHT^pm@i!0(GV+>9hyjFa+{tl6#D2$@(} zQuJ%Pz*7e;T%)PR3@pp$OD0dF{$^2nm2=sn*%3v98%*bkHNQgQm86IV=msPQG*vih zW?#H^GtdbJDP7!@YG^y)>@TWm0H!M#cS6u zN;Z9LnjZg^Pa!wYS!y-M;eqS%^-<^k6$&0o778t4GT{=p2G1D*ErAV}e42l1JP#We z#IDv3hx6F6Wnai4X|-xDZ*sGwB&B4bW~gR)@E3izRnt5nP8xQf#z5mvxYMUh4!qDN=wN|Npzz6bI1Jh5h|Mq* z{@Z3cW)x;#LX4~L^jm+5Dbcu7T;V2!F6V~i9!owaqDRT6F~60FoG`^;QDljbV#|Fq z=5UU@&6v7OS{;Sm-&n<4RcnO&vvWgv_S04BK|TRDO>7wr9ku{fqXWc&)?R@Ai>|Fv z)}7F9M@c9cw^aRtmyzl?p*yj=xw};AdjeQ(3=#`*yk_~VzE?H1nLmISf4%i;`&jdX zMpWh6b=(!LluCXfDCdFdBj z$A+1f`X8>Y^frf^83f)m_hv@gbB$M*W&1AHZB~)i^^j51^%jiF=;r8j8CG^SOA||m zxd-ooX8HulG$|J=3M*yHLmEUzi#d~8tIpb0dwDn0AYIW%=f^{fTAzjXWjn)y6RFb*_Vrw#ZJZJN^^0q5S=>P z`+g!Vx8FSV$`o^Wi5u6c?9p@PHWb&NA=S#TF0Ez9>9mU?LaLXsnt?;d4l-stxw%)l ztnDo@bu_nRJ9wxu?sUCBNI1?TyLi%Iw`I~ch*-y2SLQf$a8OU^a(|RI>(Y31c6_xM zv*6(%aQ!qA@DMT+A{sG46vsd1qjeiHNqnhYrcK%OqOqL+tJ_&-$n^P{+12>!lE3MM zY2I*H`t$|YRoV{fUh9*=ROnJdRf2Fi!n4w|!@b48wAl06!izuL#d90ZDGXV(@taE(iV0f#QQ5-at9-ko;Ziz zT#!EsCq1%n-DIJxIJB=bA!rP2=f!6-a^vIA4E_AIm+dAotA8_-5j463C**VV0b+)z zfq$7(1s5k#5ffuC{dtvnk>9)vMQJ`&H15U4uX-lpht3|hM;EW>@fXIEt+zf+iovVE=v2->=Y_(Eok|+BfsXf5#)gzp7BO!veg(+ls3@fIv7Dzjr7J1@aRRNDw3; z@LBfvCsy};k1iZUm?RL-{aD+b5dkh63mY2|0pS}V_&Ede;wt#tMK;M>5)$QI z!d*y0ppN2-z;J5yEJQ0>>Ik}FBWaj&cF~OIelft~Y^eFz2oABtRy$GL7v{fh4B7Ad z?v})DCb=N=e_JvLmP7#VzqjO(LvWu!`PH~Xy%bOwB>!v(g5EFxt45q84LuViZOWJ$ zA@!#oEZ+yDND%x#n;%YHYm2CHi%@dFM1drS;hu+|N>MxzdGP&PUZ92>#8j2(D zg*EDh#h|5TGMG%^admLnh^j*VcPIG?lK37sudMjn?~JqyzP7IFP27Xg3tza+lO8mQ zCX@5N{PbpG*y(F{Gfjv~S;G2#9mV|z#VY;lqs5KNULvU}`gETsx7iB)oCSyB#j}%6 z)Ls5$4x4vD2-wl9onquAavnKA3ncTUKU~qlqoQ7GfDE+ccu(td_!v4m<=)YN95#NE z#!$+Ax*lGud=y6Id#hTe^;Pj|RE$`>#(Z*pz%9J*@gs{!xngBAc3RZJsm;c z>sKUcz(!vTk1X>Uk^9bv+lO<;wOCOx-59L~dxW_ZEKE$Y=`wBB1m1sUncz3H8Hh&$ zj_+V{&B!v3&ohKm^vI!_M@AXCLOH{94ciB#T>iMIkSoom&g#;v)nMCW;f%&BAC<7# z^>k>@1%KEKX}{PVH}3iV=4{TQT>Sp(kZ@3=){=g7R9#AD`VqRaftj`mdDh|B{oxl^P zq+}e;rW21+v+b(?g1ZIo?&vy-+tsY;+KqL`ku<;vP8UCiTc-C_5)E?=y!5k`R>e|vYU-&$Km)5 z#M2|66nx`(P@(|oLrK$N)2a%e#H3>71kMPIw?=g<@=M8{!_2pF*EkyoPaCZ2B*>3{Nb^ z{p10!P@|iU8WryoHnTh2I|o1 z&o;^TTD>wBw+p%kgd$?Sva`ZF`WiF2{c*Gs!|5(G?L4za>SERWOe`#8{pY>#scK8! z_w+>yc~wV4{F4U}PqVN7S^jYRsDT1Z%<6f!M6dTR=*PM>@Rlg+Laj3 zNF=p%8nfosuO4n48p8{ig9EXm!wGrJL$&;%VJEP5;f>WFR5fv3j+fSpzD~QL871~G z=rkwVFa69VC8!8B zh7sBLLAOJbdL7I#TN!u%XuNN12hRCfQr@zrmY`OmLeD3I!i>Vq>2k!&<+K;eh6OhT z7(A)YVB`r8gt*L1q$;m_l-VC<)h6LZ)^bG#-QN@-?riXgh>Gj9Wpl8*-lwnHij^&5 z&xhUR1{1~pdX(7)!08?G$I~c-cUa&O=Q}`A6jC_78W#$Ak|ob|)F9*>EUvPfbulhG zy%3-KCCVy~M~tG$;t-?ZwBc4Sk6FzI`^}B*44>%ZmV2F+XYW`H^m(TNPiuo~+^C+B7}K z9~aj-bXiW|kxnLsJqox9b^6n3oGCc|=LbX;BH0ROj6UryQdA+UnF?Ixoz!{THh|YO6?D|e%y*7R!Ka7YJeT7Zf3g-+ zc5AKjr;6pwcwWLOsVXMyhn0W`@uLMd$BXZ7=UWSHqj?Xd3VE<6S#X=)oSZ`R9 zZK*01BcFDr=lPT0n}JJA2KUY$*bb-4bqfdt&AFe(n2fIsLr@Om#NCIA>#XM4Z|{$N zV&jS$b!bBx7n@wBby|o$Bj2OD9z$Gu(S0=QtYaSUQK_n3WvsG(L{Ly~zhRkyxaIs1 zBxGL06vI7nx1KD{tAb(pah8*#t++Q`&I9q$m$+Ykev;Fuvo@ZDMO51WN(<<7sHhb4 zzkA+pZnJzIiLrmUvD=Kb*O7rR#sO=ugoy{Xw6+3|LAy~&oflZGggjb4o`Q)e#QX~w zKCg!vTOYEYa_YsK02opK1}--d)E95l6Zec)Dy<5M7)p^!EDZg2KItA8q&L-C2_wZ$neIy!@4 z?^B_{j?VjTv$aGTSiPQ1B`&ZL#I|cR^xHQj;_T*r{Mx2o{+CFuLP?o6ajH6QeTG~t z`%|Sk{kpYZTMucjRs{LdkSu0Yb-l8JNcNWO#9V69Pbk^)+%XcqzEi6v@_DcmgIq5^ z3wl2~B@Ydx@g!7fc$d%_QxG~eLn<^uq*cHorgqqRpho*~b#XB+tTaorPn?tl9lTOi zFsWE1k3+WG{c_kwg5i_XUWO=S^qD3X#*zq?QiC9B8dM@)krQGh3~&JEyYH$x zLqXunj7Hzqzcs1#YbfxpaK$ztWBPYSbHK-hNFaG`lBZAMJD7$&4;xgi`T^3b_}$4S z3O65jYwpE}+|<-VULt^nO!SMIdTD0}_&upUhycdOUiv=#4eQ5Hf%pEqcXi7qoO7xr zDuZ@uBi(5(ORH4D303GmRBhqpYIR!?flfie{h_yvOF3z{ zQ{(!B8GK$R?P6C_o1^#X$^79?KilW}oe$@@_sE_7Eo7EgJiCjpO3i*h+d`|ajHg7L;rIlJU{&%&dqJ-WXqN#r+py+hA1yqXI*V2a>v zKd)UK@|c~v>?w8m#0w1XH!Gf!xwE~WuB%j4R;T8I0nCKM*YDpIaM~977Z%2opQOxn z!|>P~-?zUvN#}I~vzgRbH1Yq+$AI~&U6JT{O$K(j+?#YTV$?ZU&PNdOHT)>jhhbZ& zJhu{9atf@sZ zEoaXfx9K&XE?q+a)dlB0=AI2|_Oo&AMo{I98%SWJ*e!z-{Ca8YoKSkz}L&7*ZTy2hjqGV61_0YME{ zFzo3V($`mku&ojjfI<#aB%E3Z9NQf)a5@F82)NUpX_4bt{2mwBPK_YqJdtFeAnuZZg9UJdj#EW&qr z@ziIFhGt2o1}6GmIiBUZpfF#tUpauOQ{S6?OCE~&Vd}x#J8@*1;Z+uRILy68YQWy8 z$uNpGM77>q;+kNNOo{oIylD#~)iaqW(}6@E;MZDA%a`vjH@oGKSzA`|G{YksZf{w4 z47y1j!?j<%@&N%<+G~c0OG`o;S!zH>>=p@8jVzI0n=G*JR2S3FNoQ4;RzXXS%5J7i!0b!mh~U%Am@bs( zlUTEzuRRRsN3)!Bt;q)Q#9`5EOvqER=Vz16uZwQ|stn#bm`!6w8wI_^N^f$u(KQvT zv;d)3!KMS&dM77hhA~c2N}F1<_Iq52x9P7hm(jtKRtzK8Yw? zDyN;+wPv&HSEEZ^aNXPsiD#N_zY+_hmy>DmhNr|?&h&725+w66AmLT2j9mhE3j>u@R1 zqjyjD$0du*>En;yr`_8c6Nyi@mdh<^_Dh9%o#`{@d})RyY%wH5ym^=V99{6nhI_L? zq)+Xn2ccfe#xU9~k5}_GpSm3k3$S8FoNrFh! zrCok~zr59MqO+TIn77n`?ukT>pG#cy%W=W2bQ-q=A@QUW`Z+p0QtQK+l-W{qlFl+5 zdRUR(eR3P%MpDyejaQZ6pX2^5$G@S^G>jWx6snYdtU8j1G+M-4PL~n(nP+I=83VKi z%|fT4FUQ@i`8<>>FSy#fT`B2yaKL+?s6&6Htry1bfH#j!EW9v{cIlG`ob`ngoxlT= zWPbupcyFRe@{4ClHS;8w{RX9Z^`8Bex!n*d0VfF{AHnH81Z;aAlP+#G z!6RIk-wucJrIQS-L|-0H;Oe;Y%j$kLzSzIctk*=7!3R?WuEW%7R8t;I-uK|!AizZO zk*-_>!moFEJuXcYwf+nt<~Dq+F&qDghBo)uaPX+VceCiS9J+25s^+DbFFobKIKQ8A z4!B@_U(m@eDCoS=yspeF6^FeEIINrJSdLif=S+vwjTz5eQAiO(NuVWJqyEA!3!Knu z#jJX5dXK%g7rU)LTc54Z?zU!7TXb8+F2JL50$v%Pk#x&>THvu2<6xQiBV>IXPOrU~ z4skPXI%k-@_F5iO9+Q}qcg%`k>x&8r34x1eWDJ1bi<`8mI+&^K)Q1(OfGYtSwu44v zf{YIiOc%kps;AfDtUWdx&!?rGv2Cw4zJlq+K0sgr7(f~_C0yWF^=gyShtpnScn0t8 zSl3De(Zj`E2N;u~bUv|EPnc99{)chS+bcHTd|N;kOD6KsRuH&L;&WIl_+NE%uAw>^ z8kF_rM4)^*2Up-2P(}mBSW{cb6NQjl+RdFltQrMVaWsY9NL9n(e5HROEzIgc*v`qM*0=PKLpnX~|czIox<{mthhjoWDt{2fZPxslcxZg(^% z0mo;))(ZLaX~-*CWt_HNv7s2xAYKnA_eBd^TnWdX^Cr_P1ET=V|YmL1QYS-yBSl`+D$+FARBqX*8!7lCBYi?~}xm zH)&0|T|@Sba@52}=Zn(=ESw+mK$(~OoDS-?8WmDyr~n#M86XAr4tEyzPm}+$4l6wv zZD839ey>RvZ8O3}{i}l{=!m5og}!Kg^P*8gcN;xV)TfiqI-=*F5#?UyzvKW0Vs;HR zmc6}#wTXpENUbX{tt?CI;GUMhBQwkO*OCGzjbQOx-EvZ zq6S9Bp!{RxVM{kvBr-IlU#{byo7%`L@G%#2U$oTBemf|b2&{9$CmTCpH zYH1dSN1Hm7BV~$lAf)%M1dRVRa0S!X5YG9UO1C9j!$ViCbbh#4*sp!94v;ifZ+M+( zF6sTwf_Pyw882qy|G-jc;LgsVQ3SmSSpKaE1P?<1z)oKeV*;i>Wj6pu9pUh{l=;JA zp~L{Px}x*umGqyo7J%7agb{1T{Kq#1+khgZdet7NKV`l)00;G2@16Qv5&Zs-W(yR( zIEu4t`%|`p4}~DOd{gunGgl*B)?&J)1)JNN>%f3D)^ z3lzP!E&u+%S6&8U1b00VrGI!j$qG>Pa)EZ;_fJ_H2f*E1P7N*oGy{$kDEhxm`?tgY z?KKA!PKT{uLr6M*KL&rVD8aWdEEEbvw%u{Gs&N2*l!&LR?4aW2)<7YcVZ`SsOV|g1 zMWd15;u8}s zzE+NIGBe8;KcTDFS=Wes{OCT}lOlP&?32NJ_OlZM3oEw-u<)WLzizZ~7nofL}s?=SC~+k3eGTQJ@vk@;96M+*&c zCp>gbF30wnT()`{4>#*B{q|GxfG~awoa+)x=`7!1&sL<>Q1x&zPSq++I$flwN#ymT z6{A2htvHZ+uRS0mRwhMjy!q!m#G?)jK=z~7XKxCPdon2*3)47@>9W4Ln*9kZyZU5k zl*wDaGepIC;b7jpj8(|>5^AizL+U?Girj+BrG`pmHjESzb*mlIh9Dr$zrTIF-tFJp zdNkbbkCSS2K4j<)O^C&y=$O#x@Z$G^vj?Ih<;`bR6i*|wC#z%xYs20F8QymiG8T2w zXPX03Q($#)_C$UBC|+tvOhrZX*$|J-zEgOU^WoK}0QLX+g5#U-wIo#(dOJRwX6=Ff z(?f%ZId|y!_AsOAQ0i%@@!*n!t?dVDC91CUxQ+9lKTE1yj)~YFn^X|nJa5nL=|CPA z^_}_+_xH!Gld+eK@ZnZ_6S{de%N`dKww~Al0Ref|i`?#f`YoPrlRqxyfsl=lQD<-% zQOd@zB*kQQD{y*A;2kx?8&;FZ^pz0z%ZnoN# z=k>}PKw0PX`kq@%8*J>1u2%u!GPcK-_mf~$Ctj+5#X;LJ%)>hnvFnPy-%c{uIme|j zq`gGH)@uF(-uutF5C{FFbJM-?f^r}}G`-Ex8$q0t|5;n5`}-TOh-Aeg1&ZE8l~Rqv z`YT6fuRF(fInN>h7HOOa-pq`9U0=ollC|j4pX^|E4C2AD>3Nn)Htb#La;)=)NiQ>% zZy)0v8E<0R0_D&Nkd@>vi%tbf0J!S69?!2q!n+7;+!j&x$sIyPM2x9havv`azyxc1 zK3+~+y1ltL|9}LzLz-jFZmgO~g*B0N`xf`rM#JgaUz^m!-Rox>91^}0a0x-~7aGB$ zp(ghGrP>#_i!RquPmjd%@e|;?xkp?PtLr1ag=)8dHHcZb?=lQYJ~?S5w@Zt*rq$D< zi=ux8z*-BsiD~k>9JiX?94=fj2m*0~(9tP#)hgF?CN9blczq7dwujQL28_}Y=ruoT zma$teS_Hx<`109_-M=U}< z%VO@cMOx80;KS^_C%#~i_NA$-qy#1=j`|G|`E+1F$wv>tI zwXAGL_cw|H<&k43JBY;z7Z^!t(G3 zbzkfa3q(W>3p`89L^Sp@Kbm7SXX?7|8oM3VOvmPpV*9_Np^;4YID$Pa^mh-#=ZHrY z@LblIhciW$?$xQc{m@H=gfhffx9FU5gkb>!>{;xt4zb7O9);C>?c_GVMPfsU_R8rZ zO)s28x~Sb&VH3KmJg#|ufV#F3!^r{j5)ELSo;}3zi-CmlNC18PEK)3(tO^91Yk!V? zZ#LFd9Ka-4-g4LIgv|WKbU2#AIV?~4C+0tbK|BD)Gh_S#6=CWrjPO1Oh##tGE;Tys zlVZ~-eGdSejc@G@)He(XxSse*C%>2VXzwXX{K!i3@qn6T%*~4N{E7hQ{TBgpxSYP2 z0?uR{2CbP!ol1i^wwh40g~NFlHDiFh)eRxyqEvRJ_61%Jl1nFaNX?RiIe@W=ZkSNv zaIq**-dWB45a6!D5SWAR^YdZ9{8r`7)Z?rnxlZH8_uZR~7~$BVWVM_q{F=OGkvEK9V6)a$ImeyDI@ZqEb=Tz1Hdgr(S+VFT@n!9L z04I;@Nv1GW(%E={T#?xwL%&&0puO#EK@eWPcZo_VO$EUmX2%4%u{#kn67!>l!e)P5 zEQNJRgY=17sfH!ffeyso9Vy(3yYN$1vp2tkmB7(V<)XJ)8ZnRa0(WoU3shc`>m`qJ zux{%I8Rcg@)3n?imVXT%Nf`P`2?z$?)ghelKIYE;umHmBaj{cGr?9T9w=QH}8fWqC zcxRNXe~qQ5+%N9MCPYsx!u@hjqmy2~;~5$)trO$5uFyg|pjmd!)-`I(xnayat(yB> zuAeTa;3;jEJk1HS2ZU!9UUkf*Gg;wdW0zJhlonpOpQa6`aL9Q*X-EJOV=zqx!kYGq zDPVy5-8K}}8|?FxhyI&DB`^;RASl3mD?Wd1d-WrrUEAfd(z%q=`JnJS@pE-mptekj zG^S_S;d~trj9vmmT1|kcP#D@!uEjJ1i}?hV#T|Rr9ekWV;TjNjq$|~EpsTDnAyxY2 z4~yvZ8Ef4x#)Cf1 zd&s*l_)Sh_@;M*P6VOdRzjk4FS(+7gziO7EQTg7KKL)Wjn66u1ngpUyy`hXK$~<96 zpTO&h;gM#@lxEo^Tw{DzVzsbeLuB(%i50qvJ#8KQjJlL@AAij zw};E^#rQCR0qQkalVgf|fB3$d@!ypw1EU}fS|gQ9=gkr&!MQLTB!(f)KO1up`m{cp zBgTW)e6xlaFYKQqs7<0~*W_GQhShw{lf#ZldlvPq0K@;o3Arg52* zV>ofws`kO{NXydKmNRjN-n-(ZA$_{U%&Rv|!87}bEY)7=4Odq)Ibx_aJ$9LA{5H8M zshobpTdoa2Y?V-ZL*<_SA8HgSs6iQ-4UKl9cX|JCj&4r8cwEEARQlp_>lO_fR%j#_ z0h^|I{ z(8|QBT(N3-{uN=%Fiocf5H%r~zCv`x;joxeG9~pyNTo^UaM31n0JK%O+0%q`C3m)tk+^IN3iX!7bh0=AEceSSHry{g>*%I9X_ zXJ2i7l9v#?XQnsavsm0{06PuBWB(^ZBv%{yO-BcfmK<#ahvm$^Ierzy{V_`*qewE& z+??YZPu$IojC%3ZU7p3k9J5}Vp?d=2Jqnp^_H3nL!ddnZeH@LlW1zwAVp9Z;^p{iB zJV|T|0yN+Tz)=ah-pX#*@k(oZW@23V?yCzYx7)fq5Bi+_g{ps|oO8piN{v1ecDJ(ittAt1AF!}X4LWR$DwFQV`k7bKGxUGjh zn++S4u-3%@y<%Rn2q?7+jgM*5SmI##J~$|DY%$BnhXO{thk*c<@1g=nz5b&R ziJ>JV*vT*Ph}Y$)`Bw^uE|GVA>yja^P(Q=d$V-pCsS;J)V=y{_7KtoZzJg7|CQglu zwN4WAx=T9)!O?hMg*gA!%sSxWymu^8G#D>E`P?Im|M5Zp8rAZ}^_WySXBRPdCw~iC z;gJ+5@_9R>jMFC+hhAmvlB?ajV|zHm1$nJ?d3AM_TV?t2S|F1?^tEQS$soZRsq3 zAm_aaQS<4tl7eKpRL=am-1EyIz;=sOc+E|gB*cloE~0jnOvOSM?x?)s&o< zSIDO5Wz^a+j2IG(k_xxv*Iy2II$K0DVjSeT70yEyJfCOieZR2IRGZpR(451IQ0L!~ z=3+=CwgBqmJIZ~P&+`XDcB&S3cpMl>by1)`S=S^Gn)O?_szUA_k%v^Qv`AxG~%BM6;N?DqAca|&~Ip3PXHtLDEb!fyjZT+sp)gXnjN@eWiFi%u5o0sdh=XWd|#>yxPSfALMRMzZ2*xePT#M5{vT(z8{QUK z?;F_`^8b`M{Z5?JJ`Tts{g2}KVNn7x%(X9WFaB-X|7(3fJ2(xN{-iL%DBuD(aN?4m z6Yqb{wF3wXb$BAj|72QDh?1y#K$-rG{7|($L^*4}6$hSmkjSS~r=X&$Hv09NJiGt@ zNECe#Ub%CkDBoz*YQiA{9B>RmH{~*&77|s4^tgfT;h#=Q;s%oTBs-~Yh?2HZV;UC} zr#j$&=kIT4azzXpEdX8Yy1%=6Rbp?_0t&7~7mDKH42Lc`7r)|vfM%p%KL#hhw}>n? z=}sxz$Ud7dmJjv)+6>PhzDb?{LUJ52UwT&#cobe{x92$2`~TsJ$hI&_Q0dFTEg4BA zkij0V#nbdxbtwQ(hozR2Gvj}(%U``Oz6g^!o4JS~^%X%d&|Uw3KY~Mo zUiw@o0!y;?!2IW00DpZ6W%ENb8#;2l)$g>5OY%>*gZ}z}$4@T=HNOkq=vSp6bpAbCebw)={NASMO#tkF>b*oT^_& z0|5f{7V`iCUVFOsyL5zVqaiv*{>us_I#tPVA|7gD@6#Ltp7bB|=De5qRBkKFO&*lg zY9y^#2t$nRuxCZr-ZDf459Y<*ffr9p&0bu7cis>${wZKR!FfVYFPf0^@yV}2k0{b^ znL&5QZ65b`JFuLmsFLsPZE`AcUwEhkJnZeZTt+Ml8{U9Z&DZndS%HE=I3!wmrF3_2 zc_0?u%4@lXF^W9Jd6Tn&H*jL*NK&~5xuakxHV-)$t(e2p1$N5zd?B4z5)va0tj5x^&yes<4PZ&3W7xZaYc?63P_5LaIcb9X^hTk5%>E!8@bUeI$DW0Y* zXWkx%5m1bq(vMsV>HQ?qo|9Nk*Cx1b$#Kwpb2`MNZPJyIBZR>?lqPWe*>37^PCoG^ zqwL4jcuE~tDfXu(vdnY_NGpepu1aQ$u1!Y7C16{|UI8p#cexsO|E^3_Y#>^s)qqr2BG9LSb5Q&V1k{%G#i3iU0f6JW~q@GzXP zo&lM?B4T~f)EN@hO)n*a8cR3arGJ3a1o~`TdM9ikbIPSpIM3A@Z^?4N7I0Ph$oo6{ znVH|mAP)GqcVg3zArLOD>>NXKDk^cjsZ#x#)6I?Pq;pTRbiMg(bB#CS3*Fza;$MVB zyi-dEs)T7=o>EbFo8P1NuVAn{_Uo(+dQQvR@CbDP7}MV|$M=B2@ocr!I6ivZccN&|vKDJEX?UV4k17h+ z8*hy%o27U2E{6_Cr61Dv#-5*=$UWGnxx2HoNXK$NSk+9ih_le>H@Pq39A5Y{XWFa> zR_dpG>6k5(Vs5&3> zWx`e|k9JB#b-?C*ocvb&9Bu#9K|x=}QZyo%uE5TACDi{RH`5-i{q?FVtIMiDBjH|W zUz_rgL9Fs*2Aj)Qk&oR7?&FM8*8b|7XU0yty>cQyv&edlFYkOd&2#r>N0!^XA-O7- z{rO1~<=Qf=zjB*n$leb9Y@K(ZyjcPVKc@)>1}NTE>0^{Or_>$Jm8cz#eqY?*>Q53z zz*ZV!+DpSyuuu$OF^Lt}qK~i2liaJx)~5*Vj~h_k906F{&ara1%i2=H-wB zl^pzhG4_BtL!r;^8Mb_h(NUmX-NGlu~1z7y<6^&oy%Ay>zNM>X*{JJUB9kx`%YjjI-EoqD5Sy&erBK|!q2(kN(u*qdJ+S}5UUT#x>qASCf8#mHV zeQ<8739It&X<;-(4vM^cXgc+0i#vi}6-Xz(h*T<4>w!=$?O*EmI;IGlYC_mW z9yo|wtr^F*r4q`OkN3WlEnAN|U=@a9N}jaxJn(RNvj`D2H#G@AWLb}Ybh*da!75Sj|!s``pGDdj%Ih-K|d_C|_~~8uD$@ZKO9k zTTc33Qoo5B-F#nD+m`sv-ZYJ0`^NT*Z7o^5|UPb~~MyZ-3S2!Nl`>^`^F zt@OXV7eVuPXt9jCC;RZoOg^j8@Yn_WReOVt{Xwj&RW{X9BK4hAI+futxYYD|U(PY& z_I5K2HZ9;g_BV!z-`)y$8qI&>I+BU;Tx{?{yxiQHtGg|(GMBk0D=VZc04u@`8jK|) zKTFnEJtfAGu8ZFwA7yS0i}`E@1BlCk%e zZIiCr^qI5|EcDZ8a8IN6%UwkwX&^F;j5JcmfzgQW8kd8SSf#9@=`Uqyhm0zmql7pM zjsategN0*xd38^{+sc9${T(4r?vO^OiQzP6!gYo!dti+YbbZp_OU-J(E79ZhmaNRX3LsO zhO;7%U@QccELRrILDE1*TB&#mmu0sU3~(uZ3FA@dWxQJ~8?#SKbAJg>Q!KTz5Kgga zd;QzEIFtbxY5!06rkmXKzx3&OU3b(7Os=kjonN014D;sqY*oEo_j+ttv7wjN{~9D( zR)Ob2VJxa$=^o>*+g}AfLJt0n$ZU+UM<(*A-afG}furt{pdvh;PDe?7LnWp7l!(tO zUT-y6)MMF?Y_57yP5-paT&0u*JNBf@^y%j*X865OVFx#_&8Yppcb`|Q$}8UA0@p7^ zeC6Ww1^g16%i1h?3HH@B9@F4E4UFe_>t3RV39T^WaC7 zW2ttlsMl=>Ei(prO5IU3`yf6%UD!KPtuS;bhu9tWUeq_gS!&`QxHj~OdVTq(7yWqGkAKmT%R4OXp(**LPIkGzvgdtV z!4Ia7FGcY3FEBNe_4uW9eJ+wW6b4>OyI;kjZv1LEpCjGt>x~suRXl%})@m!CPH+|8 z5;)@h*zFguOyEyAep(n1yKwz)u2Qc3Zztl$|1HX4eA04H+7nBi<-(yne2JDE3)Sel z1^Y&EHOq@pK#UzE;-v z>jwqg2>a{ZoR|9$KookK1DJ)wccc~p+Iq( zxgYQdK{iV`Bok2RoxC18Sn;5C2JUOPH{gG}F1ZRo2Nqp)lRK%cn$zo6z9nr`4?n0J z&$;qGQ2h2&z=_-WZd!-2<-9nqf7i)Az2Aje4893;q0~Fi>v>AdgI-pE46%w)gXHwe z^`QIMk~9ArdCGhhVc>#jW=v7`9VB9F6~mJLr*&58{Pv5s@qyX%hiwh6SSwXol8+$sSGb!yYo%WTaw5@vukOh&wd8o_@ft$b z>`<*>OsShdU1LZw);;%Z*IQA)!_*4E4+Jxb;Z5QCa|;|W_gMD!C~C;yrmAi^f@o27 z$xJGa;0=a}UcPj3zzwFf+JA0-6Lz0a0+BHoce-j^N^P3DcT;4&b*fMqO6OHS&};CI z5ou|5bDXR)*Ctdr(rWmj__gIzs~%SqdXXUiH0LkKLV)EuVW|>P`ID@PSJCcti}S=r zd&*RLKh5Y)Dd>Cn)pINScM6T}6=|w&m*td8Z%jPef!{uMTL$2TKZ;k&9Fr;(<~r;R zK<*D|m3@r_dY)Myi3QyHQ}+xdYSPW7bqbu|LJtpj1JBT8B$LZ=ewJ&kt7|P#LB+Tx#3g*N2nt1p;DpY+7 zjN*(3mS;^Jo2h#l{ui~se=+Bm``gjSD~GXQe13e@m)^UXil*D`fL^9%bQ(v=;S-Tk z$B=Ka2>6!=Nr9pdC-E|p9e2FdEi}}J3RMiv;V~&g#cX;N8l=rg3Y8=E1_&0kVV9^* z9m<|U>k$msrD!q@Hr!$sN@I;D-#g-La#;lyad>5hpN3!7K1~sN$2cxn;nq!1JK1558_;Hb_wq)MAOdAjdnu#CoPC0 zY2Ty!_zE$0FS1{{jL-~*hyTwHpV4Ey?`?ea9Ky)JL|3t+CaYE3%LnJ7xQ3{Q$9lo)hMo1C2opi~7oLxE zL)Wm3YI5*Gs89(q{dxYp0(rdJn1;5ZZo%^flZQI%`Q?G(nwF`b%B@0!!}ru2)Johb zXi+T~P>U;2=(%IAt{3tVg^T=`b)bI`%2HVzySp!1(is}%)hJ>ba84>NSe%3z7qx>d`fdT-5om`_j zBo}}H(t+K(7(?e;YncummD*;}P zwwr6Bh*J9|$jX-OwfSnqhv}8Q6XAr;A5^5eF`BC_cnC|-n$i{=OifMaX)2`3tne=6Hpe-KU{LJ3{SCLjhKor6nCn z9NKIFOgLl3#U7!E*(-IsV~!Ad9rC-H|EImL{)=k){|7_?k(N>#DQS>y5Rnj6kd%;A z8j)NY1e6j-h1Eo{tMsFLmvJB?w+%=bLPyv=2^$Hz&0dN zZL1RqM`sJ6DoNK8GD-6XUufC#qlsBvF;#9-YI2pT|ACU|mgy#wio$XfaCG@lK6oC;x#aP1G|oK-7dBl)(ye4fM>1MIwT%`$~goNV(np?J|l zGc&Mm8jcEAX(7CH?~|rP_6Ot0wd6xQ25vk=aZpbTsn+}z(9mk|8Qo?GPXfsuy0T+e zhAnSYMx0pj4s56QSF%1;pZlInr!3+Nv%kYSx`BG`Kgn<-TREi5RU^_b<9%_+EK>Y* zXmfur;Nt1hd0C#t1=g%hE+Y=b^fnwvZvx-d_k1p`BAnMsS1KdzLyy>UWpRdta-wVG4u)3`ZP_F?ZFIBevV&6=5X)pzR4@cjzIk79ZH9vSr|1#Jks{f&yH zNc_3)C;5(^{gw4+Y$MrPvPI3-V}el)b5>6#mc<~^t}i9whJvPUq>7I%l1ryX__#rr_vNfh~Emu%o0dHs43^S zdeO9=OU>A()gC~JuQXtALQ9)~Au8!fA<+x%SaR4)rNt%iR=`Yso%w|L%%n}!ilHP( zMz^3gI``GXLYWwvj#7xwV;1z5V49&Zf3%jp3$u}1Q1*BTHU9gN zk!X9?k(e65Uu{k$yRlNfGB86=^r!J61RTof!ZPk&B$+lzr@v*Dy zOjla~UFZuebxf|n`+Qez)IxheC+d?wGE;SsH<)AmfE8VKYv?XNa}zuOep3CQ__6)q_Uy zVn`d7tWlb3-qL!3M_y4b%K}Cpm}#~=URE31K^>?@<(pLRT`UA$^IqUaJ%5})xUFz4vKK)*?Sy8o7+?{!$`j<~a;d30=ZJv>NdU4a- zk_tKOi}?fd*eY&oAh z!*GC|v5@_7?JPG#N_Fh2pCDSHk-5fQ%$ntNHigqSHo6ZEBfer8`Sa~fS7CQj6&5Zj z?pz!l)mf@s&)J={lGq0Cvs@-tKfhn^(8-E52IkpL)k>*vrB7|&%2#FN$<$fjAf2-f z%i%P+Ods+4!aUwTHpfzB*tYY?pe-`?R7R}j-gNHqh=Yne!OtD;)9H&6{btC-&Qn89 z#V(<8Z$*yW^l1!--W>{gtF``fuwg+^+_?CS|Jq<)n)yC0GGA0}SYN4kc#d@(iHnT~ z*JN5T7l`Q#t7FJi$>OxN3G|Iv{8nK=(3!+qNHJZ_D2pbO**w-L_dnU>b9A0S3zCPl zWS?#~0M*cgw8;e@77lL!C=D4FJpMRIsQr*1{mFEkojo0=ex!SRba$M~(h>_uoFQWspQ&XJ@$vzyGEPydOye`F2R{Q}KU-48VrMSrMqbbzc7W zo4)e{`rUgj;cj>SITDp{HyTvy73tSN^*=n(5GEjr9_`bek^S4cd3JB(ZS+N}wT*1O z=g%2Czcik;fM5dEsq)wMru(1&J=mHDfXmc+lF@8hKV$-wUltphG*)GP*cg%pridsu z-D+kn$dSutgv)=Cj}PrPEb2mCY?*{ZPw(X>N&OGE;rDiST^-__3c+@M@}YC*gZQ89(IKdEw)W z-O(ArWc(|GeSb{JqQedxM%TP!=lY-oWG0$85&c>k>3d6z zHYFwHW%^SB2R61jkBh`$V0_aG*SK!>JOgMjr<6;MdWtjy2*s#%I~p+~BzNIcj>4ec z;so64i&WOvKxmtm;VWy}tDr>yN|k3WYl#&P^y@B1oj((^G6HeHS1K{r4*PyFPN0J= z>au-V^`7BuF{qzGr`%Fqd=iKbbzG0C74{WLZ zE7P^77SN_A87#0$f`&v{Ggpw#(Yet;OhplVx2&s;l5ZRpBO4jo?P1d`!d=Oy-ynG5T0TyIkAUOjzE z%b;HW1w=#WRQQ+e`r^%Mz({#JfD9)R|5AD+nMR|q8r=$9@#S8Dxi7#Wu5INkjW&y4 z3G~0OaFW|QI+$T`O!D-$o5L(XQ|zmhjL;dnSHge2?`@F*Lzjwc))ca|Oh81$4lZk? z7{pONQ5YxP{X%)xF*)7!>RgOD)=}mhCWV!dCj+)}G-wCK|g;Ypmhdv)3cPyvos?+m1*>B;#818s9hgbHpryH2_0 zir^WLBAWnLy*kw>5l^^RqU1u;#}!}~Q}bjKEf_s}RZOb21_*66I$J*=S{>+G`i%{M zIgzP>&r4tzWIM=pE_V_QS67P(?{KyAZ{ch({6CWALo9n_?3Sx5ZiTv zG0mWoG~J~@_5cV32UMX<$_eAq29{Pn(JJ-;)9YIfzmO>N4onRw!> z3TrVTPekgxZW_+44G^=NTXGZtt*$Ce-%Ll{uG;+zIyCl&4&{6{X?9ItZJ2sC^86NJ*lYq0bC1=~LEyPdtRo!9)x zK#Ik{#to##1t5AuF`ut4eQd|HD^e(h@h?$BAy5>!hCFm3E-vp&N=>CR8A{(%K%Y&c z;El`T?6og3kFszb)#J=w+r9nh9Z1kw9Tr{;!e7h)F(<->AiXD-t&S)VFQVLf##A}t zgCCJR5^)vvrHdew@^QC)KQya0i*ubP@N>WT#qf(l!`9nF#YPwbz6$joS3td-whv68 zEX5={Sz$pruW}#C#a4(F==goPFZ>~vgf5mtzsR62P0UYOQ!|#qQfYxmMU;cu^HRQK z%s}eY{ctcqJMWu#uifO&jrZN`6|2!%`>lTMgt~0s8mr_#J2leu~lVN?7(vdOFZ% zcB-m~W#>Kmwz9j>Y)-kXW<}m)-%NJ@ z>+X<0ACpEw!nucFyJj?}eoCHT<^!M_s-tefWpe@(r)u=DeRV-aJ%0JpLBE8mdlmXo zS5$5!gL96D9R4ECy+=hm$fYoeceqkguAl369>= zqH|!^)=pm1cq#Z@oXwVue)Q0L$`3070pa9!b*IkL#=xZ*9@VI2;_8YQD6|eZcFvgd zh^GbKiHO!9QrO;dSCme@;(^@2>E2S51J@{b%XF#R+52C8z*aNr&1zwq%X~7B~N?3L7RcHZ>I4%FP*z zV&k0r`z4YF^ZNNt$OLV_6ZVUhF%Tf@y;!9MLB5OniOFVFy?sPK{q^$bEaOEYX~WD= z+BftgXe8zp72k-Op1W4-HoE?DAW>fHO}r@|=G@)c zbMKSv*Ql^C4U?D@y%jqeHqhO^JUf`|Y*FHCX1#V&48icN(#*TbbZvz32m@B0LDiX}go%rfYr+XJ zU$}09WCqTsz+Z6W0OpCK!OJFU3dRL{6Y(*8caSVLjD}AqSci^^$sb#XoI~nWDUDXNm$C-jAfP+FVByma{4|8-=$Qt zG0`}J5MWCBKt`$A@a;D;tpV78IzpxIR}0M;uZq;yekMR&E3BO!2EFDxVpx-+oMd&i zOJa}jCiKgR&Df7D3hj81*ZG-KN^=GntE$Ohkp@R4nZgd{*ld0~EW*NV+GE4O(3N{y z1Fx$e%nDeEx7`o-V#P25vmScUWLH0g-MuP;+}JQW|R} zXX$HdU^M#saq7Cs$NNF(@T6~Ln~!vvJ4M$YosHxctJ;D)&LNms>gO9R-y^(E@sS-I z45cx{b5g8dK_L1nNnD`bKv&jMRFi2YA~RbGl6ab@*13S9m?iJbkthEM#z1>a;|5kP zqa0^Q68_; zW9nQMe*_-nt$V;At@4fM6|&fii*?TJAVk}G;Keg?{YNvcke{BWrhN(TK1n?CYTfJk z_G=T5Am)gKL^Oh{4!DOj(TX&SQ!}1Y+f@Ascfe_9r$;EQhSSUSviy!PnkPc-S7^-S zm^d}XZ|I{uEs<$bi_SF0qqE2(-Z?T5lc9Mh_<3uxOeX+tTj*P68C$&{S^Z%nXUyfz zLbZI+Y9&)%nQw!XMA3s+z*EGYKDVRSyL7bJs>p`=R$oLN>YA6yGwQd}4?joaPn1-O z1vRCRB1&BCX=vRgc~3Rd9BVEd=oYSBCfu-9yfi& zj&iVx7Cjtj_MkM~p5)6%IPOgU$c)SnMk;ghna`4=GmlccM&Lhe6%?%+n=3U7OWKzc zk7hdDh7`taA`~U)^9oMo%|CyB&k^D^-a`Gb=n+JrO&(jdk({S8uONepLRP7XnqKL; z8vgPUJpp-dY>4Bxl8q37Tl$qwS;nq`d4W5bdVTX;; z%J>7r42ytV&Bwmwg>~)wBxyHwL1I)s-Nm>PW1joP30xq?T;OZhsEZ*Jm}W|IjC%RT4LmJl3V;9kFcd z710l3OWt9rElYs>U#h(4jtN&BC>3JfoYZn{6lGq}(xEIy$nDac!L%&{eb11gw&whBpQT@%Pc21SHq4#Y&0ijr+_#@ZU}WMs zFD8jWl(poNLYIo)Z942s%c^vLv#@U=y`ONyV5Ip2S6<-L)32>};~~|K?8n`B*wfHw zwq9IV(l?ukIynm7RNWIkWKd<74gF--@T_>XJNGqiIxg;}QUetY_<#z!NxGTr# zg*r8B`OrISv6C}(?(w)XJ}@2=g^fx}!3riwYy{ALPX!T*w%`3B526Xm(C0_4O?nS~asgGEu-0yV;pm7z`=Y8_31TjciU+zvPhBL#LzC+`Km zvr!6<>+iLyaCnJ}odmM4g5@s?jR97mE*LZPL(#>J-}yWa9d78EF0!*;uq1^5Wup&u zU_X`E&X?=pKF-93$CSVYI z+|1y$B#8QzH}7~3ZucR`1mHI!A4V2b$H_F+ZE07`-;LocOdM2Z;xWYdK8qm&2$dlHgl2_{E>_MBmiH>|O(LTl zB{YwN*VtyKK!m6QMZ;TWP(3Twj~V@Kn{2rnGKN||}7^!fdqU0dG0Gw`tYH8IdD3KLBd zgW7OAo0=@W@-1q$L9FCgf;sbH9YFnHyknB6NxHR9`HOy%KFoK}|k-;I{mWZk}MGWUlT5?J31 zWj&=wt?`XTFPs9P1MJj4h?Miu#O77vbJc=?VZx8&x}v*qV0*qeB*eI+HAaj}rU4(Y z#X{VG*)1c_%RN+KzYu~HOds50Y(*nb5<4){@#cqm5RC1f%$a5H^|t&VNh}hbBoc=w zEfOV(yFWpS?2h`*&NB4_^nXYIbq9U1`NC-q3qV>S4}W%~qI({12Zfm2g3+`Ll$ap42~MH5CQFh1t&ANSSN#5M5T;aan3|%W2MizN3?B+X2aU!VKFdmC z@y+DU*m=LwmEEF(N*R6A$h$+k)HI}|#T{;EQFeX=W3`aOnZbEX*3{B4iHc3gCdaB# zFx+UbQK)BRZ9-YhVS~85Sl)}A zXwWgP3Q7)BWYn$y6*mukQo+oa2gQOUkz~4zZ|;j2kD>XHTaaUSfCi zNN3g_Pr}Rt!Wgp58AM4%<7v%%9`XCFRXbRWko9$fd%J9N5uNT{@=YRAykw0QQ@>kn z&;>TXevD18UZ0zu?*`vF(U?z_=TEzs;mOsLSt#9^z0e=3c3>^b=+_Dz53v>Wd37&U zOt8|+fwMNka-t+>FKJ}aal9zzP+N2w#a;T+D4~cAiMZ%_EWwNK9&5@kI)LZX7~to} zTr8^fse`|(ah2a#2TR0<24B=MQ_81|S1xpGvy{-BJ)%LRZOx-6w%FV$($qEBc@1og zpIeaY!e0xl{`TbUennyT((~C@vsxb*8zvpmGZ`e?&K4Z31xsIcX0Qa}RE*)XC`Qk- zpApUvB@GO;vGw!DwJrLSpz?$^dmmt`{EsQ>lxX>B*cKHXvFDM96aSKqE0!O_YQ~Ob zt)y&}MbBO0i*~TBfc>Zd4zsF>%)xk}SLY_gFpA4;1LHmCFG~G}GP*+|$%~80y7eOX zIc-rNIj6SsrgZIt=&wzv(mj}Fni#a=gbGEX&D4&Z?{Sl!d|A|EQfZq}y>|r+No?O|xs9EV7=#}_DsM^ZgkIL} zYq$4@Je_~%C@jD3A)xcN3XbkmJiEos&=O<zdm%1m6b^G&`*?Ju#7mgSs^4zDowbzjEAK@=zxx+mXibP(fLbd*?=n@1 zzB!st5Aqz}O`}B}0K4Zyvu`F;-DrIF!&&esd$}Ki%>f$gUZ^T9|IN_`q*DFU66$2E z1}QYXn4}@;va+cVZR*tx1WUL^y@wdz2VDc{B)JlyCXX3P679iYyn4JO$CH3p@tUu*1+ zdTn1{*KB|N`yzeq#KL5&`8T}YdsqQ*5@mJdp+W!hS}y|ucXr#`q~bq^YF`_@Mg^Mf z{%xP+?Q0zuZPC_$f|*{jf))>-n+kIL(>O3DX+cw1(4%Mm&h`E+h5^K0toGcUcG-U# z2lPmfK~p|9l>E-BX&6*BSiynvVa;*UyduEjD-OrT8mM4txUW zWPEQWmSOlaI6pIUgmK3_MH{HL(ItLw>i+JJB&_Q!5e7x|je(R1u$pSw?y%@qe|Q1( zN({hc{1v3gKysQy|MOLTp$|o(SWcDusuk)fa=aGg1dH{T*jTdmZftB;1_1g;n)Yfd zfXocz)gJP@-ni28^>4?EybobxDl~a=!KZ4+@VVqe<#C^XdVAgs`-V9C<$V2w_=}!^r}&;IA35;P!N)O6R@Qk@fu* z)={BfNF_tE9}rS01@}Vp_5Yy&l^%?4Z@E4e~CugM)*>zw~%xqBLwcckDR?1Gw3lSaj3R zsy||rMmx>9>wwUiboN}3Fd2H#17NIhP@K{!i}NO+*S^`Xv|B0w94X5PJcPbkC?Aw366*!-oz$RJNfni zz^O5lWfqD6M2=$M@x26zEhPZubg!STvd?z-#21BOe^b}-{P3Mtt#h$ofZPMYB(SSf zygJ7jc9%A84^1q2_sbMG+`sf&T~8=BwR`^eEW~Ftz-}z^=58wbO%pX->X=AkhkWDi z=x4hO)c3SCwN!($)+Xq#$(AFdZfQQ>BiNV)ffgW?juQBO^7e((2LLwh$9tgGac&QK zcLh>h6oKh=7%IIoT~)d%!1X}x5}$YKGpJy9SMc+;$*l5n38BLEO%*n%tl`jYjETte>WY6&`!<{{{dm$Mdt zZhG&LQ!r{6t)5(CaOJT}u37IPld3HADP$V}m)9ZkCkq=MCtDM_J37xi>$Zu(Qx zVXcH$m*Z2r3BN}s$hYgjCsC*EZILGD-*N!sCPpcitBqb((3?hlzG6<8T|G8qa|A}k z@`6rjwJ(tY3O$R_s zxnj-*ttLOX0Mrg-A1Nt}v%im&3ikW>QOjrO?vp1^xPw-Ou0pf1Dbe(3t&9Aj1dNL^g2_6rXjMKS+iQTj6Jc`n! zSot*EaMJu$u_3WZqumv-n!M1NxeYi@7+MS`vOQA({|dQ1<5HC9;DWJRksYc1lZIZ( zhuMGtfA|GHdWsKkc`6Nf=!I0)XY7Yr#NFx*C3mIDnNyX?(lJXgrA)Xn>ECL8X1hi2 z9eVSDED1KwifwdsiX_!=?B{q$rf#^u>k(KVsuHJ+1rr?W(}Bv{kyEv?UD z?!~Q9C3bbMw~lm-Lii>fZX@$*#Ex(8{QRZd3m|oXr(RZ=f@mXM&%N3xb?t1IgZK)| zLbbZosoY;;DOdfh`e&byNiTY=IgPfC!1hnwzL#%|pVMP6sAjG03YK@Uzse+0m2na& zFUG_X>2ki2IrZbcx|O=V`%yvLGl8qxvqn6R@o86>)l5?7c-n~%Y2NVm3}i4!eS?Z9 zWuqEa06R`-9T_b?DRt6!qvWIC<BC`2>?L>VyRDPZF=<_R%kN^D@#jC8}~H0XkEA0D*RNpbd^^=nX`TN z-E&Zk;drv3?p(22EYg>6_N4BFFZpT%c(4>?(jBFNOIzcx=#L7O(n=saY_-J zg+FGqslPhzvn;U>nMiP)9IHa$W9^_^F`Pl|^ z&EthWK8>VT!+YXWPX|oro#|x9`m9lXPhWmFwhfA8LP8jN8{JSEJALUg?~{6lW3<-f zgMOs7lQTD!!(MA?JdyIL!ik@tD9FxdnR!#A_YrU|nJ()o0o67}Dic*}9+?+6sR9I- z26pH58i#$k(urG;{#|zJn3IjL{KIxB|B|4a%bR)NIJR$b`oxB$T511|zc>6CM z@6YNDQz0&L3o=1OTOQD$>@_cCCVRL-1dr$9)4~vIvs3GcP?=16cn}RCWSGk1bYX`Z zmRG7=W44)K&G`a-M(|Oc?Skhqto9&L)SaHw17=9il{ z&mm^4?4)`;F5Ih;9)^Wu;7Oe$l()lVMlq<}p4*SVK@NXR{iOM1u(R(i*i^$jo-9_y z=sLQXQR(YDFPy}wc%G~FVo02NBP1Rz9*66omw!5R9DdRM6N%!I>H>$%{fY`~u7i3u zv@9SoLU}QxmXwcx($R-sYTQ zKu)`?QR;pIXqOL zJhscs4(kCF`lQCmCUNIt95#mSX(zLF^YfJJ6l46IZI<{hdsn`;i;L{c=(@x1d3R8i zSV*wR_JTE=UtrG7zTOS}Q=?Tgj=-kpeaI7x3RuDYS(%F*4V;_9mB{QC%9Z_tFr$fTVwY|4{&*g-UYW6A6P>-|~r7_N(^3IEOYvIMY^`@a8(= zs#wy|25y6FAC5^L>bl{?(>NMK{h2-~O944~ZypKzex|TC^rjVsi){x~}bxG~x%0-vrQX8>tZ)-@H!)Nb2l5-`uJ zVbyxLr`T!hK$Uer?(C!0F%=1@aU$jiSbl{b(gja+R}u-ECFO>XL#C!~^}pJhDgRlY z$&+>yd&e?nUI>bv_(I@V(7L!aJ`T+C4abqb*zsZ@{YFH??p>kK#1u7TYp?uRN>OyX zaw$}Qkze5V%ypn+@NxFWDdGe^k>o3IsR;S`V*0}`ob82ip|qK!+FC2FqPCQiDdH<7w!r=voRk-{N#bqnM@0PUWvG zjik2O+)5hy($?zme$fL7tJy(|lZ@jI+ z#2PZvk`@xu9~8C?X4OGHi-vI$!z9SqdsS9oQr{jq2uh|F-si4klJr9HUW;kCO^M=p z+6=ECb-!~Z{rcVoeb}Y-JEtEu)E0R2YC&?Cn^y6bCGYM#XOwBgl~bFGw(&=;1+xiQ zP3~X4IGceZa)mB;>8o>Jr^SrN*KB0OJ8H59+RWOna;%(Y{t`0ecytNrtOCl;1a88;6ch<1` z%O}&~WVbZ5OxA5Jr^Qc?I^c43$V$)M^2QUglkM`Uf*{Ji5Qo)Cw_o{+WXZMM&K-}a zB)(bgmfeB`-m{~c0lL3wPJz=TfF1q9Q{U^Pz1X=3M?}>XJ8cy;Dr`;b;m()N zP+4a{%F5KJD1K78CA8nc=>SQ@lep|aWcIZPhcP7{MtPtlJ)Ln54goU|IzkYQ^^nQC zMaTJu>>mpXhM)mp5Rh2Z#Apd zQp|-sQ{q6qLgfiv@s<*LtY#YfvE@!_e?ZNO`XT}hw^64cRz-~F(Nx(m2Mc^E+lIBc z{EFF}?SsOao5@Rji$_cDElesci=)0LvY1u-UDQr+TIt7Z85GG41lSzyB;8q;r|lYi zbBJTDnXiJ>$kRG2z@wAJUk@2eLIh$ey$nxgkOeN?I{q<`Zvyb+ zb%Z22ZAT?qcDc;-l%;&-+o#2A)9UwX-?X z*|#2%eEIkw1#f!P=*`mv7O4r3rTcSRdiHtM(35FMQau)!Mh(tx=M5yI z^LQe*w|SVyLeIbr6)+|r1ohnuy7a%l>bMs1%;D}{xD8a+9>Qn1aUE$09v=>YLp30w zqXUGT(2J!A>BV2nJ5_75tBU%is#{DPNRF3aI^lSepk zYs0I$(?_9$<(NN;(fhz-0jG3>2`pGbE5PNcfLdLwiowaXw<;XH?Qa&xecd*G#2n2Uo_wNGjJFqkTiVMHli=55 zTBWf6yi2}DgKNEaKo;cQPAEa-((l`U#P`4Y4sRZWd=B1F5fK$VWz^6;;;a$#EhcsPX~hE#IllZc zQ=YfUv3)eHd_7w(VYAICinPO-jsi7Ltj`bmrl4w^2_L-fp98vV63V5LDSnIN=vKz* za^?6uX+2rpyaAmF<3WPpv~cBg*W*nyDk2DCF`;bSv_EOaW3y#IZXIVd_yC`?YI$)d zBRuF0p18G^CndF=z&ESkt=r-Ykub6<4xQ7SGIqV6+t+as{c0w>a0voRX8hR7hTFs_ z@M;Swh~D(-_S%w1#?1X=11H?!$IOeii;DWyPn^ab8h!Miow^WZZ*xbGYT7^@E>u3t zOr}}cF$?$E1x@rOBXb9-7WuEw2kspfG*&f~+Vf4;sfshEZQ7=gDVfw}4OxyAD5v8A z5RVRC?#CQVVgu*vmg5|or?*An)jJ68g2&84*NoE~RHxexAc@;9RwqA`ooXBp&d2Ht zCai0=Yj#Q3X5HZsQg$RGlgcBzN-U$=^>Keb__`DRboHOX_2+i_GlBe>GXE?Rf0o5R z706!|=>M^r%Qc2*2?Yf|TmG?>+MmMjch&r-@cXl?__L4tvvd5jSN?+z{J}&1Ku>?8 zXaC0vzdyy^pJMMCCjJ8<{{hYa&;);ok^euaAS8At^)@9rrc(zB_>q@Yeq11J;Pd|g DmzkSt literal 0 HcmV?d00001 diff --git a/Tests/snapshots/file-browser-empty.png b/Tests/snapshots/file-browser-empty.png new file mode 100644 index 0000000000000000000000000000000000000000..d86cff74b3ee800876c83bf5a17a20231086e14d GIT binary patch literal 29634 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 literal 0 HcmV?d00001 diff --git a/Tests/snapshots/file-browser-error.png b/Tests/snapshots/file-browser-error.png new file mode 100644 index 0000000000000000000000000000000000000000..677cdf26ad73e8180aebc6897f01d6a66e107a5b GIT binary patch literal 34487 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 QQk%>0n%UKgKU^OE4`0eADF6Tf literal 0 HcmV?d00001 diff --git a/Tests/snapshots/file-browser-light.png b/Tests/snapshots/file-browser-light.png new file mode 100644 index 0000000000000000000000000000000000000000..b71284a00d848515ad955b75b1311c978082b839 GIT binary patch literal 38734 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 c&<%uBLmfz5y_~`%5%_mcRqJ+