diff --git a/apps/mobile/app/common/database/index.ts b/apps/mobile/app/common/database/index.ts
index b5a59ec11..cae6785ab 100644
--- a/apps/mobile/app/common/database/index.ts
+++ b/apps/mobile/app/common/database/index.ts
@@ -39,7 +39,7 @@ export async function setupDatabase(password?: string) {
const key = await getDatabaseKey(password);
if (!key) throw new Error(strings.databaseSetupFailed());
- // const base = `http://192.168.100.88`;
+ // const base = `http://192.168.100.92`;
// database.host({
// API_HOST: `${base}:5264`,
diff --git a/apps/mobile/app/package.json b/apps/mobile/app/package.json
index ade73b446..72ed3879a 100644
--- a/apps/mobile/app/package.json
+++ b/apps/mobile/app/package.json
@@ -44,7 +44,8 @@
"@trpc/react-query": "^10.45.2",
"@trpc/server": "^10.45.2",
"@tanstack/react-query": "^4.36.1",
- "async-mutex": "0.5.0"
+ "async-mutex": "0.5.0",
+ "react-async-hook": "^4.0.0"
},
"sideEffects": false
}
diff --git a/apps/mobile/app/screens/settings/components.tsx b/apps/mobile/app/screens/settings/components.tsx
index 1b6996670..20ac19215 100644
--- a/apps/mobile/app/screens/settings/components.tsx
+++ b/apps/mobile/app/screens/settings/components.tsx
@@ -43,6 +43,7 @@ import { ServersConfiguration } from "./server-config";
import SoundPicker from "./sound-picker";
import ThemeSelector from "./theme-selector";
import { TitleFormat } from "./title-format";
+import { NotesnookCircle } from "./notesnook-circle";
export const components: { [name: string]: ReactElement } = {
homeselector: ,
@@ -69,5 +70,6 @@ export const components: { [name: string]: ReactElement } = {
),
"sidebar-tab-selector": ,
"change-password": ,
- "change-email":
+ "change-email": ,
+ "notesnook-circle":
};
diff --git a/apps/mobile/app/screens/settings/notesnook-circle.tsx b/apps/mobile/app/screens/settings/notesnook-circle.tsx
new file mode 100644
index 000000000..af0170e91
--- /dev/null
+++ b/apps/mobile/app/screens/settings/notesnook-circle.tsx
@@ -0,0 +1,190 @@
+import { CirclePartner, SubscriptionStatus } from "@notesnook/core";
+import { strings } from "@notesnook/intl";
+import { useThemeColors } from "@notesnook/theme";
+import Clipboard from "@react-native-clipboard/clipboard";
+import { useEffect, useState } from "react";
+import {
+ ActivityIndicator,
+ Image,
+ ScrollView,
+ TouchableOpacity,
+ View
+} from "react-native";
+import { db } from "../../common/database";
+import AppIcon from "../../components/ui/AppIcon";
+import { Button } from "../../components/ui/button";
+import Heading from "../../components/ui/typography/heading";
+import Paragraph from "../../components/ui/typography/paragraph";
+import { ToastManager } from "../../services/event-manager";
+import Navigation from "../../services/navigation";
+import PremiumService from "../../services/premium";
+import { useUserStore } from "../../stores/use-user-store";
+import { AppFontSize, defaultBorderRadius } from "../../utils/size";
+import { DefaultAppStyles } from "../../utils/styles";
+import { useAsync } from "react-async-hook";
+import { Notice } from "../../components/ui/notice";
+
+export const NotesnookCircle = () => {
+ const user = useUserStore((state) => state.user);
+ const isOnTrial =
+ PremiumService.get() &&
+ user?.subscription?.status === SubscriptionStatus.TRIAL;
+ const isFree = !PremiumService.get();
+ const partners = useAsync(db.circle.partners, []);
+
+ return (
+
+ {!isFree && !isOnTrial ? null : (
+
+
+ {isFree
+ ? strings.freeUserCircleNotice()
+ : strings.trialUserCircleNotice()}
+
+
+ {!isOnTrial ? null : (
+
+ )}
+
+ {partners.loading ? : null}
+
+ {partners.error ? (
+
+ ) : null}
+
+ {partners.result?.map((item) => (
+
+ ))}
+
+ );
+};
+
+const Partner = ({
+ item,
+ available
+}: {
+ item: CirclePartner;
+ available: boolean;
+}) => {
+ const { colors } = useThemeColors();
+ const [code, setCode] = useState();
+
+ return (
+
+
+ {item.name}
+
+
+
+
+ {item.longDescription.trim()}
+
+
+
+ {item.offerDescription}
+
+
+ {available ? (
+ <>
+ {!code ? (
+
+ );
+};
diff --git a/apps/mobile/app/screens/settings/settings-data.tsx b/apps/mobile/app/screens/settings/settings-data.tsx
index cc09115a9..e6753931b 100644
--- a/apps/mobile/app/screens/settings/settings-data.tsx
+++ b/apps/mobile/app/screens/settings/settings-data.tsx
@@ -615,6 +615,14 @@ export const settingsGroups: SettingSection[] = [
}
}
]
+ },
+ {
+ id: "notesnook-circle",
+ name: strings.notesnookCircle(),
+ icon: "circle-outline",
+ type: "screen",
+ description: strings.notesnookCircleDesc(),
+ component: "notesnook-circle"
}
]
},
diff --git a/apps/mobile/package-lock.json b/apps/mobile/package-lock.json
index dafa96c7d..fa93ce120 100644
--- a/apps/mobile/package-lock.json
+++ b/apps/mobile/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@notesnook/mobile",
- "version": "3.2.12",
+ "version": "3.3.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@notesnook/mobile",
- "version": "3.2.12",
+ "version": "3.3.2",
"hasInstallScript": true,
"license": "GPL-3.0-or-later",
"workspaces": [
@@ -30,6 +30,7 @@
"@types/validator": "^13.12.2",
"diffblazer": "^1.0.1",
"react": "18.2.0",
+ "react-async-hook": "^4.0.0",
"react-native": "0.77.2"
},
"devDependencies": {
@@ -3797,6 +3798,7 @@
"happy-dom": "16.0.1",
"isomorphic-fetch": "^3.0.0",
"nodemon": "^3.1.7",
+ "prismjs": "^1.30.0",
"prosemirror-test-builder": "^1.1.1",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -7747,7 +7749,7 @@
},
"../../packages/editor-mobile/node_modules/@types/prop-types": {
"version": "15.7.11",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"../../packages/editor-mobile/node_modules/@types/q": {
@@ -7767,7 +7769,7 @@
},
"../../packages/editor-mobile/node_modules/@types/react": {
"version": "18.2.39",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@types/prop-types": "*",
@@ -7798,7 +7800,7 @@
},
"../../packages/editor-mobile/node_modules/@types/scheduler": {
"version": "0.16.8",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"../../packages/editor-mobile/node_modules/@types/semver": {
@@ -12623,7 +12625,7 @@
},
"../../packages/editor-mobile/node_modules/immer": {
"version": "9.0.21",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"funding": {
"type": "opencollective",
@@ -23095,7 +23097,6 @@
},
"../../packages/editor/node_modules/js-tokens": {
"version": "4.0.0",
- "dev": true,
"license": "MIT"
},
"../../packages/editor/node_modules/jsesc": {
@@ -23146,7 +23147,6 @@
},
"../../packages/editor/node_modules/loose-envify": {
"version": "1.4.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
@@ -23658,7 +23658,6 @@
},
"../../packages/editor/node_modules/react": {
"version": "18.3.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
@@ -23677,7 +23676,6 @@
},
"../../packages/editor/node_modules/react-dom": {
"version": "18.3.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0",
@@ -23816,7 +23814,6 @@
},
"../../packages/editor/node_modules/scheduler": {
"version": "0.23.2",
- "dev": true,
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
@@ -28908,7 +28905,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz",
"integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1",
@@ -28925,7 +28921,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz",
"integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -28941,7 +28936,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz",
"integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -28957,7 +28951,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",
"integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1",
@@ -28975,7 +28968,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz",
"integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1",
@@ -29118,7 +29110,6 @@
"version": "7.21.0-placeholder-for-preset-env.2",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
"integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
},
@@ -29200,7 +29191,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz",
"integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29216,7 +29206,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
"integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29359,7 +29348,6 @@
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
"integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
- "dev": true,
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
@@ -29424,7 +29412,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz",
"integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29471,7 +29458,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz",
"integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.27.1",
@@ -29539,7 +29525,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz",
"integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.27.1",
@@ -29556,7 +29541,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz",
"integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29572,7 +29556,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz",
"integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.27.1",
@@ -29589,7 +29572,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz",
"integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29605,7 +29587,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz",
"integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29621,7 +29602,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz",
"integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29686,7 +29666,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz",
"integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29732,7 +29711,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz",
"integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29748,7 +29726,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz",
"integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.27.1",
@@ -29781,7 +29758,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz",
"integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.27.1",
@@ -29800,7 +29776,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz",
"integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.27.1",
@@ -29833,7 +29808,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz",
"integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -29897,7 +29871,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz",
"integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1",
@@ -29993,7 +29966,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz",
"integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -30088,7 +30060,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz",
"integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.27.1",
@@ -30105,7 +30076,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz",
"integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -30211,7 +30181,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz",
"integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -30246,7 +30215,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz",
"integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -30262,7 +30230,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz",
"integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.27.1",
@@ -30295,7 +30262,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz",
"integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.27.1",
@@ -30312,7 +30278,6 @@
"version": "7.27.2",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz",
"integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.27.2",
@@ -30396,7 +30361,6 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -30422,7 +30386,6 @@
"version": "0.1.6-no-external-plugins",
"resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
"integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
@@ -31337,12 +31300,12 @@
},
"node_modules/@hapi/hoek": {
"version": "9.3.0",
- "dev": true,
+ "devOptional": true,
"license": "BSD-3-Clause"
},
"node_modules/@hapi/topo": {
"version": "5.1.0",
- "dev": true,
+ "devOptional": true,
"license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.0.0"
@@ -32596,14 +32559,14 @@
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.14.3.tgz",
"integrity": "sha512-sBJ3XKU9g5Up31jFeXPFsD8AgORV7TLO/cCSMuRewSfgYbG/3vSKLJmfHrO6+PvjZSb9VyV2UaF02ojktW65vw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/@module-federation/runtime": {
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.14.3.tgz",
"integrity": "sha512-7ZHpa3teUDVhraYdxQGkfGHzPbjna4LtwbpudgzAxSLLFxLDNanaxCuSeIgSM9c+8sVUNC9kvzUgJEZB0krPJw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@module-federation/error-codes": "0.14.3",
@@ -32615,7 +32578,7 @@
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.14.3.tgz",
"integrity": "sha512-xMFQXflLVW/AJTWb4soAFP+LB4XuhE7ryiLIX8oTyUoBBgV6U2OPghnFljPjeXbud72O08NYlQ1qsHw1kN/V8Q==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@module-federation/error-codes": "0.14.3",
@@ -32626,7 +32589,7 @@
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.14.3.tgz",
"integrity": "sha512-QBETX7iMYXdSa3JtqFlYU+YkpymxETZqyIIRiqg0gW+XGpH3jgU68yjrme2NBJp7URQi/CFZG8KWtfClk0Pjgw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@module-federation/runtime": "0.14.3",
@@ -32637,14 +32600,14 @@
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.14.3.tgz",
"integrity": "sha512-THJZMfbXpqjQOLblCQ8jjcBFFXsGRJwUWE9l/Q4SmuCSKMgAwie7yLT0qSGrHmyBYrsUjAuy+xNB4nfKP0pnGw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/@module-federation/webpack-bundler-runtime": {
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.14.3.tgz",
"integrity": "sha512-hIyJFu34P7bY2NeMIUHAS/mYUHEY71VTAsN0A0AqEJFSVPszheopu9VdXq0VDLrP9KQfuXT8SDxeYeJXyj0mgA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@module-federation/runtime": "0.14.3",
@@ -32661,7 +32624,7 @@
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
@@ -32673,7 +32636,7 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 8"
@@ -32681,7 +32644,7 @@
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
@@ -32826,7 +32789,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-15.0.1.tgz",
"integrity": "sha512-xIGPytx2bj5HxFk0c7S25AVuJowHmEFg5LFC9XosKc0TSOjP1r6zGC6OqC/arQV/pNuqmZN2IFnpgJn0Bn+hhQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-clean": "15.0.1",
@@ -32857,7 +32820,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-15.0.1.tgz",
"integrity": "sha512-flGTfT005UZvW2LAXVowZ/7ri22oiiZE4pPgMvc8klRxO5uofKIRuohgiHybHtiCo/HNqIz45JmZJvuFrhc4Ow==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-tools": "15.0.1",
@@ -32870,7 +32833,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-15.0.1.tgz",
"integrity": "sha512-SL3/9zIyzQQPKWei0+W1gNHxCPurrxqpODUWnVLoP38DNcvYCGtsRayw/4DsXgprZfBC+FsscNpd3IDJrG59XA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-tools": "15.0.1",
@@ -32885,7 +32848,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-15.0.1.tgz",
"integrity": "sha512-GEHUx4NRp9W9or6vygn0TgNeFkcJdNjrtko0vQEJAS4gJdWqP/9LqqwJNlUfaW5jHBN7TKALAMlfRmI12Op3sg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-tools": "15.0.1",
@@ -32898,14 +32861,14 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
+ "devOptional": true,
"license": "Python-2.0"
},
"node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
"integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"env-paths": "^2.2.1",
@@ -32932,7 +32895,7 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
@@ -32949,7 +32912,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
@@ -32962,7 +32925,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.0.0",
@@ -32981,7 +32944,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=4"
@@ -32991,7 +32954,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-15.0.1.tgz",
"integrity": "sha512-xkT2TLS8zg5r7Vl9l/2f7JVUoFECnVBS+B5ivrSu2PNZhKkr9lRmJFxC9aVLFb5lIxQQKNDvEyiIDNfP7wjJiA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"serve-static": "^1.13.1"
@@ -33001,7 +32964,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-15.0.1.tgz",
"integrity": "sha512-YCu44lZR3zZxJJYVTqYZFz9cT9KBfbKI4q2MnKOvkamt00XY3usooMqfuwBAdvM/yvpx7M5w8kbM/nPyj4YCvQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-config": "15.0.1",
@@ -33026,7 +32989,7 @@
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -33039,7 +33002,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-15.0.1.tgz",
"integrity": "sha512-QlAMomj6H6TY6pHwjTYMsHDQLP5eLzjAmyW1qb03w/kyS/72elK2bjsklNWJrscFY9TMQLqw7qoAsXf1m5t/dg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-tools": "15.0.1",
@@ -33054,7 +33017,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-15.0.1.tgz",
"integrity": "sha512-iQj1Dt2fr/Q7X2CQhyhWnece3eLDCark1osfiwpViksOfTH2WdpNS3lIwlFcIKhsieFU7YYwbNuFqQ3tF9Dlvw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-config-apple": "15.0.1",
@@ -33068,7 +33031,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-15.0.1.tgz",
"integrity": "sha512-6pKzXEIgGL20eE1uOn8iSsNBlMzO1LG+pQOk+7mvD172EPhKm/lRzUVDX5gO/2jvsGoNw6VUW0JX1FI2firwqA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-platform-apple": "15.0.1"
@@ -33078,7 +33041,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-15.0.1.tgz",
"integrity": "sha512-f3rb3t1ELLaMSX5/LWO/IykglBIgiP3+pPnyl8GphHnBpf3bdIcp7fHlHLemvHE06YxT2nANRxRPjy1gNskenA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@react-native-community/cli-debugger-ui": "15.0.1",
@@ -33096,7 +33059,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-15.0.1.tgz",
"integrity": "sha512-N79A+u/94roanfmNohVcNGu6Xg+0idh63JHZFLC9OJJuZwTifGMLDfSTHZATpR1J7rebozQ5ClcSUePavErnSg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"appdirsjs": "^1.2.4",
@@ -33114,7 +33077,7 @@
},
"node_modules/@react-native-community/cli-tools/node_modules/is-wsl": {
"version": "1.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=4"
@@ -33122,7 +33085,7 @@
},
"node_modules/@react-native-community/cli-tools/node_modules/open": {
"version": "6.4.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"is-wsl": "^1.1.0"
@@ -33133,7 +33096,7 @@
},
"node_modules/@react-native-community/cli-tools/node_modules/semver": {
"version": "7.6.3",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -33146,7 +33109,7 @@
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-15.0.1.tgz",
"integrity": "sha512-sWiJ62kkGu2mgYni2dsPxOMBzpwTjNsDH1ubY4mqcNEI9Zmzs0vRwwDUEhYqwNGys9+KpBKoZRrT2PAlhO84xA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"joi": "^17.2.1"
@@ -33154,7 +33117,7 @@
},
"node_modules/@react-native-community/cli/node_modules/fs-extra": {
"version": "8.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
@@ -33167,7 +33130,7 @@
},
"node_modules/@react-native-community/cli/node_modules/jsonfile": {
"version": "4.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"optionalDependencies": {
"graceful-fs": "^4.1.6"
@@ -33175,7 +33138,7 @@
},
"node_modules/@react-native-community/cli/node_modules/semver": {
"version": "7.6.3",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -33186,7 +33149,7 @@
},
"node_modules/@react-native-community/cli/node_modules/universalify": {
"version": "0.1.2",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 4.0.0"
@@ -34086,7 +34049,7 @@
"version": "1.3.15",
"resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.3.15.tgz",
"integrity": "sha512-utNPuJglLO5lW9XbwIqjB7+2ilMo6JkuVLTVdnNVKU94FW7asn9F/qV+d+MgjUVqU1QPCGm0NuGO9xhbgeJ7pg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"optionalDependencies": {
"@rspack/binding-darwin-arm64": "1.3.15",
@@ -34107,7 +34070,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34121,7 +34083,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34135,7 +34096,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34149,7 +34109,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34163,7 +34122,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34177,7 +34135,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34191,7 +34148,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34205,7 +34161,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34219,7 +34174,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -34230,7 +34184,7 @@
"version": "1.3.15",
"resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.3.15.tgz",
"integrity": "sha512-QuElIC8jXSKWAp0LSx18pmbhA7NiA5HGoVYesmai90UVxz98tud0KpMxTVCg+0lrLrnKZfCWN9kwjCxM5pGnrA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@module-federation/runtime-tools": "0.14.3",
@@ -34253,7 +34207,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz",
"integrity": "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=16.0.0"
@@ -34334,7 +34288,7 @@
},
"node_modules/@sideway/address": {
"version": "4.1.4",
- "dev": true,
+ "devOptional": true,
"license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.0.0"
@@ -34342,12 +34296,12 @@
},
"node_modules/@sideway/formula": {
"version": "3.0.1",
- "dev": true,
+ "devOptional": true,
"license": "BSD-3-Clause"
},
"node_modules/@sideway/pinpoint": {
"version": "2.0.0",
- "dev": true,
+ "devOptional": true,
"license": "BSD-3-Clause"
},
"node_modules/@sinclair/typebox": {
@@ -34396,7 +34350,7 @@
"version": "0.5.15",
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
"integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.8.0"
@@ -34634,14 +34588,14 @@
},
"node_modules/@types/prop-types": {
"version": "15.7.5",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/@types/react": {
"version": "18.3.18",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz",
"integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@types/prop-types": "*",
@@ -35148,7 +35102,7 @@
},
"node_modules/ansi-fragments": {
"version": "0.2.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"colorette": "^1.0.7",
@@ -35219,7 +35173,7 @@
},
"node_modules/appdirsjs": {
"version": "1.2.7",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/argparse": {
@@ -35391,7 +35345,7 @@
},
"node_modules/astral-regex": {
"version": "1.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=4"
@@ -35681,7 +35635,7 @@
},
"node_modules/bl": {
"version": "4.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"buffer": "^5.5.0",
@@ -35691,7 +35645,7 @@
},
"node_modules/bl/node_modules/buffer": {
"version": "5.7.1",
- "dev": true,
+ "devOptional": true,
"funding": [
{
"type": "github",
@@ -35924,7 +35878,7 @@
},
"node_modules/bytes": {
"version": "3.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -36180,7 +36134,7 @@
},
"node_modules/cli-cursor": {
"version": "3.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"restore-cursor": "^3.1.0"
@@ -36191,7 +36145,7 @@
},
"node_modules/cli-spinners": {
"version": "2.9.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -36287,7 +36241,7 @@
},
"node_modules/clone": {
"version": "1.0.4",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.8"
@@ -36343,19 +36297,19 @@
},
"node_modules/colorette": {
"version": "1.4.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/command-exists": {
"version": "1.2.9",
"resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
"integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/commander": {
"version": "9.5.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": "^12.20.0 || >=14"
@@ -36375,7 +36329,7 @@
},
"node_modules/compressible": {
"version": "2.0.18",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"mime-db": ">= 1.43.0 < 2"
@@ -36386,7 +36340,7 @@
},
"node_modules/compression": {
"version": "1.7.4",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"accepts": "~1.3.5",
@@ -36403,7 +36357,7 @@
},
"node_modules/compression/node_modules/debug": {
"version": "2.6.9",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
@@ -36411,7 +36365,7 @@
},
"node_modules/compression/node_modules/ms": {
"version": "2.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/concat-map": {
@@ -36571,7 +36525,7 @@
},
"node_modules/csstype": {
"version": "3.1.2",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/data-view-buffer": {
@@ -36719,7 +36673,7 @@
},
"node_modules/defaults": {
"version": "1.0.4",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"clone": "^1.0.2"
@@ -37291,7 +37245,7 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -37301,7 +37255,7 @@
"version": "7.14.0",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz",
"integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"bin": {
"envinfo": "dist/cli.js"
@@ -37326,7 +37280,7 @@
},
"node_modules/errorhandler": {
"version": "1.5.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"accepts": "~1.3.7",
@@ -37927,7 +37881,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -38069,7 +38022,7 @@
},
"node_modules/fast-glob": {
"version": "3.3.2",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
@@ -38084,7 +38037,7 @@
},
"node_modules/fast-glob/node_modules/glob-parent": {
"version": "5.1.2",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
@@ -38160,7 +38113,7 @@
},
"node_modules/fast-xml-parser": {
"version": "4.4.1",
- "dev": true,
+ "devOptional": true,
"funding": [
{
"type": "github",
@@ -38509,7 +38462,7 @@
},
"node_modules/find-up": {
"version": "5.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
@@ -38524,7 +38477,7 @@
},
"node_modules/find-up/node_modules/path-exists": {
"version": "4.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -39636,7 +39589,7 @@
},
"node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=4"
@@ -39721,7 +39674,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=8"
}
@@ -39909,7 +39862,7 @@
},
"node_modules/is-unicode-supported": {
"version": "0.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -41146,7 +41099,7 @@
},
"node_modules/joi": {
"version": "17.9.2",
- "dev": true,
+ "devOptional": true,
"license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.0.0",
@@ -41316,7 +41269,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "devOptional": true
},
"node_modules/json-schema-ref-resolver": {
"version": "1.0.1",
@@ -41475,7 +41428,7 @@
},
"node_modules/kleur": {
"version": "3.0.3",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -41551,7 +41504,7 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "devOptional": true
},
"node_modules/listr": {
"version": "0.14.3",
@@ -41816,7 +41769,7 @@
},
"node_modules/locate-path": {
"version": "6.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
@@ -41899,7 +41852,7 @@
},
"node_modules/log-symbols": {
"version": "4.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
@@ -42020,7 +41973,7 @@
},
"node_modules/logkitty": {
"version": "0.7.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ansi-fragments": "^0.2.1",
@@ -42033,7 +41986,7 @@
},
"node_modules/logkitty/node_modules/cliui": {
"version": "6.0.0",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
@@ -42043,7 +41996,7 @@
},
"node_modules/logkitty/node_modules/decamelize": {
"version": "1.2.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -42051,7 +42004,7 @@
},
"node_modules/logkitty/node_modules/find-up": {
"version": "4.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
@@ -42063,7 +42016,7 @@
},
"node_modules/logkitty/node_modules/locate-path": {
"version": "5.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
@@ -42074,7 +42027,7 @@
},
"node_modules/logkitty/node_modules/p-limit": {
"version": "2.3.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
@@ -42088,7 +42041,7 @@
},
"node_modules/logkitty/node_modules/p-locate": {
"version": "4.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
@@ -42099,7 +42052,7 @@
},
"node_modules/logkitty/node_modules/path-exists": {
"version": "4.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -42107,7 +42060,7 @@
},
"node_modules/logkitty/node_modules/strip-ansi": {
"version": "6.0.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -42118,7 +42071,7 @@
},
"node_modules/logkitty/node_modules/wrap-ansi": {
"version": "6.2.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -42131,12 +42084,12 @@
},
"node_modules/logkitty/node_modules/y18n": {
"version": "4.0.3",
- "dev": true,
+ "devOptional": true,
"license": "ISC"
},
"node_modules/logkitty/node_modules/yargs": {
"version": "15.4.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
@@ -42157,7 +42110,7 @@
},
"node_modules/logkitty/node_modules/yargs-parser": {
"version": "18.1.3",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
@@ -42263,7 +42216,7 @@
},
"node_modules/merge2": {
"version": "1.4.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 8"
@@ -42708,7 +42661,7 @@
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "dev": true,
+ "devOptional": true,
"bin": {
"mime": "cli.js"
},
@@ -42907,7 +42860,7 @@
},
"node_modules/nocache": {
"version": "3.0.4",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=12.0.0"
@@ -42956,7 +42909,7 @@
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
"integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
@@ -43154,7 +43107,7 @@
},
"node_modules/on-headers": {
"version": "1.0.2",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -43212,7 +43165,7 @@
},
"node_modules/ora": {
"version": "5.4.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"bl": "^4.1.0",
@@ -43234,7 +43187,7 @@
},
"node_modules/ora/node_modules/strip-ansi": {
"version": "6.0.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -43281,7 +43234,7 @@
},
"node_modules/p-limit": {
"version": "3.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
@@ -43295,7 +43248,7 @@
},
"node_modules/p-locate": {
"version": "5.0.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
@@ -43336,7 +43289,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"callsites": "^3.0.0"
},
@@ -43348,7 +43301,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=6"
}
@@ -43833,7 +43786,7 @@
},
"node_modules/prompts": {
"version": "2.4.2",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"kleur": "^3.0.3",
@@ -44091,7 +44044,7 @@
},
"node_modules/queue-microtask": {
"version": "1.2.3",
- "dev": true,
+ "devOptional": true,
"funding": [
{
"type": "github",
@@ -44133,6 +44086,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-async-hook": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/react-async-hook/-/react-async-hook-4.0.0.tgz",
+ "integrity": "sha512-97lgjFkOcHCTYSrsKBpsXg3iVWM0LnzedB749iP76sb3/8Ouu4nHIkCLEOrQWHVYqrYxjF05NN6GHoXWFkB3Kw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8",
+ "npm": ">=5"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
"node_modules/react-devtools-core": {
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.2.tgz",
@@ -44164,6 +44130,30 @@
}
}
},
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-dom/node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"node_modules/react-freeze": {
"version": "1.0.3",
"license": "MIT",
@@ -45324,7 +45314,7 @@
},
"node_modules/restore-cursor": {
"version": "3.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"onetime": "^5.1.0",
@@ -45390,7 +45380,7 @@
},
"node_modules/run-parallel": {
"version": "1.2.0",
- "dev": true,
+ "devOptional": true,
"funding": [
{
"type": "github",
@@ -45907,7 +45897,7 @@
},
"node_modules/sisteransi": {
"version": "1.0.5",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/slash": {
@@ -45920,7 +45910,7 @@
},
"node_modules/slice-ansi": {
"version": "2.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.0",
@@ -45933,7 +45923,7 @@
},
"node_modules/slice-ansi/node_modules/ansi-styles": {
"version": "3.2.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
@@ -45944,7 +45934,7 @@
},
"node_modules/slice-ansi/node_modules/color-convert": {
"version": "1.9.3",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
@@ -45952,7 +45942,7 @@
},
"node_modules/slice-ansi/node_modules/color-name": {
"version": "1.1.3",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/sonic-boom": {
@@ -46401,7 +46391,7 @@
},
"node_modules/strip-ansi": {
"version": "5.2.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^4.1.0"
@@ -46425,7 +46415,7 @@
},
"node_modules/strip-ansi/node_modules/ansi-regex": {
"version": "4.1.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -46459,7 +46449,7 @@
},
"node_modules/strnum": {
"version": "1.0.5",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/strtok3": {
@@ -46479,7 +46469,7 @@
},
"node_modules/sudo-prompt": {
"version": "9.2.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/supports-color": {
@@ -47424,7 +47414,7 @@
},
"node_modules/wcwidth": {
"version": "1.0.1",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"defaults": "^1.0.3"
@@ -47736,7 +47726,7 @@
},
"node_modules/yaml": {
"version": "2.3.1",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"engines": {
"node": ">= 14"
@@ -47799,7 +47789,7 @@
},
"node_modules/yocto-queue": {
"version": "0.1.0",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=10"
diff --git a/apps/mobile/package.json b/apps/mobile/package.json
index 45af37901..bf102e252 100644
--- a/apps/mobile/package.json
+++ b/apps/mobile/package.json
@@ -56,4 +56,4 @@
"react": "18.2.0",
"react-native": "0.77.2"
}
-}
\ No newline at end of file
+}
diff --git a/apps/mobile/scripts/optimize-fonts.mjs b/apps/mobile/scripts/optimize-fonts.mjs
index c5810cdda..7e1148515 100644
--- a/apps/mobile/scripts/optimize-fonts.mjs
+++ b/apps/mobile/scripts/optimize-fonts.mjs
@@ -70,6 +70,7 @@ const EXTRA_ICON_NAMES = [
"chevron-down",
"calendar",
"minus-circle-outline",
+ "circle-outline",
"close-circle-outline",
"qrcode",
"text",
diff --git a/apps/web/src/common/db.ts b/apps/web/src/common/db.ts
index 7430df7bd..fb0e7cbdc 100644
--- a/apps/web/src/common/db.ts
+++ b/apps/web/src/common/db.ts
@@ -53,8 +53,8 @@ async function initializeDatabase(persistence: DatabasePersistence) {
AUTH_HOST: "https://auth.streetwriters.co",
SSE_HOST: "https://events.streetwriters.co",
ISSUES_HOST: "https://issues.streetwriters.co",
- MONOGRAPH_HOST: "https://monogr.ph",
SUBSCRIPTIONS_HOST: "https://subscriptions.streetwriters.co",
+ MONOGRAPH_HOST: "https://monogr.ph",
NOTESNOOK_HOST: "https://notesnook.com",
...Config.get("serverUrls", {})
});
diff --git a/apps/web/src/dialogs/settings/components/circle-partners.tsx b/apps/web/src/dialogs/settings/components/circle-partners.tsx
new file mode 100644
index 000000000..4d1d598f3
--- /dev/null
+++ b/apps/web/src/dialogs/settings/components/circle-partners.tsx
@@ -0,0 +1,173 @@
+/*
+This file is part of the Notesnook project (https://notesnook.com/)
+
+Copyright (C) 2023 Streetwriters (Private) Limited
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+import { useState } from "react";
+import { Copy, Loading } from "../../../components/icons";
+import { Button, Link, Flex, Text, Grid } from "@theme-ui/components";
+import { usePromise } from "@notesnook/common";
+import { db } from "../../../common/db";
+import { writeToClipboard } from "../../../utils/clipboard";
+import { showToast } from "../../../utils/toast";
+import { ErrorText } from "../../../components/error-text";
+import { useStore as useUserStore } from "../../../stores/user-store";
+import { SubscriptionPlan, SubscriptionStatus } from "@notesnook/core";
+import { BuyDialog } from "../../buy-dialog";
+import { strings } from "@notesnook/intl";
+
+export function CirclePartners() {
+ const partners = usePromise(() => db.circle.partners(), []);
+ const [redeemedCode, setRedeemedCode] = useState<{
+ partnerId: string;
+ code: string;
+ }>();
+ const subscription = useUserStore((store) => store.user?.subscription);
+
+ const isFree =
+ !subscription ||
+ subscription?.plan === SubscriptionPlan.FREE ||
+ subscription?.status === SubscriptionStatus.EXPIRED;
+ const isTrial = subscription?.status === SubscriptionStatus.TRIAL;
+ const canRedeem = !isFree && !isTrial;
+
+ return (
+ <>
+ {partners.status === "pending" ? (
+
+ ) : partners.status === "rejected" ? (
+
+ ) : (
+
+ {partners.value?.map((partner) => (
+
+
+ {partner.name}
+
+
+
+ {partner.shortDescription}
+
+
+ {partner.offerDescription}
+
+ {redeemedCode?.partnerId === partner.id ? (
+ <>
+
+
+ {redeemedCode.code}
+
+
+
+ {partner.codeRedeemUrl ? (
+
+
+ Click here
+ {" "}
+ to directly claim the promotion.
+
+ ) : null}
+ >
+ ) : (
+
+ )}
+
+ ))}
+
+ )}
+ >
+ );
+}
diff --git a/apps/web/src/dialogs/settings/index.tsx b/apps/web/src/dialogs/settings/index.tsx
index 5b1638f47..420bb10e5 100644
--- a/apps/web/src/dialogs/settings/index.tsx
+++ b/apps/web/src/dialogs/settings/index.tsx
@@ -39,7 +39,8 @@ import {
Servers,
ShieldLock,
Sync,
- Inbox
+ Inbox,
+ CircleEmpty
} from "../../components/icons";
import NavigationItem from "../../components/navigation-menu/navigation-item";
import { FlexScrollContainer } from "../../components/scroll-container";
@@ -80,6 +81,7 @@ import { strings } from "@notesnook/intl";
import { mdToHtml } from "../../utils/md";
import { InboxSettings } from "./inbox-settings";
import { withFeatureCheck } from "../../common";
+import { NotesnookCircleSettings } from "./notesnook-circle-settings";
type SettingsDialogProps = BaseDialogProps & {
activeSection?: SectionKeys;
@@ -109,6 +111,12 @@ const sectionGroups: SectionGroup[] = [
icon: Sync,
isHidden: () => !useUserStore.getState().isLoggedIn
},
+ {
+ key: "circle",
+ title: "Notesnook Circle",
+ icon: CircleEmpty,
+ isHidden: () => !useUserStore.getState().isLoggedIn
+ },
{
key: "inbox",
title: "Inbox",
@@ -185,7 +193,8 @@ const SettingsGroups = [
...AboutSettings,
...SubscriptionSettings,
...ServersSettings,
- ...InboxSettings
+ ...InboxSettings,
+ ...NotesnookCircleSettings
];
// Thoughts:
diff --git a/apps/web/src/dialogs/settings/notesnook-circle-settings.ts b/apps/web/src/dialogs/settings/notesnook-circle-settings.ts
new file mode 100644
index 000000000..d507eb642
--- /dev/null
+++ b/apps/web/src/dialogs/settings/notesnook-circle-settings.ts
@@ -0,0 +1,43 @@
+/*
+This file is part of the Notesnook project (https://notesnook.com/)
+
+Copyright (C) 2023 Streetwriters (Private) Limited
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+import { strings } from "@notesnook/intl";
+import { CirclePartners } from "./components/circle-partners";
+import { SettingsGroup } from "./types";
+
+export const NotesnookCircleSettings: SettingsGroup[] = [
+ {
+ header: strings.notesnookCircle(),
+ key: "notesnook-circle",
+ section: "circle",
+ settings: [
+ {
+ key: "partners",
+ title: "",
+ description: strings.notesnookCircleDesc(),
+ components: [
+ {
+ type: "custom",
+ component: CirclePartners
+ }
+ ]
+ }
+ ]
+ }
+];
diff --git a/apps/web/src/dialogs/settings/types.ts b/apps/web/src/dialogs/settings/types.ts
index 26a1a572b..074879bda 100644
--- a/apps/web/src/dialogs/settings/types.ts
+++ b/apps/web/src/dialogs/settings/types.ts
@@ -41,7 +41,8 @@ export type SectionKeys =
| "legal"
| "developer"
| "about"
- | "inbox";
+ | "inbox"
+ | "circle";
export type SectionGroupKeys =
| "account"
diff --git a/packages/common/src/utils/is-feature-available.ts b/packages/common/src/utils/is-feature-available.ts
index 010cf3718..fcf70c953 100644
--- a/packages/common/src/utils/is-feature-available.ts
+++ b/packages/common/src/utils/is-feature-available.ts
@@ -447,6 +447,17 @@ const features = {
believer: createLimit(true),
legacyPro: createLimit(true)
}
+ }),
+ notesnookCircle: createFeature({
+ id: "notesnookCircle",
+ title: "Notesnook Circle",
+ availability: {
+ free: createLimit(false),
+ essential: createLimit(true),
+ pro: createLimit(true),
+ believer: createLimit(true),
+ legacyPro: createLimit(true)
+ }
})
};
diff --git a/packages/core/src/api/circle.ts b/packages/core/src/api/circle.ts
new file mode 100644
index 000000000..e6d00dd19
--- /dev/null
+++ b/packages/core/src/api/circle.ts
@@ -0,0 +1,48 @@
+/*
+This file is part of the Notesnook project (https://notesnook.com/)
+
+Copyright (C) 2023 Streetwriters (Private) Limited
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+import hosts from "../utils/constants.js";
+import http from "../utils/http.js";
+import Database from "./index.js";
+
+export type CirclePartner = {
+ id: string;
+ name: string;
+ url: string;
+ logoBase64: string;
+ shortDescription: string;
+ longDescription: string;
+ offerDescription: string;
+ codeRedeemUrl?: string;
+};
+export class Circle {
+ constructor(private readonly db: Database) {}
+
+ partners(): Promise {
+ return http.get(`${hosts.SUBSCRIPTIONS_HOST}/circle/partners`);
+ }
+
+ async redeem(partnerId: string): Promise<{ code?: string } | undefined> {
+ const token = await this.db.tokenManager.getAccessToken();
+ return http.get(
+ `${hosts.SUBSCRIPTIONS_HOST}/circle/redeem?partnerId=${partnerId}`,
+ token
+ );
+ }
+}
diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts
index 1261bd66f..8ef577836 100644
--- a/packages/core/src/api/index.ts
+++ b/packages/core/src/api/index.ts
@@ -82,6 +82,7 @@ import { NNMigrationProvider } from "../database/migrations.js";
import { ConfigStorage } from "../database/config.js";
import { LazyPromise } from "../utils/lazy-promise.js";
import { InboxApiKeys } from "./inbox-api-keys.js";
+import { Circle } from "./circle.js";
type EventSourceConstructor = new (
uri: string,
@@ -192,6 +193,7 @@ class Database {
tokenManager = new TokenManager(this.kv);
mfa = new MFAManager(this.tokenManager);
subscriptions = new Subscriptions(this);
+ circle = new Circle(this);
offers = Offers;
debug = new Debug();
pricing = Pricing;
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index f624f0ff1..5ff1e1dba 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -39,6 +39,7 @@ export * from "./api/debug.js";
export * from "./api/monographs.js";
export * from "./api/subscriptions.js";
export * from "./api/pricing.js";
+export * from "./api/circle.js";
export { VAULT_ERRORS } from "./api/vault.js";
export type { SyncOptions } from "./api/sync/index.js";
export { sanitizeTag } from "./collections/tags.js";
diff --git a/packages/intl/locale/en.po b/packages/intl/locale/en.po
index f0f0e9b0f..1fea29cb3 100644
--- a/packages/intl/locale/en.po
+++ b/packages/intl/locale/en.po
@@ -4217,6 +4217,14 @@ msgstr "notes imported"
msgid "Notesnook"
msgstr "Notesnook"
+#: src/strings.ts:2596
+msgid "Notesnook Circle"
+msgstr "Notesnook Circle"
+
+#: src/strings.ts:2598
+msgid "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom."
+msgstr "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom."
+
#: src/strings.ts:2066
msgid "Notesnook encrypts everything offline before syncing to your other devices. This means that no one can read your notes except you. Not even us."
msgstr "Notesnook encrypts everything offline before syncing to your other devices. This means that no one can read your notes except you. Not even us."
@@ -5006,6 +5014,10 @@ msgstr "Recovery successful!"
msgid "Redeem"
msgstr "Redeem"
+#: src/strings.ts:2595
+msgid "Redeem code"
+msgstr "Redeem code"
+
#: src/strings.ts:2431
msgid "Redeem gift code"
msgstr "Redeem gift code"
@@ -6367,6 +6379,10 @@ msgstr "The {title} at {url} is not compatible with this client."
msgid "The information above will be publically available at"
msgstr "The information above will be publically available at"
+#: src/strings.ts:2602
+msgid "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits."
+msgstr "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits."
+
#: src/strings.ts:2081
msgid "The password/pin for unlocking the app."
msgstr "The password/pin for unlocking the app."
@@ -6764,6 +6780,10 @@ msgstr "Upgrade to Notesnook Pro to create more tags."
msgid "Upgrade to Pro"
msgstr "Upgrade to Pro"
+#: src/strings.ts:2594
+msgid "Upgrade to redeem"
+msgstr "Upgrade to redeem"
+
#: src/strings.ts:509
msgid "Upload"
msgstr "Upload"
diff --git a/packages/intl/locale/pseudo-LOCALE.po b/packages/intl/locale/pseudo-LOCALE.po
index 2263d5d40..36475b457 100644
--- a/packages/intl/locale/pseudo-LOCALE.po
+++ b/packages/intl/locale/pseudo-LOCALE.po
@@ -4197,6 +4197,14 @@ msgstr ""
msgid "Notesnook"
msgstr ""
+#: src/strings.ts:2596
+msgid "Notesnook Circle"
+msgstr ""
+
+#: src/strings.ts:2598
+msgid "Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom."
+msgstr ""
+
#: src/strings.ts:2066
msgid "Notesnook encrypts everything offline before syncing to your other devices. This means that no one can read your notes except you. Not even us."
msgstr ""
@@ -4980,6 +4988,10 @@ msgstr ""
msgid "Redeem"
msgstr ""
+#: src/strings.ts:2595
+msgid "Redeem code"
+msgstr ""
+
#: src/strings.ts:2431
msgid "Redeem gift code"
msgstr ""
@@ -6326,6 +6338,10 @@ msgstr ""
msgid "The information above will be publically available at"
msgstr ""
+#: src/strings.ts:2602
+msgid "The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits."
+msgstr ""
+
#: src/strings.ts:2081
msgid "The password/pin for unlocking the app."
msgstr ""
@@ -6723,6 +6739,10 @@ msgstr ""
msgid "Upgrade to Pro"
msgstr ""
+#: src/strings.ts:2594
+msgid "Upgrade to redeem"
+msgstr ""
+
#: src/strings.ts:509
msgid "Upload"
msgstr ""
diff --git a/packages/intl/src/strings.ts b/packages/intl/src/strings.ts
index 01a4c1aa9..e33e72ce1 100644
--- a/packages/intl/src/strings.ts
+++ b/packages/intl/src/strings.ts
@@ -2590,5 +2590,14 @@ Use this if changes from other devices are not appearing on this device. This wi
t`You can change your subscription plan from the web app`,
announcement: () => t`ANNOUNCEMENT`,
cannotChangePlan: () =>
- t`Your current subscription does not allow changing plans`
+ t`Your current subscription does not allow changing plans`,
+ upgradeToRedeem: () => t`Upgrade to redeem`,
+ redeemCode: () => t`Redeem code`,
+ notesnookCircle: () => t`Notesnook Circle`,
+ notesnookCircleDesc: () =>
+ t`Notesnook Circle brings together trusted partners who share our commitment to privacy, transparency, and user freedom.`,
+ trialUserCircleNotice: () =>
+ `Notesnook Circle is reserved for members with an active subscription. You'll get full access after your trial period is over and your subscription is confirmed.`,
+ freeUserCircleNotice: () =>
+ t`The Notesnook Circle is exclusive to subscribers. Please consider subscribing to gain access to Notesnook Circle and enjoy additional benefits.`
};
diff --git a/scripts/build.mjs b/scripts/build.mjs
index 608ee2260..aaf29cb47 100644
--- a/scripts/build.mjs
+++ b/scripts/build.mjs
@@ -67,7 +67,7 @@ await Promise.all([
IS_WATCH ? "--watch" : ""
),
cmd(
- TSCGO,
+ TSC,
"--emitDeclarationOnly",
"--outDir",
"dist/types",