@chrryai/chrry 1.5.22 → 1.5.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/App.module.scss +1 -1
- package/dist/index.js +173 -12
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +173 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/App.module.scss
CHANGED
package/dist/index.js
CHANGED
|
@@ -520,6 +520,9 @@ function detectSiteModeDomain(hostname2, mode) {
|
|
|
520
520
|
if (matchesDomain(host, "newyork.chrry.ai")) {
|
|
521
521
|
return "newYork";
|
|
522
522
|
}
|
|
523
|
+
if (matchesDomain(host, "popcorn.chrry.ai")) {
|
|
524
|
+
return "popcorn";
|
|
525
|
+
}
|
|
523
526
|
if (matchesDomain(host, "vex.chrry.ai")) {
|
|
524
527
|
return "vex";
|
|
525
528
|
}
|
|
@@ -548,7 +551,9 @@ function detectSiteMode(hostname2) {
|
|
|
548
551
|
"istanbul",
|
|
549
552
|
"amsterdam",
|
|
550
553
|
"tokyo",
|
|
551
|
-
"newYork"
|
|
554
|
+
"newYork",
|
|
555
|
+
"popcorn",
|
|
556
|
+
"zarathustra"
|
|
552
557
|
];
|
|
553
558
|
if (hostname2 && validModes.includes(hostname2)) {
|
|
554
559
|
return hostname2;
|
|
@@ -732,7 +737,7 @@ function getSiteConfig(hostnameOrMode) {
|
|
|
732
737
|
favicon: "focus",
|
|
733
738
|
mode: "focus",
|
|
734
739
|
slug: "focus",
|
|
735
|
-
version: "26.10.
|
|
740
|
+
version: "26.10.44",
|
|
736
741
|
storeSlug: "blossom",
|
|
737
742
|
name: "Focus",
|
|
738
743
|
domain: "focus.chrry.ai",
|
|
@@ -1069,6 +1074,164 @@ function getSiteConfig(hostnameOrMode) {
|
|
|
1069
1074
|
]
|
|
1070
1075
|
};
|
|
1071
1076
|
}
|
|
1077
|
+
if (mode === "popcorn") {
|
|
1078
|
+
return {
|
|
1079
|
+
favicon: "popcorn",
|
|
1080
|
+
mode: "popcorn",
|
|
1081
|
+
slug: "popcorn",
|
|
1082
|
+
storeSlug: "movies",
|
|
1083
|
+
name: "Popcorn",
|
|
1084
|
+
domain: "popcorn.chrry.ai",
|
|
1085
|
+
url: "https://popcorn.chrry.ai",
|
|
1086
|
+
store: "https://popcorn.chrry.ai",
|
|
1087
|
+
email: "iliyan@chrry.ai",
|
|
1088
|
+
description: "Step into the premier hub for iconic films, genre-defining storytelling, and cinematic AI companions that decode every frame.",
|
|
1089
|
+
logo: "\u{1F37F}",
|
|
1090
|
+
primaryColor: "#DC2626",
|
|
1091
|
+
// Cinema red
|
|
1092
|
+
links: {
|
|
1093
|
+
github: "https://github.com/chrryai/vex",
|
|
1094
|
+
docs: "https://popcorn.chrry.ai/docs"
|
|
1095
|
+
},
|
|
1096
|
+
features: [
|
|
1097
|
+
{
|
|
1098
|
+
title: "Scene Analysis",
|
|
1099
|
+
description: "Decode any film scene with precision",
|
|
1100
|
+
icon: "\u{1F3AC}",
|
|
1101
|
+
link: "/scene-analysis",
|
|
1102
|
+
isOpenSource: false
|
|
1103
|
+
},
|
|
1104
|
+
{
|
|
1105
|
+
title: "Character Arc Explorer",
|
|
1106
|
+
description: "Trace protagonist transformations",
|
|
1107
|
+
icon: "\u{1F9ED}",
|
|
1108
|
+
link: "/character-arcs",
|
|
1109
|
+
isOpenSource: false
|
|
1110
|
+
},
|
|
1111
|
+
{
|
|
1112
|
+
title: "Cinematic Techniques",
|
|
1113
|
+
description: "Visual storytelling breakdown",
|
|
1114
|
+
icon: "\u{1F3A5}",
|
|
1115
|
+
link: "/techniques",
|
|
1116
|
+
isOpenSource: false
|
|
1117
|
+
},
|
|
1118
|
+
{
|
|
1119
|
+
title: "Soundtrack Insights",
|
|
1120
|
+
description: "Audio storytelling analysis",
|
|
1121
|
+
icon: "\u{1F3B5}",
|
|
1122
|
+
link: "/soundtrack",
|
|
1123
|
+
isOpenSource: false
|
|
1124
|
+
},
|
|
1125
|
+
{
|
|
1126
|
+
title: "Genre Remix",
|
|
1127
|
+
description: "Reimagine films in new genres",
|
|
1128
|
+
icon: "\u{1F504}",
|
|
1129
|
+
link: "/remix",
|
|
1130
|
+
isOpenSource: false
|
|
1131
|
+
},
|
|
1132
|
+
{
|
|
1133
|
+
title: "Dialogue Deep Dive",
|
|
1134
|
+
description: "Unpack memorable quotes",
|
|
1135
|
+
icon: "\u{1F4AC}",
|
|
1136
|
+
link: "/dialogue",
|
|
1137
|
+
isOpenSource: false
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
title: "Double Features",
|
|
1141
|
+
description: "Curated film pairings",
|
|
1142
|
+
icon: "\u{1F39F}\uFE0F",
|
|
1143
|
+
link: "/double-features",
|
|
1144
|
+
isOpenSource: false
|
|
1145
|
+
},
|
|
1146
|
+
{
|
|
1147
|
+
title: "Movie Database",
|
|
1148
|
+
description: "Explore iconic films",
|
|
1149
|
+
icon: "\u{1F4DA}",
|
|
1150
|
+
link: "/films",
|
|
1151
|
+
isOpenSource: false
|
|
1152
|
+
}
|
|
1153
|
+
]
|
|
1154
|
+
};
|
|
1155
|
+
}
|
|
1156
|
+
if (mode === "zarathustra") {
|
|
1157
|
+
return {
|
|
1158
|
+
favicon: "zarathustra",
|
|
1159
|
+
mode: "zarathustra",
|
|
1160
|
+
slug: "zarathustra",
|
|
1161
|
+
storeSlug: "books",
|
|
1162
|
+
name: "Zarathustra",
|
|
1163
|
+
domain: "books.chrry.ai",
|
|
1164
|
+
url: "https://books.chrry.ai",
|
|
1165
|
+
store: "https://books.chrry.ai",
|
|
1166
|
+
email: "iliyan@chrry.ai",
|
|
1167
|
+
description: "Your AI philosophy guide. Explore Nietzsche, existentialism, and timeless wisdom through intelligent conversation.",
|
|
1168
|
+
logo: "\u{1FAA2}",
|
|
1169
|
+
primaryColor: "#7C3AED",
|
|
1170
|
+
// Purple/violet for wisdom
|
|
1171
|
+
links: {
|
|
1172
|
+
github: "https://github.com/chrryai/vex",
|
|
1173
|
+
docs: "https://zarathustra.chrry.ai/docs"
|
|
1174
|
+
},
|
|
1175
|
+
features: [
|
|
1176
|
+
{
|
|
1177
|
+
title: "Philosophy Explorer",
|
|
1178
|
+
description: "Navigate schools of thought",
|
|
1179
|
+
icon: "\u{1F3DB}\uFE0F",
|
|
1180
|
+
link: "/philosophy",
|
|
1181
|
+
isOpenSource: false
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
title: "Book Analysis",
|
|
1185
|
+
description: "Deep dive into philosophical texts",
|
|
1186
|
+
icon: "\u{1F4D6}",
|
|
1187
|
+
link: "/books",
|
|
1188
|
+
isOpenSource: false
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
title: "Concept Breakdown",
|
|
1192
|
+
description: "Understand complex ideas simply",
|
|
1193
|
+
icon: "\u{1F4A1}",
|
|
1194
|
+
link: "/concepts",
|
|
1195
|
+
isOpenSource: false
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
title: "Philosopher Profiles",
|
|
1199
|
+
description: "Learn about great thinkers",
|
|
1200
|
+
icon: "\u{1F9E0}",
|
|
1201
|
+
link: "/philosophers",
|
|
1202
|
+
isOpenSource: false
|
|
1203
|
+
},
|
|
1204
|
+
{
|
|
1205
|
+
title: "Eternal Recurrence",
|
|
1206
|
+
description: "Explore Nietzsche's key ideas",
|
|
1207
|
+
icon: "\u267E\uFE0F",
|
|
1208
|
+
link: "/nietzsche",
|
|
1209
|
+
isOpenSource: false
|
|
1210
|
+
},
|
|
1211
|
+
{
|
|
1212
|
+
title: "Existential Toolkit",
|
|
1213
|
+
description: "Apply philosophy to life",
|
|
1214
|
+
icon: "\u{1F6E0}\uFE0F",
|
|
1215
|
+
link: "/toolkit",
|
|
1216
|
+
isOpenSource: false
|
|
1217
|
+
},
|
|
1218
|
+
{
|
|
1219
|
+
title: "Reading Lists",
|
|
1220
|
+
description: "Curated philosophical journeys",
|
|
1221
|
+
icon: "\u{1F4DA}",
|
|
1222
|
+
link: "/reading-lists",
|
|
1223
|
+
isOpenSource: false
|
|
1224
|
+
},
|
|
1225
|
+
{
|
|
1226
|
+
title: "Daily Wisdom",
|
|
1227
|
+
description: "Philosophical insights daily",
|
|
1228
|
+
icon: "\u2728",
|
|
1229
|
+
link: "/daily",
|
|
1230
|
+
isOpenSource: false
|
|
1231
|
+
}
|
|
1232
|
+
]
|
|
1233
|
+
};
|
|
1234
|
+
}
|
|
1072
1235
|
return {
|
|
1073
1236
|
url: "https://vex.chrry.ai",
|
|
1074
1237
|
mode: "vex",
|
|
@@ -1902,7 +2065,7 @@ var init_utils = __esm({
|
|
|
1902
2065
|
};
|
|
1903
2066
|
isFirefox = typeof navigator !== "undefined" && navigator?.userAgent?.includes("Firefox");
|
|
1904
2067
|
config = getSiteConfig(getClientHostname());
|
|
1905
|
-
VERSION = config.version || "1.5.
|
|
2068
|
+
VERSION = config.version || "1.5.26";
|
|
1906
2069
|
getSlugFromPathname = (path) => {
|
|
1907
2070
|
return getAppAndStoreSlugs(path, {
|
|
1908
2071
|
defaultAppSlug: config.slug,
|
|
@@ -5109,7 +5272,8 @@ var init_lib = __esm({
|
|
|
5109
5272
|
"popcorn",
|
|
5110
5273
|
"sushi",
|
|
5111
5274
|
"focus",
|
|
5112
|
-
"grape"
|
|
5275
|
+
"grape",
|
|
5276
|
+
"zarathustra"
|
|
5113
5277
|
].includes(app.slug) ? `${BASE_URL}/images/apps/${app.slug}.png` : getImageBySize(size2) || app?.image || (slug ? `${BASE_URL}/icons/${slug}-128.png` : canEditApp ? image || iconSrc : void 0);
|
|
5114
5278
|
const finalSrc = src || logoSrc || !app && iconSrc || appImageSrc || void 0;
|
|
5115
5279
|
return {
|
|
@@ -24208,7 +24372,7 @@ function DataProvider({ children, ...rest }) {
|
|
|
24208
24372
|
const [instructions, setInstructions] = (0, import_react21.useState)([]);
|
|
24209
24373
|
const [affiliateStats, setAffiliateStats] = (0, import_react21.useState)(null);
|
|
24210
24374
|
const [loadingAffiliateStats, setLoadingAffiliateStats] = (0, import_react21.useState)(false);
|
|
24211
|
-
const VERSION4 = "1.5.
|
|
24375
|
+
const VERSION4 = "1.5.26";
|
|
24212
24376
|
const [weather, setWeather] = useLocalStorage2("weather", user?.weather || guest?.weather || void 0);
|
|
24213
24377
|
const {
|
|
24214
24378
|
API_URL: API_URL2,
|
|
@@ -27239,7 +27403,7 @@ var init_App_styles = __esm({
|
|
|
27239
27403
|
},
|
|
27240
27404
|
zarathustra: {
|
|
27241
27405
|
position: "relative",
|
|
27242
|
-
right:
|
|
27406
|
+
right: 0
|
|
27243
27407
|
},
|
|
27244
27408
|
grip: {},
|
|
27245
27409
|
instructions: {},
|
|
@@ -31144,8 +31308,8 @@ function Weather({
|
|
|
31144
31308
|
return data;
|
|
31145
31309
|
}
|
|
31146
31310
|
const [isCityModalOpen, setIsCityModalOpen] = (0, import_react43.useState)(false);
|
|
31147
|
-
const city = (user || guest)?.city ||
|
|
31148
|
-
const country = (user || guest)?.country ||
|
|
31311
|
+
const city = weather?.location || (user || guest)?.city || "";
|
|
31312
|
+
const country = weather?.country || (user || guest)?.country || "";
|
|
31149
31313
|
function getCountryCode(countryName) {
|
|
31150
31314
|
const code = import_i18n_iso_countries2.default.getAlpha2Code(countryName, "en");
|
|
31151
31315
|
return code || countryName;
|
|
@@ -44920,7 +45084,7 @@ function Store({
|
|
|
44920
45084
|
display: isMobileDevice ? "none" : "flex"
|
|
44921
45085
|
}
|
|
44922
45086
|
},
|
|
44923
|
-
t5("live")
|
|
45087
|
+
t5(app.status === "active" ? "live" : "testing")
|
|
44924
45088
|
),
|
|
44925
45089
|
/* @__PURE__ */ import_react73.default.createElement(
|
|
44926
45090
|
ImageComponent,
|
|
@@ -81548,9 +81712,6 @@ var init_Hey = __esm({
|
|
|
81548
81712
|
(0, import_react116.useEffect)(() => {
|
|
81549
81713
|
isSplash && isImageLoaded && isHydrated && minSplashTimeElapsed && setIsSplash(!apps.length);
|
|
81550
81714
|
}, [isImageLoaded, isHydrated, isSplash, apps, minSplashTimeElapsed]);
|
|
81551
|
-
(0, import_react116.useEffect)(() => {
|
|
81552
|
-
app?.slug && useExtensionIcon?.(app?.slug);
|
|
81553
|
-
}, [app, useExtensionIcon]);
|
|
81554
81715
|
return /* @__PURE__ */ React.createElement(Div, null, /* @__PURE__ */ React.createElement(ErrorBoundary, null, !app ? /* @__PURE__ */ React.createElement(Div, { style: styles4.splash.style }, /* @__PURE__ */ React.createElement(ImageComponent, { logo: "blossom", showLoading: false, size: 64 })) : /* @__PURE__ */ React.createElement(React.Fragment, null, splash, /* @__PURE__ */ React.createElement(import_react116.Suspense, null, isClientRoute ? (
|
|
81555
81716
|
// Client-side routes: SWAP content
|
|
81556
81717
|
// Check thread detail FIRST before RouteComponent
|