feat: strengthen design skill and refresh all showcases
Some checks failed
ci / build (push) Has been cancelled

This commit is contained in:
Yun Chan 2026-09-12 18:16:33 +09:00
parent 69e5cc1efd
commit e09d4efb1c
257 changed files with 8196 additions and 2374 deletions

View file

@ -105,7 +105,7 @@
clearRadioError("areaKind", "area-kind-error");
if (getInputValue("demoName").length < 2) {
invalid.push(setFieldError("demo-name", "demo-name-error", "예시 호칭을 두 글자 이상 입력해 주세요."));
invalid.push(setFieldError("demo-name", "demo-name-error", "확인용 호칭을 두 글자 이상 입력해 주세요."));
}
if (!getSelectValue("region")) {
invalid.push(setFieldError("region", "region-error", "희망 지역을 골라 주세요."));
@ -240,14 +240,14 @@
if (!(consent instanceof HTMLInputElement) || !consent.checked) {
consent?.setAttribute("aria-invalid", "true");
consent?.setAttribute("aria-describedby", "demo-consent-error");
if (consentError) consentError.textContent = "문의 체험 안내를 확인해 주세요.";
if (consentError) consentError.textContent = "개인정보를 입력하지 않았는지 확인해 주세요.";
consent?.focus();
return;
}
if (submitButton instanceof HTMLButtonElement) {
submitButton.disabled = true;
submitButton.textContent = "화면 상태 확인 중";
submitButton.textContent = "입력한 조건 확인 중";
}
if (submitState) submitState.textContent = "";
@ -258,7 +258,7 @@
submitButton.textContent = "다시 시도하기";
}
if (submitState) {
submitState.textContent = "지금은 문의 준비 상태를 바꾸지 못했어요. 입력 내용은 화면에 그대로 두었습니다.";
submitState.textContent = "지금은 입력한 조건을 확인할 수 없어요. 입력한 값은 그대로 두었습니다.";
}
return;
}
@ -271,7 +271,7 @@
}
if (submitButton instanceof HTMLButtonElement) {
submitButton.disabled = false;
submitButton.textContent = "문의 준비 마치기";
submitButton.textContent = "입력한 조건 확인하기";
}
}, 450);
});

View file

@ -61,13 +61,10 @@
const summaryStoreState = document.querySelector("#summary-store-state");
const summaryAllergens = document.querySelector("#summary-allergens");
const summaryTotal = document.querySelector("#summary-total");
const saveButton = document.querySelector("#save-builder");
const saveStatus = document.querySelector("#save-status");
const stores = {
seongsu: { label: "성수 예시점", state: "영업 중 예시", available: true },
yeonnam: { label: "연남 예시점", state: "오늘 영업 종료 예시", available: false },
mullae: { label: "문래 예시점", state: "오늘은 쉬어요", available: false },
seongsu: { label: "성수점", state: "영업 중" },
yeonnam: { label: "연남점", state: "오늘 영업 종료" },
mullae: { label: "문래점", state: "오늘 휴무" },
};
const fieldValue = (name) => {
@ -134,16 +131,6 @@
if (summaryAllergens) summaryAllergens.textContent = allergens.join(", ");
if (summaryTotal) summaryTotal.textContent = formatWon(builderPrice({ flavor, patty, cheese, serving }));
if (saveButton) {
saveButton.disabled = soldOut || !store.available;
if (soldOut) saveButton.textContent = "오늘 품절 예시";
else if (!store.available) saveButton.textContent = "다른 매장을 골라 주세요";
else saveButton.textContent = "선택 내용 저장";
}
if (saveStatus) {
saveStatus.textContent = "";
saveStatus.classList.remove("is-error");
}
};
builder?.addEventListener("change", updateBuilder);
@ -169,20 +156,6 @@
button.addEventListener("click", () => applyPreset(button.dataset.preset || "double"));
});
saveButton?.addEventListener("click", () => {
if (!builder || !saveStatus) return;
const snapshot = Object.fromEntries(new FormData(builder).entries());
try {
if (fixture === "save-fail") throw new Error("fixture");
sessionStorage.setItem("griddle-club-demo-selection", JSON.stringify(snapshot));
saveStatus.classList.remove("is-error");
saveStatus.textContent = "이 기기의 현재 탭에 선택 내용을 남겼어요. 실제 주문으로 전송되지 않습니다.";
} catch {
saveStatus.classList.add("is-error");
saveStatus.textContent = "선택 내용을 남기지 못했어요. 고른 내용은 화면에 그대로 두었습니다.";
}
});
const storeCards = [...document.querySelectorAll("[data-store]")];
const mapPins = [...document.querySelectorAll("[data-map-store]")];
const storeSearch = document.querySelector("#store-search");