| export type GrowthStage = 'SEED' | 'SEEDLING' | 'MATURE'; |
| export type PlantType = 'Indica' | 'Sativa' | 'Hybrid'; |
|
|
| export type NumericTraitKey = 'THC' | 'CBD' | 'Yield' | 'GrowTime'; |
| export type ColorTraitKey = 'LeafColor' | 'BudColor'; |
| export type ColorPattern = 'solid' | 'speckled' | 'split' | 'mosaic' | 'rimmed' | 'polycolor'; |
| export type TraitKey = NumericTraitKey | ColorTraitKey; |
|
|
| export type Rgb = [number, number, number]; |
| export type Hsv = [number, number, number]; |
| export type NumericAlleles = [number, number]; |
|
|
| export type ColorAlleles = { |
| Hue: NumericAlleles; |
| Saturation: NumericAlleles; |
| Value: NumericAlleles; |
| }; |
|
|
| export type Alleles = { |
| THC: NumericAlleles; |
| CBD: NumericAlleles; |
| Yield: NumericAlleles; |
| GrowTime: NumericAlleles; |
| LeafColor: ColorAlleles; |
| BudColor: ColorAlleles; |
| }; |
|
|
| export type Stabilities = Record<TraitKey, number>; |
|
|
| export type SeedProfile = { |
| seedId: string; |
| strainName: string; |
| type: PlantType; |
| alleles: Alleles; |
| stabilities: Stabilities; |
| thc: number; |
| cbd: number; |
| yield: number; |
| growTime: number; |
| budColor: Rgb; |
| leafColor: Rgb; |
| budPalette: Rgb[]; |
| leafPalette: Rgb[]; |
| budPattern: ColorPattern; |
| leafPattern: ColorPattern; |
| baseImageName: string; |
| growthStage: GrowthStage; |
| maturesAt?: string | null; |
| lineage: [string | null, string | null]; |
| description: string; |
| quantity: number; |
| attemptsUsed: number; |
| maxAttempts: number; |
| isStarter: boolean; |
| }; |
|
|
| export type StarterProfile = { |
| name: string; |
| type: PlantType; |
| traits_base: { |
| THC: number; |
| CBD: number; |
| Yield: number; |
| GrowTime: number; |
| }; |
| alleles: Alleles; |
| stabilities: Stabilities; |
| base_image_name: string; |
| description?: string; |
| }; |
|
|
| export type GameState = { |
| schema: 'weedsim.game_state/v1'; |
| seeds: SeedProfile[]; |
| selection: string[]; |
| updatedAt: string; |
| }; |
|
|
| export type TraitVariable = { |
| key: string; |
| label: string; |
| unit: string; |
| min: number; |
| max: number; |
| scale: 'numeric' | 'circular'; |
| }; |
|
|
| export type GermplasmRecord = { |
| germplasmDbId: string; |
| germplasmName: string; |
| germplasmType: PlantType; |
| generation: number; |
| pedigree: string; |
| parents: [string | null, string | null]; |
| isStarter: boolean; |
| stage: GrowthStage; |
| THC: number; |
| CBD: number; |
| Yield: number; |
| GrowTime: number; |
| BudHue: number; |
| LeafHue: number; |
| Stability: number; |
| Volatility: number; |
| Bloom: number; |
| budColor: Rgb; |
| leafColor: Rgb; |
| budPalette: Rgb[]; |
| leafPalette: Rgb[]; |
| budPattern: ColorPattern; |
| leafPattern: ColorPattern; |
| budBloom: { score: number; colorCount: number; hueSpread: number; averageSaturation: number; averageValue: number; muddyStops: number; pattern: ColorPattern }; |
| leafBloom: { score: number; colorCount: number; hueSpread: number; averageSaturation: number; averageValue: number; muddyStops: number; pattern: ColorPattern }; |
| budFamily: string; |
| alleles: Alleles; |
| attemptsUsed: number; |
| maxAttempts: number; |
| canAttempt: boolean; |
| }; |
|
|
| export type LabPayload = { |
| variables: TraitVariable[]; |
| records: GermplasmRecord[]; |
| facets: Record<string, Record<string, number>>; |
| count: number; |
| }; |
|
|
| export type DistributionSummary = { |
| min: number; |
| max: number; |
| mean: number; |
| median: number; |
| values: number[]; |
| }; |
|
|
| export type BloomPredictionSummary = { |
| score: DistributionSummary; |
| volatility: DistributionSummary; |
| colorCount: DistributionSummary; |
| maxColors: number; |
| patterns: Record<ColorPattern, number>; |
| hint: string; |
| }; |
|
|
| export type CrossPrediction = { |
| n: number; |
| parents: [string, string]; |
| THC: DistributionSummary; |
| CBD: DistributionSummary; |
| Yield: DistributionSummary; |
| GrowTime: DistributionSummary; |
| budCloud: Rgb[]; |
| leafCloud: Rgb[]; |
| budBloom: BloomPredictionSummary; |
| leafBloom: BloomPredictionSummary; |
| }; |
|
|
| export type DeckSummary = { |
| accessions: number; |
| byStage: Record<string, number>; |
| byType: Record<string, number>; |
| byGeneration: Record<string, number>; |
| byBudFamily: Record<string, number>; |
| maxGeneration: number; |
| breedableCount: number; |
| growingCount: number; |
| traitAverages: Record<string, number>; |
| gamut: Rgb[]; |
| recentCrosses: Array<{ |
| id: string; |
| name: string; |
| generation: number; |
| pedigree: string; |
| budColor: Rgb; |
| leafColor: Rgb; |
| THC: number; |
| }>; |
| topBloom: Array<{ |
| id: string; |
| name: string; |
| generation: number; |
| pedigree: string; |
| budColor: Rgb; |
| leafColor: Rgb; |
| budPalette: Rgb[]; |
| Bloom: number; |
| Volatility: number; |
| budPattern: ColorPattern; |
| colorCount: number; |
| hueSpread: number; |
| THC: number; |
| }>; |
| breedable: Array<{ id: string; name: string }>; |
| }; |
|
|
|
|
|
|