From 6acf1697051b63c876077a863c6811882953d06a Mon Sep 17 00:00:00 2001 From: "tembo[bot]" <208362400+tembo[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 08:35:43 +0000 Subject: [PATCH 1/4] fix(media): prevent mini player from triggering on silent or muted media Co-authored-by: Yonathan --- ora/Services/MediaController.swift | 2 +- ora/Services/WebViewNavigationDelegate.swift | 27 +++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/ora/Services/MediaController.swift b/ora/Services/MediaController.swift index 32656dd0..e720ce22 100644 --- a/ora/Services/MediaController.swift +++ b/ora/Services/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/Services/WebViewNavigationDelegate.swift b/ora/Services/WebViewNavigationDelegate.swift index 43a63ba9..820c4381 100644 --- a/ora/Services/WebViewNavigationDelegate.swift +++ b/ora/Services/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' })); From a088685b49b13ed79b47a9ca73fd81ece4073cdd Mon Sep 17 00:00:00 2001 From: Yonathan Dejene Date: Sat, 7 Mar 2026 13:34:25 +0300 Subject: [PATCH 2/4] refactor: reorganize app source tree (#216) --- ora/{oraApp.swift => App/OraApp.swift} | 0 ora/{ => App}/OraCommands.swift | 0 ora/{ => App}/OraRoot.swift | 0 .../AccentColor.colorset/Contents.json | 0 .../Catalogs}/Assets.xcassets/Contents.json | 0 .../OraColorLogo.imageset/Contents.json | 0 .../ora-color-logo 1.png | Bin .../OraColorLogo.imageset/ora-color-logo.png | Bin .../OraIcon.appiconset/Contents.json | 0 .../OraIcon.appiconset/Icon-1024.png | Bin .../OraIcon.appiconset/Icon-128.png | Bin .../OraIcon.appiconset/Icon-256 1.png | Bin .../OraIcon.appiconset/Icon-256.png | Bin .../OraIcon.appiconset/Icon-32 1.png | Bin .../OraIcon.appiconset/Icon-32.png | Bin .../OraIcon.appiconset/Icon-512 1.png | Bin .../OraIcon.appiconset/Icon-512.png | Bin .../OraIcon.appiconset/Icon-64.png | Bin .../ora-white-macos-icon.png | Bin .../OraIconDev.appiconset/Contents.json | 0 .../OraIconDev.appiconset/Icon-1024.png | Bin .../OraIconDev.appiconset/Icon-128.png | Bin .../OraIconDev.appiconset/Icon-256 1.png | Bin .../OraIconDev.appiconset/Icon-256.png | Bin .../OraIconDev.appiconset/Icon-32 1.png | Bin .../OraIconDev.appiconset/Icon-32.png | Bin .../OraIconDev.appiconset/Icon-512 1.png | Bin .../OraIconDev.appiconset/Icon-512.png | Bin .../OraIconDev.appiconset/Icon-64.png | Bin .../OraIconDev.appiconset/Icon.png | Bin .../appearance-dark.imageset/Contents.json | 0 .../appearance-dark.imageset/dark.png | Bin .../appearance-light.imageset/Contents.json | 0 .../appearance-light.imageset/light.png | Bin .../appearance-system.imageset/Contents.json | 0 .../Ora Browser System.png | Bin .../ora-logo-outline.imageset/Contents.json | 0 .../Ora Browser Logo (1).svg | 0 .../ora-logo-plain.imageset/Contents.json | 0 .../Ora Browser Logo.svg | 0 .../Catalogs}/Capsule.xcassets/Contents.json | 0 .../Contents.json | 0 .../grok-black-capsule-logo.svg | 0 .../grok-white-capsule-logo.svg | 0 .../grok-capsule-logo.imageset/Contents.json | 0 .../grok-black-capsule-logo.svg | 0 .../grok-white-capsule-logo.svg | 0 .../Contents.json | 0 .../opeai-black-capsule-logo.svg | 0 .../openai-white-capsule-logo.svg | 0 .../Contents.json | 0 .../opeai-black-capsule-logo.svg | 0 .../openai-white-capsule-logo 1.svg | 0 .../Contents.json | 0 .../perplexity-capsule-logo 1.png | Bin .../perplexity-capsule-logo.png | Bin .../Contents.json | 0 .../reddit-capsule-logo 1.svg | 0 .../reddit-capsule-logo.svg | 0 .../Contents.json | 0 .../t3chat-capsule-logo 1.png | Bin .../t3chat-capsule-logo.png | Bin .../WindowControls.xcassets/Contents.json | 0 .../close-hover.imageset/Close Hover Icon.svg | 0 .../close-hover.imageset/Contents.json | 0 .../close-normal.imageset/Contents.json | 0 .../close-normal.imageset/close-normal.svg | 0 .../maximize-hover.imageset/Contents.json | 0 .../maximize-hover.svg | 0 .../maximize-normal.imageset/Contents.json | 0 .../maximize-normal.svg | 0 .../minimize-hover.imageset/Contents.json | 0 .../minimize-hover.svg | 0 .../minimize-normal.imageset/Contents.json | 0 .../minimize-normal.svg | 0 .../no-focus.imageset/Contents.json | 0 .../no-focus.imageset/no-focus.svg | 0 .../Icons/OraIcon.icon/Assets/OraLogo.svg | 0 .../Icons/OraIcon.icon/Assets/momento.svg | 0 ora/{ => Assets}/Icons/OraIcon.icon/icon.json | 0 .../Icons/OraIconDev.icon/Assets/Grid.png | Bin .../Icons/OraIconDev.icon/Assets/OraLogo.svg | 0 .../Icons/OraIconDev.icon/Assets/momento.svg | 0 .../Icons/OraIconDev.icon/icon.json | 0 .../Constants/AppEvents.swift | 0 .../Constants/ContainerConstants.swift | 0 .../Constants/KeyboardShortcuts.swift | 0 ora/{Common => Core}/Constants/Theme.swift | 0 ora/{Models => Core/Domain}/Keyboard.swift | 0 .../Extensions/Color+Hex.swift | 0 .../Extensions/EnvironmentValues+Window.swift | 0 .../ModelConfiguration+Shared.swift | 0 .../Extensions/NSWindow+Extensions.swift | 0 .../Extensions/View+Modifiers.swift | 0 .../Extensions/View+Shortcuts.swift | 0 .../Representables/BlurEffectView.swift | 0 .../GlobalMouseTrackingArea.swift | 0 .../Representables/KeyCaptureView.swift | 0 .../Representables/WindowAccessor.swift | 0 .../Representables/WindowReader.swift | 0 .../Services/App}/AppearanceManager.swift | 0 .../App}/CustomKeyboardShortcutManager.swift | 0 .../Services/App}/DefaultBrowserManager.swift | 0 .../Services/App}/Haptic.swift | 0 .../Services/App}/KeyModifierListener.swift | 0 .../Services/App}/UpdateService.swift | 0 .../Services/Web}/FaviconService.swift | 0 .../Utilities}/ClipboardUtils.swift | 0 .../Utilities}/SettingsStore.swift | 0 .../Utils => Core/Utilities}/TabUtils.swift | 0 .../Utils => Core/Utilities}/Utils.swift | 0 .../Utilities}/WindowFactory.swift | 0 .../Components}/CopiedURLOverlay.swift | 0 .../Browser/Components}/LinkPreview.swift | 0 .../Browser/Components}/ShareLinkButton.swift | 0 .../Browser/Components}/WindowControls.swift | 0 .../Browser/State}/ToolbarManager.swift | 0 .../Browser}/URLBar/FloatingURLBar.swift | 0 .../Browser/URLBar}/URLBar.swift | 0 .../Browser/URLBar}/URLBarButton.swift | 0 .../Views}/BrowserContentContainer.swift | 0 .../Browser/Views}/BrowserSplitView.swift | 0 .../Browser/Views}/BrowserView.swift | 0 .../Views}/BrowserWebContentView.swift | 0 .../Views}/FloatingSidebarOverlay.swift | 0 .../Browser/Views}/HomeView.swift | 0 .../Browser/Views}/StatusPageView.swift | 0 .../Downloads}/Models/Download.swift | 0 .../Downloads}/Services/DownloadManager.swift | 0 .../Views}/DownloadProgressView.swift | 0 .../Downloads/Views}/DownloadsListView.swift | 0 .../FindInPage}/FindController.swift | 0 .../FindInPage}/FindView.swift | 0 .../History}/Models/History.swift | 0 .../History}/Services/HistoryManager.swift | 0 .../Importer}/Services/Importer.swift | 0 .../Importer/Views}/ImportDataButton.swift | 0 .../Launcher/LauncherView.swift | 0 .../Launcher/Main/LauncherMain.swift | 0 .../Launcher/Main/LauncherTextField.swift | 0 .../Launcher/Main/SearchCapsule.swift | 0 .../Suggestions/LauncherSuggestionItem.swift | 0 .../Suggestions/LauncherSuggestionsView.swift | 0 .../Player/State}/MediaController.swift | 0 .../Player/Views}/GlobalMediaPlayer.swift | 0 .../Player/Views}/PlayerIconButtonStyle.swift | 0 .../Privacy}/Services/PrivacyService.swift | 0 .../Search}/Models/SearchEngine.swift | 0 .../Services/SearchEngineService.swift | 0 .../Sections/AppearanceSelector.swift | 0 .../Sections/GeneralSettingsView.swift | 0 .../PrivacySecuritySettingsView.swift | 0 .../Sections/SearchEngineSettingsView.swift | 0 .../Settings/Sections/SettingsContainer.swift | 0 .../Sections/ShortcutsSettingsView.swift | 0 .../Sections/SpacesSettingsView.swift | 0 .../Settings/SettingsContentView.swift | 0 .../Sidebar/State}/SidebarManager.swift | 0 .../Views}/BottomOption/ContainerForm.swift | 0 .../BottomOption/ContainerSwitcher.swift | 0 .../BottomOption/EditContainerModal.swift | 0 .../BottomOption/NewContainerButton.swift | 0 .../Sidebar/Views}/ContainerView.swift | 0 .../Sidebar/Views}/DownloadsWidget.swift | 0 .../Sidebar/Views}/FloatingSidebar.swift | 0 .../Sidebar/Views}/SidebarToolbar.swift | 0 .../Sidebar/Views}/SidebarURLDisplay.swift | 0 .../Sidebar/Views}/SidebarView.swift | 0 .../Sidebar/Views}/TabList/FavTabsList.swift | 0 .../Sidebar/Views}/TabList/NewTabButton.swift | 0 .../Views}/TabList/NormalTabsList.swift | 0 .../Views}/TabList/PinnedTabsList.swift | 0 .../DragAndDrop}/SectionDropDelegate.swift | 0 .../Tabs/DragAndDrop}/TabDropDelegate.swift | 0 ora/{ => Features/Tabs}/Models/Folder.swift | 0 ora/{ => Features/Tabs}/Models/Tab.swift | 0 .../Tabs}/Models/TabContainer.swift | 0 .../Tabs/State}/TabManager.swift | 0 .../Tabs/Switcher}/FloatingTabSwitcher.swift | 0 .../Tabs/Views}/EmptyFavTabItem.swift | 0 .../Tabs/Views}/EmptyPinnedTabs.swift | 0 .../Tabs/Views}/FavTabItem.swift | 0 ora/{UI => Features/Tabs/Views}/TabItem.swift | 0 .../Tabs/Web}/TabScriptHandler.swift | 0 ora/{UI => Features/Tabs/Web}/WebView.swift | 0 .../Tabs/Web}/WebViewNavigationDelegate.swift | 0 ora/{ => Info}/Info.plist | 0 ora/{ => Info}/ora-debug.entitlements | 0 ora/{ => Info}/ora.entitlements | 0 ora/Resources/{ => WebScripts}/mark.js | 0 .../Components}/Buttons/OraButton.swift | 0 .../Components}/Dialog/DialogManager.swift | 0 .../Components}/Dialog/DialogModel.swift | 0 .../Components}/Dialog/DialogView.swift | 0 .../Components}/Icons/OraIcon.swift | 0 .../Icons/SpaceCardsDeleteIcon.swift | 0 .../Icons/SpaceCardsEditIcon.swift | 0 .../Components}/Icons/SpaceCardsIcon.swift | 0 .../Components}/Inputs/OraInput.swift | 0 .../Components}/Toast/ToastManager.swift | 0 .../Components}/Toast/ToastModel.swift | 0 .../Components}/Toast/ToastView.swift | 0 .../EmojiPicker/EmojiPickerModel.swift | 0 .../EmojiPicker/EmojiPickerView.swift | 0 .../EmojiPicker/emoji-set.json | 0 ora/{UI => Shared/Layout}/NSPageView.swift | 0 .../Layout}/SplitView/CursorModifier.swift | 0 .../Layout}/SplitView/HSplit.swift | 0 .../Layout}/SplitView/Split.swift | 0 .../Layout}/SplitView/SplitConstraints.swift | 0 .../Layout}/SplitView/SplitEnums.swift | 0 .../Layout}/SplitView/SplitHolders.swift | 0 .../Layout}/SplitView/SplitModifiers.swift | 0 .../Layout}/SplitView/SplitStyling.swift | 0 .../SplitView/Splitter+Extensions.swift | 0 .../Layout}/SplitView/Splitter.swift | 0 .../Layout}/SplitView/VSplit.swift | 0 .../Layout}/VerticalScrollView.swift | 0 .../Modifiers/GradientAnimatingBorder.swift | 0 .../ConditionallyConcentricRectangle.swift | 0 project.yml | 20 +++++++++--------- 221 files changed, 10 insertions(+), 10 deletions(-) rename ora/{oraApp.swift => App/OraApp.swift} (100%) rename ora/{ => App}/OraCommands.swift (100%) rename ora/{ => App}/OraRoot.swift (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraColorLogo.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraColorLogo.imageset/ora-color-logo 1.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraColorLogo.imageset/ora-color-logo.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-1024.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-128.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-256 1.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-256.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-32 1.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-32.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-512 1.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-512.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/Icon-64.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIcon.appiconset/ora-white-macos-icon.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-1024.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-128.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-256 1.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-256.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-32 1.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-32.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-512 1.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-512.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon-64.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/OraIconDev.appiconset/Icon.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/appearance-dark.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/appearance-dark.imageset/dark.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/appearance-light.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/appearance-light.imageset/light.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/appearance-system.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/appearance-system.imageset/Ora Browser System.png (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/ora-logo-outline.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/ora-logo-outline.imageset/Ora Browser Logo (1).svg (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/ora-logo-plain.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Assets.xcassets/ora-logo-plain.imageset/Ora Browser Logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/grok-capsule-logo-inverted.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-black-capsule-logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/grok-capsule-logo-inverted.imageset/grok-white-capsule-logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/grok-capsule-logo.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/grok-capsule-logo.imageset/grok-black-capsule-logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/grok-capsule-logo.imageset/grok-white-capsule-logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/openai-capsule-logo-inverted.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/openai-capsule-logo-inverted.imageset/opeai-black-capsule-logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/openai-capsule-logo-inverted.imageset/openai-white-capsule-logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/openai-capsule-logo.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/openai-capsule-logo.imageset/opeai-black-capsule-logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/openai-capsule-logo.imageset/openai-white-capsule-logo 1.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/perplexity-capsule-logo.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo 1.png (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/perplexity-capsule-logo.imageset/perplexity-capsule-logo.png (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/reddit-capsule-logo.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo 1.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/reddit-capsule-logo.imageset/reddit-capsule-logo.svg (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/t3chat-capsule-logo.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo 1.png (100%) rename ora/{ => Assets/Catalogs}/Capsule.xcassets/t3chat-capsule-logo.imageset/t3chat-capsule-logo.png (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/Contents.json (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/close-hover.imageset/Close Hover Icon.svg (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/close-hover.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/close-normal.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/close-normal.imageset/close-normal.svg (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/maximize-hover.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/maximize-hover.imageset/maximize-hover.svg (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/maximize-normal.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/maximize-normal.imageset/maximize-normal.svg (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/minimize-hover.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/minimize-hover.imageset/minimize-hover.svg (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/minimize-normal.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/minimize-normal.imageset/minimize-normal.svg (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/no-focus.imageset/Contents.json (100%) rename ora/{ => Assets/Catalogs}/WindowControls.xcassets/no-focus.imageset/no-focus.svg (100%) rename ora/{ => Assets}/Icons/OraIcon.icon/Assets/OraLogo.svg (100%) rename ora/{ => Assets}/Icons/OraIcon.icon/Assets/momento.svg (100%) rename ora/{ => Assets}/Icons/OraIcon.icon/icon.json (100%) rename ora/{ => Assets}/Icons/OraIconDev.icon/Assets/Grid.png (100%) rename ora/{ => Assets}/Icons/OraIconDev.icon/Assets/OraLogo.svg (100%) rename ora/{ => Assets}/Icons/OraIconDev.icon/Assets/momento.svg (100%) rename ora/{ => Assets}/Icons/OraIconDev.icon/icon.json (100%) rename ora/{Common => Core}/Constants/AppEvents.swift (100%) rename ora/{Common => Core}/Constants/ContainerConstants.swift (100%) rename ora/{Common => Core}/Constants/KeyboardShortcuts.swift (100%) rename ora/{Common => Core}/Constants/Theme.swift (100%) rename ora/{Models => Core/Domain}/Keyboard.swift (100%) rename ora/{Common => Core}/Extensions/Color+Hex.swift (100%) rename ora/{Common => Core}/Extensions/EnvironmentValues+Window.swift (100%) rename ora/{Common => Core}/Extensions/ModelConfiguration+Shared.swift (100%) rename ora/{Common => Core}/Extensions/NSWindow+Extensions.swift (100%) rename ora/{Common => Core}/Extensions/View+Modifiers.swift (100%) rename ora/{Common => Core}/Extensions/View+Shortcuts.swift (100%) rename ora/{Common => Core/Platform}/Representables/BlurEffectView.swift (100%) rename ora/{Common => Core/Platform}/Representables/GlobalMouseTrackingArea.swift (100%) rename ora/{Common => Core/Platform}/Representables/KeyCaptureView.swift (100%) rename ora/{Common => Core/Platform}/Representables/WindowAccessor.swift (100%) rename ora/{Common => Core/Platform}/Representables/WindowReader.swift (100%) rename ora/{Services => Core/Services/App}/AppearanceManager.swift (100%) rename ora/{Services => Core/Services/App}/CustomKeyboardShortcutManager.swift (100%) rename ora/{Services => Core/Services/App}/DefaultBrowserManager.swift (100%) rename ora/{Services => Core/Services/App}/Haptic.swift (100%) rename ora/{Services => Core/Services/App}/KeyModifierListener.swift (100%) rename ora/{Services => Core/Services/App}/UpdateService.swift (100%) rename ora/{Services => Core/Services/Web}/FaviconService.swift (100%) rename ora/{Common/Utils => Core/Utilities}/ClipboardUtils.swift (100%) rename ora/{Common/Utils => Core/Utilities}/SettingsStore.swift (100%) rename ora/{Common/Utils => Core/Utilities}/TabUtils.swift (100%) rename ora/{Common/Utils => Core/Utilities}/Utils.swift (100%) rename ora/{Common/Utils => Core/Utilities}/WindowFactory.swift (100%) rename ora/{UI => Features/Browser/Components}/CopiedURLOverlay.swift (100%) rename ora/{UI => Features/Browser/Components}/LinkPreview.swift (100%) rename ora/{UI => Features/Browser/Components}/ShareLinkButton.swift (100%) rename ora/{UI => Features/Browser/Components}/WindowControls.swift (100%) rename ora/{Services => Features/Browser/State}/ToolbarManager.swift (100%) rename ora/{Modules => Features/Browser}/URLBar/FloatingURLBar.swift (100%) rename ora/{UI => Features/Browser/URLBar}/URLBar.swift (100%) rename ora/{UI/Buttons => Features/Browser/URLBar}/URLBarButton.swift (100%) rename ora/{Modules/Browser => Features/Browser/Views}/BrowserContentContainer.swift (100%) rename ora/{Modules/Browser => Features/Browser/Views}/BrowserSplitView.swift (100%) rename ora/{Modules/Browser => Features/Browser/Views}/BrowserView.swift (100%) rename ora/{Modules/Browser => Features/Browser/Views}/BrowserWebContentView.swift (100%) rename ora/{Modules/Browser => Features/Browser/Views}/FloatingSidebarOverlay.swift (100%) rename ora/{UI => Features/Browser/Views}/HomeView.swift (100%) rename ora/{UI => Features/Browser/Views}/StatusPageView.swift (100%) rename ora/{ => Features/Downloads}/Models/Download.swift (100%) rename ora/{ => Features/Downloads}/Services/DownloadManager.swift (100%) rename ora/{UI => Features/Downloads/Views}/DownloadProgressView.swift (100%) rename ora/{UI => Features/Downloads/Views}/DownloadsListView.swift (100%) rename ora/{Modules/Find => Features/FindInPage}/FindController.swift (100%) rename ora/{Modules/Find => Features/FindInPage}/FindView.swift (100%) rename ora/{ => Features/History}/Models/History.swift (100%) rename ora/{ => Features/History}/Services/HistoryManager.swift (100%) rename ora/{ => Features/Importer}/Services/Importer.swift (100%) rename ora/{Modules/Importer => Features/Importer/Views}/ImportDataButton.swift (100%) rename ora/{Modules => Features}/Launcher/LauncherView.swift (100%) rename ora/{Modules => Features}/Launcher/Main/LauncherMain.swift (100%) rename ora/{Modules => Features}/Launcher/Main/LauncherTextField.swift (100%) rename ora/{Modules => Features}/Launcher/Main/SearchCapsule.swift (100%) rename ora/{Modules => Features}/Launcher/Suggestions/LauncherSuggestionItem.swift (100%) rename ora/{Modules => Features}/Launcher/Suggestions/LauncherSuggestionsView.swift (100%) rename ora/{Services => Features/Player/State}/MediaController.swift (100%) rename ora/{Modules/Player => Features/Player/Views}/GlobalMediaPlayer.swift (100%) rename ora/{Modules/Player => Features/Player/Views}/PlayerIconButtonStyle.swift (100%) rename ora/{ => Features/Privacy}/Services/PrivacyService.swift (100%) rename ora/{ => Features/Search}/Models/SearchEngine.swift (100%) rename ora/{ => Features/Search}/Services/SearchEngineService.swift (100%) rename ora/{Modules => Features}/Settings/Sections/AppearanceSelector.swift (100%) rename ora/{Modules => Features}/Settings/Sections/GeneralSettingsView.swift (100%) rename ora/{Modules => Features}/Settings/Sections/PrivacySecuritySettingsView.swift (100%) rename ora/{Modules => Features}/Settings/Sections/SearchEngineSettingsView.swift (100%) rename ora/{Modules => Features}/Settings/Sections/SettingsContainer.swift (100%) rename ora/{Modules => Features}/Settings/Sections/ShortcutsSettingsView.swift (100%) rename ora/{Modules => Features}/Settings/Sections/SpacesSettingsView.swift (100%) rename ora/{Modules => Features}/Settings/SettingsContentView.swift (100%) rename ora/{Services => Features/Sidebar/State}/SidebarManager.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/BottomOption/ContainerForm.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/BottomOption/ContainerSwitcher.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/BottomOption/EditContainerModal.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/BottomOption/NewContainerButton.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/ContainerView.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/DownloadsWidget.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/FloatingSidebar.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/SidebarToolbar.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/SidebarURLDisplay.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/SidebarView.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/TabList/FavTabsList.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/TabList/NewTabButton.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/TabList/NormalTabsList.swift (100%) rename ora/{Modules/Sidebar => Features/Sidebar/Views}/TabList/PinnedTabsList.swift (100%) rename ora/{Services => Features/Tabs/DragAndDrop}/SectionDropDelegate.swift (100%) rename ora/{Services => Features/Tabs/DragAndDrop}/TabDropDelegate.swift (100%) rename ora/{ => Features/Tabs}/Models/Folder.swift (100%) rename ora/{ => Features/Tabs}/Models/Tab.swift (100%) rename ora/{ => Features/Tabs}/Models/TabContainer.swift (100%) rename ora/{Services => Features/Tabs/State}/TabManager.swift (100%) rename ora/{Modules/TabSwitch => Features/Tabs/Switcher}/FloatingTabSwitcher.swift (100%) rename ora/{UI => Features/Tabs/Views}/EmptyFavTabItem.swift (100%) rename ora/{UI => Features/Tabs/Views}/EmptyPinnedTabs.swift (100%) rename ora/{UI => Features/Tabs/Views}/FavTabItem.swift (100%) rename ora/{UI => Features/Tabs/Views}/TabItem.swift (100%) rename ora/{Services => Features/Tabs/Web}/TabScriptHandler.swift (100%) rename ora/{UI => Features/Tabs/Web}/WebView.swift (100%) rename ora/{Services => Features/Tabs/Web}/WebViewNavigationDelegate.swift (100%) rename ora/{ => Info}/Info.plist (100%) rename ora/{ => Info}/ora-debug.entitlements (100%) rename ora/{ => Info}/ora.entitlements (100%) rename ora/Resources/{ => WebScripts}/mark.js (100%) rename ora/{UI => Shared/Components}/Buttons/OraButton.swift (100%) rename ora/{UI => Shared/Components}/Dialog/DialogManager.swift (100%) rename ora/{UI => Shared/Components}/Dialog/DialogModel.swift (100%) rename ora/{UI => Shared/Components}/Dialog/DialogView.swift (100%) rename ora/{UI => Shared/Components}/Icons/OraIcon.swift (100%) rename ora/{UI => Shared/Components}/Icons/SpaceCardsDeleteIcon.swift (100%) rename ora/{UI => Shared/Components}/Icons/SpaceCardsEditIcon.swift (100%) rename ora/{UI => Shared/Components}/Icons/SpaceCardsIcon.swift (100%) rename ora/{UI => Shared/Components}/Inputs/OraInput.swift (100%) rename ora/{UI => Shared/Components}/Toast/ToastManager.swift (100%) rename ora/{UI => Shared/Components}/Toast/ToastModel.swift (100%) rename ora/{UI => Shared/Components}/Toast/ToastView.swift (100%) rename ora/{Modules => Shared}/EmojiPicker/EmojiPickerModel.swift (100%) rename ora/{Modules => Shared}/EmojiPicker/EmojiPickerView.swift (100%) rename ora/{Modules => Shared}/EmojiPicker/emoji-set.json (100%) rename ora/{UI => Shared/Layout}/NSPageView.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/CursorModifier.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/HSplit.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/Split.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/SplitConstraints.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/SplitEnums.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/SplitHolders.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/SplitModifiers.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/SplitStyling.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/Splitter+Extensions.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/Splitter.swift (100%) rename ora/{Modules => Shared/Layout}/SplitView/VSplit.swift (100%) rename ora/{UI => Shared/Layout}/VerticalScrollView.swift (100%) rename ora/{UI => Shared}/Modifiers/GradientAnimatingBorder.swift (100%) rename ora/{Common => Shared}/Shapes/ConditionallyConcentricRectangle.swift (100%) 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 100% rename from ora/Services/MediaController.swift rename to ora/Features/Player/State/MediaController.swift 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 100% rename from ora/Services/WebViewNavigationDelegate.swift rename to ora/Features/Tabs/Web/WebViewNavigationDelegate.swift 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: From 7406a96f05346a73099fb6a03f0858ceece79a8f Mon Sep 17 00:00:00 2001 From: "tembo[bot]" <208362400+tembo[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 08:35:43 +0000 Subject: [PATCH 3/4] fix(media): prevent mini player from triggering on silent or muted media Co-authored-by: Yonathan --- .../Player/State/MediaController.swift | 2 +- .../Tabs/Web/WebViewNavigationDelegate.swift | 27 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/ora/Features/Player/State/MediaController.swift b/ora/Features/Player/State/MediaController.swift index 32656dd0..e720ce22 100644 --- a/ora/Features/Player/State/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/Features/Tabs/Web/WebViewNavigationDelegate.swift b/ora/Features/Tabs/Web/WebViewNavigationDelegate.swift index 43a63ba9..820c4381 100644 --- a/ora/Features/Tabs/Web/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' })); From 04ad848b72a1493a7e54a48ed55aa50d18b85865 Mon Sep 17 00:00:00 2001 From: "tembo[bot]" <208362400+tembo[bot]@users.noreply.github.com> Date: Sat, 7 Mar 2026 10:40:00 +0000 Subject: [PATCH 4/4] refactor: rename and reorganize source files and assets for better structure Co-authored-by: Yonathan <98046049+yonaries@users.noreply.github.com>