diff --git a/.gitignore b/.gitignore index 01643f1fb..d5f7d12c7 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ js/web/.tanstack/ !.claude/skills/** # but keep per-machine settings local /.claude/settings.local.json + +# white-label brand override (see brand/README.md) +/brand/custom diff --git a/README.md b/README.md index 550f1a1da..def9c5645 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

Streamplace

Solving Video for Everybody Forever

diff --git a/brand/README.md b/brand/README.md new file mode 100644 index 000000000..6822c4615 --- /dev/null +++ b/brand/README.md @@ -0,0 +1,71 @@ +# Brand assets + +This directory is the single source of truth for Streamplace's visual +identity. Everything else — the Expo app icon and splash screen (and from +those, every iOS and Android icon format via `expo prebuild`), favicons, the +OG link banner, desktop ICO/ICNS icons, docs logos, the downloadable SVGs on +`/brand`, and the logo components rendered in the app itself — is generated +from these files by `js/brand/generate.mjs` and gitignored. + +Run the generator with `pnpm run brand` from the repo root. It also runs +automatically on `pnpm install` and before app, docs, and desktop builds. + +## White-labeling + +To ship your own identity, point the generator at your own flat directory of +files, either of: + +- `brand/custom/` — a gitignored sibling of this directory; if it contains a + `brand.json` it takes precedence. +- `SP_BRAND_DIR=/path/to/your/brand` — explicit override, wins over both. + +The directory in git holds the generic open-source identity. + +## File contract + +Only two files are required; everything else is synthesized from the mark +and `brand.json` colors when absent. + +| File | Required | Purpose | +| ------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------ | +| `brand.json` | yes | Name, wordmark text, colors, `monochrome` flag, optional `story` for the /brand guidelines page. | +| `mark.svg` | yes | The logo mark. Must declare a `viewBox`. If `monochrome` is true, use `fill="currentColor"` so the UI can tint it. | +| `icon.svg` / `icon.png` | no | Full-bleed square app icon art. Default: mark at 62% on `colors.iconBackground`. | +| `icon-foreground.svg` / `.png` | no | Android adaptive icon foreground (keep art in the inner ~66% safe zone). Default: mark at 45% on transparent. | +| `splash.svg` / `splash.png` | no | Splash screen logo, shown on `colors.splashBackground`. Default: mark at 50% on transparent. | +| `wordmark.svg` | no | Wordmark lettering for downloads/lockup. Default: SVG `` of the wordmark string. | +| `linkbanner.svg` / `.png` | no | 1200×630 OG/social card. Default: mark centered on `colors.bannerBackground`. | + +### brand.json + +```json +{ + "name": "Streamplace", + "wordmark": "stream.place", + "monochrome": false, + "colors": { + "ink": "#0A0A0B", + "paper": "#ffffff", + "iconBackground": "#ffffff", + "iconForeground": null, + "adaptiveIconBackground": "#111113", + "adaptiveIconForeground": null, + "splashBackground": "#ffffff", + "splashForeground": null, + "tileBackground": "#111113", + "tileForeground": "#ffffff", + "tileHairline": "rgba(255,255,255,0.10)", + "bannerBackground": null, + "bannerForeground": null + }, + "story": null +} +``` + +All colors are optional; `*Foreground` colors default to `ink` and only +apply to monochrome marks (a multi-color mark renders as-is). `wordmark` is +the text rendered next to the mark in the app's lockup — a `.` in it gets +the accent treatment. `story` optionally carries the mark's design story for +the `/brand` guidelines screen (`tagline`, `readings`, `geometry`, `specs`, +`usage` — see `BrandStory` in the generated `js/app/assets/generated/brand.ts`); +sections without data are hidden. diff --git a/brand/brand.json b/brand/brand.json new file mode 100644 index 000000000..b740f3118 --- /dev/null +++ b/brand/brand.json @@ -0,0 +1,15 @@ +{ + "name": "Streamplace", + "wordmark": "stream.place", + "monochrome": false, + "colors": { + "ink": "#0A0A0B", + "paper": "#ffffff", + "iconBackground": "#ffffff", + "adaptiveIconBackground": "#111113", + "splashBackground": "#ffffff", + "tileBackground": "#111113", + "tileForeground": "#ffffff", + "bannerBackground": "#ffffff" + } +} diff --git a/js/app/public/linkbanner.png b/brand/linkbanner.png similarity index 100% rename from js/app/public/linkbanner.png rename to brand/linkbanner.png diff --git a/brand/mark.svg b/brand/mark.svg new file mode 100644 index 000000000..607283bff --- /dev/null +++ b/brand/mark.svg @@ -0,0 +1 @@ + diff --git a/js/app/.gitignore b/js/app/.gitignore index ead427e74..1676a10ad 100644 --- a/js/app/.gitignore +++ b/js/app/.gitignore @@ -63,3 +63,8 @@ artifacts .env.local public/locales/* + +# generated brand assets (pnpm run brand) +public/favicon.png +public/linkbanner.png +public/brand/ diff --git a/js/app/app.config.ts b/js/app/app.config.ts index 0c69e3f7a..99f05ff0a 100644 --- a/js/app/app.config.ts +++ b/js/app/app.config.ts @@ -86,7 +86,18 @@ export default function () { process.env["SP_PRODUCTION_RELEASE"] === "true" || !!process.env.CI; const enableSentry = process.env["SP_ENABLE_SENTRY"] === "true"; const pkg = require("./package.json"); - const name = isProd ? "Streamplace" : "Devplace"; + // Brand imagery and colors are generated from the active brand directory + // (see brand/README.md); expo prebuild derives every native icon format + // from the generated PNGs. + let brand; + try { + brand = require("./assets/generated/brand.json"); + } catch { + throw new Error( + "Missing generated brand assets — run `pnpm run brand` from the repo root.", + ); + } + const name = isProd ? brand.name : "Devplace"; let bundle = isProd ? "tv.aquareum" : "tv.aquareum.dev"; if (process.env["SP_BUNDLE_OVERRIDE"]) { bundle = process.env["SP_BUNDLE_OVERRIDE"]; @@ -101,13 +112,13 @@ export default function () { // Only rev this to the current version when native dependencies change! runtimeVersion: pkg.runtimeVersion, orientation: "default", - icon: "./assets/images/icon.png", + icon: "./assets/generated/icon.png", scheme: scheme, userInterfaceStyle: "automatic", splash: { - image: "./assets/images/splash.png", + image: "./assets/generated/splash.png", resizeMode: "contain", - backgroundColor: "#ffffff", + backgroundColor: brand.colors.splashBackground, }, assetBundlePatterns: ["**/*"], ios: { @@ -134,8 +145,8 @@ export default function () { }, android: { adaptiveIcon: { - foregroundImage: "./assets/images/adaptive-icon.png", - backgroundColor: "#111113", + foregroundImage: "./assets/generated/adaptive-icon.png", + backgroundColor: brand.colors.adaptiveIconBackground, }, package: bundle, edgeToEdgeEnabled: true, @@ -191,7 +202,7 @@ export default function () { web: { bundler: "metro", output: "single", - favicon: "./assets/images/favicon.png", + favicon: "./assets/generated/favicon.png", }, plugins: [ withAndroidProfileable, diff --git a/js/app/assets/images/adaptive-icon.png b/js/app/assets/images/adaptive-icon.png deleted file mode 100644 index 34b55d0ac5c40d76e6b8da1d951b878603477e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12311 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 B#nb=* diff --git a/js/app/assets/images/icon.png b/js/app/assets/images/icon.png deleted file mode 100644 index 0b290a7fd4292a8a2879884731af2bcbf93f4027..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29925 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 diff --git a/js/app/assets/images/splash.png b/js/app/assets/images/splash.png deleted file mode 100644 index d91db852a052f07e461ffeefc9d84c3fe2e6be69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11378 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 diff --git a/js/app/components/brand/logo.tsx b/js/app/components/brand/logo.tsx index 48f4b4f9a..92111245b 100644 --- a/js/app/components/brand/logo.tsx +++ b/js/app/components/brand/logo.tsx @@ -1,77 +1,33 @@ import { Text, useTheme } from "@streamplace/components"; -import { - borderAlphas, - colors, - fontFamilies, - surfaces, -} from "@streamplace/components/src/lib/theme/tokens"; +import { fontFamilies } from "@streamplace/components/src/lib/theme/tokens"; +import { Fragment } from "react"; import { View, type ViewProps } from "react-native"; -import Svg, { G, Path } from "react-native-svg"; +import { SvgXml } from "react-native-svg"; +import { BRAND } from "../../assets/generated/brand"; /** - * Streamplace mark, drawn on a 24-unit grid. - * - * An S built from two plays. A single rounded square holds two triangular - * play voids in 180-degree rotational symmetry: one opens through the right - * edge, its mirror opens through the left. The ink that remains reads as an - * S (Streamplace); the two voids read as play (video). One points out, its - * mirror points back — watch and broadcast, the two places of a stream. - * - * The whole mark is one solid color; the plays are negative space. It is - * pure figure-ground in the Logo Modernism spirit, and holds down to - * favicon size because the dominant form fills the field. + * Brand logo components. All artwork comes from the generated brand module + * (js/app/assets/generated/brand.ts), which js/brand/generate.mjs derives + * from the active brand directory — see brand/README.md. Nothing here is + * specific to any one identity; forks swap the brand dir, not this file. */ -const TILE = { x: 3, y: 3, size: 18, radius: 3.5 }; -// Full play triangles (used as construction guides). Upper opens right; -// lower is its exact 180-degree rotation about the center (12, 12). -const UPPER_PLAY: [number, number][] = [ - [10.2, 5.4], - [10.2, 11.8], - [23, 8.6], -]; -const LOWER_PLAY: [number, number][] = UPPER_PLAY.map( - ([x, y]) => [24 - x, 24 - y] as [number, number], -); +export type { Brand, BrandStory } from "../../assets/generated/brand"; +export { BRAND }; -// The rounded-square field, as a path so it can carry evenodd holes. Its -// 3.5u corners are tightened toward the sharp play voids so the whole mark -// shares one crisp corner language rather than reading half-soft, half-sharp. -const TILE_PATH = - "M 6.5 3 H 17.5 A 3.5 3.5 0 0 1 21 6.5 V 17.5 A 3.5 3.5 0 0 1 17.5 21 H 6.5 A 3.5 3.5 0 0 1 3 17.5 V 6.5 A 3.5 3.5 0 0 1 6.5 3 Z"; +// Monochrome marks are authored with fill="currentColor"; tint by +// substitution. A multi-color mark has no currentColor, so this no-ops and +// the art renders as drawn. +const tinted = (svg: string, color: string) => + svg.replaceAll("currentColor", color); -// The play voids, pre-clipped to the field's edge so each breaches cleanly -// (a ~1u opening) with no overhang under an evenodd fill. -const UPPER_HOLE = "M 10.2 5.4 L 10.2 11.8 L 21 9.1 L 21 8.1 Z"; -const LOWER_HOLE = "M 13.8 18.6 L 13.8 12.2 L 3 14.9 L 3 15.9 Z"; - -export const MARK = { - grid: 24, - tile: TILE, - center: [12, 12] as [number, number], - tilePath: TILE_PATH, - upperPlay: UPPER_PLAY, - lowerPlay: LOWER_PLAY, - upperHole: UPPER_HOLE, - lowerHole: LOWER_HOLE, -}; - -export const MARK_WITH_HOLE = `${TILE_PATH} ${UPPER_HOLE} ${LOWER_HOLE}`; - -// Standalone SVG source for the "copy as SVG" brand menu. Mono ink by default -// (reads on light surfaces / code editors); mirrors js/app/public/brand/*.svg. -const BRAND_SVG_INK = "#0A0A0B"; // token-ok: brand SVG ink, mirrors public/brand/*.svg - -export function markSvgString(color = BRAND_SVG_INK) { - return ``; -} - -export function wordmarkSvgString(color = BRAND_SVG_INK) { - return `stream.place`; +/** Standalone SVG source for the "copy as SVG" brand menu. */ +export function markSvgString(color = BRAND.colors.ink) { + return tinted(BRAND.markSvg, color); } -function MarkPath({ color }: { color: string }) { - return ; +export function wordmarkSvgString(color = BRAND.colors.ink) { + return tinted(BRAND.wordmarkSvg, color); } export function LogoMark({ @@ -82,50 +38,25 @@ export function LogoMark({ color?: string; }) { const { theme } = useTheme(); - // Monochrome brand: the mark defaults to the ink/paper text color and - // matches the wordmark exactly. Pink is an interface accent, never the - // mark's own color — pass `color` explicitly for the rare colored variant. + // Monochrome brands default the mark to the ink/paper text color so it + // matches the wordmark exactly; pass `color` explicitly for the rare + // colored variant. return ( - - - + ); } /** - * App icon / avatar tile: the mark reversed to paper inside a - * continuous-curvature square, with enough inset to survive icon masks. + * App icon / avatar tile: the mark inside a continuous-curvature square, + * with enough inset to survive icon masks. Colors come from the brand's + * tile palette, not the running theme, so it matches the installed icon. */ -export function LogoTile({ - size = 32, - background, - foreground, -}: { - size?: number; - background?: string; - foreground?: string; -}) { - // Mono brand: a dark tile with the paper-white S. A faint hairline - // keeps the dark tile legible on dark surfaces. Pink lives in the - // running UI (buttons, links, focus) — never in the brand mark itself. - const squircle = - "M 0 16 C 0 4 4 0 16 0 C 28 0 32 4 32 16 C 32 28 28 32 16 32 C 4 32 0 28 0 16 Z"; - const bg = background ?? surfaces.dark[1]; - const fg = foreground ?? colors.white; - return ( - - - - - - - - ); +export function LogoTile({ size = 32 }: { size?: number }) { + return ; } export function Wordmark({ @@ -137,7 +68,7 @@ export function Wordmark({ }: { size?: number; color?: string; - /** Optional accent color for the "." — omit to keep the wordmark mono. */ + /** Optional accent color for any "." — omit to keep the wordmark mono. */ dotColor?: string; /** Wordmark weight — "semibold" for the public signature, "medium" for chrome like the nav. */ weight?: "medium" | "semibold"; @@ -154,11 +85,17 @@ export function Wordmark({ fontWeight: (isMedium ? "500" : "600") as "500" | "600", color: color ?? theme.colors.text1, }; + const parts = BRAND.wordmark.split("."); return ( - stream - . - place + {parts.map((part, i) => ( + + {i > 0 && ( + . + )} + {part} + + ))} ); } diff --git a/js/app/package.json b/js/app/package.json index 54c08bcdd..4f1b42706 100644 --- a/js/app/package.json +++ b/js/app/package.json @@ -15,11 +15,12 @@ "ios": "expo run:ios --no-bundler", "web": "npx expo start --web --port 38081", "test": "jest --watchAll", + "brand": "pnpm --filter @streamplace/brand generate", "build": "pnpm run build:web && pnpm run prebuild", - "build:web": "node scripts/generate-build-info.js && pnpm run export && node exportClientExpoConfig.js > dist/expoConfig.json", + "build:web": "pnpm run brand && node scripts/generate-build-info.js && pnpm run export && node exportClientExpoConfig.js > dist/expoConfig.json", "export": "expo export --dump-sourcemap || expo export --dump-sourcemap", "check": "pnpm --filter @streamplace/i18n compile && bash -c 'set -euo pipefail;export OUT=$(mktemp -d); npx tsc -p . --outDir $OUT; rm -rf $OUT'", - "prebuild": "EXPO_NO_GIT_STATUS=1 expo prebuild --clean && sed -i.bak 's/org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m/org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m/' android/gradle.properties && pnpm run find-node", + "prebuild": "pnpm run brand && EXPO_NO_GIT_STATUS=1 expo prebuild --clean && sed -i.bak 's/org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m/org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m/' android/gradle.properties && pnpm run find-node", "prepare": "which pod && pnpm run prepare-ios || echo 'not a mac, not installing pods' && mkdir -p ./public && cp -r ../i18n/public/locales ./public/", "prepare-ios": "cd ios && pod install && pnpm run find-node", "find-node": "node -p '`NODE_BINARY=${process.argv[0]}`' > ios/.xcode.env.local", diff --git a/js/app/public/brand/streamplace-lockup.svg b/js/app/public/brand/streamplace-lockup.svg deleted file mode 100644 index 7de84c274..000000000 --- a/js/app/public/brand/streamplace-lockup.svg +++ /dev/null @@ -1,9 +0,0 @@ - - Streamplace lockup - - - - stream - . - place - diff --git a/js/app/public/brand/streamplace-mark.svg b/js/app/public/brand/streamplace-mark.svg deleted file mode 100644 index ee314051f..000000000 --- a/js/app/public/brand/streamplace-mark.svg +++ /dev/null @@ -1,4 +0,0 @@ - - Streamplace mark - - diff --git a/js/app/public/brand/streamplace-tile.svg b/js/app/public/brand/streamplace-tile.svg deleted file mode 100644 index f20862049..000000000 --- a/js/app/public/brand/streamplace-tile.svg +++ /dev/null @@ -1,8 +0,0 @@ - - Streamplace tile icon - - - - - - diff --git a/js/app/public/brand/streamplace-wordmark.svg b/js/app/public/brand/streamplace-wordmark.svg deleted file mode 100644 index 42308453d..000000000 --- a/js/app/public/brand/streamplace-wordmark.svg +++ /dev/null @@ -1,6 +0,0 @@ - - Streamplace wordmark - stream - . - place - diff --git a/js/app/public/favicon.png b/js/app/public/favicon.png deleted file mode 100644 index 04089c06e985b4142a7ad8066113fd23cfb95f3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6583 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 B#nb=* diff --git a/js/app/src/screens/brand.tsx b/js/app/src/screens/brand.tsx new file mode 100644 index 000000000..95d3a34d5 --- /dev/null +++ b/js/app/src/screens/brand.tsx @@ -0,0 +1,814 @@ +import { Button, Text, useTheme } from "@streamplace/components"; +import { + colors, + fontFamilies, + spacing, + statusColors, + surfaces, +} from "@streamplace/components/src/lib/theme/tokens"; +import { + BRAND, + type BrandStory, + LogoLockup, + LogoMark, + LogoTile, + Wordmark, +} from "components/brand/logo"; +import Container from "components/container"; +import { Download } from "lucide-react-native"; +import { type ReactNode, useState } from "react"; +import { + Linking, + Pressable, + ScrollView, + View, + useWindowDimensions, +} from "react-native"; +import Svg, { Circle, G, Line, Path, Polygon, Rect } from "react-native-svg"; + +const BRAND_INK = surfaces.dark[0]; +const BRAND_PAPER = colors.white; + +const polyStr = (pts: number[][]) => pts.map((p) => p.join(",")).join(" "); + +type Geometry = NonNullable; + +function Construction({ + geometry, + size = 320, +}: { + geometry: Geometry; + size?: number; +}) { + const { theme } = useTheme(); + const guide = theme.colors.text3; + const faint = theme.colors.borderSubtle; + const units = geometry.grid; + const grid = Array.from({ length: units + 1 }, (_, i) => i); + + return ( + + + {grid.map((i) => ( + + + + + ))} + {/* the rounded-square field */} + + {/* the two play triangles, each the other's 180-degree rotation */} + + + {/* the spine: the diagonal the two voids leave behind */} + + {/* the mark */} + + {/* the center of rotation */} + + + ); +} + +function Section({ + title, + kicker, + children, +}: { + title: string; + kicker?: string; + children: ReactNode; +}) { + const { theme } = useTheme(); + return ( + + + {kicker ? ( + + {kicker} + + ) : null} + + {title} + + + {children} + + ); +} + +function Panel({ + children, + background, + bordered = true, + height = 176, + grow = true, +}: { + children: ReactNode; + background?: string; + bordered?: boolean; + height?: number; + grow?: boolean; +}) { + const { theme } = useTheme(); + return ( + + {children} + + ); +} + +function Spec({ label, value }: { label: string; value: string }) { + const { theme } = useTheme(); + return ( + + + {label} + + + {value} + + + ); +} + +// A single button variant with its name + when-to-use note. +function ButtonSpec({ + label, + note, + children, +}: { + label: string; + note: string; + children: ReactNode; +}) { + const { theme } = useTheme(); + return ( + + {children} + + + {label} + + + {note} + + + + ); +} + +function Swatch({ + name, + value, + note, +}: { + name: string; + value: string; + note: string; +}) { + const { theme } = useTheme(); + return ( + + + + + {name} + + + {note} + + + + {value.toUpperCase()} + + + ); +} + +function Rule({ ok, children }: { ok: boolean; children: ReactNode }) { + const { theme } = useTheme(); + return ( + + + {ok ? "Do" : "Don't"} + + + {children} + + + ); +} + +const BRAND_ASSETS = BRAND.assets; + +// A downloadable brand asset: a hover-lit row that saves the SVG. On web it +// renders as an , so left-click downloads and right-click +// offers "Save link as". A no-op affordance on native. +function AssetDownload({ file, label }: { file: string; label: string }) { + const { theme } = useTheme(); + const [hovered, setHovered] = useState(false); + const path = `/brand/${file}`; + return ( + setHovered(true)} + onHoverOut={() => setHovered(false)} + style={{ + flexDirection: "row", + alignItems: "center", + gap: spacing[3], + borderWidth: 1, + borderColor: hovered + ? theme.colors.borderStrong + : theme.colors.borderSubtle, + borderRadius: theme.borderRadius.md, + paddingHorizontal: spacing[4], + paddingVertical: spacing[3], + backgroundColor: hovered + ? theme.colors.surface2 + : theme.colors.surface1, + }} + > + + + {label} + + + {path} + + + + + ); +} + +export default function BrandScreen() { + const { theme } = useTheme(); + const { width } = useWindowDimensions(); + const compact = width < 760; + const story = BRAND.story; + + return ( + + + + + + + {story?.tagline ?? `Brand guidelines for ${BRAND.name}.`} + + + + + + + + + + + + + {story?.readings?.length ? ( +

