${[ aspects.length === 1 ? this.t('1 aspect') : aspects.length > 1 ? this.t('{{count}} aspects', { count: aspects.length }) : '', reference, ] .filter(Boolean) .join(' · ')}
` : nothing } ${typeof timezone === 'number' && Number.isFinite(timezone) ? html`${this.t('Chart patterns')}
${[...patterns] .sort( (a, b) => (PATTERN_ORDER[a.kind] ?? 9) - (PATTERN_ORDER[b.kind] ?? 9) || (b.tightness ?? 0) - (a.tightness ?? 0), ) .map((p) => this.renderPattern(p))}${provenance(options, this.effectiveLang(), this.translator)}
` : nothing}${m.description.short}
` : nothing} ${m.description?.long && m.description.long !== m.description.short ? html`${m.description.long}
` : nothing} ${renderKeywordChips(m.keywords)}`; } private renderTransit( t: NonNullable< NonNullable< CalculateTransitAspectsResponse['aspects'] >[number]['transitInterpretation'] >, ) { return renderReadingDetail(t, this.translator); } /** * One detected configuration. The apex (the focal planet a Kite, T-Square, or Yod discharges through) leads the chip row and is called out, since a T-Square read without its apex is not a reading. `element` and `modality` only appear on the kinds whose meaning pivots on them, so they are tags rather than columns. */ private renderPattern(p: PatternEntry) { const planets = p.planets ?? []; const ordered = p.apex ? [...planets].sort((a, b) => Number(b === p.apex) - Number(a === p.apex)) : planets; return html`${p.interpretation}
` : nothing }