# Changelog

이 프로젝트의 모든 주요 변경사항을 기록합니다.
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.

## [1.0.3] - 2026-07-14

### Fixed

- 권한 관리 화면의 새로고침 버튼이 다른 관리자 화면의 새로고침 버튼과 모양이 달랐던 문제를 수정했습니다.
- 환경설정 화면의 탭 줄과 게시판 설정 화면의 상단 고정 영역이 화면 여백과 어긋나 가로로 밀려 보일 수 있던 문제를 정리했습니다.

## [1.0.2] - 2026-07-09

### Added

- 환경설정 > 보안 화면에 "내부 네트워크 주소 호출 허용" 항목이 추가되었습니다. 예약 작업의 주소 호출이나 외부 API 연동에서 사내 서버 주소를 사용해야 할 때 켜면 됩니다. 기본값은 꺼짐입니다.

- 레이아웃 편집기에서 관리자 기본 레이아웃을 편집할 때 "모바일 메뉴 펼침" 상태를 선택할 수 있습니다 — 모바일 메뉴 안의 언어·통화·배송국가 버튼을 캔버스에서 바로 편집할 수 있습니다.

### Changed

- 모바일에서 언어·통화·배송국가 선택을 관리자 메뉴 안으로 옮기고, 사용자 화면과 동일하게 가로로 나열된 버튼 형태로 통일했습니다. 상단 헤더에는 테마 전환과 알림만 남습니다.
- 모바일 메뉴 안의 언어와 통화·배송국가가 각각 접었다 펼치는 항목으로 바뀌어, 메뉴를 열었을 때 곧바로 관리자 메뉴가 보입니다. 접혀 있을 때도 현재 선택된 언어와 통화·배송국가가 표시되므로 펼치지 않아도 확인할 수 있으며, 두 항목은 서로 독립적으로 여닫힙니다.

### Fixed

- 모바일에서 상단 헤더의 통화 선택 버튼이 화면 밖으로 잘려 보이던 문제를 수정했습니다. 화면이 좁을수록 심해져 320px 기기에서는 대부분이 가려졌습니다.
- 관리자 메뉴에서 언어를 선택해도 언어가 바뀌지 않던 문제를 수정했습니다. 로그인·비밀번호 찾기·비밀번호 재설정 화면의 언어 선택도 함께 정리했습니다.
- 좁은 화면에서 팝업 창이 화면 좌우에 빈틈 없이 붙어 보이던 문제를 수정했습니다 — 이제 양옆에 여백이 생깁니다.
- 좁은 화면에서 목록 아래 페이지 번호가 한 줄에 다 들어가지 않아 화면 밖으로 넘치던 문제를 수정했습니다 — 이제 여러 줄로 나뉘어 표시됩니다.
- 좁은 화면에서 다국어 입력란의 언어 탭(한국어·English·日本語)이 한 줄에 다 들어가지 않아 넘치던 문제를 수정했습니다. 상품·게시판·페이지 등 다국어 입력이 있는 모든 화면에 적용됩니다.

## [1.0.1] - 2026-07-08

### Added

- 관리자 사이드바 하단에 "사이트 보기" 링크를 추가했습니다 — 클릭하면 사용자 사이트 홈이 새 탭으로 열립니다.

### Changed

- 첨부파일을 허용 개수보다 많이 선택했을 때의 안내 문구를 "이미지는 최대 N장까지…"에서 "최대 N개까지 첨부할 수 있습니다"로 바꿔, 이미지뿐 아니라 문서 등 일반 파일을 올리는 화면에서도 자연스럽게 표시되도록 했습니다.

### Fixed

- 모바일에서 관리자 메뉴를 열면 메뉴 상단 일부가 상단 헤더에 가려 잘려 보이던 문제를 수정했습니다 — 이제 메뉴가 헤더 아래에서 시작해 첫 항목까지 온전히 보입니다.

## [1.0.0] - 2026-07-01

### Added

- 관리자 화면 상단 헤더에 언어 선택 버튼을 추가했습니다 — 이전에는 프로필 메뉴 안에서만 언어를 바꿀 수 있었으나, 이제 헤더에서 바로 전환할 수 있습니다. 이커머스 모듈이 설치되어 있으면 표시 통화 선택 버튼도 헤더에 함께 나타나, 관리자 화면의 가격 표시 통화를 전환할 수 있습니다.
- 관리자 대시보드의 이커머스 영역(상단 바로가기 버튼과 판매 현황·리뷰·문의 위젯)을 이커머스 모듈이 직접 채우도록 바꿨습니다 — 모듈을 켜면 나타나고 끄면 사라지며, 기존에 고정으로 박혀 있던 예시 숫자·문구가 실제 데이터로 대체됩니다.
- 대시보드 하단 "시스템 리소스(CPU·메모리·디스크)" 위젯을 "최근 알림"(최근 발송된 알림 이력) 위젯으로 교체했습니다.
- 대시보드 하단의 최근 알림·최근 활동·시스템 알림·모듈/플러그인/템플릿 상태 카드를 통일된 회색 카드 스타일로 정리하고, 상단의 시스템 상태 배지를 정리했습니다.
- 대시보드 상단 배지에 설치된 템플릿 수와 활성 언어팩 수를 추가로 표시합니다 (각각 활성/전체).
- 막대 그래프에서 단위·규모가 크게 다른 두 값(예: 판매 수량과 매출액)을 좌·우 양쪽 축으로 나눠 그릴 수 있게 했습니다 — 한쪽 값이 너무 작아 막대가 보이지 않던 문제를 해결합니다.
- 관리자 화면 좌측 메뉴를 상단 메뉴 버튼으로 접고 펼 수 있습니다 — 접으면 본문 영역이 넓어지고, 접은 상태는 새로고침 후에도 유지됩니다.
- 템플릿 정보 모달에 해당 템플릿이 사용하는 외부 리소스(외부 스타일·웹폰트·스크립트) 목록을 표시.

#### 레이아웃 편집기

