@newtil/materials 0.4.10 → 0.4.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/spec.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "$schema": "newtil-component-spec/1",
3
3
  "package": "@newtil/materials",
4
- "version": "0.4.10",
4
+ "version": "0.4.12",
5
5
  "generatedAt": "2026-09-17",
6
6
  "conventions": {
7
- "option": "클래스 `그룹:값` — 예 `btn:outlined`, `btn-size:sm`. 값이 없는 옵션은 flags.",
7
+ "option": "클래스 `그룹:값` — 예 `btn:outlined`, `btn-size:sm`. 값이 없는 옵션은 flags. slotOptions 는 슬롯 요소에 붙이는 옵션 (예 card-media 에 `card-media:square`).",
8
8
  "variable": "컴포넌트 요소 자신에 준다: 인라인 style 또는 `.scope .m3-x { --x-*: … }`. 부모 요소의 style 은 상속되지 않는다.",
9
9
  "order": "타입(class) → 옵션(options/flags) → 변수(variables). 변수는 옵션으로 안 될 때만.",
10
10
  "tokens": "색·간격·모서리·글꼴은 design-tokens 변수만. tokens.groups 에 없는 이름은 존재하지 않는다.",
@@ -16,6 +16,7 @@
16
16
  "class": "m3-badge",
17
17
  "description": " ====== M3 Badge\nM3 spec: small dot (6dp) or large with number (16dp height)\nPosition: top-right corner of parent (needs relative parent)\n사용법:\n <div style=\"position: relative; display: inline-flex;\">\n <i class=\"m3-icon icon:mail\"></i>",
18
18
  "slots": [],
19
+ "slotOptions": {},
19
20
  "options": {
20
21
  "badge": [
21
22
  "dot",
@@ -77,6 +78,7 @@
77
78
  "sheet-drag-handle",
78
79
  "sheet-headline"
79
80
  ],
81
+ "slotOptions": {},
80
82
  "options": {
81
83
  "sheet": [
82
84
  "modal"
@@ -178,6 +180,7 @@
178
180
  "class": "m3-btn",
179
181
  "description": " ====== M3 Button (Material Design 3 spec-aligned)\nSize : xs | sm (default) | md | lg | xl\nShape: round (default) | square\nType : filled (default) | elevated | tonal | outlined | text\nState: enabled (default) | disabled | hover | focus | active\nM3 spec source: material-components/material-web tokens",
180
182
  "slots": [],
183
+ "slotOptions": {},
181
184
  "options": {
182
185
  "btn-state": [
183
186
  "active",
@@ -376,6 +379,15 @@
376
379
  "card-subhead",
377
380
  "card-titles"
378
381
  ],
382
+ "slotOptions": {
383
+ "card-media": {
384
+ "card-media": [
385
+ "square",
386
+ "video",
387
+ "wide"
388
+ ]
389
+ }
390
+ },
379
391
  "options": {
380
392
  "card-state": [
381
393
  "disabled",
@@ -524,6 +536,12 @@
524
536
  "--card-media-width": {
525
537
  "default": "auto"
526
538
  },
539
+ "--card-media-ratio": {
540
+ "default": "auto"
541
+ },
542
+ "--card-media-badge-offset": {
543
+ "default": "var(--space-3)"
544
+ },
527
545
  "--card-actions-gap": {
528
546
  "default": "0.5rem"
529
547
  },
@@ -556,6 +574,7 @@
556
574
  "class": "m3-checkbox",
557
575
  "description": " ====== M3 Checkbox\nM3 spec: 18dp box, 2dp radius, primary when checked\nVariable API: --checkbox-* 변수로 커스텀 가능",
558
576
  "slots": [],
577
+ "slotOptions": {},
559
578
  "options": {
560
579
  "checkbox-mode": [
561
580
  "indeterminate"
@@ -651,6 +670,7 @@
651
670
  "chip-close",
652
671
  "chip-icon"
653
672
  ],
673
+ "slotOptions": {},
654
674
  "options": {
655
675
  "chip-state": [
656
676
  "disabled"
@@ -743,6 +763,7 @@
743
763
  "class": "m3-deco",
744
764
  "description": " ====== M3 Deco (Icon + Text Decoration)\n아이콘과 텍스트를 방향에 따라 조합하는 장식 컴포넌트.\nNavigation Bar, Navigation Rail, Tab Bar, 사이드바 메뉴 항목 등에 사용.\n사용법:\n <span class=\"m3-deco icon:home deco-pos:left\">홈</span>\n <span class=\"m3-deco icon:home deco-pos:top deco-active\">홈</span>",
745
765
  "slots": [],
766
+ "slotOptions": {},
746
767
  "options": {
747
768
  "deco-pos": [
748
769
  "bottom",
@@ -866,6 +887,7 @@
866
887
  "dialog-headline",
867
888
  "dialog-icon"
868
889
  ],
890
+ "slotOptions": {},
869
891
  "options": {},
870
892
  "flags": [
871
893
  "dialog-open"
@@ -951,6 +973,7 @@
951
973
  "class": "m3-divider",
952
974
  "description": " ====== M3 Divider (Material Design 3 spec-aligned)\nType : full-width (default) | inset | middle-inset | vertical\nM3 spec: 1dp height, outline-variant color\nRef: https://m3.material.io/components/divider/specs\nVariable API: --divider-* 변수로 모든 시각 요소 커스텀 가능",
953
975
  "slots": [],
976
+ "slotOptions": {},
954
977
  "options": {
955
978
  "divider": [
956
979
  "inset",
@@ -993,6 +1016,7 @@
993
1016
  "class": "m3-fab",
994
1017
  "description": " ====== M3 FAB (Material Design 3 spec-aligned)\nSize : fab (default 56dp) | fab:small (40dp) | fab:large (96dp) | fab:extended\nColor: surface (default) | primary | secondary | tertiary\nState: enabled (default) | hover | focus | active | disabled\nM3 spec: level3 shadow at rest, level4 on hover\nRef: https://m3.material.io/components/floating-action-button/specs",
995
1018
  "slots": [],
1019
+ "slotOptions": {},
996
1020
  "options": {
997
1021
  "fab-state": [
998
1022
  "active",
@@ -1102,6 +1126,25 @@
1102
1126
  "form-headline",
1103
1127
  "form-message"
1104
1128
  ],
1129
+ "slotOptions": {
1130
+ "form-actions": {
1131
+ "form-actions": [
1132
+ "between",
1133
+ "center",
1134
+ "end",
1135
+ "start",
1136
+ "stretch"
1137
+ ]
1138
+ },
1139
+ "form-message": {
1140
+ "form-message": [
1141
+ "error",
1142
+ "info",
1143
+ "success",
1144
+ "warning"
1145
+ ]
1146
+ }
1147
+ },
1105
1148
  "options": {
1106
1149
  "form": [
1107
1150
  "compact",
@@ -1185,11 +1228,58 @@
1185
1228
  },
1186
1229
  "usage": "<form class=\"m3-form\" style=\"max-width: 22rem;\">\n <div class=\"form-header\">\n <h2 class=\"form-headline\">로그인</h2>\n <p class=\"form-description\">계정 정보를 입력하세요.</p>\n </div>\n <div class=\"form-message form-message:error\">\n 이메일 또는 비밀번호가 올바르지 않습니다.\n </div>\n <div class=\"form-fields\">\n <div class=\"m3-text-field field:outlined\">\n <input type=\"email\" placeholder=\" \">\n <label>이메일</label>\n </div>\n <div class=\"m3-text-field field:outlined\">\n <input type=\"password\" placeholder=\" \">\n <label>비밀번호</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button type=\"button\" class=\"m3-btn btn:text\">취소</button>\n <button type=\"button\" class=\"m3-btn\">로그인</button>\n </div>\n</form>"
1187
1230
  },
1231
+ {
1232
+ "name": "grid",
1233
+ "class": "m3-grid",
1234
+ "description": " ====== Grid (newtil 확장)\n카드·항목을 반응형 격자로 놓는 콘텐츠 블록. \"가구를 방에 놓는 틀\" 이다.\nM3 스펙에는 없다. 안에 무엇이 들어가든(m3-card, m3-list 항목, 이미지) 격자만 책임진다.\n사용법:\n <ul class=\"m3-grid grid-cols:3\">\n <li class=\"m3-card card:outlined\">…</li>",
1235
+ "slots": [],
1236
+ "slotOptions": {},
1237
+ "options": {
1238
+ "grid-cols": [
1239
+ "1",
1240
+ "2",
1241
+ "3",
1242
+ "4",
1243
+ "5",
1244
+ "6",
1245
+ "auto"
1246
+ ],
1247
+ "grid-gap": [
1248
+ "1",
1249
+ "2",
1250
+ "3",
1251
+ "4",
1252
+ "5"
1253
+ ]
1254
+ },
1255
+ "flags": [],
1256
+ "variables": {
1257
+ "--grid-cols": {
1258
+ "default": "3"
1259
+ },
1260
+ "--grid-cols-md": {
1261
+ "default": "2"
1262
+ },
1263
+ "--grid-cols-sm": {
1264
+ "default": "1"
1265
+ },
1266
+ "--grid-gap": {
1267
+ "default": "var(--space-6)",
1268
+ "note": "20px"
1269
+ },
1270
+ "--grid-min": {
1271
+ "default": "16rem",
1272
+ "note": "grid-cols:auto 일 때 최소 열 너비"
1273
+ }
1274
+ },
1275
+ "usage": "<ul class=\"m3-grid grid-cols:3\">\n <li class=\"m3-card card:outlined card-padding:self\">카드 1</li>\n <li class=\"m3-card card:outlined card-padding:self\">카드 2</li>\n <li class=\"m3-card card:outlined card-padding:self\">카드 3</li>\n <li class=\"m3-card card:outlined card-padding:self\">카드 4</li>\n <li class=\"m3-card card:outlined card-padding:self\">카드 5</li>\n <li class=\"m3-card card:outlined card-padding:self\">카드 6</li>\n</ul>"
1276
+ },
1188
1277
  {
1189
1278
  "name": "icon-btn",
1190
1279
  "class": "m3-icon-btn",
1191
1280
  "description": " ====== M3 Icon Button (Material Design 3 spec-aligned)\nType : standard (default) | filled | tonal | outlined\nToggle: icon-btn-toggle:selected | icon-btn-toggle:unselected\nState: enabled (default) | hover | focus | active | disabled\nM3 spec: 48dp touch target, 40dp visible container\nRef: https://m3.material.io/components/icon-buttons/specs",
1192
1281
  "slots": [],
1282
+ "slotOptions": {},
1193
1283
  "options": {
1194
1284
  "icon-btn-state": [
1195
1285
  "active",
@@ -1273,6 +1363,7 @@
1273
1363
  "class": "m3-icon",
1274
1364
  "description": " ====== M3 Icon (Material Symbols)\nMaterial Symbols 폰트 기반 아이콘 컴포넌트.\n아이콘 코드포인트는 icon-essential.css (또는 사용자 정의)에서 ::before content로 제공.\n사용법:\n <i class=\"m3-icon icon:home\"></i>\n <i class=\"m3-icon icon:search icon-style:rounded icon-filled:1\"></i>",
1275
1365
  "slots": [],
1366
+ "slotOptions": {},
1276
1367
  "options": {
1277
1368
  "icon-style": [
1278
1369
  "outlined",
@@ -1382,6 +1473,7 @@
1382
1473
  "layout-content",
1383
1474
  "layout-header"
1384
1475
  ],
1476
+ "slotOptions": {},
1385
1477
  "options": {
1386
1478
  "layout": [
1387
1479
  "fixed-drawer",
@@ -1447,6 +1539,14 @@
1447
1539
  "list-divider",
1448
1540
  "list-item"
1449
1541
  ],
1542
+ "slotOptions": {
1543
+ "list-divider": {
1544
+ "list-divider": [
1545
+ "full",
1546
+ "inset"
1547
+ ]
1548
+ }
1549
+ },
1450
1550
  "options": {
1451
1551
  "list-size": [
1452
1552
  "compact",
@@ -1568,6 +1668,7 @@
1568
1668
  "menu-divider",
1569
1669
  "menu-item"
1570
1670
  ],
1671
+ "slotOptions": {},
1571
1672
  "options": {},
1572
1673
  "flags": [
1573
1674
  "menu-open"
@@ -1665,6 +1766,7 @@
1665
1766
  "class": "m3-nav-bar",
1666
1767
  "description": " ====== M3 Navigation Bar (Bottom Navigation)\nM3 spec: 80dp height, fixed bottom, 3-5 destinations, surface bg\n내부 아이템은 m3-deco 컴포넌트를 사용하여 icon+text 렌더링.\n사용법:\n <nav class=\"m3-nav-bar\">\n <a href=\"#\" class=\"m3-deco icon:home deco-pos:top deco-active\">홈</a>",
1667
1768
  "slots": [],
1769
+ "slotOptions": {},
1668
1770
  "options": {
1669
1771
  "nav-bar": [
1670
1772
  "elevated",
@@ -1731,6 +1833,7 @@
1731
1833
  "drawer-item",
1732
1834
  "drawer-section-header"
1733
1835
  ],
1836
+ "slotOptions": {},
1734
1837
  "options": {
1735
1838
  "drawer": [
1736
1839
  "modal"
@@ -1866,6 +1969,7 @@
1866
1969
  "rail-header",
1867
1970
  "rail-items"
1868
1971
  ],
1972
+ "slotOptions": {},
1869
1973
  "options": {
1870
1974
  "rail": [
1871
1975
  "elevated",
@@ -1935,11 +2039,105 @@
1935
2039
  },
1936
2040
  "usage": "<div class=\"m3-layout\">\n <!-- Nav Drawer (Expanded에서 표시) -->\n <nav class=\"m3-nav-drawer layout-drawer\">\n <div class=\"drawer-header\">\n <h2 class=\"drawer-headline\">메뉴</h2>\n </div>\n <div class=\"drawer-content\">\n <a href=\"#\" class=\"drawer-item drawer-item-active\">\n <i class=\"m3-icon icon:home\"></i>\n <span class=\"drawer-label\">홈</span>\n </a>\n <a href=\"#\" class=\"drawer-item\">\n <i class=\"m3-icon icon:search\"></i>\n <span class=\"drawer-label\">검색</span>\n </a>\n <a href=\"#\" class=\"drawer-item\">\n <i class=\"m3-icon icon:settings\"></i>\n <span class=\"drawer-label\">설정</span>\n </a>\n </div>\n </nav>\n\n <!-- Nav Rail (Medium에서 표시) -->\n <nav class=\"m3-nav-rail layout-rail\">\n <div class=\"rail-header\">\n <button class=\"m3-fab fab:small\"><i class=\"m3-icon icon:edit\"></i></button>\n </div>\n <div class=\"rail-items\">\n <a href=\"#\" class=\"m3-deco icon:home deco-pos:top deco-active\">홈</a>\n <a href=\"#\" class=\"m3-deco icon:search deco-pos:top\">검색</a>\n <a href=\"#\" class=\"m3-deco icon:settings deco-pos:top\">설정</a>\n </div>\n </nav>\n\n <!-- Main Content Area -->\n <div class=\"layout-main\">\n <header class=\"m3-top-app-bar layout-header\">\n <button class=\"bar-leading\"><i class=\"m3-icon icon:menu\"></i></button>\n <h1 class=\"bar-title\">페이지 제목</h1>\n <div class=\"bar-trailing\">\n <button><i class=\"m3-icon icon:search\"></i></button>\n </div>\n </header>\n <main class=\"layout-content\">\n <h2>콘텐츠 영역</h2>\n <p>페이지의 주요 콘텐츠가 여기에 들어갑니다.</p>\n </main>\n </div>\n\n <!-- Nav Bar (Compact에서 표시) -->\n <nav class=\"m3-nav-bar layout-bar\">\n <a href=\"#\" class=\"m3-deco icon:home deco-pos:top deco-active\">홈</a>\n <a href=\"#\" class=\"m3-deco icon:search deco-pos:top\">검색</a>\n <a href=\"#\" class=\"m3-deco icon:settings deco-pos:top\">설정</a>\n </nav>\n</div>"
1937
2041
  },
2042
+ {
2043
+ "name": "pager",
2044
+ "class": "m3-pager",
2045
+ "description": " ====== Pager (newtil 확장)\nM3 스펙에는 페이지네이션 컴포넌트가 없다. 목록 아래 \"이전 · 1 2 3 · 다음\" 을 표준화한다.\n사용법:\n <nav class=\"m3-pager\" aria-label=\"페이지\">\n <a class=\"pager-item pager-prev\" href=\"…\" aria-disabled=\"true\">이전</a>\n <a class=\"pager-item\" href=\"…\" aria-current=\"page\">1</a>",
2046
+ "slots": [
2047
+ "pager-ellipsis",
2048
+ "pager-item"
2049
+ ],
2050
+ "slotOptions": {},
2051
+ "options": {
2052
+ "pager": [
2053
+ "text"
2054
+ ],
2055
+ "pager-align": [
2056
+ "center",
2057
+ "end",
2058
+ "start"
2059
+ ],
2060
+ "pager-size": [
2061
+ "lg",
2062
+ "md",
2063
+ "sm"
2064
+ ]
2065
+ },
2066
+ "flags": [],
2067
+ "variables": {
2068
+ "--pager-gap": {
2069
+ "default": "0.375rem"
2070
+ },
2071
+ "--pager-justify": {
2072
+ "default": "center"
2073
+ },
2074
+ "--pager-margin": {
2075
+ "default": "0"
2076
+ },
2077
+ "--pager-item-height": {
2078
+ "default": "2.25rem",
2079
+ "note": "36px"
2080
+ },
2081
+ "--pager-item-min-width": {
2082
+ "default": "var(--pager-item-height)"
2083
+ },
2084
+ "--pager-item-padding": {
2085
+ "default": "0 0.75rem"
2086
+ },
2087
+ "--pager-item-font-size": {
2088
+ "default": "0.875rem"
2089
+ },
2090
+ "--pager-item-font-weight": {
2091
+ "default": "var(--font-weight-medium)"
2092
+ },
2093
+ "--pager-item-border-radius": {
2094
+ "default": "var(--radius-3)"
2095
+ },
2096
+ "--pager-item-border-width": {
2097
+ "default": "0.0625rem"
2098
+ },
2099
+ "--pager-item-border-color": {
2100
+ "default": "var(--color-border)"
2101
+ },
2102
+ "--pager-item-background": {
2103
+ "default": "var(--color-surface)"
2104
+ },
2105
+ "--pager-item-color": {
2106
+ "default": "var(--color-text)"
2107
+ },
2108
+ "--pager-item-hover-background": {
2109
+ "default": "var(--color-surface-1)"
2110
+ },
2111
+ "--pager-current-background": {
2112
+ "default": "var(--color-text)"
2113
+ },
2114
+ "--pager-current-color": {
2115
+ "default": "var(--color-surface)"
2116
+ },
2117
+ "--pager-current-border-color": {
2118
+ "default": "var(--color-text)"
2119
+ },
2120
+ "--pager-current-font-weight": {
2121
+ "default": "var(--font-weight-bold)"
2122
+ },
2123
+ "--pager-disabled-color": {
2124
+ "default": "var(--color-text-subtle)"
2125
+ },
2126
+ "--pager-disabled-opacity": {
2127
+ "default": "1"
2128
+ },
2129
+ "--pager-transition": {
2130
+ "default": "background-color var(--duration-fast) var(--ease-in-out), color var(--duration-fast) var(--ease-in-out)"
2131
+ }
2132
+ },
2133
+ "usage": "<nav class=\"m3-pager\" aria-label=\"페이지\">\n <a class=\"pager-item pager-prev\" href=\"#\" aria-disabled=\"true\">이전</a>\n <a class=\"pager-item\" href=\"#\" aria-current=\"page\">1</a>\n <a class=\"pager-item\" href=\"#\">2</a>\n <a class=\"pager-item\" href=\"#\">3</a>\n <span class=\"pager-ellipsis\">…</span>\n <a class=\"pager-item\" href=\"#\">12</a>\n <a class=\"pager-item pager-next\" href=\"#\">다음</a>\n</nav>"
2134
+ },
1938
2135
  {
1939
2136
  "name": "progress",
1940
2137
  "class": "m3-progress",
1941
2138
  "description": " ====== M3 Progress Indicator\nType: linear (default) | circular\nM3 spec: primary track color, 4dp height (linear), 48dp (circular)\n사용법:\n <div class=\"m3-progress\" style=\"--progress-value: 60%;\"></div>\n <div class=\"m3-progress progress:indeterminate\"></div>",
1942
2139
  "slots": [],
2140
+ "slotOptions": {},
1943
2141
  "options": {
1944
2142
  "progress": [
1945
2143
  "circular",
@@ -1990,6 +2188,7 @@
1990
2188
  "class": "m3-radio",
1991
2189
  "description": " ====== M3 Radio Button\nM3 spec: 20dp outer ring, 10dp inner dot, primary when selected\nVariable API: --radio-* 변수로 커스텀 가능",
1992
2190
  "slots": [],
2191
+ "slotOptions": {},
1993
2192
  "options": {
1994
2193
  "radio-color": [
1995
2194
  "danger",
@@ -2077,11 +2276,133 @@
2077
2276
  },
2078
2277
  "usage": "<label class=\"m3-radio\">\n <input type=\"radio\" name=\"option\" value=\"1\">\n <span>옵션 1</span>\n</label>\n\n<label class=\"m3-radio\">\n <input type=\"radio\" name=\"option\" value=\"2\">\n <span>옵션 2</span>\n</label>\n\n<label class=\"m3-radio\">\n <input type=\"radio\" name=\"option\" value=\"3\" checked>\n <span>옵션 3 (선택됨)</span>\n</label>"
2079
2278
  },
2279
+ {
2280
+ "name": "site",
2281
+ "class": "m3-site",
2282
+ "description": " ====== Site (newtil 확장)\n공개 사이트의 \"방\": 상단 헤더 · 본문 · 푸터가 세로로 흐르고 본문은 가운데 컨테이너 안에 놓인다.\nm3-layout(드로어 앱 셸)과 다른 종류의 방이다. M3 스펙에는 없다.\n사용법:\n <div class=\"m3-site\">\n <header class=\"site-header\">",
2283
+ "slots": [
2284
+ "site-actions",
2285
+ "site-aside",
2286
+ "site-body",
2287
+ "site-container",
2288
+ "site-content",
2289
+ "site-copyright",
2290
+ "site-footer",
2291
+ "site-footer-inner",
2292
+ "site-footer-links",
2293
+ "site-header",
2294
+ "site-header-inner",
2295
+ "site-logo",
2296
+ "site-main",
2297
+ "site-nav"
2298
+ ],
2299
+ "slotOptions": {
2300
+ "site-body": {
2301
+ "site-body": [
2302
+ "aside",
2303
+ "aside-end"
2304
+ ]
2305
+ }
2306
+ },
2307
+ "options": {
2308
+ "site-width": [
2309
+ "default",
2310
+ "narrow",
2311
+ "wide"
2312
+ ]
2313
+ },
2314
+ "flags": [],
2315
+ "variables": {
2316
+ "--site-max-width": {
2317
+ "default": "70rem"
2318
+ },
2319
+ "--site-gutter": {
2320
+ "default": "var(--space-7)",
2321
+ "note": "24px"
2322
+ },
2323
+ "--site-background": {
2324
+ "default": "var(--color-surface-1)"
2325
+ },
2326
+ "--site-header-height": {
2327
+ "default": "4rem",
2328
+ "note": "64px"
2329
+ },
2330
+ "--site-header-background": {
2331
+ "default": "var(--color-surface)"
2332
+ },
2333
+ "--site-header-border": {
2334
+ "default": "0.0625rem solid var(--color-border)"
2335
+ },
2336
+ "--site-header-gap": {
2337
+ "default": "var(--space-8)"
2338
+ },
2339
+ "--site-logo-size": {
2340
+ "default": "var(--font-size-heading-sm)"
2341
+ },
2342
+ "--site-logo-weight": {
2343
+ "default": "var(--font-weight-bold)"
2344
+ },
2345
+ "--site-logo-color": {
2346
+ "default": "var(--color-primary)"
2347
+ },
2348
+ "--site-nav-gap": {
2349
+ "default": "var(--space-6)"
2350
+ },
2351
+ "--site-nav-size": {
2352
+ "default": "var(--font-size-body-sm)"
2353
+ },
2354
+ "--site-nav-color": {
2355
+ "default": "var(--color-text-muted)"
2356
+ },
2357
+ "--site-nav-color-active": {
2358
+ "default": "var(--color-text)"
2359
+ },
2360
+ "--site-nav-weight-active": {
2361
+ "default": "var(--font-weight-semibold)"
2362
+ },
2363
+ "--site-actions-gap": {
2364
+ "default": "var(--space-3)"
2365
+ },
2366
+ "--site-main-padding-top": {
2367
+ "default": "var(--space-9)"
2368
+ },
2369
+ "--site-main-padding-bottom": {
2370
+ "default": "var(--space-11)"
2371
+ },
2372
+ "--site-aside-width": {
2373
+ "default": "12.5rem",
2374
+ "note": "200px"
2375
+ },
2376
+ "--site-body-gap": {
2377
+ "default": "var(--space-8)"
2378
+ },
2379
+ "--site-aside-gap": {
2380
+ "default": "var(--space-5)"
2381
+ },
2382
+ "--site-footer-padding": {
2383
+ "default": "var(--space-8) 0"
2384
+ },
2385
+ "--site-footer-border": {
2386
+ "default": "0.0625rem solid var(--color-border)"
2387
+ },
2388
+ "--site-footer-size": {
2389
+ "default": "var(--font-size-body-sm)"
2390
+ },
2391
+ "--site-footer-color": {
2392
+ "default": "var(--color-text-muted)"
2393
+ },
2394
+ "--site-footer-links-gap": {
2395
+ "default": "var(--space-5)"
2396
+ }
2397
+ },
2398
+ "usage": "<div class=\"m3-site\" style=\"min-height: 22rem;\">\n <header class=\"site-header\">\n <div class=\"site-container site-header-inner\">\n <a class=\"site-logo\" href=\"#\">NCafe</a>\n <nav class=\"site-nav\"><a href=\"#\" aria-current=\"page\">메뉴</a><a href=\"#\">소개</a><a href=\"#\">장바구니</a></nav>\n <div class=\"site-actions\"><button class=\"m3-btn btn:outlined btn-size:xs\">로그인</button><button class=\"m3-btn btn-size:xs\">회원가입</button></div>\n </div>\n </header>\n <main class=\"site-main\">\n <div class=\"site-container\">\n <div class=\"site-body site-body:aside\">\n <aside class=\"site-aside\"><div class=\"m3-card card:outlined card-padding:self\">사이드</div></aside>\n <div class=\"site-content\"><div class=\"m3-card card:outlined card-padding:self\">본문</div></div>\n </div>\n </div>\n </main>\n <footer class=\"site-footer\">\n <div class=\"site-container site-footer-inner\">\n <p class=\"site-copyright\">© 2026 NCafe</p>\n <nav class=\"site-footer-links\"><a href=\"#\">소개</a><a href=\"#\">이용약관</a></nav>\n </div>\n </footer>\n</div>"
2399
+ },
2080
2400
  {
2081
2401
  "name": "slider",
2082
2402
  "class": "m3-slider",
2083
2403
  "description": " ====== M3 Slider\nM3 spec: Track 4dp height, handle 20dp, active track uses primary\nTypes: continuous (default), discrete (with tick marks)\n사용법:\n <div class=\"m3-slider\">\n <input type=\"range\" min=\"0\" max=\"100\" value=\"50\">",
2084
2404
  "slots": [],
2405
+ "slotOptions": {},
2085
2406
  "options": {
2086
2407
  "slider": [
2087
2408
  "discrete"
@@ -2175,6 +2496,7 @@
2175
2496
  "snackbar-close",
2176
2497
  "snackbar-text"
2177
2498
  ],
2499
+ "slotOptions": {},
2178
2500
  "options": {
2179
2501
  "snackbar-color": [
2180
2502
  "danger",
@@ -2262,6 +2584,7 @@
2262
2584
  "slots": [
2263
2585
  "switch-label"
2264
2586
  ],
2587
+ "slotOptions": {},
2265
2588
  "options": {
2266
2589
  "switch-color": [
2267
2590
  "danger",
@@ -2361,6 +2684,7 @@
2361
2684
  "slots": [
2362
2685
  "tab-item"
2363
2686
  ],
2687
+ "slotOptions": {},
2364
2688
  "options": {
2365
2689
  "tabs": [
2366
2690
  "full",
@@ -2455,6 +2779,7 @@
2455
2779
  "field-label",
2456
2780
  "field-supporting"
2457
2781
  ],
2782
+ "slotOptions": {},
2458
2783
  "options": {
2459
2784
  "field": [
2460
2785
  "outlined"
@@ -2686,7 +3011,51 @@
2686
3011
  "default": "all var(--duration-fast) var(--ease-in-out)"
2687
3012
  }
2688
3013
  },
2689
- "usage": "<div style=\"display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: center;\">\n <button class=\"m3-btn\">저장</button>\n <div class=\"m3-text-field\" style=\"max-width: 14rem;\">\n <input type=\"text\" placeholder=\" \">\n <label>이름</label>\n </div>\n <label class=\"m3-checkbox\"><input type=\"checkbox\" checked> 동의</label>\n</div>"
3014
+ "usage": "<div class=\"m3-toolbar\">\n <div class=\"toolbar-start\">총 <strong>31</strong>개의 메뉴</div>\n <div class=\"toolbar-end\">\n <div class=\"m3-text-field field:outlined field-label:none\"><select><option>인기순</option><option>최신순</option></select></div>\n </div>\n</div>\n<form class=\"m3-toolbar toolbar:fill\">\n <div class=\"m3-text-field field:outlined field-label:none\"><select><option>전체 카테고리</option></select></div>\n <div class=\"m3-text-field field:outlined field-label:none toolbar-grow\"><input type=\"search\" placeholder=\"메뉴 이름 검색\"></div>\n <button type=\"button\" class=\"m3-btn btn:outlined\">검색</button>\n</form>"
3015
+ },
3016
+ {
3017
+ "name": "toolbar",
3018
+ "class": "m3-toolbar",
3019
+ "description": " ====== Toolbar (newtil 확장)\n목록 위·표 위에 놓이는 한 줄: 왼쪽 정보(건수·선택 상태) · 오른쪽 동작(정렬·필터·버튼).\nM3 스펙에는 없다. 필터 바(입력 여러 개가 한 줄)도 같은 블록으로 만든다.\n사용법:\n <div class=\"m3-toolbar\">\n <div class=\"toolbar-start\">총 <strong>31</strong>개</div>",
3020
+ "slots": [
3021
+ "toolbar-end",
3022
+ "toolbar-start"
3023
+ ],
3024
+ "slotOptions": {},
3025
+ "options": {
3026
+ "toolbar": [
3027
+ "card",
3028
+ "fill"
3029
+ ]
3030
+ },
3031
+ "flags": [],
3032
+ "variables": {
3033
+ "--toolbar-gap": {
3034
+ "default": "var(--space-3)"
3035
+ },
3036
+ "--toolbar-margin": {
3037
+ "default": "0 0 var(--space-5)"
3038
+ },
3039
+ "--toolbar-padding": {
3040
+ "default": "0"
3041
+ },
3042
+ "--toolbar-font-size": {
3043
+ "default": "var(--font-size-body-sm)"
3044
+ },
3045
+ "--toolbar-color": {
3046
+ "default": "var(--color-text-muted)"
3047
+ },
3048
+ "--toolbar-strong-color": {
3049
+ "default": "var(--color-text)"
3050
+ },
3051
+ "--toolbar-border-bottom": {
3052
+ "default": "none"
3053
+ },
3054
+ "--toolbar-min-height": {
3055
+ "default": "2.5rem"
3056
+ }
3057
+ },
3058
+ "usage": "<div class=\"m3-toolbar\">\n <div class=\"toolbar-start\">총 <strong>31</strong>개의 메뉴</div>\n <div class=\"toolbar-end\">\n <div class=\"m3-text-field field:outlined field-label:none\"><select><option>인기순</option><option>최신순</option></select></div>\n </div>\n</div>\n<form class=\"m3-toolbar toolbar:fill\">\n <div class=\"m3-text-field field:outlined field-label:none\"><select><option>전체 카테고리</option></select></div>\n <div class=\"m3-text-field field:outlined field-label:none toolbar-grow\"><input type=\"search\" placeholder=\"메뉴 이름 검색\"></div>\n <button type=\"button\" class=\"m3-btn btn:outlined\">검색</button>\n</form>"
2690
3059
  },
2691
3060
  {
2692
3061
  "name": "tooltip",
@@ -2697,6 +3066,7 @@
2697
3066
  "tooltip-content",
2698
3067
  "tooltip-title"
2699
3068
  ],
3069
+ "slotOptions": {},
2700
3070
  "options": {
2701
3071
  "tooltip": [
2702
3072
  "rich"
@@ -2800,6 +3170,7 @@
2800
3170
  "bar-title",
2801
3171
  "bar-trailing"
2802
3172
  ],
3173
+ "slotOptions": {},
2803
3174
  "options": {
2804
3175
  "bar": [
2805
3176
  "center",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtil/materials",
3
- "version": "0.4.10",
3
+ "version": "0.4.12",
4
4
  "description": "Material Design 3 구현 CSS 라이브러리 — m3- prefix 기반 컴포넌트 (버튼, 카드, 다이얼로그, 네비 등). @newtil/design-tokens 위에 동작.",
5
5
  "publishConfig": {
6
6
  "access": "public"