+ {story.readingsIntro ? ( + + {story.readingsIntro} + + ) : null} + + {story.readings.map((reading, i) => ( + + + {String(i + 1).padStart(2, "0")} + + + {reading.title} + {reading.body} + + + ))} + +
+ ) : null} + +
+ + + + + + + + + + + + + + + + The icon carries the idea; the wordmark carries the address. The + lockup is the default public signature, while the tile is reserved + for app icons, avatars, and surfaces that require a contained + square. + +
+ + {story?.geometry ? ( +
+ + + + + + {story.constructionNotes ? ( + + {story.constructionNotes} + + ) : null} + + {(story.specs ?? []).map((spec) => ( + + ))} + + + +
+ ) : null} + +
+ + + + + + + Set the mark at 1.3x the wordmark size. The gap is one quarter of + the mark height. Keep at least half a mark of clear space around the + whole lockup. Minimum sizes: 16px for the mark, 20px wordmark size + for the full lockup. + +
+ +
+ + + + + Aa + + + Geist + + + + + {[ + { + fam: fontFamilies.regular, + label: "Regular · 400 — body copy", + }, + { + fam: fontFamilies.medium, + label: "Medium · 500 — UI labels, buttons, nav", + }, + { + fam: fontFamilies.semiBold, + label: "SemiBold · 600 — headings, the wordmark", + }, + ].map((w) => ( + + + {w.label} + + + The video layer for everything + + + ))} + + + + + + + rtmp://stream.place/live · sk_live_9f2a…c7 + + + Geist Mono + + + + + + One typeface carries the whole system. Geist — a clean, contemporary + grotesque — in just three weights: Regular for text, Medium for + interface, SemiBold for headings and the wordmark. Its monospace + companion, Geist Mono, is reserved for the technical register: + stream keys, code, and the small labels above each section here. + + + Geist is free and open source under the SIL Open Font License, + designed by{" "} + Linking.openURL("https://basement.studio")} + style={{ color: theme.colors.primary }} + > + basement.studio + + . + +
+ +
+ + The brand is monochrome — ink and paper carry the identity. Indigo + is a secondary accent reserved for interface state (links, focus, + active nav, selected items) — not button fills, and never the mark. + Red signals state, not decoration: a filled red dot is on-air, and + that hero use stays reserved; destructive and error states borrow + red as ink (outline, text, icon) so a glance still separates "live" + from "careful." Red never becomes a brand or accent color. + + + + + + + +
+ + {BRAND.monochrome ? ( +
+ + + + + + + + + + + + + + +
+ ) : null} + +
+ + Emphasis comes from contrast, not hue — the way ink and paper carry + the mark. The single most important action per view is Paper + (near-white on dark, ink on light): the highest-contrast element on + screen. Everything else steps down in weight. Indigo stays off + button fills so it keeps its meaning as a state color; live red is + never a button. + + + + + + + + + + + + + + + + + + + + + Exactly one Paper (primary) button per view — it marks the single + most important action. + + + Step down to tonal, then ghost, for supporting actions. Hierarchy + reads by contrast alone. + + + Reserve the indigo accent variant for a deliberate brand moment, + not routine primaries. + + + Don't fill a button with solid red — a red fill reads as on-air. + Destructive actions use red ink (an outline), never a fill. + + + Don't place two Paper buttons side by side — nothing signals which + one is primary. + + +
+ +
+ + {BRAND_ASSETS.map((a) => ( + + ))} + +
+ + {story?.usage?.length ? ( +
+ + {story.usage.map((rule) => ( + + {rule.text} + + ))} + +
+ ) : null} + + + ); +} diff --git a/js/brand/generate.mjs b/js/brand/generate.mjs new file mode 100644 index 000000000..1e2acea9c --- /dev/null +++ b/js/brand/generate.mjs @@ -0,0 +1,472 @@ +#!/usr/bin/env node +// Streamplace brand asset generator. +// +// Reads a flat directory of brand inputs (see brand/README.md for the +// contract) and generates every derived brand asset in the repo: the Expo +// icon/splash/adaptive-icon/favicon PNGs (Expo prebuild derives all native +// iOS/Android formats from those), the OG link banner, desktop ICO/ICNS, +// docs logos, the downloadable /brand SVGs, and a TypeScript module the +// app's logo components render from. Every output is gitignored; the brand +// directory is the only source of truth. +// +// Brand dir resolution: $SP_BRAND_DIR, else brand/custom/ (gitignored — for +// first-party or private art), else brand/ (the open-source default). + +import { + copyFileSync, + existsSync, + mkdirSync, + readFileSync, + writeFileSync, +} from "node:fs"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import sharp from "sharp"; + +const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", ".."); + +const brandDir = process.env.SP_BRAND_DIR + ? resolve(process.env.SP_BRAND_DIR) + : existsSync(join(repoRoot, "brand", "custom", "brand.json")) + ? join(repoRoot, "brand", "custom") + : join(repoRoot, "brand"); + +function fail(msg) { + console.error(`brand: ${msg}`); + process.exit(1); +} + +if (!existsSync(join(brandDir, "brand.json"))) { + fail(`no brand.json in ${brandDir}`); +} + +const config = JSON.parse(readFileSync(join(brandDir, "brand.json"), "utf8")); +if (!config.name) fail("brand.json must set `name`"); + +const colors = { + ink: "#0A0A0B", + paper: "#ffffff", + iconBackground: "#ffffff", + iconForeground: null, // defaults to ink + adaptiveIconBackground: "#111113", + adaptiveIconForeground: null, // defaults to ink + splashBackground: "#ffffff", + splashForeground: null, // defaults to ink + tileBackground: "#111113", + tileForeground: "#ffffff", + tileHairline: "rgba(255,255,255,0.10)", + bannerBackground: null, // defaults to paper + bannerForeground: null, // defaults to ink + ...config.colors, +}; +colors.iconForeground ??= colors.ink; +colors.adaptiveIconForeground ??= colors.ink; +colors.splashForeground ??= colors.ink; +colors.bannerBackground ??= colors.paper; +colors.bannerForeground ??= colors.ink; + +const name = config.name; +const wordmark = config.wordmark ?? name; +const mono = config.monochrome === true; +const story = config.story ?? null; +const slug = name + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-|-$/g, ""); + +// ---------------------------------------------------------------- svg utils + +const stripSize = (svg) => + svg.replace( + /]*)>/, + (_, attrs) => ``, + ); + +function viewBoxOf(svg) { + const m = svg.match(/viewBox\s*=\s*"([^"]+)"/); + if (!m) fail("SVG inputs must declare a viewBox"); + const [x, y, w, h] = m[1] + .trim() + .split(/[\s,]+/) + .map(Number); + return { x, y, w, h }; +} + +const innerOf = (svg) => + svg.replace(/^[\s\S]*?]*>/, "").replace(/<\/svg>\s*$/, ""); + +const withColor = (svg, color) => + color ? svg.replaceAll("currentColor", color) : svg; + +const escapeXml = (s) => + s.replace(/&/g, "&").replace(//g, ">"); + +// Nest an SVG inside a box of a larger composition. preserveAspectRatio +// keeps non-square art centered without distortion. (Raster-only outputs — +// runtime SVG for react-native-svg uses group transforms instead.) +function embed(svg, x, y, w, h) { + const vb = viewBoxOf(svg); + return `${innerOf(svg)}`; +} + +// Same, but as a : react-native-svg's SvgXml handles nested +// poorly on native, so the runtime tile uses translate+scale. +function embedGroup(svg, x, y, w, h) { + const vb = viewBoxOf(svg); + const s = Math.min(w / vb.w, h / vb.h); + const tx = x + (w - vb.w * s) / 2 - vb.x * s; + const ty = y + (h - vb.h * s) / 2 - vb.y * s; + return `${innerOf(svg)}`; +} + +const round = (n) => Math.round(n * 1000) / 1000; + +const compose = (w, h, parts) => + `${parts.join("")}`; + +const rasterize = (svg) => sharp(Buffer.from(svg)).png().toBuffer(); + +// ------------------------------------------------------------ brand inputs + +function findArt(base) { + for (const ext of ["svg", "png"]) { + const p = join(brandDir, `${base}.${ext}`); + if (existsSync(p)) { + return ext === "svg" + ? { svg: stripSize(readFileSync(p, "utf8")) } + : { png: p }; + } + } + return null; +} + +const markArt = findArt("mark"); +if (!markArt?.svg) fail(`${brandDir}/mark.svg is required`); +const markSvg = markArt.svg; + +const TRANSPARENT = { r: 0, g: 0, b: 0, alpha: 0 }; + +// Render brand art onto a size×size canvas: `scale` insets the art, +// `background` fills the canvas, `color` resolves currentColor for +// monochrome SVG art. +async function squarePng(art, size, { background, scale = 1, color } = {}) { + if (art.svg) { + const box = size * scale; + const off = (size - box) / 2; + const parts = []; + if (background) + parts.push( + ``, + ); + parts.push(embed(withColor(art.svg, color), off, off, box, box)); + return rasterize(compose(size, size, parts)); + } + const box = Math.round(size * scale); + const img = await sharp(art.png) + .resize(box, box, { fit: "contain", background: TRANSPARENT }) + .png() + .toBuffer(); + return sharp({ + create: { + width: size, + height: size, + channels: 4, + background: background ?? TRANSPARENT, + }, + }) + .composite([{ input: img }]) + .png() + .toBuffer(); +} + +// -------------------------------------------------------- container formats + +// ICO: a directory of embedded PNGs (supported everywhere since Vista). +function buildIco(pngs) { + const header = Buffer.alloc(6); + header.writeUInt16LE(1, 2); + header.writeUInt16LE(pngs.length, 4); + const entries = []; + const blobs = []; + let offset = 6 + 16 * pngs.length; + for (const { size, buf } of pngs) { + const e = Buffer.alloc(16); + e.writeUInt8(size >= 256 ? 0 : size, 0); + e.writeUInt8(size >= 256 ? 0 : size, 1); + e.writeUInt16LE(1, 4); + e.writeUInt16LE(32, 6); + e.writeUInt32LE(buf.length, 8); + e.writeUInt32LE(offset, 12); + offset += buf.length; + entries.push(e); + blobs.push(buf); + } + return Buffer.concat([header, ...entries, ...blobs]); +} + +// ICNS: typed chunks of embedded PNGs. +function buildIcns(chunks) { + const body = Buffer.concat( + chunks.map(({ type, buf }) => { + const h = Buffer.alloc(8); + h.write(type, 0, 4, "ascii"); + h.writeUInt32BE(8 + buf.length, 4); + return Buffer.concat([h, buf]); + }), + ); + const h = Buffer.alloc(8); + h.write("icns", 0, 4, "ascii"); + h.writeUInt32BE(8 + body.length, 4); + return Buffer.concat([h, body]); +} + +// ------------------------------------------------------------- compositions + +function tileSvgString() { + const squircle = + "M 0 16 C 0 4 4 0 16 0 C 28 0 32 4 32 16 C 32 28 28 32 16 32 C 4 32 0 28 0 16 Z"; + const mark = withColor(markSvg, mono ? colors.tileForeground : null); + return compose(32, 32, [ + ``, + ``, + embedGroup(mark, 4, 4, 24, 24), + ]).replace(/^]*) width="32" height="32"/, "${escapeXml(wordmark)}`; +} + +function lockupSvgString() { + const wm = withColor(wordmarkSvgString(), colors.ink); + const wmVb = viewBoxOf(wm); + const textW = Math.round((wmVb.w / wmVb.h) * 96); + const markW = 96; + const gap = 24; + return compose(markW + gap + textW, 128, [ + embed(withColor(markSvg, mono ? colors.ink : null), 0, 16, markW, markW), + embed(wm, markW + gap, 16, textW, 96), + ]); +} + +// -------------------------------------------------------------------- main + +const outApp = join(repoRoot, "js/app/assets/generated"); +const outPublic = join(repoRoot, "js/app/public"); +const outPublicBrand = join(outPublic, "brand"); +const outDesktop = join(repoRoot, "js/desktop/assets/images"); +const outDocs = join(repoRoot, "js/docs/src/assets"); +for (const d of [outApp, outPublicBrand, outDesktop, outDocs]) { + mkdirSync(d, { recursive: true }); +} + +const written = []; +function write(path, data) { + writeFileSync(path, data); + written.push(path.slice(repoRoot.length + 1)); +} + +// Expo sources: prebuild derives every native iOS/Android icon from these. +const iconArt = findArt("icon") ?? { + synth: { + background: colors.iconBackground, + scale: 0.62, + color: colors.iconForeground, + }, +}; +const iconPng = (size) => + iconArt.synth + ? squarePng(markArt, size, iconArt.synth) + : squarePng(iconArt, size, {}); +write(join(outApp, "icon.png"), await iconPng(1024)); + +const adaptiveArt = findArt("icon-foreground"); +write( + join(outApp, "adaptive-icon.png"), + adaptiveArt + ? await squarePng(adaptiveArt, 1024, {}) + : await squarePng(markArt, 1024, { + scale: 0.45, + color: colors.adaptiveIconForeground, + }), +); + +const splashArt = findArt("splash"); +write( + join(outApp, "splash.png"), + splashArt + ? await squarePng(splashArt, 1024, {}) + : await squarePng(markArt, 1024, { + scale: 0.5, + color: colors.splashForeground, + }), +); + +const favicon = await squarePng(markArt, 256, { + scale: 0.92, + color: colors.ink, +}); +write(join(outApp, "favicon.png"), favicon); +write(join(outPublic, "favicon.png"), favicon); + +// OG / social card. +const bannerArt = findArt("linkbanner"); +if (bannerArt?.png) { + copyFileSync(bannerArt.png, join(outPublic, "linkbanner.png")); + written.push("js/app/public/linkbanner.png"); +} else if (bannerArt?.svg) { + write( + join(outPublic, "linkbanner.png"), + await rasterize( + compose(1200, 630, [embed(bannerArt.svg, 0, 0, 1200, 630)]), + ), + ); +} else { + write( + join(outPublic, "linkbanner.png"), + await rasterize( + compose(1200, 630, [ + ``, + embed(withColor(markSvg, colors.bannerForeground), 450, 165, 300, 300), + ]), + ), + ); +} + +// Downloadable brand SVGs (served from /brand, listed on the brand screen). +const brandAssets = [ + { file: `${slug}-mark.svg`, label: "Mark" }, + { file: `${slug}-tile.svg`, label: "App tile" }, + { file: `${slug}-wordmark.svg`, label: "Wordmark" }, + { file: `${slug}-lockup.svg`, label: "Lockup" }, +]; +write( + join(outPublicBrand, `${slug}-mark.svg`), + withColor(markSvg, mono ? colors.ink : null), +); +write(join(outPublicBrand, `${slug}-tile.svg`), tileSvgString()); +write( + join(outPublicBrand, `${slug}-wordmark.svg`), + withColor(wordmarkSvgString(), colors.ink), +); +write(join(outPublicBrand, `${slug}-lockup.svg`), lockupSvgString()); + +// Desktop (Electron Forge): window/taskbar PNG plus ICO and ICNS. +write(join(outDesktop, "streamplace-logo.png"), await iconPng(512)); +const icoSizes = [16, 24, 32, 48, 64, 128, 256]; +write( + join(outDesktop, "streamplace-logo.ico"), + buildIco( + await Promise.all( + icoSizes.map(async (size) => ({ size, buf: await iconPng(size) })), + ), + ), +); +const icnsTypes = [ + ["ic11", 32], + ["ic12", 64], + ["ic07", 128], + ["ic08", 256], + ["ic13", 256], + ["ic09", 512], + ["ic14", 512], + ["ic10", 1024], +]; +write( + join(outDesktop, "streamplace-logo.icns"), + buildIcns( + await Promise.all( + icnsTypes.map(async ([type, size]) => ({ + type, + buf: await iconPng(size), + })), + ), + ), +); + +// Docs (Starlight header logo, light/dark themes). +const docsLight = await squarePng(markArt, 512, { + color: mono ? colors.ink : null, +}); +const docsDark = mono + ? await squarePng(markArt, 512, { color: colors.paper }) + : docsLight; +write(join(outDocs, "logo-light.png"), docsLight); +write(join(outDocs, "logo-dark.png"), docsDark); + +// Resolved config for app.config.ts (splash/adaptive-icon colors). +write( + join(outApp, "brand.json"), + JSON.stringify({ name, slug, wordmark, monochrome: mono, colors }, null, 2) + + "\n", +); + +// TypeScript module the app's logo components render from. +const brandTs = `// AUTO-GENERATED by js/brand/generate.mjs — do not edit. +// Regenerate with \`pnpm run brand\` from the repo root. + +export type BrandStory = { + tagline?: string; + readingsIntro?: string; + readings?: { title: string; body: string }[]; + geometry?: { + grid: number; + tilePath: string; + markPath: string; + upperPlay: number[][]; + lowerPlay: number[][]; + center: number[]; + }; + constructionNotes?: string; + specs?: { label: string; value: string }[]; + usage?: { ok: boolean; text: string }[]; +}; + +export type Brand = { + name: string; + slug: string; + wordmark: string; + monochrome: boolean; + colors: { + ink: string; + paper: string; + tileBackground: string; + tileForeground: string; + tileHairline: string; + }; + markSvg: string; + tileSvg: string; + wordmarkSvg: string; + assets: { file: string; label: string }[]; + story: BrandStory | null; +}; + +export const BRAND: Brand = { + name: ${JSON.stringify(name)}, + slug: ${JSON.stringify(slug)}, + wordmark: ${JSON.stringify(wordmark)}, + monochrome: ${mono}, + colors: { + ink: ${JSON.stringify(colors.ink)}, + paper: ${JSON.stringify(colors.paper)}, + tileBackground: ${JSON.stringify(colors.tileBackground)}, + tileForeground: ${JSON.stringify(colors.tileForeground)}, + tileHairline: ${JSON.stringify(colors.tileHairline)}, + }, + markSvg: ${JSON.stringify(markSvg)}, + tileSvg: ${JSON.stringify(tileSvgString())}, + wordmarkSvg: ${JSON.stringify(wordmarkSvgString())}, + assets: ${JSON.stringify(brandAssets)}, + story: ${story ? JSON.stringify(story, null, 2) : "null"}, +}; +`; +write(join(outApp, "brand.ts"), brandTs); + +console.log( + `brand: generated ${written.length} assets for "${name}" from ${brandDir.slice(repoRoot.length + 1) || brandDir}`, +); diff --git a/js/brand/package.json b/js/brand/package.json new file mode 100644 index 000000000..3f243df32 --- /dev/null +++ b/js/brand/package.json @@ -0,0 +1,12 @@ +{ + "name": "@streamplace/brand", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "generate": "node generate.mjs" + }, + "dependencies": { + "sharp": "^0.34.3" + } +} diff --git a/js/desktop/.gitignore b/js/desktop/.gitignore index 418a6fa48..b75ebd132 100644 --- a/js/desktop/.gitignore +++ b/js/desktop/.gitignore @@ -93,3 +93,8 @@ out/ # auto-version src/version.ts + +# generated brand icons (pnpm run brand) +assets/images/streamplace-logo.png +assets/images/streamplace-logo.ico +assets/images/streamplace-logo.icns diff --git a/js/desktop/assets/images/streamplace-logo.icns b/js/desktop/assets/images/streamplace-logo.icns deleted file mode 100644 index 8d81bbd5c2b44aea5139bf60550502857a58f64a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95162 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
)8|~V8BhO63>+dp=s6W_+m!r$ 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