- 사이드바·푸터·테마 전환 버튼·알림 센터·표 컬럼 선택기·섹션 머리(제목+설명) 컴포넌트를 클릭해 선택하고 속성을 편집할 수 있게 했습니다 — 이전에는 이 컴포넌트들을 클릭해도 선택되지 않거나 속성 편집 패널이 열리지 않았습니다. 섹션 머리 컴포넌트는 요소 추가 팔레트에서 새로 꺼내 화면에 배치할 수도 있습니다.
- 메뉴 아이콘 선택(IconSelect)의 옵션 목록 편집이 내장 기본 아이콘 20종을 시작 목록으로 보여주도록 했습니다 — 이전에는 빈 목록에서 시작해 항목을 1개 추가하면 기본 아이콘 전체가 사라지고 그 1개만 남았습니다. 이제 추가/삭제/순서 변경이 기본 목록 위에서 이루어집니다.
- 페이지 헤더의 "액션 추가" 목록 편집을 제거했습니다 — 페이지 헤더는 직접 배치된 버튼이 있으면 액션 목록을 표시하지 않는데, 모든 화면이 직접 배치 방식을 사용하고 있어 이 편집은 어떤 화면에도 반영되지 않는 항목이었습니다(혼란 방지). 페이지 헤더의 제목·설명 편집과 직접 배치된 버튼의 편집은 종전과 동일합니다.
- 폼 속성 편집을 개선했습니다 — "입력 상자 추가"가 기존 폼 항목과 동일한 "라벨 + 입력칸" 묶음을 추가하고(이전에는 라벨 없는 입력칸 단독이 추가되면서 그 자리가 "컴포넌트 로드 실패"로 깨졌습니다), 각 폼 항목 행에서 라벨과 안내 문구(입력칸의 회색 안내 글)를 각각 한국어/영어/일본어로 편집할 수 있습니다.
- 이 템플릿의 컴포넌트(컨테이너·카드·차트·폼 필드·레이아웃 박스 등)를 드래그로 옮기고 다른 컨테이너 안팎으로 재배치할 수 있도록 편집 표식 연동을 추가했습니다. 이전에는 일부 컨테이너 계열 요소가 편집기에서 선택·드래그 대상으로 잡히지 않아, 그 안의 위젯을 바깥으로 빼낼 수 없었습니다. 관리자 화면(실제 운영 화면)의 모양·동작은 종전과 100% 동일합니다.
- 속성 편집 지원을 추가했습니다 — 요소를 선택하면 정렬·글자 크기·색상·여백·크기 등을 친화적인 컨트롤로 조정하고, 모서리를 드래그해 크기를 직접 바꿀 수 있습니다. 목록/폼 화면의 데이터 있음·없음·검증 실패·저장 중 같은 상태를 미리보기로 전환해 볼 수 있고, 관리자 메뉴·회원·모듈/플러그인 목록 등이 샘플 데이터로 실제와 가깝게 표시됩니다.
- 속성 편집에 스타일 항목을 더 추가했습니다 — 글자가 없는 상자 요소에도 글자색을 지정할 수 있고, 그림자·테두리 모양과 색·모서리 둥글기·투명도·스크롤(자동/숨김/가로·세로 자동)을 설정할 수 있습니다. 글자에는 굵게·기울임·밑줄과 양쪽 정렬, 줄바꿈 설정을 추가했습니다. 표시 권한을 지정할 때 실제 사용 가능한 권한만 목록에 나오고, 각 권한의 식별자를 함께 보여 줘 어떤 권한인지 분명히 알 수 있습니다.
- 화면 상태 미리보기를 더 많은 관리자 화면으로 넓혔습니다 — 환경설정의 모든 탭(메일·업로드·SEO·보안·드라이버·고급·알림 정의·언어팩·본인인증·정보), 역할 폼의 신규/수정/검증 실패, 로그인 실패, 비밀번호 찾기 완료, 비밀번호 재설정의 토큰 정상/오류·검증 실패·완료, 본인인증 단계, 템플릿 목록의 사용자/관리자 탭 화면을 편집기에서 전환해 미리볼 수 있습니다.

### Changed

#### 목록·표 표시

- 목록 표에서 날짜순(또는 특정 항목순) 정렬 시, 값이 비어 있는 행이 정렬 방향과 무관하게 목록 맨 앞으로 끼어들던 문제를 수정했습니다 — 예를 들어 페이지 관리에서 "오래된 발행순"으로 정렬하면 발행일이 없는 항목이 맨 앞으로 올라오던 현상이 사라지고, 서버가 정한 정렬 순서대로 표시됩니다.
- 데이터 표(목록 표)의 각 칸 내용을 위쪽 기준으로 정렬하도록 바꿨습니다 — 한 칸에 여러 줄(예: 가격 아래 외화 환산값)이 들어가 칸 높이가 길어져도, 같은 행의 다른 입력칸·내용이 첫 줄 기준으로 가지런히 정렬됩니다.

#### 화면 외형 정합

- 관리자 카드의 제목·설명과 본문 사이 간격을 한 단계 좁혀 카드 내부가 더 컴팩트하게 보이도록 조정했습니다 — 모든 관리자 카드 (환경설정 / 게시판 폼 / 페이지 폼 / 역할 폼 / 회원 폼 등) 에 일괄 반영됩니다.
- 알림 템플릿 / 본인인증 메시지 정의·템플릿 / 언어팩 설치 모달의 입력 행에서 라벨과 입력칸 사이에 옅은 회색 분리선과 세로 간격이 끼어 보이던 회귀를 수정했습니다 — 라벨과 입력칸이 한 필드로 시각적으로 응집되어 다른 관리자 모달의 입력 행과 동일한 결로 보입니다.
- 환경설정의 고급·보안·본인인증 탭에서 카드들이 세로로 나열될 때 카드 사이 간격이 의도보다 부풀어 마지막 카드 아래에 빈 공간이 끼어 보이던 회귀를 수정했습니다 — 카드 묶음 사이 간격이 다른 관리자 화면과 동일한 결로 정합됩니다.
- 환경설정 본인인증 탭의 "목적별 프로바이더 매핑" 과 "등록된 프로바이더 상세" 영역에서 같은 식별자가 페이지 검사 시 여러 번 나타나던 회귀를 수정했습니다 (HTML 표준 위반 해소).
- 환경설정 본인인증 탭의 "목적별 프로바이더 매핑"에서 저장 검증에 실패하면 문제가 된 입력칸이 빨갛게 강조되고 그 아래에 사유가 표시되도록 보완했습니다 — 기본 설정 영역과 동일하게 어느 항목을 고쳐야 하는지 한눈에 확인할 수 있습니다.
- 회원 등록 / 수정 화면을 환경설정 화면과 동일한 시각 결로 정합했습니다 — 화면 폭에 따라 페이지 좌우 여백이 단계적으로 커지고, 상단 탭 내비의 풀-bleed 영역이 페이지 여백 분기와 정확히 맞춰지고, 각 섹션의 헤더가 아이콘 없이 제목만 표시되며, 폼 행 묶음 사이에 옅은 회색 분리선이 자동 적용됩니다. 다른 관리자 화면과 같은 결로 통일됩니다.
- 카드 제목 우측에 부속 요소(예: 확장 출처 배지) 를 정렬하는 표준 시맨틱을 추가 — 제목과 부속 요소를 한 줄에 배치하면서 부속 요소만 우측 끝으로 정렬할 수 있도록 정리.
- 회원 등록 / 수정 화면에서 상단 탭 내비와 본문 콘텐츠가 너무 붙어 보이던 회귀를 수정했습니다 — 탭 내비와 첫 카드 사이에 표준 상단 여백이 자동으로 들어가 환경설정 화면과 동일한 결로 통일됩니다.
- 역할 등록 / 수정 화면의 카드 헤더 정렬과 기본정보 카드 본문의 폼 행 묶음을 다른 관리자 화면과 동일한 결로 정합했습니다 — 헤더 아이콘이 제거되고, 권한 설정 카드의 선택 카운트 배지가 카드 제목 우측 끝으로 정렬되며, 기본정보 카드의 항목 사이에 옅은 회색 분리선이 자동으로 적용됩니다.
- 관리자 화면 전반의 입력 박스·드롭다운·텍스트 영역·태그 입력·상태 배지 외형을 표준화했습니다 — 패딩·배경·모서리·포커스 효과가 화면마다 다르게 보이던 차이가 사라지고, 다국어 입력 탭, 비활성·읽기전용 입력, 옵션 없는 드롭다운까지 동일한 모양으로 표시됩니다. 잠긴 드롭다운이 일반 드롭다운보다 작게 보이던 현상과, 식별자·참조용 읽기전용 입력은 옅은 회색 글자로 "잠긴 정보"임을 구분하도록 정리했습니다.
- 알림 발송 이력 / 본인인증 이력 페이지의 상단 탭을 다른 관리자 화면과 동일한 표준 탭으로 통일 — 색상·모양이 일관되고, 스크롤 시 상단 고정과 모바일 드롭다운 자동 전환이 함께 적용됩니다.
- 사용자 등록/수정·역할 등록/수정 화면의 상단 영역을 재배치 — 페이지 제목은 일반 흐름, 탭만 상단 고정, 취소·저장 버튼은 화면 하단에 항상 고정되어, 긴 폼을 스크롤하는 동안에도 저장 버튼이 항상 보입니다.
- 관리자 화면 전반(환경설정·사용자 폼·역할 폼·본인인증 정책·모달·대시보드·목록 패널)의 카드·입력 칸·라벨·보조 설명·에러 메시지·본문 텍스트·배지·아이콘 버튼·보조 버튼·구분선·여백·2단 그리드 모양을 한 가지 기준으로 통일했습니다 — 화면마다 조금씩 다르게 보이던 카드 모양·padding·간격, 입력 칸 테두리·배경·포커스, 입력 행 사이 구분선, 글자 톤, 새로고침 등 아이콘 버튼·보조 버튼의 다크 모드 외형·포커스 링이 모든 관리자 화면(코어·모듈·플러그인 공통)에서 동일한 결로 표시됩니다. 입력 칸·드롭다운에 외형 클래스가 중복 적용되던 결함과, 입력 행 묶음의 간격이 어색하게 벌어지던 회귀도 함께 해소되었습니다.

