40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
/* =============================================================================
|
|
* D03_PlanAnalysis_UI_SatLight.ts
|
|
* D03 위성 바탕 밝기(요구 475) — 노선 선 대비를 위해 위성을 조금 어둡게 · 사용자가 범례에서 조절.
|
|
* 값 = 밝기 상한(0.4~1) · 계정 화면 취향으로 기억. 칠하기 = `D03_PlanAnalysis_UI_MapGl` `setSatelliteLight`.
|
|
* ========================================================================== */
|
|
|
|
import { createSlider } from "@ui/ui_template_input";
|
|
import { readByKey, writeByKey } from "../A00_Common/b_page_state";
|
|
|
|
const PREF_KEY = "aislo:pref:d03.satellite-light";
|
|
export const SAT_LIGHT_MIN = 0.4;
|
|
export const SAT_LIGHT_MAX = 1;
|
|
export const SAT_LIGHT_DEFAULT = 0.8;
|
|
|
|
/** 기억한 밝기 — 없거나 깨지면 처음 값. */
|
|
export function readSatLight(): number {
|
|
const value = Number(readByKey(PREF_KEY));
|
|
return readByKey(PREF_KEY) !== null && value >= SAT_LIGHT_MIN && value <= SAT_LIGHT_MAX
|
|
? value
|
|
: SAT_LIGHT_DEFAULT;
|
|
}
|
|
|
|
/** 범례 「위성 밝기」 칸 — 움직이면 바로 `onChange` · 기억. */
|
|
export function createSatLightRow(value: number, onChange: (value: number) => void): HTMLElement {
|
|
const { root, input } = createSlider({
|
|
label: "위성 밝기",
|
|
min: SAT_LIGHT_MIN,
|
|
max: SAT_LIGHT_MAX,
|
|
step: 0.05,
|
|
value,
|
|
format: (v) => `${Math.round(v * 100)} %`,
|
|
onInput: (v) => {
|
|
writeByKey(PREF_KEY, String(v));
|
|
onChange(v);
|
|
},
|
|
});
|
|
input.dataset.role = "satellite-light";
|
|
return root;
|
|
}
|