@stn-uiux/pub-ui 0.1.75 → 0.1.77

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.
@@ -0,0 +1,149 @@
1
+ import {
2
+ STN_LAYER0_BACKGROUND_DEMO_IMAGES
3
+ } from "./chunk-NGUMR3D6.js";
4
+
5
+ // src/data/stnLogin.ts
6
+ var STN_LOGIN_FIGMA = "40004209:78293";
7
+ var STN_LOGIN_ASSETS = {
8
+ backgroundLight: STN_LAYER0_BACKGROUND_DEMO_IMAGES.loginLight,
9
+ backgroundDark: STN_LAYER0_BACKGROUND_DEMO_IMAGES.loginDark
10
+ };
11
+ var STN_LOGIN_INTRO = "\uB85C\uADF8\uC778 \uD398\uC774\uC9C0\uB294 LoginPageScaffold(\uD398\uC774\uC9C0) + StnLayer0BackgroundPreset(\uBC14\uB2E5) + StnLoginCard(\uCE74\uB4DC)\uC785\uB2C8\uB2E4. \uBC30\uACBD\xB7\uB85C\uACE0\uB294 \uAC01 \uCEF4\uD3EC\uB10C\uD2B8\uC758 variant\uB97C \uBC14\uAFD4 \uC7A1\uC2B5\uB2C8\uB2E4. onLogin\uB9CC \uB118\uAE30\uBA74 \uAE30\uBCF8 \uC870\uB9BD(login \uBC30\uACBD \xB7 \uAC00\uB85C XL \uB85C\uACE0)\uC774 \uB4E4\uC5B4\uAC11\uB2C8\uB2E4.";
12
+ var STN_LOGIN_USAGE = `import { useState, type FormEvent } from 'react'
13
+ import {
14
+ LoginPageScaffold,
15
+ StnLayer0BackgroundPreset,
16
+ StnLoginCard,
17
+ StnLoginBrandStack,
18
+ StnLoginFormStack,
19
+ StnLoginFormFields,
20
+ StnLoginFormLinks,
21
+ StnLoginTextField,
22
+ StnLogo,
23
+ StnSegmented,
24
+ StnButton,
25
+ } from '@stn-uiux/pub-ui-react'
26
+
27
+ function LoginPage() {
28
+ const [mode, setMode] = useState<'normal' | 'social'>('normal')
29
+ const [userId, setUserId] = useState('')
30
+ const [password, setPassword] = useState('')
31
+
32
+ function handleSubmit(e: FormEvent) {
33
+ e.preventDefault()
34
+ // \uB85C\uADF8\uC778 API \uD638\uCD9C
35
+ }
36
+
37
+ return (
38
+ <LoginPageScaffold
39
+ layer0={<StnLayer0BackgroundPreset variant="login" />}
40
+ cardGlow={true}
41
+ >
42
+ <StnLoginCard
43
+ glow={true}
44
+ brand={
45
+ <StnLoginBrandStack>
46
+ <StnLogo variant="vertical" size="xl" />
47
+ <p className="stn-login-card__caption">Server Resource Monitoring</p>
48
+ </StnLoginBrandStack>
49
+ }
50
+ >
51
+ <StnLoginFormStack onSubmit={handleSubmit}>
52
+ <StnSegmented
53
+ aria-label="\uB85C\uADF8\uC778 \uBC29\uC2DD"
54
+ value={mode}
55
+ onChange={(v) => setMode(v as 'normal' | 'social')}
56
+ options={[
57
+ { value: 'normal', label: '\uC77C\uBC18 \uB85C\uADF8\uC778' },
58
+ { value: 'social', label: '\uC18C\uC15C \uB85C\uADF8\uC778' },
59
+ ]}
60
+ />
61
+ {mode === 'normal' && (
62
+ <StnLoginFormFields>
63
+ <StnLoginTextField
64
+ icon="line/user"
65
+ name="username"
66
+ autoComplete="username"
67
+ placeholder="\uC544\uC774\uB514"
68
+ value={userId}
69
+ onChange={(e) => setUserId(e.target.value)}
70
+ aria-label="\uC544\uC774\uB514"
71
+ />
72
+ <StnLoginTextField
73
+ icon="line/lock"
74
+ type="password"
75
+ name="password"
76
+ autoComplete="current-password"
77
+ placeholder="\uBE44\uBC00\uBC88\uD638"
78
+ value={password}
79
+ onChange={(e) => setPassword(e.target.value)}
80
+ aria-label="\uBE44\uBC00\uBC88\uD638"
81
+ />
82
+ </StnLoginFormFields>
83
+ )}
84
+ <StnButton type="submit" size="xl" fullWidth>
85
+ \uB85C\uADF8\uC778
86
+ </StnButton>
87
+ <StnLoginFormLinks>
88
+ <a href="#signup">\uD68C\uC6D0\uAC00\uC785</a>
89
+ <a href="#recover">\uC544\uC774\uB514 / \uBE44\uBC00\uBC88\uD638 \uCC3E\uAE30</a>
90
+ </StnLoginFormLinks>
91
+ </StnLoginFormStack>
92
+ </StnLoginCard>
93
+ </LoginPageScaffold>
94
+ )
95
+ }`;
96
+ var STN_LOGIN_HTML = `<div class="stn-wrap stn-page--login" data-stn-layer-mode="v2">
97
+ <div class="stn-layer0-bg image" aria-hidden="true"><!-- L0 login --></div>
98
+ <main class="stn-elev-1" data-stn-layer-role="content">
99
+ <div class="stn-login">
100
+ <div class="stn-login-card">
101
+ <div class="stn-login-card__brand">
102
+ <div class="stn-login-brand-stack">
103
+ <span class="stn-logo horizontal xl">
104
+ <img class="stn-logo__img light" src="/@assets/svg/brand/infomap-logo-full.png" alt="InfoMap SRM" />
105
+ <img class="stn-logo__img dark" src="/@assets/svg/brand/infomap-logo-full-dark.png" alt="" />
106
+ </span>
107
+ <p class="stn-login-card__caption">Server Resource Monitoring</p>
108
+ </div>
109
+ </div>
110
+ <div class="stn-login-card__form">
111
+ <form class="stn-login-form-stack">
112
+ <div class="stn-segmented" role="radiogroup" aria-label="\uB85C\uADF8\uC778 \uBC29\uC2DD">
113
+ <button type="button" class="stn-segmented__item active" role="radio" aria-checked="true">\uC77C\uBC18 \uB85C\uADF8\uC778</button>
114
+ <button type="button" class="stn-segmented__item" role="radio" aria-checked="false">\uC18C\uC15C \uB85C\uADF8\uC778</button>
115
+ </div>
116
+ <div class="stn-login-form-fields">
117
+ <div class="stn-login-text-field">
118
+ <span class="stn-icon-box md stn-login-text-field__icon-box" aria-hidden>
119
+ <span class="stn-icon stn-icon--masked" style="background-color: currentColor; width: 16px; height: 16px;"></span>
120
+ </span>
121
+ <input type="text" class="stn-login-text-field__control" placeholder="\uC544\uC774\uB514" autocomplete="username" />
122
+ </div>
123
+ <div class="stn-login-text-field">
124
+ <span class="stn-icon-box md stn-login-text-field__icon-box" aria-hidden>
125
+ <span class="stn-icon stn-icon--masked" style="background-color: currentColor; width: 16px; height: 16px;"></span>
126
+ </span>
127
+ <input type="password" class="stn-login-text-field__control" placeholder="\uBE44\uBC00\uBC88\uD638" autocomplete="current-password" />
128
+ </div>
129
+ </div>
130
+ <button type="submit" class="stn-btn contained xl full">\uB85C\uADF8\uC778</button>
131
+ <nav class="stn-login-form-links" aria-label="\uACC4\uC815 \uAD00\uB9AC \uB9C1\uD06C">
132
+ <a href="#signup">\uD68C\uC6D0\uAC00\uC785</a>
133
+ <a href="#recover">\uC544\uC774\uB514 / \uBE44\uBC00\uBC88\uD638 \uCC3E\uAE30</a>
134
+ </nav>
135
+ </form>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ </main>
140
+ </div>`;
141
+
142
+ export {
143
+ STN_LOGIN_FIGMA,
144
+ STN_LOGIN_ASSETS,
145
+ STN_LOGIN_INTRO,
146
+ STN_LOGIN_USAGE,
147
+ STN_LOGIN_HTML
148
+ };
149
+ //# sourceMappingURL=chunk-3CYSR7V4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/stnLogin.ts"],"sourcesContent":["/**\n * Pub login screen — Figma 40004209:78293\n * L0 image + L1 centered card · no L2 GNB\n */\n\nimport { STN_LAYER0_BACKGROUND_DEMO_IMAGES } from './stnLayer0BackgroundAssets'\n\nexport const STN_LOGIN_FIGMA = '40004209:78293'\n\nexport const STN_LOGIN_ASSETS = {\n backgroundLight: STN_LAYER0_BACKGROUND_DEMO_IMAGES.loginLight,\n backgroundDark: STN_LAYER0_BACKGROUND_DEMO_IMAGES.loginDark,\n} as const\n\nexport const STN_LOGIN_INTRO =\n '로그인 페이지는 LoginPageScaffold(페이지) + StnLayer0BackgroundPreset(바닥) + StnLoginCard(카드)입니다. 배경·로고는 각 컴포넌트의 variant를 바꿔 잡습니다. onLogin만 넘기면 기본 조립(login 배경 · 가로 XL 로고)이 들어갑니다.'\n\nexport const STN_LOGIN_USAGE = `import { useState, type FormEvent } from 'react'\nimport {\n LoginPageScaffold,\n StnLayer0BackgroundPreset,\n StnLoginCard,\n StnLoginBrandStack,\n StnLoginFormStack,\n StnLoginFormFields,\n StnLoginFormLinks,\n StnLoginTextField,\n StnLogo,\n StnSegmented,\n StnButton,\n} from '@stn-uiux/pub-ui-react'\n\nfunction LoginPage() {\n const [mode, setMode] = useState<'normal' | 'social'>('normal')\n const [userId, setUserId] = useState('')\n const [password, setPassword] = useState('')\n\n function handleSubmit(e: FormEvent) {\n e.preventDefault()\n // 로그인 API 호출\n }\n\n return (\n <LoginPageScaffold\n layer0={<StnLayer0BackgroundPreset variant=\"login\" />}\n cardGlow={true}\n >\n <StnLoginCard\n glow={true}\n brand={\n <StnLoginBrandStack>\n <StnLogo variant=\"vertical\" size=\"xl\" />\n <p className=\"stn-login-card__caption\">Server Resource Monitoring</p>\n </StnLoginBrandStack>\n }\n >\n <StnLoginFormStack onSubmit={handleSubmit}>\n <StnSegmented\n aria-label=\"로그인 방식\"\n value={mode}\n onChange={(v) => setMode(v as 'normal' | 'social')}\n options={[\n { value: 'normal', label: '일반 로그인' },\n { value: 'social', label: '소셜 로그인' },\n ]}\n />\n {mode === 'normal' && (\n <StnLoginFormFields>\n <StnLoginTextField\n icon=\"line/user\"\n name=\"username\"\n autoComplete=\"username\"\n placeholder=\"아이디\"\n value={userId}\n onChange={(e) => setUserId(e.target.value)}\n aria-label=\"아이디\"\n />\n <StnLoginTextField\n icon=\"line/lock\"\n type=\"password\"\n name=\"password\"\n autoComplete=\"current-password\"\n placeholder=\"비밀번호\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n aria-label=\"비밀번호\"\n />\n </StnLoginFormFields>\n )}\n <StnButton type=\"submit\" size=\"xl\" fullWidth>\n 로그인\n </StnButton>\n <StnLoginFormLinks>\n <a href=\"#signup\">회원가입</a>\n <a href=\"#recover\">아이디 / 비밀번호 찾기</a>\n </StnLoginFormLinks>\n </StnLoginFormStack>\n </StnLoginCard>\n </LoginPageScaffold>\n )\n}`\n\nexport const STN_LOGIN_HTML = `<div class=\"stn-wrap stn-page--login\" data-stn-layer-mode=\"v2\">\n <div class=\"stn-layer0-bg image\" aria-hidden=\"true\"><!-- L0 login --></div>\n <main class=\"stn-elev-1\" data-stn-layer-role=\"content\">\n <div class=\"stn-login\">\n <div class=\"stn-login-card\">\n <div class=\"stn-login-card__brand\">\n <div class=\"stn-login-brand-stack\">\n <span class=\"stn-logo horizontal xl\">\n <img class=\"stn-logo__img light\" src=\"/@assets/svg/brand/infomap-logo-full.png\" alt=\"InfoMap SRM\" />\n <img class=\"stn-logo__img dark\" src=\"/@assets/svg/brand/infomap-logo-full-dark.png\" alt=\"\" />\n </span>\n <p class=\"stn-login-card__caption\">Server Resource Monitoring</p>\n </div>\n </div>\n <div class=\"stn-login-card__form\">\n <form class=\"stn-login-form-stack\">\n <div class=\"stn-segmented\" role=\"radiogroup\" aria-label=\"로그인 방식\">\n <button type=\"button\" class=\"stn-segmented__item active\" role=\"radio\" aria-checked=\"true\">일반 로그인</button>\n <button type=\"button\" class=\"stn-segmented__item\" role=\"radio\" aria-checked=\"false\">소셜 로그인</button>\n </div>\n <div class=\"stn-login-form-fields\">\n <div class=\"stn-login-text-field\">\n <span class=\"stn-icon-box md stn-login-text-field__icon-box\" aria-hidden>\n <span class=\"stn-icon stn-icon--masked\" style=\"background-color: currentColor; width: 16px; height: 16px;\"></span>\n </span>\n <input type=\"text\" class=\"stn-login-text-field__control\" placeholder=\"아이디\" autocomplete=\"username\" />\n </div>\n <div class=\"stn-login-text-field\">\n <span class=\"stn-icon-box md stn-login-text-field__icon-box\" aria-hidden>\n <span class=\"stn-icon stn-icon--masked\" style=\"background-color: currentColor; width: 16px; height: 16px;\"></span>\n </span>\n <input type=\"password\" class=\"stn-login-text-field__control\" placeholder=\"비밀번호\" autocomplete=\"current-password\" />\n </div>\n </div>\n <button type=\"submit\" class=\"stn-btn contained xl full\">로그인</button>\n <nav class=\"stn-login-form-links\" aria-label=\"계정 관리 링크\">\n <a href=\"#signup\">회원가입</a>\n <a href=\"#recover\">아이디 / 비밀번호 찾기</a>\n </nav>\n </form>\n </div>\n </div>\n </div>\n </main>\n</div>`\n"],"mappings":";;;;;AAOO,IAAM,kBAAkB;AAExB,IAAM,mBAAmB;AAAA,EAC9B,iBAAiB,kCAAkC;AAAA,EACnD,gBAAgB,kCAAkC;AACpD;AAEO,IAAM,kBACX;AAEK,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqFxB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -6,11 +6,11 @@ var STN_TYPE_SCALE_ROWS = [
6
6
  category: "Display",