#### 대시보드·차트·구조

- 관리자 대시보드 반응형 레이아웃과 시각 구조를 개편.
- 대시보드 오늘 주문 요약을 입금대기·결제완료·상품준비중·배송준비중·배송중 상태별 배지로 변경.
- 상품 판매 현황 영역에 BarChart 기반 차트 컴포넌트를 적용.
- UnifiedIcon, BarChart, DonutChart 컴포넌트와 Tailwind safelist/prebuild 구성을 추가.
- Font Awesome·웹폰트·flag-icons 등 외부 CDN 리소스를 `externals` 선언으로 통합.
- 코어 최소 요구 버전을 7.0.0-beta.8 로 상향 (`externals` 선언 기능 의존).
- 본인인증 모달의 외부 provider 슬롯 구조 개편 — 외부 본인인증 플러그인이 모달의 코어 UI 를 의도치 않게 비워버리는 회귀를 차단하고, 향후 추가될 외부 본인인증 플러그인이 일관된 슬롯에 자기 UI 를 주입할 수 있도록 정합화.
- 관리자 대시보드의 게시판 영역(상단 빠른 진입 버튼·통계 카드)을 게시판 모듈이 직접 채우도록 변경 — 게시판 모듈이 활성화된 환경에서만 표시되고, 비활성 시 자동으로 사라집니다.
- 레이아웃 편집 화면 좌측 목록을 트리 구조로 개편하여 일반 레이아웃과 확장 주입 레이아웃을 구분 표시하고, 확장 레이아웃도 버전 히스토리·복구·미리보기를 동일하게 사용할 수 있도록 개선.
- 에러 페이지(404 / 403 / 500 / 503 / 401 / 점검) 식별자를 다른 모든 페이지와 동일하게 디렉토리 접두사 포함 형식(`errors/{코드}`) 으로 통일. 관리자 화면 동작은 동일하나 내부적으로 에러 페이지가 일관된 식별자로 시드되도록 정합화.
- 대시보드 상단의 "전체회원수" 통계 카드를 제거했습니다.

### Fixed

#### 화면 표시·식별·복구

- 관리자 대시보드의 목록형 카드(최근 활동·최근 알림·모듈/플러그인/템플릿 상태·시스템 알림)에서 각 항목이 같은 화면 식별자를 공유해 일부 보조 기능·접근성 도구가 항목을 구분하지 못하던 문제를 수정했습니다 — 이제 목록의 각 행이 고유하게 식별됩니다.
- 헤더에 모듈이 추가하는 선택기(통화 등)가 데스크톱과 모바일 화면에 동시에 배치될 때 같은 화면 식별자를 공유하던 문제를 수정했습니다 — 두 위치의 선택기가 각각 고유하게 식별됩니다.
- 환경설정 본인인증 정책 편집 화면에서 코어/모듈이 제공한 정책의 "인증 목적"을 선택할 수 없고, "적용 대상" 등 일부 항목을 바꿔도 저장되지 않던 문제를 수정했습니다 — 이제 정책 키·강제 시점·강제 위치를 제외한 모든 항목을 자유롭게 변경할 수 있으며, 안내 문구도 실제 편집 가능 범위에 맞춰 정정되었습니다.
- 파일 업로더에서 저장 시 함께 올린 파일들이 누락되던 경우를 막기 위해, 업로드를 마친 뒤 기존 파일과 새로 올린 파일을 올바른 순서로 합쳐 저장 화면에 전달하도록 보완했습니다 — 파일을 추가하고 저장하는 화면(상품 이미지 등)에서 추가·재첨부·순서 변경이 저장한 그대로 반영됩니다.
- 관리자 게시글·답변 상세에서 첨부파일을 내려받을 때, 활동이력에 "받은 사람"이 함께 남도록 다운로드 방식을 개선했습니다. 다운로드 동작과 화면은 종전과 동일합니다.
- 관리자 사이드바 하단에 중복 노출되던 프로필/링크 영역을 제거하고, 계정 관련 기능은 상단 헤더 드롭다운으로 일원화.
- 관리자 환경설정 화면에서 상단 탭과 하단 저장 버튼이 스크롤 중에도 화면에 고정되도록 복구.

#### 본인인증·인증 화면

- 코어 메일 본인인증 흐름에서 모달의 코드 재전송 / 확인 버튼이 노출되지 않던 회귀 수정.
- 본인인증 모달과 풀페이지의 "남은 시도 횟수" 표시가 환경설정값과 무관하게 항상 5회로 굳어 있던 문제 수정. 운영자가 환경설정에서 지정한 한도가 사용자 화면에 정확히 표시됩니다.
- 본인인증 풀페이지를 URL 로 직접 접속한 경우(외부 본인인증 콜백 후 진입 등) "남은 시도 횟수"·만료 카운트다운·렌더링 분기 값이 부정확하게 표시되던 문제 수정. 진입 시 서버에서 최신 상태를 받아 즉시 갱신합니다.
- 본인인증 인증 코드 메일이 화면에서 선택한 언어와 다른 언어로 발송되던 문제 수정 — 한국어 화면에서 인증을 요청하면 인증 코드 메일도 한국어로, 영문 화면이면 영어로 발송됩니다.
- 로그인 / 비밀번호 찾기 / 비밀번호 재설정 화면의 언어 변경·테마 변경 동작이 핸들러 매개변수 누락으로 무시되던 결함 수정 — 사용자가 선택한 언어·테마가 정상 반영됩니다.
- 템플릿 레이아웃 편집 화면의 코드 에디터 변경 이벤트 정의에 표준 키 누락으로 자동 저장 핸들러가 실행되지 않던 결함 수정.

#### 배지·필터·다국어

