2b1d7c0b65
The dashboard had several oversized orchestration, component, and CSS files that made product-copy changes and mobile/performance work risky. This refactor preserves behavior while splitting scan terminal CSS, opportunity helpers, future forecast panels, history/detail charts, and probability/model sections into smaller ownership boundaries. Constraint: No user-visible version bump because this batch is architecture and performance cleanup, not a release announcement. Rejected: Rewrite dashboard state management in the same batch | too broad for a safe upload after CSS and component splitting. Confidence: high Scope-risk: moderate Reversibility: clean Directive: Keep new component/CSS boundaries instead of moving product copy back into the large dashboard files. Tested: npm run build; npm run test:business; git diff --check Not-tested: Browser visual smoke test after push
88 lines
2.1 KiB
TypeScript
88 lines
2.1 KiB
TypeScript
export { getWindowPhaseMeta, type PhaseMeta } from "./opportunity-window-phase";
|
|
export { getLocalizedRowText } from "./opportunity-copy";
|
|
export {
|
|
getAiMeta,
|
|
getExclusionReasons,
|
|
getOpportunityStrength,
|
|
getRecommendationReasons,
|
|
getRiskHints,
|
|
getShortAiConclusion,
|
|
} from "./opportunity-ai-meta";
|
|
export {
|
|
getDebDistanceSummary,
|
|
getMetarConflictSummary,
|
|
getModelSupportSummary,
|
|
} from "./opportunity-evidence-summary";
|
|
export type { V4CityForecast, V4TradeDecision } from "./opportunity-v4-types";
|
|
export {
|
|
getForecastContractFit,
|
|
getForecastRangeLabel,
|
|
getPaceDecisionTail,
|
|
getPaceDeviationRead,
|
|
getPaceSignalLabel,
|
|
getV4CityForecast,
|
|
median,
|
|
} from "./opportunity-v4-forecast";
|
|
export {
|
|
getForecastFitMeta,
|
|
getThresholdDecision,
|
|
getV4DecisionLabel,
|
|
getV4TradeDecision,
|
|
} from "./opportunity-v4-decision";
|
|
export {
|
|
getDecisionReasonItems,
|
|
getForecastRiskItems,
|
|
} from "./opportunity-v4-risk";
|
|
export {
|
|
getDetailForRow,
|
|
getDetailViewDate,
|
|
normalizeLookupKey,
|
|
} from "./opportunity-detail";
|
|
export {
|
|
bucketMatchesRow,
|
|
buildOpportunityGroups,
|
|
getBucketDisplayLabel,
|
|
getBucketText,
|
|
getDetailBucketEventProbability,
|
|
type OpportunityGroup,
|
|
} from "./opportunity-groups";
|
|
export {
|
|
formatModelClusterRange,
|
|
formatModelSources,
|
|
getModelSourceSummary,
|
|
} from "./opportunity-model-summary";
|
|
export {
|
|
formatAction,
|
|
formatMinuteSpan,
|
|
formatPercent,
|
|
formatQuoteCents,
|
|
formatTemperatureDelta,
|
|
formatThreshold,
|
|
formatTradeSide,
|
|
formatWindowMinutes,
|
|
normalizeProbability,
|
|
} from "./opportunity-format";
|
|
export {
|
|
extractNumbers,
|
|
getTargetRange,
|
|
normalizeBucketLabel,
|
|
} from "./opportunity-target";
|
|
export {
|
|
formatPeakWindowTiming,
|
|
getMetarGate,
|
|
getMetarObservationContext,
|
|
getObservationSortMinutes,
|
|
firstNonEmptyPoints,
|
|
normalizeObservationPoints,
|
|
type ObservationPoint,
|
|
} from "./opportunity-observation";
|
|
export {
|
|
decodeMetarWeatherToken,
|
|
decodeRawMetarCloud,
|
|
decodeRawMetarVisibility,
|
|
decodeRawMetarWeather,
|
|
formatAirportReportRead,
|
|
formatAirportWeatherRead,
|
|
getAirportWeatherInputs,
|
|
} from "./opportunity-airport-read";
|