e&JU6-e?)N?qU5DlCcY9qFn-jc5`@848 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 src/version.ts" diff --git a/js/docs/.gitignore b/js/docs/.gitignore index 6240da8b1..870118ca4 100644 --- a/js/docs/.gitignore +++ b/js/docs/.gitignore @@ -19,3 +19,7 @@ pnpm-debug.log* # macOS-specific files .DS_Store + +# generated brand logos (pnpm run brand) +src/assets/logo-light.png +src/assets/logo-dark.png diff --git a/js/docs/astro.config.mjs b/js/docs/astro.config.mjs index de80513b5..798e9fecd 100644 --- a/js/docs/astro.config.mjs +++ b/js/docs/astro.config.mjs @@ -29,7 +29,8 @@ export default defineConfig({ }, ], logo: { - src: "/src/assets/cube.png", + light: "/src/assets/logo-light.png", + dark: "/src/assets/logo-dark.png", alt: "Streamplace Logo", }, favicon: "/favicon.ico", diff --git a/js/docs/package.json b/js/docs/package.json index afa9acc69..a1dcdedea 100644 --- a/js/docs/package.json +++ b/js/docs/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "astro dev --host 0.0.0.0 --port 38082", "start": "astro dev --host 0.0.0.0 --port 38082", - "build": "astro build && rm -rf ../app/dist/docs && mkdir -p ../app/dist && cp -r dist ../app/dist/docs", + "build": "pnpm --filter @streamplace/brand generate && astro build && rm -rf ../app/dist/docs && mkdir -p ../app/dist && cp -r dist ../app/dist/docs", "preview": "astro preview", "astro": "astro" }, diff --git a/js/docs/src/assets/cube.png b/js/docs/src/assets/cube.png deleted file mode 100644 index d5eddb3d692277dc7ba311521063cb1bcbad3a41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16122 zcmeAS@N?(olHy`uVBq!ia0y~yU@~K1VA9}VV_;yY%364jfq{Xuz$3Dlfg#2Xgc(Jq zI6E>h*sbw&aSW-r_4aOMMey~x#|oXDzL|JW-{O1yZ|MRbT#qZCaQfirC@x;abyKZ3l`Fy3gde)omx zi(K#6KK3j9v0tI8`uK-nr4|9F4!zVxx4%3D=D@JI874TSo795aQl1lO>-ia9B&UuVJnV$HT6uEqt(Ty_15;OP8^CY z8Nn%g_L{rg**D+C#`fr@nw)9pjx9VBGwb$#<5wT`xvFc*U2j#{DYZx(&2JKL;!r%S zZ*=zcy8a#2bt>IHjyE2EKfS2X?X!~c4ral8|HXg4H`bNEpWc#uTlCK|4#gIMqPmHh zFZa5M&3u1a$k_JP$NZYoY>yW)`>%+8`}J8l?tXpOwRh$pXREXbI2mm`QBoQ!n)m+S zHXWl%!T$WUIvmS`7M$R5+q-IutC&glmDm4E>z}tp|MV4h;!u1Uks@<@9mn?H`vkxK zSiU0Ma*2nO$jpTtZnpbob=u@8$aswW_aP&QuXE zeZTs)nbPG}+kexa?AP7&rssY6@BLa)SpKLBH-k)sJrKI;mwub?wwy%&f#ifd-~~qcTLU0!Z5Kp zYhN|9EuJ^e`uE*`<)1T^TLhdQ#isBim26r3JGkiK+1?$szMIa-ENW3Xvu?xf{O*dH z`u<(jb|)=moj4RzcDTBA1infPk4$*iyW{V<#`GNl245a+sG6$t>Z|{Y@89ZT_a5%? z*HLT{_|&E({PII>gx-vL?&`m#MIZ0@H+o10X2#xlJb$I#+{i8YJ7)TuD7H-K(Kgz2 z;7|08x4*mpY!B1xsn+Dke99Ra^xW<4zx!?0=KH5#cNB2q@Z7zEd(NNL|M~;V&nJDo z!`5Bzc2l?hds%7r$B^Cc&Axsxzt7>sp{ObP_2l*4ZtJos2X!V>IpZ43ndiT@!$m{hJxUX;4xhK&U9JsyS`N(VSo{Flv zGEj1^SqGIyuk#hH$^;gp8ojCeJQ!M?+^glj3|9(CkcVGU>=ZHC%6M+^8YICgE+}2mgY)Wru+noT#qvvv^%U4UMR-KIF`?;s%`1Y{9!mUU7CDZ;N(6-uR zo9tg%Ge7)3*ZCBMmI)!6Mr*Ct@jz4aiN<@Xt`RpHu3IXWw%oN_tn=r-XzcBE$wdNA z9dTVg`R`}cZU4XemGk*0@k`?@H~fy=(U53qTd?oUTm9au>bjM7vpY{ZaVU0b8O6p< zpP%*qXVR6&)e(G8zJ>q)l~Ty`=+t)QS0BSyzc=mP^0lU=*s4W9XuZ`GKn?BrG|1WW2oMx((pwo$ft{%spzOs^fFTP86I&NQA z`EPq>5z`C5{W@0K@s?BW|7E^->#y1}amAJupme+`c0XVEkMDjssOa(WaPsg{xwG@< z-dDl?SNC6gqEOwpknaK0p-Wjm-Oq3FX#d~-s`}Q9c`X95OZFEZUc2eUAH7#!Lr*!1 zrX(gj3&b}}8^~bx89e<0TY^a=-$gSYXxBC3%Ao&Y7-@p7h z>lc@(nu%h{g^q8$=BE!9?yh>hOh(1uz=!cgh)eCx+#7G_3x51nr!#H+-cC+Gj*~(B zZ(Z;Fn}6zHfD-%BY2n{@NzP&jn)oMqO?uvyxBqkZZ~t!VQ{iN^@Px_w-FA=O{hX*{ z)XJ>CzxwIJC>|GvmoIj1IKKRZ{k?aA^Rw3NThUND}8H3Rk!Ih@3Ud|LL`@LV&EN928&?bSs;*vjId3V>|=dAww^AqbGjo7L)1;_Z$GBH?b-Jx_};wp z1%B-lCW_5mx9+t6*6%fewPnqJnznkYOPDZBP>K6*SSsdz_ut9H{PWvgyx*Iy32BL0 zb>hT+HovXk>%!^^&vD;hc`$6ixw&UUANHg%9N=+DPVVX!|xU4o&2b2_E|^!vH$*(ef$Bn2Mt%7?##IIT)@S4pLNQ_nacJS{-0Ty7+&0& z*>Qcp=fCX0>+2`K-TOYl^!yX%{col7rpdS5PJO-g6#r4-8b=0(OoavW{)XhIb?&OR zKV><$M9=8nJ?SgvJ6EY+c&cC5T{2Cdfk9y|uZ{WHx7l44fBC;v@7}K?b9>za!6jJ} zGvmr@k6iv7zv+Ys-<_c4aho1H^D&&rNz4qrao5=N(!>7?f4STDI<9v;w)g9;j^)4E z6SvnNTmAln#aVU|Q{-~8(Fz}3?)F5!^3V_?{F ztytsHSN-m)8vgIQ|Hg-2Pmc1`0j1oYU(7vKwf!gLbK0+*Z|7!cSkirB(Pp(bAN|A6 zZ|Yj7Yknz8FC=BxF1`2V-|IYcTRyd4lM9TOIM&Y2z_2&?y-{6EEnm!)*T3)A<-e~s z+I+%7X8OwYMdA65-4!+3Pxc@GQNX}3L2RCMh31y)|NB>L|9=1Sr#XGU;$MaAe!s0_ zd-|F``ge3>pNaD`IJj9XiaXM=>#y+PxBK!t)~#C|wEhH#p_i?%ZugnmPx~iiKTvf1 zlf=l-a9n=s-h|pCmxCAB*@V|hH|TZyELr^B0R zQ`&#T?#O-oTj-xvN2Ai^eJ`66*Z*Ii*zZ5_f8)I8)0r3;9;NiZktlt2?!0FI|I4p# z-q|r-a;xLX|LXN!RW+uc{y)sCd%?h<;MljS+;??m|!3zRZ7H7k=aN z=ie)i$E*JDZ~d{5iJ>9I`r@uY7O@?Ezq!Qh%19M28mpS!W%)FCJ-8cK0tp7Rpm)QAmKl#tj%nS@x55INa^$z3s z-@}@8)YeWi1q zX4u6Ev+dUy6|bA>_Ill#fXcfki@VQCzn%A7ME}~hu4LcUt~cI37H42!aC@_0vvZE_ zTETgqM>kD*ax^CG+}2Ye`;=F&-}COk(yp^Rol;95{XCWS@lw!wi;Xq5`z06{3{tAI z!aL?QwJs{Hag6CYBfWO6ReE$-{LM=b0=myi+nR5W+Y_+aNhb4!(BHRr|6F2VIFS83 z^_F>8Lh9lO`_gq8lFuqRURC6BI~|P_QuM)S7lbmzKOk{!FS8{QN?Mix`hl3 zDGQQMU+a2X{OX8Sv#Uwp+3S1G%*np{rBZqmlUQo1P1jlJuV>3TYP+X(A3om2WwJmR*CS1UZaEGc!Gj^gR98fN)hmM?OY*|4?yv2V7^jkE0x z3=JXM!ZU?!Tc<9{tx3Gpbw)Z@Ct`z=c1Ea7r-s@3{Yz_B-Uz>|#Aj)B#4}Hmox$P% z^VD0rTvx2}%n3Mu+QuN(JoQ=W(Pae-gZCzF*0^}|SUs0J&%Vyr3_miDwf9lOUERLzYo_k!*|wH}L1Nv%viUDoX9-C!KYRIY<;;jL zV&TtHStXJ>( z)%I0vVEIySaO8g78y0%@(S*a=e(N3x7%?aqzuCUM+jsLSm)nP156#T>`fXIa?yRfn z{_|WBZ~o8jJNoR;_bAJw+}=?~FSdm$-8pwvhQXmKK)&ks_8pNqbL{+esuSGYL}!}c z3X1yMy(VDgr*0n&v*&xSXC*GShI3yVsod0apyZVUPYTpvSb3LDp40Bzl-n3tTPxR|o zAAPguvQG2TQV@@oW$pu8~@qkqqFVY+REs#6+S;TSkoll zZ~gUL_i68Hkl6-F>QUw$vY%fcl?vXOA$PoT=ERJ%d3%kt6Uz3qA2Qk$ed_A>sJTz} zhA}iKT3y-_WfPeuJhy+AEA#WzM~9|n3q@wl(+s-jcPyRrJ&KVb z?sL;0tG1{`HN+#+%U>i+Gp19F9KqR<5w-X4Jkb3==Y+r`p_2 z`u-^Oka_XGh<^glQ@33E^Wcjy^HDbmp2eCT#o$T6I1b9Q@%4reD`zn4rZ_27WekFB{DE*zF9HnvHvvf zq@`7HX*qVP%AR31F$J&gBo$BCH1Uq}iQlWDk0`pgzsSFPU;zWe-0F)DMWemMIQgHa zmMqSFwB|$h(POJ@+z(#3sQdJD%%h{X!V0HEpJH^7f1-15Z_3OM=VKJ6*;`CjTIl@F zy~}@2_0crzR;T^#6Xvha5z@a}d6Y9xlfB`{yy=lIgkFD2TU~x9K(6GR_0BIRb{g}Va+;taCe13XK*v85$MIW{%C2w25 z*ksAGt8;9*rH?Wm)$Q9};BCopn(xBBQY=RlAC z?@@1~_xQ-HdanDFq2S|Zqq>dNC%GQZ-{`QWqT{pC%SER{zTL4rdhDKyp~vCvQ&zv< zx++)r_^fdLJrTW)Yzo11r_{e;6*KAh`m@-@`22KF@7149mH%6PqvcGOli-O7(Wj=D zbxhXYu~f!^ZO-(}NbPyEV%2voi*QvwKi#u>_2=g{rSC*%x9a?p{1&&m^6R6cs_X9s z-8-lIl;P50$MoelqN0>-CU-qeI{xr}kCs{R^Bl|XJ-t(p+8w^1ZCc>H(|u0FzP^VX z3QOOtj8&}S66?D5kyYn|WX|25O6mWhIZSE4eZ(sElzH#`6{nr2$-dz7XQQ{$t{XN5 zu9h`WKFx_{^wN42KR;JJ z3(wblzBi1a?NiOnJi%32Lef`08}a+3Hy-ooI@?tIzU!AMxACJo@1J+V?`L1VaP+DS z!+P8Jw4YWRYu^QJyprRYvnSi-!Id7E8*g^Zt2At?u>k;?!)J%-U;Gcvhw-V zvWw9XM=K>&T>Jx{E-5~D<4WDkqhcqM#dnLZ*gj=@_v5qK5dsY&SMR?Qt_}4~dc37_ z&UD8^Kf6~K#aSmOhuIx{#P#=1(7#jFYx%C1cl-;xm(BX(*H0tuYu#@@%Oq{x=wnhC z$L6_Z<&sza>vLVF>iksT*7{QIy)$@E#BHs52I9{da2LHe>4h z{bk3NZTaOU=DXyV?o$~jwnyr3zIE?AdN%3tm&&A@%*GKG3;(ZO@#vNQ|J65gjIGus zOmwlj6SObgQF;3mW%I+Tj7n;)|u=vTLf>}oeGfO!t zw>iIw-r^%uR@PM@{eCNxUPaup!l^gXwsxL7x%AM~)0L7-*4?|L`u>EKd6A;Uv80YI zb>5Y(%@zsS;>TxQ=ZQ&64|F~@Z~DsO?z65}7yW%0IcK`#FOk_@UD@{{a=vZ;p*Zf^D{-<)08{bHV7yw3AIJeMX^mB(F^7T$8BS*PN}jp$R)Esu7C z>aJs?(~{DIn$cweKtBFbN0Kxb#k3=7JbVr|BXs@sH zm1oZMLjM`6F**e&0#3`#srI+kJ;3*q1Wrx$? zy8o5#Q{L4sJLayooN&i(WA#a+hx2zj=+qaeaf=8jzZd!J{rvvB+>KK={9x#;UVrso zYwx24Ro<5Gx1QSb*@!zfDfV8@z2huLJeObG^xr8xXW6C)44%7|)@-Zt{#jIbW9KC2 z6E7>`mZh$(SanA)%q~l?cTYcO$L^`eHr;(LF1<7?8WyzJ@IeiHYGjS zbEd1^LZ4Y>#|@j>g}WEMOA}-ada^fcYwn|n$60xr{+lM}O1mZ`E{>RQ?_Rsanww{W zO7^mIH>(=gYCJ91k#fko7xWL*`rbJw`jl{STv~5M*0$IZ-;Et^^Yoct9J-ZRTnh?{ zt$)qAStrPCpCX_6LMZWGw&?!PM(6xCZe8M5p(b`(@zle3hx}`2XKeq)w7pu}J|&Ui z(wk|YSYPQr%>&i@T&E1qp9U4`e_FX+UjJYc<8yd!c4kdM{EKxf@;6B^WbVoRx-0tB z&RNCxDrbJ{Rf@Q&am|0Oc9exa^O7m=4zc<^&j+=b&VOJxYK?s}@4i8S_s@^ZOeLe! z`gEhUx1EpF3X=q>E!n6Ukzv37#+yyo>gFW!r@T{qQhQbRQ9y0`i};E6woj4IiGZ}; zRp#k4FX4`Ne0u2f`5RMi-9O&I{^6GH)3uK>9`X?oNJ4dK#C-1Aune5Aqe>9ftPcmLz^sMq| z+U=adNHv7J!as~S4_ zytdh)hdX)}@+MS-7mI96Z~PUfz1`y8q#xg-WTh2BXXF;Quz-{G^A~x627&=+1vWaNl|INzcn*O zUmyKe$+z)VgxV|%edYv#+1}#+UnGU+%u8ip_Bc_!_Sw~L@#$N-7K8HDU3EUwbwd6T zkPb)pcSA;rb73KwZ?Efx<;W#JVDi|K?v>Rt`S5;*qu(ZG zU7dV_X~7K!4^iIa&o0-F3T@H|<%wkI+_twPiCMu6T+Cfe65ev-l;kD`4Ks!y*VE3% z=VJEUm@(CP0hj6;<{#x-DgisU_Bry&9HJ&>7g|zmY%!OlMXff?c^^1 zxFqdUW%ABq4v*$1J8xtZkp8Z$dR%XxXzJGgGZncTl9&}jOKh_2N;=nS+|HNS#2^%x zlct;Gz}(@v{Nk@es@oR5v4^=;+c&jZZ=-1HZ#ic%hNEl_t6rSa=8xTSE`%g_^ zosi*Qc#O@VC+zvzx@V8lbG&lrr$HT({VCnP?&I1OpLX#Zr!cDQxv@c%RlzNL`PsKS zGdA8#Tw5y+H8H|G_uj2;vDtT3`({gSVi4Ld>bj9pU^cI@)*f;D`pxEN*h-R+u>NNe^#BM7M8Z>eqy$&s^Db!6ElR zf7Kk@h>b6kFEAx&b2(_e&|IY>v*w1)(FLpy8yP1E9Zd_{nz$k9^63Sv6K*`e5n{Z6 z@yIsO&`mEI4|biEf*P`6Wy;07)Ah{4mdwq;s@i)v@U|xZFAx zCek2b^5j|fnu9`{Zu~z7_RxZIP;#=)*vL66w?5$lDA`@8-B?+0Z05o4-mCw#*>oFP z#H7#NVCXpb=_9K?e^d^W*zJ15490*Qh8K6cI9o3s1Qj{^kAi|@?Fy|nlZM3X*&$c# zTh?ma7KeoVmvf&zPJVRkKI`XwS6y-o!;LPc1?95+)8yo~+<2q4@vn3c4G{bncWfSuU}SL1;TDWf;_Ce@f4nj@oFb?Jlv6LBovUOU~ObJNG*8P5NweSj=IO z&A~8{hKR1STXw!~56N*7OI1G%cFDZ8^9}bGuZRxpH_icjG_w5QpQp}uyI!T;VDgCA z_^^k!VMdp4>fZ@nz6TbqNx1Z-RlOB;1B)1B=Vu6xOAdHPa4D}+TWKv5{^9FDP#7R zCx(Gj(~Ol{@(M%SQR|&gP84*Xb!5|H=;CFF6`SpTmc2bZXU(Z%o*0H4SH=sA{hV*^ zdl*eofKla%rJ3=KE+&IBNt4636;~WRmJ@#*sw{iixyqs) z;W;)uF`#@}wWaLV9Noh@X5ZA<^cs%L*|_iqgT%a2<7as?VH-JTinca_BYghRw7TmB z>u>0!JYe$h*qErzb-*B3XU2W2JH}>Va5v86mTH6a2if!(wk=|KF>(EdO=T6}ejh}U z?JK=iYa~FOJINj3bi88uj!h*qq61Ia^29K7ez?)Y%9F)#SjQ|hxP7N+>ThLcafYL8 z4RSxb#eHSo#Rl$AgWF%g&o3UD&R?v(>YF;$FIS?2zSbXxbg&Exz)82?Z0fZ?-wn=# zdQuRt^luZ<{rT_1xf?U4`WqI2b48K%shF=zA3}OW%;FA8IWzq>G8&vo3SL%I5^?m| zPNUz}Q1`y*WIel`=Y5ZF=GR_WOz^7qt!@v^*(NC)ZU8Z`SNpokrZ#ECBN~1vZinpIH@lb& zc(i>}cPDF^F?Q$bIfFxf-Ws#1>`8aKw9;OH%ZAX6CujdH$vJu~=XClDrVD#+6dYqa zV6bMU)%T4O+ZRpgggS9kUX^Qk&-UuuMUuN1w%qSpbb~=+*H>e$u;V*KQ~zs2%wE@Z z_RPO;mKo> z++xRmJW2d*F0qTjBAMC2zovESwHaM!{kq>4LmhD`I>=Ueo3Yu_Qu$nlae;K9^`iL-kamfD6uML z@&rlI;*Fe?Wktu>4qVWw zE_n7*P;_>K>qg@WaH4R0eYkbG8>n_zI_V&{!|mrc0&*C5Hs0`=Au9PWY|7pqh%@+a zsZX6F^D-=i5o8>=Of_(McT)AZ+YZrGa|4K3jn4y5FPwN!^s7KKIF-niNUYKC`Cw`G zty*#q!>F03(``d0F#3V7D&OhaRNHZo+u?H3VM%EQXI-;aQC(#%v)$e@+l?R&0XLwm7A0-Y?t81o zrqAHp?Q0hu$k4WI_l8YXE=SYaw|@0v(+3s2wjabpr}wY8!J+7O@?de>L+*yP8Vo0| z1#j7)kiBGL^K*;CApbjDT7P3oh_7VjMni3VgBnn9tK5F}=+*DXg-6wnd|+L0S5mr* zw_#!2#>kTI9o@bM7TKKq04lX7e9<;r+WoHQcvuMkVR44&K!!=V-Y+M~A5YfKGKCnu zDOW4#R^4$lVQ3 z#AhFqejJeVMwBO>VV3CZmBo@b7}{JUj=Y$7|6OjFm*hTBx}3B!F=yV1F88Le-zIJP zpb}dp`19Y(=Z-DE5i!MG0-`1=M{Z7`n%+^hgl+xFKbS6b>G!YIU}%p1_u~qrm+AK2 z_)>fIZ$XG3jVk3$<@>Hn&iF&Z?U8{aGK~x2G_ioI|kLfzw zC-hX9CmvJ_dMsPF=hHrmxf@qj+Cvl>tvxsYZ%$3#cQftn(3rSE=<=-`V$X@QyG{+jpj``Ga@ev zo=+;C!N>#ZLsTA3`}e6rZ1!HB1hDnf-Zim){itmg_M4B*0MzPE`FM6!jLdm$vuMc! z;1E7)zdFlLrn|RRnOUMiY?rTyG=sB-nd?;7LTxj}&6iFxuz?!mTatn|T@X31ZFXAX z0E3C987T8N`Kn&!Kl-`nY!KAwm%6cE`ge%VZnznDmVxa+m`KBt*o~U8pKe#gZJc=) zVvx@4(_(*h`i>qm>t^I}n7wwzO`cqa=37DAotW+J{KAQZEYJX zm9*z^M&{V3Gcbd?dTq-JFP}TM^#;q?Q{N>IFl^ay(PblJL8dPMSqtIoNt-vX`IZee zZ9`Jc!PAAhX0>6z(c)9kf8~^g4 zLGi&y&r@W=+AX@4A*Q#RdVT^iIW=QO7=7wVchbp-MxFhtz| z1=+!QRymvO=8L{((cLzgClM4Ho!c&jZ1ZkTS}c>m0rtX{tCgF}GYXHUi91U$q~|cG z+?utrc;1yqU1u*tba3jMU4EX|SG|!lB6qgLA%;i)Wo8$#nKyVxnb+Q9(_MFCO)Au+ zUSsXBtiof*&I+&zd_Q~`6t73xW`2$~z0nmUC3y&xM1<;(rZsB6JF1ql@umbsWbN(^ zS)F3(IbsGaj7R=kn$6kBXyCC?bJePj`i+LSbs&!DycQf1y69lo6r*NE9))*Dk2!$C zd9P~d&!{`1Up1U1Kz-Lmxq5MbHn2qpo?_-nWcavk9w_VH2#G0PFXk`zj~$}u(E1xQ z#Q!>W8=L(w{Fia48J1FlgLo04|c%~(b+<`znk3X+Vp>hA~-u-+%_Y7 zzrgpT%jp|yXDjk3{EH4u<;i21{^iD>UHr%Y_w?TUr`iV27cSLFj-Pcu-tW>{{kOc$ z09@2Wt=RQz)eiC5ve$O;8?=B6%}Jnk(-x2Tmy^n&B0-mTWTu;Hnl*AA=jBOcn6r^_ zf`=~u8H>f98(*$nA#oVuUXRmqS{8GchCUIfn(4@+urE4LM4CbTy4Ai9Q>Gn#rqK)u zi!Hu7T-lL1-wZn#k6gCewum97>G#A(!ck(g8K5dEM?&}vx(UshyJ z4Nnq7p)M#83OKcUuhrfXm0o@6r~){sG*U6O-OE|=IpB2$QEPcRr?MdzX zE1!mi*g}jx)OGgCP5;cDqFZM;@+i!^wn>!rfzUO-`M+nR9aT%%cs5l4ob+Ng&b+?% zX;_FMMAxD<^8+_}?M_PG_SCq8@yJ$iYfCjpW5)e;55uMyO@umg7q^&MR>kh^y3;|P zKM!id?{L|uxhBNqPS>XYQ=zJAHfxDzZ5K`5`gfWm52zmNd^A5a_2QZvUn1XZH|_vO zz?vH(;l9`3_4MBSHlHU6oI5t1jIs4Rtj>RX|3L*df&1WQLrl#2ooeozlQv&Y`Yi)> zYL4F8znja_bG%;L9a8`oPcAo;*6nlNy>>;>?P|#*;I#hKF#9dPiME;bn!fEuplF!o zu4%@gm$!QBx6`vkXaC)twGJ8*HzcLA-yS#BHanCcaTXHP8`iFvbaZ=Krle)ZA)aK0 zLT$5P9iDs!@%vq?R_+XYo%C7gFesuMuEkhZI;Bmyb~MfWumq@5-Ez$!Z`FxQRz(7~ zhYdinwqWbC-^=Iwx@^38$N=P2hP9wBT;^HOK*XAK2~bpAhRm6p;<07BE zId61rnr_$w3gV2ooStjqLK{Ux4;Zis=&!!n#Z({|yKK{4kQ!-;W1wK#vQ2Bf&5VxS zi{z3ZcHf%y=jLtU4>Hof_d+~A`7BQXgZP%RS98{OS|oo~hg!aNw%zshe{<%xpO=(ZdixhGbHJBwnK74p`DNmh(t!zo^bKkN%wx8S9gq%1qZOYAWXD8fz zmz2%LaFp%9>Tg${Ke3JY{9sM?<{;DBRMYpS_bea$!d(+i&_7J!mZ z=1a}=ynF9u$}RLxpIY)pBhXH8%MI-(4BW;?K>gAsdvw?3JYLVkcKF2_pL6p*9nI&P zF_n|CdsBNNUqce}k~!~w#T@qEbmH~p=s-iYl#PGYGB)O?tYCgo)sn>gVy5=-EvIJY z{*dEM5?BnedTrUin7X|NbK{A?)=*OFzmO9o8btrq;xs`Kxb_S>B9NBBvw423#zh@4+ttQ6PU~J~FY~^{w zx24Z!9ou>*cSl>;guLzDv!|{d%+1 z-|{Y*u{(F2%(}li1`J2pE^Pez_4~}aBd2`ZrhvwVoyAgXF08US?!+9B!*KV`(Pb%_zco4MUU# z6_amBVpchD^OsC;bM~5#o7Wt2*=!S@R-b+$=k#>u9}L|B3yy*YUM1geF+QGA+;{pn z%W6H(Czf+oGl%`2-<z zV0ZcuOOKCwbl?da!SKGqZLjaGe4iSsy6Y5Q_FZ-+v75sgu(0 zcO0*fU9ISOI9KaFJzR1i@5_4YCefQj(Ju=64Oj;fJ*W*_D?2Co2 z2eN+WURd*G!wg0d=_OMa7^}a}Yrj~*x?1++o?;89o?Dq4>qGgzEWMN|W|s0N?25~_ zMH4p7TX+8KZ|CU;3oKVlD;imMzkSa)|MMQjJ8=7f2zwhkZ{{PNwBE# z&HT{f+!L$*`11W+9`V9qBV)kDV(j9vG%v)ft>8rgU-)vj<*?` zUD#{-_2x184PJsqO)aOU^q*R2Z=JDmZpugIqii0ha&OCpulqQAjYrE7Lr^Kp74?Sy z6zhV1SAmy1MO`;GzT0B4sW(1_RmtTrsGq|>V`}`V)&$*dMGZ5DJ98(>@ZPN4zVVU3 zqz7-d+^`ehawF@>qJpkg!IkTp%Uu_ZZ(fbIQR(Dy7=->DQui}#WLw3*DG?z_vB zpWo9swP8ZZ9Z=3=KeN?-B6sKXqaq^GOEx}_-MNfCOKwi7?&SFscus=G@0-I?_r-)9 z(pi(B&6Sxny(IsuJa4$+Q_hnYY=W2UQB4R`J9RWwpIb-6%)|5MGTC)8m*chGt&=z$ zqTa%@Wc#8dpA$*Hdt*{|MP@i|bnL3wWOw^Z^l{m~(=#5mOz2iiS^Kx>z@i&Zn?4(L z>j?$rs0HL0=**tGb6I?sj$v1)FNb7NSw!}I(M=kcpC0-w)UB^!cA>F%UC!nHnde$2 z2&U${o;G#d{C7QL_a~KZgDp3^w303!Q$2U#N$J(+GxnV}QENG3`YO1WIqdfLCr(@D z9F-7}&RA=wzW!`!{JrZl_O%F{71mh)yWm2W{^agUoMLG`Q>L%g*z;_SvGw|k6DNPS zRMS;ddB{06?7qYXjqj(AY93+Y?c#NN(4&1kBmab9&7_lF9G?HcMfLonb-QDhgl!CH zPHIl9xH&U>P2P^{9}?9x6Ku_VWDHWGfZPoc}Wlg@Y#u zOxngd_11myEjQ9w&z=$#E33HCHfnfR;CzWnC>`a9-zx^tYIku&@44!wl1cN4pB z8|!=!kzUej8?-Jt=Hyi$3n!0fdBKuAi+`VbRVT9L#vPq6BGOBiB-CzunZNetHSL)h zEdoV;Ws%wTat7L;pEO-Rzi2+V#$5SE^5y?sJZ-0E#gSW?P6AHP~~^V{?Vk(G0r95y=sx$=D0wB4I{)#(XGfr}FU+a%wD!ElUcTuI;+*B(^k2Zrpl4xhu|_iCVrh+&4GV zfkQEKifkC9klwlC-Qoz9`Low*td*U(%WQ!L6 z$)?TSNk&C)b6j~tw;SL761=amMZn3#bNa&9pB7yGr@hl+{n7;iIVM|nDPI3lyRWcC zz)5JD!_2>*izdb?&0VyHr(Ap0gil3|mG6GN*^~d_tx}7?q%B{j>Q%a5NIE~6`&;)E zu`XYpbEk|hzd3dGH`9GJCl1A3o}j*WgX_=9F+1cJ?+M6hd(dNie8-iU*?&at%YhX1 z{t9^^7@`?i6V0L6vLvKz>WzQ8DI2GrIQmDTRqb)N z@0FR!YYOg6|6jLH60|MS>NdC5`sv(NWhWNBS#l%gPFTo(;19o@_n@exhd#x2--s0*s^A8JYQ69=_Zyrey5Wr%cbZ1nsakm{g$-o^-qMo zITTxX6u~unT_-`vz9Hl(0eTG$)VVCMDbN{Z*$ty-4oho^11(P zvMXp;qhV~@y3@>Ix9d+o+Au3gxO5olNjlWA*>eHCiCIiJaHo-hF$Yq|xozO$l>OE=Urd_-x0! zxxeDfi@+qtn`XBQV=pA_ z4;Sl8zr5mx%-ZvYzTt8Pds^=sfaDtm*$%&GIQlJqQ$UP(TZbeO-BsvHS1tO*^)Dq`ODt zT)UDkU4OuTD#&op^Wc(sR<2lNQeXUr8!=CMd~5qoK0akyH+jASNPEe2ht|h!4L9xd zGB&caYntiy{v7(8A5T-G@yGywqe6ek-1 diff --git a/knip.json b/knip.json index 57847c615..c195cf132 100644 --- a/knip.json +++ b/knip.json @@ -2,7 +2,12 @@ "$schema": "https://unpkg.com/knip@5/schema.json", "project": ["js/streamplace/src/**/*.ts"], "entry": ["js/streamplace/src/index.ts"], - "ignoreWorkspaces": ["js/app", "js/desktop", "js/config-react-native-webrtc"], + "ignoreWorkspaces": [ + "js/app", + "js/brand", + "js/desktop", + "js/config-react-native-webrtc" + ], "include": ["unlisted"], "ignore": [ ".*tamagui.config.ts.*", diff --git a/package.json b/package.json index 382467ea6..76599defc 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "check": "knip && pnpm run check:workspaces && git ls-files | xargs prettier --check --ignore-unknown", "check:workspaces": "cd js/app && pnpm run check", "fix": "git ls-files | xargs prettier --write --ignore-unknown", - "prepare": "husky && pnpm --filter @streamplace/i18n compile", + "prepare": "husky && pnpm --filter @streamplace/i18n compile && pnpm --filter @streamplace/brand generate", + "brand": "pnpm --filter @streamplace/brand generate", "build": "pnpm --stream -r run build", "release": "lerna version --force-publish=@streamplace/app", "precommit": "make precommit", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8cee45c45..9c8737718 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -397,6 +397,12 @@ importers: specifier: ~5.9.3 version: 5.9.3 + js/brand: + dependencies: + sharp: + specifier: ^0.34.3 + version: 0.34.5 + js/components: dependencies: '@atproto/api': @@ -2746,12 +2752,6 @@ packages: '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - - '@emnapi/runtime@1.9.0': - resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} - '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} @@ -10850,7 +10850,7 @@ packages: git-raw-commits@3.0.0: resolution: {integrity: sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==} engines: {node: '>=14'} - deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. + deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. hasBin: true git-remote-origin-url@2.0.0: @@ -10860,7 +10860,7 @@ packages: git-semver-tags@5.0.1: resolution: {integrity: sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==} engines: {node: '>=14'} - deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. + deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. hasBin: true git-up@7.0.0: @@ -20186,7 +20186,7 @@ snapshots: '@config-plugins/react-native-webrtc@10.0.0(expo@55.0.6)': dependencies: - expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) '@croct/json5-parser@0.2.2': dependencies: @@ -20339,7 +20339,7 @@ snapshots: fs-extra: 10.1.0 log-symbols: 4.1.0 parse-author: 2.0.0 - semver: 7.7.1 + semver: 7.7.4 transitivePeerDependencies: - bluebird - supports-color @@ -20377,7 +20377,7 @@ snapshots: log-symbols: 4.1.0 node-fetch: 2.7.0(encoding@0.1.13) rechoir: 0.8.0 - semver: 7.7.1 + semver: 7.7.4 source-map-support: 0.5.21 username: 5.1.0 transitivePeerDependencies: @@ -20812,19 +20812,9 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': - dependencies: - tslib: 2.8.1 - - '@emnapi/runtime@1.9.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 - optional: true '@emnapi/wasi-threads@1.0.2': dependencies: @@ -21281,6 +21271,81 @@ snapshots: - typescript - utf-8-validate + '@expo/cli@55.0.16(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(expo-constants@55.0.7(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.3.3))(expo-font@55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(expo@55.0.6)(react-dom@19.2.0(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10)': + dependencies: + '@expo/code-signing-certificates': 0.0.6 + '@expo/config': 55.0.8(typescript@5.3.3) + '@expo/config-plugins': 55.0.6 + '@expo/devcert': 1.2.1 + '@expo/env': 2.1.1 + '@expo/image-utils': 0.8.12 + '@expo/json-file': 10.0.12 + '@expo/log-box': 55.0.7(@expo/dom-webview@55.0.3)(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + '@expo/metro': 54.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@expo/metro-config': 55.0.9(bufferutil@4.0.8)(expo@55.0.6)(typescript@5.3.3)(utf-8-validate@5.0.10) + '@expo/osascript': 2.4.2 + '@expo/package-manager': 1.10.3 + '@expo/plist': 0.5.2 + '@expo/prebuild-config': 55.0.8(expo@55.0.6)(typescript@5.3.3) + '@expo/require-utils': 55.0.2(typescript@5.3.3) + '@expo/router-server': 55.0.10(@expo/metro-runtime@55.0.6)(expo-constants@55.0.7(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.3.3))(expo-font@55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(expo-server@55.0.6)(expo@55.0.6)(react-dom@19.2.0(react@19.2.4))(react@19.2.4) + '@expo/schema-utils': 55.0.2 + '@expo/spawn-async': 1.7.2 + '@expo/ws-tunnel': 1.0.6 + '@expo/xcpretty': 4.4.1 + '@react-native/dev-middleware': 0.83.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + accepts: 1.3.8 + arg: 5.0.2 + better-opn: 3.0.2 + bplist-creator: 0.1.0 + bplist-parser: 0.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + compression: 1.8.1 + connect: 3.7.0 + debug: 4.4.3(supports-color@5.5.0) + dnssd-advertise: 1.1.3 + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + expo-server: 55.0.6 + fetch-nodeshim: 0.4.9 + getenv: 2.0.0 + glob: 13.0.6 + lan-network: 0.2.0 + multitars: 0.2.4 + node-forge: 1.3.3 + npm-package-arg: 11.0.3 + ora: 3.4.0 + picomatch: 4.0.3 + pretty-format: 29.7.0 + progress: 2.0.3 + prompts: 2.4.2 + resolve-from: 5.0.0 + semver: 7.7.4 + send: 0.19.2 + slugify: 1.6.6 + source-map-support: 0.5.21 + stacktrace-parser: 0.1.11 + structured-headers: 0.4.1 + terminal-link: 2.1.1 + toqr: 0.1.1 + wrap-ansi: 7.0.0 + ws: 8.19.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + zod: 3.25.76 + optionalDependencies: + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@expo/dom-webview' + - '@expo/metro-runtime' + - bufferutil + - expo-constants + - expo-font + - react + - react-dom + - react-server-dom-webpack + - supports-color + - typescript + - utf-8-validate + '@expo/code-signing-certificates@0.0.6': dependencies: node-forge: 1.3.3 @@ -21296,7 +21361,7 @@ snapshots: getenv: 2.0.0 glob: 13.0.6 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.4 slugify: 1.6.6 xcode: 3.0.1 xml2js: 0.6.0 @@ -21305,6 +21370,23 @@ snapshots: '@expo/config-types@55.0.5': {} + '@expo/config@55.0.8(typescript@5.3.3)': + dependencies: + '@expo/config-plugins': 55.0.6 + '@expo/config-types': 55.0.5 + '@expo/json-file': 10.0.12 + '@expo/require-utils': 55.0.2(typescript@5.3.3) + deepmerge: 4.3.1 + getenv: 2.0.0 + glob: 13.0.6 + resolve-from: 5.0.0 + resolve-workspace-root: 2.0.0 + semver: 7.7.4 + slugify: 1.6.6 + transitivePeerDependencies: + - supports-color + - typescript + '@expo/config@55.0.8(typescript@5.9.3)': dependencies: '@expo/config-plugins': 55.0.6 @@ -21316,7 +21398,7 @@ snapshots: glob: 13.0.6 resolve-from: 5.0.0 resolve-workspace-root: 2.0.0 - semver: 7.7.1 + semver: 7.7.4 slugify: 1.6.6 transitivePeerDependencies: - supports-color @@ -21336,12 +21418,25 @@ snapshots: react: 19.2.0 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10) + '@expo/devtools@55.0.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)': + dependencies: + chalk: 4.1.2 + optionalDependencies: + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + '@expo/dom-webview@55.0.3(expo@55.0.6)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)': dependencies: expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) react: 19.2.0 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10) + '@expo/dom-webview@55.0.3(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)': + dependencies: + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + '@expo/env@2.1.1': dependencies: chalk: 4.1.2 @@ -21374,13 +21469,21 @@ snapshots: jimp-compact: 0.16.1 parse-png: 2.1.0 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.4 '@expo/json-file@10.0.12': dependencies: '@babel/code-frame': 7.29.0 json5: 2.2.3 + '@expo/local-build-cache-provider@55.0.6(typescript@5.3.3)': + dependencies: + '@expo/config': 55.0.8(typescript@5.3.3) + chalk: 4.1.2 + transitivePeerDependencies: + - supports-color + - typescript + '@expo/local-build-cache-provider@55.0.6(typescript@5.9.3)': dependencies: '@expo/config': 55.0.8(typescript@5.9.3) @@ -21398,6 +21501,44 @@ snapshots: react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10) stacktrace-parser: 0.1.10 + '@expo/log-box@55.0.7(@expo/dom-webview@55.0.3)(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)': + dependencies: + '@expo/dom-webview': 55.0.3(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + anser: 1.4.10 + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + stacktrace-parser: 0.1.10 + + '@expo/metro-config@55.0.9(bufferutil@4.0.8)(expo@55.0.6)(typescript@5.3.3)(utf-8-validate@5.0.10)': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@expo/config': 55.0.8(typescript@5.3.3) + '@expo/env': 2.1.1 + '@expo/json-file': 10.0.12 + '@expo/metro': 54.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@expo/spawn-async': 1.7.2 + browserslist: 4.28.1 + chalk: 4.1.2 + debug: 4.4.3(supports-color@5.5.0) + getenv: 2.0.0 + glob: 13.0.6 + hermes-parser: 0.32.1 + jsc-safe-url: 0.2.4 + lightningcss: 1.31.1 + picomatch: 4.0.3 + postcss: 8.4.47 + resolve-from: 5.0.0 + optionalDependencies: + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate + '@expo/metro-config@55.0.9(bufferutil@4.0.8)(expo@55.0.6)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@babel/code-frame': 7.29.0 @@ -21442,6 +21583,22 @@ snapshots: transitivePeerDependencies: - '@expo/dom-webview' + '@expo/metro-runtime@55.0.6(@expo/dom-webview@55.0.3)(expo@55.0.6)(react-dom@19.2.0(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)': + dependencies: + '@expo/log-box': 55.0.7(@expo/dom-webview@55.0.3)(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + anser: 1.4.10 + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + pretty-format: 29.7.0 + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.20 + optionalDependencies: + react-dom: 19.2.0(react@19.2.4) + transitivePeerDependencies: + - '@expo/dom-webview' + optional: true + '@expo/metro@54.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: metro: 0.83.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -21482,6 +21639,23 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 + '@expo/prebuild-config@55.0.8(expo@55.0.6)(typescript@5.3.3)': + dependencies: + '@expo/config': 55.0.8(typescript@5.3.3) + '@expo/config-plugins': 55.0.6 + '@expo/config-types': 55.0.5 + '@expo/image-utils': 0.8.12 + '@expo/json-file': 10.0.12 + '@react-native/normalize-colors': 0.83.2 + debug: 4.4.3(supports-color@5.5.0) + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + resolve-from: 5.0.0 + semver: 7.7.4 + xml2js: 0.6.0 + transitivePeerDependencies: + - supports-color + - typescript + '@expo/prebuild-config@55.0.8(expo@55.0.6)(typescript@5.9.3)': dependencies: '@expo/config': 55.0.8(typescript@5.9.3) @@ -21493,12 +21667,22 @@ snapshots: debug: 4.4.3(supports-color@5.5.0) expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.4 xml2js: 0.6.0 transitivePeerDependencies: - supports-color - typescript + '@expo/require-utils@55.0.2(typescript@5.3.3)': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/core': 7.29.0 + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + '@expo/require-utils@55.0.2(typescript@5.9.3)': dependencies: '@babel/code-frame': 7.29.0 @@ -21523,6 +21707,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@expo/router-server@55.0.10(@expo/metro-runtime@55.0.6)(expo-constants@55.0.7(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.3.3))(expo-font@55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(expo-server@55.0.6)(expo@55.0.6)(react-dom@19.2.0(react@19.2.4))(react@19.2.4)': + dependencies: + debug: 4.4.3(supports-color@5.5.0) + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + expo-constants: 55.0.7(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.3.3) + expo-font: 55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + expo-server: 55.0.6 + react: 19.2.4 + optionalDependencies: + '@expo/metro-runtime': 55.0.6(@expo/dom-webview@55.0.3)(expo@55.0.6)(react-dom@19.2.0(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + react-dom: 19.2.0(react@19.2.4) + transitivePeerDependencies: + - supports-color + '@expo/schema-utils@55.0.2': {} '@expo/sdk-runtime-versions@1.0.0': {} @@ -21539,6 +21737,12 @@ snapshots: react: 19.2.0 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10) + '@expo/vector-icons@15.1.1(expo-font@55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)': + dependencies: + expo-font: 55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + '@expo/ws-tunnel@1.0.6': {} '@expo/xcpretty@4.4.1': @@ -22214,7 +22418,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.9.0 + '@emnapi/runtime': 1.9.2 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -22740,13 +22944,13 @@ snapshots: '@napi-rs/wasm-runtime@0.2.4': dependencies: '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 + '@emnapi/runtime': 1.9.2 '@tybys/wasm-util': 0.9.0 '@napi-rs/wasm-runtime@1.1.1': dependencies: '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.9.0 + '@emnapi/runtime': 1.9.2 '@tybys/wasm-util': 0.10.1 optional: true @@ -23602,7 +23806,7 @@ snapshots: metro: 0.83.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) metro-config: 0.83.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) metro-core: 0.83.5 - semver: 7.7.1 + semver: 7.7.4 transitivePeerDependencies: - bufferutil - supports-color @@ -27111,7 +27315,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.29.7 - expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@babel/core' - supports-color @@ -29295,6 +29499,17 @@ snapshots: - supports-color - typescript + expo-asset@55.0.8(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3): + dependencies: + '@expo/image-utils': 0.8.12 + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + expo-constants: 55.0.7(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.3.3) + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - supports-color + - typescript + expo-build-properties@55.0.9(expo@55.0.6): dependencies: '@expo/schema-utils': 55.0.2 @@ -29312,6 +29527,16 @@ snapshots: - supports-color - typescript + expo-constants@55.0.7(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.3.3): + dependencies: + '@expo/config': 55.0.8(typescript@5.3.3) + '@expo/env': 2.1.1 + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - supports-color + - typescript + expo-crypto@55.0.9(expo@55.0.6): dependencies: expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) @@ -29358,6 +29583,11 @@ snapshots: expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10) + expo-file-system@55.0.10(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10)): + dependencies: + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + expo-font@55.0.4(expo@55.0.6)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0): dependencies: expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) @@ -29365,6 +29595,13 @@ snapshots: react: 19.2.0 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10) + expo-font@55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4): + dependencies: + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + fontfaceobserver: 2.3.0 + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + expo-image@55.0.6(expo@55.0.6)(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0): dependencies: expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) @@ -29381,6 +29618,11 @@ snapshots: expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3)(utf-8-validate@5.0.10) react: 19.2.0 + expo-keep-awake@55.0.4(expo@55.0.6)(react@19.2.4): + dependencies: + expo: 55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + react: 19.2.4 + expo-linking@55.0.7(expo@55.0.6)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3): dependencies: expo-constants: 55.0.7(expo@55.0.6)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(typescript@5.9.3) @@ -29407,6 +29649,16 @@ snapshots: - supports-color - typescript + expo-modules-autolinking@55.0.9(typescript@5.3.3): + dependencies: + '@expo/require-utils': 55.0.2(typescript@5.3.3) + '@expo/spawn-async': 1.7.2 + chalk: 4.1.2 + commander: 7.2.0 + transitivePeerDependencies: + - supports-color + - typescript + expo-modules-autolinking@55.0.9(typescript@5.9.3): dependencies: '@expo/require-utils': 55.0.2(typescript@5.9.3) @@ -29423,6 +29675,12 @@ snapshots: react: 19.2.0 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10) + expo-modules-core@55.0.15(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4): + dependencies: + invariant: 2.2.4 + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + expo-notifications@55.0.12(expo@55.0.6)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(typescript@5.9.3): dependencies: '@expo/image-utils': 0.8.12 @@ -29557,6 +29815,48 @@ snapshots: - typescript - utf-8-validate + expo@55.0.6(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.4))(react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10): + dependencies: + '@babel/runtime': 7.29.7 + '@expo/cli': 55.0.16(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.6)(bufferutil@4.0.8)(expo-constants@55.0.7(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.3.3))(expo-font@55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(expo@55.0.6)(react-dom@19.2.0(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3)(utf-8-validate@5.0.10) + '@expo/config': 55.0.8(typescript@5.3.3) + '@expo/config-plugins': 55.0.6 + '@expo/devtools': 55.0.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + '@expo/fingerprint': 0.16.6 + '@expo/local-build-cache-provider': 55.0.6(typescript@5.3.3) + '@expo/log-box': 55.0.7(@expo/dom-webview@55.0.3)(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + '@expo/metro': 54.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@expo/metro-config': 55.0.9(bufferutil@4.0.8)(expo@55.0.6)(typescript@5.3.3)(utf-8-validate@5.0.10) + '@expo/vector-icons': 15.1.1(expo-font@55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + '@ungap/structured-clone': 1.3.0 + babel-preset-expo: 55.0.11(@babel/core@7.29.0)(@babel/runtime@7.29.7)(expo@55.0.6)(react-refresh@0.14.2) + expo-asset: 55.0.8(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.3.3) + expo-constants: 55.0.7(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.3.3) + expo-file-system: 55.0.10(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10)) + expo-font: 55.0.4(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + expo-keep-awake: 55.0.4(expo@55.0.6)(react@19.2.4) + expo-modules-autolinking: 55.0.9(typescript@5.3.3) + expo-modules-core: 55.0.15(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + pretty-format: 29.7.0 + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + react-refresh: 0.14.2 + whatwg-url-minimum: 0.1.1 + optionalDependencies: + '@expo/dom-webview': 55.0.3(expo@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + '@expo/metro-runtime': 55.0.6(@expo/dom-webview@55.0.3)(expo@55.0.6)(react-dom@19.2.0(react@19.2.4))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + react-native-webview: 13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - expo-router + - expo-widgets + - react-dom + - react-server-dom-webpack + - supports-color + - typescript + - utf-8-validate + exponential-backoff@3.1.1: {} exponential-backoff@3.1.3: {} @@ -32129,7 +32429,7 @@ snapshots: lightningcss@1.31.1: dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.2 optionalDependencies: lightningcss-android-arm64: 1.31.1 lightningcss-darwin-arm64: 1.31.1 @@ -34709,7 +35009,7 @@ snapshots: prebuild-install@7.1.3: dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.2 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 @@ -35127,6 +35427,12 @@ snapshots: react: 19.2.0 scheduler: 0.27.0 + react-dom@19.2.0(react@19.2.4): + dependencies: + react: 19.2.4 + scheduler: 0.27.0 + optional: true + react-freeze@1.0.4(react@19.2.0): dependencies: react: 19.2.0 @@ -35299,6 +35605,14 @@ snapshots: react: 19.2.0 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10) + react-native-webview@13.16.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4): + dependencies: + escape-string-regexp: 4.0.0 + invariant: 2.2.4 + react: 19.2.4 + react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10) + optional: true + react-native-worklets@0.7.4(@babel/core@7.29.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0): dependencies: '@babel/core': 7.29.0 diff --git a/streamplace-logo.svg b/streamplace-logo.svg deleted file mode 100644 index 388b05e74..000000000 --- a/streamplace-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file