- 상태 배지(주문상태·결제상태 등)가 의미별 색상(성공=초록, 경고=노랑, 위험=빨강 등)으로 표시되지 않고 모두 회색으로만 보이던 문제 수정. 화면에서 상태를 색으로 한눈에 구분할 수 있습니다.
- 환경설정의 본인인증 정책 관리와 언어팩 관리에서 필터(강제 시점 / 출처 등)를 적용하면 "선택한 scope이(가) 올바르지 않습니다." 오류 알림이 반복적으로 뜨던 문제 수정. 한 화면 안에 함께 있는 두 목록이 같은 필터 조건을 잘못 공유해 발생하던 현상으로, 이제 각 목록은 자기 화면에서만 조회되어 불필요한 오류 알림이 표시되지 않습니다.
- 환경설정에서 탭을 클릭으로 전환했을 때(예: 본인인증 ↔ 언어팩) 해당 탭의 목록이 비어 보이던 문제 수정. 새로고침해야 보이던 목록이 이제 탭 전환 즉시 정상 표시됩니다.
- 회원 목록의 일괄 작업 영역에서 "상태 변경" 라벨이 다국어로 전환되지 않던 문제 수정. 이제 언어 설정에 따라 정상적으로 번역되어 표시됩니다. (#45 @glitter-gim 님께서 제보해주셨습니다.)
- SEO 설정의 "OG 사이트 이름" 입력칸 안내를 개선했습니다. 이 값이 선택 재정의 항목이며 비워두면 일반 설정의 사이트 이름을 기본값으로 따른다는 점을 라벨과 안내문에 명확히 표시합니다. (#49 @glitter-gim 님께서 제보해주셨습니다.)
- 본인인증 이력에서 상태 필터(예: 요청됨)를 적용한 채 인증수단 탭을 전환하면, 필터 체크는 그대로 남아 있는데 목록은 필터가 풀린 전체가 나오던 문제 수정. 탭을 전환하면 필터가 즉시 초기화되어 화면의 필터 상태와 실제 목록이 항상 일치합니다.

## [1.0.0-beta.7] - 2026-05-15

### Changed

- 환경설정 > 정보 > 업데이트 확인 모달의 자동 업데이트 명령어 안내를 `sudo php artisan core:update` 권장 형태로 변경. 권한이 일치하지 않는 환경에서의 실행 실패를 사용자가 사전에 회피할 수 있도록 보강합니다. (#30 @yks118 님께서 건의해주셨습니다.)
- 위 모달 하단에 "전체 업그레이드 가이드 보기" 외부 링크를 추가하여 코어 `INSTALL.md` 의 "업그레이드" 섹션으로 연결합니다.

## [1.0.0-beta.6] - 2026-05-14

### Fixed

- 환경설정 본인인증 메시지 탭에서 조회 권한만 가진 운영자에게 편집 / 기본값 복원 / 활성 토글 버튼이 노출·작동하던 결함 수정. 수정 권한 보유 여부에 따라 자동 비활성화되어 PATCH/DELETE 요청을 트리거할 수 없도록 가드합니다.
- "정의 추가" 버튼이 수정 권한 보유 운영자에게도 항상 비활성화되던 결함 수정 — 정의 목록 응답에 추가 권한 키가 포함되도록 보강하여 권한에 맞춰 정확히 활성화/비활성화됩니다.

## [1.0.0-beta.5] - 2026-05-12

### Added

- 환경설정 본인인증 정책 탭에 권한 기반 버튼 비활성화 적용 — "정책 추가" / "수정" / "삭제" / "활성 토글" 버튼이 운영자의 수정 권한 보유 여부에 따라 자동 비활성화
- 본인인증 권한이 조회/수정으로 분리됨에 따라, 조회 권한만 있는 운영자도 환경설정 본인인증 화면에 정상 진입 가능 (코어 권한 변경 연동)

### Fixed

- 알림 센터의 미확인 알림 카운트 뱃지·알림 행의 unread 점·"읽지 않은 알림만" 체크박스가 다크 모드에서 색상이 부정합하게 노출되던 문제 수정
- 언어팩 설치 / 모듈·플러그인·템플릿 재활성화 확인 모달의 액션 버튼이 다크 모드에서 호버 색상이 라이트 모드와 동일하게 보이던 문제 수정

## [1.0.0-beta.4] - 2026-05-11

### Added

- 관리자 화면의 본인인증 정책 위반 시 동일한 모달 UX 가 자동으로 표시되도록 공통 본인인증 모달 추가 (관리자 작업·계정 탈퇴·확장 제거 등 민감 작업 모두 일관된 흐름)
- 관리자 본인인증 모달의 "취소" 클릭 시 서버 본인인증 challenge 가 즉시 정리되도록 개선 — 미인증 challenge 가 만료까지 남아있던 동작이 audit 기록과 함께 즉시 cancelled 상태로 정합
- 본인인증 챌린지 풀페이지(`/admin/identity/challenge`) 추가 — 외부 redirect 흐름 또는 모달 컨텍스트 손실 케이스에서 폴백
- 외부 본인인증 provider 플러그인이 자기 SDK UI 를 관리자 모달에 주입할 수 있는 슬롯 도입
- 모듈/플러그인/템플릿 관리자 목록 화면에 슈퍼관리자 전용 "숨김 포함" 토글 추가 (기본: 숨김 확장 제외)
- 환경설정 → 본인인증 탭에 "메시지 템플릿" 서브탭 추가 — 알림 템플릿 관리와 동일한 UX (채널 서브탭·페이지당 항목 수 셀렉터·카드 펼침 본문 미리보기·활성/기본 배지·페이지네이션) 로 정의 목록·활성 토글·다국어 편집(변수 가이드 + 기본값 복원) 제공
- 운영자가 추가한 본인인증 정책에 묶인 메일 메시지 정의를 화면에서 직접 추가/삭제 가능 — 시드 기본값 정의는 보호되어 삭제 불가, 신규 등록은 운영자 정책 키와 매칭될 때만 허용
- 모듈/플러그인 제거 모달의 "삭제될 데이터" 에 코어 공유 테이블 영역(권한·관리자 메뉴·알림 정의·본인인증 정책·본인인증 메시지 정의) 도 표시되어 운영자가 사라지는 데이터를 정확히 파악할 수 있도록 함
- 관리자 로그인 화면에 세션 만료 안내 토스트 추가 — 토큰 만료로 자동 리다이렉트된 관리자에게 "세션이 만료되었습니다. 다시 로그인해 주세요." 메시지 표시 (`?reason=session_expired` 쿼리 파라미터 감지) (#19 @abc101 님께서 건의해주셨습니다.)
- 언어팩 관리 화면에서 검색 버튼 + Enter 키로 즉시 검색 가능, 검색/스코프/상태 필터가 URL 쿼리에 동기화되어 새로고침·공유 시 동일한 필터 상태 유지
- 환경설정 > SEO 탭의 Sitemap 카드에 마지막 생성 시각 표시와 "지금 생성" 버튼 추가 — IP 기반 타임존 감지 카드와 동일한 방식으로 즉시 재생성

#### 언어팩 관리 화면 보강

- 환경설정 > 언어팩 관리 본문을 모듈 관리와 동일한 수준의 운영 도구로 구성 (업데이트 확인 / 캐시 갱신 / 다중 선택 일괄 제거 추가)
- 활성/비활성 상태를 토글 스위치로 일원화하고 보호된 팩은 비활성화된 토글로 표시
- 업데이트 가능 항목에 배지와 행 단위 업데이트 실행 버튼 노출
- 정보 모달을 4섹션 구조(기본정보 / 호환성 / 소스 정보 / 변경로그)로 제공하며 CHANGELOG.md 를 자동 파싱하여 버전별 카테고리로 표시
- 설치 모달에 ZIP 사전 검증을 위한 "manifest 미리보기" 진입 추가
- 모듈/플러그인/템플릿별 언어팩 페이지 진입 시 대상 확장 안내 배너와 환경설정 탭 회귀 링크 노출
- 목록에 컬럼 헤더(로케일 / 스코프 / 대상 / 벤더 / 버전 / 상태 / 작업) 표시

### Changed

- 코어 최소 요구 버전을 7.0.0-beta.4 로 상향
- 레이아웃 버전 목록의 선택 전환 시 반응성 개선
- 본인인증 이력 페이지 UI 를 알림 발송 이력과 동일한 수준으로 개선 — Provider 탭, 분리된 검색 타입(자동/사용자 ID/대상 식별자), 상태·인증 목적 멀티 체크박스, 정렬·페이지 사이즈 선택, DataGrid 행 펼침으로 인라인 상세 표시, 부분 로딩, 모바일 반응형 대응
- 본인인증 이력 화면 용어를 환경설정 본인인증 정책과 일관되게 정비 (인증 목적/인증 수단/대상 식별자/발생 위치/추가 속성/부가 정보), 인증 목적 값은 사람이 읽을 수 있는 라벨로 표시
- 오래된 로그 일괄 파기 동작이 모달 확인 + 진행 중 스피너 표시로 변경되어 다른 관리자 작업과 일관된 UX 제공
- 코어 환경설정 본인인증 정책 화면에 "코어가 제공하는 본인인증 목적" 칩 섹션 추가 (목적 코드/라벨 + 설명·허용 채널 툴팁)
- 본인인증 정책 목록의 "인증 목적" 컬럼이 미정의 i18n 키를 그대로 노출하던 문제를 dynamic lookup 으로 변경 — 모듈/플러그인이 추가한 목적도 사람이 읽을 수 있는 라벨로 표시
- 환경설정 탭과 모듈/플러그인/템플릿별 언어팩 페이지가 동일 본문을 공유하도록 통합 — 한 곳만 수정하면 양쪽이 동시 반영
- 페이지네이션을 다른 관리 화면과 동일한 표준 컴포넌트로 교체하여 1페이지일 때도 일관된 형태로 노출
- 언어팩 활성 상태 뱃지를 토글로 대체 — 오류 상태일 때만 빨간 뱃지 표시

### Fixed

- 검색 드롭다운에서 빠른 모달 토글 시 포커스 처리가 충돌하던 문제 수정
- 알림 템플릿 편집 모달의 입력 필드에서 글자를 입력할 때마다 화면이 심하게 버벅이던 문제 수정
- 환경설정 알림 탭, 알림 발송 이력 채널 탭, 알림 템플릿 편집 모달의 채널 라벨이 식별자(mail / database)로 노출되던 문제 수정 — 활성 언어 기준의 사람이 읽을 수 있는 라벨로 표시

## [1.0.0-beta.3] - 2026-04-21

### Fixed

- 알림 레이어를 닫을 때 목록이 읽음 상태로 갱신되지 않아 재토글 시 읽음 처리가 누락되던 문제 수정 (#14 @laelbe 님께서 제보해주셨습니다.)
- 알림 레이어 무한 스크롤 시 "안 읽은 알림만" 필터가 유지되지 않아 읽은 알림이 섞여 노출되던 문제 수정 (#14 @laelbe 님께서 제보해주셨습니다.)
- 알림 레이어 무한 스크롤 시 동일 페이지 API 가 중복 호출되던 문제 수정 (#14 @laelbe 님께서 제보해주셨습니다.)
- 안 읽은 알림이 없는데도 알림 레이어를 닫을 때 읽음 처리 API 가 불필요하게 호출되던 문제 수정 (#14 @laelbe 님께서 제보해주셨습니다.)
- 알림 드롭다운이 화면 경계를 벗어나지 않도록 자동으로 좌/우 정렬 전환 및 최대 너비 제한

## [1.0.0-beta.2] - 2026-04-20

### Added

- 모듈/플러그인/템플릿 정보 모달에 의존성 섹션 추가 — 코어 요구 버전, 의존 확장의 요구/설치 버전과 충족 상태 뱃지 표시
- 알림센터 구현 — 읽은/안 읽은 알림 표시, 개별/전체 삭제, 모두 읽기, 안 읽은 필터, 무한 스크롤
- 알림 전체 삭제 확인 모달 추가
- 실시간 알림 수신 시 뱃지 갱신 + 토스트 표시 (WebSocket 연동)
- 알림 시각 표시를 사용자 타임존 기준으로 변경
- 환경설정 알림 탭에 일괄 초기화 확인 모달 추가 — 진행 스피너, 대상 이름 표시, 경고 메시지 포함
- 편집된 알림 제목이 식별자 대신 다국어 이름으로 표시되도록 개선

### Removed

- 코어 환경설정 > SEO > 애널리틱스/사이트 소유권 확인 카드 제거 (미작동 기능)

### Changed

- 코어 최소 요구 버전을 7.0.0-beta.2 로 상향
- TabNavigation 컴포넌트를 반응형으로 개선 — 768px 미만에서 Select 드롭다운으로 전환
- 성능 테스트 fixture 파일(~19MB) 저장소에서 제거 — 테스트 실행 시 자동 생성/삭제로 전환 (#1 @jiwonpapa 님께서 건의해주셨습니다.)
- 알림 템플릿 편집 모달 다국어 탭을 동적 생성으로 전환
- 언어 선택 UI를 하드코딩에서 `localeNames` 기반 동적 생성으로 전환
- 알림 발송 이력 레이아웃 재구성 — DataGrid 구조, 필터 분리, 일괄 삭제, expandable 상세보기
- HtmlContent DOMPurify를 FORBID 방식으로 전환 (보안 기본값 항상 유지)

### Fixed

- 확장 install/activate/deactivate/uninstall 직후 라우트·메뉴·다국어 미반영 수정 — `reloadExtensions` 핸들러 도입
- 여러 관리자 폼의 에러 핸들러에서 저장/삭제 버튼 로딩 상태 고정 수정
- FileUploader 갤러리 이미지 깨짐 수정 — stale closure로 인한 blob URL 문제
- FileInput onChange가 ActionDispatcher에서 무시되던 문제 수정
- 모달 내부 Select 드롭다운이 잘려 보이는 문제 수정

## [1.0.0-beta.1] - 2026-04-01

### Changed

- 오픈 베타 릴리즈

## [0.2.34] - 2026-03-31

### Added

- 템플릿 업데이트 모달 — "수정 유지" 선택 시 수정된 레이아웃 목록 패널 표시 (이름, 변화량, 수정 일시) (_modal_update.json, _tab_admin.json, _tab_user.json, lang)

### Changed

- 사용자 관리 국가 입력항목 및 표시 숨김 처리 (admin_user_list.json, admin_user_form.json, admin_user_detail.json)

### Fixed

- 관리자 검색 페이지에서 다른 페이지로 이동 후 돌아올 때 이전 검색어가 Input에 유지되던 문제 수정 — `_global` 상태를 `_local`로 전환, `init_actions`로 URL 쿼리 기준 초기화 (admin_user_list.json, admin_module_list.json, admin_plugin_list.json, admin_role_list.json, admin_schedule_list.json, admin_template_list.json, _tab_user.json, _tab_admin.json)

## [0.2.33] - 2026-03-30

### Added

- 관리자 로그인 화면 개선 — 비밀번호 찾기/재설정 플로우 레이아웃 추가, 테마 Segmented Control, 언어 셀렉트 확대 (admin_login.json, admin_forgot_password.json, admin_reset_password.json, lang, passwordResetHandlers)
- 활동 로그 이력 조회 관리자 레이아웃 및 다국어 추가 (admin_activity_logs.json, _partial_activity_log_detail.json)
- 환경설정 드라이버 탭 검색엔진 설정 UI 및 다국어 추가 (_tab_drivers.json, lang)

### Fixed

- DynamicFieldList/MultilingualInput stale closure 수정 — 디바운스 병합 시 이전 키 변경 유실 방지 (DynamicFieldList.tsx, MultilingualInput.tsx)
- FileUploader onRemove 시 form 데이터 동기화 누락 수정 — 환경설정 로고 삭제 시 폼 데이터 미반영 (_tab_general.json)
- 사용자 관리에서 관리자/슈퍼관리자 삭제 시 토스트 메시지 및 어빌리티 처리 — 삭제 불가 사용자 UI 반영 (admin_user_list.json)

### Removed

- 게시판 사용자 알림 설정 확장 파일 제거 (extensions/)

## [0.2.32] - 2026-03-30

### Fixed

- 레이아웃 편집 버전 히스토리 복원 후 에디터 content 미갱신 수정 — onSuccess에서 `refetchDataSource` 후 `_global.editorContent`를 명시적으로 갱신하여 stale 에디터 내용이 DB를 덮어쓰는 문제 방지 (_modal_version_history.json)
- 버전 히스토리 복원 버튼 `sequence` 핸들러 문법 수정 — top-level `actions` → `params.actions` (_modal_version_history.json)

### Removed

- 작동 불가한 "템플릿 업데이트 변경 내역 확인" 버튼 및 모달 삭제 (admin_template_layout_edit.json, _modal_template_changelog.json)

## [0.2.31] - 2026-03-30

### Changed

- 환경설정 드라이버 탭 저장 버튼 비활성화 조건을 `_global.settings.drivers` 참조에서 `_local.originalDrivers` (API 원본값) 참조로 변경 — `window.G7Config`에서 drivers 설정 미노출 대응 (admin_settings.json initLocal 맵 확장)

## [0.2.30] - 2026-03-30

### Fixed

- 다크모드 전수 조사 및 수정 — TSX 컴포넌트 약 26건, CSS 5건의 누락된 `dark:` variant 추가
  - PermissionTree, FileUploader, DynamicFieldList, SectionLayout, TagInput, SortableMenuItem, Accordion, ColumnSelector, IconSelect, LanguageSelector, MultilingualInput, Toggle 등
  - ui-elements.css: Select SVG 아이콘 다크모드 밝은 색상 추가, 폼 Input 6개 클래스 `dark:bg-gray-800` → `dark:bg-gray-700` (카드 배경과 구분)
- Select 컴포넌트 다크모드 텍스트 색상 누락 수정 — 커스텀 `bg-*` className 사용 시 텍스트 색상 자동 보충 로직 추가 (`hasTextColor` 검사 → `text-gray-700 dark:text-gray-200` 보충)
- safelist에 다크모드 클래스 패밀리 46개 추가 (amber, emerald, teal, cyan 등)

## [0.2.29] - 2026-03-30

### Fixed

- FileUploader 상품 수정 시 이미지 순서 유실 버그 3건 수정 — customOrder 상태 도입으로 기존/신규 파일 간 드래그 순서 보존, handleDragEnd에서 customOrder 기반 정렬, 업로드 완료 즉시 pending ID→hash 교체 (useFileUploader.ts)
- FileUploader 상품 복사 모드 지원 — hash 기반 이미지 식별, id 없는 이미지 서버 삭제 스킵, 복사 모드 삭제 후 재출현 방지 (useFileUploader.ts, FileList.tsx, types.ts)
- FileUploader onReorder 콜백 추가 — 드래그 순서 변경 및 업로드 완료 시 부모에게 정렬된 파일 목록 전달 (useFileUploader.ts, FileUploader.tsx, types.ts)
- FileUploader 대표이미지 식별 hash 기반 전환 — primaryFileId에 hash 우선 사용 (FileList.tsx, types.ts)
- FileUploader 업로드 응답 ResponseHelper 이중 래핑 대응 — response.data.data ?? response.data 패턴 (useFileUploader.ts)
- FileUploader mime_type null 방어 코드 추가 — optional chaining으로 startsWith 에러 방지 (useFileUploader.ts, SortableThumbnailItem.tsx, FileList.tsx, utils.ts)

## [0.2.28] - 2026-03-30

### Fixed

- DynamicFieldList 입력 시 포커스 아웃 수정 — itemIdKey가 없는 아이템에 자동 ID 부여로 setState 라운드트립 후에도 React key 안정성 유지 (DynamicFieldList.tsx)

## [0.2.27] - 2026-03-29

### Fixed

- FileUploader mime_type null 방어 코드 추가 — optional chaining으로 startsWith 에러 방지 (useFileUploader.ts, SortableThumbnailItem.tsx, FileList.tsx, utils.ts)
- FileUploader 대표이미지 식별 hash 기반 전환 — primaryFileId 비교/이벤트에 hash 우선 사용, 복사 모드(id 없는 이미지) 삭제 시 서버 API 호출 스킵 (useFileUploader.ts, FileList.tsx, types.ts)
- FileUploader 복사 모드 이미지 삭제 후 재출현 버그 수정 — deletedIdsRef에 hash 추가 추적, initialFiles 동기화 시 hash 기반 필터링 (useFileUploader.ts)

## [0.2.26] - 2026-03-28

### Changed

- 레이아웃 편집기 CodeEditor, 레이아웃 설명, 파일 설명 바인딩에 `raw:` 접두사 적용 — 사용자 입력 데이터 내 `$t:` 패턴 번역 방지 (admin_template_layout_edit.json)

## [0.2.25] - 2026-03-28

### Added

- 활동 로그 기간 검색 프리셋 버튼 추가 — 오늘, 1주일, 1개월, 3개월, 6개월, 1년 빠른 선택 (주문관리와 동일 UX) (_partial_filter.json)
- `setDateRange` 핸들러 추가 — 날짜 프리셋별 시작일/종료일 자동 계산, datetime-local 형식 반환 (setDateRangeHandler.ts)
- 삭제 모달 스피너 추가 — 개별/일괄 삭제 진행 중 삭제 버튼에 스피너 아이콘 표시 (admin_activity_log_list.json)

### Changed

- 활동 로그 기간 필터를 date에서 datetime-local로 변경 — 시/분/초 지정 가능 (_partial_filter.json)

## [0.2.24] - 2026-03-28

### Changed

- 활동 로그 행위자 필터를 텍스트 Input에서 SearchableDropdown으로 변경 — UUID 기반 사용자 검색, API `/api/admin/users/search` 연동 (_partial_filter.json, admin_activity_log_list.json)
- 활동 로그 DataGrid 행위자 컬럼을 ActionMenu로 변경 — 회원 정보 보기, 해당 행위자로 검색 기능 추가 (_partial_datagrid.json)
- 활동 로그 양방향(한글/영어) 검색 지원 — 액션/설명 검색 시 번역 라벨 역추적으로 원본 키도 함께 검색 (ActivityLogRepository.php)

## [0.2.23] - 2026-03-28

### Added

- 활동 로그 이력 조회 메뉴 및 목록 페이지 신설 — 필터(검색어, 로그 타입, 날짜 범위), DataGrid(확장 행으로 변경 내역 표시), 서버 사이드 페이지네이션, 단건/일괄 삭제 기능 (admin_activity_log_list.json, _partial_filter.json, _partial_datagrid.json)
- 활동 로그 다국어 키 추가 — 페이지 제목, 필터 레이블, 테이블 컬럼, 상세 정보, 삭제 확인 메시지 등 (ko/admin.json, en/admin.json)
- 활동 로그 목록 레이아웃 렌더링 테스트 추가 — 필터 UI, DataGrid 렌더링, 빈 상태, abilities 기반 삭제 버튼 제어 (admin-activity-log-list.test.tsx)
- 대시보드 활동 로그 레이아웃 렌더링 테스트 추가 (admin-dashboard-activity-log.test.tsx)

### Changed

- 활동 로그 필터 전면 재구현 — 검색 키워드 대상 드롭다운(전체/액션/설명/IP주소), 로그 타입 체크박스(전체/관리자/사용자/시스템), 행위자 필터, 기간 필터, filter-row/filter-label CSS 패턴 (_partial_filter.json, admin_activity_log_list.json)
- DataGrid `expandConditionField` prop 추가 — 행별 조건부 확장 아이콘 표시 지원, `has_changes` 필드 기반 변경 이력 있는 행만 확장 가능 (DataGrid.tsx)
- 활동 로그 DataGrid에 IP 주소 컬럼 추가, selectable 항상 활성화, expandConditionField 적용 (_partial_datagrid.json)
- 활동 로그 일괄 삭제 버튼 `if` 조건 → `disabled` 속성으로 변경 (admin_activity_log_list.json)
- 대시보드 "시스템 알림" 카드 숨김 처리 — `if: "false"` 추가, dashboard_alerts 데이터소스 `auto_fetch: false` 변경 (admin_dashboard.json)
- 대시보드 "최근 활동"이 사용자 가입 이력 대신 ActivityLog 전체를 표시하도록 변경 (admin_dashboard.json)

## [0.2.22] - 2026-03-28

### Fixed

- 대시보드 모듈 상태 배지가 항상 "비활성화"로 표시되는 버그 수정 — `module.is_active` (미존재 필드) → `module.status === 'active'` (admin_dashboard.json)
- 대시보드 확장 카드 아이콘을 사이드바 메뉴 아이콘과 일치 — 모듈: cube, 플러그인: puzzle-piece, 템플릿: palette (admin_dashboard.json)
- 대시보드 "더보기" 버튼 actions 형식을 배열 형식(`type: "click"`)으로 수정 — onClick 객체 형식에서 navigate 무반응 해결 (admin_dashboard.json)

### Added

- 대시보드 플러그인/템플릿 상태 카드 추가 — 모듈 카드와 동일 구조, 각 확장 타입별 아이콘 표시 (cube/puzzle-piece/palette) (admin_dashboard.json)
- 대시보드 확장 카드 "더보기" 버튼 추가 — 각 카드에서 해당 관리 페이지로 이동 (admin_dashboard.json)
- IconTypes.ts에 Palette 아이콘 추가 — 템플릿 관리 메뉴 아이콘(`fa-palette`) 지원 (IconTypes.ts)
- 대시보드 확장 상태 카드 레이아웃 렌더링 테스트 추가 (admin-dashboard-extension-status.test.tsx)

### Changed

- 대시보드 하단 그리드를 2열에서 3열로 변경 — 확장 카드 3개 (모듈/플러그인/템플릿) + 알림 카드 별도 행 (admin_dashboard.json)

## [0.2.21] - 2026-03-28

### Fixed

- FileUploader 업로드 후 'uploading' 항목 영구 잔류 버그 수정 — `response.data?.data` 이중 접근을 `response?.data`로 수정 (ApiClient가 Axios response.data를 이미 언래핑하므로), attachment null 시 에러 상태 전환 방어 로직 추가 (useFileUploader.ts)

### Added

- FileUploader 업로드 응답 파싱 테스트 추가 — renderHook 기반 훅 직접 테스트로 정상 파싱 및 null 응답 방어 검증 (FileUploader.test.tsx)

## [0.2.20] - 2026-03-27

### Added

- SortableMenuList 크로스 depth DnD 지원 — 중첩 SortableContext → flattened tree 방식 리팩토링, 단일 SortableContext로 depth 간 이동 가능
- AdminSidebar 부모 메뉴 클릭/토글 분리 — URL 있는 부모 메뉴 텍스트 클릭 시 네비게이션, chevron 클릭 시 하위 메뉴 토글

### Fixed

- SortableMenuList 드롭 위치 방향 판단 버그 수정 — flat 배열 인덱스 비교로 드래그 방향 판단, 위로 드래그 시 over 앞에 삽입

## [0.2.19] - 2026-03-27

### Changed

- Toast 기본 위치를 top-right → bottom-center로 변경 — 우측 상단 버튼과의 겹침 해소
- Toast 숨김 애니메이션 방향을 position에 따라 분기 처리 (bottom → 아래로, top → 위로)

## [0.2.18] - 2026-03-24

### Added

- TabNavigationScroll에 스크롤 컨테이너 지정 기능 추가 — 특정 엘리먼트 내에서 스크롤이 발생하는 레이아웃(예: 게시판 설정 탭)에서 올바른 섹션 감지와 스크롤 이동을 지원
- TabNavigationScroll 스크롤 컨테이너 관련 테스트 추가

### Fixed

- UserProfile.tsx: User 인터페이스에 uuid 필드 누락 수정 (TS2339 빌드 오류)

## [0.2.17] - 2026-03-23

### Changed

- 사용자 목록: DataGrid row.id → row.uuid 참조 전환
- 사용자 상세/수정: UUID 읽기전용 필드 추가, user.id → user.uuid 전환
- UserProfile.tsx: 네비게이션 경로 user.id → user.uuid 전환
- ColumnSelector.tsx: localStorage 키 user.id → user.uuid 전환
- FilterVisibilitySelector.tsx: localStorage 키 user.id → user.uuid 전환

## [0.2.16] - 2026-03-23

### Added

- Hr (수평선) basic 컴포넌트 추가 — HTML `<hr>` 래퍼, className 지원

## [0.2.15] - 2026-03-22

### Added

- Textarea 크기 변형 CSS 클래스 추가 — `textarea-sm` (80px), `textarea-md` (128px), `textarea-lg` (192px)
- safelist에 `min-h` spacing 클래스 추가 — `min-h-10` ~ `min-h-64`

## [0.2.14] - 2026-03-21

### Added

- common.json 다국어 키 추가 — download, downloading, send, sending (ko/en)

## [0.2.13] - 2026-03-20

### Added

- Tfoot 기본 컴포넌트 추가 — HTML `<tfoot>` 래퍼, components.json 등록
- DataGrid footerRow 기능 — `footerCells`, `footerClassName`, `footerCardChildren` props 추가, PC(테이블)/모바일(카드) 합계 행 지원

### Changed

- DataGrid 조건부 렌더링을 엔진에 위임 — 자체 구현 `evaluateCondition` 제거, `condition` 속성은 엔진의 `evaluateRenderCondition`이 네이티브 처리 (engine-v1.21.1)
- DataGrid `mapConditionToIf` 워크어라운드 제거 — 엔진 `condition` 지원으로 불필요

## [0.2.12] - 2026-03-19

### Added

- 상품 리뷰 관리 화면 지원 (이커머스 모듈 연동)
  - 리뷰 목록: 상태 배지, 답변 여부 배지, 포토리뷰 이미지 썸네일 표시
  - 판매자 답변 등록·수정·삭제 모달
  - 리뷰 일괄 상태 변경 및 일괄 삭제
  - 이미지 미리보기 모달

### Fixed

- 역할 목록 페이지네이션 경로 수정 — `roles.pagination.total` 등 올바른 응답 경로 사용
- 역할 폼 신규 생성 시 `is_active` Toggle 값이 `false`로 저장되지 않는 버그 수정 — `init_actions`에서 Toggle 초기값 `true` 설정

## [0.2.11] - 2026-03-16

### Added

- CategoryTree 컴포넌트 추가 — 계층형 카테고리 트리 선택/해제 UI

### Fixed

- DataGrid `cellChildren`/`subRowChildren` 내부 액션에서 `setState(target: "local")`이 globalStateUpdater 경로로 실행되어 Form 자동 바인딩의 stale 값에 덮어쓰이는 버그 수정 — `componentContext`를 `renderCellChildren`/`renderSubRowChildren`에 전달하여 컴포넌트 setState 경로 사용

### Changed

- 라이선스 프로그램 명칭 정비

## [0.2.9] - 2026-03-14

### Fixed

- FormField 컴포넌트에 `error` prop 전달 시 자식 Input/Select/Textarea에 적색 테두리가 자동 적용되도록 수정
- `form-field-error` CSS 자손 선택자 추가 — FormField 에러 상태에서 `.input`, `input[type]`, `select`, `textarea` 요소에 `border-red-500` 적용

## [0.2.8] - 2026-03-14

### Fixed

- CodeEditor onChange를 `{ target: { value } }` 패턴으로 수정 — 엔진 isCustomComponentEvent 경로로 정상 처리
- 레이아웃 편집기 CodeEditor onChange에서 `$args[0]` → `$event.target.value` 수정 — 객체가 상태에 저장되는 버그
- 레이아웃 편집기 CodeEditor onChange에 debounce 300ms 추가 — 매 키 입력마다 전역 상태 갱신 방지

## [0.2.7] - 2026-03-14

### Added

- 역할 리스트에서 활성/비활성 상태 직접 토글 기능 (Toggle 컴포넌트, abilities 기반 비활성화)
- 역할 생성 폼에 `identifier` 입력 필드 추가 — 수정 모드에서는 비활성화
- 역할 토글/identifier 관련 다국어 키 추가 (ko/en)
- 역할 리스트 확장 출처 뱃지 개선 — extension_type별 구분 (코어/모듈/플러그인) + 로케일 확장명 표시

### Fixed

- PermissionTree 확장 타입 뱃지가 코어 권한에도 "모듈"로 표시되는 버그 수정 — API의 `extension_type` 필드 직접 활용

## [0.2.6] - 2026-03-13

### Added

- 환경설정 > 고급 디버그 모드 활성화 시 개발 대시보드(`/dev`) 바로가기 버튼 추가
- `dev_dashboard` 다국어 키 추가 (ko/en)
- Admin 푸터 copyright 클릭 → 코어 라이선스 모달, 버전 클릭 → Changelog 모달 기능
- 코어 라이선스/Changelog 모달 partial 추가 (`_modal_license.json`, `_modal_changelog.json`)
- 확장 상세 모달에서 라이선스 클릭 시 전문 모달 표시 (모듈/플러그인/템플릿)
- Pre 기본 컴포넌트 추가
- 라이선스/Changelog 관련 다국어 키 추가 (ko/en)
- TemplateResource에 `license` 필드 추가
- `_admin_base.json`에 버전 동적 바인딩 (`appConfig.version`)

## [0.2.5] - 2026-03-13

### Fixed

- 확장 수동 설치 모달에서 설치 실패 시 상세 에러 사유(`errors.error`) 미표시 → `whitespace-pre-line` P 요소 추가

## [0.2.4] - 2026-03-13

### Added

- 확장 수동 설치 모달 3개(모듈/플러그인/템플릿)에 `contentType: "multipart/form-data"` 적용 — ZIP 파일 업로드 시 FormData 전송

## [0.2.3] - 2026-03-13

### Changed

- 확장 업데이트 모달 changelog source를 동적으로 전환 — `source=bundled` 하드코딩 → `source={{row.update_source ?? 'bundled'}}` (모듈/플러그인/템플릿 4개 레이아웃)

### Fixed

- 코어 업데이트 결과 모달에서 from/to 버전 파라미터가 전달되지 않는 버그 수정 — `params.params` → `params.query`

## [0.2.2] - 2026-03-13

### Changed

- 확장 수동 설치 모달 3개(모듈/플러그인/템플릿) UI 통일 — TabNavigation underline, 에러 배너, 필드별 적색 테두리, download/spinner 아이콘
- 확장 목록 PageHeader에서 새로고침 버튼 제거, 업데이트 확인 버튼으로 통일

### Fixed

- 수동 설치 모달에서 `condition` 속성 사용으로 탭 콘텐츠가 모두 노출되던 문제 수정 — `if` 속성으로 전환

## [0.2.1] - 2026-03-08

### Changed

- 레이아웃 JSON의 `permissions.can_*` / `permissions?.can_*` 바인딩을 `abilities.can_*` / `abilities?.can_*`로 변경 (코어 표준화)
- 모듈/플러그인 상세 모달의 `defined_permissions` 키를 원래 이름 `permissions`로 원복

## [0.2.0] - 2026-03-05

### Changed
- 업데이트 모달 changelog 버전 헤더를 Badge 스타일로 개선 (모듈/플러그인/템플릿 공통)
- 버전 번호와 날짜를 분리 표시하여 중간 버전 시각적 구분 강화

## [0.1.9] - 2026-03-05

### Added
- 코어 메일 템플릿 관리 탭 및 발송 이력 탭 레이아웃
- 게시판/이커머스 메일 템플릿 관리 레이아웃

## [0.1.8] - 2026-03-02

### Changed
- 저작권 연도를 config/app.php SSoT 기반 동적 참조로 전환
- AdminFooter copyright prop 기본값 2025 → 2026 변경
- _admin_base.json copyright prop 동적 바인딩 전환 (`_global.appConfig.releaseYear`)
- components.json copyright default 값 2026으로 갱신

## [0.1.7] - 2026-02-26

### Added
- 확장 Changelog 시스템 구현 (CHANGELOG.md 파싱 및 관리화면 표시)
- 상세 모달에 변경 내역(Changelog) 섹션 추가 (모듈/플러그인/템플릿)
- 업데이트 모달에 인라인 변경사항 표시 추가
- Changelog API 엔드포인트 3개 추가 (modules/plugins/templates)
- 다국어 키 추가 (changelog, update_changelog_title 등)

### Fixed
- 미설치 확장의 변경 내역 미표시 버그 수정 (active → _bundled 폴백)

### Changed
- 업데이트/상세 모달 changelog 카드 간격 개선 (구분선 추가)

## [0.1.6] - 2026-02-26

### Fixed
- 업데이트 모달 '개발자' 필드에 vendor 대신 업데이트 소스가 표시되던 버그 수정
- vendor 행과 update_source 행을 분리하여 2개 행으로 표시

## [0.1.5] - 2026-02-25

### Changed
- 모듈/플러그인 업데이트 뱃지 색상 amber → red로 변경
- 모듈/플러그인 목록에 업데이트 버튼 추가

## [0.1.4] - 2026-02-25

### Fixed
- 확장 업데이트 버전 표시 버그 수정 (latest_version null fallback)
- iteration 컨텍스트 $t: → $t:defer: 수정 (7개 파일)

### Added
- 모듈/플러그인 레이아웃에 version_available 표시 추가
- 다국어 modules.version_available 키 추가

## [0.1.3] - 2026-02-25

### Fixed
- 모듈/플러그인 업데이트 체크 apiCall에 auth_required 누락 수정 (401 오류 해결)

## [0.1.2] - 2026-02-25

### Added
- 모듈 레이아웃 admin/user 분기 등록 기능
- 레이아웃 이름 포맷 통일 (DOT 포맷 지원)

### Changed
- LayoutResolverService 오버라이드 version_constraint 검사 추가
- 고아 오버라이드 레코드 자동 정리

## [0.1.1] - 2026-02-24

### Changed
- 버전 체계 조정 (정식 출시 전 0.x 체계로 변경)

## [0.1.0] - 2026-02-23

### Added
- 관리자 기본 템플릿 초기 구현
- 템플릿 구조 (template.json, routes.json, _base.json)
- 기본 컴포넌트 세트 (Basic 27개, Composite 7개)
- 사이드바 네비게이션: 접기/펼치기, 계층형 메뉴, 활성 상태 표시
- 상단바: 사용자 정보, 알림 벨, 다크 모드 전환 토글
- 대시보드 레이아웃: 시스템 정보, 통계 위젯
- 사용자/역할/권한 관리 화면
- 메뉴 관리 화면 (드래그 앤 드롭 순서 변경)
- 모듈/플러그인/템플릿 관리 화면 (설치/업데이트/상세 모달)
- 환경설정 탭 레이아웃 (사이트 정보, SEO, 메일, 보안)
- 일정 관리 캘린더 화면
- 시스템 정보 화면
- CRUD 화면 표준 레이아웃 (목록/생성/수정/상세)
- 모달 기반 상세 보기/수정 기능
- 토스트 알림 시스템
- 확인 다이얼로그 (삭제 확인 등)
- 에러 페이지 (403, 404, 500, 503)
- 다국어 지원 (ko, en)
- 다크 모드 지원
- 반응형 레이아웃 (데스크톱/태블릿/모바일)
