From 38c9cf9a682fe62b2cd97ceeb39c17b0e0115378 Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 2 Jun 2025 14:29:17 +0700 Subject: [PATCH] refactor: deprecate legacy packages and clean up build scripts (#5162) * refactor: deprecate legacy packages and clean up build scripts * chore: remove joi publish workflow * chore: core publish run on dispatch only * chore: correct version bump on web package * chore: make dev for tauri target --- .github/workflows/publish-npm-core.yml | 15 +- .github/workflows/publish-npm-joi.yml | 53 -- .../template-tauri-build-linux-x64.yml | 4 +- .../workflows/template-tauri-build-macos.yml | 4 +- .../template-tauri-build-windows-x64.yml | 4 +- Makefile | 97 +-- electron/.eslintrc.js | 46 -- electron/@global/index.ts | 10 - electron/entitlements.mac.plist | 14 - electron/handlers/common.ts | 20 - electron/handlers/native.ts | 327 --------- electron/handlers/update.ts | 70 -- electron/icons/512x512.png | Bin 38651 -> 0 bytes electron/icons/icon-tray.png | Bin 1352 -> 0 bytes electron/icons/icon-tray@2x.png | Bin 2269 -> 0 bytes electron/icons/icon.ico | Bin 77634 -> 0 bytes electron/icons/icon.png | Bin 38651 -> 0 bytes electron/icons_dev/jan-beta-512x512.png | Bin 49895 -> 0 bytes electron/icons_dev/jan-beta-tray.png | Bin 806 -> 0 bytes electron/icons_dev/jan-beta-tray@2x.png | Bin 1826 -> 0 bytes electron/icons_dev/jan-beta.ico | Bin 26503 -> 0 bytes electron/icons_dev/jan-beta.png | Bin 49895 -> 0 bytes electron/icons_dev/jan-nightly-512x512.png | Bin 50474 -> 0 bytes electron/icons_dev/jan-nightly-tray.png | Bin 835 -> 0 bytes electron/icons_dev/jan-nightly-tray@2x.png | Bin 1908 -> 0 bytes electron/icons_dev/jan-nightly.ico | Bin 28987 -> 0 bytes electron/icons_dev/jan-nightly.png | Bin 50474 -> 0 bytes electron/jest.config.js | 18 - electron/main.ts | 161 ----- electron/managers/mainWindowConfig.ts | 21 - electron/managers/quickAskWindowConfig.ts | 22 - electron/managers/tray.ts | 51 -- electron/managers/window.ts | 215 ------ electron/merge-latest-ymls.js | 29 - electron/package.json | 146 ---- electron/playwright.config.ts | 14 - electron/pre-install/.gitkeep | 0 electron/preload.quickask.ts | 32 - electron/preload.ts | 60 -- electron/scripts/uninstaller.nsh | 46 -- electron/shared/.gitkeep | 0 electron/sign.js | 69 -- electron/testRunner.js | 10 - electron/tests/config/constants.ts | 4 - electron/tests/config/fixtures.ts | 126 ---- electron/tests/e2e/hub.e2e.spec.ts | 25 - electron/tests/e2e/navigation.e2e.spec.ts | 15 - electron/tests/e2e/settings.e2e.spec.ts | 11 - electron/tests/e2e/thread.e2e.spec.ts | 18 - electron/tests/pages/basePage.ts | 59 -- electron/tests/pages/commonActions.ts | 34 - electron/tests/pages/hubPage.ts | 15 - electron/tsconfig.json | 23 - electron/utils/clean.ts | 14 - electron/utils/dev.ts | 13 - electron/utils/disposable.ts | 8 - electron/utils/extension.ts | 12 - electron/utils/logger.ts | 167 ----- electron/utils/menu.ts | 129 ---- electron/utils/migration.ts | 77 -- electron/utils/path.ts | 16 - electron/utils/selectedText.ts | 44 -- electron/utils/setup.ts | 65 -- electron/utils/shortcut.ts | 24 - electron/utils/system.ts | 16 - extensions/model-extension/package.json | 2 +- joi/.prettierignore | 6 - joi/.prettierrc | 8 - joi/README.md | 13 - joi/jest.config.js | 9 - joi/jest.setup.js | 0 joi/package.json | 78 -- joi/rollup.config.mjs | 79 --- joi/src/core/Accordion/Accordion.test.tsx | 64 -- joi/src/core/Accordion/index.tsx | 45 -- joi/src/core/Accordion/styles.scss | 73 -- joi/src/core/Badge/Badge.test.tsx | 83 --- joi/src/core/Badge/index.tsx | 52 -- joi/src/core/Badge/styles.scss | 131 ---- joi/src/core/Button/Button.test.tsx | 90 --- joi/src/core/Button/index.tsx | 65 -- joi/src/core/Button/styles.scss | 134 ---- joi/src/core/Checkbox/Checkbox.test.tsx | 50 -- joi/src/core/Checkbox/index.tsx | 51 -- joi/src/core/Checkbox/styles.scss | 51 -- joi/src/core/Dropdown/index.tsx | 45 -- joi/src/core/Dropdown/styles.scss | 155 ---- joi/src/core/Input/Input.test.tsx | 53 -- joi/src/core/Input/index.tsx | 64 -- joi/src/core/Input/styles.scss | 50 -- joi/src/core/Modal/Modal.test.tsx | 78 -- joi/src/core/Modal/index.tsx | 59 -- joi/src/core/Modal/styles.scss | 85 --- joi/src/core/Progress/Progress.test.tsx | 55 -- joi/src/core/Progress/index.tsx | 46 -- joi/src/core/Progress/styles.scss | 25 - joi/src/core/ScrollArea/ScrollArea.test.tsx | 47 -- joi/src/core/ScrollArea/index.tsx | 39 - joi/src/core/ScrollArea/styles.scss | 53 -- joi/src/core/Select/Select.test.tsx | 107 --- joi/src/core/Select/index.tsx | 98 --- joi/src/core/Select/styles.scss | 77 -- joi/src/core/Slider/Slider.test.tsx | 65 -- joi/src/core/Slider/index.tsx | 48 -- joi/src/core/Slider/styles.scss | 43 -- joi/src/core/Switch/Switch.test.tsx | 52 -- joi/src/core/Switch/index.tsx | 37 - joi/src/core/Switch/styles.scss | 67 -- joi/src/core/Tabs/Tabs.test.tsx | 115 --- joi/src/core/Tabs/index.tsx | 94 --- joi/src/core/Tabs/styles.scss | 66 -- joi/src/core/TextArea/TextArea.test.tsx | 69 -- joi/src/core/TextArea/index.tsx | 50 -- joi/src/core/TextArea/styles.scss | 54 -- joi/src/core/Tooltip/Tooltip.test.tsx | 121 ---- joi/src/core/Tooltip/index.tsx | 53 -- joi/src/core/Tooltip/styles.scss | 82 --- joi/src/hooks/useClickOutside/index.tsx | 49 -- .../useClickOutside/useClickOutside.test.tsx | 84 --- joi/src/hooks/useClipboard/index.ts | 34 - .../hooks/useClipboard/useClipboard.test.ts | 102 --- joi/src/hooks/useMediaQuery/index.ts | 63 -- .../hooks/useMediaQuery/useMediaQuery.test.ts | 160 ----- joi/src/hooks/useOs/index.tsx | 56 -- joi/src/hooks/useOs/useOs.test.ts | 58 -- joi/src/hooks/usePageLeave/index.ts | 9 - .../hooks/usePageLeave/usePageLeave.test.ts | 32 - joi/src/hooks/useTextSelection/index.ts | 24 - .../useTextSelection/useTextSelection.test.ts | 56 -- joi/src/index.test.ts | 44 -- joi/src/index.ts | 22 - joi/tailwind.config.js | 10 - joi/tsconfig.json | 17 - package.json | 32 +- web/.eslintrc.js | 154 ---- web/.gitignore | 42 -- web/.prettierrc | 8 - web/Dockerfile | 48 -- web/app/error.tsx | 89 --- web/app/favicon.ico | Bin 15406 -> 0 bytes web/app/layout.tsx | 19 - web/app/page.tsx | 11 - web/app/privacy/page.tsx | 74 -- web/app/search/SelectedText.tsx | 49 -- web/app/search/UserInput.tsx | 85 --- web/app/search/layout.tsx | 55 -- web/app/search/page.tsx | 14 - web/app/support/page.tsx | 41 -- web/constants/screens.ts | 6 - web/constants/tagType.ts | 62 -- web/containers/AutoLink/index.test.tsx | 43 -- web/containers/AutoLink/index.tsx | 36 - web/containers/BlankState/index.test.tsx | 38 - web/containers/BlankState/index.tsx | 24 - web/containers/Brand/Logo/Mark.test.tsx | 37 - web/containers/Brand/Logo/Mark.tsx | 20 - .../CenterPanelContainer/index.test.tsx | 56 -- web/containers/CenterPanelContainer/index.tsx | 58 -- web/containers/Checkbox/index.tsx | 48 -- web/containers/CopyInstruction/index.test.tsx | 66 -- web/containers/CopyInstruction/index.tsx | 32 - web/containers/EngineSetting/index.test.tsx | 115 --- web/containers/EngineSetting/index.tsx | 28 - web/containers/ErrorMessage/index.test.tsx | 90 --- web/containers/ErrorMessage/index.tsx | 163 ----- .../BottomPanel/DownloadingState/index.tsx | 96 --- .../BottomPanel/ImportingModelState/index.tsx | 62 -- .../SystemMonitor/SystemMonitor.test.tsx | 127 ---- .../SystemMonitor/TableActiveModel/index.tsx | 79 --- .../BottomPanel/SystemMonitor/index.tsx | 199 ------ .../Layout/BottomPanel/UpdateApp/index.tsx | 27 - .../BottomPanel/UpdateFailedModal/index.tsx | 62 -- web/containers/Layout/BottomPanel/index.tsx | 87 --- web/containers/Layout/RibbonPanel/index.tsx | 141 ---- web/containers/Layout/TopPanel/index.tsx | 195 ----- web/containers/Layout/index.tsx | 249 ------- web/containers/LeftPanelContainer/index.tsx | 130 ---- web/containers/ListContainer/index.test.tsx | 69 -- web/containers/ListContainer/index.tsx | 74 -- web/containers/Loader/GenerateResponse.tsx | 49 -- web/containers/Loader/Loader.test.tsx | 23 - web/containers/Loader/ModelReload.test.tsx | 124 ---- web/containers/Loader/ModelReload.tsx | 49 -- web/containers/Loader/ModelStart.test.tsx | 47 -- web/containers/Loader/ModelStart.tsx | 62 -- web/containers/Loader/ProgressCircle.test.tsx | 22 - web/containers/Loader/ProgressCircle.tsx | 51 -- web/containers/Loader/Spinner.tsx | 54 -- web/containers/Loader/index.tsx | 21 - web/containers/LoadingModal/index.test.tsx | 47 -- web/containers/LoadingModal/index.tsx | 27 - .../MainViewContainer/index.test.tsx | 56 -- web/containers/MainViewContainer/index.tsx | 81 --- .../ModalAppUpdaterChangelog/index.tsx | 104 --- .../ModalAppUpdaterNotAvailable/index.tsx | 57 -- web/containers/ModalCancelDownload/index.tsx | 89 --- .../ModalTroubleShoot/AppLogs.test.tsx | 105 --- web/containers/ModalTroubleShoot/AppLogs.tsx | 226 ------ .../ModalTroubleShoot/CortexLogs.tsx | 226 ------ .../ModalTroubleShoot/DeviceSpecs.tsx | 210 ------ web/containers/ModalTroubleShoot/index.tsx | 169 ----- .../ModelConfigInput/index.test.tsx | 84 --- web/containers/ModelConfigInput/index.tsx | 48 -- web/containers/ModelDownloadButton/index.tsx | 110 --- web/containers/ModelDropdown/index.test.tsx | 113 --- web/containers/ModelDropdown/index.tsx | 654 ----------------- web/containers/ModelLabel/ModelLabel.test.tsx | 53 -- .../ModelLabel/NotEnoughMemoryLabel.tsx | 49 -- .../ModelLabel/RecommendedLabel.tsx | 21 - .../ModelLabel/SlowOnYourDeviceLabel.tsx | 49 -- web/containers/ModelLabel/index.tsx | 59 -- web/containers/ModelSearch/index.tsx | 98 --- .../ModelSetting/SettingComponent.tsx | 106 --- web/containers/ModelSetting/index.tsx | 28 - .../Providers/AppUpdateListener.tsx | 58 -- .../Providers/ClipboardListener.tsx | 19 - web/containers/Providers/CoreConfigurator.tsx | 66 -- web/containers/Providers/DataLoader.tsx | 92 --- web/containers/Providers/DeepLinkListener.tsx | 98 --- web/containers/Providers/EventListener.tsx | 131 ---- web/containers/Providers/Jotai.tsx | 19 - web/containers/Providers/KeyListener.tsx | 94 --- web/containers/Providers/ModelHandler.tsx | 373 ---------- .../Providers/QuickAskConfigurator.tsx | 17 - web/containers/Providers/QuickAskListener.tsx | 29 - web/containers/Providers/Responsive.test.tsx | 87 --- web/containers/Providers/Responsive.tsx | 35 - .../Providers/SWRConfigProvider.tsx | 30 - web/containers/Providers/SettingsHandler.tsx | 20 - web/containers/Providers/Theme.test.tsx | 24 - web/containers/Providers/Theme.tsx | 18 - web/containers/Providers/index.tsx | 56 -- .../RightPanelContainer/index.test.tsx | 131 ---- web/containers/RightPanelContainer/index.tsx | 134 ---- web/containers/ServerLogs/index.tsx | 307 -------- web/containers/SetupRemoteModel/index.tsx | 46 -- web/containers/Shortcut/index.tsx | 10 - .../SliderRightPanel/index.test.tsx | 105 --- web/containers/SliderRightPanel/index.tsx | 135 ---- web/containers/TagInput/index.test.tsx | 50 -- web/containers/TagInput/index.tsx | 149 ---- web/containers/Toast/index.tsx | 101 --- .../ToolCallApprovalModal/index.tsx | 110 --- web/dev.Dockerfile | 27 - web/docker-compose.yml | 19 - web/env-example | 3 - web/extension/Extension.test.ts | 19 - web/extension/Extension.ts | 40 -- web/extension/ExtensionManager.test.ts | 131 ---- web/extension/ExtensionManager.ts | 201 ------ web/extension/index.test.ts | 9 - web/extension/index.ts | 1 - web/helpers/atoms/ApiServer.atom.test.ts | 9 - web/helpers/atoms/ApiServer.atom.ts | 20 - web/helpers/atoms/App.atom.test.ts | 8 - web/helpers/atoms/App.atom.ts | 70 -- web/helpers/atoms/AppConfig.atom.test.ts | 7 - web/helpers/atoms/AppConfig.atom.ts | 100 --- web/helpers/atoms/Assistant.atom.test.ts | 8 - web/helpers/atoms/Assistant.atom.ts | 12 - web/helpers/atoms/ChatMessage.atom.test.ts | 32 - web/helpers/atoms/ChatMessage.atom.ts | 201 ------ web/helpers/atoms/Extension.atom.test.ts | 30 - web/helpers/atoms/Extension.atom.ts | 25 - web/helpers/atoms/LocalServer.atom.test.ts | 7 - web/helpers/atoms/LocalServer.atom.ts | 5 - web/helpers/atoms/Model.atom.test.ts | 313 -------- web/helpers/atoms/Model.atom.ts | 202 ------ web/helpers/atoms/Setting.atom.test.ts | 7 - web/helpers/atoms/Setting.atom.ts | 72 -- web/helpers/atoms/SystemBar.atom.test.ts | 146 ---- web/helpers/atoms/SystemBar.atom.ts | 13 - web/helpers/atoms/Thread.atom.test.ts | 187 ----- web/helpers/atoms/Thread.atom.ts | 300 -------- .../atoms/ThreadRightPanel.atom.test.ts | 6 - web/helpers/atoms/ThreadRightPanel.atom.ts | 6 - web/hooks/useActiveModel.ts | 170 ----- web/hooks/useApp.ts | 10 - web/hooks/useAssistant.test.ts | 95 --- web/hooks/useAssistants.ts | 39 - web/hooks/useClipboard.test.ts | 105 --- web/hooks/useClipboard.ts | 33 - web/hooks/useConfigurations.test.ts | 137 ---- web/hooks/useConfigurations.ts | 81 --- web/hooks/useCreateNewThread.test.ts | 204 ------ web/hooks/useCreateNewThread.ts | 200 ------ web/hooks/useDeleteModel.test.ts | 73 -- web/hooks/useDeleteModel.ts | 34 - web/hooks/useDeleteThread.test.ts | 163 ----- web/hooks/useDeleteThread.ts | 125 ---- web/hooks/useDownloadModel.test.ts | 95 --- web/hooks/useDownloadModel.ts | 69 -- web/hooks/useDownloadState.test.ts | 109 --- web/hooks/useDownloadState.ts | 147 ---- web/hooks/useDropModelBinaries.test.ts | 133 ---- web/hooks/useDropModelBinaries.ts | 55 -- web/hooks/useEngineManagement.ts | 574 --------------- web/hooks/useFactoryReset.test.ts | 89 --- web/hooks/useFactoryReset.ts | 83 --- web/hooks/useGetHFRepoData.test.ts | 41 -- web/hooks/useGetHFRepoData.ts | 35 - web/hooks/useGetLatestRelease.ts | 35 - web/hooks/useGetSystemResources.test.ts | 103 --- web/hooks/useGetSystemResources.ts | 127 ---- web/hooks/useHardwareManagement.ts | 95 --- web/hooks/useImportModel.test.ts | 71 -- web/hooks/useImportModel.ts | 150 ---- web/hooks/useLoadTheme.test.ts | 118 --- web/hooks/useLoadTheme.ts | 89 --- web/hooks/useLogs.test.ts | 103 --- web/hooks/useLogs.ts | 37 - web/hooks/useModelSource.ts | 88 --- web/hooks/useModels.test.ts | 143 ---- web/hooks/useModels.ts | 119 ---- web/hooks/usePath.ts | 55 -- web/hooks/useRecommendedModel.ts | 114 --- web/hooks/useSendChatMessage.ts | 578 --------------- web/hooks/useSetActiveThread.ts | 61 -- web/hooks/useStarterScreen.ts | 46 -- web/hooks/useThread.test.ts | 192 ----- web/hooks/useThreads.ts | 78 -- web/hooks/useUpdateModelParameters.test.ts | 286 -------- web/hooks/useUpdateModelParameters.ts | 118 --- web/jest.config.js | 44 -- web/mock/empty-mock.tsx | 2 - web/next.config.js | 52 -- web/package.json | 112 --- web/postcss.config.js | 10 - web/public/icons/Jan.svg | 5 - web/public/icons/app_icon.svg | 14 - web/public/icons/discord.svg | 10 - web/public/icons/huggingFace.svg | 8 - web/public/images/HubBanner/banner-1.jpg | Bin 119444 -> 0 bytes web/public/images/HubBanner/banner-10.jpg | Bin 229622 -> 0 bytes web/public/images/HubBanner/banner-11.jpg | Bin 258942 -> 0 bytes web/public/images/HubBanner/banner-12.jpg | Bin 352535 -> 0 bytes web/public/images/HubBanner/banner-13.jpg | Bin 122333 -> 0 bytes web/public/images/HubBanner/banner-14.jpg | Bin 222393 -> 0 bytes web/public/images/HubBanner/banner-15.jpg | Bin 205091 -> 0 bytes web/public/images/HubBanner/banner-16.jpg | Bin 231287 -> 0 bytes web/public/images/HubBanner/banner-17.jpg | Bin 233183 -> 0 bytes web/public/images/HubBanner/banner-18.jpg | Bin 347013 -> 0 bytes web/public/images/HubBanner/banner-19.jpg | Bin 427973 -> 0 bytes web/public/images/HubBanner/banner-2.jpg | Bin 164525 -> 0 bytes web/public/images/HubBanner/banner-20.jpg | Bin 254135 -> 0 bytes web/public/images/HubBanner/banner-21.jpg | Bin 232118 -> 0 bytes web/public/images/HubBanner/banner-22.jpg | Bin 294443 -> 0 bytes web/public/images/HubBanner/banner-23.jpg | Bin 317576 -> 0 bytes web/public/images/HubBanner/banner-24.jpg | Bin 300533 -> 0 bytes web/public/images/HubBanner/banner-25.jpg | Bin 233335 -> 0 bytes web/public/images/HubBanner/banner-26.jpg | Bin 390555 -> 0 bytes web/public/images/HubBanner/banner-27.jpg | Bin 198037 -> 0 bytes web/public/images/HubBanner/banner-28.jpg | Bin 164685 -> 0 bytes web/public/images/HubBanner/banner-29.jpg | Bin 120135 -> 0 bytes web/public/images/HubBanner/banner-3.jpg | Bin 188944 -> 0 bytes web/public/images/HubBanner/banner-30.jpg | Bin 348859 -> 0 bytes web/public/images/HubBanner/banner-4.jpg | Bin 215860 -> 0 bytes web/public/images/HubBanner/banner-5.jpg | Bin 231877 -> 0 bytes web/public/images/HubBanner/banner-6.jpg | Bin 188131 -> 0 bytes web/public/images/HubBanner/banner-7.jpg | Bin 126866 -> 0 bytes web/public/images/HubBanner/banner-8.jpg | Bin 221839 -> 0 bytes web/public/images/HubBanner/banner-9.jpg | Bin 208235 -> 0 bytes web/public/images/ModelProvider/anthropic.svg | 9 - web/public/images/ModelProvider/cohere.svg | 9 - web/public/images/ModelProvider/cortex.svg | 14 - web/public/images/ModelProvider/deepseek.svg | 25 - web/public/images/ModelProvider/dot.svg | 3 - .../images/ModelProvider/google-gemini.svg | 1 - web/public/images/ModelProvider/google.svg | 9 - web/public/images/ModelProvider/groq.svg | 9 - .../images/ModelProvider/hugging-face.svg | 8 - web/public/images/ModelProvider/martian.svg | 11 - web/public/images/ModelProvider/meta.svg | 72 -- web/public/images/ModelProvider/mistral.svg | 28 - web/public/images/ModelProvider/nitro.svg | 6 - web/public/images/ModelProvider/nvidia.svg | 10 - .../images/ModelProvider/openRouter.svg | 14 - web/public/images/ModelProvider/openai.svg | 9 - web/public/images/ModelProvider/send.svg | 3 - web/public/images/compact-width-dark.png | Bin 10914 -> 0 bytes web/public/images/compact-width.png | Bin 10683 -> 0 bytes web/public/images/full-width-dark.png | Bin 10964 -> 0 bytes web/public/images/full-width.png | Bin 10824 -> 0 bytes .../Hub/ModelFilter/ContextLength/index.tsx | 84 --- .../Hub/ModelFilter/ModelSize/index.tsx | 117 --- .../Hub/ModelList/ModelHeader/index.tsx | 210 ------ web/screens/Hub/ModelList/ModelItem/index.tsx | 85 --- web/screens/Hub/ModelList/index.tsx | 35 - .../Hub/ModelPage/RemoteModelRefresh.tsx | 29 - web/screens/Hub/ModelPage/index.tsx | 232 ------ web/screens/Hub/index.tsx | 612 ---------------- .../LocalServerCenterPanel/index.tsx | 82 --- .../LocalServerLeftPanel/index.tsx | 288 -------- .../LocalServerRightPanel/index.tsx | 193 ----- web/screens/LocalServer/index.tsx | 23 - .../DataFolder/ModalChangeDirectory.tsx | 56 -- .../DataFolder/ModalConfirmDestNotEmpty.tsx | 44 -- .../DataFolder/ModalErrorSetDestGlobal.tsx | 35 - .../DataFolder/ModalSameDirectory.tsx | 47 -- .../Settings/Advanced/DataFolder/index.tsx | 140 ---- .../FactoryReset/ModalConfirmReset.tsx | 81 --- .../Advanced/FactoryReset/ResettingModal.tsx | 27 - .../Settings/Advanced/FactoryReset/index.tsx | 38 - .../Advanced/ProxySettings/index.test.tsx | 147 ---- .../Settings/Advanced/ProxySettings/index.tsx | 397 ----------- web/screens/Settings/Advanced/index.test.tsx | 110 --- web/screens/Settings/Advanced/index.tsx | 217 ------ web/screens/Settings/Appearance/index.tsx | 219 ------ .../Settings/CancelModelImportModal/index.tsx | 49 -- .../ChooseWhatToImportModal/index.tsx | 61 -- web/screens/Settings/CoreExtensions/index.tsx | 189 ----- .../Settings/EditModelInfoModal/index.tsx | 202 ------ .../Settings/Engines/DeleteEngineVariant.tsx | 77 -- .../Settings/Engines/LocalEngineItem.tsx | 90 --- .../Settings/Engines/LocalEngineSettings.tsx | 395 ----------- .../Settings/Engines/ModalAddModel.tsx | 160 ----- .../Settings/Engines/ModalAddRemoteEngine.tsx | 241 ------- .../Engines/ModalDeleteCustomEngine.tsx | 60 -- .../Settings/Engines/ModalDeleteModel.tsx | 62 -- .../Settings/Engines/RemoteEngineItem.tsx | 82 --- .../Settings/Engines/RemoteEngineSettings.tsx | 482 ------------- web/screens/Settings/Engines/index.tsx | 73 -- .../Settings/ExtensionSetting/index.tsx | 69 -- web/screens/Settings/Hardware/index.tsx | 400 ----------- web/screens/Settings/Hotkeys/index.tsx | 91 --- .../Settings/ImportInProgressIcon/index.tsx | 60 -- .../ImportModelOptionSelection.tsx | 32 - .../Settings/ImportModelOptionModal/index.tsx | 91 --- .../Settings/ImportSuccessIcon/index.tsx | 52 -- .../ImportingModelItem.tsx | 60 -- .../Settings/ImportingModelModal/index.tsx | 91 --- web/screens/Settings/MCP/configuration.tsx | 124 ---- web/screens/Settings/MCP/index.tsx | 41 -- web/screens/Settings/MCP/search.tsx | 212 ------ .../Settings/MyModels/MyModelList/index.tsx | 207 ------ web/screens/Settings/MyModels/index.tsx | 259 ------- web/screens/Settings/Privacy/index.test.tsx | 65 -- web/screens/Settings/Privacy/index.tsx | 158 ----- .../Settings/SelectingModelModal/index.tsx | 94 --- .../SettingDetailDropdownItem/index.tsx | 50 -- .../SettingDetailTextInputItem/index.tsx | 181 ----- .../SettingDetailToggleItem/index.tsx | 51 -- .../SettingDetail/SettingDetailItem/index.tsx | 69 -- web/screens/Settings/SettingDetail/index.tsx | 88 --- .../SettingLeftPanel/SettingItem/index.tsx | 42 -- .../Settings/SettingLeftPanel/index.tsx | 165 ----- web/screens/Settings/index.tsx | 49 -- .../AssistantSetting/index.test.tsx | 154 ---- .../AssistantSetting/index.tsx | 106 --- .../ChatBody/EmptyThread/index.tsx | 49 -- .../ChatBody/OnboardingScreen/index.test.tsx | 214 ------ .../ChatBody/OnboardingScreen/index.tsx | 346 --------- .../ThreadCenterPanel/ChatBody/index.tsx | 226 ------ .../ChatInput/RichTextEditor.tsx | 408 ----------- .../ThreadCenterPanel/ChatInput/index.tsx | 531 -------------- .../ThreadCenterPanel/ChatItem/index.tsx | 97 --- .../ThreadCenterPanel/EditChatInput/index.tsx | 175 ----- .../FileUploadPreview/Icon.tsx | 95 --- .../FileUploadPreview/index.tsx | 49 -- .../ImageUploadPreview/index.tsx | 51 -- .../LoadModelError/index.tsx | 59 -- .../MessageToolbar/index.tsx | 178 ----- .../RequestDownloadModel/index.tsx | 44 -- .../TextMessage/DocMessage.tsx | 42 -- .../TextMessage/ImageMessage.tsx | 13 - .../TextMessage/MarkdownTextMessage.tsx | 247 ------- .../TextMessage/MarkdownUtils.tsx | 21 - .../TextMessage/RelativeImage.tsx | 31 - .../TextMessage/ThinkingBlock.tsx | 63 -- .../TextMessage/ToolCallBlock.tsx | 65 -- .../ThreadCenterPanel/TextMessage/index.tsx | 214 ------ .../Thread/ThreadCenterPanel/index.tsx | 255 ------- .../ModalCleanThread/index.tsx | 70 -- .../ModalDeleteAllThreads/index.tsx | 73 -- .../ModalDeleteThread/index.tsx | 65 -- .../ModalEditTitleThread/index.tsx | 79 --- web/screens/Thread/ThreadLeftPanel/index.tsx | 234 ------ .../PromptTemplateSetting/index.tsx | 50 -- .../Thread/ThreadRightPanel/Tools/index.tsx | 217 ------ web/screens/Thread/ThreadRightPanel/index.tsx | 301 -------- web/screens/Thread/index.test.tsx | 45 -- web/screens/Thread/index.tsx | 48 -- web/services/appService.test.ts | 43 -- web/services/appService.ts | 63 -- web/services/coreService.ts | 25 - web/services/eventsService.test.ts | 47 -- web/services/eventsService.ts | 42 -- web/services/extensionService.test.ts | 35 - web/services/extensionService.ts | 36 - web/services/restService.test.ts | 15 - web/services/restService.ts | 46 -- web/services/tauriService.ts | 56 -- web/styles/base/global.scss | 62 -- web/styles/components/code-block.scss | 171 ----- web/styles/components/loader.scss | 136 ---- web/styles/components/marked.scss | 112 --- web/styles/components/message.scss | 37 - web/styles/components/model.scss | 3 - web/styles/main.scss | 89 --- web/styles/vendor/katex-fonts.scss | 71 -- .../katex-fonts/KaTeX_AMS-Regular.woff2 | Bin 28076 -> 0 bytes .../katex-fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 6912 -> 0 bytes .../KaTeX_Caligraphic-Regular.woff2 | Bin 6908 -> 0 bytes .../katex-fonts/KaTeX_Fraktur-Bold.woff2 | Bin 11348 -> 0 bytes .../katex-fonts/KaTeX_Fraktur-Regular.woff2 | Bin 11316 -> 0 bytes .../vendor/katex-fonts/KaTeX_Main-Bold.woff2 | Bin 25324 -> 0 bytes .../katex-fonts/KaTeX_Main-BoldItalic.woff2 | Bin 16780 -> 0 bytes .../katex-fonts/KaTeX_Main-Italic.woff2 | Bin 16988 -> 0 bytes .../katex-fonts/KaTeX_Main-Regular.woff2 | Bin 26272 -> 0 bytes .../katex-fonts/KaTeX_Math-BoldItalic.woff2 | Bin 16400 -> 0 bytes .../katex-fonts/KaTeX_Math-Italic.woff2 | Bin 16440 -> 0 bytes .../katex-fonts/KaTeX_SansSerif-Bold.woff2 | Bin 12216 -> 0 bytes .../katex-fonts/KaTeX_SansSerif-Italic.woff2 | Bin 12028 -> 0 bytes .../katex-fonts/KaTeX_SansSerif-Regular.woff2 | Bin 10344 -> 0 bytes .../katex-fonts/KaTeX_Script-Regular.woff2 | Bin 9644 -> 0 bytes .../katex-fonts/KaTeX_Size1-Regular.woff2 | Bin 5468 -> 0 bytes .../katex-fonts/KaTeX_Size2-Regular.woff2 | Bin 5208 -> 0 bytes .../katex-fonts/KaTeX_Size3-Regular.woff2 | Bin 3624 -> 0 bytes .../katex-fonts/KaTeX_Size4-Regular.woff2 | Bin 4928 -> 0 bytes .../KaTeX_Typewriter-Regular.woff2 | Bin 13568 -> 0 bytes web/styles/vendor/katex.scss | 671 ------------------ web/tailwind.config.js | 64 -- web/testRunner.js | 19 - web/tsconfig.json | 34 - web/types/file.d.ts | 8 - web/types/index.d.ts | 26 - web/types/model.d.ts | 10 - web/types/theme.d.ts | 8 - web/types/token.d.ts | 6 - web/utils/Stack.test.ts | 35 - web/utils/Stack.ts | 31 - web/utils/base64.test.ts | 8 - web/utils/base64.ts | 45 -- web/utils/codeLanguageExtension.ts | 34 - web/utils/componentSettings.test.ts | 22 - web/utils/componentSettings.ts | 82 --- web/utils/converter.test.ts | 33 - web/utils/converter.ts | 47 -- web/utils/createMessage.ts | 45 -- web/utils/datetime.test.ts | 23 - web/utils/datetime.ts | 36 - web/utils/file.ts | 58 -- web/utils/huggingface.test.ts | 99 --- web/utils/huggingface.ts | 119 ---- web/utils/json.test.ts | 22 - web/utils/json.ts | 9 - web/utils/jsonToCssVariables.test.ts | 17 - web/utils/jsonToCssVariables.ts | 29 - web/utils/memory.test.ts | 11 - web/utils/memory.ts | 9 - web/utils/messageRequestBuilder.ts | 218 ------ web/utils/model.ts | 9 - web/utils/modelEngine.test.ts | 174 ----- web/utils/modelEngine.ts | 102 --- web/utils/modelSource.ts | 48 -- web/utils/predefinedComponent.test.ts | 17 - web/utils/predefinedComponent.ts | 222 ------ web/utils/search.ts | 23 - web/utils/settings.ts | 24 - web/utils/threadMessageBuilder.test.ts | 100 --- web/utils/threadMessageBuilder.ts | 81 --- web/utils/titleUtils.test.ts | 25 - web/utils/titleUtils.ts | 9 - 563 files changed, 39 insertions(+), 41371 deletions(-) delete mode 100644 .github/workflows/publish-npm-joi.yml delete mode 100644 electron/.eslintrc.js delete mode 100644 electron/@global/index.ts delete mode 100644 electron/entitlements.mac.plist delete mode 100644 electron/handlers/common.ts delete mode 100644 electron/handlers/native.ts delete mode 100644 electron/handlers/update.ts delete mode 100644 electron/icons/512x512.png delete mode 100644 electron/icons/icon-tray.png delete mode 100644 electron/icons/icon-tray@2x.png delete mode 100644 electron/icons/icon.ico delete mode 100644 electron/icons/icon.png delete mode 100644 electron/icons_dev/jan-beta-512x512.png delete mode 100644 electron/icons_dev/jan-beta-tray.png delete mode 100644 electron/icons_dev/jan-beta-tray@2x.png delete mode 100644 electron/icons_dev/jan-beta.ico delete mode 100644 electron/icons_dev/jan-beta.png delete mode 100644 electron/icons_dev/jan-nightly-512x512.png delete mode 100644 electron/icons_dev/jan-nightly-tray.png delete mode 100644 electron/icons_dev/jan-nightly-tray@2x.png delete mode 100644 electron/icons_dev/jan-nightly.ico delete mode 100644 electron/icons_dev/jan-nightly.png delete mode 100644 electron/jest.config.js delete mode 100644 electron/main.ts delete mode 100644 electron/managers/mainWindowConfig.ts delete mode 100644 electron/managers/quickAskWindowConfig.ts delete mode 100644 electron/managers/tray.ts delete mode 100644 electron/managers/window.ts delete mode 100644 electron/merge-latest-ymls.js delete mode 100644 electron/package.json delete mode 100644 electron/playwright.config.ts delete mode 100644 electron/pre-install/.gitkeep delete mode 100644 electron/preload.quickask.ts delete mode 100644 electron/preload.ts delete mode 100644 electron/scripts/uninstaller.nsh delete mode 100644 electron/shared/.gitkeep delete mode 100644 electron/sign.js delete mode 100644 electron/testRunner.js delete mode 100644 electron/tests/config/constants.ts delete mode 100644 electron/tests/config/fixtures.ts delete mode 100644 electron/tests/e2e/hub.e2e.spec.ts delete mode 100644 electron/tests/e2e/navigation.e2e.spec.ts delete mode 100644 electron/tests/e2e/settings.e2e.spec.ts delete mode 100644 electron/tests/e2e/thread.e2e.spec.ts delete mode 100644 electron/tests/pages/basePage.ts delete mode 100644 electron/tests/pages/commonActions.ts delete mode 100644 electron/tests/pages/hubPage.ts delete mode 100644 electron/tsconfig.json delete mode 100644 electron/utils/clean.ts delete mode 100644 electron/utils/dev.ts delete mode 100644 electron/utils/disposable.ts delete mode 100644 electron/utils/extension.ts delete mode 100644 electron/utils/logger.ts delete mode 100644 electron/utils/menu.ts delete mode 100644 electron/utils/migration.ts delete mode 100644 electron/utils/path.ts delete mode 100644 electron/utils/selectedText.ts delete mode 100644 electron/utils/setup.ts delete mode 100644 electron/utils/shortcut.ts delete mode 100644 electron/utils/system.ts delete mode 100644 joi/.prettierignore delete mode 100644 joi/.prettierrc delete mode 100644 joi/README.md delete mode 100644 joi/jest.config.js delete mode 100644 joi/jest.setup.js delete mode 100644 joi/package.json delete mode 100644 joi/rollup.config.mjs delete mode 100644 joi/src/core/Accordion/Accordion.test.tsx delete mode 100644 joi/src/core/Accordion/index.tsx delete mode 100644 joi/src/core/Accordion/styles.scss delete mode 100644 joi/src/core/Badge/Badge.test.tsx delete mode 100644 joi/src/core/Badge/index.tsx delete mode 100644 joi/src/core/Badge/styles.scss delete mode 100644 joi/src/core/Button/Button.test.tsx delete mode 100644 joi/src/core/Button/index.tsx delete mode 100644 joi/src/core/Button/styles.scss delete mode 100644 joi/src/core/Checkbox/Checkbox.test.tsx delete mode 100644 joi/src/core/Checkbox/index.tsx delete mode 100644 joi/src/core/Checkbox/styles.scss delete mode 100644 joi/src/core/Dropdown/index.tsx delete mode 100644 joi/src/core/Dropdown/styles.scss delete mode 100644 joi/src/core/Input/Input.test.tsx delete mode 100644 joi/src/core/Input/index.tsx delete mode 100644 joi/src/core/Input/styles.scss delete mode 100644 joi/src/core/Modal/Modal.test.tsx delete mode 100644 joi/src/core/Modal/index.tsx delete mode 100644 joi/src/core/Modal/styles.scss delete mode 100644 joi/src/core/Progress/Progress.test.tsx delete mode 100644 joi/src/core/Progress/index.tsx delete mode 100644 joi/src/core/Progress/styles.scss delete mode 100644 joi/src/core/ScrollArea/ScrollArea.test.tsx delete mode 100644 joi/src/core/ScrollArea/index.tsx delete mode 100644 joi/src/core/ScrollArea/styles.scss delete mode 100644 joi/src/core/Select/Select.test.tsx delete mode 100644 joi/src/core/Select/index.tsx delete mode 100644 joi/src/core/Select/styles.scss delete mode 100644 joi/src/core/Slider/Slider.test.tsx delete mode 100644 joi/src/core/Slider/index.tsx delete mode 100644 joi/src/core/Slider/styles.scss delete mode 100644 joi/src/core/Switch/Switch.test.tsx delete mode 100644 joi/src/core/Switch/index.tsx delete mode 100644 joi/src/core/Switch/styles.scss delete mode 100644 joi/src/core/Tabs/Tabs.test.tsx delete mode 100644 joi/src/core/Tabs/index.tsx delete mode 100644 joi/src/core/Tabs/styles.scss delete mode 100644 joi/src/core/TextArea/TextArea.test.tsx delete mode 100644 joi/src/core/TextArea/index.tsx delete mode 100644 joi/src/core/TextArea/styles.scss delete mode 100644 joi/src/core/Tooltip/Tooltip.test.tsx delete mode 100644 joi/src/core/Tooltip/index.tsx delete mode 100644 joi/src/core/Tooltip/styles.scss delete mode 100644 joi/src/hooks/useClickOutside/index.tsx delete mode 100644 joi/src/hooks/useClickOutside/useClickOutside.test.tsx delete mode 100644 joi/src/hooks/useClipboard/index.ts delete mode 100644 joi/src/hooks/useClipboard/useClipboard.test.ts delete mode 100644 joi/src/hooks/useMediaQuery/index.ts delete mode 100644 joi/src/hooks/useMediaQuery/useMediaQuery.test.ts delete mode 100644 joi/src/hooks/useOs/index.tsx delete mode 100644 joi/src/hooks/useOs/useOs.test.ts delete mode 100644 joi/src/hooks/usePageLeave/index.ts delete mode 100644 joi/src/hooks/usePageLeave/usePageLeave.test.ts delete mode 100644 joi/src/hooks/useTextSelection/index.ts delete mode 100644 joi/src/hooks/useTextSelection/useTextSelection.test.ts delete mode 100644 joi/src/index.test.ts delete mode 100644 joi/src/index.ts delete mode 100644 joi/tailwind.config.js delete mode 100644 joi/tsconfig.json delete mode 100644 web/.eslintrc.js delete mode 100644 web/.gitignore delete mode 100644 web/.prettierrc delete mode 100644 web/Dockerfile delete mode 100644 web/app/error.tsx delete mode 100644 web/app/favicon.ico delete mode 100644 web/app/layout.tsx delete mode 100644 web/app/page.tsx delete mode 100644 web/app/privacy/page.tsx delete mode 100644 web/app/search/SelectedText.tsx delete mode 100644 web/app/search/UserInput.tsx delete mode 100644 web/app/search/layout.tsx delete mode 100644 web/app/search/page.tsx delete mode 100644 web/app/support/page.tsx delete mode 100644 web/constants/screens.ts delete mode 100644 web/constants/tagType.ts delete mode 100644 web/containers/AutoLink/index.test.tsx delete mode 100644 web/containers/AutoLink/index.tsx delete mode 100644 web/containers/BlankState/index.test.tsx delete mode 100644 web/containers/BlankState/index.tsx delete mode 100644 web/containers/Brand/Logo/Mark.test.tsx delete mode 100644 web/containers/Brand/Logo/Mark.tsx delete mode 100644 web/containers/CenterPanelContainer/index.test.tsx delete mode 100644 web/containers/CenterPanelContainer/index.tsx delete mode 100644 web/containers/Checkbox/index.tsx delete mode 100644 web/containers/CopyInstruction/index.test.tsx delete mode 100644 web/containers/CopyInstruction/index.tsx delete mode 100644 web/containers/EngineSetting/index.test.tsx delete mode 100644 web/containers/EngineSetting/index.tsx delete mode 100644 web/containers/ErrorMessage/index.test.tsx delete mode 100644 web/containers/ErrorMessage/index.tsx delete mode 100644 web/containers/Layout/BottomPanel/DownloadingState/index.tsx delete mode 100644 web/containers/Layout/BottomPanel/ImportingModelState/index.tsx delete mode 100644 web/containers/Layout/BottomPanel/SystemMonitor/SystemMonitor.test.tsx delete mode 100644 web/containers/Layout/BottomPanel/SystemMonitor/TableActiveModel/index.tsx delete mode 100644 web/containers/Layout/BottomPanel/SystemMonitor/index.tsx delete mode 100644 web/containers/Layout/BottomPanel/UpdateApp/index.tsx delete mode 100644 web/containers/Layout/BottomPanel/UpdateFailedModal/index.tsx delete mode 100644 web/containers/Layout/BottomPanel/index.tsx delete mode 100644 web/containers/Layout/RibbonPanel/index.tsx delete mode 100644 web/containers/Layout/TopPanel/index.tsx delete mode 100644 web/containers/Layout/index.tsx delete mode 100644 web/containers/LeftPanelContainer/index.tsx delete mode 100644 web/containers/ListContainer/index.test.tsx delete mode 100644 web/containers/ListContainer/index.tsx delete mode 100644 web/containers/Loader/GenerateResponse.tsx delete mode 100644 web/containers/Loader/Loader.test.tsx delete mode 100644 web/containers/Loader/ModelReload.test.tsx delete mode 100644 web/containers/Loader/ModelReload.tsx delete mode 100644 web/containers/Loader/ModelStart.test.tsx delete mode 100644 web/containers/Loader/ModelStart.tsx delete mode 100644 web/containers/Loader/ProgressCircle.test.tsx delete mode 100644 web/containers/Loader/ProgressCircle.tsx delete mode 100644 web/containers/Loader/Spinner.tsx delete mode 100644 web/containers/Loader/index.tsx delete mode 100644 web/containers/LoadingModal/index.test.tsx delete mode 100644 web/containers/LoadingModal/index.tsx delete mode 100644 web/containers/MainViewContainer/index.test.tsx delete mode 100644 web/containers/MainViewContainer/index.tsx delete mode 100644 web/containers/ModalAppUpdaterChangelog/index.tsx delete mode 100644 web/containers/ModalAppUpdaterNotAvailable/index.tsx delete mode 100644 web/containers/ModalCancelDownload/index.tsx delete mode 100644 web/containers/ModalTroubleShoot/AppLogs.test.tsx delete mode 100644 web/containers/ModalTroubleShoot/AppLogs.tsx delete mode 100644 web/containers/ModalTroubleShoot/CortexLogs.tsx delete mode 100644 web/containers/ModalTroubleShoot/DeviceSpecs.tsx delete mode 100644 web/containers/ModalTroubleShoot/index.tsx delete mode 100644 web/containers/ModelConfigInput/index.test.tsx delete mode 100644 web/containers/ModelConfigInput/index.tsx delete mode 100644 web/containers/ModelDownloadButton/index.tsx delete mode 100644 web/containers/ModelDropdown/index.test.tsx delete mode 100644 web/containers/ModelDropdown/index.tsx delete mode 100644 web/containers/ModelLabel/ModelLabel.test.tsx delete mode 100644 web/containers/ModelLabel/NotEnoughMemoryLabel.tsx delete mode 100644 web/containers/ModelLabel/RecommendedLabel.tsx delete mode 100644 web/containers/ModelLabel/SlowOnYourDeviceLabel.tsx delete mode 100644 web/containers/ModelLabel/index.tsx delete mode 100644 web/containers/ModelSearch/index.tsx delete mode 100644 web/containers/ModelSetting/SettingComponent.tsx delete mode 100644 web/containers/ModelSetting/index.tsx delete mode 100644 web/containers/Providers/AppUpdateListener.tsx delete mode 100644 web/containers/Providers/ClipboardListener.tsx delete mode 100644 web/containers/Providers/CoreConfigurator.tsx delete mode 100644 web/containers/Providers/DataLoader.tsx delete mode 100644 web/containers/Providers/DeepLinkListener.tsx delete mode 100644 web/containers/Providers/EventListener.tsx delete mode 100644 web/containers/Providers/Jotai.tsx delete mode 100644 web/containers/Providers/KeyListener.tsx delete mode 100644 web/containers/Providers/ModelHandler.tsx delete mode 100644 web/containers/Providers/QuickAskConfigurator.tsx delete mode 100644 web/containers/Providers/QuickAskListener.tsx delete mode 100644 web/containers/Providers/Responsive.test.tsx delete mode 100644 web/containers/Providers/Responsive.tsx delete mode 100644 web/containers/Providers/SWRConfigProvider.tsx delete mode 100644 web/containers/Providers/SettingsHandler.tsx delete mode 100644 web/containers/Providers/Theme.test.tsx delete mode 100644 web/containers/Providers/Theme.tsx delete mode 100644 web/containers/Providers/index.tsx delete mode 100644 web/containers/RightPanelContainer/index.test.tsx delete mode 100644 web/containers/RightPanelContainer/index.tsx delete mode 100644 web/containers/ServerLogs/index.tsx delete mode 100644 web/containers/SetupRemoteModel/index.tsx delete mode 100644 web/containers/Shortcut/index.tsx delete mode 100644 web/containers/SliderRightPanel/index.test.tsx delete mode 100644 web/containers/SliderRightPanel/index.tsx delete mode 100644 web/containers/TagInput/index.test.tsx delete mode 100644 web/containers/TagInput/index.tsx delete mode 100644 web/containers/Toast/index.tsx delete mode 100644 web/containers/ToolCallApprovalModal/index.tsx delete mode 100644 web/dev.Dockerfile delete mode 100644 web/docker-compose.yml delete mode 100644 web/env-example delete mode 100644 web/extension/Extension.test.ts delete mode 100644 web/extension/Extension.ts delete mode 100644 web/extension/ExtensionManager.test.ts delete mode 100644 web/extension/ExtensionManager.ts delete mode 100644 web/extension/index.test.ts delete mode 100644 web/extension/index.ts delete mode 100644 web/helpers/atoms/ApiServer.atom.test.ts delete mode 100644 web/helpers/atoms/ApiServer.atom.ts delete mode 100644 web/helpers/atoms/App.atom.test.ts delete mode 100644 web/helpers/atoms/App.atom.ts delete mode 100644 web/helpers/atoms/AppConfig.atom.test.ts delete mode 100644 web/helpers/atoms/AppConfig.atom.ts delete mode 100644 web/helpers/atoms/Assistant.atom.test.ts delete mode 100644 web/helpers/atoms/Assistant.atom.ts delete mode 100644 web/helpers/atoms/ChatMessage.atom.test.ts delete mode 100644 web/helpers/atoms/ChatMessage.atom.ts delete mode 100644 web/helpers/atoms/Extension.atom.test.ts delete mode 100644 web/helpers/atoms/Extension.atom.ts delete mode 100644 web/helpers/atoms/LocalServer.atom.test.ts delete mode 100644 web/helpers/atoms/LocalServer.atom.ts delete mode 100644 web/helpers/atoms/Model.atom.test.ts delete mode 100644 web/helpers/atoms/Model.atom.ts delete mode 100644 web/helpers/atoms/Setting.atom.test.ts delete mode 100644 web/helpers/atoms/Setting.atom.ts delete mode 100644 web/helpers/atoms/SystemBar.atom.test.ts delete mode 100644 web/helpers/atoms/SystemBar.atom.ts delete mode 100644 web/helpers/atoms/Thread.atom.test.ts delete mode 100644 web/helpers/atoms/Thread.atom.ts delete mode 100644 web/helpers/atoms/ThreadRightPanel.atom.test.ts delete mode 100644 web/helpers/atoms/ThreadRightPanel.atom.ts delete mode 100644 web/hooks/useActiveModel.ts delete mode 100644 web/hooks/useApp.ts delete mode 100644 web/hooks/useAssistant.test.ts delete mode 100644 web/hooks/useAssistants.ts delete mode 100644 web/hooks/useClipboard.test.ts delete mode 100644 web/hooks/useClipboard.ts delete mode 100644 web/hooks/useConfigurations.test.ts delete mode 100644 web/hooks/useConfigurations.ts delete mode 100644 web/hooks/useCreateNewThread.test.ts delete mode 100644 web/hooks/useCreateNewThread.ts delete mode 100644 web/hooks/useDeleteModel.test.ts delete mode 100644 web/hooks/useDeleteModel.ts delete mode 100644 web/hooks/useDeleteThread.test.ts delete mode 100644 web/hooks/useDeleteThread.ts delete mode 100644 web/hooks/useDownloadModel.test.ts delete mode 100644 web/hooks/useDownloadModel.ts delete mode 100644 web/hooks/useDownloadState.test.ts delete mode 100644 web/hooks/useDownloadState.ts delete mode 100644 web/hooks/useDropModelBinaries.test.ts delete mode 100644 web/hooks/useDropModelBinaries.ts delete mode 100644 web/hooks/useEngineManagement.ts delete mode 100644 web/hooks/useFactoryReset.test.ts delete mode 100644 web/hooks/useFactoryReset.ts delete mode 100644 web/hooks/useGetHFRepoData.test.ts delete mode 100644 web/hooks/useGetHFRepoData.ts delete mode 100644 web/hooks/useGetLatestRelease.ts delete mode 100644 web/hooks/useGetSystemResources.test.ts delete mode 100644 web/hooks/useGetSystemResources.ts delete mode 100644 web/hooks/useHardwareManagement.ts delete mode 100644 web/hooks/useImportModel.test.ts delete mode 100644 web/hooks/useImportModel.ts delete mode 100644 web/hooks/useLoadTheme.test.ts delete mode 100644 web/hooks/useLoadTheme.ts delete mode 100644 web/hooks/useLogs.test.ts delete mode 100644 web/hooks/useLogs.ts delete mode 100644 web/hooks/useModelSource.ts delete mode 100644 web/hooks/useModels.test.ts delete mode 100644 web/hooks/useModels.ts delete mode 100644 web/hooks/usePath.ts delete mode 100644 web/hooks/useRecommendedModel.ts delete mode 100644 web/hooks/useSendChatMessage.ts delete mode 100644 web/hooks/useSetActiveThread.ts delete mode 100644 web/hooks/useStarterScreen.ts delete mode 100644 web/hooks/useThread.test.ts delete mode 100644 web/hooks/useThreads.ts delete mode 100644 web/hooks/useUpdateModelParameters.test.ts delete mode 100644 web/hooks/useUpdateModelParameters.ts delete mode 100644 web/jest.config.js delete mode 100644 web/mock/empty-mock.tsx delete mode 100644 web/next.config.js delete mode 100644 web/package.json delete mode 100644 web/postcss.config.js delete mode 100644 web/public/icons/Jan.svg delete mode 100644 web/public/icons/app_icon.svg delete mode 100644 web/public/icons/discord.svg delete mode 100644 web/public/icons/huggingFace.svg delete mode 100644 web/public/images/HubBanner/banner-1.jpg delete mode 100644 web/public/images/HubBanner/banner-10.jpg delete mode 100644 web/public/images/HubBanner/banner-11.jpg delete mode 100644 web/public/images/HubBanner/banner-12.jpg delete mode 100644 web/public/images/HubBanner/banner-13.jpg delete mode 100644 web/public/images/HubBanner/banner-14.jpg delete mode 100644 web/public/images/HubBanner/banner-15.jpg delete mode 100644 web/public/images/HubBanner/banner-16.jpg delete mode 100644 web/public/images/HubBanner/banner-17.jpg delete mode 100644 web/public/images/HubBanner/banner-18.jpg delete mode 100644 web/public/images/HubBanner/banner-19.jpg delete mode 100644 web/public/images/HubBanner/banner-2.jpg delete mode 100644 web/public/images/HubBanner/banner-20.jpg delete mode 100644 web/public/images/HubBanner/banner-21.jpg delete mode 100644 web/public/images/HubBanner/banner-22.jpg delete mode 100644 web/public/images/HubBanner/banner-23.jpg delete mode 100644 web/public/images/HubBanner/banner-24.jpg delete mode 100644 web/public/images/HubBanner/banner-25.jpg delete mode 100644 web/public/images/HubBanner/banner-26.jpg delete mode 100644 web/public/images/HubBanner/banner-27.jpg delete mode 100644 web/public/images/HubBanner/banner-28.jpg delete mode 100644 web/public/images/HubBanner/banner-29.jpg delete mode 100644 web/public/images/HubBanner/banner-3.jpg delete mode 100644 web/public/images/HubBanner/banner-30.jpg delete mode 100644 web/public/images/HubBanner/banner-4.jpg delete mode 100644 web/public/images/HubBanner/banner-5.jpg delete mode 100644 web/public/images/HubBanner/banner-6.jpg delete mode 100644 web/public/images/HubBanner/banner-7.jpg delete mode 100644 web/public/images/HubBanner/banner-8.jpg delete mode 100644 web/public/images/HubBanner/banner-9.jpg delete mode 100644 web/public/images/ModelProvider/anthropic.svg delete mode 100644 web/public/images/ModelProvider/cohere.svg delete mode 100644 web/public/images/ModelProvider/cortex.svg delete mode 100644 web/public/images/ModelProvider/deepseek.svg delete mode 100644 web/public/images/ModelProvider/dot.svg delete mode 100644 web/public/images/ModelProvider/google-gemini.svg delete mode 100644 web/public/images/ModelProvider/google.svg delete mode 100644 web/public/images/ModelProvider/groq.svg delete mode 100644 web/public/images/ModelProvider/hugging-face.svg delete mode 100644 web/public/images/ModelProvider/martian.svg delete mode 100644 web/public/images/ModelProvider/meta.svg delete mode 100644 web/public/images/ModelProvider/mistral.svg delete mode 100644 web/public/images/ModelProvider/nitro.svg delete mode 100644 web/public/images/ModelProvider/nvidia.svg delete mode 100644 web/public/images/ModelProvider/openRouter.svg delete mode 100644 web/public/images/ModelProvider/openai.svg delete mode 100644 web/public/images/ModelProvider/send.svg delete mode 100644 web/public/images/compact-width-dark.png delete mode 100644 web/public/images/compact-width.png delete mode 100644 web/public/images/full-width-dark.png delete mode 100644 web/public/images/full-width.png delete mode 100644 web/screens/Hub/ModelFilter/ContextLength/index.tsx delete mode 100644 web/screens/Hub/ModelFilter/ModelSize/index.tsx delete mode 100644 web/screens/Hub/ModelList/ModelHeader/index.tsx delete mode 100644 web/screens/Hub/ModelList/ModelItem/index.tsx delete mode 100644 web/screens/Hub/ModelList/index.tsx delete mode 100644 web/screens/Hub/ModelPage/RemoteModelRefresh.tsx delete mode 100644 web/screens/Hub/ModelPage/index.tsx delete mode 100644 web/screens/Hub/index.tsx delete mode 100644 web/screens/LocalServer/LocalServerCenterPanel/index.tsx delete mode 100644 web/screens/LocalServer/LocalServerLeftPanel/index.tsx delete mode 100644 web/screens/LocalServer/LocalServerRightPanel/index.tsx delete mode 100644 web/screens/LocalServer/index.tsx delete mode 100644 web/screens/Settings/Advanced/DataFolder/ModalChangeDirectory.tsx delete mode 100644 web/screens/Settings/Advanced/DataFolder/ModalConfirmDestNotEmpty.tsx delete mode 100644 web/screens/Settings/Advanced/DataFolder/ModalErrorSetDestGlobal.tsx delete mode 100644 web/screens/Settings/Advanced/DataFolder/ModalSameDirectory.tsx delete mode 100644 web/screens/Settings/Advanced/DataFolder/index.tsx delete mode 100644 web/screens/Settings/Advanced/FactoryReset/ModalConfirmReset.tsx delete mode 100644 web/screens/Settings/Advanced/FactoryReset/ResettingModal.tsx delete mode 100644 web/screens/Settings/Advanced/FactoryReset/index.tsx delete mode 100644 web/screens/Settings/Advanced/ProxySettings/index.test.tsx delete mode 100644 web/screens/Settings/Advanced/ProxySettings/index.tsx delete mode 100644 web/screens/Settings/Advanced/index.test.tsx delete mode 100644 web/screens/Settings/Advanced/index.tsx delete mode 100644 web/screens/Settings/Appearance/index.tsx delete mode 100644 web/screens/Settings/CancelModelImportModal/index.tsx delete mode 100644 web/screens/Settings/ChooseWhatToImportModal/index.tsx delete mode 100644 web/screens/Settings/CoreExtensions/index.tsx delete mode 100644 web/screens/Settings/EditModelInfoModal/index.tsx delete mode 100644 web/screens/Settings/Engines/DeleteEngineVariant.tsx delete mode 100644 web/screens/Settings/Engines/LocalEngineItem.tsx delete mode 100644 web/screens/Settings/Engines/LocalEngineSettings.tsx delete mode 100644 web/screens/Settings/Engines/ModalAddModel.tsx delete mode 100644 web/screens/Settings/Engines/ModalAddRemoteEngine.tsx delete mode 100644 web/screens/Settings/Engines/ModalDeleteCustomEngine.tsx delete mode 100644 web/screens/Settings/Engines/ModalDeleteModel.tsx delete mode 100644 web/screens/Settings/Engines/RemoteEngineItem.tsx delete mode 100644 web/screens/Settings/Engines/RemoteEngineSettings.tsx delete mode 100644 web/screens/Settings/Engines/index.tsx delete mode 100644 web/screens/Settings/ExtensionSetting/index.tsx delete mode 100644 web/screens/Settings/Hardware/index.tsx delete mode 100644 web/screens/Settings/Hotkeys/index.tsx delete mode 100644 web/screens/Settings/ImportInProgressIcon/index.tsx delete mode 100644 web/screens/Settings/ImportModelOptionModal/ImportModelOptionSelection.tsx delete mode 100644 web/screens/Settings/ImportModelOptionModal/index.tsx delete mode 100644 web/screens/Settings/ImportSuccessIcon/index.tsx delete mode 100644 web/screens/Settings/ImportingModelModal/ImportingModelItem.tsx delete mode 100644 web/screens/Settings/ImportingModelModal/index.tsx delete mode 100644 web/screens/Settings/MCP/configuration.tsx delete mode 100644 web/screens/Settings/MCP/index.tsx delete mode 100644 web/screens/Settings/MCP/search.tsx delete mode 100644 web/screens/Settings/MyModels/MyModelList/index.tsx delete mode 100644 web/screens/Settings/MyModels/index.tsx delete mode 100644 web/screens/Settings/Privacy/index.test.tsx delete mode 100644 web/screens/Settings/Privacy/index.tsx delete mode 100644 web/screens/Settings/SelectingModelModal/index.tsx delete mode 100644 web/screens/Settings/SettingDetail/SettingDetailItem/SettingDetailDropdownItem/index.tsx delete mode 100644 web/screens/Settings/SettingDetail/SettingDetailItem/SettingDetailTextInputItem/index.tsx delete mode 100644 web/screens/Settings/SettingDetail/SettingDetailItem/SettingDetailToggleItem/index.tsx delete mode 100644 web/screens/Settings/SettingDetail/SettingDetailItem/index.tsx delete mode 100644 web/screens/Settings/SettingDetail/index.tsx delete mode 100644 web/screens/Settings/SettingLeftPanel/SettingItem/index.tsx delete mode 100644 web/screens/Settings/SettingLeftPanel/index.tsx delete mode 100644 web/screens/Settings/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/AssistantSetting/index.test.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/AssistantSetting/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/ChatBody/EmptyThread/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/ChatBody/OnboardingScreen/index.test.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/ChatBody/OnboardingScreen/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/ChatBody/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/ChatInput/RichTextEditor.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/ChatInput/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/ChatItem/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/EditChatInput/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/FileUploadPreview/Icon.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/FileUploadPreview/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/ImageUploadPreview/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/LoadModelError/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/MessageToolbar/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/RequestDownloadModel/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/TextMessage/DocMessage.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/TextMessage/ImageMessage.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/TextMessage/MarkdownTextMessage.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/TextMessage/MarkdownUtils.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/TextMessage/RelativeImage.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/TextMessage/ThinkingBlock.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/TextMessage/ToolCallBlock.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/TextMessage/index.tsx delete mode 100644 web/screens/Thread/ThreadCenterPanel/index.tsx delete mode 100644 web/screens/Thread/ThreadLeftPanel/ModalCleanThread/index.tsx delete mode 100644 web/screens/Thread/ThreadLeftPanel/ModalDeleteAllThreads/index.tsx delete mode 100644 web/screens/Thread/ThreadLeftPanel/ModalDeleteThread/index.tsx delete mode 100644 web/screens/Thread/ThreadLeftPanel/ModalEditTitleThread/index.tsx delete mode 100644 web/screens/Thread/ThreadLeftPanel/index.tsx delete mode 100644 web/screens/Thread/ThreadRightPanel/PromptTemplateSetting/index.tsx delete mode 100644 web/screens/Thread/ThreadRightPanel/Tools/index.tsx delete mode 100644 web/screens/Thread/ThreadRightPanel/index.tsx delete mode 100644 web/screens/Thread/index.test.tsx delete mode 100644 web/screens/Thread/index.tsx delete mode 100644 web/services/appService.test.ts delete mode 100644 web/services/appService.ts delete mode 100644 web/services/coreService.ts delete mode 100644 web/services/eventsService.test.ts delete mode 100644 web/services/eventsService.ts delete mode 100644 web/services/extensionService.test.ts delete mode 100644 web/services/extensionService.ts delete mode 100644 web/services/restService.test.ts delete mode 100644 web/services/restService.ts delete mode 100644 web/services/tauriService.ts delete mode 100644 web/styles/base/global.scss delete mode 100644 web/styles/components/code-block.scss delete mode 100644 web/styles/components/loader.scss delete mode 100644 web/styles/components/marked.scss delete mode 100644 web/styles/components/message.scss delete mode 100644 web/styles/components/model.scss delete mode 100644 web/styles/main.scss delete mode 100644 web/styles/vendor/katex-fonts.scss delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_AMS-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Caligraphic-Bold.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Caligraphic-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Fraktur-Bold.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Fraktur-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Main-Bold.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Main-BoldItalic.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Main-Italic.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Main-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Math-BoldItalic.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Math-Italic.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_SansSerif-Bold.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_SansSerif-Italic.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_SansSerif-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Script-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Size1-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Size2-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Size3-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Size4-Regular.woff2 delete mode 100644 web/styles/vendor/katex-fonts/KaTeX_Typewriter-Regular.woff2 delete mode 100644 web/styles/vendor/katex.scss delete mode 100644 web/tailwind.config.js delete mode 100644 web/testRunner.js delete mode 100644 web/tsconfig.json delete mode 100644 web/types/file.d.ts delete mode 100644 web/types/index.d.ts delete mode 100644 web/types/model.d.ts delete mode 100644 web/types/theme.d.ts delete mode 100644 web/types/token.d.ts delete mode 100644 web/utils/Stack.test.ts delete mode 100644 web/utils/Stack.ts delete mode 100644 web/utils/base64.test.ts delete mode 100644 web/utils/base64.ts delete mode 100644 web/utils/codeLanguageExtension.ts delete mode 100644 web/utils/componentSettings.test.ts delete mode 100644 web/utils/componentSettings.ts delete mode 100644 web/utils/converter.test.ts delete mode 100644 web/utils/converter.ts delete mode 100644 web/utils/createMessage.ts delete mode 100644 web/utils/datetime.test.ts delete mode 100644 web/utils/datetime.ts delete mode 100644 web/utils/file.ts delete mode 100644 web/utils/huggingface.test.ts delete mode 100644 web/utils/huggingface.ts delete mode 100644 web/utils/json.test.ts delete mode 100644 web/utils/json.ts delete mode 100644 web/utils/jsonToCssVariables.test.ts delete mode 100644 web/utils/jsonToCssVariables.ts delete mode 100644 web/utils/memory.test.ts delete mode 100644 web/utils/memory.ts delete mode 100644 web/utils/messageRequestBuilder.ts delete mode 100644 web/utils/model.ts delete mode 100644 web/utils/modelEngine.test.ts delete mode 100644 web/utils/modelEngine.ts delete mode 100644 web/utils/modelSource.ts delete mode 100644 web/utils/predefinedComponent.test.ts delete mode 100644 web/utils/predefinedComponent.ts delete mode 100644 web/utils/search.ts delete mode 100644 web/utils/settings.ts delete mode 100644 web/utils/threadMessageBuilder.test.ts delete mode 100644 web/utils/threadMessageBuilder.ts delete mode 100644 web/utils/titleUtils.test.ts delete mode 100644 web/utils/titleUtils.ts diff --git a/.github/workflows/publish-npm-core.yml b/.github/workflows/publish-npm-core.yml index 462dbdc8e..403deb100 100644 --- a/.github/workflows/publish-npm-core.yml +++ b/.github/workflows/publish-npm-core.yml @@ -1,10 +1,9 @@ name: Publish core Package to npmjs on: push: - tags: ["v[0-9]+.[0-9]+.[0-9]+-core"] - paths: ["core/**", ".github/workflows/publish-npm-core.yml"] - pull_request: - paths: ["core/**", ".github/workflows/publish-npm-core.yml"] + tags: ['v[0-9]+.[0-9]+.[0-9]+-core'] + paths: ['core/**', '.github/workflows/publish-npm-core.yml'] + workflow_dispatch: jobs: build-and-publish-plugins: environment: production @@ -12,7 +11,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: "0" + fetch-depth: '0' token: ${{ secrets.PAT_SERVICE_ACCOUNT }} - name: Install jq @@ -24,7 +23,7 @@ jobs: env: GITHUB_REF: ${{ github.ref }} - - name: "Get Semantic Version from tag" + - name: 'Get Semantic Version from tag' if: github.event_name == 'push' run: | # Get the tag from the event @@ -42,8 +41,8 @@ jobs: # Setup .npmrc file to publish to npm - uses: actions/setup-node@v3 with: - node-version: "20.x" - registry-url: "https://registry.npmjs.org" + node-version: '20.x' + registry-url: 'https://registry.npmjs.org' - run: cd core && corepack enable && corepack prepare yarn@4.5.3 --activate && yarn --version && yarn config set -H enableImmutableInstalls false && yarn install && yarn build diff --git a/.github/workflows/publish-npm-joi.yml b/.github/workflows/publish-npm-joi.yml deleted file mode 100644 index 867ad80fe..000000000 --- a/.github/workflows/publish-npm-joi.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Publish joi Package to npmjs -on: - push: - tags: ["v[0-9]+.[0-9]+.[0-9]+-joi"] - paths: ["joi/**", ".github/workflows/publish-npm-joi.yml"] - pull_request: - paths: ["joi/**", ".github/workflows/publish-npm-joi.yml"] -jobs: - build-and-publish-plugins: - environment: production - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: "0" - token: ${{ secrets.PAT_SERVICE_ACCOUNT }} - - - name: Install jq - uses: dcarbone/install-jq-action@v2.0.1 - - - name: Extract tag name without v prefix - id: get_version - run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV && echo "::set-output name=version::${GITHUB_REF#refs/tags/v}" - env: - GITHUB_REF: ${{ github.ref }} - - - name: "Get Semantic Version from tag" - if: github.event_name == 'push' - run: | - # Get the tag from the event - tag=${GITHUB_REF#refs/tags/v} - # remove the -joi suffix - new_version=$(echo $tag | sed -n 's/-joi//p') - echo $new_version - # Replace the old version with the new version in package.json - jq --arg version "$new_version" '.version = $version' joi/package.json > /tmp/package.json && mv /tmp/package.json joi/package.json - - # Print the new version - echo "Updated package.json version to: $new_version" - cat joi/package.json - - # Setup .npmrc file to publish to npm - - uses: actions/setup-node@v3 - with: - node-version: "20.x" - registry-url: "https://registry.npmjs.org" - - - run: cd joi && corepack enable && corepack prepare yarn@4.5.3 --activate && yarn --version && yarn config set -H enableImmutableInstalls false && yarn install && yarn build - - - run: cd joi && yarn publish --access public - if: github.event_name == 'push' - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/template-tauri-build-linux-x64.yml b/.github/workflows/template-tauri-build-linux-x64.yml index 7eb946706..6a15a2ee0 100644 --- a/.github/workflows/template-tauri-build-linux-x64.yml +++ b/.github/workflows/template-tauri-build-linux-x64.yml @@ -119,8 +119,8 @@ jobs: "usr/lib/Jan/binaries/libvulkan.so": "binaries/libvulkan.so"}' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json fi mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json - jq --arg version "${{ inputs.new_version }}" '.version = $version' web/package.json > /tmp/package.json - mv /tmp/package.json web/package.json + jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json + mv /tmp/package.json web-app/package.json ctoml ./src-tauri/Cargo.toml package.version "${{ inputs.new_version }}" cat ./src-tauri/Cargo.toml diff --git a/.github/workflows/template-tauri-build-macos.yml b/.github/workflows/template-tauri-build-macos.yml index 9ad2cf1ba..e3c457433 100644 --- a/.github/workflows/template-tauri-build-macos.yml +++ b/.github/workflows/template-tauri-build-macos.yml @@ -120,8 +120,8 @@ jobs: # Update tauri.conf.json jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json - jq --arg version "${{ inputs.new_version }}" '.version = $version' web/package.json > /tmp/package.json - mv /tmp/package.json web/package.json + jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json + mv /tmp/package.json web-app/package.json ctoml ./src-tauri/Cargo.toml package.version "${{ inputs.new_version }}" cat ./src-tauri/Cargo.toml diff --git a/.github/workflows/template-tauri-build-windows-x64.yml b/.github/workflows/template-tauri-build-windows-x64.yml index e6f948c9a..54c236485 100644 --- a/.github/workflows/template-tauri-build-windows-x64.yml +++ b/.github/workflows/template-tauri-build-windows-x64.yml @@ -97,8 +97,8 @@ jobs: # Update tauri.conf.json jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true | .bundle.windows.nsis.template = "tauri.bundle.windows.nsis.template"' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json - jq --arg version "${{ inputs.new_version }}" '.version = $version' web/package.json > /tmp/package.json - mv /tmp/package.json web/package.json + jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json + mv /tmp/package.json web-app/package.json ctoml ./src-tauri/Cargo.toml package.version "${{ inputs.new_version }}" echo "---------Cargo.toml---------" diff --git a/Makefile b/Makefile index db83e6b21..56b50a9d2 100644 --- a/Makefile +++ b/Makefile @@ -24,88 +24,26 @@ ifeq ($(OS),Windows_NT) echo "skip" endif yarn install - yarn build:joi yarn build:core yarn build:extensions -check-file-counts: install-and-build -ifeq ($(OS),Windows_NT) - powershell -Command "if ((Get-ChildItem -Path pre-install -Filter *.tgz | Measure-Object | Select-Object -ExpandProperty Count) -ne (Get-ChildItem -Path extensions -Directory | Where-Object Name -like *-extension* | Measure-Object | Select-Object -ExpandProperty Count)) { Write-Host 'Number of .tgz files in pre-install does not match the number of subdirectories in extensions with package.json'; exit 1 } else { Write-Host 'Extension build successful' }" -else - @tgz_count=$$(find pre-install -type f -name "*.tgz" | wc -l); dir_count=$$(find extensions -mindepth 1 -maxdepth 1 -type d -exec test -e '{}/package.json' \; -print | wc -l); if [ $$tgz_count -ne $$dir_count ]; then echo "Number of .tgz files in pre-install ($$tgz_count) does not match the number of subdirectories in extension ($$dir_count)"; exit 1; else echo "Extension build successful"; fi -endif - -dev: check-file-counts - yarn dev - -dev-tauri: check-file-counts +dev: install-and-build yarn install:cortex yarn download:bin yarn copy:lib - CLEAN=true yarn dev:tauri + yarn dev + +# Deprecated soon +dev-tauri: install-and-build + yarn install:cortex + yarn download:bin + yarn copy:lib + yarn dev:tauri # Linting -lint: check-file-counts +lint: install-and-build yarn lint -update-playwright-config: -ifeq ($(OS),Windows_NT) - echo -e "const RPconfig = {\n\ - apiKey: '$(REPORT_PORTAL_API_KEY)',\n\ - endpoint: '$(REPORT_PORTAL_URL)',\n\ - project: '$(REPORT_PORTAL_PROJECT_NAME)',\n\ - launch: '$(REPORT_PORTAL_LAUNCH_NAME)',\n\ - attributes: [\n\ - {\n\ - key: 'key',\n\ - value: 'value',\n\ - },\n\ - {\n\ - value: 'value',\n\ - },\n\ - ],\n\ - description: '$(REPORT_PORTAL_DESCRIPTION)',\n\ - }\n$$(cat electron/playwright.config.ts)" > electron/playwright.config.ts; - sed -i "s/^ reporter: .*/ reporter: [['@reportportal\/agent-js-playwright', RPconfig]],/" electron/playwright.config.ts - -else ifeq ($(shell uname -s),Linux) - echo "const RPconfig = {\n\ - apiKey: '$(REPORT_PORTAL_API_KEY)',\n\ - endpoint: '$(REPORT_PORTAL_URL)',\n\ - project: '$(REPORT_PORTAL_PROJECT_NAME)',\n\ - launch: '$(REPORT_PORTAL_LAUNCH_NAME)',\n\ - attributes: [\n\ - {\n\ - key: 'key',\n\ - value: 'value',\n\ - },\n\ - {\n\ - value: 'value',\n\ - },\n\ - ],\n\ - description: '$(REPORT_PORTAL_DESCRIPTION)',\n\ - }\n$$(cat electron/playwright.config.ts)" > electron/playwright.config.ts; - sed -i "s/^ reporter: .*/ reporter: [['@reportportal\/agent-js-playwright', RPconfig]],/" electron/playwright.config.ts -else - echo "const RPconfig = {\n\ - apiKey: '$(REPORT_PORTAL_API_KEY)',\n\ - endpoint: '$(REPORT_PORTAL_URL)',\n\ - project: '$(REPORT_PORTAL_PROJECT_NAME)',\n\ - launch: '$(REPORT_PORTAL_LAUNCH_NAME)',\n\ - attributes: [\n\ - {\n\ - key: 'key',\n\ - value: 'value',\n\ - },\n\ - {\n\ - value: 'value',\n\ - },\n\ - ],\n\ - description: '$(REPORT_PORTAL_DESCRIPTION)',\n\ - }\n$$(cat electron/playwright.config.ts)" > electron/playwright.config.ts; - sed -i '' "s|^ reporter: .*| reporter: [['@reportportal\/agent-js-playwright', RPconfig]],|" electron/playwright.config.ts -endif - # Testing test: lint # yarn build:test @@ -114,16 +52,17 @@ test: lint yarn test # Builds and publishes the app -build-and-publish: check-file-counts - yarn build:publish - -# Build -build: check-file-counts +build-and-publish: install-and-build yarn build -build-tauri: check-file-counts +# Build +build: install-and-build + yarn build + +# Deprecated soon +build-tauri: install-and-build yarn copy:lib - yarn build-tauri + yarn build clean: ifeq ($(OS),Windows_NT) diff --git a/electron/.eslintrc.js b/electron/.eslintrc.js deleted file mode 100644 index 20e79804f..000000000 --- a/electron/.eslintrc.js +++ /dev/null @@ -1,46 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - env: { - node: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react/recommended', - ], - rules: { - 'react/prop-types': 'off', // In favor of strong typing - no need to dedupe - 'react/no-is-mounted': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-explicit-any': 'off', - }, - settings: { - react: { - createClass: 'createReactClass', // Regex for Component Factory to use, - // default to "createReactClass" - pragma: 'React', // Pragma to use, default to "React" - version: 'detect', // React version. "detect" automatically picks the version you have installed. - // You can also use `16.0`, `16.3`, etc, if you want to override the detected value. - // default to latest and warns if missing - // It will default to "detect" in the future - }, - linkComponents: [ - // Components used as alternatives to for linking, eg. - 'Hyperlink', - { name: 'Link', linkAttribute: 'to' }, - ], - }, - ignorePatterns: [ - 'build', - 'renderer', - 'node_modules', - '@global', - 'playwright-report', - 'test-data', - ], -} diff --git a/electron/@global/index.ts b/electron/@global/index.ts deleted file mode 100644 index b2d55fc1c..000000000 --- a/electron/@global/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export {} - -declare global { - namespace NodeJS { - interface Global { - core: any - } - } - var core: any | undefined -} diff --git a/electron/entitlements.mac.plist b/electron/entitlements.mac.plist deleted file mode 100644 index ad77a2a1e..000000000 --- a/electron/entitlements.mac.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - - com.apple.security.cs.allow-dyld-environment-variables - - com.apple.security.cs.disable-library-validation - - - \ No newline at end of file diff --git a/electron/handlers/common.ts b/electron/handlers/common.ts deleted file mode 100644 index a2a1bd2f7..000000000 --- a/electron/handlers/common.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Handler, RequestHandler } from '@janhq/core/node' -import { ipcMain } from 'electron' -import { windowManager } from '../managers/window' - -export function injectHandler() { - const ipcWrapper: Handler = ( - route: string, - listener: (...args: any[]) => any - ) => - ipcMain.handle(route, async (_event, ...args: any[]) => { - return listener(...args) - }) - - const handler = new RequestHandler( - ipcWrapper, - (channel: string, args: any) => - windowManager.mainWindow?.webContents.send(channel, args) - ) - handler.handle() -} diff --git a/electron/handlers/native.ts b/electron/handlers/native.ts deleted file mode 100644 index f8f70c302..000000000 --- a/electron/handlers/native.ts +++ /dev/null @@ -1,327 +0,0 @@ -import { app, ipcMain, dialog, shell, nativeTheme } from 'electron' -import { autoUpdater } from 'electron-updater' -import { join } from 'path' -import { windowManager } from '../managers/window' -import { - ModuleManager, - getJanDataFolderPath, - getJanExtensionsPath, - init, - AppEvent, - NativeRoute, - SelectFileProp, -} from '@janhq/core/node' -import { SelectFileOption } from '@janhq/core' -import { menu } from '../utils/menu' -import { migrate } from '../utils/migration' -import { createUserSpace } from '../utils/path' -import { setupExtensions } from '../utils/extension' - -const isMac = process.platform === 'darwin' - -export function handleAppIPCs() { - /** - * Handles the "openAppDirectory" IPC message by opening the app's user data directory. - * The `shell.openPath` method is used to open the directory in the user's default file explorer. - * @param _event - The IPC event object. - */ - ipcMain.handle(NativeRoute.openAppDirectory, async (_event) => { - shell.openPath(getJanDataFolderPath()) - }) - - ipcMain.handle(NativeRoute.appUpdateDownload, async (_event) => { - autoUpdater.downloadUpdate() - }) - - /** - * Handles the "setNativeThemeLight" IPC message by setting the native theme source to "light". - * This will change the appearance of the app to the light theme. - */ - ipcMain.handle(NativeRoute.setNativeThemeLight, () => { - nativeTheme.themeSource = 'light' - }) - - /** - * Handles the "setCloseApp" IPC message by closing the main application window. - * This effectively closes the application if no other windows are open. - */ - ipcMain.handle(NativeRoute.setCloseApp, () => { - windowManager.mainWindow?.close() - }) - - /** - * Handles the "setMinimizeApp" IPC message by minimizing the main application window. - * The window will be minimized to the system's taskbar or dock. - */ - ipcMain.handle(NativeRoute.setMinimizeApp, () => { - windowManager.mainWindow?.minimize() - }) - - /** - * Handles the "setMaximizeApp" IPC message. It toggles the maximization state of the main window. - * If the window is currently maximized, it will be un-maximized (restored to its previous size). - * If the window is not maximized, it will be maximized to fill the screen. - * @param _event - The IPC event object. - */ - ipcMain.handle(NativeRoute.setMaximizeApp, async (_event) => { - if (windowManager.mainWindow?.isMaximized()) { - windowManager.mainWindow.unmaximize() - } else { - windowManager.mainWindow?.maximize() - } - }) - - /** - * Handles the "setNativeThemeDark" IPC message by setting the native theme source to "dark". - * This will change the appearance of the app to the dark theme. - */ - ipcMain.handle(NativeRoute.setNativeThemeDark, () => { - nativeTheme.themeSource = 'dark' - }) - - /** - * Opens a URL in the user's default browser. - * @param _event - The IPC event object. - * @param url - The URL to open. - */ - ipcMain.handle(NativeRoute.openExternalUrl, async (_event, url) => { - shell.openExternal(url) - }) - - /** - * Opens a URL in the user's default browser. - * @param _event - The IPC event object. - * @param url - The URL to open. - */ - ipcMain.handle(NativeRoute.openFileExplore, async (_event, url) => { - shell.openPath(url) - }) - - /** - * Relaunches the app in production - reload window in development. - * @param _event - The IPC event object. - * @param url - The URL to reload. - */ - ipcMain.handle(NativeRoute.relaunch, async (_event) => { - ModuleManager.instance.clearImportedModules() - - if (app.isPackaged) { - app.relaunch() - app.exit() - } else { - for (const modulePath in ModuleManager.instance.requiredModules) { - delete require.cache[ - require.resolve(join(getJanExtensionsPath(), modulePath)) - ] - } - init({ - // Function to check from the main process that user wants to install a extension - confirmInstall: async (_extensions: string[]) => { - return true - }, - // Path to install extension to - extensionsPath: getJanExtensionsPath(), - }) - windowManager.mainWindow?.reload() - } - }) - - /** - * Handles the "selectDirectory" IPC message to open a dialog for selecting a directory. - * If no main window is found, logs an error and exits. - * @returns {string} The path of the selected directory, or nothing if canceled. - */ - ipcMain.handle(NativeRoute.selectDirectory, async () => { - const mainWindow = windowManager.mainWindow - if (!mainWindow) { - console.error('No main window found') - return - } - const { canceled, filePaths } = await dialog.showOpenDialog(mainWindow, { - title: 'Select a folder', - buttonLabel: 'Select Folder', - properties: ['openDirectory', 'createDirectory'], - }) - if (canceled) { - return - } else { - return filePaths[0] - } - }) - - /** - * Handles the "selectFiles" IPC message to open a dialog for selecting files. - * Allows options for setting the dialog title, button label, and selection properties. - * Logs an error if no main window is found. - * @param _event - The IPC event object. - * @param option - Options for customizing file selection dialog. - * @returns {string[]} An array of selected file paths, or nothing if canceled. - */ - ipcMain.handle( - NativeRoute.selectFiles, - async (_event, option?: SelectFileOption) => { - const mainWindow = windowManager.mainWindow - if (!mainWindow) { - console.error('No main window found') - return - } - - const title = option?.title ?? 'Select files' - const buttonLabel = option?.buttonLabel ?? 'Select' - const props: SelectFileProp[] = ['openFile'] - - if (option?.allowMultiple) { - props.push('multiSelections') - } - - if (option?.selectDirectory) { - props.push('openDirectory') - } - console.debug(`Select files with props: ${props}`) - const { canceled, filePaths } = await dialog.showOpenDialog(mainWindow, { - title, - buttonLabel, - properties: props, - filters: option?.filters, - }) - - if (canceled) return - - return filePaths - } - ) - - /** - * Handles the "hideQuickAskWindow" IPC message to hide the quick ask window. - * @returns A promise that resolves when the window is hidden. - */ - ipcMain.handle( - NativeRoute.hideQuickAskWindow, - async (): Promise => windowManager.hideQuickAskWindow() - ) - - /** - * Handles the "sendQuickAskInput" IPC message to send user input to the main window. - * @param _event - The IPC event object. - * @param input - User input string to be sent. - */ - ipcMain.handle( - NativeRoute.sendQuickAskInput, - async (_event, input: string): Promise => { - windowManager.mainWindow?.webContents.send( - AppEvent.onUserSubmitQuickAsk, - input - ) - } - ) - - /** - * Handles the "showOpenMenu" IPC message to show the context menu at given coordinates. - * Only applicable on non-Mac platforms. - * @param e - The event object. - * @param args - Contains coordinates where the menu should appear. - */ - ipcMain.handle(NativeRoute.showOpenMenu, function (e, args) { - if (!isMac && windowManager.mainWindow) { - menu.popup({ - window: windowManager.mainWindow, - x: args.x, - y: args.y, - }) - } - }) - - /** - * Handles the "hideMainWindow" IPC message to hide the main application window. - * @returns A promise that resolves when the window is hidden. - */ - ipcMain.handle( - NativeRoute.hideMainWindow, - async (): Promise => windowManager.hideMainWindow() - ) - - /** - * Handles the "showMainWindow" IPC message to show the main application window. - * @returns A promise that resolves when the window is shown. - */ - ipcMain.handle( - NativeRoute.showMainWindow, - async (): Promise => windowManager.showMainWindow() - ) - - /** - * Handles the "quickAskSizeUpdated" IPC message to update the size of the quick ask window. - * Resizes window by the given height offset. - * @param _event - The IPC event object. - * @param heightOffset - The amount of height to increase. - * @returns A promise that resolves when the window is resized. - */ - ipcMain.handle( - NativeRoute.quickAskSizeUpdated, - async (_event, heightOffset: number): Promise => - windowManager.expandQuickAskWindow(heightOffset) - ) - - /** - * Handles the "ackDeepLink" IPC message to acknowledge a deep link. - * Triggers handling of deep link in the application. - * @param _event - The IPC event object. - * @returns A promise that resolves when the deep link is acknowledged. - */ - ipcMain.handle(NativeRoute.ackDeepLink, async (_event): Promise => { - windowManager.ackDeepLink() - }) - - /** - * Handles the "factoryReset" IPC message to reset the application to its initial state. - * Clears loaded modules, recreates user space, runs migrations, and sets up extensions. - * @param _event - The IPC event object. - * @returns A promise that resolves after the reset operations are complete. - */ - ipcMain.handle(NativeRoute.factoryReset, async (_event): Promise => { - ModuleManager.instance.clearImportedModules() - return createUserSpace().then(migrate).then(setupExtensions) - }) - - /** - * Handles the "startServer" IPC message to start the Jan API server. - * Initializes and starts server with provided configuration options. - * @param _event - The IPC event object. - * @param args - Configuration object containing host, port, CORS settings etc. - * @returns Promise that resolves when server starts successfully - */ - ipcMain.handle( - NativeRoute.startServer, - async (_event, args): Promise => { - const { startServer } = require('@janhq/server') - return startServer({ - host: args?.host, - port: args?.port, - isCorsEnabled: args?.isCorsEnabled, - isVerboseEnabled: args?.isVerboseEnabled, - prefix: args?.prefix, - }) - } - ) - - /** - * Handles the "stopServer" IPC message to stop the Jan API server. - * Gracefully shuts down the server instance. - * @param _event - The IPC event object - * @returns Promise that resolves when server stops successfully - */ - ipcMain.handle(NativeRoute.stopServer, async (_event): Promise => { - /** - * Stop Jan API Server. - */ - const { stopServer } = require('@janhq/server') - return stopServer() - }) - - /** - * Handles the "appToken" IPC message to generate a random app ID. - */ - ipcMain.handle(NativeRoute.appToken, async (_event): Promise => { - return process.env.appToken ?? 'cortex.cpp' - }) -} diff --git a/electron/handlers/update.ts b/electron/handlers/update.ts deleted file mode 100644 index 5dcbda582..000000000 --- a/electron/handlers/update.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { app, dialog } from 'electron' -import { windowManager } from './../managers/window' -import { - ProgressInfo, - UpdateDownloadedEvent, - UpdateInfo, - autoUpdater, -} from 'electron-updater' -import { AppEvent } from '@janhq/core/node' -import { trayManager } from '../managers/tray' - -export let waitingToInstallVersion: string | undefined = undefined - -export function handleAppUpdates() { - /* Should not check for update during development */ - if (!app.isPackaged) { - return - } - - /* New Update Available */ - autoUpdater.on('update-available', async (_info: UpdateInfo) => { - windowManager.mainWindow?.webContents.send( - AppEvent.onAppUpdateAvailable, - {} - ) - }) - - /* App Update Completion Message */ - autoUpdater.on('update-downloaded', async (_info: UpdateDownloadedEvent) => { - windowManager.mainWindow?.webContents.send( - AppEvent.onAppUpdateDownloadSuccess, - {} - ) - const action = await dialog.showMessageBox({ - message: `Update downloaded. Please restart the application to apply the updates.`, - buttons: ['Restart', 'Later'], - }) - if (action.response === 0) { - trayManager.destroyCurrentTray() - windowManager.closeQuickAskWindow() - waitingToInstallVersion = _info?.version - autoUpdater.quitAndInstall() - } - }) - - /* App Update Error */ - autoUpdater.on('error', (info: Error) => { - windowManager.mainWindow?.webContents.send( - AppEvent.onAppUpdateDownloadError, - { failedToInstallVersion: waitingToInstallVersion, info } - ) - }) - - /* App Update Progress */ - autoUpdater.on('download-progress', (progress: ProgressInfo) => { - console.debug('app update progress: ', progress.percent) - windowManager.mainWindow?.webContents.send( - AppEvent.onAppUpdateDownloadUpdate, - { - ...progress, - } - ) - }) - - autoUpdater.autoDownload = false - autoUpdater.autoInstallOnAppQuit = true - if (process.env.CI !== 'e2e') { - autoUpdater.checkForUpdates() - } -} diff --git a/electron/icons/512x512.png b/electron/icons/512x512.png deleted file mode 100644 index 289f99ded85e1e3cc91b17af6b607d2cafd97cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38651 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 diff --git a/electron/icons/icon-tray@2x.png b/electron/icons/icon-tray@2x.png deleted file mode 100644 index a82c285f53bd7bce072322ef67f6e9ffd73aba28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2269 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

oXzv0@=C(cQRtO?#sA)h}wY`w59LU>0=PN|T@( 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 z zXDRTy2H}n7J=iuk&;t{txk(QT3uCxv`l5FE1BhKcAzp;<_>cGdcl@5E$A8QJoehJ? zSK9$P@CF9{$!t7kjtjEmmw|3;1OEF|R^Fl}>-*fKH=qaFOLF4B&m5rjY#Gt`@Ah$K z!~D}R=y7EGz>cGs*FRhX&AuM_0LXTd<3qP9sb_GW-4kLd9<#1LLB??z6f{T ztWh#t0ADZIsxaZgFIhkK`&WOX_%~Vu&ddYE+kZ6XH~b@e?_$4@{~z#Y0{rcYvg0-2 z{PbEMUzc{O|k@{)iUH9?p()fc}*Qe4fp9AGFT?y2hvjA4?y}39QkqK|hYn)&E~Thvos~ zK*;_8(gm#G6aCqm@Q?Z5{oDA@mIuIx4R8sW%eVg)Z;a>x+7gxM)pAo{JIPjaX#2J_a#v zi9#Yb=*Q%_^dq_+%@xGIAIJJ$*Z}Y6TnC|;9O4;s@@Jx8{`kL~`$05=yeP;(FYuwC z9P^utjwo05l~19+qyJ~{C(Av`$NrG3LE|wceMWTeM7nN>PPr0P>II8}VeWzLI5AB)a&1#Q*!4-}~=;_!(U1YC*m> zLae2K_LxZKkbMU{`T=*#neoJ`h&&+IsXx*RU5jKM#qKDgdZyr-hqO`s;t(741UdPa zWdPY+qywm9dMCgR%sC#?6)1KF_-A6FZH#l_`qMcV@Nu6I&(FqZmd+UhJe)z6$nm7* zl_YAw#o<@{L_X11+gO2x_bf(r4M3}=*>wG9j=#mYBfF;{=aVk=cxq1BL-8`iGmyJ- zEaKCj#%{mS0q_UDp_m3ao`ZB2iX#9I$6y`pg@tvqO!p<>q$?nw`-Ip$7Y@kwOwYZZ zdMv6>UAmaa3~{2+*>s(K9g;6JzmUw#K0ntnPv$i5fv+EEs(70RMMb zc`p}cwdMGcMBkZ!0zq`Sia0fgRk)en72I} zrlJ1}e}N9jufeccc`rC8Q9;xInz#OVKLj7D&49Tw0rv~S?lf_rxC6j<1Z3(bpKt~r z&|{zeo<7IY_dBAi}=hX@rXzZW8Z}DPjZEPsA<2e`wQqIr@3NTkbhbU zGWqGpd!gUR4`NLET#Ci?f6H6^F4{BwB%hGP02ioT`rbZ$^9>?kK1M*uRC{k5Y^ z0Xg3N{6}1n4-Wbcba(H4EOKz(%(%dFPOx`##z4TnBYFWZpWy*Niu=Btp(8Fk32NcQMR1818DHmJb>}Lk^eaZ<6mh(=P!UU zTV~^r{1B+cM0&Lh{18-jKK+^2MdrZI;o1GsG0NqV*CUbLV840{$h-u-BJ-GZ5NP(( znrN1d6$E&3cAP5U-vc?CYbak)T^&n`sxYM9Q2bL zjAe#!_)AF7?hJATy2%J^Sp&p2Cz+E6zEH;WRnf#i+z0;mtt*O|RFdrBzCZbeWE%u| z9Khur7TvLA<{GGrM7$cD!F#6trX$hXCA{~W?~d}+fV(d_HwAM5jZ>6Gu1hFIxr~`{ zzqPY?^X=R}aiBsXQO(c(vWh-w-~`konA5~{O3v81nc>9Ci3!BD z3SY|^n!&tcf&Pgz{bpLA^Ng=Ckoz_)3~Kkk z#?{ID9p>;4&^j1=71X~4i|A0AjR(rf0ItoDpXf$0dK9MyTI_+CJ*r6wte$NPW?%Sk zK9+b-qy;&?4!r-a2ILPNhGJjcp0oW=z;iY5{--qyk`?d^(fa8E7F+$zw&kUu+)Pp` ze4#EWDX1zVlo8nhz&#UiNBHmjH>3H>;nBPY*{`3OzccN$&LiiaA4B{}bY=jujVdSl zfNlDYUMT)CZ6AA{V!<8Xe6^~K491e2go_~iJY=FPLAm2lv=Upo+A24KP#j--4{x0B+ z>eTWxGb8zDVEMmjr7K}C&n#b`oF75BMD&(GjzDrYOlXY{au4x?Kh{xy=n2q~(>1#| zq|1S~sQ&cxH2z60j~<1wpd58ccA_1e9|D@R7vv`CAU!zy9{=fMn9mGgvrobr<0D`8 z=s4*65zt?GVDDDVw%rIWa;@N#@7KhrP6gKIXb*=s2J7JI8XT~5xk-a)ZWrbx7@>JU z&d=v09D(!Q@CA8DaQLw{=Rb}6%>9r~V@n-e3^_Ryz)uI*FN)+p({0KbBAa-H#)X z+XhP1V5|+(S!>$->8vAd{`3wU+WhHA)*mf-Sd4bejC>vK7=F5)%%5(_P+}M@8Om8L z5fecjXo(n}+)k38oPg0zPJ0xz#A!HaiR6`t2rbDAb%S;iU0_Cur~|KGq6F#?FsvV1 z9L9!&wgFT*P61jPOoW0LS|}%@nNM!;Ogb@%w8h{crtuXxVSE2xN!)KCG#09lP+6L4>4!Ci;o&6UD?BwBV z2H%cY?@&&U9EW>C zyaK*iDtu9%qf(@3vXu4Va0+c~?`2rW=#ulTfaAX#q~97J?B~J)q9ClhQ2oUVXd%D) zbM6TFSdd>Qa;6UtgJ1p}a*Yn;wK({czjdE~Lni~+4-V@Eb%47BX#GkT=@%-MaGM0OwpoB0pdD32`UDJ!j3yYYNB@g@n?Hl~ zSN}seK+YQS3sBpFp0D!n`oLTz*9w&rYkvjHpPfhfWi*fH>N8zq)i;Pmb?*c3<1fu= z6f??x7$bo8Jb-PSw)k_<0PW?5dsohN|9^B2#r{z}%&%(nKo-e+n;|}0HB&P&2M9l% zDou~!fc4M`h=WwX+VCcd4gAyzPLOpw+KW9$Ui}}zj{c8woG6a>EBd28s5Twy&_Ir0 zpVgnxaR$D!yhIUL!$$%9JrKjWm!BCYiDLUG#ydNPO|I*J+NK|4WxoUWOdnJ)gy=u> zd#)Dgr0KnaP$&4UzHJ8D?_2U-P_!R%8g|FLyhOIgg-HugP6}`-KH6V*sB!qm z@S}J)T^u}vB)rQOK=?_Qpgprd<1B!+9Lax4)`OKm_jkaLXDDwsqkq2E8q8Tw`&VE` zeNmno)e8R3-dUuFrfY1#CeNWq(LQjPuWiLy@w<`k0lK3(&`^?-tTqGt{3dvY7vun8 ztl#!&{tPFiJL%#FAU^o(8uyv&(Hus5#36 z51_aowCTVLsC{_wt)`b;YxRWqe)f2O$1!@o5UM>wb+8DZKO2)B?YBnx3l!Iy^+7Z) z%#Bk-`MRRKWCbKQMLEd^GhM#Q{7*It=>(KR`!n0~XYio^p*c(oHSlN;DH`j~`jg?0 z=t=$&{uww?3;W{^BR!9v6@Y$E*94M0f0TJ-H^H}>g1x)1pmwk5pS8aTUc>{m2N>AR8PvI}gN?MBQCCGCY<~i7y9kX*c=zfS!H1|9i|IG1M_EUFuU+}s}M zGcdc)KXW`?^8@=I0Eb`cQ}jGCkpIL#lb;zpgrAf5Rz(7A-*Ui6-suziCt-|uROg54 zu7LKheuNj!{c_LGk9}wVMzVus2-$?Wo~81&w)!8_A7Tbj>tF$}!^+-OR`l(K6X1rguGyC7r{Q9vE`XBhwssHGi zH!v5a;9E0uJ+j@b025rBkA-wffe(x7Y4-x1zpG0^I5H&-kZaypQ-;i7kHB{|aWmun zSxe4wgA57ej{Q{UifSLoF#LnH7{G1{u#s&n@)02>Km@sjJtiFx(nD)4;$ndR&1^VO zKlBVG$Vo%}Rqr~u-WB?MmxG?&f39QX&msANeOJve&wjEsh$jHYv)MI1Gx9#W1$rAI z*+F{YD?eX@yst%T2UHUU{|lcjH^}awd^*%kcA{rlz?@zQuzweSKz-2MhkYkgfZI>B zMfgnTrJ4`H`$zl5zW`>IwE-HBkX&C zG4}n)ziA(|zx${9@E_nO|AbfwIrc)XubN)_e)XHb<16x8$Z?K{?yKOJu)sZFZ`k)W zTWJ3Zb!;!p{qEcUuevjVkE*)&_^^o}A_~YNl`Vj~bbBqd7Hn(lvvyTlm)6==pH=H? zv9?-TOHiw=R$Fat%hQ$u0tt{z0xO=gM zu#r3b`9vi5cJFNY4pero_P49XE4pR*3#3#$HeB^U3Mq#}ml_ z-RO32oU<+ZQS#a2FW0sC+e;k2PitPEyPcSD718bfXN=9u8q==WHdha4UjH}w#O&2) zGk3r{g)Q70&(~}JC(l>?d8*w;=QOS7*%%(QC)#DZ!83oQsubq`f4DB^Ys+_O#W@OxxKW$IkpXl%LA+4Fn0TrKV-LP=pkS7`5{+~tu%Hd zl@m7f%~wHw3DEAffxE{yGiDYAmN;#|7{3_Wyk|t8@x4iryj^pb>gcYiF}SEO1^CVe z_VjDihq6b4_x%gDS6ABh)Ot{UZDy>@&Tk2A^_y9L-mFgAUdS#jP{8 z+75pmYg?%29G|h8+`v-@#;AW7%a1}s#J0V7O#Gg-r>_cRIM}9mU*x7;vYnL8bSZWf z;)6x&^zzOx(GO3`KUI8JZ#2jJX6A0^jf~};r)4$nW&c<_B(2)fQt}{l$v^R+rAw*t zUtC#zn0A#<8nM%`iK&dmMqT@{eas7^>4Z+~{et%*2fiem7%+sn*n^~GIW_?fNj!5r z^VX{ebr_L#bmB?r_0t2XQ7>MgcsTlYjel-v&JHrN0Wo#3RdRWy1w7-eBN~H)*VM`9 z>^|!wU7VXW1({nhg`Soz6LQoe^hM5d&u#3}IPqxh^9K`u^ow2N5??qwXIFr=E<2c{ ztj=?MFFgM=`OG>oG^@8+yK`ZawEY8Ihl&d`FH`%|4}WJa+;6duK9kkQ2Q{x46IuRo zG#ec-(~b@r4=NI_KGT)tGSj_S#+8roP{1!Q8%@XS}srd>%a9Tksl} zsNE|r+xy8 zyPz1XnyL|xAUrNfo-^BE>h4h&GrHA&BL&Ao;6LDGe!7>*^IloxoZvjdg1Nl$Xx zt7D*>4#S#`pE@TDblNj|+G*x{XK136nsz^jY;=8z%i3wp{kK~CL&$&1A94%)gJk*( zWM3fv`O&#YKORV}pJ8~6xHb2^B3pZ_i4}+}0S{EpwV!pqQENTCaXm8oKIFmze24Eg zHt*Eqy`s&;;&5VggI#vXOO_9?sjwt4$`0a~?Cvj{srSH6$H53XSJO@g+qAUwmP*cp zUvC9-$-#GICKHO8`R@OnhhHyaEt59$5s z@^)ymbc#mB$w2llvT{!!Td|+`6!~Z*dft^|{%|~fDhw)-u1;eT{ZR)t0uT4*FJS2~ zF^uywuSL#$N;W?BzDD!&F!sMib5pLa6J)|qZ z=HOspS*@`}va~tA^Y{@JWEdHU@%Ja%Zo9QvGBRPg@lEXWe2Aw(GO*%)2?L7%&3+et zhrH8(-_Iv3ZAwEq*o9#qqkfg24|Kj#QjqyYwVN4pTaE4^MrUC2>}zW9E9^0ZPxthW z+7>-5@vD$&e1FB8(qy}^EH7{67}6DzFZZ}uF7tE-{ThRB_mqEc_a%qR=F6EQiS^`q zhB43#=I`OKB6AyY+$Gy$XE7c6DnzgD8#_Ab@O}Qq(sf~179mDv!kCS{(Wtnmifbpk zG_8m6&wBK&s77TP>Luf`AhFvdpp!{hQ=KY+c^+p-Il zU5ffxXIluf^V8_j_spS~{&lG9`fsrFt(}GTUCn#)1pBXj_>{~>@dUqTTzdS9`bv4* z=Z}?Yj7aAwy9R$hD-Tmn5A7!k-FQxqP`=Tbh)-kRAx==u6Y_6nANnfoT4!m{zQlNn z5*z5vq_U2%y??A!HVg8Z*P3FV6|L|IEv(O9?rN>rPsE)0AnjxH9jXtyoOXDhC4uz% zk>_rSPD5X^!^;o+&y92R@~Ij1HxO^JTZ|9;tUnbU(h<>yEzsxngPs|Y)hPR#8)B*I z`lj}w?OLHxd|9Ml3YaK9wbECit5KXRZ%$~<9h6$PpZtiWLR>zdUSBly)aOQTi*9X5 zdc#uQ+3%-)^af(4NjKEP-}L9AlhIRU!FwO*pHh<^NUfVJ>pV7WUBf8a;3?WQYUy)yn6kxi5I0VG4=$iH-0n0cw0V8TYQSW@Gxjw!e#nZ^`~tkjLEdXvPQ*Nm5;rLrz?NX zL}IR2|G2%H1@ef>9p<9 zbIIScnUFs{>ngFCI1kZ`$xdu_x^Q}(DT2KC7JWBIu_*jwQvCCfH0;M#5a*S>sng0e z25TU;kx$n`Y?m;4fsZAk$$t;p?&LE4>gs2~;tyZ1*pOPo`OO>KrhF$};{&oIqr9I% zpSN~6u}^9Dw5AEd;Ng?Lr?a|Lo?=Py{BlbpX)Sx}G3ldUf21H12%&Z(J-#??c<8w%;}1Xj|FGEs@`r+YZHc z&S))0NApG?#nJbQ7lsceu1oL-I*&~JoMZ_9xOyj_X_pT{pU2l2U4M%7TeU`RWsi}M zm(gvJYAtSOKHo2WuH=2>!H3}0cc8~gg0`R1j+@HMv)>(koLO&(6YZ|W?wr(GcZWM? zhC`FL-nh05+X74WPZD0gC6sXuZMU~16uhZ8-^9y$p8mbv$Pw?P(cE{9t%rNYf%aE} zo2Sk3R!V}U>QCulJWR+^ZpLC8=#g7bo|VyodPZQIB6KYlfd{YE~SNWX>zi2pTzvW$W8Ba)2g^sdMD*0 z{Zvn>27XJj0}4Z4KYfQhshO18?*Wy?cLN?r(UVQ(Galw6<|u`5lU5n^TcERQl2h-h zxlS6M>$XSLBFdm0_7*#-({9o+P2!r%W%W$Sw8aVib8#K0QB~iQKk*y#l{t4SF}Ya> z*_WT-Oosc2W%@P4Yr^xL2tu^3u@_vzzNK>|h;QD-(}_1Au4XIz{wssmgnunN)PUtX z-vwgii^!VwEv|&I`YjKly$t+1f*;rm*fd_%7mWQ_Ft%On=$II} z_#5%{YJY#5ASXq^*-`_0FA%#&FX_DABmXKas-XP)KRK8KEk`6Vh}^15(F;lA;|YaXJ@D6%%Z8V2I2 zw&Z1wfrjPfn=>c7{P<&(Z?Hzu%(+O7V81(|$HU3u^S0l${t7P^?yk9L?<+Osr`8o) znbQtKBYR_yD4rfU^E&G{D)}D$QFZ@Sb$5b!f(aeFd|Qt6IvNY2$I_6f{+0%%lCNI&hx_HY`HcSh74x1oB31EI{i!G z3eci+UX0FG`7sXbv7fkoT1CXeWrc;a-X2Zb(h;NE)fxb{QZ{jO+fVFR)}8=vus31s ze&oE-8;)E|EbdQgep2>i`odsInt#Zpt^HQk{&Hfd?W44b*@tu=9Hm{@Y0{Qxx~;$T z5%j%m{pYD($}#OeKEF9aOv{uZ>zmFZFK-?=I740W z*iA?0P{-Z24B^ehMkkia!C{WRs!OkNHoVbEX}z3b%$lUQ_q3JK8_<4H}Ow~9fU!7>jlrh?(K8rM_bP48MBAb$5Gn(?)W;}@6>N3m%)c6v$Brt zq8(>R*Naa%HY1K7j=}L))%D?e?4_HzG#};-~caD#~J2~02kZQeRKyE^zQ@* z%Ly)(Z?pFIq>|`V-hUJxYE5rAqIkS1WzlcKzpfgTN*qh#HXHiOoi#x76Rer@eQIu+ zlFL~wmC^O8yY4f#(GApGyAWIgzl__#8-4@+a4G4X+G|t~@vp~}5%jD%1Y@lNpQ8sP5`3_-tZ)*UXZwuc^0uYYH+x0$&v>&&%k$4@w+?>MP2r*V;j!w6ZQP z5SH!w_!wRoeO3o+zyrStg+_3`^-ol$&cNkdiKm4B2ycnYw$ERM<+E<)ac)TsV{W<5 zchSr6!@`*(W*(;3?-;-8)#+u#uw@@#TU3zwG17a$74x;H_qnh{4>A@;hmMRLm=^vp zzQ~>wD?AvV<3{$E!;FXPbzXvO9~6&+vz~tr54owRV9iH_ktE9Yo!*m<=dApeD+X)5 z_MOL95y~3NdE>Xp&gMjw{Z47O?{{|Y6JW3q^WTY>{+>qMLt+^Q2G9LPdlNf>Ys_^YK@A_|ijG}K!JWb>#&XT% zvN*+!p2re5-@%{k!Gz0C&f_c>`HZoSyo2n#SLK(Rj;LMc0+pqC z#`^mtZEf~<<>9|Xv(D8KZ)fj|&xHTpxOH|_VwX9BzaJn?fLm93a;vG5O?MBZ0IcdvMb)=$|zs2=`u#Zy|F zCCMjR$D#Qu=>MzMINDQs(q4IB<>%@FyU9ZIb33~JYt)DGy)wECV)HA8l+giKMpMb( z$O4SLg#D`gMYrf51LonUU-riARo}2Y7F$B__YPQ7EBQcvKW!R+XJj9J3;E~;e>>REhCd=M#iXJ(W0Qa_R0Lk_JIdGo z3Ckp(!^kWL`onvXuj~X4kjkDWJTw@V-?FhwV~o=`5f2xUeGfeU3rVGs-KNd(LxK;E z;d9Rmbq+f-_vrP5Q^S|Tm+PFW&3blxK}!od_6Ml@BJQm* zMP-1a5r3q+?>96k-sWMjMeI!)Lh^Oxy(h(wC@<>$%;eJctNC8<@};j2S-JlsijgLM zj&}`zk37C(d~S54ZGW4R|J~Ftf^G0lo&P6)1oAqhK4y%(hOPfBz8l^T9-tlBXyIDp z6PtOf`~okiXq!bDYrt@R4L{ut@57%j>CC*A1t+K1&jQ;U4oz!$p4dRm@OL$LO)ZVi zralMN#_*MuClfyg{pXGFvA4q8&6oZidE{h=m$p9@?Ma zUKHPj#{Q|{YfJL8r?R#zWqw{Qe!0&&IB+!b`4hBiJ{&~f{b^&rQ5oH%z5#DseP2$= z4D$Sge8%9(9+%E9F{KIa!uusL9ylMm82g($0>~!tygfG5Zbsj^ zfVJ@fVYmr$>iL#*{EC~g(1{&3eS7pG=5Q+G^MB4m_9@TK9&XlM^rwoI)^kS3@k=&- zgg$;mG2y-Qz7k~9*)j(m&}o6rLR_?y2L$%PEfsPlyO+2pUHV=ab2+*ycr~N53iDeO z$E*&tWxAr1CI&hi=NO+PG4bE8NnYUtJ{o~upb|)d5iHA(MXKSC<-e~hI)#vIUt@9%+OBIfDJ_ulT$}@8B06rcA@f@;QPZZ#v&!R~=ZJ zv;F(%8QImt71u(xEvhGbbQ?JLls(j zvcrFVw#Lo{_$@K!3h0Lj&!?Z2*L*2?y+ZqIA4sG9&6%LA<;~be-M;X}7p2GiHhtL4 zUa@b~rj}{S$Npg_HkY;yqfaUy6l@eO{yXxEjLbQ*@6_~q@zrJOOZLZ&^Perd5Z%p{ zx0mc4&tCeAb1EWhIm0c+21jQVjm>TS<|%277o6+pZV%EIZOBu^kLr+b&QW6XRS!<7 z`K&pkhdEG|AG}U@n6rl`UcY1;4P8s2HA=mU=#v@LDVzGL5B{)h!-k8|u{>5%kbb9V zwDs#Lo$)d_e0e0BdAfH%O8B$qltt%|e;wzx|MRQC=dWP@|E1<9GSVY`+K(8I6GF{N z@WC?~qXUtNKTdyd9h%;7Gqzuxx0m)w%}-)Dp5GHqz1|169+L*1Zt%K5Kz3t2(bZWP z#%|#U>_IaFZv;lLUpbdQ|75<{tB}uCzN>|Ior`>a6*l{o0HH}-cHf#ikT1vc$NVz> zfMAJ}H@AQ8^!1Gw^d;t>iVzP*yri2MJ1@~kP4rs}J{WJZHvHe<^zP^L0(t1L4TDE% zT=CBTT3wS}U$`gUIzo*5T;aI3D#CEf3Nz3!+iB?sv9D1i7HChR;U7V9VFuq5Z_l@?$nO zKOabKFtIr|Y}jzdg%zzg(Khw0_hs+f+_r-E+gamc=+N4%7@NwIIpn>sKIYvQps5l* zTehV8h~-)LzEEog?HILtlGc=wIY%4m%gFe==9d*~Ono3d__+MmMZ~_md`4v?XL4~{ zGg$wVtdBd`=UdpPbw+K3y{lowvrP}FZ_r)5VdC((ooM=;I9*Al9Y={bw`59LuP8>f`Er)n=db={GbXJt1{pndb9rD0TF+a-1k2xp-VJJ8{5#MbXJ>c0zKXg}jk z^{JxX`(_7UxuPVL@u3e_v|P!(Y@KE4y$@eDzM%P2r#_3kR2hAYvD&71547R^Q%c%f zk>?iW=VyIIcF2Y3E+j8{`;g6qlsZo)=H9ELHZ*U651);^^aA_SwguT`U?3SkW1K7y z4(fX)=A(2e6GAO_ogA#6EqohW-(BM~s=rm3pZOJ?k%ye~89Ps6UQF;sx~efbjps|J nz73x#={-7q*pyxo_tgPfRnE*yj>|*e?N!KUdxd#km)`vsJeAvh diff --git a/electron/icons/icon.png b/electron/icons/icon.png deleted file mode 100644 index 289f99ded85e1e3cc91b17af6b607d2cafd97cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38651 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 diff --git a/electron/icons_dev/jan-beta-tray.png b/electron/icons_dev/jan-beta-tray.png deleted file mode 100644 index eaca9ad9a31d1928aac57e26c1686c439e2b555b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmV+>1KIqEP)K~#7FbyLqz z6G0SyGu>@>OS?OTf{A$O!I*M#IT4M~HY8j$Q2qkx*@JN8RJfZ^5NhDgRz8+e1V{s^`$#O6U&;|#NHKv>C`h5;P4D-TDtsnSCi^Z@}gD0EZ*5wQI`sg8b2H;;}8V`yDcRpOJy z9I{~*3nBzZqH7P#dqoC_AP|bI5F_j`p7^W4!Nea7C4`W)WmT(Lezhq@h7*Q_jmu3V>@($PbfNM68{;WMRwJa_YR$RlxFQe(Vg>}} z#a6RndISz*5jhfFtd~wQj5({kk>FR9m5cM5fiMP1QTkmEgwzCWUnD#nwGEE|`=u=J zyb&C`vC#T?s(Ljm1Okeh7%Y)Fj(aO$(N8X83V27)Yuo0lMMQn`yxUy<*h;t2)Zhwh zm4ESRjDoAGXJ}jB%Q0XzKcMW4ypTc&tqp?e_BiBQ%V4oE*jC3?dkN%zZjBfM7xIZO zhuHLnvzN+y?a^16Bhkd<&5D3;+NC07*qoM6N<$g5`l=CIA2c diff --git a/electron/icons_dev/jan-beta-tray@2x.png b/electron/icons_dev/jan-beta-tray@2x.png deleted file mode 100644 index deb83aaced596a325dd7f414e90260c2500615df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1826 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 diff --git a/electron/icons_dev/jan-beta.png b/electron/icons_dev/jan-beta.png deleted file mode 100644 index 4b715494d78b5c0720ca44daebb7150e1a2979c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49895 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 diff --git a/electron/icons_dev/jan-nightly-512x512.png b/electron/icons_dev/jan-nightly-512x512.png deleted file mode 100644 index 23f53294714ec9ff900251ea4d4da4aaac9a9ef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50474 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 PQ2@P1hFaAR?IQjM0@H$q diff --git a/electron/icons_dev/jan-nightly-tray.png b/electron/icons_dev/jan-nightly-tray.png deleted file mode 100644 index bf164a0a65b42980a4bab4bdc5ab7608f0919249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmV-J1HAl+P)$k*ANwmQHig#bRq?B+UzAsrD+EaeQwuAp8A+0)Pn&Fn4Wijjk%2 z@|6G{AGd~B7Py{pR#R1=RcroUQ68&4bc)_HKvWCN^nUY^!#p(c%RU%Vs;Z zW6*2IDN(v95d;OR(=EFU$mYmwCQ07qxnT~y1BPYXh`)(qJr6KO*(m$5qLRo z7Fgo?hTha%08B{K9~Co=>aQ#zc#aMdeBp4eds0^!gn$o+&!*0WB1x;=O}cfKt-1in z$LHzf)j&Kk-P*52+@8Y%aN$Vue2WBQ=T<;opYYeW0Ie!T`L*^u!&sgvI&Dfno->=e z43}8z=r`R)A2_T|jkN*IQmp!0PD{G3D;Q%b9*;wRe?K^YPO)Q&L;~9FwnqIK2ClFdIa#_rXegYQ zkuJuFUQ>(PzSOh4s$L1;Cer7O5#;E=CJDBwpxP=uOO|Ejqf?s8_78K3L(x3ttFHh6 N002ovPDHLkV1igbaFqZ6 diff --git a/electron/icons_dev/jan-nightly-tray@2x.png b/electron/icons_dev/jan-nightly-tray@2x.png deleted file mode 100644 index 3cab5709d5714bbed81600c909d028713d6cae0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1908 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 A;s5{u diff --git a/electron/icons_dev/jan-nightly.png b/electron/icons_dev/jan-nightly.png deleted file mode 100644 index 23f53294714ec9ff900251ea4d4da4aaac9a9ef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50474 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 PQ2@P1hFaAR?IQjM0@H$q diff --git a/electron/jest.config.js b/electron/jest.config.js deleted file mode 100644 index ec5968ccd..000000000 --- a/electron/jest.config.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - collectCoverageFrom: ['src/**/*.{ts,tsx}'], - modulePathIgnorePatterns: ['/tests'], - moduleNameMapper: { - '@/(.*)': '/src/$1', - }, - runner: './testRunner.js', - transform: { - '^.+\\.tsx?$': [ - 'ts-jest', - { - diagnostics: false, - }, - ], - }, -} diff --git a/electron/main.ts b/electron/main.ts deleted file mode 100644 index 59e72ca24..000000000 --- a/electron/main.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { app, BrowserWindow } from 'electron' - -import { join, resolve } from 'path' -/** - * Managers - **/ -import { windowManager } from './managers/window' -import { getAppConfigurations, log } from '@janhq/core/node' - -/** - * IPC Handlers - **/ -import { injectHandler } from './handlers/common' -import { handleAppUpdates } from './handlers/update' -import { handleAppIPCs } from './handlers/native' - -/** - * Utils - **/ -import { setupMenu } from './utils/menu' -import { createUserSpace } from './utils/path' -import { migrate } from './utils/migration' -import { cleanUpAndQuit } from './utils/clean' -import { setupExtensions } from './utils/extension' -import { setupCore } from './utils/setup' -import { setupReactDevTool } from './utils/dev' - -import { trayManager } from './managers/tray' -import { logSystemInfo } from './utils/system' -import { registerGlobalShortcuts } from './utils/shortcut' -import { registerLogger } from './utils/logger' -import { randomBytes } from 'crypto' - -const preloadPath = join(__dirname, 'preload.js') -const preloadQuickAskPath = join(__dirname, 'preload.quickask.js') -const rendererPath = join(__dirname, '..', 'renderer') -const quickAskPath = join(rendererPath, 'search.html') -const mainPath = join(rendererPath, 'index.html') - -const mainUrl = 'http://localhost:3000' -const quickAskUrl = `${mainUrl}/search` - -const gotTheLock = app.requestSingleInstanceLock() - -if (process.defaultApp) { - if (process.argv.length >= 2) { - app.setAsDefaultProtocolClient('jan', process.execPath, [ - resolve(process.argv[1]), - ]) - } -} else { - app.setAsDefaultProtocolClient('jan') -} - -const createMainWindow = () => { - const startUrl = app.isPackaged ? `file://${mainPath}` : mainUrl - windowManager.createMainWindow(preloadPath, startUrl) -} - -// Generate a random token for the app -// This token is used for authentication when making request to cortex.cpp server -process.env.appToken = randomBytes(16).toString('hex') - -app - .whenReady() - .then(() => { - if (!gotTheLock) { - app.quit() - throw new Error('Another instance of the app is already running') - } else { - app.on( - 'second-instance', - (_event, commandLine, _workingDirectory): void => { - if (process.platform === 'win32' || process.platform === 'linux') { - // this is for handling deeplink on windows and linux - // since those OS will emit second-instance instead of open-url - const url = commandLine.pop() - if (url) { - windowManager.sendMainAppDeepLink(url) - } - } - windowManager.showMainWindow() - } - ) - } - }) - .then(setupCore) - .then(createUserSpace) - .then(registerLogger) - .then(migrate) - .then(setupExtensions) - .then(setupMenu) - .then(handleIPCs) - .then(() => process.env.CI !== 'e2e' && createQuickAskWindow()) - .then(createMainWindow) - .then(handleAppUpdates) - .then(registerGlobalShortcuts) - .then(() => { - if (!app.isPackaged) { - setupReactDevTool() - windowManager.mainWindow?.webContents.openDevTools() - } - }) - .then(() => process.env.CI !== 'e2e' && trayManager.createSystemTray()) - .then(logSystemInfo) - .then(() => { - app.on('activate', () => { - if (!BrowserWindow.getAllWindows().length) { - createMainWindow() - } else { - windowManager.showMainWindow() - } - }) - }) - -app.on('open-url', (_event, url) => { - windowManager.sendMainAppDeepLink(url) -}) - -app.on('before-quit', function (_event) { - trayManager.destroyCurrentTray() -}) - -app.once('quit', () => { - cleanUpAndQuit() -}) - -app.once('window-all-closed', () => { - // Feature Toggle for Quick Ask - if ( - getAppConfigurations().quick_ask && - !windowManager.isQuickAskWindowDestroyed() - ) - return - cleanUpAndQuit() -}) - -function createQuickAskWindow() { - // Feature Toggle for Quick Ask - if (!getAppConfigurations().quick_ask) return - const startUrl = app.isPackaged ? `file://${quickAskPath}` : quickAskUrl - windowManager.createQuickAskWindow(preloadQuickAskPath, startUrl) -} - -/** - * Handles various IPC messages from the renderer process. - */ -function handleIPCs() { - // Inject core handlers for IPCs - injectHandler() - - // Handle native IPCs - handleAppIPCs() -} - -/* - ** Suppress Node error messages - */ -process.on('uncaughtException', function (err) { - log(`Error: ${err}`) -}) diff --git a/electron/managers/mainWindowConfig.ts b/electron/managers/mainWindowConfig.ts deleted file mode 100644 index 997d081c3..000000000 --- a/electron/managers/mainWindowConfig.ts +++ /dev/null @@ -1,21 +0,0 @@ -const DEFAULT_MIN_WIDTH = 400 -const DEFAULT_MIN_HEIGHT = 600 - -export const mainWindowConfig: Electron.BrowserWindowConstructorOptions = { - skipTaskbar: false, - minWidth: DEFAULT_MIN_WIDTH, - minHeight: DEFAULT_MIN_HEIGHT, - show: true, - // we want to go frameless on windows and linux - transparent: process.platform === 'darwin', - frame: process.platform === 'darwin', - titleBarStyle: 'hiddenInset', - vibrancy: 'fullscreen-ui', - visualEffectState: 'active', - backgroundMaterial: 'acrylic', - autoHideMenuBar: true, - trafficLightPosition: { - x: 16, - y: 10, - }, -} diff --git a/electron/managers/quickAskWindowConfig.ts b/electron/managers/quickAskWindowConfig.ts deleted file mode 100644 index 93180dd07..000000000 --- a/electron/managers/quickAskWindowConfig.ts +++ /dev/null @@ -1,22 +0,0 @@ -const DEFAULT_WIDTH = 556 - -const DEFAULT_HEIGHT = 60 - -export const quickAskWindowConfig: Electron.BrowserWindowConstructorOptions = { - width: DEFAULT_WIDTH, - height: DEFAULT_HEIGHT, - skipTaskbar: true, - acceptFirstMouse: true, - hasShadow: true, - alwaysOnTop: true, - show: false, - fullscreenable: false, - resizable: false, - center: true, - movable: true, - maximizable: false, - focusable: true, - transparent: false, - frame: false, - type: 'panel', -} diff --git a/electron/managers/tray.ts b/electron/managers/tray.ts deleted file mode 100644 index b81b1e556..000000000 --- a/electron/managers/tray.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { join } from 'path' -import { Tray, app, Menu } from 'electron' -import { windowManager } from '../managers/window' -import { getAppConfigurations } from '@janhq/core/node' - -class TrayManager { - currentTray: Tray | undefined - - createSystemTray = () => { - // Feature Toggle for Quick Ask - if (!getAppConfigurations().quick_ask) return - - if (this.currentTray) { - return - } - const iconPath = join(app.getAppPath(), 'icons', 'icon-tray.png') - const tray = new Tray(iconPath) - tray.setToolTip(app.getName()) - - tray.on('click', () => { - windowManager.showQuickAskWindow() - }) - - // Add context menu for windows only - if (process.platform === 'win32') { - const contextMenu = Menu.buildFromTemplate([ - { - label: 'Open Jan', - type: 'normal', - click: () => windowManager.showMainWindow(), - }, - { - label: 'Open Quick Ask', - type: 'normal', - click: () => windowManager.showQuickAskWindow(), - }, - { label: 'Quit', type: 'normal', click: () => app.quit() }, - ]) - - tray.setContextMenu(contextMenu) - } - this.currentTray = tray - } - - destroyCurrentTray() { - this.currentTray?.destroy() - this.currentTray = undefined - } -} - -export const trayManager = new TrayManager() diff --git a/electron/managers/window.ts b/electron/managers/window.ts deleted file mode 100644 index dbb3a5101..000000000 --- a/electron/managers/window.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { BrowserWindow, app, shell } from 'electron' -import { quickAskWindowConfig } from './quickAskWindowConfig' -import { mainWindowConfig } from './mainWindowConfig' -import { getAppConfigurations, AppEvent } from '@janhq/core/node' -import { getBounds, saveBounds } from '../utils/setup' - -/** - * Manages the current window instance. - */ -// TODO: refactor this -let isAppQuitting = false - -class WindowManager { - public mainWindow?: BrowserWindow - private _quickAskWindow: BrowserWindow | undefined = undefined - private _quickAskWindowVisible = false - private _mainWindowVisible = false - - private deeplink: string | undefined - /** - * Creates a new window instance. - * @returns The created window instance. - */ - async createMainWindow(preloadPath: string, startUrl: string) { - const bounds = await getBounds() - - this.mainWindow = new BrowserWindow({ - ...mainWindowConfig, - width: bounds.width, - height: bounds.height, - show: false, - x: bounds.x, - y: bounds.y, - webPreferences: { - nodeIntegration: true, - preload: preloadPath, - webSecurity: false, - }, - }) - - if (process.platform === 'win32' || process.platform === 'linux') { - /// This is work around for windows deeplink. - /// second-instance event is not fired when app is not open, so the app - /// does not received the deeplink. - const commandLine = process.argv.slice(1) - if (commandLine.length > 0) { - const url = commandLine[0] - this.sendMainAppDeepLink(url) - } - } - - this.mainWindow.on('resized', () => { - saveBounds(this.mainWindow?.getBounds()) - }) - - this.mainWindow.on('moved', () => { - saveBounds(this.mainWindow?.getBounds()) - }) - - /* Load frontend app to the window */ - this.mainWindow.loadURL(startUrl) - - /* Open external links in the default browser */ - this.mainWindow.webContents.setWindowOpenHandler(({ url }) => { - shell.openExternal(url) - return { action: 'deny' } - }) - - app.on('before-quit', function () { - isAppQuitting = true - }) - - windowManager.mainWindow?.on('close', function (evt) { - // Feature Toggle for Quick Ask - if (!getAppConfigurations().quick_ask) return - - if (!isAppQuitting) { - evt.preventDefault() - windowManager.hideMainWindow() - } - }) - - windowManager.mainWindow?.on('ready-to-show', function () { - windowManager.mainWindow?.show() - }) - } - - createQuickAskWindow(preloadPath: string, startUrl: string): void { - this._quickAskWindow = new BrowserWindow({ - ...quickAskWindowConfig, - webPreferences: { - nodeIntegration: true, - preload: preloadPath, - webSecurity: false, - }, - }) - - this._quickAskWindow.loadURL(startUrl) - this._quickAskWindow.on('blur', () => { - this.hideQuickAskWindow() - }) - } - - isMainWindowVisible(): boolean { - return this._mainWindowVisible - } - - hideMainWindow(): void { - this.mainWindow?.hide() - this._mainWindowVisible = false - } - - showMainWindow(): void { - this.mainWindow?.show() - this._mainWindowVisible = true - } - - hideQuickAskWindow(): void { - this._quickAskWindow?.hide() - this._quickAskWindowVisible = false - } - - showQuickAskWindow(): void { - this._quickAskWindow?.show() - this._quickAskWindowVisible = true - } - - closeQuickAskWindow(): void { - if (this._quickAskWindow?.isDestroyed()) return - this._quickAskWindow?.close() - this._quickAskWindow?.destroy() - this._quickAskWindow = undefined - this._quickAskWindowVisible = false - } - - isQuickAskWindowVisible(): boolean { - return this._quickAskWindowVisible - } - - isQuickAskWindowDestroyed(): boolean { - return this._quickAskWindow?.isDestroyed() ?? true - } - - /** - * Expand the quick ask window - */ - expandQuickAskWindow(heightOffset: number): void { - const width = quickAskWindowConfig.width! - const height = quickAskWindowConfig.height! + heightOffset - this._quickAskWindow?.setMinimumSize(width, height) - this._quickAskWindow?.setSize(width, height, true) - } - - /** - * Send the selected text to the quick ask window. - */ - sendQuickAskSelectedText(selectedText: string): void { - this._quickAskWindow?.webContents.send( - AppEvent.onSelectedText, - selectedText - ) - } - - /** - * Try to send the deep link to the main app. - */ - sendMainAppDeepLink(url: string): void { - this.deeplink = url - const interval = setInterval(() => { - if (!this.deeplink) clearInterval(interval) - const mainWindow = this.mainWindow - if (mainWindow) { - mainWindow.webContents.send(AppEvent.onDeepLink, this.deeplink) - if (mainWindow.isMinimized()) mainWindow.restore() - mainWindow.focus() - } - }, 500) - } - - /** - * Send main view state to the main app. - */ - sendMainViewState(route: string) { - if (this.mainWindow && !this.mainWindow.isDestroyed()) { - this.mainWindow.webContents.send(AppEvent.onMainViewStateChange, route) - } - } - - /** - * Clean up all windows. - */ - cleanUp(): void { - if (!this.mainWindow?.isDestroyed()) { - this.mainWindow?.close() - this.mainWindow?.destroy() - this.mainWindow = undefined - this._mainWindowVisible = false - } - if (!this._quickAskWindow?.isDestroyed()) { - this._quickAskWindow?.close() - this._quickAskWindow?.destroy() - this._quickAskWindow = undefined - this._quickAskWindowVisible = false - } - } - - /** - * Acknowledges that the window has received a deep link. We can remove it. - */ - ackDeepLink() { - this.deeplink = undefined - } -} - -export const windowManager = new WindowManager() diff --git a/electron/merge-latest-ymls.js b/electron/merge-latest-ymls.js deleted file mode 100644 index ee8caf825..000000000 --- a/electron/merge-latest-ymls.js +++ /dev/null @@ -1,29 +0,0 @@ -const yaml = require('js-yaml') -const fs = require('fs') - -// get two file paths from arguments: -const [, , ...args] = process.argv -const file1 = args[0] -const file2 = args[1] -const file3 = args[2] - -// check that all arguments are present and throw error instead -if (!file1 || !file2 || !file3) { - throw new Error( - 'Please provide 3 file paths as arguments: path to file1, to file2 and destination path' - ) -} - -const doc1 = yaml.load(fs.readFileSync(file1, 'utf8')) -console.log('doc1: ', doc1) - -const doc2 = yaml.load(fs.readFileSync(file2, 'utf8')) -console.log('doc2: ', doc2) - -const merged = { ...doc1, ...doc2 } -merged.files.push(...doc1.files) - -console.log('merged', merged) - -const mergedYml = yaml.dump(merged) -fs.writeFileSync(file3, mergedYml, 'utf8') diff --git a/electron/package.json b/electron/package.json deleted file mode 100644 index 8b673114b..000000000 --- a/electron/package.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "name": "jan", - "version": "0.1.1740752217", - "main": "./build/main.js", - "author": "Jan ", - "license": "MIT", - "productName": "Jan", - "homepage": "https://github.com/menloresearch/jan/tree/main/electron", - "description": "Use offline LLMs with your own data. Run open source models like Llama2 or Falcon on your internal computers/servers.", - "build": { - "appId": "jan.ai.app", - "productName": "Jan", - "files": [ - "renderer/**/*", - "build/**/*.{js,map}", - "pre-install", - "themes", - "scripts/**/*", - "icons/**/*", - "themes", - "shared" - ], - "asarUnpack": [ - "pre-install", - "themes", - "docs", - "scripts", - "icons", - "themes", - "shared" - ], - "publish": [ - { - "provider": "github", - "owner": "janhq", - "repo": "jan" - } - ], - "extends": null, - "mac": { - "type": "distribution", - "entitlements": "./entitlements.mac.plist", - "entitlementsInherit": "./entitlements.mac.plist", - "notarize": { - "teamId": "F8AH6NHVY5" - }, - "icon": "icons/icon.png" - }, - "linux": { - "target": [ - "deb" - ], - "category": "Utility", - "icon": "icons/" - }, - "win": { - "icon": "icons/icon.png", - "target": [ - "nsis" - ] - }, - "nsis": { - "oneClick": true, - "installerIcon": "icons/icon.ico", - "uninstallerIcon": "icons/icon.ico", - "include": "scripts/uninstaller.nsh", - "deleteAppDataOnUninstall": true - }, - "protocols": [ - { - "name": "Jan", - "schemes": [ - "jan" - ] - } - ], - "artifactName": "jan-${os}-${arch}-${version}.${ext}" - }, - "scripts": { - "lint": "eslint . --ext \".js,.jsx,.ts,.tsx\"", - "test:e2e": "DEBUG=pw:browser xvfb-maybe -- playwright test --workers=1", - "copy:assets": "rimraf --glob \"./pre-install/*.tgz\" && cpx \"../pre-install/*.tgz\" \"./pre-install\"", - "version-patch": "run-script-os", - "version-patch:darwin:linux": "jq '.version' package.json | tr -d '\"' > .version.bak && jq --arg ver \"0.1.$(date +%s)\" '.version = $ver' package.json > package.tmp && mv package.tmp package.json", - "version-patch:win32": "node -e \"const fs=require('fs');const pkg=require('./package.json');const bak=pkg.version;fs.writeFileSync('.version.bak',bak);pkg.version='0.1.'+Math.floor(Date.now()/1000);fs.writeFileSync('package.json',JSON.stringify(pkg,null,2));\"", - "version-restore": "run-script-os", - "version-restore:darwin:linux": "jq --arg ver $(cat .version.bak) '.version = $ver' package.json > package.tmp && mv package.tmp package.json && rm .version.bak", - "version-restore:win32": "node -e \"const fs=require('fs');const pkg=require('./package.json');const bak=fs.readFileSync('.version.bak','utf8');pkg.version=bak;fs.writeFileSync('package.json',JSON.stringify(pkg,null,2));\"", - "dev:darwin:linux": "yarn copy:assets && tsc -p . && yarn version-patch && electron . && yarn version-restore", - "dev:windows": "yarn copy:assets && tsc -p . && electron .", - "dev": "run-script-os", - "compile": "tsc -p .", - "start": "electron .", - "build": "yarn copy:assets && run-script-os", - "build:test": "yarn copy:assets && run-script-os", - "build:test:darwin": "tsc -p . && electron-builder -p never -m --dir", - "build:test:win32": "tsc -p . && electron-builder -p never -w --dir", - "build:test:linux": "tsc -p . && electron-builder -p never -l --dir", - "build:darwin": "tsc -p . && electron-builder -p never -m --universal", - "build:win32": "tsc -p . && electron-builder -p never -w", - "build:linux": "tsc -p . && electron-builder -p never -l deb -l AppImage", - "build:publish": "yarn copy:assets && run-script-os", - "build:publish:darwin": "tsc -p . && electron-builder -p always -m --universal", - "build:publish:win32": "tsc -p . && electron-builder -p always -w", - "build:publish:linux": "tsc -p . && electron-builder -p always -l deb -l AppImage" - }, - "dependencies": { - "@alumna/reflect": "^1.1.3", - "@janhq/core": "link:../core", - "@janhq/server": "link:../server", - "@kirillvakalov/nut-tree__nut-js": "4.2.1-2", - "@npmcli/arborist": "^7.1.0", - "electron-store": "^8.1.0", - "electron-updater": "^6.1.7", - "fs-extra": "^11.2.0", - "pacote": "^21.0.0", - "request": "^2.88.2", - "request-progress": "^3.0.0", - "ulidx": "^2.3.0" - }, - "devDependencies": { - "@electron/notarize": "^2.5.0", - "@playwright/test": "^1.38.1", - "@reportportal/agent-js-playwright": "^5.1.7", - "@types/npmcli__arborist": "^5.6.4", - "@types/pacote": "^11.1.7", - "@types/request": "^2.48.12", - "@typescript-eslint/eslint-plugin": "^6.7.3", - "@typescript-eslint/parser": "^6.7.3", - "electron": "30.0.6", - "electron-builder": "^24.13.3", - "electron-builder-squirrel-windows": "^24.13.3", - "electron-devtools-installer": "^3.2.0", - "electron-playwright-helpers": "^1.6.0", - "eslint": "8.57.0", - "eslint-plugin-react": "^7.34.0", - "rimraf": "^5.0.5", - "run-script-os": "^1.1.6", - "typescript": "^5.3.3", - "xvfb-maybe": "^0.2.1" - }, - "installConfig": { - "hoistingLimits": "workspaces" - }, - "packageManager": "yarn@4.5.3" -} diff --git a/electron/playwright.config.ts b/electron/playwright.config.ts deleted file mode 100644 index 71f435f57..000000000 --- a/electron/playwright.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { PlaywrightTestConfig } from '@playwright/test' - -const config: PlaywrightTestConfig = { - testDir: './tests/e2e', - retries: 0, - globalTimeout: 350000, - use: { - screenshot: 'only-on-failure', - video: 'retain-on-failure', - trace: 'retain-on-failure', - }, - // reporter: [['html', { outputFolder: './playwright-report' }]], -} -export default config diff --git a/electron/pre-install/.gitkeep b/electron/pre-install/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/electron/preload.quickask.ts b/electron/preload.quickask.ts deleted file mode 100644 index 7c2cadeb6..000000000 --- a/electron/preload.quickask.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Exposes a set of APIs to the renderer process via the contextBridge object. - * @module preload - */ - -import { APIEvents, APIRoutes } from '@janhq/core/node' -import { contextBridge, ipcRenderer } from 'electron' - -const interfaces: { [key: string]: (...args: any[]) => any } = {} - -// Loop over each route in APIRoutes -APIRoutes.forEach((method) => { - // For each method, create a function on the interfaces object - // This function invokes the method on the ipcRenderer with any provided arguments - - interfaces[method] = (...args: any[]) => ipcRenderer.invoke(method, ...args) -}) - -// Loop over each method in APIEvents -APIEvents.forEach((method) => { - // For each method, create a function on the interfaces object - // This function sets up an event listener on the ipcRenderer for the method - // The handler for the event is provided as an argument to the function - interfaces[method] = (handler: any) => ipcRenderer.on(method, handler) -}) - -// Expose the 'interfaces' object in the main world under the name 'electronAPI' -// This allows the renderer process to access these methods directly -contextBridge.exposeInMainWorld('electronAPI', { - ...interfaces, - isQuickAsk: () => true, -}) diff --git a/electron/preload.ts b/electron/preload.ts deleted file mode 100644 index dbfcd1f1e..000000000 --- a/electron/preload.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Exposes a set of APIs to the renderer process via the contextBridge object. - * @module preload - */ - -import { APIEvents, APIRoutes, AppConfiguration } from '@janhq/core/node' -import { contextBridge, ipcRenderer } from 'electron' -import { readdirSync } from 'fs' - -const interfaces: { [key: string]: (...args: any[]) => any } = {} - -// Loop over each route in APIRoutes -APIRoutes.forEach((method) => { - // For each method, create a function on the interfaces object - // This function invokes the method on the ipcRenderer with any provided arguments - - interfaces[method] = (...args: any[]) => ipcRenderer.invoke(method, ...args) -}) - -// Loop over each method in APIEvents -APIEvents.forEach((method) => { - // For each method, create a function on the interfaces object - // This function sets up an event listener on the ipcRenderer for the method - // The handler for the event is provided as an argument to the function - interfaces[method] = (handler: any) => ipcRenderer.on(method, handler) -}) - -interfaces['changeDataFolder'] = async (path) => { - const appConfiguration: AppConfiguration = await ipcRenderer.invoke( - 'getAppConfigurations' - ) - const currentJanDataFolder = appConfiguration.data_folder - appConfiguration.data_folder = path - const reflect = require('@alumna/reflect') - const { err } = await reflect({ - src: currentJanDataFolder, - dest: path, - recursive: true, - delete: false, - overwrite: true, - errorOnExist: false, - }) - if (err) { - console.error(err) - throw err - } - await ipcRenderer.invoke('updateAppConfiguration', appConfiguration) -} - -interfaces['isDirectoryEmpty'] = async (path) => { - const dirChildren = await readdirSync(path) - return dirChildren.filter((x) => x !== '.DS_Store').length === 0 -} - -// Expose the 'interfaces' object in the main world under the name 'electronAPI' -// This allows the renderer process to access these methods directly -contextBridge.exposeInMainWorld('electronAPI', { - ...interfaces, - isQuickAsk: () => false, -}) diff --git a/electron/scripts/uninstaller.nsh b/electron/scripts/uninstaller.nsh deleted file mode 100644 index 684783258..000000000 --- a/electron/scripts/uninstaller.nsh +++ /dev/null @@ -1,46 +0,0 @@ -!include nsDialogs.nsh - -XPStyle on - -!macro customUnInstall - ${ifNot} ${isUpdated} - ; Define the process name of your Electron app - StrCpy $0 "Jan.exe" - - ; Check if the application is running - nsExec::ExecToStack 'tasklist /FI "IMAGENAME eq $0" /NH' - Pop $1 - - StrCmp $1 "" notRunning - - ; If the app is running, notify the user and attempt to close it - MessageBox MB_OK "Jan is being uninstalled, force close app." IDOK forceClose - - forceClose: - ; Attempt to kill the running application - nsExec::ExecToStack 'taskkill /F /IM $0' - Pop $1 - - ; Proceed with uninstallation - Goto continueUninstall - - notRunning: - ; If the app is not running, proceed with uninstallation - Goto continueUninstall - - continueUninstall: - ; Proceed with uninstallation - DeleteRegKey HKLM "Software\Jan" - RMDir /r "$INSTDIR" - Delete "$INSTDIR\*.*" - - ; Clean up shortcuts and app data - Delete "$DESKTOP\Jan.lnk" - Delete "$STARTMENU\Programs\Jan.lnk" - RMDir /r "$APPDATA\Jan" - RMDir /r "$LOCALAPPDATA\jan-updater" - - ; Close the uninstaller - Quit - ${endIf} -!macroend \ No newline at end of file diff --git a/electron/shared/.gitkeep b/electron/shared/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/electron/sign.js b/electron/sign.js deleted file mode 100644 index 9955e53e8..000000000 --- a/electron/sign.js +++ /dev/null @@ -1,69 +0,0 @@ -const { exec } = require('child_process') - -function execCommandWithRetry(command, retries = 3) { - return new Promise((resolve, reject) => { - const execute = (attempt) => { - exec(command, (error, stdout, stderr) => { - if (error) { - console.error(`Error: ${error}`) - if (attempt < retries) { - console.log(`Retrying... Attempt ${attempt + 1}`) - execute(attempt + 1) - } else { - return reject(error) - } - } else { - console.log(`stdout: ${stdout}`) - console.error(`stderr: ${stderr}`) - resolve() - } - }) - } - execute(0) - }) -} - -function sign({ - path, - name, - certUrl, - clientId, - tenantId, - clientSecret, - certName, - timestampServer, - version, -}) { - return new Promise((resolve, reject) => { - const command = `azuresigntool.exe sign -kvu "${certUrl}" -kvi "${clientId}" -kvt "${tenantId}" -kvs "${clientSecret}" -kvc "${certName}" -tr "${timestampServer}" -v "${path}"` - execCommandWithRetry(command) - .then(resolve) - .catch(reject) - }) -} - -exports.default = async function (options) { - const certUrl = process.env.AZURE_KEY_VAULT_URI - const clientId = process.env.AZURE_CLIENT_ID - const tenantId = process.env.AZURE_TENANT_ID - const clientSecret = process.env.AZURE_CLIENT_SECRET - const certName = process.env.AZURE_CERT_NAME - const timestampServer = 'http://timestamp.globalsign.com/tsa/r6advanced1' - - try { - await sign({ - path: options.path, - name: 'jan-win-x64', - certUrl, - clientId, - tenantId, - clientSecret, - certName, - timestampServer, - version: options.version, - }) - } catch (error) { - console.error('Failed to sign after 3 attempts:', error) - process.exit(1) - } -} diff --git a/electron/testRunner.js b/electron/testRunner.js deleted file mode 100644 index b0d108160..000000000 --- a/electron/testRunner.js +++ /dev/null @@ -1,10 +0,0 @@ -const jestRunner = require('jest-runner'); - -class EmptyTestFileRunner extends jestRunner.default { - async runTests(tests, watcher, onStart, onResult, onFailure, options) { - const nonEmptyTests = tests.filter(test => test.context.hasteFS.getSize(test.path) > 0); - return super.runTests(nonEmptyTests, watcher, onStart, onResult, onFailure, options); - } -} - -module.exports = EmptyTestFileRunner; \ No newline at end of file diff --git a/electron/tests/config/constants.ts b/electron/tests/config/constants.ts deleted file mode 100644 index 7039ad58c..000000000 --- a/electron/tests/config/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const Constants = { - VIDEO_DIR: './playwright-video', - TIMEOUT: '300000', -} diff --git a/electron/tests/config/fixtures.ts b/electron/tests/config/fixtures.ts deleted file mode 100644 index c36910161..000000000 --- a/electron/tests/config/fixtures.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { - _electron as electron, - BrowserContext, - ElectronApplication, - expect, - Page, - test as base, -} from '@playwright/test' -import { - ElectronAppInfo, - findLatestBuild, - parseElectronApp, - stubDialog, -} from 'electron-playwright-helpers' -import { Constants } from './constants' -import { HubPage } from '../pages/hubPage' -import { CommonActions } from '../pages/commonActions' -import { rmSync } from 'fs' -import * as path from 'path' - -export let electronApp: ElectronApplication -export let page: Page -export let appInfo: ElectronAppInfo -export const TIMEOUT = parseInt(process.env.TEST_TIMEOUT || Constants.TIMEOUT) - -export async function setupElectron() { - console.log(`TEST TIMEOUT: ${TIMEOUT}`) - - process.env.CI = 'e2e' - - const latestBuild = findLatestBuild('dist') - expect(latestBuild).toBeTruthy() - - // parse the packaged Electron app and find paths and other info - appInfo = parseElectronApp(latestBuild) - expect(appInfo).toBeTruthy() - - electronApp = await electron.launch({ - args: [appInfo.main, '--no-sandbox'], // main file from package.json - executablePath: appInfo.executable, // path to the Electron executable - // recordVideo: { dir: Constants.VIDEO_DIR }, // Specify the directory for video recordings - }) - await stubDialog(electronApp, 'showMessageBox', { response: 1 }) - - page = await electronApp.firstWindow({ - timeout: TIMEOUT, - }) -} - -export async function teardownElectron() { - await page.close() - await electronApp.close() -} - -/** - * this fixture is needed to record and attach videos / screenshot on failed tests when - * tests are run in serial mode (i.e. browser is not closed between tests) - */ -export const test = base.extend< - { - commonActions: CommonActions - hubPage: HubPage - attachVideoPage: Page - attachScreenshotsToReport: void - }, - { createVideoContext: BrowserContext } ->({ - commonActions: async ({ request }, use, testInfo) => { - await use(new CommonActions(page, testInfo)) - }, - hubPage: async ({ commonActions }, use) => { - await use(new HubPage(page, commonActions)) - }, - createVideoContext: [ - async ({ playwright }, use) => { - const context = electronApp.context() - await use(context) - }, - { scope: 'worker' }, - ], - - attachVideoPage: [ - async ({ createVideoContext }, use, testInfo) => { - await use(page) - - if (testInfo.status !== testInfo.expectedStatus) { - const path = await createVideoContext.pages()[0].video()?.path() - await createVideoContext.close() - await testInfo.attach('video', { - path: path, - }) - } - }, - { scope: 'test', auto: true }, - ], - - attachScreenshotsToReport: [ - async ({ commonActions }, use, testInfo) => { - await use() - - // After the test, we can check whether the test passed or failed. - if (testInfo.status !== testInfo.expectedStatus) { - await commonActions.takeScreenshot('') - } - }, - { auto: true }, - ], -}) - -test.beforeAll(async () => { - rmSync(path.join(__dirname, '../../test-data'), { - recursive: true, - force: true, - }) - - test.setTimeout(TIMEOUT) - await setupElectron() - await page.waitForSelector('img[alt="Jan - Logo"]', { - state: 'visible', - timeout: TIMEOUT, - }) -}) - -test.afterAll(async () => { - // teardownElectron() -}) diff --git a/electron/tests/e2e/hub.e2e.spec.ts b/electron/tests/e2e/hub.e2e.spec.ts deleted file mode 100644 index 58d6a0854..000000000 --- a/electron/tests/e2e/hub.e2e.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { test, appInfo, page, TIMEOUT } from '../config/fixtures' -import { expect } from '@playwright/test' - -test.beforeAll(async () => { - expect(appInfo).toMatchObject({ - asar: true, - executable: expect.anything(), - main: expect.anything(), - name: 'jan', - packageJson: expect.objectContaining({ name: 'jan' }), - platform: process.platform, - resourcesDir: expect.anything(), - }) -}) - -test('explores hub', async ({ hubPage }) => { - await hubPage.navigateByMenu() - await hubPage.verifyContainerVisible() - await hubPage.scrollToBottom() - const useModelBtn = page.getByTestId(/^setup-btn/).first() - - await expect(useModelBtn).toBeVisible({ - timeout: TIMEOUT, - }) -}) diff --git a/electron/tests/e2e/navigation.e2e.spec.ts b/electron/tests/e2e/navigation.e2e.spec.ts deleted file mode 100644 index 1b463d381..000000000 --- a/electron/tests/e2e/navigation.e2e.spec.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { expect } from '@playwright/test' -import { page, test, TIMEOUT } from '../config/fixtures' - -test('renders left navigation panel', async () => { - const threadBtn = page.getByTestId('Thread').first() - await expect(threadBtn).toBeVisible({ timeout: TIMEOUT }) - // Chat section should be there - await page.getByTestId('Local API Server').first().click({ - timeout: TIMEOUT, - }) - const localServer = page.getByTestId('local-server-testid').first() - await expect(localServer).toBeVisible({ - timeout: TIMEOUT, - }) -}) diff --git a/electron/tests/e2e/settings.e2e.spec.ts b/electron/tests/e2e/settings.e2e.spec.ts deleted file mode 100644 index 06b4d1acc..000000000 --- a/electron/tests/e2e/settings.e2e.spec.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { expect } from '@playwright/test' - -import { test, page, TIMEOUT } from '../config/fixtures' - -test('shows settings', async () => { - await page.getByTestId('Settings').first().click({ - timeout: TIMEOUT, - }) - const settingDescription = page.getByTestId('testid-setting-description') - await expect(settingDescription).toBeVisible({ timeout: TIMEOUT }) -}) diff --git a/electron/tests/e2e/thread.e2e.spec.ts b/electron/tests/e2e/thread.e2e.spec.ts deleted file mode 100644 index 41efc8437..000000000 --- a/electron/tests/e2e/thread.e2e.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { expect } from '@playwright/test' -import { page, test, TIMEOUT } from '../config/fixtures' - -test('show onboarding screen without any threads created or models downloaded', async () => { - await page.getByTestId('Thread').first().click({ - timeout: TIMEOUT, - }) - const denyButton = page.locator('[data-testid="btn-deny-product-analytics"]') - - if ((await denyButton.count()) > 0) { - await denyButton.click({ force: true }) - } - - const onboardScreen = page.getByTestId('onboard-screen') - await expect(onboardScreen).toBeVisible({ - timeout: TIMEOUT, - }) -}) diff --git a/electron/tests/pages/basePage.ts b/electron/tests/pages/basePage.ts deleted file mode 100644 index 11e3ba81a..000000000 --- a/electron/tests/pages/basePage.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Page, expect } from '@playwright/test' -import { CommonActions } from './commonActions' -import { TIMEOUT } from '../config/fixtures' - -export class BasePage { - menuId: string - - constructor( - protected readonly page: Page, - readonly action: CommonActions, - protected containerId: string - ) {} - - public getValue(key: string) { - return this.action.getValue(key) - } - - public setValue(key: string, value: string) { - this.action.setValue(key, value) - } - - async takeScreenshot(name: string = '') { - await this.action.takeScreenshot(name) - } - - async navigateByMenu() { - await this.clickFirstElement(this.menuId) - } - - async clickFirstElement(testId: string) { - await this.page.getByTestId(testId).first().click() - } - - async verifyContainerVisible() { - const container = this.page.getByTestId(this.containerId) - expect(container.isVisible()).toBeTruthy() - } - - async scrollToBottom() { - await this.page.evaluate(() => { - window.scrollTo(0, document.body.scrollHeight) - }) - } - - async waitUpdateLoader() { - await this.isElementVisible('img[alt="Jan - Logo"]') - } - - //wait and find a specific element with its selector and return Visible - async isElementVisible(selector: any) { - let isVisible = true - await this.page - .waitForSelector(selector, { state: 'visible', timeout: TIMEOUT }) - .catch(() => { - isVisible = false - }) - return isVisible - } -} diff --git a/electron/tests/pages/commonActions.ts b/electron/tests/pages/commonActions.ts deleted file mode 100644 index 08ea15f92..000000000 --- a/electron/tests/pages/commonActions.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Page, TestInfo } from '@playwright/test' -import { page } from '../config/fixtures' - -export class CommonActions { - private testData = new Map() - - constructor( - public page: Page, - public testInfo: TestInfo - ) {} - - async takeScreenshot(name: string) { - const screenshot = await page.screenshot({ - fullPage: true, - }) - const attachmentName = `${this.testInfo.title}_${name || new Date().toISOString().slice(5, 19).replace(/[-:]/g, '').replace('T', '_')}` - await this.testInfo.attach(attachmentName.replace(/\s+/g, ''), { - body: screenshot, - contentType: 'image/png', - }) - } - - async hooks() { - console.log('hook from the scenario page') - } - - setValue(key: string, value: string) { - this.testData.set(key, value) - } - - getValue(key: string) { - return this.testData.get(key) - } -} diff --git a/electron/tests/pages/hubPage.ts b/electron/tests/pages/hubPage.ts deleted file mode 100644 index 0299ab15d..000000000 --- a/electron/tests/pages/hubPage.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Page } from '@playwright/test' -import { BasePage } from './basePage' -import { CommonActions } from './commonActions' - -export class HubPage extends BasePage { - readonly menuId: string = 'Hub' - static readonly containerId: string = 'hub-container-test-id' - - constructor( - public page: Page, - readonly action: CommonActions - ) { - super(page, action, HubPage.containerId) - } -} diff --git a/electron/tsconfig.json b/electron/tsconfig.json deleted file mode 100644 index 5116f0e88..000000000 --- a/electron/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "commonjs", - "noImplicitAny": true, - "sourceMap": true, - "strict": true, - "outDir": "./build", - "rootDir": "./", - "noEmitOnError": true, - "esModuleInterop": true, - "baseUrl": ".", - "allowJs": true, - "skipLibCheck": true, - "paths": { "*": ["node_modules/*"] }, - "typeRoots": ["node_modules/@types"] - }, - "ts-node": { - "esm": true - }, - "include": ["./**/*.ts"], - "exclude": ["core", "build", "dist", "tests", "node_modules", "test-data"] -} diff --git a/electron/utils/clean.ts b/electron/utils/clean.ts deleted file mode 100644 index 12a68d39e..000000000 --- a/electron/utils/clean.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ModuleManager } from '@janhq/core/node' -import { windowManager } from './../managers/window' -import { dispose } from './disposable' -import { app } from 'electron' - -export function cleanUpAndQuit() { - if (!ModuleManager.instance.cleaningResource) { - ModuleManager.instance.cleaningResource = true - windowManager.cleanUp() - dispose(ModuleManager.instance.requiredModules) - ModuleManager.instance.clearImportedModules() - app.quit() - } -} diff --git a/electron/utils/dev.ts b/electron/utils/dev.ts deleted file mode 100644 index bd510096b..000000000 --- a/electron/utils/dev.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const setupReactDevTool = async () => { - // Which means you're running from source code - const { default: installExtension, REACT_DEVELOPER_TOOLS } = await import( - 'electron-devtools-installer' - ) // Don't use import on top level, since the installer package is dev-only - try { - const name = await installExtension(REACT_DEVELOPER_TOOLS) - console.debug(`Added Extension: ${name}`) - } catch (err) { - console.error('An error occurred while installing devtools:', err) - // Only log the error and don't throw it because it's not critical - } -} diff --git a/electron/utils/disposable.ts b/electron/utils/disposable.ts deleted file mode 100644 index 59018a775..000000000 --- a/electron/utils/disposable.ts +++ /dev/null @@ -1,8 +0,0 @@ -export function dispose(requiredModules: Record) { - for (const key in requiredModules) { - const module = requiredModules[key] - if (typeof module['dispose'] === 'function') { - module['dispose']() - } - } -} diff --git a/electron/utils/extension.ts b/electron/utils/extension.ts deleted file mode 100644 index e055411a6..000000000 --- a/electron/utils/extension.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { getJanExtensionsPath, init } from '@janhq/core/node' - -export const setupExtensions = async () => { - init({ - // Function to check from the main process that user wants to install a extension - confirmInstall: async (_extensions: string[]) => { - return true - }, - // Path to install extension to - extensionsPath: getJanExtensionsPath(), - }) -} diff --git a/electron/utils/logger.ts b/electron/utils/logger.ts deleted file mode 100644 index 48af0b93a..000000000 --- a/electron/utils/logger.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { - createWriteStream, - existsSync, - mkdirSync, - readdir, - stat, - unlink, - writeFileSync, -} from 'fs' -import util from 'util' -import { - getAppConfigurations, - getJanDataFolderPath, - Logger, - LoggerManager, -} from '@janhq/core/node' -import path, { join } from 'path' - -/** - * File Logger - */ -export class FileLogger implements Logger { - name = 'file' - logCleaningInterval: number = 120000 - timeout: NodeJS.Timeout | undefined - appLogPath: string = './' - logEnabled: boolean = true - - constructor( - logEnabled: boolean = true, - logCleaningInterval: number = 120000 - ) { - this.logEnabled = logEnabled - if (logCleaningInterval) this.logCleaningInterval = logCleaningInterval - - const appConfigurations = getAppConfigurations() - const logFolderPath = join(appConfigurations.data_folder, 'logs') - if (!existsSync(logFolderPath)) { - mkdirSync(logFolderPath, { recursive: true }) - } - - this.appLogPath = join(logFolderPath, 'app.log') - } - - log(args: any) { - if (!this.logEnabled) return - let message = args[0] - const scope = args[1] - if (!message) return - const path = this.appLogPath - if (!scope && !message.startsWith('[')) { - message = `[APP]::${message}` - } else if (scope) { - message = `${scope}::${message}` - } - - message = `${new Date().toISOString()} ${message}` - - writeLog(message, path) - } - - cleanLogs( - maxFileSizeBytes?: number | undefined, - daysToKeep?: number | undefined - ): void { - // clear existing timeout - // in case we rerun it with different values - if (this.timeout) clearTimeout(this.timeout) - this.timeout = undefined - - if (!this.logEnabled) return - - console.log( - 'Validating app logs. Next attempt in ', - this.logCleaningInterval - ) - - const size = maxFileSizeBytes ?? 1 * 1024 * 1024 // 1 MB - const days = daysToKeep ?? 7 // 7 days - const logDirectory = path.join(getJanDataFolderPath(), 'logs') - // Perform log cleaning - const currentDate = new Date() - if (existsSync(logDirectory)) - readdir(logDirectory, (err, files) => { - if (err) { - console.error('Error reading log directory:', err) - return - } - - files.forEach((file) => { - const filePath = path.join(logDirectory, file) - stat(filePath, (err, stats) => { - if (err) { - console.error('Error getting file stats:', err) - return - } - - // Check size - if (stats.size > size) { - unlink(filePath, (err) => { - if (err) { - console.error('Error deleting log file:', err) - return - } - console.debug( - `Deleted log file due to exceeding size limit: ${filePath}` - ) - }) - } else { - // Check age - const creationDate = new Date(stats.ctime) - const daysDifference = Math.floor( - (currentDate.getTime() - creationDate.getTime()) / - (1000 * 3600 * 24) - ) - if (daysDifference > days) { - unlink(filePath, (err) => { - if (err) { - console.error('Error deleting log file:', err) - return - } - console.debug(`Deleted old log file: ${filePath}`) - }) - } - } - }) - }) - }) - - // Schedule the next execution with doubled delays - this.timeout = setTimeout( - () => this.cleanLogs(maxFileSizeBytes, daysToKeep), - this.logCleaningInterval - ) - } -} - -/** - * Write log function implementation - * @param message - * @param logPath - */ -const writeLog = (message: string, logPath: string) => { - if (!existsSync(logPath)) { - const logDirectory = path.join(getJanDataFolderPath(), 'logs') - if (!existsSync(logDirectory)) { - mkdirSync(logDirectory) - } - writeFileSync(logPath, message) - } else { - const logFile = createWriteStream(logPath, { - flags: 'a', - }) - logFile.write(util.format(message) + '\n') - logFile.close() - console.debug(message) - } -} - -/** - * Register logger for global application logging - */ -export const registerLogger = () => { - const logger = new FileLogger() - LoggerManager.instance().register(logger) - logger.cleanLogs() -} diff --git a/electron/utils/menu.ts b/electron/utils/menu.ts deleted file mode 100644 index bab70da79..000000000 --- a/electron/utils/menu.ts +++ /dev/null @@ -1,129 +0,0 @@ -// @ts-nocheck -import { app, Menu, shell, dialog } from 'electron' -import { autoUpdater } from 'electron-updater' -import { log } from '@janhq/core/node' -const isMac = process.platform === 'darwin' -import { windowManager } from '../managers/window' - -const template: (Electron.MenuItemConstructorOptions | Electron.MenuItem)[] = [ - { - label: app.name, - submenu: [ - { - label: `About ${app.name}`, - click: () => - dialog.showMessageBox({ - title: `Jan`, - message: `Jan Version v${app.getVersion()}\n\nCopyright © 2024 Jan`, - }), - }, - { - label: 'Check for Updates...', - click: () => - // Check for updates and notify user if there are any - autoUpdater - .checkForUpdatesAndNotify() - .then((updateCheckResult) => { - if ( - !updateCheckResult?.updateInfo || - updateCheckResult?.updateInfo.version === app.getVersion() - ) { - windowManager.mainWindow?.webContents.send( - AppEvent.onAppUpdateNotAvailable, - {} - ) - return - } - }) - .catch((error) => { - log('Error checking for updates:' + JSON.stringify(error)) - }), - }, - { type: 'separator' }, - { role: 'services' }, - { type: 'separator' }, - { role: 'hide' }, - { role: 'hideOthers' }, - { role: 'unhide' }, - { - label: `Settings`, - accelerator: 'CmdOrCtrl+,', - click: () => { - windowManager.showMainWindow() - windowManager.sendMainViewState('Settings') - }, - }, - { type: 'separator' }, - { role: 'quit' }, - ], - }, - { - label: 'Edit', - submenu: [ - { role: 'undo' }, - { role: 'redo' }, - { type: 'separator' }, - { role: 'cut' }, - { role: 'copy' }, - { role: 'paste' }, - ...(isMac - ? [ - { role: 'pasteAndMatchStyle' }, - { role: 'delete' }, - { role: 'selectAll' }, - { type: 'separator' }, - { - label: 'Speech', - submenu: [{ role: 'startSpeaking' }, { role: 'stopSpeaking' }], - }, - ] - : [{ role: 'delete' }, { type: 'separator' }, { role: 'selectAll' }]), - ], - }, - { - label: 'View', - submenu: [ - { role: 'reload' }, - { role: 'forceReload' }, - { role: 'toggleDevTools' }, - { type: 'separator' }, - { role: 'resetZoom' }, - { role: 'zoomIn' }, - { role: 'zoomOut' }, - { type: 'separator' }, - { role: 'togglefullscreen' }, - ], - }, - { - label: 'Window', - submenu: [ - { role: 'minimize' }, - { role: 'zoom' }, - ...(isMac - ? [ - { type: 'separator' }, - { role: 'front' }, - { type: 'separator' }, - { role: 'window' }, - ] - : [{ role: 'close' }]), - ], - }, - { - role: 'help', - submenu: [ - { - label: 'Learn More', - click: async () => { - await shell.openExternal('https://jan.ai/guides/') - }, - }, - ], - }, -] - -export const menu = Menu.buildFromTemplate(template) - -export const setupMenu = () => { - Menu.setApplicationMenu(menu) -} diff --git a/electron/utils/migration.ts b/electron/utils/migration.ts deleted file mode 100644 index 505de0f7b..000000000 --- a/electron/utils/migration.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { app } from 'electron' - -import { join } from 'path' -import { - rmdirSync, - existsSync, - mkdirSync, - readdirSync, - cpSync, - lstatSync, -} from 'fs' -import Store from 'electron-store' -import { - getJanDataFolderPath, - appResourcePath, - getJanExtensionsPath, -} from '@janhq/core/node' - -/** - * Migrates the extensions & themes. - * If the `migrated_version` key in the `Store` object does not match the current app version, - * the function deletes the `extensions` directory and sets the `migrated_version` key to the current app version. - * @returns A Promise that resolves when the migration is complete. - */ -export async function migrate() { - const store = new Store() - if (store.get('migrated_version') !== app.getVersion()) { - console.debug('start migration:', store.get('migrated_version')) - - if (existsSync(getJanExtensionsPath())) - rmdirSync(getJanExtensionsPath(), { recursive: true }) - - await migrateThemes() - - store.set('migrated_version', app.getVersion()) - console.debug('migrate extensions done') - } else if (!existsSync(join(getJanDataFolderPath(), 'themes'))) { - await migrateThemes() - } -} - -async function migrateThemes() { - if (!existsSync(join(getJanDataFolderPath(), 'themes'))) - mkdirSync(join(getJanDataFolderPath(), 'themes'), { recursive: true }) - - const themes = readdirSync(join(appResourcePath(), 'themes')) - for (const theme of themes) { - const themePath = join(appResourcePath(), 'themes', theme) - await checkAndMigrateTheme(theme, themePath) - } -} - -async function checkAndMigrateTheme( - sourceThemeName: string, - sourceThemePath: string -) { - const janDataThemesFolder = join(getJanDataFolderPath(), 'themes') - const existingTheme = readdirSync(janDataThemesFolder).find( - (theme) => theme === sourceThemeName - ) - if (existingTheme) { - const desTheme = join(janDataThemesFolder, existingTheme) - if (!lstatSync(desTheme).isDirectory()) { - return - } - console.debug('Updating theme', existingTheme) - rmdirSync(desTheme, { recursive: true }) - cpSync(sourceThemePath, join(janDataThemesFolder, sourceThemeName), { - recursive: true, - }) - } else { - console.debug('Adding new theme', sourceThemeName) - cpSync(sourceThemePath, join(janDataThemesFolder, sourceThemeName), { - recursive: true, - }) - } -} diff --git a/electron/utils/path.ts b/electron/utils/path.ts deleted file mode 100644 index 4438156bc..000000000 --- a/electron/utils/path.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { mkdir } from 'fs-extra' -import { existsSync } from 'fs' -import { getJanDataFolderPath } from '@janhq/core/node' - -export async function createUserSpace(): Promise { - const janDataFolderPath = getJanDataFolderPath() - if (!existsSync(janDataFolderPath)) { - try { - await mkdir(janDataFolderPath) - } catch (err) { - console.error( - `Unable to create Jan data folder at ${janDataFolderPath}: ${err}` - ) - } - } -} diff --git a/electron/utils/selectedText.ts b/electron/utils/selectedText.ts deleted file mode 100644 index 51b2eb762..000000000 --- a/electron/utils/selectedText.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { clipboard, globalShortcut } from 'electron' -import { keyboard, Key } from "@kirillvakalov/nut-tree__nut-js" - -/** - * Gets selected text by synthesizing the keyboard shortcut - * "CommandOrControl+c" then reading text from the clipboard - */ -export const getSelectedText = async () => { - const currentClipboardContent = clipboard.readText() // preserve clipboard content - clipboard.clear() - const hotkeys: Key[] = [ - process.platform === 'darwin' ? Key.LeftCmd : Key.LeftControl, - Key.C, - ] - await keyboard.pressKey(...hotkeys) - await keyboard.releaseKey(...hotkeys) - await new Promise((resolve) => setTimeout(resolve, 200)) // add a delay before checking clipboard - const selectedText = clipboard.readText() - clipboard.writeText(currentClipboardContent) - return selectedText -} - -/** - * Registers a global shortcut of `accelerator`. The `callback` is called - * with the selected text when the registered shortcut is pressed by the user - * - * Returns `true` if the shortcut was registered successfully - */ -export const registerShortcut = ( - accelerator: Electron.Accelerator, - callback: (selectedText: string) => void -) => { - return globalShortcut.register(accelerator, async () => { - callback(await getSelectedText()) - }) -} - -/** - * Unregisters a global shortcut of `accelerator` and - * is equivalent to electron.globalShortcut.unregister - */ -export const unregisterShortcut = (accelerator: Electron.Accelerator) => { - globalShortcut.unregister(accelerator) -} diff --git a/electron/utils/setup.ts b/electron/utils/setup.ts deleted file mode 100644 index 39b8a4133..000000000 --- a/electron/utils/setup.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { app, screen } from 'electron' -import Store from 'electron-store' - -const DEFAULT_WIDTH = 1000 -const DEFAULT_HEIGHT = 800 - -const storage = new Store() - -export const setupCore = async () => { - // Setup core api for main process - global.core = { - // Define appPath function for app to retrieve app path globally - appPath: () => app.getPath('userData'), - } -} - -export const getBounds = async () => { - const defaultBounds = { - x: undefined, - y: undefined, - width: DEFAULT_WIDTH, - height: DEFAULT_HEIGHT, - } - - const bounds = (await storage.get('windowBounds')) as - | Electron.Rectangle - | undefined - - // If no bounds are saved, use the defaults - if (!bounds) { - storage.set('windowBounds', defaultBounds) - return defaultBounds - } - - // Validate that the bounds are on a valid display - const displays = screen.getAllDisplays() - const isValid = displays.some((display) => { - const { x, y, width, height } = display.bounds - return ( - bounds.x >= x && - bounds.x < x + width && - bounds.y >= y && - bounds.y < y + height - ) - }) - - // If the position is valid, return the saved bounds, otherwise return default bounds - if (isValid) { - return bounds - } else { - const primaryDisplay = screen.getPrimaryDisplay() - const resetBounds = { - x: primaryDisplay.bounds.x, - y: primaryDisplay.bounds.y, - width: DEFAULT_WIDTH, - height: DEFAULT_HEIGHT, - } - storage.set('windowBounds', resetBounds) - return resetBounds - } -} - -export const saveBounds = (bounds: Electron.Rectangle | undefined) => { - storage.set('windowBounds', bounds) -} diff --git a/electron/utils/shortcut.ts b/electron/utils/shortcut.ts deleted file mode 100644 index aa4607d9a..000000000 --- a/electron/utils/shortcut.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { getAppConfigurations } from '@janhq/core/node' -import { registerShortcut } from './selectedText' -import { windowManager } from '../managers/window' -// TODO: Retrieve from config later -const quickAskHotKey = 'CommandOrControl+J' - -export function registerGlobalShortcuts() { - if (!getAppConfigurations().quick_ask) return - const ret = registerShortcut(quickAskHotKey, (selectedText: string) => { - // Feature Toggle for Quick Ask - if (!windowManager.isQuickAskWindowVisible()) { - windowManager.showQuickAskWindow() - windowManager.sendQuickAskSelectedText(selectedText) - } else { - windowManager.hideQuickAskWindow() - } - }) - - if (!ret) { - console.error('Global shortcut registration failed') - } else { - console.log('Global shortcut registered successfully') - } -} diff --git a/electron/utils/system.ts b/electron/utils/system.ts deleted file mode 100644 index 5799de861..000000000 --- a/electron/utils/system.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { log } from '@janhq/core/node' -import { app } from 'electron' -import os from 'os' - -export const logSystemInfo = (): void => { - log(`[SPECS]::Version: ${app.getVersion()}`) - log(`[SPECS]::CPUs: ${JSON.stringify(os.cpus())}`) - log(`[SPECS]::Machine: ${os.machine()}`) - log(`[SPECS]::Endianness: ${os.endianness()}`) - log(`[SPECS]::Parallelism: ${os.availableParallelism()}`) - log(`[SPECS]::Free Mem: ${os.freemem()}`) - log(`[SPECS]::Total Mem: ${os.totalmem()}`) - log(`[SPECS]::OS Version: ${os.version()}`) - log(`[SPECS]::OS Platform: ${os.platform()}`) - log(`[SPECS]::OS Release: ${os.release()}`) -} diff --git a/extensions/model-extension/package.json b/extensions/model-extension/package.json index 9ce48da88..153c22fdf 100644 --- a/extensions/model-extension/package.json +++ b/extensions/model-extension/package.json @@ -2,7 +2,7 @@ "name": "@janhq/model-extension", "productName": "Model Management", "version": "1.0.36", - "description": "Handles model list, and settings.", + "description": "Manages model operations including listing, importing, updating, and deleting.", "main": "dist/index.js", "author": "Jan ", "license": "AGPL-3.0", diff --git a/joi/.prettierignore b/joi/.prettierignore deleted file mode 100644 index e9e840d7e..000000000 --- a/joi/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -.next/ -node_modules/ -dist/ -*.hbs -*.mdx -*.mjs \ No newline at end of file diff --git a/joi/.prettierrc b/joi/.prettierrc deleted file mode 100644 index 933d88d62..000000000 --- a/joi/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "semi": false, - "singleQuote": true, - "quoteProps": "consistent", - "trailingComma": "es5", - "endOfLine": "lf", - "plugins": ["prettier-plugin-tailwindcss"] -} diff --git a/joi/README.md b/joi/README.md deleted file mode 100644 index 161db4156..000000000 --- a/joi/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# @janhq/joi - -To install dependencies: - -```bash -yarn install -``` - -To run: - -```bash -yarn run dev -``` diff --git a/joi/jest.config.js b/joi/jest.config.js deleted file mode 100644 index 676042491..000000000 --- a/joi/jest.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - roots: ['/src'], - testMatch: ['**/*.test.*'], - collectCoverageFrom: ['src/**/*.{ts,tsx}'], - setupFilesAfterEnv: ['/jest.setup.js'], - testEnvironment: 'jsdom', -} diff --git a/joi/jest.setup.js b/joi/jest.setup.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/joi/package.json b/joi/package.json deleted file mode 100644 index 2f7d771d5..000000000 --- a/joi/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "@janhq/joi", - "version": "0.0.0", - "main": "dist/esm/index.js", - "types": "dist/index.d.ts", - "description": "A collection of UI component", - "files": [ - "dist" - ], - "keywords": [ - "design-system" - ], - "license": "MIT", - "homepage": "https://github.com/codecentrum/piksel#readme", - "repository": { - "type": "git", - "url": "https://github.com/codecentrum/piksel.git" - }, - "bugs": "https://github.com/codecentrum/piksel/issues", - "scripts": { - "dev": "rollup -c -w", - "build": "rimraf ./dist || true && rollup -c", - "test": "jest" - }, - "peerDependencies": { - "class-variance-authority": "^0.7.0", - "react": "^18", - "typescript": "^5.0.0" - }, - "dependencies": { - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-dialog": "^1.0.5", - "@radix-ui/react-dropdown-menu": "^2.1.4", - "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-scroll-area": "^1.0.5", - "@radix-ui/react-select": "^2.0.0", - "@radix-ui/react-slider": "^1.1.2", - "@radix-ui/react-slot": "^1.0.2", - "@radix-ui/react-tabs": "^1.0.4", - "@radix-ui/react-tooltip": "^1.0.7", - "@types/jest": "^29.5.12", - "autoprefixer": "10.4.16", - "jest": "^29.7.0", - "tailwind-merge": "^2.2.0", - "tailwindcss": "^3.4.1", - "ts-jest": "^29.2.5" - }, - "devDependencies": { - "@rollup/plugin-node-resolve": "15.2.3", - "@rollup/plugin-terser": "0.4.4", - "@testing-library/dom": "10.4.0", - "@testing-library/jest-dom": "^6.5.0", - "@testing-library/react": "^16.0.1", - "@testing-library/user-event": "^14.5.2", - "@types/jest": "^29.5.12", - "@types/react": "^18.3.12", - "@types/react-dom": "^19", - "class-variance-authority": "^0.7.0", - "jest-environment-jsdom": "^29.7.0", - "jest-transform-css": "^6.0.1", - "prettier": "^3.0.3", - "prettier-plugin-tailwindcss": "^0.5.6", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "rimraf": "^6.0.1", - "rollup": "4.12.0", - "rollup-plugin-bundle-size": "1.0.3", - "rollup-plugin-commonjs": "10.1.0", - "rollup-plugin-copy": "3.5.0", - "rollup-plugin-dts": "6.1.0", - "rollup-plugin-peer-deps-external": "2.2.4", - "rollup-plugin-postcss": "4.0.2", - "rollup-plugin-typescript2": "0.36.0", - "sass": "^1.83.1", - "typescript": "^5.7.2" - }, - "packageManager": "yarn@4.5.3" -} diff --git a/joi/rollup.config.mjs b/joi/rollup.config.mjs deleted file mode 100644 index 6577135dc..000000000 --- a/joi/rollup.config.mjs +++ /dev/null @@ -1,79 +0,0 @@ -import { readFileSync } from 'fs' -import dts from 'rollup-plugin-dts' -import terser from '@rollup/plugin-terser' -import autoprefixer from 'autoprefixer' -import commonjs from 'rollup-plugin-commonjs' -import bundleSize from 'rollup-plugin-bundle-size' -import peerDepsExternal from 'rollup-plugin-peer-deps-external' -import postcss from 'rollup-plugin-postcss' -import typescript from 'rollup-plugin-typescript2' -import tailwindcss from 'tailwindcss' -import typescriptEngine from 'typescript' -import resolve from '@rollup/plugin-node-resolve' -import copy from 'rollup-plugin-copy' - -const packageJson = JSON.parse(readFileSync('./package.json')) - -import tailwindConfig from './tailwind.config.js' - -export default [ - { - input: `./src/index.ts`, - output: [ - { - file: packageJson.main, - format: 'es', - exports: 'named', - sourcemap: false, - }, - ], - external: ['react', 'typescript', 'class-variance-authority'], - plugins: [ - postcss({ - plugins: [autoprefixer(), tailwindcss(tailwindConfig)], - sourceMap: true, - use: { - sass: { - silenceDeprecations: ['legacy-js-api'], - api: 'modern', - }, - }, - minimize: true, - extract: 'main.css', - }), - - peerDepsExternal({ includeDependencies: true }), - commonjs(), - resolve(), - typescript({ - tsconfig: './tsconfig.json', - typescript: typescriptEngine, - sourceMap: false, - exclude: [ - 'docs', - 'dist', - 'node_modules/**', - '**/*.test.ts', - '**/*.test.tsx', - ], - }), - terser(), - ], - watch: { - clearScreen: false, - }, - }, - { - input: 'dist/esm/index.d.ts', - output: [{ file: 'dist/index.d.ts', format: 'esm' }], - external: [/\.(sc|sa|c)ss$/], - plugins: [ - dts(), - peerDepsExternal({ includeDependencies: true }), - copy({ - targets: [{ src: 'dist/esm/main.css', dest: 'dist' }], - }), - bundleSize(), - ], - }, -] diff --git a/joi/src/core/Accordion/Accordion.test.tsx b/joi/src/core/Accordion/Accordion.test.tsx deleted file mode 100644 index 62b575ea3..000000000 --- a/joi/src/core/Accordion/Accordion.test.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React from 'react' -import '@testing-library/jest-dom' -import { render, screen, fireEvent } from '@testing-library/react' -import { Accordion, AccordionItem } from './index' - -// Mock the SCSS import -jest.mock('./styles.scss', () => ({})) - -describe('Accordion', () => { - it('renders accordion with items', () => { - render( - - - Content 1 - - - Content 2 - - - ) - - expect(screen.getByText('Item 1')).toBeInTheDocument() - expect(screen.getByText('Item 2')).toBeInTheDocument() - }) - - it('expands and collapses accordion items', () => { - render( - - - Content 1 - - - ) - - const trigger = screen.getByText('Item 1') - - // Initially, content should not be visible - expect(screen.queryByText('Content 1')).not.toBeInTheDocument() - - // Click to expand - fireEvent.click(trigger) - expect(screen.getByText('Content 1')).toBeInTheDocument() - - // Click to collapse - fireEvent.click(trigger) - expect(screen.queryByText('Content 1')).not.toBeInTheDocument() - }) - - it('respects defaultValue prop', () => { - render( - - - Content 1 - - - Content 2 - - - ) - - expect(screen.queryByText('Content 1')).not.toBeInTheDocument() - expect(screen.getByText('Content 2')).toBeInTheDocument() - }) -}) diff --git a/joi/src/core/Accordion/index.tsx b/joi/src/core/Accordion/index.tsx deleted file mode 100644 index 75a671ca4..000000000 --- a/joi/src/core/Accordion/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { ReactNode } from 'react' -import * as AccordionPrimitive from '@radix-ui/react-accordion' - -import { ChevronDownIcon } from '@radix-ui/react-icons' - -import './styles.scss' - -type AccordionProps = { - defaultValue: string[] - children: ReactNode -} - -type AccordionItemProps = { - children: ReactNode - value: string - title: string -} - -const AccordionItem = ({ children, value, title }: AccordionItemProps) => { - return ( - - - -

{title}
- - - - -
{children}
-
- - ) -} - -const Accordion = ({ defaultValue, children }: AccordionProps) => ( - - {children} - -) - -export { Accordion, AccordionItem } diff --git a/joi/src/core/Accordion/styles.scss b/joi/src/core/Accordion/styles.scss deleted file mode 100644 index 028cc021c..000000000 --- a/joi/src/core/Accordion/styles.scss +++ /dev/null @@ -1,73 +0,0 @@ -.accordion { - border-top: 1px solid hsla(var(--app-border)); - - &__item { - overflow: hidden; - margin-top: 1px; - border-bottom: 1px solid hsla(var(--app-border)); - - :focus-within { - position: relative; - z-index: 1; - } - } - - &__header { - display: flex; - } - - &__trigger { - font-family: inherit; - background-color: transparent; - padding: 0 16px; - height: 40px; - flex: 1; - display: flex; - align-items: center; - justify-content: space-between; - font-weight: 500; - } - - &__content { - overflow: hidden; - - &--wrapper { - padding: 4px 16px 16px 16px; - } - } - - &__chevron { - color: hsla(var(--text-secondary)); - transition: transform 300ms cubic-bezier(0.87, 0, 0.13, 1); - } -} - -.accordion__content[data-state='open'] { - animation: slideDown 300ms cubic-bezier(0.87, 0, 0.13, 1); -} - -.accordion__content[data-state='closed'] { - animation: slideUp 300ms cubic-bezier(0.87, 0, 0.13, 1); -} - -.accordion__trigger[data-state='open'] > .accordion__chevron { - transform: rotate(180deg); -} - -@keyframes slideDown { - from { - height: 0; - } - to { - height: var(--radix-accordion-content-height); - } -} - -@keyframes slideUp { - from { - height: var(--radix-accordion-content-height); - } - to { - height: 0; - } -} diff --git a/joi/src/core/Badge/Badge.test.tsx b/joi/src/core/Badge/Badge.test.tsx deleted file mode 100644 index 1d3192be7..000000000 --- a/joi/src/core/Badge/Badge.test.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react' -import { render, screen } from '@testing-library/react' -import '@testing-library/jest-dom' -import { Badge, badgeConfig } from './index' - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -describe('@joi/core/Badge', () => { - it('renders with default props', () => { - render(Test Badge) - const badge = screen.getByText('Test Badge') - expect(badge).toBeInTheDocument() - expect(badge).toHaveClass('badge') - expect(badge).toHaveClass('badge--primary') - expect(badge).toHaveClass('badge--medium') - expect(badge).toHaveClass('badge--solid') - }) - - it('applies custom className', () => { - render(Test Badge) - const badge = screen.getByText('Test Badge') - expect(badge).toHaveClass('custom-class') - }) - - it('renders with different themes', () => { - const themes = Object.keys(badgeConfig.variants.theme) - themes.forEach((theme) => { - render(Test Badge {theme}) - const badge = screen.getByText(`Test Badge ${theme}`) - expect(badge).toHaveClass(`badge--${theme}`) - }) - }) - - it('renders with different variants', () => { - const variants = Object.keys(badgeConfig.variants.variant) - variants.forEach((variant) => { - render(Test Badge {variant}) - const badge = screen.getByText(`Test Badge ${variant}`) - expect(badge).toHaveClass(`badge--${variant}`) - }) - }) - - it('renders with different sizes', () => { - const sizes = Object.keys(badgeConfig.variants.size) - sizes.forEach((size) => { - render(Test Badge {size}) - const badge = screen.getByText(`Test Badge ${size}`) - expect(badge).toHaveClass(`badge--${size}`) - }) - }) - - it('fails when a new theme is added without updating the test', () => { - const expectedThemes = [ - 'primary', - 'secondary', - 'warning', - 'success', - 'info', - 'destructive', - ] - const actualThemes = Object.keys(badgeConfig.variants.theme) - expect(actualThemes).toEqual(expectedThemes) - }) - - it('fails when a new variant is added without updating the test', () => { - const expectedVariant = ['solid', 'soft', 'outline'] - const actualVariants = Object.keys(badgeConfig.variants.variant) - expect(actualVariants).toEqual(expectedVariant) - }) - - it('fails when a new size is added without updating the test', () => { - const expectedSizes = ['small', 'medium', 'large'] - const actualSizes = Object.keys(badgeConfig.variants.size) - expect(actualSizes).toEqual(expectedSizes) - }) - - it('fails when a new variant CVA is added without updating the test', () => { - const expectedVariantsCVA = ['theme', 'variant', 'size'] - const actualVariant = Object.keys(badgeConfig.variants) - expect(actualVariant).toEqual(expectedVariantsCVA) - }) -}) diff --git a/joi/src/core/Badge/index.tsx b/joi/src/core/Badge/index.tsx deleted file mode 100644 index 5aeb19631..000000000 --- a/joi/src/core/Badge/index.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React, { HTMLAttributes } from 'react' - -import { cva, type VariantProps } from 'class-variance-authority' - -import { twMerge } from 'tailwind-merge' - -import './styles.scss' - -export const badgeConfig = { - variants: { - theme: { - primary: 'badge--primary', - secondary: 'badge--secondary', - warning: 'badge--warning', - success: 'badge--success', - info: 'badge--info', - destructive: 'badge--destructive', - }, - variant: { - solid: 'badge--solid', - soft: 'badge--soft', - outline: 'badge--outline', - }, - size: { - small: 'badge--small', - medium: 'badge--medium', - large: 'badge--large', - }, - }, - defaultVariants: { - theme: 'primary' as const, - size: 'medium' as const, - variant: 'solid' as const, - }, -} - -const badgeVariants = cva('badge', badgeConfig) - -export interface BadgeProps - extends HTMLAttributes, - VariantProps {} - -const Badge = ({ className, theme, size, variant, ...props }: BadgeProps) => { - return ( -
- ) -} - -export { Badge, badgeVariants } diff --git a/joi/src/core/Badge/styles.scss b/joi/src/core/Badge/styles.scss deleted file mode 100644 index a912e9216..000000000 --- a/joi/src/core/Badge/styles.scss +++ /dev/null @@ -1,131 +0,0 @@ -.badge { - @apply inline-flex items-center justify-center px-2 font-medium transition-all; - - // Primary - &--primary { - color: hsla(var(--primary-fg)); - background-color: hsla(var(--primary-bg)); - - // Variant soft primary - &.badge--soft { - background-color: hsla(var(--primary-bg-soft)); - color: hsla(var(--primary-bg)); - } - - // Variant outline primary - &.badge--outline { - background-color: transparent; - border: 1px solid hsla(var(--primary-bg)); - color: hsla(var(--primary-bg)); - } - } - - // Secondary - &--secondary { - background-color: hsla(var(--secondary-bg)); - color: hsla(var(--secondary-fg)); - - &.badge--soft { - background-color: hsla(var(--secondary-bg-soft)); - color: hsla(var(--secondary-bg)); - } - - // Variant outline secondary - &.badge--outline { - background-color: transparent; - border: 1px solid hsla(var(--secondary-bg)); - } - } - - // Destructive - &--destructive { - color: hsla(var(--destructive-fg)); - background-color: hsla(var(--destructive-bg)); - - // Variant soft destructive - &.badge--soft { - background-color: hsla(var(--destructive-bg-soft)); - color: hsla(var(--destructive-bg)); - } - - // Variant outline destructive - &.badge--outline { - background-color: transparent; - border: 1px solid hsla(var(--destructive-bg)); - color: hsla(var(--destructive-bg)); - } - } - - // Success - &--success { - @apply text-white; - background-color: hsla(var(--success-bg)); - - // Variant soft success - &.badge--soft { - background-color: hsla(var(--success-bg-soft)); - color: hsla(var(--success-bg)); - } - - // Variant outline success - &.badge--outline { - background-color: transparent; - border: 1px solid hsla(var(--success-bg)); - color: hsla(var(--success-bg)); - } - } - - // Warning - &--warning { - @apply text-white; - background-color: hsla(var(--warning-bg)); - - // Variant soft warning - &.badge--soft { - background-color: hsla(var(--warning-bg-soft)); - color: hsla(var(--warning-bg)); - } - - // Variant outline warning - &.badge--outline { - background-color: transparent; - border: 1px solid hsla(var(--warning-bg)); - color: hsla(var(--warning-bg)); - } - } - - // Info - &--info { - @apply text-white; - background-color: hsla(var(--info-bg)); - - // Variant soft info - &.badge--soft { - background-color: hsla(var(--info-bg-soft)); - color: hsla(var(--info-bg)); - } - - // Variant outline info - &.badge--outline { - background-color: transparent; - border: 1px solid hsla(var(--info-bg)); - color: hsla(var(--info-bg)); - } - } - - // Size - &--small { - @apply h-5; - border-radius: 4px; - } - - &--medium { - @apply h-6; - border-radius: 6px; - } - - &--large { - @apply h-7; - border-radius: 8px; - } -} diff --git a/joi/src/core/Button/Button.test.tsx b/joi/src/core/Button/Button.test.tsx deleted file mode 100644 index a4c679773..000000000 --- a/joi/src/core/Button/Button.test.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React from 'react' -import { render, screen } from '@testing-library/react' -import '@testing-library/jest-dom' -import { Button, buttonConfig } from './index' - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -describe('@joi/core/Button', () => { - it('renders with default props', () => { - render() - const button = screen.getByRole('button', { name: /click me/i }) - expect(button).toBeInTheDocument() - expect(button).toHaveClass('btn btn--primary btn--medium btn--solid') - }) - - it('applies custom className', () => { - render() - const badge = screen.getByText('Test Button') - expect(badge).toHaveClass('custom-class') - }) - - it('renders as a child component when asChild is true', () => { - render( - - ) - const link = screen.getByRole('link', { name: /link button/i }) - expect(link).toBeInTheDocument() - expect(link).toHaveClass('btn btn--primary btn--medium btn--solid') - }) - - it.each(Object.keys(buttonConfig.variants.theme))( - 'renders with theme %s', - (theme) => { - render() - const button = screen.getByRole('button', { name: /theme button/i }) - expect(button).toHaveClass(`btn btn--${theme}`) - } - ) - - it.each(Object.keys(buttonConfig.variants.variant))( - 'renders with variant %s', - (variant) => { - render() - const button = screen.getByRole('button', { name: /variant button/i }) - expect(button).toHaveClass(`btn btn--${variant}`) - } - ) - - it.each(Object.keys(buttonConfig.variants.size))( - 'renders with size %s', - (size) => { - render() - const button = screen.getByRole('button', { name: /size button/i }) - expect(button).toHaveClass(`btn btn--${size}`) - } - ) - - it('renders with block prop', () => { - render() - const button = screen.getByRole('button', { name: /block button/i }) - expect(button).toHaveClass('btn btn--block') - }) - - it('fails when a new theme is added without updating the test', () => { - const expectedThemes = ['primary', 'ghost', 'icon', 'destructive'] - const actualThemes = Object.keys(buttonConfig.variants.theme) - expect(actualThemes).toEqual(expectedThemes) - }) - - it('fails when a new variant is added without updating the test', () => { - const expectedVariant = ['solid', 'soft', 'outline'] - const actualVariants = Object.keys(buttonConfig.variants.variant) - expect(actualVariants).toEqual(expectedVariant) - }) - - it('fails when a new size is added without updating the test', () => { - const expectedSizes = ['small', 'medium', 'large'] - const actualSizes = Object.keys(buttonConfig.variants.size) - expect(actualSizes).toEqual(expectedSizes) - }) - - it('fails when a new variant CVA is added without updating the test', () => { - const expectedVariantsCVA = ['theme', 'variant', 'size', 'block'] - const actualVariant = Object.keys(buttonConfig.variants) - expect(actualVariant).toEqual(expectedVariantsCVA) - }) -}) diff --git a/joi/src/core/Button/index.tsx b/joi/src/core/Button/index.tsx deleted file mode 100644 index 9945eb4e9..000000000 --- a/joi/src/core/Button/index.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React, { forwardRef, ButtonHTMLAttributes } from 'react' - -import { Slot } from '@radix-ui/react-slot' -import { cva, type VariantProps } from 'class-variance-authority' - -import { twMerge } from 'tailwind-merge' - -import './styles.scss' - -export const buttonConfig = { - variants: { - theme: { - primary: 'btn--primary', - ghost: 'btn--ghost', - icon: 'btn--icon', - destructive: 'btn--destructive', - }, - variant: { - solid: 'btn--solid', - soft: 'btn--soft', - outline: 'btn--outline', - }, - size: { - small: 'btn--small', - medium: 'btn--medium', - large: 'btn--large', - }, - block: { - true: 'btn--block', - }, - }, - defaultVariants: { - theme: 'primary' as const, - size: 'medium' as const, - variant: 'solid' as const, - block: false as const, - }, -} -const buttonVariants = cva('btn', buttonConfig) - -export interface ButtonProps - extends ButtonHTMLAttributes, - VariantProps { - asChild?: boolean -} - -const Button = forwardRef( - ( - { className, theme, size, variant, block, asChild = false, ...props }, - ref - ) => { - const Comp = asChild ? Slot : 'button' - return ( - - ) - } -) - -export { Button } diff --git a/joi/src/core/Button/styles.scss b/joi/src/core/Button/styles.scss deleted file mode 100644 index f7cdce6a4..000000000 --- a/joi/src/core/Button/styles.scss +++ /dev/null @@ -1,134 +0,0 @@ -.btn { - @apply inline-flex items-center justify-center px-4 font-semibold transition-all; - - &:focus, - &:focus-within { - @apply outline-2 outline-offset-4; - } - &:hover { - filter: brightness(95%); - } - - // Primary - &--primary { - color: hsla(var(--primary-fg)); - background-color: hsla(var(--primary-bg)) !important; - &:hover { - filter: brightness(65%); - } - - // Variant soft primary - &.btn--soft { - background-color: hsla(var(--primary-bg-soft)) !important; - color: hsla(var(--primary-bg)); - } - - // Variant outline primary - &.btn--outline { - background-color: transparent !important; - border: 1px solid hsla(var(--primary-bg)); - color: hsla(var(--primary-bg)); - } - } - - // Ghost - &--ghost { - background-color: transparent !important; - &.btn--soft { - background-color: transparent !important; - } - - // Variant outline ghost - &.btn--outline { - background-color: transparent !important; - border: 1px solid hsla(var(--ghost-border)); - } - } - - // Destructive - &--destructive { - color: hsla(var(--destructive-fg)); - background-color: hsla(var(--destructive-bg)) !important; - &:hover { - filter: brightness(65%); - } - - // Variant soft destructive - &.btn--soft { - background-color: hsla(var(--destructive-bg-soft)) !important; - color: hsla(var(--destructive-bg)); - } - - // Variant outline destructive - &.btn--outline { - background-color: transparent !important; - border: 1px solid hsla(var(--destructive-bg)); - color: hsla(var(--destructive-bg)); - } - } - - // Disabled - &:disabled { - color: hsla(var(--disabled-fg)); - background-color: hsla(var(--disabled-bg)) !important; - cursor: not-allowed; - - &:hover { - filter: brightness(100%); - } - } - - // Icon - &--icon { - width: 24px; - height: 24px; - padding: 2px; - &:hover { - background-color: hsla(var(--icon-bg)) !important; - } - - &.btn--outline { - background-color: transparent !important; - border: 1px solid hsla(var(--icon-border)); - &:hover { - background-color: hsla(var(--icon-bg)) !important; - } - } - } - - // Size - &--small { - @apply h-6 px-2; - font-size: 12px; - border-radius: 4px; - &.btn--icon { - width: 24px; - height: 24px; - padding: 2px; - } - } - - &--medium { - @apply h-8; - border-radius: 6px; - &.btn--icon { - width: 24px; - height: 24px; - padding: 2px; - } - } - - &--large { - @apply h-9; - border-radius: 8px; - &.btn--icon { - width: 24px; - height: 24px; - padding: 2px; - } - } - - &--block { - @apply w-full; - } -} diff --git a/joi/src/core/Checkbox/Checkbox.test.tsx b/joi/src/core/Checkbox/Checkbox.test.tsx deleted file mode 100644 index ce81132d9..000000000 --- a/joi/src/core/Checkbox/Checkbox.test.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react' -import { render, screen, fireEvent } from '@testing-library/react' -import '@testing-library/jest-dom' -import { Checkbox } from './index' - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -describe('@joi/core/Checkbox', () => { - it('renders correctly with label', () => { - render() - expect(screen.getByLabelText('Test Checkbox')).toBeInTheDocument() - }) - - it('renders with helper description', () => { - render() - expect(screen.getByText('Helper text')).toBeInTheDocument() - }) - - it('renders error message when provided', () => { - render() - expect(screen.getByText('Error occurred')).toBeInTheDocument() - }) - - it('calls onChange when clicked', () => { - const mockOnChange = jest.fn() - render( - - ) - - fireEvent.click(screen.getByLabelText('Test Checkbox')) - expect(mockOnChange).toHaveBeenCalledTimes(1) - }) - - it('applies custom className', () => { - render() - expect(screen.getByRole('checkbox').parentElement).toHaveClass( - 'custom-class' - ) - }) - - it('disables the checkbox when disabled prop is true', () => { - render() - expect(screen.getByLabelText('Disabled Checkbox')).toBeDisabled() - }) -}) diff --git a/joi/src/core/Checkbox/index.tsx b/joi/src/core/Checkbox/index.tsx deleted file mode 100644 index 71f9523ac..000000000 --- a/joi/src/core/Checkbox/index.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react' - -import { twMerge } from 'tailwind-merge' - -import './styles.scss' - -export interface CheckboxProps extends InputHTMLAttributes { - disabled?: boolean - className?: string - label?: ReactNode - helperDescription?: ReactNode - errorMessage?: string - onChange?: (e: ChangeEvent) => void -} - -const Checkbox = ({ - id, - name, - checked, - disabled, - label, - defaultChecked, - helperDescription, - errorMessage, - className, - onChange, - ...props -}: CheckboxProps) => { - return ( -
- -
- -

{helperDescription}

- {errorMessage &&

{errorMessage}

} -
-
- ) -} -export { Checkbox } diff --git a/joi/src/core/Checkbox/styles.scss b/joi/src/core/Checkbox/styles.scss deleted file mode 100644 index 775a6289b..000000000 --- a/joi/src/core/Checkbox/styles.scss +++ /dev/null @@ -1,51 +0,0 @@ -.checkbox { - @apply inline-flex items-start space-x-2; - - > input[type='checkbox'] { - @apply flex h-4 w-4 flex-shrink-0 cursor-pointer appearance-none items-center justify-center; - background-color: transparent; - margin-top: 1px; - border: 1px solid hsla(var(--app-border)); - border-radius: 4px; - &:focus, - &:focus-within { - @apply outline-2 outline-offset-4; - } - - &:checked { - background-color: hsla(var(--primary-bg)); - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E"); - } - - &:disabled { - background-color: hsla(var(----disabled-bg)); - color: hsla(var(--disabled-fg)); - - &:checked { - background-color: hsla(var(--primary-bg)); - @apply cursor-not-allowed opacity-50; - } - - & + div > .checkbox__label { - @apply cursor-not-allowed opacity-50; - } - } - } - - &__helper { - font-size: 12px; - } - - &__error { - color: hsla(var(--destructive-bg)); - } - - &__label { - @apply inline-block cursor-pointer; - } - - &:disabled { - background-color: hsla(var(----disabled-bg)); - color: hsla(var(--disabled-fg)); - } -} diff --git a/joi/src/core/Dropdown/index.tsx b/joi/src/core/Dropdown/index.tsx deleted file mode 100644 index 6d9abcbea..000000000 --- a/joi/src/core/Dropdown/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { Fragment, PropsWithChildren, ReactNode } from 'react' -import * as DropdownMenu from '@radix-ui/react-dropdown-menu' -import './styles.scss' -import { twMerge } from 'tailwind-merge' - -type Props = { - options?: { name: ReactNode; value: string; suffix?: ReactNode }[] - className?: string - onValueChanged?: (value: string) => void -} - -const Dropdown = (props: PropsWithChildren & Props) => { - return ( - - {props.children} - - - - {props.options?.map((e, i) => ( - - {i !== 0 && ( - - )} - props.onValueChanged?.(e.value)} - > - {e.name} -
- {e.suffix} - - - ))} - - - - - ) -} - -export { Dropdown } diff --git a/joi/src/core/Dropdown/styles.scss b/joi/src/core/Dropdown/styles.scss deleted file mode 100644 index d472578df..000000000 --- a/joi/src/core/Dropdown/styles.scss +++ /dev/null @@ -1,155 +0,0 @@ -.DropdownMenuContent, -.DropdownMenuSubContent { - min-width: 220px; - background-color: white; - border-radius: 6px; - overflow: hidden; - padding: 0px; - box-shadow: - 0px 10px 38px -10px rgba(22, 23, 24, 0.35), - 0px 10px 20px -15px rgba(22, 23, 24, 0.2); - animation-duration: 400ms; - animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); - will-change: transform, opacity; -} -.DropdownMenuContent[data-side='top'], -.DropdownMenuSubContent[data-side='top'] { - animation-name: slideDownAndFade; -} -.DropdownMenuContent[data-side='right'], -.DropdownMenuSubContent[data-side='right'] { - animation-name: slideLeftAndFade; -} -.DropdownMenuContent[data-side='bottom'], -.DropdownMenuSubContent[data-side='bottom'] { - animation-name: slideUpAndFade; -} -.DropdownMenuContent[data-side='left'], -.DropdownMenuSubContent[data-side='left'] { - animation-name: slideRightAndFade; -} - -.DropdownMenuItem { - padding: 14px; - cursor: pointer; - outline: none; - flex: 1; - display: flex; - justify-content: space-between; /* Distribute space between children */ - align-items: center; /* Optional: Align items vertically */ - gap: 16px; - border-color: hsla(var(--app-border)); -} -.DropdownMenuCheckboxItem, -.DropdownMenuRadioItem, -.DropdownMenuSubTrigger { - font-size: 13px; - line-height: 1; - border-radius: 3px; - display: flex; - align-items: center; - height: 25px; - padding: 0 0; - position: relative; - padding-left: 25px; - user-select: none; - outline: none; -} -.DropdownMenuItem[data-disabled], -.DropdownMenuCheckboxItem[data-disabled], -.DropdownMenuRadioItem[data-disabled], -.DropdownMenuSubTrigger[data-disabled] { - pointer-events: none; -} -.DropdownMenuItem[data-highlighted], -.DropdownMenuCheckboxItem[data-highlighted], -.DropdownMenuRadioItem[data-highlighted], -.DropdownMenuSubTrigger[data-highlighted] { - background-color: hsla(var(--secondary-bg)); -} - -.DropdownMenuSeparator { - height: 1px; - width: '100%'; - background-color: hsla(var(--app-border)); -} - -.DropdownMenuItem::hover { - background-color: hsla(var(--secondary-bg)); -} - -.DropdownMenuLabel { - padding-left: 25px; - font-size: 12px; - line-height: 25px; - color: var(--mauve-11); -} - -.DropdownMenuItemIndicator { - position: absolute; - left: 0; - width: 25px; - display: inline-flex; - align-items: center; - justify-content: center; -} - -.DropdownMenuArrow { - fill: white; -} - -.RightSlot { - margin-left: auto; - padding-left: 20px; - color: var(--mauve-11); -} -[data-highlighted] > .RightSlot { - color: white; -} -[data-disabled] .RightSlot { - color: var(--mauve-8); -} - -@keyframes slideUpAndFade { - from { - opacity: 0; - transform: translateY(2px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes slideRightAndFade { - from { - opacity: 0; - transform: translateX(-2px); - } - to { - opacity: 1; - transform: translateX(0); - } -} - -@keyframes slideDownAndFade { - from { - opacity: 0; - transform: translateY(-2px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes slideLeftAndFade { - from { - opacity: 0; - transform: translateX(2px); - } - to { - opacity: 1; - transform: translateX(0); - } -} diff --git a/joi/src/core/Input/Input.test.tsx b/joi/src/core/Input/Input.test.tsx deleted file mode 100644 index 55bed74bb..000000000 --- a/joi/src/core/Input/Input.test.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react' -import { render, screen, fireEvent } from '@testing-library/react' -import '@testing-library/jest-dom' -import { Input } from './index' - -// Mock the styles import -jest.mock('./styles.scss', () => ({})) - -describe('@joi/core/Input', () => { - it('renders correctly', () => { - render() - expect(screen.getByPlaceholderText('Test input')).toBeInTheDocument() - }) - - it('applies custom className', () => { - render() - expect(screen.getByRole('textbox')).toHaveClass('custom-class') - }) - - it('aligns text to the right when textAlign prop is set', () => { - render() - expect(screen.getByRole('textbox')).toHaveClass('text-right') - }) - - it('renders prefix icon when provided', () => { - render(Prefix} />) - expect(screen.getByTestId('prefix-icon')).toBeInTheDocument() - }) - - it('renders suffix icon when provided', () => { - render(Suffix} />) - expect(screen.getByTestId('suffix-icon')).toBeInTheDocument() - }) - - it('renders clear icon when clearable is true', () => { - render() - expect(screen.getByTestId('cross-2-icon')).toBeInTheDocument() - }) - - it('calls onClick when input is clicked', () => { - const onClick = jest.fn() - render() - fireEvent.click(screen.getByRole('textbox')) - expect(onClick).toHaveBeenCalledTimes(1) - }) - - it('calls onClear when clear icon is clicked', () => { - const onClear = jest.fn() - render() - fireEvent.click(screen.getByTestId('cross-2-icon')) - expect(onClear).toHaveBeenCalledTimes(1) - }) -}) diff --git a/joi/src/core/Input/index.tsx b/joi/src/core/Input/index.tsx deleted file mode 100644 index 9f5e4c663..000000000 --- a/joi/src/core/Input/index.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, { ReactNode, forwardRef } from 'react' -import { twMerge } from 'tailwind-merge' - -import './styles.scss' -import { Cross2Icon } from '@radix-ui/react-icons' - -export interface Props extends React.InputHTMLAttributes { - textAlign?: 'left' | 'right' - prefixIcon?: ReactNode - suffixIcon?: ReactNode - onCLick?: () => void - clearable?: boolean - onClear?: () => void -} - -const Input = forwardRef( - ( - { - className, - type, - textAlign, - prefixIcon, - suffixIcon, - onClick, - onClear, - clearable, - ...props - }, - ref - ) => { - return ( -
- {prefixIcon && ( -
- {prefixIcon} -
- )} - {suffixIcon && ( -
- {suffixIcon} -
- )} - {clearable && ( -
- -
- )} - -
- ) - } -) - -export { Input } diff --git a/joi/src/core/Input/styles.scss b/joi/src/core/Input/styles.scss deleted file mode 100644 index 540d880b1..000000000 --- a/joi/src/core/Input/styles.scss +++ /dev/null @@ -1,50 +0,0 @@ -.input { - background-color: hsla(var(--input-bg)); - border: 1px solid hsla(var(--app-border)); - @apply inline-flex h-8 w-full items-center rounded-md border px-3 transition-colors; - @apply focus-within:outline-none focus-visible:outline-0 focus-visible:ring-1 focus-visible:ring-[hsla(var(--primary-bg))] focus-visible:ring-offset-0; - @apply file:border-0 file:bg-transparent file:font-medium; - @apply hover:border-[hsla(var(--primary-bg))]; - - &__wrapper { - position: relative; - } - - &.text-right { - text-align: right; - } - - &::placeholder { - color: hsla(var(--input-placeholder)); - } - - &:disabled { - color: hsla(var(--disabled-fg)); - background-color: hsla(var(--disabled-bg)); - cursor: not-allowed; - border: none; - } - - &__prefix-icon { - @apply absolute left-3 top-1/2 -translate-y-1/2 cursor-pointer; - color: hsla(var(--input-icon)); - + .input { - padding-left: 32px; - } - } - - &__suffix-icon { - @apply absolute right-3 top-1/2 -translate-y-1/2 cursor-pointer; - color: hsla(var(--input-icon)); - + .input { - padding-right: 32px; - } - } - &__clear-icon { - @apply absolute right-3 top-1/2 -translate-y-1/2 cursor-pointer; - color: hsla(var(--input-icon)); - + .input { - padding: 0 32px; - } - } -} diff --git a/joi/src/core/Modal/Modal.test.tsx b/joi/src/core/Modal/Modal.test.tsx deleted file mode 100644 index fe7ca7eac..000000000 --- a/joi/src/core/Modal/Modal.test.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react' -import { render, screen, fireEvent } from '@testing-library/react' -import '@testing-library/jest-dom' -import { Modal } from './index' - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -describe('Modal', () => { - it('renders the modal with trigger and content', () => { - render( - Open Modal} - content={
Modal Content
} - /> - ) - - expect(screen.getByText('Open Modal')).toBeInTheDocument() - fireEvent.click(screen.getByText('Open Modal')) - expect(screen.getByText('Modal Content')).toBeInTheDocument() - }) - - it('renders the modal with title', () => { - render( - Open Modal} - content={
Modal Content
} - title="Modal Title" - /> - ) - - fireEvent.click(screen.getByText('Open Modal')) - expect(screen.getByText('Modal Title')).toBeInTheDocument() - }) - - it('renders full page modal', () => { - render( - Open Modal} - content={
Modal Content
} - fullPage - /> - ) - - fireEvent.click(screen.getByText('Open Modal')) - expect(screen.getByRole('dialog')).toHaveClass('modal__content--fullpage') - }) - - it('hides close button when hideClose is true', () => { - render( - Open Modal} - content={
Modal Content
} - hideClose - /> - ) - - fireEvent.click(screen.getByText('Open Modal')) - expect(screen.queryByLabelText('Close')).not.toBeInTheDocument() - }) - - it('calls onOpenChange when opening and closing the modal', () => { - const onOpenChangeMock = jest.fn() - render( - Open Modal} - content={
Modal Content
} - onOpenChange={onOpenChangeMock} - /> - ) - - fireEvent.click(screen.getByText('Open Modal')) - expect(onOpenChangeMock).toHaveBeenCalledWith(true) - - fireEvent.click(screen.getByLabelText('Close')) - expect(onOpenChangeMock).toHaveBeenCalledWith(false) - }) -}) diff --git a/joi/src/core/Modal/index.tsx b/joi/src/core/Modal/index.tsx deleted file mode 100644 index 7754fb3f0..000000000 --- a/joi/src/core/Modal/index.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React, { ReactNode } from 'react' -import * as DialogPrimitive from '@radix-ui/react-dialog' -import { Cross2Icon } from '@radix-ui/react-icons' - -import './styles.scss' -import { twMerge } from 'tailwind-merge' - -type Props = { - trigger?: ReactNode - content: ReactNode - open?: boolean - className?: string - fullPage?: boolean - hideClose?: boolean - title?: ReactNode - onOpenChange?: (open: boolean) => void -} - -const ModalClose = DialogPrimitive.Close - -const Modal = ({ - trigger, - content, - open, - title, - fullPage, - className, - onOpenChange, - hideClose, -}: Props) => ( - - {trigger} - - - - - {title} - - {content} - {!hideClose && ( - - - - )} - - - -) - -export { Modal, ModalClose } diff --git a/joi/src/core/Modal/styles.scss b/joi/src/core/Modal/styles.scss deleted file mode 100644 index 717ce2ac7..000000000 --- a/joi/src/core/Modal/styles.scss +++ /dev/null @@ -1,85 +0,0 @@ -/* reset */ -button, -fieldset, -.modal { - &__overlay { - background-color: hsla(var(--modal-overlay)); - z-index: 200; - position: fixed; - inset: 0; - animation: overlayShow 150ms cubic-bezier(0.16, 1, 0.3, 1); - } - - &__content { - color: hsla(var(--modal-fg)); - overflow: auto; - background-color: hsla(var(--modal-bg)); - border-radius: 8px; - font-size: 14px; - position: fixed; - z-index: 300; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 50vw; - max-width: 560px; - max-height: 85vh; - padding: 16px; - animation: contentShow 150ms cubic-bezier(0.16, 1, 0.3, 1); - border: 1px solid hsla(var(--app-border)); - @apply w-full; - - &--fullpage { - max-width: none; - width: 90vw; - max-height: 90vh; - } - - &:focus { - outline: none; - } - } - - &__title { - @apply leading-relaxed; - margin: 0 0 8px 0; - padding-right: 16px; - font-weight: 600; - color: hsla(var(--modal-fg)); - font-size: 18px; - } - - &__close-icon { - font-family: inherit; - border-radius: 100%; - height: 24px; - width: 24px; - display: inline-flex; - align-items: center; - justify-content: center; - color: hsla(var(--modal-fg)); - position: absolute; - top: 8px; - right: 16px; - } -} - -@keyframes overlayShow { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@keyframes contentShow { - from { - opacity: 0; - transform: translate(-50%, -48%) scale(0.96); - } - to { - opacity: 1; - transform: translate(-50%, -50%) scale(1); - } -} diff --git a/joi/src/core/Progress/Progress.test.tsx b/joi/src/core/Progress/Progress.test.tsx deleted file mode 100644 index 9d18bf019..000000000 --- a/joi/src/core/Progress/Progress.test.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import { render, screen } from '@testing-library/react' -import '@testing-library/jest-dom' -import { Progress } from './index' - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -describe('@joi/core/Progress', () => { - it('renders with default props', () => { - render() - const progressElement = screen.getByRole('progressbar') - expect(progressElement).toBeInTheDocument() - expect(progressElement).toHaveClass('progress') - expect(progressElement).toHaveClass('progress--medium') - expect(progressElement).toHaveAttribute('aria-valuenow', '50') - }) - - it('applies custom className', () => { - render() - const progressElement = screen.getByRole('progressbar') - expect(progressElement).toHaveClass('custom-class') - }) - - it('renders with different sizes', () => { - const { rerender } = render() - let progressElement = screen.getByRole('progressbar') - expect(progressElement).toHaveClass('progress--small') - - rerender() - progressElement = screen.getByRole('progressbar') - expect(progressElement).toHaveClass('progress--large') - }) - - it('sets the correct transform style based on value', () => { - render() - const progressElement = screen.getByRole('progressbar') - const indicatorElement = progressElement.firstChild as HTMLElement - expect(indicatorElement).toHaveStyle('transform: translateX(-25%)') - }) - - it('handles edge cases for value', () => { - const { rerender } = render() - let progressElement = screen.getByRole('progressbar') - let indicatorElement = progressElement.firstChild as HTMLElement - expect(indicatorElement).toHaveStyle('transform: translateX(-100%)') - expect(progressElement).toHaveAttribute('aria-valuenow', '0') - - rerender() - progressElement = screen.getByRole('progressbar') - indicatorElement = progressElement.firstChild as HTMLElement - expect(indicatorElement).toHaveStyle('transform: translateX(-0%)') - expect(progressElement).toHaveAttribute('aria-valuenow', '100') - }) -}) diff --git a/joi/src/core/Progress/index.tsx b/joi/src/core/Progress/index.tsx deleted file mode 100644 index 01aefbeb0..000000000 --- a/joi/src/core/Progress/index.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React, { HTMLAttributes } from 'react' - -import { cva, type VariantProps } from 'class-variance-authority' - -import { twMerge } from 'tailwind-merge' - -import './styles.scss' - -const progressVariants = cva('progress', { - variants: { - size: { - small: 'progress--small', - medium: 'progress--medium', - large: 'progress--large', - }, - }, - defaultVariants: { - size: 'medium', - }, -}) - -export interface ProgressProps - extends HTMLAttributes, - VariantProps { - value: number -} - -const Progress = ({ className, size, value, ...props }: ProgressProps) => { - return ( -
-
-
- ) -} - -export { Progress } diff --git a/joi/src/core/Progress/styles.scss b/joi/src/core/Progress/styles.scss deleted file mode 100644 index 02d22f5f4..000000000 --- a/joi/src/core/Progress/styles.scss +++ /dev/null @@ -1,25 +0,0 @@ -.progress { - background-color: hsla(var(--progress-track-bg)); - border-radius: 8px; - position: relative; - overflow: hidden; - @apply transition-all; - - &--indicator { - background-color: hsla(var(--primary-bg)); - position: absolute; - border-radius: 8px; - width: 100%; - height: 100%; - } - - &--small { - height: 6px; - } - &--medium { - @apply h-2; - } - &--large { - @apply h-3; - } -} diff --git a/joi/src/core/ScrollArea/ScrollArea.test.tsx b/joi/src/core/ScrollArea/ScrollArea.test.tsx deleted file mode 100644 index 961c5da59..000000000 --- a/joi/src/core/ScrollArea/ScrollArea.test.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react' -import { render, screen } from '@testing-library/react' -import '@testing-library/jest-dom' -import { ScrollArea } from './index' - -declare const global: typeof globalThis - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -class ResizeObserverMock { - observe() {} - unobserve() {} - disconnect() {} -} - -global.ResizeObserver = ResizeObserverMock - -describe('@joi/core/ScrollArea', () => { - it('renders children correctly', () => { - render( - -
Test Content
-
- ) - - const child = screen.getByTestId('child') - expect(child).toBeInTheDocument() - expect(child).toHaveTextContent('Test Content') - }) - - it('applies custom className', () => { - const { container } = render() - - const root = container.firstChild as HTMLElement - expect(root).toHaveClass('scroll-area__root') - expect(root).toHaveClass('custom-class') - }) - - it('forwards ref to the Viewport component', () => { - const ref = React.createRef() - render() - - expect(ref.current).toBeInstanceOf(HTMLDivElement) - expect(ref.current).toHaveClass('scroll-area__viewport') - }) -}) diff --git a/joi/src/core/ScrollArea/index.tsx b/joi/src/core/ScrollArea/index.tsx deleted file mode 100644 index 2d44b4af8..000000000 --- a/joi/src/core/ScrollArea/index.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React, { PropsWithChildren, forwardRef } from 'react' -import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area' -import { twMerge } from 'tailwind-merge' - -import './styles.scss' - -const ScrollArea = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, onScroll, ...props }, ref) => ( - - - {children} - - - - - - - - - -)) - -export { ScrollArea } diff --git a/joi/src/core/ScrollArea/styles.scss b/joi/src/core/ScrollArea/styles.scss deleted file mode 100644 index 99ee7de87..000000000 --- a/joi/src/core/ScrollArea/styles.scss +++ /dev/null @@ -1,53 +0,0 @@ -.scroll-area { - position: relative; - z-index: 999; - - &__root { - width: 200px; - height: 225px; - overflow: hidden; - } - - &__viewport { - width: 100%; - height: 100%; - border-radius: inherit; - } - - &__bar { - display: flex; - user-select: none; - touch-action: none; - padding: 1px; - background: hsla(var(--scrollbar-tracker)); - transition: background 160ms ease-out; - } - - &__thumb { - flex: 1; - background: hsla(var(--scrollbar-thumb)); - border-radius: 20px; - position: relative; - - ::before { - content: ''; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 100%; - height: 100%; - min-width: 44px; - min-height: 44px; - } - } -} - -.scroll-area__bar[data-orientation='vertical'] { - width: 8px; -} - -.scroll-area__bar[data-orientation='horizontal'] { - flex-direction: column; - height: 8px; -} diff --git a/joi/src/core/Select/Select.test.tsx b/joi/src/core/Select/Select.test.tsx deleted file mode 100644 index 1b450706b..000000000 --- a/joi/src/core/Select/Select.test.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React from 'react' -import { render, screen } from '@testing-library/react' -import userEvent from '@testing-library/user-event' -import { Select } from './index' -import '@testing-library/jest-dom' - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -jest.mock('tailwind-merge', () => ({ - twMerge: (...classes: string[]) => classes.filter(Boolean).join(' '), -})) - -const mockOnValueChange = jest.fn() -jest.mock('@radix-ui/react-select', () => ({ - Root: ({ - children, - onValueChange, - }: { - children: React.ReactNode - onValueChange?: (value: string) => void - }) => { - mockOnValueChange.mockImplementation(onValueChange) - return
{children}
- }, - Trigger: ({ - children, - className, - }: { - children: React.ReactNode - className?: string - }) => ( - - ), - Value: ({ placeholder }: { placeholder?: string }) => ( - {placeholder} - ), - Icon: ({ children }: { children: React.ReactNode }) => ( - {children} - ), - Portal: ({ children }: { children: React.ReactNode }) => ( -
{children}
- ), - Content: ({ children }: { children: React.ReactNode }) => ( -
{children}
- ), - Viewport: ({ children }: { children: React.ReactNode }) => ( -
{children}
- ), - Item: ({ children, value }: { children: React.ReactNode; value: string }) => ( -
mockOnValueChange(value)} - > - {children} -
- ), - ItemText: ({ children }: { children: React.ReactNode }) => ( - {children} - ), - ItemIndicator: ({ children }: { children: React.ReactNode }) => ( - {children} - ), - Arrow: () =>
, -})) -describe('@joi/core/Select', () => { - const options = [ - { name: 'Option 1', value: 'option1' }, - { name: 'Option 2', value: 'option2' }, - ] - - it('renders with placeholder', () => { - render() - expect(screen.getByTestId('select-item-option1')).toBeInTheDocument() - expect(screen.getByTestId('select-item-option2')).toBeInTheDocument() - }) - - it('calls onValueChange when an option is selected', async () => { - const user = userEvent.setup() - const onValueChange = jest.fn() - render() - expect(screen.getByTestId('select-trigger')).toHaveClass('select__disabled') - }) - - it('applies block class when block prop is true', () => { - render( - {children} -
- ), - Track: ({ children }: any) => ( -
{children}
- ), - Range: () =>
, - Thumb: () =>
, -})) - -describe('@joi/core/Slider', () => { - it('renders correctly with default props', () => { - render() - expect(screen.getByTestId('slider-root')).toBeInTheDocument() - expect(screen.getByTestId('slider-track')).toBeInTheDocument() - expect(screen.getByTestId('slider-range')).toBeInTheDocument() - expect(screen.getByTestId('slider-thumb')).toBeInTheDocument() - }) - - it('passes props correctly to SliderPrimitive.Root', () => { - const props = { - name: 'test-slider', - min: 0, - max: 100, - value: [50], - step: 1, - disabled: true, - } - render() - const sliderRoot = screen.getByTestId('slider-root') - expect(sliderRoot).toHaveAttribute('name', 'test-slider') - expect(sliderRoot).toHaveAttribute('min', '0') - expect(sliderRoot).toHaveAttribute('max', '100') - expect(sliderRoot).toHaveAttribute('value', '50') - expect(sliderRoot).toHaveAttribute('step', '1') - expect(sliderRoot).toHaveAttribute('disabled', '') - }) - - it('calls onValueChange when value changes', () => { - const onValueChange = jest.fn() - render() - const input = screen.getByTestId('slider-root').querySelector('input') - fireEvent.change(input!, { target: { value: '75' } }) - expect(onValueChange).toHaveBeenCalledWith([75]) - }) -}) diff --git a/joi/src/core/Slider/index.tsx b/joi/src/core/Slider/index.tsx deleted file mode 100644 index ea3d8dfca..000000000 --- a/joi/src/core/Slider/index.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react' -import * as SliderPrimitive from '@radix-ui/react-slider' -import { twMerge } from 'tailwind-merge' - -import './styles.scss' - -type Props = { - name?: string - min?: number - max?: number - onValueChange?(value: number[]): void - value?: number[] - defaultValue?: number[] - step?: number - disabled?: boolean -} - -const Slider = ({ - name, - min, - max, - onValueChange, - value, - defaultValue, - step, - disabled, -}: Props) => ( - - - - - {value?.map((_, i) => ( - - ))} - -) - -export { Slider } diff --git a/joi/src/core/Slider/styles.scss b/joi/src/core/Slider/styles.scss deleted file mode 100644 index 6b7cf8575..000000000 --- a/joi/src/core/Slider/styles.scss +++ /dev/null @@ -1,43 +0,0 @@ -.slider { - position: relative; - display: flex; - align-items: center; - user-select: none; - touch-action: none; - height: 16px; - - &--disabled { - cursor: not-allowed; - opacity: 0.2; - } - - &__track { - background-color: hsla(var(--slider-track-bg)); - position: relative; - flex-grow: 1; - border-radius: 9999px; - height: 4px; - } - - &__range { - position: absolute; - background-color: hsla(var(--primary-bg)); - border-radius: 9999px; - height: 100%; - } - - &__thumb { - display: block; - width: 16px; - height: 16px; - background-color: hsla(var(--slider-thumb-bg)); - border-radius: 10px; - padding: 2px; - border: 2px solid hsla(var(--primary-bg)); - - &:focus { - outline: none; - box-shadow: 0 0 0 5px hsla(var(--slider-track-bg), 50%); - } - } -} diff --git a/joi/src/core/Switch/Switch.test.tsx b/joi/src/core/Switch/Switch.test.tsx deleted file mode 100644 index 72f3d8007..000000000 --- a/joi/src/core/Switch/Switch.test.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from 'react' -import { render, fireEvent } from '@testing-library/react' -import '@testing-library/jest-dom' -import { Switch } from './index' - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -describe('@joi/core/Switch', () => { - it('renders correctly', () => { - const { getByRole } = render() - const checkbox = getByRole('checkbox') - expect(checkbox).toBeInTheDocument() - }) - - it('applies custom className', () => { - const { container } = render() - expect(container.firstChild).toHaveClass('switch custom-class') - }) - - it('can be checked and unchecked', () => { - const { getByRole } = render() - const checkbox = getByRole('checkbox') as HTMLInputElement - - expect(checkbox.checked).toBe(false) - fireEvent.click(checkbox) - expect(checkbox.checked).toBe(true) - fireEvent.click(checkbox) - expect(checkbox.checked).toBe(false) - }) - - it('can be disabled', () => { - const { getByRole } = render() - const checkbox = getByRole('checkbox') as HTMLInputElement - expect(checkbox).toBeDisabled() - }) - - it('calls onChange when clicked', () => { - const handleChange = jest.fn() - const { getByRole } = render() - const checkbox = getByRole('checkbox') - - fireEvent.click(checkbox) - expect(handleChange).toHaveBeenCalledTimes(1) - }) - - it('can have a default checked state', () => { - const { getByRole } = render() - const checkbox = getByRole('checkbox') as HTMLInputElement - expect(checkbox.checked).toBe(true) - }) -}) diff --git a/joi/src/core/Switch/index.tsx b/joi/src/core/Switch/index.tsx deleted file mode 100644 index 28eabe6e6..000000000 --- a/joi/src/core/Switch/index.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React, { ChangeEvent, InputHTMLAttributes } from 'react' - -import { twMerge } from 'tailwind-merge' - -import './styles.scss' - -export interface SwitchProps extends InputHTMLAttributes { - disabled?: boolean - className?: string - onChange?: (e: ChangeEvent) => void -} - -const Switch = ({ - name, - checked, - disabled, - defaultChecked, - className, - onChange, - ...props -}: SwitchProps) => { - return ( - - ) -} -export { Switch } diff --git a/joi/src/core/Switch/styles.scss b/joi/src/core/Switch/styles.scss deleted file mode 100644 index 9f7adbd4f..000000000 --- a/joi/src/core/Switch/styles.scss +++ /dev/null @@ -1,67 +0,0 @@ -.switch { - position: relative; - display: inline-block; - width: 32px; - height: 18px; - - > input { - opacity: 0; - width: 0; - height: 0; - - // disabled - &:disabled { - + .switch--thumb { - cursor: not-allowed; - background-color: hsla(var(--disabled-bg)); - &:before { - background-color: hsla(var(--disabled-fg)); - } - } - // disabled and checked - &:checked + .switch--thumb { - cursor: not-allowed; - background-color: hsla(var(--primary-bg)); - &:before { - background-color: hsla(var(--disabled-fg)); - } - } - } - - &:checked + .switch--thumb { - background-color: hsla(var(--primary-bg)); - - &::before { - -webkit-transform: translateX(14px); - -ms-transform: translateX(14px); - transform: translateX(14px); - } - } - } - - &--thumb { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: hsla(var(--switch-bg)); - -webkit-transition: 0.4s; - transition: 0.4s; - border-radius: 20px; - - &:before { - position: absolute; - content: ''; - height: 14px; - width: 14px; - left: 2px; - bottom: 2px; - background-color: hsla(var(--switch-fg)); - -webkit-transition: 0.4s; - transition: 0.4s; - border-radius: 50%; - } - } -} diff --git a/joi/src/core/Tabs/Tabs.test.tsx b/joi/src/core/Tabs/Tabs.test.tsx deleted file mode 100644 index 46bd48435..000000000 --- a/joi/src/core/Tabs/Tabs.test.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import React from 'react' -import { render, screen, fireEvent } from '@testing-library/react' -import '@testing-library/jest-dom' -import { Tabs, TabsContent } from './index' - -// Mock the Tooltip component -jest.mock('../Tooltip', () => ({ - Tooltip: ({ children, content, trigger }) => ( -
- {trigger || children} -
- ), -})) - -// Mock the styles -jest.mock('./styles.scss', () => ({})) - -describe('@joi/core/Tabs', () => { - const mockOptions = [ - { name: 'Tab 1', value: 'tab1' }, - { name: 'Tab 2', value: 'tab2' }, - { - name: 'Tab 3', - value: 'tab3', - disabled: true, - tooltipContent: 'Disabled tab', - }, - ] - - it('renders tabs correctly', () => { - render( - {}}> - Content 1 - Content 2 - Content 3 - - ) - - expect(screen.getByText('Tab 1')).toBeInTheDocument() - expect(screen.getByText('Tab 2')).toBeInTheDocument() - expect(screen.getByText('Tab 3')).toBeInTheDocument() - expect(screen.getByText('Content 1')).toBeInTheDocument() - }) - - it('changes tab content when clicked', () => { - const { rerender } = render( - {}}> - Content 1 - Content 2 - Content 3 - - ) - - expect(screen.getByText('Content 1')).toBeInTheDocument() - expect(screen.queryByText('Content 2')).not.toBeInTheDocument() - - fireEvent.click(screen.getByText('Tab 2')) - - // Rerender with the new value to simulate the state change - rerender( - {}}> - Content 1 - Content 2 - Content 3 - - ) - - expect(screen.queryByText('Content 1')).not.toBeInTheDocument() - expect(screen.getByText('Content 2')).toBeInTheDocument() - }) - - it('disables tab when specified', () => { - render( - {}}> - Content 1 - Content 2 - Content 3 - - ) - - expect(screen.getByText('Tab 3')).toHaveAttribute('disabled') - }) - - it('renders tooltip for disabled tab', () => { - render( - {}}> - Content 1 - Content 2 - Content 3 - - ) - - const tooltipWrapper = screen.getByTestId('mock-tooltip') - expect(tooltipWrapper).toHaveAttribute( - 'data-tooltip-content', - 'Disabled tab' - ) - }) - - it('applies the tabStyle if provided', () => { - render( - {}} - tabStyle="segmented" - /> - ) - - const tabsContainer = screen.getByTestId('segmented-style') - expect(tabsContainer).toHaveClass('tabs') - expect(tabsContainer).toHaveClass('tabs--segmented') - }) -}) diff --git a/joi/src/core/Tabs/index.tsx b/joi/src/core/Tabs/index.tsx deleted file mode 100644 index 2dca19831..000000000 --- a/joi/src/core/Tabs/index.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React, { ReactNode } from 'react' - -import * as TabsPrimitive from '@radix-ui/react-tabs' - -import { Tooltip } from '../Tooltip' - -import './styles.scss' -import { twMerge } from 'tailwind-merge' - -type TabStyles = 'segmented' - -type TabsProps = { - options: { - name: string - value: string - disabled?: boolean - tooltipContent?: string - }[] - children?: ReactNode - - defaultValue?: string - tabStyle?: TabStyles - value: string - onValueChange?: (value: string) => void -} - -type TabsContentProps = { - value: string - children: ReactNode - className?: string -} - -const TabsContent = ({ value, children, className }: TabsContentProps) => { - return ( - - {children} - - ) -} - -const Tabs = ({ - options, - children, - tabStyle, - defaultValue, - value, - onValueChange, - ...props -}: TabsProps) => ( - - - {options.map((option, i) => { - return option.disabled ? ( - - {option.name} - - } - /> - ) : ( - - {option.name} - - ) - })} - - - {children} - -) - -export { Tabs, TabsContent } diff --git a/joi/src/core/Tabs/styles.scss b/joi/src/core/Tabs/styles.scss deleted file mode 100644 index 932b8431a..000000000 --- a/joi/src/core/Tabs/styles.scss +++ /dev/null @@ -1,66 +0,0 @@ -.tabs { - display: flex; - flex-direction: column; - width: 100%; - - &--segmented { - background-color: hsla(var(--secondary-bg)); - border-radius: 6px; - height: 33px; - - .tabs__list { - border: none; - justify-content: center; - align-items: center; - height: 33px; - } - - .tabs__trigger[data-state='active'] { - background-color: hsla(var(--app-bg)); - border: none; - height: 25px; - margin: 0 4px; - border-radius: 5px; - } - } - - &__list { - flex-shrink: 0; - display: flex; - border-bottom: 1px solid hsla(var(--app-border)); - } - - &__trigger { - padding: 0 12px; - flex: 1; - height: 38px; - display: flex; - white-space: nowrap; - color: hsla(var(--text-secondary)); - align-items: center; - justify-content: center; - line-height: 1; - font-weight: medium; - user-select: none; - &:focus { - position: relative; - } - &:disabled { - cursor: not-allowed; - opacity: 0.5; - } - } - - &__content { - flex-grow: 1; - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - outline: none; - } -} - -.tabs__trigger[data-state='active'] { - border-bottom: 1px solid hsla(var(--primary-bg)); - font-weight: 600; - color: hsla(var(--text-primary)); -} diff --git a/joi/src/core/TextArea/TextArea.test.tsx b/joi/src/core/TextArea/TextArea.test.tsx deleted file mode 100644 index e29eed5d0..000000000 --- a/joi/src/core/TextArea/TextArea.test.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react' -import { render, screen, act } from '@testing-library/react' -import '@testing-library/jest-dom' -import { TextArea } from './index' - -jest.mock('./styles.scss', () => ({})) - -describe('@joi/core/TextArea', () => { - it('renders correctly', () => { - render(