Files
Gnuboard7/templates/_bundled/sirsoft-basic/template.json
T
HeuJung e3c00addd8 fix(sirsoft-basic): 모바일 뷰포트 가로 오버플로·압착 해소 및 확장 조각 audit 사각지대 수정
390px 실측 결과 26개 라우트 중 24개에서 문서가 뷰포트를 11px 넘겼고,
320px 에서는 햄버거 버튼이 화면 밖으로 밀려 내비게이션 자체가 불가능했다.
원인은 예외 없이 헤더 우측의 언어(71px)+통화(91px) 선택기였다.

이를 모바일 드로어로 옮기고, 좁은 화면에서는 세로 목록 대신 가로 칩으로
나열하도록 했다. 통화·배송국가는 이커머스 모듈이 슬롯에 주입하는 조각이므로
모듈 쪽에도 responsive.portable 오버라이드를 넣었다. 템플릿의 드로어 자리는
overflow-y-auto 라 옛 absolute 드롭다운이 잘리므로, 템플릿의 이커머스 모듈
의존 하한을 >=1.0.2 로 올렸다.

게시글 상단 네비는 성격이 다른 회귀였다. 게시판 이름이 길수록 flex 형제인
목록·이전글·다음글 버튼이 좁아지는데(87→73→62px), document.scrollWidth 는
내내 뷰포트와 같아 오버플로 검사로는 잡히지 않았다. 넘치는 게 아니라 줄어드는
회귀다. shrink-0 으로 버튼 폭을 고정하고, 모바일에서만 게시판 이름을 자기 줄로
올렸다. 버튼 3개 고정폭 261px + 21자 제목 323px = 584px < 태블릿 콘텐츠 735px
이므로 portable 이 아니라 mobile 스코프로 한정했다.

커밋 전 점검에서 audit 결함 두 건이 드러나 함께 고쳤다.

첫째, layout-* 룰 28개 중 27개가 appliesTo 에 확장 주입 조각 경로를 빠뜨려
조각 32개가 정적 검사에서 통째로 빠져 있었다. 실제 위반 60건이 은닉돼 있었고
그중 45건은 error 다. 다만 glob 만 넓히면 layout-grammar 의 root 화이트리스트가
조각의 정당한 키(target_layout/injections/extension_point/mode/priority)를 전부
오탐해 90건의 error 를 새로 만든다. 조각은 레이아웃이 아니라 별도 스키마이므로
extension-fragment 스키마를 신설해 오탐을 없애는 동시에 조각 고유의 결함(대상 키
누락으로 인한 silent drop, target_layout ↔ extension_point 동시 정의, 무동작 조각)을
새로 검출하게 했다.

둘째, Icon 의 w-N h-N 을 size prop 으로 바꾸라는 규정이 틀렸다. Icon 은 <i> 글리프라
박스 크기가 곧 font-size 인데, size prop 은 Font Awesome fa-* 로 매핑되어 상대값
0.875em + line-height 붕괴를 동반한다. 실측하면 w-4 h-4(16×16)가 fa-sm 에서
12.25×0.88 이 된다. 등가는 text-base 하나뿐이다. 앞선 작업에서 size:"sm" 으로
치환했던 2건을 되돌리고, 규정과 룰 메시지를 실측 등가표로 교체했다.
2026-07-10 19:27:25 +09:00

150 lines
3.6 KiB
JSON

{
"identifier": "sirsoft-basic",
"vendor": "sirsoft",
"name": {
"ko": "Basic",
"en": "Basic"
},
"version": "1.0.2",
"license": "MIT",
"description": {
"ko": "그누보드7 기본 사용자 템플릿",
"en": "Gnuboard7 default user template"
},
"type": "user",
"locales": [
"ko",
"en"
],
"author": {
"name": "sirsoft",
"email": "contact@sirsoft.com",
"url": "https://sirsoft.com"
},
"release_date": "2026-01-07",
"g7_version": ">=7.0.0",
"dependencies": {
"modules": {
"sirsoft-board": ">=1.0.0",
"sirsoft-ecommerce": ">=1.0.2",
"sirsoft-page": ">=1.0.0"
},
"plugins": {
"sirsoft-daum_postcode": ">=1.0.0"
}
},
"assets": {
"css": [
"dist/css/components.css"
],
"js": [
"dist/js/components.iife.js"
],
"fonts": [],
"images": []
},
"components": {
"basic": [
"a",
"button",
"checkbox",
"div",
"form",
"h1",
"h2",
"h3",
"h4",
"hr",
"icon",
"img",
"input",
"label",
"li",
"nav",
"p",
"section",
"select",
"span",
"svg",
"table",
"tbody",
"td",
"textarea",
"th",
"thead",
"tr",
"ul"
],
"composite": [
"header",
"footer",
"mobile-nav",
"product-card",
"rich-text-editor",
"image-gallery",
"quantity-selector",
"post-reactions",
"social-login-buttons",
"file-uploader",
"card",
"modal",
"toast",
"pagination",
"stat-card",
"status-badge",
"tab-navigation",
"empty-state",
"loading-spinner",
"breadcrumb",
"search-bar",
"dropdown"
],
"layout": [
"container",
"flex",
"grid",
"section"
]
},
"preview": {
"thumbnail": "preview/thumbnail.png",
"screenshots": [
"preview/screenshot1.png",
"preview/screenshot2.png"
]
},
"error_config": {
"layouts": {
"401": "errors/401",
"403": "errors/403",
"404": "errors/404",
"500": "errors/500",
"503": "errors/503",
"maintenance": "errors/maintenance"
}
},
"features": {
"dark_mode": true,
"responsive": true,
"multi_language": true,
"multi_currency": true
},
"github_url": "https://github.com/gnuboard/g7-template-sirsoft-basic",
"github_changelog_url": "https://github.com/gnuboard/g7-template-sirsoft-basic/blob/main/CHANGELOG.md",
"externals": [
{
"id": "fontawesome",
"type": "style",
"url": "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css",
"preconnect": "https://cdnjs.cloudflare.com"
},
{
"id": "pretendard",
"type": "webfont",
"url": "https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css",
"preconnect": "https://cdn.jsdelivr.net",
"crossorigin": "anonymous"
}
]
}