7
7
  name: "Display 1",
8
8
  weights: "Medium, Bold",
9
- sizePx: 60,
10
- sizeRem: "4rem",
9
+ sizePx: 52,
10
+ sizeRem: "3.25rem",
11
11
  lineHeight: "130%",
12
12
  role: "\uCD5C\uC0C1\uC704 \uD5E4\uB4DC\uB77C\uC778 (PC\uAD8C\uC7A5)",
13
- pubSizeToken: "pub.font-size.60",
13
+ pubSizeToken: "pub.font-size.52",
14
14
  semanticToken: "pub.text.display.xlarge"
15
15
  },
16
16
  {
@@ -18,11 +18,11 @@ var STN_TYPE_SCALE_ROWS = [
18
18
  category: "Display",
19
19
  name: "Display 2",
20
20
  weights: "Medium, Bold",
21
- sizePx: 40,
22
- sizeRem: "2.67rem",
21
+ sizePx: 44,
22
+ sizeRem: "2.75rem",
23
23
  lineHeight: "130%",
24
24
  role: "\uBA54\uC778 \uD0C0\uC774\uD2C0 (PC \uAD8C\uC7A5)",
25
- pubSizeToken: "pub.font-size.40",
25
+ pubSizeToken: "pub.font-size.44",
26
26
  semanticToken: "pub.text.display.large"
27
27
  },
28
28
  {
@@ -30,11 +30,11 @@ var STN_TYPE_SCALE_ROWS = [
30
30
  category: "Display",
31
31
  name: "Display 3",
32
32
  weights: "Medium, Bold",
33
- sizePx: 36,
34
- sizeRem: "2.4rem",
33
+ sizePx: 40,
34
+ sizeRem: "2.5rem",
35
35
  lineHeight: "148%",
36
36
  role: "\uAC15\uC870\uD615 \uD5E4\uB4DC\uB77C\uC778",
37
- pubSizeToken: "pub.font-size.36",
37
+ pubSizeToken: "pub.font-size.40",
38
38
  semanticToken: "pub.text.display.medium"
39
39
  },
40
40
  {
@@ -137,6 +137,7 @@ var STN_TYPE_SCALE_ROWS = [
137
137
  lineHeight: "148% / 158%",
138
138
  role: "\uBCF8\uBB38 \uD14D\uC2A4\uD2B8",
139
139
  pubSizeToken: "pub.font-size.15",
140
+ semanticToken: "pub.text.body.medium-large",
140
141
  pubHtmlExample: "dashboard_map \xB7 GNB 1Depth \xB7 \uD14C\uC774\uBE14 \uD5E4\uB354"
141
142
  },
142
143
  {
@@ -253,6 +254,27 @@ var STN_TYPE_SCALE_ROWS = [
253
254
  pubHtmlExample: "dashboard_map \xB7 node_icon \uB77C\uBCA8 \xB7 gnb_alert \uD0DC\uADF8"
254
255
  }
255
256
  ];
257
+ var STN_TYPE_SCALE_CLASS = {
258
+ "display-1": { className: "stn-text-display-1", variant: "display-1" },
259
+ "display-2": { className: "stn-text-display-2", variant: "display-2" },
260
+ "display-3": { className: "stn-text-display-3", variant: "display-3" },
261
+ "heading-1": { className: "stn-text-heading-1", variant: "heading-1" },
262
+ "heading-2": { className: "stn-text-heading-2", variant: "heading-2" },
263
+ "heading-3": { className: "stn-text-heading-3", variant: "heading-3" },
264
+ "title-1": { className: "stn-text-title-1", variant: "title-1" },
265
+ "title-2": { className: "stn-text-title-2", variant: "title-2" },
266
+ "title-3": { className: "stn-text-title-3", variant: "title-3" },
267
+ "body-1": { className: "stn-text-body-1", variant: "body-1" },
268
+ "body-2": { className: "stn-text-body-2", variant: "body-2" },
269
+ "body-3": { className: "stn-text-body-3", variant: "body-3" },
270
+ "body-small": { className: "stn-text-body-small", variant: "body-small" },
271
+ "label-1": { className: "stn-text-label-1", variant: "label-1" },
272
+ "label-2": { className: "stn-text-label-2", variant: "label-2" },
273
+ "label-3": { className: "stn-text-label-3", variant: "label-3" },
274
+ "label-4": { className: "stn-text-label-4", variant: "label-4" },
275
+ "caption-large": { className: "stn-text-caption-large", variant: "caption-large" },
276
+ caption: { className: "stn-text-caption", variant: "caption" }
277
+ };
256
278
  var WEIGHT_LABEL = {
257
279
  300: "Regular",
258
280
  500: "Medium",
@@ -273,7 +295,8 @@ function typeScalePill(scaleName, sizePx, weight) {
273
295
  export {
274
296
  STN_TYPE_SCALE_INTRO,
275
297
  STN_TYPE_SCALE_ROWS,
298
+ STN_TYPE_SCALE_CLASS,
276
299
  resolveTypeScaleName,
277
300
  typeScalePill
278
301
  };
279
- //# sourceMappingURL=chunk-VC72NQIU.js.map
302
+ //# sourceMappingURL=chunk-EKPLU5KT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/stnTypeScale.ts"],"sourcesContent":["/**\n * Figma Type Scale — Display / Heading / Title / Body / Label / Caption\n * Pub HTML은 primitive(font-size·weight)로 조합하며, semantic samples는 일부만 시연합니다.\n */\n\nexport type StnTypeScaleCategory =\n | 'Display'\n | 'Heading'\n | 'Title'\n | 'Body'\n | 'Label'\n | 'Caption'\n | 'Pub extension'\n\nexport type StnTypeScaleRow = {\n id: string\n category: StnTypeScaleCategory\n name: string\n weights: string\n sizePx: number\n sizeRem: string\n lineHeight: string\n role: string\n pubSizeToken: string\n /** Tokens 탭 semantic (있으면) */\n semanticToken?: string\n /** dashboard_map.html 등 실제 화면 예 (있을 때만) */\n pubHtmlExample?: string\n}\n\nexport const STN_TYPE_SCALE_INTRO =\n 'Display, Heading, Title, Body, Label, Caption으로 정의한 6단계 위계에 맞게 조합하여 사용합니다.'\n\nexport const STN_TYPE_SCALE_ROWS: StnTypeScaleRow[] = [\n {\n id: 'display-1',\n category: 'Display',\n name: 'Display 1',\n weights: 'Medium, Bold',\n sizePx: 52,\n sizeRem: '3.25rem',\n lineHeight: '130%',\n role: '최상위 헤드라인 (PC권장)',\n pubSizeToken: 'pub.font-size.52',\n semanticToken: 'pub.text.display.xlarge',\n },\n {\n id: 'display-2',\n category: 'Display',\n name: 'Display 2',\n weights: 'Medium, Bold',\n sizePx: 44,\n sizeRem: '2.75rem',\n lineHeight: '130%',\n role: '메인 타이틀 (PC 권장)',\n pubSizeToken: 'pub.font-size.44',\n semanticToken: 'pub.text.display.large',\n },\n {\n id: 'display-3',\n category: 'Display',\n name: 'Display 3',\n weights: 'Medium, Bold',\n sizePx: 40,\n sizeRem: '2.5rem',\n lineHeight: '148%',\n role: '강조형 헤드라인',\n pubSizeToken: 'pub.font-size.40',\n semanticToken: 'pub.text.display.medium',\n },\n {\n id: 'heading-1',\n category: 'Heading',\n name: 'Heading 1',\n weights: 'Medium, Bold',\n sizePx: 32,\n sizeRem: '2.133rem',\n lineHeight: '148%',\n role: '페이지 상위 제목',\n pubSizeToken: 'pub.font-size.32',\n semanticToken: 'pub.text.heading.large',\n pubHtmlExample: 'dashboard_map · converged-header 페이지명',\n },\n {\n id: 'heading-2',\n category: 'Heading',\n name: 'Heading 2',\n weights: 'Medium, Bold',\n sizePx: 24,\n sizeRem: '1.6rem',\n lineHeight: '148%',\n role: '하위 제목',\n pubSizeToken: 'pub.font-size.24',\n semanticToken: 'pub.text.heading.medium',\n pubHtmlExample: 'dashboard_map · 장애 등급 수치(24px Bold)',\n },\n {\n id: 'heading-3',\n category: 'Heading',\n name: 'Heading 3',\n weights: 'Medium, Bold',\n sizePx: 22,\n sizeRem: '1.47rem',\n lineHeight: '148%',\n role: '소제목, 그룹 제목',\n pubSizeToken: 'pub.font-size.22',\n semanticToken: 'pub.text.heading.small',\n },\n {\n id: 'title-1',\n category: 'Title',\n name: 'Title 1',\n weights: 'Medium, Bold',\n sizePx: 20,\n sizeRem: '1.33rem',\n lineHeight: '148%',\n role: '콘텐츠 타이틀',\n pubSizeToken: 'pub.font-size.20',\n semanticToken: 'pub.text.title.large',\n pubHtmlExample: 'dashboard_map · 헤더 시계(#time)',\n },\n {\n id: 'title-2',\n category: 'Title',\n name: 'Title 2',\n weights: 'Medium, Semibold, Bold',\n sizePx: 18,\n sizeRem: '1.2rem',\n lineHeight: '148%',\n role: '서브 페이지 제목',\n pubSizeToken: 'pub.font-size.18',\n semanticToken: 'pub.text.title.medium',\n pubHtmlExample: 'alert_center · 모달 타이틀「알림센터」',\n },\n {\n id: 'title-3',\n category: 'Title',\n name: 'Title 3',\n weights: 'Medium',\n sizePx: 16,\n sizeRem: '1.07rem',\n lineHeight: '148%',\n role: '서브 타이틀 · 헤더',\n pubSizeToken: 'pub.font-size.16',\n semanticToken: 'pub.text.title.small',\n pubHtmlExample: 'stn-header · stn-widget 헤더',\n },\n {\n id: 'body-1',\n category: 'Body',\n name: 'Body 1',\n weights: 'Regular, Medium, Semibold, Bold',\n sizePx: 16,\n sizeRem: '1.07rem',\n lineHeight: '148% / 170%',\n role: '본문 텍스트 (PC 권장)',\n pubSizeToken: 'pub.font-size.16',\n semanticToken: 'pub.text.body.large',\n pubHtmlExample: 'dashboard_map · fault_table 본문 셀',\n },\n {\n id: 'body-2',\n category: 'Body',\n name: 'Body 2',\n weights: 'Regular, Medium, Semibold, Bold',\n sizePx: 15,\n sizeRem: '1rem',\n lineHeight: '148% / 158%',\n role: '본문 텍스트',\n pubSizeToken: 'pub.font-size.15',\n semanticToken: 'pub.text.body.medium-large',\n pubHtmlExample: 'dashboard_map · GNB 1Depth · 테이블 헤더',\n },\n {\n id: 'body-3',\n category: 'Body',\n name: 'Body 3',\n weights: 'Regular, Medium, Semibold, Bold',\n sizePx: 14,\n sizeRem: '0.933rem',\n lineHeight: '148% / 158%',\n role: '본문 소형 텍스트',\n pubSizeToken: 'pub.font-size.14',\n semanticToken: 'pub.text.body.medium',\n pubHtmlExample: 'Pub reset 기본 · 위젯 타이틀·GNB 하단·헤더 날짜',\n },\n {\n id: 'body-small',\n category: 'Body',\n name: 'Body Small',\n weights: 'Regular',\n sizePx: 13,\n sizeRem: '0.87rem',\n lineHeight: '148%',\n role: '본문 소형 · 입력·드롭다운·테이블',\n pubSizeToken: 'pub.font-size.13',\n semanticToken: 'pub.text.body.small',\n pubHtmlExample: 'stn-table · stn-dropdown · stn-text-field · stn-btn(sm)',\n },\n {\n id: 'label-1',\n category: 'Label',\n name: 'Label 1',\n weights: 'Medium',\n sizePx: 17,\n sizeRem: '1.133rem',\n lineHeight: '148%',\n role: '버튼 라벨 (PC 권장)',\n pubSizeToken: 'pub.font-size.17',\n semanticToken: 'pub.text.label.large',\n },\n {\n id: 'label-2',\n category: 'Label',\n name: 'Label 2',\n weights: 'SemiBold',\n sizePx: 15,\n sizeRem: '1rem',\n lineHeight: '148%',\n role: '버튼, 입력 폼',\n pubSizeToken: 'pub.font-size.15',\n semanticToken: 'pub.text.label.medium',\n },\n {\n id: 'label-3',\n category: 'Label',\n name: 'Label 3',\n weights: 'Medium, Semibold',\n sizePx: 13,\n sizeRem: '0.87rem',\n lineHeight: '148%',\n role: '입력 레이블',\n pubSizeToken: 'pub.font-size.13',\n semanticToken: 'pub.text.label.small',\n pubHtmlExample: 'dashboard_map · GNB 2Depth · 장애 요약',\n },\n {\n id: 'label-4',\n category: 'Label',\n name: 'Label 4',\n weights: 'Medium, Semibold, Bold',\n sizePx: 10,\n sizeRem: '0.625rem',\n lineHeight: 'Auto',\n role: '바텀 아이콘 레이블',\n pubSizeToken: 'pub.font-size.10',\n semanticToken: 'pub.text.label.xsmall',\n },\n {\n id: 'caption-large',\n category: 'Caption',\n name: 'Caption Large',\n weights: 'Regular',\n sizePx: 14,\n sizeRem: '0.933rem',\n lineHeight: '130%',\n role: '캡션 대형 · 로그인 카드 서브캡션',\n pubSizeToken: 'pub.font-size.14',\n semanticToken: 'pub.text.caption.large',\n pubHtmlExample: 'stn-login-card 서브캡션',\n },\n {\n id: 'caption',\n category: 'Caption',\n name: 'Caption',\n weights: 'Medium, SemiBold',\n sizePx: 12,\n sizeRem: '0.8rem',\n lineHeight: '148%',\n role: '툴팁, 보조 설명',\n pubSizeToken: 'pub.font-size.12',\n semanticToken: 'pub.text.caption.medium',\n pubHtmlExample: 'alert_center 목록 · dashboard_map 등급 라벨·위젯 소제목',\n },\n {\n id: 'pub-11',\n category: 'Pub extension',\n name: '11px (Pub)',\n weights: 'Bold',\n sizePx: 11,\n sizeRem: '0.73rem',\n lineHeight: '148%',\n role: '지도 노드·알림 등급 태그 등 Pub 전용',\n pubSizeToken: 'pub.font-size.11',\n pubHtmlExample: 'dashboard_map · node_icon 라벨 · gnb_alert 태그',\n },\n]\n\n/** Type Scale id → 유틸리티 클래스 (styles/foundations/stn-typography.css) · StnText variant */\nexport const STN_TYPE_SCALE_CLASS: Record<string, { className: string; variant: string }> = {\n 'display-1': { className: 'stn-text-display-1', variant: 'display-1' },\n 'display-2': { className: 'stn-text-display-2', variant: 'display-2' },\n 'display-3': { className: 'stn-text-display-3', variant: 'display-3' },\n 'heading-1': { className: 'stn-text-heading-1', variant: 'heading-1' },\n 'heading-2': { className: 'stn-text-heading-2', variant: 'heading-2' },\n 'heading-3': { className: 'stn-text-heading-3', variant: 'heading-3' },\n 'title-1': { className: 'stn-text-title-1', variant: 'title-1' },\n 'title-2': { className: 'stn-text-title-2', variant: 'title-2' },\n 'title-3': { className: 'stn-text-title-3', variant: 'title-3' },\n 'body-1': { className: 'stn-text-body-1', variant: 'body-1' },\n 'body-2': { className: 'stn-text-body-2', variant: 'body-2' },\n 'body-3': { className: 'stn-text-body-3', variant: 'body-3' },\n 'body-small': { className: 'stn-text-body-small', variant: 'body-small' },\n 'label-1': { className: 'stn-text-label-1', variant: 'label-1' },\n 'label-2': { className: 'stn-text-label-2', variant: 'label-2' },\n 'label-3': { className: 'stn-text-label-3', variant: 'label-3' },\n 'label-4': { className: 'stn-text-label-4', variant: 'label-4' },\n 'caption-large': { className: 'stn-text-caption-large', variant: 'caption-large' },\n caption: { className: 'stn-text-caption', variant: 'caption' },\n}\n\nconst WEIGHT_LABEL: Record<number, string> = {\n 300: 'Regular',\n 500: 'Medium',\n 700: 'Bold',\n}\n\n/** px(+weight) → Type Scale 이름 (가장 가까운 스케일) */\nexport function resolveTypeScaleName(sizePx: number, weight = 400): {\n scale: string\n weightLabel: string\n pill: string\n} {\n const w = weight >= 600 ? 700 : weight >= 500 ? 500 : 300\n const weightLabel = WEIGHT_LABEL[w] ?? `${weight}`\n const row =\n STN_TYPE_SCALE_ROWS.find((r) => r.sizePx === sizePx) ??\n STN_TYPE_SCALE_ROWS.find((r) => Math.abs(r.sizePx - sizePx) <= 1)\n const scale = row?.name ?? `${sizePx}px`\n const pill = `${scale} (${sizePx}, ${w})`\n return { scale, weightLabel, pill }\n}\n\n/** dashboard_map Use case — Type Scale 기준 라벨 */\nexport function typeScalePill(\n scaleName: string,\n sizePx: number,\n weight: number,\n): string {\n return `${scaleName} (${sizePx}, ${weight})`\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,9 @@
1
+ // src/data/stnPackageVersion.ts
2
+ var STN_UI_VERSION = "0.1.77";
3
+ var STN_UI_VERSION_LABEL = "v0.1.77";
4
+
5
+ export {
6
+ STN_UI_VERSION,
7
+ STN_UI_VERSION_LABEL
8
+ };
9
+ //# sourceMappingURL=chunk-RSKMNZIS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/stnPackageVersion.ts"],"sourcesContent":["/** Package version constants */\nexport const STN_UI_VERSION = '0.1.77'\nexport const STN_UI_VERSION_LABEL = 'v0.1.77'\n"],"mappings":";AACO,IAAM,iBAAiB;AACvB,IAAM,uBAAuB;","names":[]}
@@ -59,7 +59,7 @@ export { STN_THEME_SEMANTIC_DARK_ROWS, STN_THEME_SEMANTIC_LIGHT_ROWS, StnThemeSe
59
59
  export { STN_TOAST_DEMO_MSG, STN_TOAST_ICON_SLUG, STN_TOAST_INTRO, STN_TOAST_KINDS, STN_TOAST_REACT_USAGE, STN_TOAST_SETUP, STN_TOAST_TOKEN_ROWS, STN_TOAST_USAGE_HTML, StnToastKind } from './stnToast.js';
60
60
  export { STN_TOGGLE_BUTTON_PLAYGROUND_DEFAULT, STN_TOGGLE_BUTTON_PLAYGROUND_INTRO, STN_TOGGLE_BUTTON_PLAYGROUND_PROPERTIES, STN_TOGGLE_BUTTON_REACT_USAGE, STN_TOGGLE_BUTTON_USAGE_HTML, StnToggleButtonPlaygroundConfig, countToggleButtonPlaygroundCombinations, describeToggleButtonPlaygroundReact, listToggleButtonPlaygroundMatrix } from './stnToggleButton.js';
61
61
  export { STN_TREE_DEMO, STN_TREE_FIGMA, STN_TREE_INTRO, STN_TREE_PARTS, STN_TREE_PATTERN_PLAYGROUND_DEFAULT, STN_TREE_PATTERN_PLAYGROUND_PROPERTIES, STN_TREE_REACT_EXAMPLE, STN_TREE_SECTION_SIDE_FIGMA, STN_TREE_USAGE_HTML, StnTreeDemoNode, StnTreePatternPlaygroundConfig, describeTreePatternReact } from './stnTree.js';
62
- export { STN_TYPE_SCALE_INTRO, STN_TYPE_SCALE_ROWS, StnTypeScaleCategory, StnTypeScaleRow, resolveTypeScaleName, typeScalePill } from './stnTypeScale.js';
62
+ export { STN_TYPE_SCALE_CLASS, STN_TYPE_SCALE_INTRO, STN_TYPE_SCALE_ROWS, StnTypeScaleCategory, StnTypeScaleRow, resolveTypeScaleName, typeScalePill } from './stnTypeScale.js';
63
63
  export { STN_FONT_FAMILY_ROWS, STN_FONT_SIZE_ROWS, STN_FONT_WEIGHT_ROWS, STN_LINE_HEIGHT_ROWS, STN_TYPOGRAPHY_PRIMITIVE_GROUPS, STN_TYPOGRAPHY_SEMANTIC_ROWS, StnTypographyPrimitiveRow, StnTypographySemanticRow, typographyPrimitivesToJson, typographySemanticsToJson } from './stnTypography.js';
64
64
  export { STN_CARD_INTRO, STN_CARD_PADDINGS, STN_CARD_RADII, STN_CARD_SEVERITIES, STN_CARD_VARIANTS, StnCardPadding, StnCardRadius, StnCardSeverity, StnCardVariant } from './stnCard.js';
65
65
  export { STN_ALERT_CENTER_DASHBOARD_USAGE, STN_ALERT_CENTER_DASHBOARD_WIDGETS, STN_WIDGET_APPEARANCE_ROWS, STN_WIDGET_CHART_SLOT_HTML, STN_WIDGET_CHART_SLOT_REACT, STN_WIDGET_DISABILITY_STATUS_DEMO, STN_WIDGET_FIGMA, STN_WIDGET_FIGMA_DARK, STN_WIDGET_FIGMA_DARK_URL, STN_WIDGET_FIGMA_SHELL_HTML, STN_WIDGET_FIGMA_SHELL_REACT, STN_WIDGET_FIGMA_URL, STN_WIDGET_GRADE_ROW_DEMO, STN_WIDGET_HEADER_HTML, STN_WIDGET_HEADER_REACT, STN_WIDGET_INTRO, STN_WIDGET_KINDS, STN_WIDGET_SHELL_ROWS, STN_WIDGET_TOP5_BARS_DEMO, STN_WIDGET_TRAFFIC_BARS_DEMO, STN_WIDGET_USAGE, STN_WIDGET_USAGE_HTML, StnWidgetAppearance, StnWidgetAppearanceLegacy, StnWidgetAppearanceShell, StnWidgetAssetId, StnWidgetBackgroundMode, StnWidgetContentFamily, StnWidgetGradeRowGrade, StnWidgetKind, StnWidgetKindBodySlot, StnWidgetKindPreview, StnWidgetShell, buildStnWidgetKindUsage, getStnWidgetKind, isStnWidgetKindSlug, normalizeStnWidgetAppearance, resolveStnWidgetBackground, resolveStnWidgetKindAppearance, resolveStnWidgetKindBodySlot, stnWidgetSampleUrl } from './stnWidget.js';
@@ -10,11 +10,12 @@ import {
10
10
  listToggleButtonPlaygroundMatrix
11
11
  } from "../chunk-7AMA6OZ6.js";
12
12
  import {
13
+ STN_TYPE_SCALE_CLASS,
13
14
  STN_TYPE_SCALE_INTRO,
14
15
  STN_TYPE_SCALE_ROWS,
15
16
  resolveTypeScaleName,
16
17
  typeScalePill
17
- } from "../chunk-VC72NQIU.js";
18
+ } from "../chunk-EKPLU5KT.js";
18
19
  import {
19
20
  STN_FONT_FAMILY_ROWS,
20
21
  STN_FONT_SIZE_ROWS,
@@ -118,7 +119,7 @@ import {
118
119
  STN_LOGIN_HTML,
119
120
  STN_LOGIN_INTRO,
120
121
  STN_LOGIN_USAGE
121
- } from "../chunk-AWJXDCX2.js";
122
+ } from "../chunk-3CYSR7V4.js";
122
123
  import {
123
124
  STN_MAP_DASHBOARD_OPTION_ROWS
124
125
  } from "../chunk-3DAZMM4T.js";
@@ -136,7 +137,7 @@ import {
136
137
  import {
137
138
  STN_UI_VERSION,
138
139
  STN_UI_VERSION_LABEL
139
- } from "../chunk-M4MX76BY.js";
140
+ } from "../chunk-RSKMNZIS.js";
140
141
  import {
141
142
  STN_PAGE_ENTER_MOTION_INTRO,
142
143
  STN_PAGE_ENTER_MOTION_ROWS,
@@ -891,6 +892,7 @@ export {
891
892
  STN_TREE_REACT_EXAMPLE,
892
893
  STN_TREE_SECTION_SIDE_FIGMA,
893
894
  STN_TREE_USAGE_HTML,
895
+ STN_TYPE_SCALE_CLASS,
894
896
  STN_TYPE_SCALE_INTRO,
895
897
  STN_TYPE_SCALE_ROWS,
896
898
  STN_TYPOGRAPHY_PRIMITIVE_GROUPS,
@@ -4,8 +4,8 @@
4
4
  */
5
5
  declare const STN_LOGIN_FIGMA = "40004209:78293";
6
6
  declare const STN_LOGIN_ASSETS: {
7
- readonly backgroundLight: string;
8
- readonly backgroundDark: string;
7
+ readonly backgroundLight: "https://stn-design.vercel.app/images/layer0/login-light.png";
8
+ readonly backgroundDark: "https://stn-design.vercel.app/images/layer0/login-dark.png";
9
9
  };
10
10
  declare const STN_LOGIN_INTRO = "\uB85C\uADF8\uC778 \uD398\uC774\uC9C0\uB294 LoginPageScaffold(\uD398\uC774\uC9C0) + StnLayer0BackgroundPreset(\uBC14\uB2E5) + StnLoginCard(\uCE74\uB4DC)\uC785\uB2C8\uB2E4. \uBC30\uACBD\u00B7\uB85C\uACE0\uB294 \uAC01 \uCEF4\uD3EC\uB10C\uD2B8\uC758 variant\uB97C \uBC14\uAFD4 \uC7A1\uC2B5\uB2C8\uB2E4. onLogin\uB9CC \uB118\uAE30\uBA74 \uAE30\uBCF8 \uC870\uB9BD(login \uBC30\uACBD \u00B7 \uAC00\uB85C XL \uB85C\uACE0)\uC774 \uB4E4\uC5B4\uAC11\uB2C8\uB2E4.";
11
11
  declare const STN_LOGIN_USAGE = "import { useState, type FormEvent } from 'react'\nimport {\n LoginPageScaffold,\n StnLayer0BackgroundPreset,\n StnLoginCard,\n StnLoginBrandStack,\n StnLoginFormStack,\n StnLoginFormFields,\n StnLoginFormLinks,\n StnLoginTextField,\n StnLogo,\n StnSegmented,\n StnButton,\n} from '@stn-uiux/pub-ui-react'\n\nfunction LoginPage() {\n const [mode, setMode] = useState<'normal' | 'social'>('normal')\n const [userId, setUserId] = useState('')\n const [password, setPassword] = useState('')\n\n function handleSubmit(e: FormEvent) {\n e.preventDefault()\n // \uB85C\uADF8\uC778 API \uD638\uCD9C\n }\n\n return (\n <LoginPageScaffold\n layer0={<StnLayer0BackgroundPreset variant=\"login\" />}\n cardGlow={true}\n >\n <StnLoginCard\n glow={true}\n brand={\n <StnLoginBrandStack>\n <StnLogo variant=\"vertical\" size=\"xl\" />\n <p className=\"stn-login-card__caption\">Server Resource Monitoring</p>\n </StnLoginBrandStack>\n }\n >\n <StnLoginFormStack onSubmit={handleSubmit}>\n <StnSegmented\n aria-label=\"\uB85C\uADF8\uC778 \uBC29\uC2DD\"\n value={mode}\n onChange={(v) => setMode(v as 'normal' | 'social')}\n options={[\n { value: 'normal', label: '\uC77C\uBC18 \uB85C\uADF8\uC778' },\n { value: 'social', label: '\uC18C\uC15C \uB85C\uADF8\uC778' },\n ]}\n />\n {mode === 'normal' && (\n <StnLoginFormFields>\n <StnLoginTextField\n icon=\"line/user\"\n name=\"username\"\n autoComplete=\"username\"\n placeholder=\"\uC544\uC774\uB514\"\n value={userId}\n onChange={(e) => setUserId(e.target.value)}\n aria-label=\"\uC544\uC774\uB514\"\n />\n <StnLoginTextField\n icon=\"line/lock\"\n type=\"password\"\n name=\"password\"\n autoComplete=\"current-password\"\n placeholder=\"\uBE44\uBC00\uBC88\uD638\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n aria-label=\"\uBE44\uBC00\uBC88\uD638\"\n />\n </StnLoginFormFields>\n )}\n <StnButton type=\"submit\" size=\"xl\" fullWidth>\n \uB85C\uADF8\uC778\n </StnButton>\n <StnLoginFormLinks>\n <a href=\"#signup\">\uD68C\uC6D0\uAC00\uC785</a>\n <a href=\"#recover\">\uC544\uC774\uB514 / \uBE44\uBC00\uBC88\uD638 \uCC3E\uAE30</a>\n </StnLoginFormLinks>\n </StnLoginFormStack>\n </StnLoginCard>\n </LoginPageScaffold>\n )\n}";
@@ -4,7 +4,8 @@ import {
4
4
  STN_LOGIN_HTML,
5
5
  STN_LOGIN_INTRO,
6
6
  STN_LOGIN_USAGE
7
- } from "../chunk-AWJXDCX2.js";
7
+ } from "../chunk-3CYSR7V4.js";
8
+ import "../chunk-NGUMR3D6.js";
8
9
  export {
9
10
  STN_LOGIN_ASSETS,
10
11
  STN_LOGIN_FIGMA,
@@ -1,5 +1,5 @@
1
1
  /** Package version constants */
2
- declare const STN_UI_VERSION = "0.1.75";
3
- declare const STN_UI_VERSION_LABEL = "v0.1.75";
2
+ declare const STN_UI_VERSION = "0.1.77";
3
+ declare const STN_UI_VERSION_LABEL = "v0.1.77";
4
4
 
5
5
  export { STN_UI_VERSION, STN_UI_VERSION_LABEL };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  STN_UI_VERSION,
3
3
  STN_UI_VERSION_LABEL
4
- } from "../chunk-M4MX76BY.js";
4
+ } from "../chunk-RSKMNZIS.js";
5
5
  export {
6
6
  STN_UI_VERSION,
7
7
  STN_UI_VERSION_LABEL
@@ -20,6 +20,11 @@ type StnTypeScaleRow = {
20
20
  };
21
21
  declare const STN_TYPE_SCALE_INTRO = "Display, Heading, Title, Body, Label, Caption\uC73C\uB85C \uC815\uC758\uD55C 6\uB2E8\uACC4 \uC704\uACC4\uC5D0 \uB9DE\uAC8C \uC870\uD569\uD558\uC5EC \uC0AC\uC6A9\uD569\uB2C8\uB2E4.";
22
22
  declare const STN_TYPE_SCALE_ROWS: StnTypeScaleRow[];
23
+ /** Type Scale id → 유틸리티 클래스 (styles/foundations/stn-typography.css) · StnText variant */
24
+ declare const STN_TYPE_SCALE_CLASS: Record<string, {
25
+ className: string;
26
+ variant: string;
27
+ }>;
23
28
  /** px(+weight) → Type Scale 이름 (가장 가까운 스케일) */
24
29
  declare function resolveTypeScaleName(sizePx: number, weight?: number): {
25
30
  scale: string;
@@ -29,4 +34,4 @@ declare function resolveTypeScaleName(sizePx: number, weight?: number): {
29
34
  /** dashboard_map Use case — Type Scale 기준 라벨 */
30
35
  declare function typeScalePill(scaleName: string, sizePx: number, weight: number): string;
31
36
 
32
- export { STN_TYPE_SCALE_INTRO, STN_TYPE_SCALE_ROWS, type StnTypeScaleCategory, type StnTypeScaleRow, resolveTypeScaleName, typeScalePill };
37
+ export { STN_TYPE_SCALE_CLASS, STN_TYPE_SCALE_INTRO, STN_TYPE_SCALE_ROWS, type StnTypeScaleCategory, type StnTypeScaleRow, resolveTypeScaleName, typeScalePill };
@@ -1,10 +1,12 @@
1
1
  import {
2
+ STN_TYPE_SCALE_CLASS,
2
3
  STN_TYPE_SCALE_INTRO,
3
4
  STN_TYPE_SCALE_ROWS,
4
5
  resolveTypeScaleName,
5
6
  typeScalePill
6
- } from "../chunk-VC72NQIU.js";
7
+ } from "../chunk-EKPLU5KT.js";
7
8
  export {
9
+ STN_TYPE_SCALE_CLASS,
8
10
  STN_TYPE_SCALE_INTRO,
9
11
  STN_TYPE_SCALE_ROWS,
10
12
  resolveTypeScaleName,
package/dist/index.d.ts CHANGED
@@ -59,7 +59,7 @@ export { STN_THEME_SEMANTIC_DARK_ROWS, STN_THEME_SEMANTIC_LIGHT_ROWS, StnThemeSe
59
59
  export { STN_TOAST_DEMO_MSG, STN_TOAST_ICON_SLUG, STN_TOAST_INTRO, STN_TOAST_KINDS, STN_TOAST_REACT_USAGE, STN_TOAST_SETUP, STN_TOAST_TOKEN_ROWS, STN_TOAST_USAGE_HTML, StnToastKind } from './data/stnToast.js';
60
60
  export { STN_TOGGLE_BUTTON_PLAYGROUND_DEFAULT, STN_TOGGLE_BUTTON_PLAYGROUND_INTRO, STN_TOGGLE_BUTTON_PLAYGROUND_PROPERTIES, STN_TOGGLE_BUTTON_REACT_USAGE, STN_TOGGLE_BUTTON_USAGE_HTML, StnToggleButtonPlaygroundConfig, countToggleButtonPlaygroundCombinations, describeToggleButtonPlaygroundReact, listToggleButtonPlaygroundMatrix } from './data/stnToggleButton.js';
61
61
  export { STN_TREE_DEMO, STN_TREE_FIGMA, STN_TREE_INTRO, STN_TREE_PARTS, STN_TREE_PATTERN_PLAYGROUND_DEFAULT, STN_TREE_PATTERN_PLAYGROUND_PROPERTIES, STN_TREE_REACT_EXAMPLE, STN_TREE_SECTION_SIDE_FIGMA, STN_TREE_USAGE_HTML, StnTreeDemoNode, StnTreePatternPlaygroundConfig, describeTreePatternReact } from './data/stnTree.js';
62
- export { STN_TYPE_SCALE_INTRO, STN_TYPE_SCALE_ROWS, StnTypeScaleCategory, StnTypeScaleRow, resolveTypeScaleName, typeScalePill } from './data/stnTypeScale.js';
62
+ export { STN_TYPE_SCALE_CLASS, STN_TYPE_SCALE_INTRO, STN_TYPE_SCALE_ROWS, StnTypeScaleCategory, StnTypeScaleRow, resolveTypeScaleName, typeScalePill } from './data/stnTypeScale.js';
63
63
  export { STN_FONT_FAMILY_ROWS, STN_FONT_SIZE_ROWS, STN_FONT_WEIGHT_ROWS, STN_LINE_HEIGHT_ROWS, STN_TYPOGRAPHY_PRIMITIVE_GROUPS, STN_TYPOGRAPHY_SEMANTIC_ROWS, StnTypographyPrimitiveRow, StnTypographySemanticRow, typographyPrimitivesToJson, typographySemanticsToJson } from './data/stnTypography.js';
64
64
  export { STN_CARD_INTRO, STN_CARD_PADDINGS, STN_CARD_RADII, STN_CARD_SEVERITIES, STN_CARD_VARIANTS, StnCardPadding, StnCardRadius, StnCardSeverity, StnCardVariant } from './data/stnCard.js';
65
65
  export { STN_ALERT_CENTER_DASHBOARD_USAGE, STN_ALERT_CENTER_DASHBOARD_WIDGETS, STN_WIDGET_APPEARANCE_ROWS, STN_WIDGET_CHART_SLOT_HTML, STN_WIDGET_CHART_SLOT_REACT, STN_WIDGET_DISABILITY_STATUS_DEMO, STN_WIDGET_FIGMA, STN_WIDGET_FIGMA_DARK, STN_WIDGET_FIGMA_DARK_URL, STN_WIDGET_FIGMA_SHELL_HTML, STN_WIDGET_FIGMA_SHELL_REACT, STN_WIDGET_FIGMA_URL, STN_WIDGET_GRADE_ROW_DEMO, STN_WIDGET_HEADER_HTML, STN_WIDGET_HEADER_REACT, STN_WIDGET_INTRO, STN_WIDGET_KINDS, STN_WIDGET_SHELL_ROWS, STN_WIDGET_TOP5_BARS_DEMO, STN_WIDGET_TRAFFIC_BARS_DEMO, STN_WIDGET_USAGE, STN_WIDGET_USAGE_HTML, StnWidgetAppearance, StnWidgetAppearanceLegacy, StnWidgetAppearanceShell, StnWidgetAssetId, StnWidgetBackgroundMode, StnWidgetContentFamily, StnWidgetGradeRowGrade, StnWidgetKind, StnWidgetKindBodySlot, StnWidgetKindPreview, StnWidgetShell, buildStnWidgetKindUsage, getStnWidgetKind, isStnWidgetKindSlug, normalizeStnWidgetAppearance, resolveStnWidgetBackground, resolveStnWidgetKindAppearance, resolveStnWidgetKindBodySlot, stnWidgetSampleUrl } from './data/stnWidget.js';
package/dist/index.js CHANGED
@@ -15,11 +15,12 @@ import {
15
15
  listToggleButtonPlaygroundMatrix
16
16
  } from "./chunk-7AMA6OZ6.js";
17
17
  import {
18
+ STN_TYPE_SCALE_CLASS,
18
19
  STN_TYPE_SCALE_INTRO,
19
20
  STN_TYPE_SCALE_ROWS,
20
21
  resolveTypeScaleName,
21
22
  typeScalePill
22
- } from "./chunk-VC72NQIU.js";
23
+ } from "./chunk-EKPLU5KT.js";
23
24
  import {
24
25
  STN_FONT_FAMILY_ROWS,
25
26
  STN_FONT_SIZE_ROWS,
@@ -123,7 +124,7 @@ import {
123
124
  STN_LOGIN_HTML,
124
125
  STN_LOGIN_INTRO,
125
126
  STN_LOGIN_USAGE
126
- } from "./chunk-AWJXDCX2.js";
127
+ } from "./chunk-3CYSR7V4.js";
127
128
  import {
128
129
  STN_MAP_DASHBOARD_OPTION_ROWS
129
130
  } from "./chunk-3DAZMM4T.js";
@@ -141,7 +142,7 @@ import {
141
142
  import {
142
143
  STN_UI_VERSION,
143
144
  STN_UI_VERSION_LABEL
144
- } from "./chunk-M4MX76BY.js";
145
+ } from "./chunk-RSKMNZIS.js";
145
146
  import {
146
147
  STN_PAGE_ENTER_MOTION_INTRO,
147
148
  STN_PAGE_ENTER_MOTION_ROWS,
@@ -896,6 +897,7 @@ export {
896
897
  STN_TREE_REACT_EXAMPLE,
897
898
  STN_TREE_SECTION_SIDE_FIGMA,
898
899
  STN_TREE_USAGE_HTML,
900
+ STN_TYPE_SCALE_CLASS,
899
901
  STN_TYPE_SCALE_INTRO,
900
902
  STN_TYPE_SCALE_ROWS,
901
903
  STN_TYPOGRAPHY_PRIMITIVE_GROUPS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stn-uiux/pub-ui",
3
- "version": "0.1.75",
3
+ "version": "0.1.77",
4
4
  "description": "STN Pub design system — tokens, specs, and CSS for product HTML / React apps",
5
5
  "type": "module",
6
6
  "sideEffects": [