diff --git a/ora/oraApp.swift b/ora/App/OraApp.swift similarity index 100% rename from ora/oraApp.swift rename to ora/App/OraApp.swift diff --git a/ora/OraCommands.swift b/ora/App/OraCommands.swift similarity index 100% rename from ora/OraCommands.swift rename to ora/App/OraCommands.swift diff --git a/ora/OraRoot.swift b/ora/App/OraRoot.swift similarity index 100% rename from ora/OraRoot.swift rename to ora/App/OraRoot.swift diff --git a/ora/Assets.xcassets/AccentColor.colorset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from ora/Assets.xcassets/AccentColor.colorset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/ora/Assets.xcassets/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/Contents.json similarity index 100% rename from ora/Assets.xcassets/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/Contents.json diff --git a/ora/Assets.xcassets/OraColorLogo.imageset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/OraColorLogo.imageset/Contents.json similarity index 100% rename from ora/Assets.xcassets/OraColorLogo.imageset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/OraColorLogo.imageset/Contents.json diff --git a/ora/Assets.xcassets/OraColorLogo.imageset/ora-color-logo 1.png b/ora/Assets/Catalogs/Assets.xcassets/OraColorLogo.imageset/ora-color-logo 1.png similarity index 100% rename from ora/Assets.xcassets/OraColorLogo.imageset/ora-color-logo 1.png rename to ora/Assets/Catalogs/Assets.xcassets/OraColorLogo.imageset/ora-color-logo 1.png diff --git a/ora/Assets.xcassets/OraColorLogo.imageset/ora-color-logo.png b/ora/Assets/Catalogs/Assets.xcassets/OraColorLogo.imageset/ora-color-logo.png similarity index 100% rename from ora/Assets.xcassets/OraColorLogo.imageset/ora-color-logo.png rename to ora/Assets/Catalogs/Assets.xcassets/OraColorLogo.imageset/ora-color-logo.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Contents.json similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Contents.json diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-1024.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-1024.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-1024.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-1024.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-128.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-128.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-128.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-128.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-256 1.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-256 1.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-256 1.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-256 1.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-256.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-256.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-256.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-256.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-32 1.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-32 1.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-32 1.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-32 1.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-32.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-32.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-32.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-32.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-512 1.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-512 1.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-512 1.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-512 1.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-512.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-512.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-512.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-512.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/Icon-64.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-64.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/Icon-64.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/Icon-64.png diff --git a/ora/Assets.xcassets/OraIcon.appiconset/ora-white-macos-icon.png b/ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/ora-white-macos-icon.png similarity index 100% rename from ora/Assets.xcassets/OraIcon.appiconset/ora-white-macos-icon.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIcon.appiconset/ora-white-macos-icon.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Contents.json similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Contents.json diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-1024.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-1024.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-1024.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-1024.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-128.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-128.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-128.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-128.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-256 1.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-256 1.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-256 1.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-256 1.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-256.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-256.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-256.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-256.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-32 1.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-32 1.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-32 1.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-32 1.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-32.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-32.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-32.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-32.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-512 1.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-512 1.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-512 1.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-512 1.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-512.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-512.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-512.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-512.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon-64.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-64.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon-64.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon-64.png diff --git a/ora/Assets.xcassets/OraIconDev.appiconset/Icon.png b/ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon.png similarity index 100% rename from ora/Assets.xcassets/OraIconDev.appiconset/Icon.png rename to ora/Assets/Catalogs/Assets.xcassets/OraIconDev.appiconset/Icon.png diff --git a/ora/Assets.xcassets/appearance-dark.imageset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/appearance-dark.imageset/Contents.json similarity index 100% rename from ora/Assets.xcassets/appearance-dark.imageset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/appearance-dark.imageset/Contents.json diff --git a/ora/Assets.xcassets/appearance-dark.imageset/dark.png b/ora/Assets/Catalogs/Assets.xcassets/appearance-dark.imageset/dark.png similarity index 100% rename from ora/Assets.xcassets/appearance-dark.imageset/dark.png rename to ora/Assets/Catalogs/Assets.xcassets/appearance-dark.imageset/dark.png diff --git a/ora/Assets.xcassets/appearance-light.imageset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/appearance-light.imageset/Contents.json similarity index 100% rename from ora/Assets.xcassets/appearance-light.imageset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/appearance-light.imageset/Contents.json diff --git a/ora/Assets.xcassets/appearance-light.imageset/light.png b/ora/Assets/Catalogs/Assets.xcassets/appearance-light.imageset/light.png similarity index 100% rename from ora/Assets.xcassets/appearance-light.imageset/light.png rename to ora/Assets/Catalogs/Assets.xcassets/appearance-light.imageset/light.png diff --git a/ora/Assets.xcassets/appearance-system.imageset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/appearance-system.imageset/Contents.json similarity index 100% rename from ora/Assets.xcassets/appearance-system.imageset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/appearance-system.imageset/Contents.json diff --git a/ora/Assets.xcassets/appearance-system.imageset/Ora Browser System.png b/ora/Assets/Catalogs/Assets.xcassets/appearance-system.imageset/Ora Browser System.png similarity index 100% rename from ora/Assets.xcassets/appearance-system.imageset/Ora Browser System.png rename to ora/Assets/Catalogs/Assets.xcassets/appearance-system.imageset/Ora Browser System.png diff --git a/ora/Assets.xcassets/ora-logo-outline.imageset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/ora-logo-outline.imageset/Contents.json similarity index 100% rename from ora/Assets.xcassets/ora-logo-outline.imageset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/ora-logo-outline.imageset/Contents.json diff --git a/ora/Assets.xcassets/ora-logo-outline.imageset/Ora Browser Logo (1).svg b/ora/Assets/Catalogs/Assets.xcassets/ora-logo-outline.imageset/Ora Browser Logo (1).svg similarity index 100% rename from ora/Assets.xcassets/ora-logo-outline.imageset/Ora Browser Logo (1).svg rename to ora/Assets/Catalogs/Assets.xcassets/ora-logo-outline.imageset/Ora Browser Logo (1).svg diff --git a/ora/Assets.xcassets/ora-logo-plain.imageset/Contents.json b/ora/Assets/Catalogs/Assets.xcassets/ora-logo-plain.imageset/Contents.json similarity index 100% rename from ora/Assets.xcassets/ora-logo-plain.imageset/Contents.json rename to ora/Assets/Catalogs/Assets.xcassets/ora-logo-plain.imageset/Contents.json diff --git a/ora/Assets.xcassets/ora-logo-plain.imageset/Ora Browser Logo.svg b/ora/Assets/Catalogs/Assets.xcassets/ora-logo-plain.imageset/Ora Browser Logo.svg similarity index 100% rename from ora/Assets.xcassets/ora-logo-plain.imageset/Ora Browser Logo.svg rename to ora/Assets/Catalogs/Assets.xcassets/ora-logo-plain.imageset/Ora Browser Logo.svg diff --git a/ora/Capsule.xcassets/Contents.json b/ora/Assets/Catalogs/Capsule.xcassets/Contents.json similarity index 100% rename from ora/Capsule.xcassets/Contents.json rename to ora/Assets/Catalogs/Capsule.xcassets/Contents.json diff --git a/ora/Capsule.xcassets/grok-capsule-logo-inverted.imageset/Contents.json b/ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo-inverted.imageset/Contents.json similarity index 100% rename from ora/Capsule.xcassets/grok-capsule-logo-inverted.imageset/Contents.json rename to ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo-inverted.imageset/Contents.json diff --git a/ora/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-black-capsule-logo.svg b/ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-black-capsule-logo.svg similarity index 100% rename from ora/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-black-capsule-logo.svg rename to ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-black-capsule-logo.svg diff --git a/ora/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-white-capsule-logo.svg b/ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-white-capsule-logo.svg similarity index 100% rename from ora/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-white-capsule-logo.svg rename to ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-white-capsule-logo.svg diff --git a/ora/Capsule.xcassets/grok-capsule-logo.imageset/Contents.json b/ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo.imageset/Contents.json similarity index 100% rename from ora/Capsule.xcassets/grok-capsule-logo.imageset/Contents.json rename to ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo.imageset/Contents.json diff --git a/ora/Capsule.xcassets/grok-capsule-logo.imageset/grok-black-capsule-logo.svg b/ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo.imageset/grok-black-capsule-logo.svg similarity index 100% rename from ora/Capsule.xcassets/grok-capsule-logo.imageset/grok-black-capsule-logo.svg rename to ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo.imageset/grok-black-capsule-logo.svg diff --git a/ora/Capsule.xcassets/grok-capsule-logo.imageset/grok-white-capsule-logo.svg b/ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo.imageset/grok-white-capsule-logo.svg similarity index 100% rename from ora/Capsule.xcassets/grok-capsule-logo.imageset/grok-white-capsule-logo.svg rename to ora/Assets/Catalogs/Capsule.xcassets/grok-capsule-logo.imageset/grok-white-capsule-logo.svg diff --git a/ora/Capsule.xcassets/openai-capsule-logo-inverted.imageset/Contents.json b/ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo-inverted.imageset/Contents.json similarity index 100% rename from ora/Capsule.xcassets/openai-capsule-logo-inverted.imageset/Contents.json rename to ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo-inverted.imageset/Contents.json diff --git a/ora/Capsule.xcassets/openai-capsule-logo-inverted.imageset/opeai-black-capsule-logo.svg b/ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo-inverted.imageset/opeai-black-capsule-logo.svg similarity index 100% rename from ora/Capsule.xcassets/openai-capsule-logo-inverted.imageset/opeai-black-capsule-logo.svg rename to ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo-inverted.imageset/opeai-black-capsule-logo.svg diff --git a/ora/Capsule.xcassets/openai-capsule-logo-inverted.imageset/openai-white-capsule-logo.svg b/ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo-inverted.imageset/openai-white-capsule-logo.svg similarity index 100% rename from ora/Capsule.xcassets/openai-capsule-logo-inverted.imageset/openai-white-capsule-logo.svg rename to ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo-inverted.imageset/openai-white-capsule-logo.svg diff --git a/ora/Capsule.xcassets/openai-capsule-logo.imageset/Contents.json b/ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo.imageset/Contents.json similarity index 100% rename from ora/Capsule.xcassets/openai-capsule-logo.imageset/Contents.json rename to ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo.imageset/Contents.json diff --git a/ora/Capsule.xcassets/openai-capsule-logo.imageset/opeai-black-capsule-logo.svg b/ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo.imageset/opeai-black-capsule-logo.svg similarity index 100% rename from ora/Capsule.xcassets/openai-capsule-logo.imageset/opeai-black-capsule-logo.svg rename to ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo.imageset/opeai-black-capsule-logo.svg diff --git a/ora/Capsule.xcassets/openai-capsule-logo.imageset/openai-white-capsule-logo 1.svg b/ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo.imageset/openai-white-capsule-logo 1.svg similarity index 100% rename from ora/Capsule.xcassets/openai-capsule-logo.imageset/openai-white-capsule-logo 1.svg rename to ora/Assets/Catalogs/Capsule.xcassets/openai-capsule-logo.imageset/openai-white-capsule-logo 1.svg diff --git a/ora/Capsule.xcassets/perplexity-capsule-logo.imageset/Contents.json b/ora/Assets/Catalogs/Capsule.xcassets/perplexity-capsule-logo.imageset/Contents.json similarity index 100% rename from ora/Capsule.xcassets/perplexity-capsule-logo.imageset/Contents.json rename to ora/Assets/Catalogs/Capsule.xcassets/perplexity-capsule-logo.imageset/Contents.json diff --git a/ora/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo 1.png b/ora/Assets/Catalogs/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo 1.png similarity index 100% rename from ora/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo 1.png rename to ora/Assets/Catalogs/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo 1.png diff --git a/ora/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo.png b/ora/Assets/Catalogs/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo.png similarity index 100% rename from ora/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo.png rename to ora/Assets/Catalogs/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo.png diff --git a/ora/Capsule.xcassets/reddit-capsule-logo.imageset/Contents.json b/ora/Assets/Catalogs/Capsule.xcassets/reddit-capsule-logo.imageset/Contents.json similarity index 100% rename from ora/Capsule.xcassets/reddit-capsule-logo.imageset/Contents.json rename to ora/Assets/Catalogs/Capsule.xcassets/reddit-capsule-logo.imageset/Contents.json diff --git a/ora/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo 1.svg b/ora/Assets/Catalogs/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo 1.svg similarity index 100% rename from ora/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo 1.svg rename to ora/Assets/Catalogs/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo 1.svg diff --git a/ora/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo.svg b/ora/Assets/Catalogs/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo.svg similarity index 100% rename from ora/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo.svg rename to ora/Assets/Catalogs/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo.svg diff --git a/ora/Capsule.xcassets/t3chat-capsule-logo.imageset/Contents.json b/ora/Assets/Catalogs/Capsule.xcassets/t3chat-capsule-logo.imageset/Contents.json similarity index 100% rename from ora/Capsule.xcassets/t3chat-capsule-logo.imageset/Contents.json rename to ora/Assets/Catalogs/Capsule.xcassets/t3chat-capsule-logo.imageset/Contents.json diff --git a/ora/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo 1.png b/ora/Assets/Catalogs/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo 1.png similarity index 100% rename from ora/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo 1.png rename to ora/Assets/Catalogs/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo 1.png diff --git a/ora/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo.png b/ora/Assets/Catalogs/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo.png similarity index 100% rename from ora/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo.png rename to ora/Assets/Catalogs/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo.png diff --git a/ora/WindowControls.xcassets/Contents.json b/ora/Assets/Catalogs/WindowControls.xcassets/Contents.json similarity index 100% rename from ora/WindowControls.xcassets/Contents.json rename to ora/Assets/Catalogs/WindowControls.xcassets/Contents.json diff --git a/ora/WindowControls.xcassets/close-hover.imageset/Close Hover Icon.svg b/ora/Assets/Catalogs/WindowControls.xcassets/close-hover.imageset/Close Hover Icon.svg similarity index 100% rename from ora/WindowControls.xcassets/close-hover.imageset/Close Hover Icon.svg rename to ora/Assets/Catalogs/WindowControls.xcassets/close-hover.imageset/Close Hover Icon.svg diff --git a/ora/WindowControls.xcassets/close-hover.imageset/Contents.json b/ora/Assets/Catalogs/WindowControls.xcassets/close-hover.imageset/Contents.json similarity index 100% rename from ora/WindowControls.xcassets/close-hover.imageset/Contents.json rename to ora/Assets/Catalogs/WindowControls.xcassets/close-hover.imageset/Contents.json diff --git a/ora/WindowControls.xcassets/close-normal.imageset/Contents.json b/ora/Assets/Catalogs/WindowControls.xcassets/close-normal.imageset/Contents.json similarity index 100% rename from ora/WindowControls.xcassets/close-normal.imageset/Contents.json rename to ora/Assets/Catalogs/WindowControls.xcassets/close-normal.imageset/Contents.json diff --git a/ora/WindowControls.xcassets/close-normal.imageset/close-normal.svg b/ora/Assets/Catalogs/WindowControls.xcassets/close-normal.imageset/close-normal.svg similarity index 100% rename from ora/WindowControls.xcassets/close-normal.imageset/close-normal.svg rename to ora/Assets/Catalogs/WindowControls.xcassets/close-normal.imageset/close-normal.svg diff --git a/ora/WindowControls.xcassets/maximize-hover.imageset/Contents.json b/ora/Assets/Catalogs/WindowControls.xcassets/maximize-hover.imageset/Contents.json similarity index 100% rename from ora/WindowControls.xcassets/maximize-hover.imageset/Contents.json rename to ora/Assets/Catalogs/WindowControls.xcassets/maximize-hover.imageset/Contents.json diff --git a/ora/WindowControls.xcassets/maximize-hover.imageset/maximize-hover.svg b/ora/Assets/Catalogs/WindowControls.xcassets/maximize-hover.imageset/maximize-hover.svg similarity index 100% rename from ora/WindowControls.xcassets/maximize-hover.imageset/maximize-hover.svg rename to ora/Assets/Catalogs/WindowControls.xcassets/maximize-hover.imageset/maximize-hover.svg diff --git a/ora/WindowControls.xcassets/maximize-normal.imageset/Contents.json b/ora/Assets/Catalogs/WindowControls.xcassets/maximize-normal.imageset/Contents.json similarity index 100% rename from ora/WindowControls.xcassets/maximize-normal.imageset/Contents.json rename to ora/Assets/Catalogs/WindowControls.xcassets/maximize-normal.imageset/Contents.json diff --git a/ora/WindowControls.xcassets/maximize-normal.imageset/maximize-normal.svg b/ora/Assets/Catalogs/WindowControls.xcassets/maximize-normal.imageset/maximize-normal.svg similarity index 100% rename from ora/WindowControls.xcassets/maximize-normal.imageset/maximize-normal.svg rename to ora/Assets/Catalogs/WindowControls.xcassets/maximize-normal.imageset/maximize-normal.svg diff --git a/ora/WindowControls.xcassets/minimize-hover.imageset/Contents.json b/ora/Assets/Catalogs/WindowControls.xcassets/minimize-hover.imageset/Contents.json similarity index 100% rename from ora/WindowControls.xcassets/minimize-hover.imageset/Contents.json rename to ora/Assets/Catalogs/WindowControls.xcassets/minimize-hover.imageset/Contents.json diff --git a/ora/WindowControls.xcassets/minimize-hover.imageset/minimize-hover.svg b/ora/Assets/Catalogs/WindowControls.xcassets/minimize-hover.imageset/minimize-hover.svg similarity index 100% rename from ora/WindowControls.xcassets/minimize-hover.imageset/minimize-hover.svg rename to ora/Assets/Catalogs/WindowControls.xcassets/minimize-hover.imageset/minimize-hover.svg diff --git a/ora/WindowControls.xcassets/minimize-normal.imageset/Contents.json b/ora/Assets/Catalogs/WindowControls.xcassets/minimize-normal.imageset/Contents.json similarity index 100% rename from ora/WindowControls.xcassets/minimize-normal.imageset/Contents.json rename to ora/Assets/Catalogs/WindowControls.xcassets/minimize-normal.imageset/Contents.json diff --git a/ora/WindowControls.xcassets/minimize-normal.imageset/minimize-normal.svg b/ora/Assets/Catalogs/WindowControls.xcassets/minimize-normal.imageset/minimize-normal.svg similarity index 100% rename from ora/WindowControls.xcassets/minimize-normal.imageset/minimize-normal.svg rename to ora/Assets/Catalogs/WindowControls.xcassets/minimize-normal.imageset/minimize-normal.svg diff --git a/ora/WindowControls.xcassets/no-focus.imageset/Contents.json b/ora/Assets/Catalogs/WindowControls.xcassets/no-focus.imageset/Contents.json similarity index 100% rename from ora/WindowControls.xcassets/no-focus.imageset/Contents.json rename to ora/Assets/Catalogs/WindowControls.xcassets/no-focus.imageset/Contents.json diff --git a/ora/WindowControls.xcassets/no-focus.imageset/no-focus.svg b/ora/Assets/Catalogs/WindowControls.xcassets/no-focus.imageset/no-focus.svg similarity index 100% rename from ora/WindowControls.xcassets/no-focus.imageset/no-focus.svg rename to ora/Assets/Catalogs/WindowControls.xcassets/no-focus.imageset/no-focus.svg diff --git a/ora/Icons/OraIcon.icon/Assets/OraLogo.svg b/ora/Assets/Icons/OraIcon.icon/Assets/OraLogo.svg similarity index 100% rename from ora/Icons/OraIcon.icon/Assets/OraLogo.svg rename to ora/Assets/Icons/OraIcon.icon/Assets/OraLogo.svg diff --git a/ora/Icons/OraIcon.icon/Assets/momento.svg b/ora/Assets/Icons/OraIcon.icon/Assets/momento.svg similarity index 100% rename from ora/Icons/OraIcon.icon/Assets/momento.svg rename to ora/Assets/Icons/OraIcon.icon/Assets/momento.svg diff --git a/ora/Icons/OraIcon.icon/icon.json b/ora/Assets/Icons/OraIcon.icon/icon.json similarity index 100% rename from ora/Icons/OraIcon.icon/icon.json rename to ora/Assets/Icons/OraIcon.icon/icon.json diff --git a/ora/Icons/OraIconDev.icon/Assets/Grid.png b/ora/Assets/Icons/OraIconDev.icon/Assets/Grid.png similarity index 100% rename from ora/Icons/OraIconDev.icon/Assets/Grid.png rename to ora/Assets/Icons/OraIconDev.icon/Assets/Grid.png diff --git a/ora/Icons/OraIconDev.icon/Assets/OraLogo.svg b/ora/Assets/Icons/OraIconDev.icon/Assets/OraLogo.svg similarity index 100% rename from ora/Icons/OraIconDev.icon/Assets/OraLogo.svg rename to ora/Assets/Icons/OraIconDev.icon/Assets/OraLogo.svg diff --git a/ora/Icons/OraIconDev.icon/Assets/momento.svg b/ora/Assets/Icons/OraIconDev.icon/Assets/momento.svg similarity index 100% rename from ora/Icons/OraIconDev.icon/Assets/momento.svg rename to ora/Assets/Icons/OraIconDev.icon/Assets/momento.svg diff --git a/ora/Icons/OraIconDev.icon/icon.json b/ora/Assets/Icons/OraIconDev.icon/icon.json similarity index 100% rename from ora/Icons/OraIconDev.icon/icon.json rename to ora/Assets/Icons/OraIconDev.icon/icon.json diff --git a/ora/Common/Constants/AppEvents.swift b/ora/Core/Constants/AppEvents.swift similarity index 100% rename from ora/Common/Constants/AppEvents.swift rename to ora/Core/Constants/AppEvents.swift diff --git a/ora/Common/Constants/ContainerConstants.swift b/ora/Core/Constants/ContainerConstants.swift similarity index 100% rename from ora/Common/Constants/ContainerConstants.swift rename to ora/Core/Constants/ContainerConstants.swift diff --git a/ora/Common/Constants/KeyboardShortcuts.swift b/ora/Core/Constants/KeyboardShortcuts.swift similarity index 100% rename from ora/Common/Constants/KeyboardShortcuts.swift rename to ora/Core/Constants/KeyboardShortcuts.swift diff --git a/ora/Common/Constants/Theme.swift b/ora/Core/Constants/Theme.swift similarity index 100% rename from ora/Common/Constants/Theme.swift rename to ora/Core/Constants/Theme.swift diff --git a/ora/Models/Keyboard.swift b/ora/Core/Domain/Keyboard.swift similarity index 100% rename from ora/Models/Keyboard.swift rename to ora/Core/Domain/Keyboard.swift diff --git a/ora/Common/Extensions/Color+Hex.swift b/ora/Core/Extensions/Color+Hex.swift similarity index 100% rename from ora/Common/Extensions/Color+Hex.swift rename to ora/Core/Extensions/Color+Hex.swift diff --git a/ora/Common/Extensions/EnvironmentValues+Window.swift b/ora/Core/Extensions/EnvironmentValues+Window.swift similarity index 100% rename from ora/Common/Extensions/EnvironmentValues+Window.swift rename to ora/Core/Extensions/EnvironmentValues+Window.swift diff --git a/ora/Common/Extensions/ModelConfiguration+Shared.swift b/ora/Core/Extensions/ModelConfiguration+Shared.swift similarity index 100% rename from ora/Common/Extensions/ModelConfiguration+Shared.swift rename to ora/Core/Extensions/ModelConfiguration+Shared.swift diff --git a/ora/Common/Extensions/NSWindow+Extensions.swift b/ora/Core/Extensions/NSWindow+Extensions.swift similarity index 100% rename from ora/Common/Extensions/NSWindow+Extensions.swift rename to ora/Core/Extensions/NSWindow+Extensions.swift diff --git a/ora/Common/Extensions/View+Modifiers.swift b/ora/Core/Extensions/View+Modifiers.swift similarity index 100% rename from ora/Common/Extensions/View+Modifiers.swift rename to ora/Core/Extensions/View+Modifiers.swift diff --git a/ora/Common/Extensions/View+Shortcuts.swift b/ora/Core/Extensions/View+Shortcuts.swift similarity index 100% rename from ora/Common/Extensions/View+Shortcuts.swift rename to ora/Core/Extensions/View+Shortcuts.swift diff --git a/ora/Common/Representables/BlurEffectView.swift b/ora/Core/Platform/Representables/BlurEffectView.swift similarity index 100% rename from ora/Common/Representables/BlurEffectView.swift rename to ora/Core/Platform/Representables/BlurEffectView.swift diff --git a/ora/Common/Representables/GlobalMouseTrackingArea.swift b/ora/Core/Platform/Representables/GlobalMouseTrackingArea.swift similarity index 100% rename from ora/Common/Representables/GlobalMouseTrackingArea.swift rename to ora/Core/Platform/Representables/GlobalMouseTrackingArea.swift diff --git a/ora/Common/Representables/KeyCaptureView.swift b/ora/Core/Platform/Representables/KeyCaptureView.swift similarity index 100% rename from ora/Common/Representables/KeyCaptureView.swift rename to ora/Core/Platform/Representables/KeyCaptureView.swift diff --git a/ora/Common/Representables/WindowAccessor.swift b/ora/Core/Platform/Representables/WindowAccessor.swift similarity index 100% rename from ora/Common/Representables/WindowAccessor.swift rename to ora/Core/Platform/Representables/WindowAccessor.swift diff --git a/ora/Common/Representables/WindowReader.swift b/ora/Core/Platform/Representables/WindowReader.swift similarity index 100% rename from ora/Common/Representables/WindowReader.swift rename to ora/Core/Platform/Representables/WindowReader.swift diff --git a/ora/Services/AppearanceManager.swift b/ora/Core/Services/App/AppearanceManager.swift similarity index 100% rename from ora/Services/AppearanceManager.swift rename to ora/Core/Services/App/AppearanceManager.swift diff --git a/ora/Services/CustomKeyboardShortcutManager.swift b/ora/Core/Services/App/CustomKeyboardShortcutManager.swift similarity index 100% rename from ora/Services/CustomKeyboardShortcutManager.swift rename to ora/Core/Services/App/CustomKeyboardShortcutManager.swift diff --git a/ora/Services/DefaultBrowserManager.swift b/ora/Core/Services/App/DefaultBrowserManager.swift similarity index 100% rename from ora/Services/DefaultBrowserManager.swift rename to ora/Core/Services/App/DefaultBrowserManager.swift diff --git a/ora/Services/Haptic.swift b/ora/Core/Services/App/Haptic.swift similarity index 100% rename from ora/Services/Haptic.swift rename to ora/Core/Services/App/Haptic.swift diff --git a/ora/Services/KeyModifierListener.swift b/ora/Core/Services/App/KeyModifierListener.swift similarity index 100% rename from ora/Services/KeyModifierListener.swift rename to ora/Core/Services/App/KeyModifierListener.swift diff --git a/ora/Services/UpdateService.swift b/ora/Core/Services/App/UpdateService.swift similarity index 100% rename from ora/Services/UpdateService.swift rename to ora/Core/Services/App/UpdateService.swift diff --git a/ora/Services/FaviconService.swift b/ora/Core/Services/Web/FaviconService.swift similarity index 100% rename from ora/Services/FaviconService.swift rename to ora/Core/Services/Web/FaviconService.swift diff --git a/ora/Common/Utils/ClipboardUtils.swift b/ora/Core/Utilities/ClipboardUtils.swift similarity index 100% rename from ora/Common/Utils/ClipboardUtils.swift rename to ora/Core/Utilities/ClipboardUtils.swift diff --git a/ora/Common/Utils/SettingsStore.swift b/ora/Core/Utilities/SettingsStore.swift similarity index 100% rename from ora/Common/Utils/SettingsStore.swift rename to ora/Core/Utilities/SettingsStore.swift diff --git a/ora/Common/Utils/TabUtils.swift b/ora/Core/Utilities/TabUtils.swift similarity index 100% rename from ora/Common/Utils/TabUtils.swift rename to ora/Core/Utilities/TabUtils.swift diff --git a/ora/Common/Utils/Utils.swift b/ora/Core/Utilities/Utils.swift similarity index 100% rename from ora/Common/Utils/Utils.swift rename to ora/Core/Utilities/Utils.swift diff --git a/ora/Common/Utils/WindowFactory.swift b/ora/Core/Utilities/WindowFactory.swift similarity index 100% rename from ora/Common/Utils/WindowFactory.swift rename to ora/Core/Utilities/WindowFactory.swift diff --git a/ora/UI/CopiedURLOverlay.swift b/ora/Features/Browser/Components/CopiedURLOverlay.swift similarity index 100% rename from ora/UI/CopiedURLOverlay.swift rename to ora/Features/Browser/Components/CopiedURLOverlay.swift diff --git a/ora/UI/LinkPreview.swift b/ora/Features/Browser/Components/LinkPreview.swift similarity index 100% rename from ora/UI/LinkPreview.swift rename to ora/Features/Browser/Components/LinkPreview.swift diff --git a/ora/UI/ShareLinkButton.swift b/ora/Features/Browser/Components/ShareLinkButton.swift similarity index 100% rename from ora/UI/ShareLinkButton.swift rename to ora/Features/Browser/Components/ShareLinkButton.swift diff --git a/ora/UI/WindowControls.swift b/ora/Features/Browser/Components/WindowControls.swift similarity index 100% rename from ora/UI/WindowControls.swift rename to ora/Features/Browser/Components/WindowControls.swift diff --git a/ora/Services/ToolbarManager.swift b/ora/Features/Browser/State/ToolbarManager.swift similarity index 100% rename from ora/Services/ToolbarManager.swift rename to ora/Features/Browser/State/ToolbarManager.swift diff --git a/ora/Modules/URLBar/FloatingURLBar.swift b/ora/Features/Browser/URLBar/FloatingURLBar.swift similarity index 100% rename from ora/Modules/URLBar/FloatingURLBar.swift rename to ora/Features/Browser/URLBar/FloatingURLBar.swift diff --git a/ora/UI/URLBar.swift b/ora/Features/Browser/URLBar/URLBar.swift similarity index 100% rename from ora/UI/URLBar.swift rename to ora/Features/Browser/URLBar/URLBar.swift diff --git a/ora/UI/Buttons/URLBarButton.swift b/ora/Features/Browser/URLBar/URLBarButton.swift similarity index 100% rename from ora/UI/Buttons/URLBarButton.swift rename to ora/Features/Browser/URLBar/URLBarButton.swift diff --git a/ora/Modules/Browser/BrowserContentContainer.swift b/ora/Features/Browser/Views/BrowserContentContainer.swift similarity index 100% rename from ora/Modules/Browser/BrowserContentContainer.swift rename to ora/Features/Browser/Views/BrowserContentContainer.swift diff --git a/ora/Modules/Browser/BrowserSplitView.swift b/ora/Features/Browser/Views/BrowserSplitView.swift similarity index 100% rename from ora/Modules/Browser/BrowserSplitView.swift rename to ora/Features/Browser/Views/BrowserSplitView.swift diff --git a/ora/Modules/Browser/BrowserView.swift b/ora/Features/Browser/Views/BrowserView.swift similarity index 100% rename from ora/Modules/Browser/BrowserView.swift rename to ora/Features/Browser/Views/BrowserView.swift diff --git a/ora/Modules/Browser/BrowserWebContentView.swift b/ora/Features/Browser/Views/BrowserWebContentView.swift similarity index 100% rename from ora/Modules/Browser/BrowserWebContentView.swift rename to ora/Features/Browser/Views/BrowserWebContentView.swift diff --git a/ora/Modules/Browser/FloatingSidebarOverlay.swift b/ora/Features/Browser/Views/FloatingSidebarOverlay.swift similarity index 100% rename from ora/Modules/Browser/FloatingSidebarOverlay.swift rename to ora/Features/Browser/Views/FloatingSidebarOverlay.swift diff --git a/ora/UI/HomeView.swift b/ora/Features/Browser/Views/HomeView.swift similarity index 100% rename from ora/UI/HomeView.swift rename to ora/Features/Browser/Views/HomeView.swift diff --git a/ora/UI/StatusPageView.swift b/ora/Features/Browser/Views/StatusPageView.swift similarity index 100% rename from ora/UI/StatusPageView.swift rename to ora/Features/Browser/Views/StatusPageView.swift diff --git a/ora/Models/Download.swift b/ora/Features/Downloads/Models/Download.swift similarity index 100% rename from ora/Models/Download.swift rename to ora/Features/Downloads/Models/Download.swift diff --git a/ora/Services/DownloadManager.swift b/ora/Features/Downloads/Services/DownloadManager.swift similarity index 100% rename from ora/Services/DownloadManager.swift rename to ora/Features/Downloads/Services/DownloadManager.swift diff --git a/ora/UI/DownloadProgressView.swift b/ora/Features/Downloads/Views/DownloadProgressView.swift similarity index 100% rename from ora/UI/DownloadProgressView.swift rename to ora/Features/Downloads/Views/DownloadProgressView.swift diff --git a/ora/UI/DownloadsListView.swift b/ora/Features/Downloads/Views/DownloadsListView.swift similarity index 100% rename from ora/UI/DownloadsListView.swift rename to ora/Features/Downloads/Views/DownloadsListView.swift diff --git a/ora/Modules/Find/FindController.swift b/ora/Features/FindInPage/FindController.swift similarity index 100% rename from ora/Modules/Find/FindController.swift rename to ora/Features/FindInPage/FindController.swift diff --git a/ora/Modules/Find/FindView.swift b/ora/Features/FindInPage/FindView.swift similarity index 100% rename from ora/Modules/Find/FindView.swift rename to ora/Features/FindInPage/FindView.swift diff --git a/ora/Models/History.swift b/ora/Features/History/Models/History.swift similarity index 100% rename from ora/Models/History.swift rename to ora/Features/History/Models/History.swift diff --git a/ora/Services/HistoryManager.swift b/ora/Features/History/Services/HistoryManager.swift similarity index 100% rename from ora/Services/HistoryManager.swift rename to ora/Features/History/Services/HistoryManager.swift diff --git a/ora/Services/Importer.swift b/ora/Features/Importer/Services/Importer.swift similarity index 100% rename from ora/Services/Importer.swift rename to ora/Features/Importer/Services/Importer.swift diff --git a/ora/Modules/Importer/ImportDataButton.swift b/ora/Features/Importer/Views/ImportDataButton.swift similarity index 100% rename from ora/Modules/Importer/ImportDataButton.swift rename to ora/Features/Importer/Views/ImportDataButton.swift diff --git a/ora/Modules/Launcher/LauncherView.swift b/ora/Features/Launcher/LauncherView.swift similarity index 100% rename from ora/Modules/Launcher/LauncherView.swift rename to ora/Features/Launcher/LauncherView.swift diff --git a/ora/Modules/Launcher/Main/LauncherMain.swift b/ora/Features/Launcher/Main/LauncherMain.swift similarity index 100% rename from ora/Modules/Launcher/Main/LauncherMain.swift rename to ora/Features/Launcher/Main/LauncherMain.swift diff --git a/ora/Modules/Launcher/Main/LauncherTextField.swift b/ora/Features/Launcher/Main/LauncherTextField.swift similarity index 100% rename from ora/Modules/Launcher/Main/LauncherTextField.swift rename to ora/Features/Launcher/Main/LauncherTextField.swift diff --git a/ora/Modules/Launcher/Main/SearchCapsule.swift b/ora/Features/Launcher/Main/SearchCapsule.swift similarity index 100% rename from ora/Modules/Launcher/Main/SearchCapsule.swift rename to ora/Features/Launcher/Main/SearchCapsule.swift diff --git a/ora/Modules/Launcher/Suggestions/LauncherSuggestionItem.swift b/ora/Features/Launcher/Suggestions/LauncherSuggestionItem.swift similarity index 100% rename from ora/Modules/Launcher/Suggestions/LauncherSuggestionItem.swift rename to ora/Features/Launcher/Suggestions/LauncherSuggestionItem.swift diff --git a/ora/Modules/Launcher/Suggestions/LauncherSuggestionsView.swift b/ora/Features/Launcher/Suggestions/LauncherSuggestionsView.swift similarity index 100% rename from ora/Modules/Launcher/Suggestions/LauncherSuggestionsView.swift rename to ora/Features/Launcher/Suggestions/LauncherSuggestionsView.swift diff --git a/ora/Services/MediaController.swift b/ora/Features/Player/State/MediaController.swift similarity index 99% rename from ora/Services/MediaController.swift rename to ora/Features/Player/State/MediaController.swift index 32656dd0..e720ce22 100644 --- a/ora/Services/MediaController.swift +++ b/ora/Features/Player/State/MediaController.swift @@ -123,7 +123,7 @@ final class MediaController: ObservableObject { break } - isVisible = !sessions.isEmpty + isVisible = !visibleSessions.isEmpty } // MARK: - Controls (per session, default to primary) diff --git a/ora/Modules/Player/GlobalMediaPlayer.swift b/ora/Features/Player/Views/GlobalMediaPlayer.swift similarity index 100% rename from ora/Modules/Player/GlobalMediaPlayer.swift rename to ora/Features/Player/Views/GlobalMediaPlayer.swift diff --git a/ora/Modules/Player/PlayerIconButtonStyle.swift b/ora/Features/Player/Views/PlayerIconButtonStyle.swift similarity index 100% rename from ora/Modules/Player/PlayerIconButtonStyle.swift rename to ora/Features/Player/Views/PlayerIconButtonStyle.swift diff --git a/ora/Services/PrivacyService.swift b/ora/Features/Privacy/Services/PrivacyService.swift similarity index 100% rename from ora/Services/PrivacyService.swift rename to ora/Features/Privacy/Services/PrivacyService.swift diff --git a/ora/Models/SearchEngine.swift b/ora/Features/Search/Models/SearchEngine.swift similarity index 100% rename from ora/Models/SearchEngine.swift rename to ora/Features/Search/Models/SearchEngine.swift diff --git a/ora/Services/SearchEngineService.swift b/ora/Features/Search/Services/SearchEngineService.swift similarity index 100% rename from ora/Services/SearchEngineService.swift rename to ora/Features/Search/Services/SearchEngineService.swift diff --git a/ora/Modules/Settings/Sections/AppearanceSelector.swift b/ora/Features/Settings/Sections/AppearanceSelector.swift similarity index 100% rename from ora/Modules/Settings/Sections/AppearanceSelector.swift rename to ora/Features/Settings/Sections/AppearanceSelector.swift diff --git a/ora/Modules/Settings/Sections/GeneralSettingsView.swift b/ora/Features/Settings/Sections/GeneralSettingsView.swift similarity index 100% rename from ora/Modules/Settings/Sections/GeneralSettingsView.swift rename to ora/Features/Settings/Sections/GeneralSettingsView.swift diff --git a/ora/Modules/Settings/Sections/PrivacySecuritySettingsView.swift b/ora/Features/Settings/Sections/PrivacySecuritySettingsView.swift similarity index 100% rename from ora/Modules/Settings/Sections/PrivacySecuritySettingsView.swift rename to ora/Features/Settings/Sections/PrivacySecuritySettingsView.swift diff --git a/ora/Modules/Settings/Sections/SearchEngineSettingsView.swift b/ora/Features/Settings/Sections/SearchEngineSettingsView.swift similarity index 100% rename from ora/Modules/Settings/Sections/SearchEngineSettingsView.swift rename to ora/Features/Settings/Sections/SearchEngineSettingsView.swift diff --git a/ora/Modules/Settings/Sections/SettingsContainer.swift b/ora/Features/Settings/Sections/SettingsContainer.swift similarity index 100% rename from ora/Modules/Settings/Sections/SettingsContainer.swift rename to ora/Features/Settings/Sections/SettingsContainer.swift diff --git a/ora/Modules/Settings/Sections/ShortcutsSettingsView.swift b/ora/Features/Settings/Sections/ShortcutsSettingsView.swift similarity index 100% rename from ora/Modules/Settings/Sections/ShortcutsSettingsView.swift rename to ora/Features/Settings/Sections/ShortcutsSettingsView.swift diff --git a/ora/Modules/Settings/Sections/SpacesSettingsView.swift b/ora/Features/Settings/Sections/SpacesSettingsView.swift similarity index 100% rename from ora/Modules/Settings/Sections/SpacesSettingsView.swift rename to ora/Features/Settings/Sections/SpacesSettingsView.swift diff --git a/ora/Modules/Settings/SettingsContentView.swift b/ora/Features/Settings/SettingsContentView.swift similarity index 100% rename from ora/Modules/Settings/SettingsContentView.swift rename to ora/Features/Settings/SettingsContentView.swift diff --git a/ora/Services/SidebarManager.swift b/ora/Features/Sidebar/State/SidebarManager.swift similarity index 100% rename from ora/Services/SidebarManager.swift rename to ora/Features/Sidebar/State/SidebarManager.swift diff --git a/ora/Modules/Sidebar/BottomOption/ContainerForm.swift b/ora/Features/Sidebar/Views/BottomOption/ContainerForm.swift similarity index 100% rename from ora/Modules/Sidebar/BottomOption/ContainerForm.swift rename to ora/Features/Sidebar/Views/BottomOption/ContainerForm.swift diff --git a/ora/Modules/Sidebar/BottomOption/ContainerSwitcher.swift b/ora/Features/Sidebar/Views/BottomOption/ContainerSwitcher.swift similarity index 100% rename from ora/Modules/Sidebar/BottomOption/ContainerSwitcher.swift rename to ora/Features/Sidebar/Views/BottomOption/ContainerSwitcher.swift diff --git a/ora/Modules/Sidebar/BottomOption/EditContainerModal.swift b/ora/Features/Sidebar/Views/BottomOption/EditContainerModal.swift similarity index 100% rename from ora/Modules/Sidebar/BottomOption/EditContainerModal.swift rename to ora/Features/Sidebar/Views/BottomOption/EditContainerModal.swift diff --git a/ora/Modules/Sidebar/BottomOption/NewContainerButton.swift b/ora/Features/Sidebar/Views/BottomOption/NewContainerButton.swift similarity index 100% rename from ora/Modules/Sidebar/BottomOption/NewContainerButton.swift rename to ora/Features/Sidebar/Views/BottomOption/NewContainerButton.swift diff --git a/ora/Modules/Sidebar/ContainerView.swift b/ora/Features/Sidebar/Views/ContainerView.swift similarity index 100% rename from ora/Modules/Sidebar/ContainerView.swift rename to ora/Features/Sidebar/Views/ContainerView.swift diff --git a/ora/Modules/Sidebar/DownloadsWidget.swift b/ora/Features/Sidebar/Views/DownloadsWidget.swift similarity index 100% rename from ora/Modules/Sidebar/DownloadsWidget.swift rename to ora/Features/Sidebar/Views/DownloadsWidget.swift diff --git a/ora/Modules/Sidebar/FloatingSidebar.swift b/ora/Features/Sidebar/Views/FloatingSidebar.swift similarity index 100% rename from ora/Modules/Sidebar/FloatingSidebar.swift rename to ora/Features/Sidebar/Views/FloatingSidebar.swift diff --git a/ora/Modules/Sidebar/SidebarToolbar.swift b/ora/Features/Sidebar/Views/SidebarToolbar.swift similarity index 100% rename from ora/Modules/Sidebar/SidebarToolbar.swift rename to ora/Features/Sidebar/Views/SidebarToolbar.swift diff --git a/ora/Modules/Sidebar/SidebarURLDisplay.swift b/ora/Features/Sidebar/Views/SidebarURLDisplay.swift similarity index 100% rename from ora/Modules/Sidebar/SidebarURLDisplay.swift rename to ora/Features/Sidebar/Views/SidebarURLDisplay.swift diff --git a/ora/Modules/Sidebar/SidebarView.swift b/ora/Features/Sidebar/Views/SidebarView.swift similarity index 100% rename from ora/Modules/Sidebar/SidebarView.swift rename to ora/Features/Sidebar/Views/SidebarView.swift diff --git a/ora/Modules/Sidebar/TabList/FavTabsList.swift b/ora/Features/Sidebar/Views/TabList/FavTabsList.swift similarity index 100% rename from ora/Modules/Sidebar/TabList/FavTabsList.swift rename to ora/Features/Sidebar/Views/TabList/FavTabsList.swift diff --git a/ora/Modules/Sidebar/TabList/NewTabButton.swift b/ora/Features/Sidebar/Views/TabList/NewTabButton.swift similarity index 100% rename from ora/Modules/Sidebar/TabList/NewTabButton.swift rename to ora/Features/Sidebar/Views/TabList/NewTabButton.swift diff --git a/ora/Modules/Sidebar/TabList/NormalTabsList.swift b/ora/Features/Sidebar/Views/TabList/NormalTabsList.swift similarity index 100% rename from ora/Modules/Sidebar/TabList/NormalTabsList.swift rename to ora/Features/Sidebar/Views/TabList/NormalTabsList.swift diff --git a/ora/Modules/Sidebar/TabList/PinnedTabsList.swift b/ora/Features/Sidebar/Views/TabList/PinnedTabsList.swift similarity index 100% rename from ora/Modules/Sidebar/TabList/PinnedTabsList.swift rename to ora/Features/Sidebar/Views/TabList/PinnedTabsList.swift diff --git a/ora/Services/SectionDropDelegate.swift b/ora/Features/Tabs/DragAndDrop/SectionDropDelegate.swift similarity index 100% rename from ora/Services/SectionDropDelegate.swift rename to ora/Features/Tabs/DragAndDrop/SectionDropDelegate.swift diff --git a/ora/Services/TabDropDelegate.swift b/ora/Features/Tabs/DragAndDrop/TabDropDelegate.swift similarity index 100% rename from ora/Services/TabDropDelegate.swift rename to ora/Features/Tabs/DragAndDrop/TabDropDelegate.swift diff --git a/ora/Models/Folder.swift b/ora/Features/Tabs/Models/Folder.swift similarity index 100% rename from ora/Models/Folder.swift rename to ora/Features/Tabs/Models/Folder.swift diff --git a/ora/Models/Tab.swift b/ora/Features/Tabs/Models/Tab.swift similarity index 100% rename from ora/Models/Tab.swift rename to ora/Features/Tabs/Models/Tab.swift diff --git a/ora/Models/TabContainer.swift b/ora/Features/Tabs/Models/TabContainer.swift similarity index 100% rename from ora/Models/TabContainer.swift rename to ora/Features/Tabs/Models/TabContainer.swift diff --git a/ora/Services/TabManager.swift b/ora/Features/Tabs/State/TabManager.swift similarity index 100% rename from ora/Services/TabManager.swift rename to ora/Features/Tabs/State/TabManager.swift diff --git a/ora/Modules/TabSwitch/FloatingTabSwitcher.swift b/ora/Features/Tabs/Switcher/FloatingTabSwitcher.swift similarity index 100% rename from ora/Modules/TabSwitch/FloatingTabSwitcher.swift rename to ora/Features/Tabs/Switcher/FloatingTabSwitcher.swift diff --git a/ora/UI/EmptyFavTabItem.swift b/ora/Features/Tabs/Views/EmptyFavTabItem.swift similarity index 100% rename from ora/UI/EmptyFavTabItem.swift rename to ora/Features/Tabs/Views/EmptyFavTabItem.swift diff --git a/ora/UI/EmptyPinnedTabs.swift b/ora/Features/Tabs/Views/EmptyPinnedTabs.swift similarity index 100% rename from ora/UI/EmptyPinnedTabs.swift rename to ora/Features/Tabs/Views/EmptyPinnedTabs.swift diff --git a/ora/UI/FavTabItem.swift b/ora/Features/Tabs/Views/FavTabItem.swift similarity index 100% rename from ora/UI/FavTabItem.swift rename to ora/Features/Tabs/Views/FavTabItem.swift diff --git a/ora/UI/TabItem.swift b/ora/Features/Tabs/Views/TabItem.swift similarity index 100% rename from ora/UI/TabItem.swift rename to ora/Features/Tabs/Views/TabItem.swift diff --git a/ora/Services/TabScriptHandler.swift b/ora/Features/Tabs/Web/TabScriptHandler.swift similarity index 100% rename from ora/Services/TabScriptHandler.swift rename to ora/Features/Tabs/Web/TabScriptHandler.swift diff --git a/ora/UI/WebView.swift b/ora/Features/Tabs/Web/WebView.swift similarity index 100% rename from ora/UI/WebView.swift rename to ora/Features/Tabs/Web/WebView.swift diff --git a/ora/Services/WebViewNavigationDelegate.swift b/ora/Features/Tabs/Web/WebViewNavigationDelegate.swift similarity index 96% rename from ora/Services/WebViewNavigationDelegate.swift rename to ora/Features/Tabs/Web/WebViewNavigationDelegate.swift index 43a63ba9..820c4381 100644 --- a/ora/Services/WebViewNavigationDelegate.swift +++ b/ora/Features/Tabs/Web/WebViewNavigationDelegate.swift @@ -118,22 +118,35 @@ let navigationScript = """ observer.observe(document.body, { childList: true, subtree: true }); } + function isAudible(el) { + return !el.muted && el.volume > 0; + } + function attach(el) { if (!el || el.__oraAttached) return; el.__oraAttached = true; const update = () => post(stateFrom(el)); - el.addEventListener('play', ()=>{ + el.addEventListener('play', () => { + if (isAudible(el)) { + el.__oraWasPlayed = true; + } update(); - el.__oraWasPlayed = true; }); el.addEventListener('pause', update); el.addEventListener('ended', () => post({ type: 'ended' })); - el.addEventListener('volumechange', () => - post({ type: 'volume', volume: el.muted ? 0 : el.volume }) - ); - // If already playing, announce + el.addEventListener('volumechange', () => { + // Mark as played when becoming audible while playing + if (!el.paused && isAudible(el) && !el.__oraWasPlayed) { + el.__oraWasPlayed = true; + update(); + } + post({ type: 'volume', volume: el.muted ? 0 : el.volume }); + }); + // If already playing, only mark as played if audible if (!el.paused) { - el.__oraWasPlayed = true; + if (isAudible(el)) { + el.__oraWasPlayed = true; + } update(); } watchRemoval(el, () => post({ type: 'removed' })); diff --git a/ora/Info.plist b/ora/Info/Info.plist similarity index 100% rename from ora/Info.plist rename to ora/Info/Info.plist diff --git a/ora/ora-debug.entitlements b/ora/Info/ora-debug.entitlements similarity index 100% rename from ora/ora-debug.entitlements rename to ora/Info/ora-debug.entitlements diff --git a/ora/ora.entitlements b/ora/Info/ora.entitlements similarity index 100% rename from ora/ora.entitlements rename to ora/Info/ora.entitlements diff --git a/ora/Resources/mark.js b/ora/Resources/WebScripts/mark.js similarity index 100% rename from ora/Resources/mark.js rename to ora/Resources/WebScripts/mark.js diff --git a/ora/UI/Buttons/OraButton.swift b/ora/Shared/Components/Buttons/OraButton.swift similarity index 100% rename from ora/UI/Buttons/OraButton.swift rename to ora/Shared/Components/Buttons/OraButton.swift diff --git a/ora/UI/Dialog/DialogManager.swift b/ora/Shared/Components/Dialog/DialogManager.swift similarity index 100% rename from ora/UI/Dialog/DialogManager.swift rename to ora/Shared/Components/Dialog/DialogManager.swift diff --git a/ora/UI/Dialog/DialogModel.swift b/ora/Shared/Components/Dialog/DialogModel.swift similarity index 100% rename from ora/UI/Dialog/DialogModel.swift rename to ora/Shared/Components/Dialog/DialogModel.swift diff --git a/ora/UI/Dialog/DialogView.swift b/ora/Shared/Components/Dialog/DialogView.swift similarity index 100% rename from ora/UI/Dialog/DialogView.swift rename to ora/Shared/Components/Dialog/DialogView.swift diff --git a/ora/UI/Icons/OraIcon.swift b/ora/Shared/Components/Icons/OraIcon.swift similarity index 100% rename from ora/UI/Icons/OraIcon.swift rename to ora/Shared/Components/Icons/OraIcon.swift diff --git a/ora/UI/Icons/SpaceCardsDeleteIcon.swift b/ora/Shared/Components/Icons/SpaceCardsDeleteIcon.swift similarity index 100% rename from ora/UI/Icons/SpaceCardsDeleteIcon.swift rename to ora/Shared/Components/Icons/SpaceCardsDeleteIcon.swift diff --git a/ora/UI/Icons/SpaceCardsEditIcon.swift b/ora/Shared/Components/Icons/SpaceCardsEditIcon.swift similarity index 100% rename from ora/UI/Icons/SpaceCardsEditIcon.swift rename to ora/Shared/Components/Icons/SpaceCardsEditIcon.swift diff --git a/ora/UI/Icons/SpaceCardsIcon.swift b/ora/Shared/Components/Icons/SpaceCardsIcon.swift similarity index 100% rename from ora/UI/Icons/SpaceCardsIcon.swift rename to ora/Shared/Components/Icons/SpaceCardsIcon.swift diff --git a/ora/UI/Inputs/OraInput.swift b/ora/Shared/Components/Inputs/OraInput.swift similarity index 100% rename from ora/UI/Inputs/OraInput.swift rename to ora/Shared/Components/Inputs/OraInput.swift diff --git a/ora/UI/Toast/ToastManager.swift b/ora/Shared/Components/Toast/ToastManager.swift similarity index 100% rename from ora/UI/Toast/ToastManager.swift rename to ora/Shared/Components/Toast/ToastManager.swift diff --git a/ora/UI/Toast/ToastModel.swift b/ora/Shared/Components/Toast/ToastModel.swift similarity index 100% rename from ora/UI/Toast/ToastModel.swift rename to ora/Shared/Components/Toast/ToastModel.swift diff --git a/ora/UI/Toast/ToastView.swift b/ora/Shared/Components/Toast/ToastView.swift similarity index 100% rename from ora/UI/Toast/ToastView.swift rename to ora/Shared/Components/Toast/ToastView.swift diff --git a/ora/Modules/EmojiPicker/EmojiPickerModel.swift b/ora/Shared/EmojiPicker/EmojiPickerModel.swift similarity index 100% rename from ora/Modules/EmojiPicker/EmojiPickerModel.swift rename to ora/Shared/EmojiPicker/EmojiPickerModel.swift diff --git a/ora/Modules/EmojiPicker/EmojiPickerView.swift b/ora/Shared/EmojiPicker/EmojiPickerView.swift similarity index 100% rename from ora/Modules/EmojiPicker/EmojiPickerView.swift rename to ora/Shared/EmojiPicker/EmojiPickerView.swift diff --git a/ora/Modules/EmojiPicker/emoji-set.json b/ora/Shared/EmojiPicker/emoji-set.json similarity index 100% rename from ora/Modules/EmojiPicker/emoji-set.json rename to ora/Shared/EmojiPicker/emoji-set.json diff --git a/ora/UI/NSPageView.swift b/ora/Shared/Layout/NSPageView.swift similarity index 100% rename from ora/UI/NSPageView.swift rename to ora/Shared/Layout/NSPageView.swift diff --git a/ora/Modules/SplitView/CursorModifier.swift b/ora/Shared/Layout/SplitView/CursorModifier.swift similarity index 100% rename from ora/Modules/SplitView/CursorModifier.swift rename to ora/Shared/Layout/SplitView/CursorModifier.swift diff --git a/ora/Modules/SplitView/HSplit.swift b/ora/Shared/Layout/SplitView/HSplit.swift similarity index 100% rename from ora/Modules/SplitView/HSplit.swift rename to ora/Shared/Layout/SplitView/HSplit.swift diff --git a/ora/Modules/SplitView/Split.swift b/ora/Shared/Layout/SplitView/Split.swift similarity index 100% rename from ora/Modules/SplitView/Split.swift rename to ora/Shared/Layout/SplitView/Split.swift diff --git a/ora/Modules/SplitView/SplitConstraints.swift b/ora/Shared/Layout/SplitView/SplitConstraints.swift similarity index 100% rename from ora/Modules/SplitView/SplitConstraints.swift rename to ora/Shared/Layout/SplitView/SplitConstraints.swift diff --git a/ora/Modules/SplitView/SplitEnums.swift b/ora/Shared/Layout/SplitView/SplitEnums.swift similarity index 100% rename from ora/Modules/SplitView/SplitEnums.swift rename to ora/Shared/Layout/SplitView/SplitEnums.swift diff --git a/ora/Modules/SplitView/SplitHolders.swift b/ora/Shared/Layout/SplitView/SplitHolders.swift similarity index 100% rename from ora/Modules/SplitView/SplitHolders.swift rename to ora/Shared/Layout/SplitView/SplitHolders.swift diff --git a/ora/Modules/SplitView/SplitModifiers.swift b/ora/Shared/Layout/SplitView/SplitModifiers.swift similarity index 100% rename from ora/Modules/SplitView/SplitModifiers.swift rename to ora/Shared/Layout/SplitView/SplitModifiers.swift diff --git a/ora/Modules/SplitView/SplitStyling.swift b/ora/Shared/Layout/SplitView/SplitStyling.swift similarity index 100% rename from ora/Modules/SplitView/SplitStyling.swift rename to ora/Shared/Layout/SplitView/SplitStyling.swift diff --git a/ora/Modules/SplitView/Splitter+Extensions.swift b/ora/Shared/Layout/SplitView/Splitter+Extensions.swift similarity index 100% rename from ora/Modules/SplitView/Splitter+Extensions.swift rename to ora/Shared/Layout/SplitView/Splitter+Extensions.swift diff --git a/ora/Modules/SplitView/Splitter.swift b/ora/Shared/Layout/SplitView/Splitter.swift similarity index 100% rename from ora/Modules/SplitView/Splitter.swift rename to ora/Shared/Layout/SplitView/Splitter.swift diff --git a/ora/Modules/SplitView/VSplit.swift b/ora/Shared/Layout/SplitView/VSplit.swift similarity index 100% rename from ora/Modules/SplitView/VSplit.swift rename to ora/Shared/Layout/SplitView/VSplit.swift diff --git a/ora/UI/VerticalScrollView.swift b/ora/Shared/Layout/VerticalScrollView.swift similarity index 100% rename from ora/UI/VerticalScrollView.swift rename to ora/Shared/Layout/VerticalScrollView.swift diff --git a/ora/UI/Modifiers/GradientAnimatingBorder.swift b/ora/Shared/Modifiers/GradientAnimatingBorder.swift similarity index 100% rename from ora/UI/Modifiers/GradientAnimatingBorder.swift rename to ora/Shared/Modifiers/GradientAnimatingBorder.swift diff --git a/ora/Common/Shapes/ConditionallyConcentricRectangle.swift b/ora/Shared/Shapes/ConditionallyConcentricRectangle.swift similarity index 100% rename from ora/Common/Shapes/ConditionallyConcentricRectangle.swift rename to ora/Shared/Shapes/ConditionallyConcentricRectangle.swift diff --git a/project.yml b/project.yml index 5dfc9cb6..c39acfe1 100644 --- a/project.yml +++ b/project.yml @@ -21,9 +21,9 @@ targets: sources: - path: ora excludes: - - "Icons/**" + - "Assets/Icons/**" resources: - - path: ora/Modules/EmojiPicker/emoji-set.json + - path: ora/Shared/EmojiPicker/emoji-set.json - path: ora/Resources optional: true dependencies: @@ -34,14 +34,14 @@ targets: preBuildScripts: - name: "Copy Icon Bundle" inputFiles: - - "$(SRCROOT)/ora/Icons/OraIcon.icon" - - "$(SRCROOT)/ora/Icons/OraIconDev.icon" + - "$(SRCROOT)/ora/Assets/Icons/OraIcon.icon" + - "$(SRCROOT)/ora/Assets/Icons/OraIconDev.icon" outputFiles: - "$(BUILT_PRODUCTS_DIR)/$(PRODUCT_NAME).app/Contents/Resources/OraIcon.icon" - "$(BUILT_PRODUCTS_DIR)/$(PRODUCT_NAME).app/Contents/Resources/OraIconDev.icon" script: | - ICON_SRC_DEV="$SRCROOT/ora/Icons/OraIconDev.icon" - ICON_SRC_RELEASE="$SRCROOT/ora/Icons/OraIcon.icon" + ICON_SRC_DEV="$SRCROOT/ora/Assets/Icons/OraIconDev.icon" + ICON_SRC_RELEASE="$SRCROOT/ora/Assets/Icons/OraIcon.icon" ICON_DST="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Resources/" if [ "$CONFIGURATION" = "Debug" ]; then echo "Using OraIconDev.icon for Debug build" @@ -52,7 +52,7 @@ targets: fi info: - path: ora/Info.plist + path: ora/Info/Info.plist properties: SUFeedURL: "https://the-ora.github.io/browser/appcast.xml" SUPublicEDKey: "Ozj+rezzbJAD76RfajtfQ7rFojJbpFSCl/0DcFSBCTI=" @@ -86,7 +86,7 @@ targets: LSApplicationCategoryType: public.app-category.web-browser entitlements: - path: ora/ora.entitlements + path: ora/Info/ora.entitlements properties: com.apple.security.app-sandbox: true com.apple.security.assets.movies.read-only: true @@ -115,12 +115,12 @@ targets: configs: Debug: ASSETCATALOG_COMPILER_APPICON_NAME: OraIconDev - CODE_SIGN_ENTITLEMENTS: ora/ora-debug.entitlements + CODE_SIGN_ENTITLEMENTS: ora/Info/ora-debug.entitlements EMIT_FRONTEND_COMMAND_LINES: YES OTHER_LDFLAGS: "-Xlinker -interposable" Release: ASSETCATALOG_COMPILER_APPICON_NAME: OraIcon - CODE_SIGN_ENTITLEMENTS: ora/ora.entitlements + CODE_SIGN_ENTITLEMENTS: ora/Info/ora.entitlements schemes: ora: