@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 CHANGED
@@ -119,7 +119,7 @@
119
119
 
120
120
  .zarathustra {
121
121
  position: relative;
122
- right: toRem.toRem(10);
122
+ right: toRem.toRem(0);
123
123
  }
124
124
 
125
125
  @keyframes slideInFromLeft {
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.43",
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.22";
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.22";
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: 10
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 || weather?.location;
31148
- const country = (user || guest)?.country || weather?.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