@stn-uiux/pub-ui 0.1.55 → 0.1.57

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.
Files changed (35) hide show
  1. package/dist/{chunk-OKSQLPEC.js → chunk-AWJXDCX2.js} +143 -3
  2. package/dist/{chunk-NIMEKZW6.js.map → chunk-AWJXDCX2.js.map} +1 -1
  3. package/dist/chunk-QT4HHVZH.js +9 -0
  4. package/dist/chunk-QT4HHVZH.js.map +1 -0
  5. package/dist/chunk-XBFXX3D6.js +41 -0
  6. package/dist/chunk-XBFXX3D6.js.map +1 -0
  7. package/dist/cli.js +1 -2
  8. package/dist/cli.js.map +1 -1
  9. package/dist/data/index.d.ts +1 -1
  10. package/dist/data/index.js +5 -4
  11. package/dist/data/stnLayer0Background.js +1 -2
  12. package/dist/data/stnLayer0BackgroundAssets.d.ts +19 -15
  13. package/dist/data/stnLayer0BackgroundAssets.js +3 -2
  14. package/dist/data/stnLogin.js +1 -2
  15. package/dist/data/stnPackageVersion.d.ts +2 -2
  16. package/dist/data/stnPackageVersion.js +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +5 -4
  19. package/package.json +2 -1
  20. package/dist/chunk-DFXOZYYY.js +0 -68
  21. package/dist/chunk-DFXOZYYY.js.map +0 -1
  22. package/dist/chunk-NIMEKZW6.js +0 -150
  23. package/dist/chunk-OKSQLPEC.js.map +0 -1
  24. package/dist/chunk-ZLMVTZDK.js +0 -9
  25. package/dist/chunk-ZLMVTZDK.js.map +0 -1
  26. package/styles/@assets/images/layer0/dashboard-dark.png +0 -0
  27. package/styles/@assets/images/layer0/dashboard-light.png +0 -0
  28. package/styles/@assets/images/layer0/login-dark.png +0 -0
  29. package/styles/@assets/images/layer0/login-light.png +0 -0
  30. package/styles/@assets/images/layer0/map-dark.png +0 -0
  31. package/styles/@assets/images/layer0/map-light.png +0 -0
  32. package/styles/@assets/images/layer0/showroom-a-dark.png +0 -0
  33. package/styles/@assets/images/layer0/showroom-a-light.png +0 -0
  34. package/styles/@assets/images/layer0/showroom-b-dark.png +0 -0
  35. package/styles/@assets/images/layer0/showroom-b-light.png +0 -0
@@ -1 +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 loginBgDark from '../../styles/@assets/images/layer0/login-dark.png'\nimport loginBgLight from '../../styles/@assets/images/layer0/login-light.png'\n\nexport const STN_LOGIN_FIGMA = '40004209:78293'\n\nexport const STN_LOGIN_ASSETS = {\n backgroundLight: loginBgLight,\n backgroundDark: loginBgDark,\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":";;;;;;AAQO,IAAM,kBAAkB;AAExB,IAAM,mBAAmB;AAAA,EAC9B,iBAAiB;AAAA,EACjB,gBAAgB;AAClB;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":[]}
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 loginBgDark from '../../styles/@assets/images/layer0/login-dark.png'\nimport loginBgLight from '../../styles/@assets/images/layer0/login-light.png'\n\nexport const STN_LOGIN_FIGMA = '40004209:78293'\n\nexport const STN_LOGIN_ASSETS = {\n backgroundLight: loginBgLight,\n backgroundDark: loginBgDark,\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":";;;;;;;AAQO,IAAM,kBAAkB;AAExB,IAAM,mBAAmB;AAAA,EAC9B,iBAAiB;AAAA,EACjB,gBAAgB;AAClB;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":[]}
@@ -0,0 +1,9 @@
1
+ // src/data/stnPackageVersion.ts
2
+ var STN_UI_VERSION = "0.1.57";
3
+ var STN_UI_VERSION_LABEL = "v0.1.57";
4
+
5
+ export {
6
+ STN_UI_VERSION,
7
+ STN_UI_VERSION_LABEL
8
+ };
9
+ //# sourceMappingURL=chunk-QT4HHVZH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/stnPackageVersion.ts"],"sourcesContent":["/** Package version constants */\nexport const STN_UI_VERSION = '0.1.57'\nexport const STN_UI_VERSION_LABEL = 'v0.1.57'\n"],"mappings":";AACO,IAAM,iBAAiB;AACvB,IAAM,uBAAuB;","names":[]}
@@ -0,0 +1,41 @@
1
+ // src/data/stnLayer0BackgroundAssets.ts
2
+ var STN_CDN_ASSET_BASE = "https://stn-design.vercel.app/images/layer0";
3
+ var STN_LAYER0_BACKGROUND_DEMO_IMAGES = {
4
+ dashboard: `${STN_CDN_ASSET_BASE}/dashboard-light.png`,
5
+ dashboardLight: `${STN_CDN_ASSET_BASE}/dashboard-light.png`,
6
+ dashboardDark: `${STN_CDN_ASSET_BASE}/dashboard-dark.png`,
7
+ showroomA: `${STN_CDN_ASSET_BASE}/showroom-a-light.png`,
8
+ showroomALight: `${STN_CDN_ASSET_BASE}/showroom-a-light.png`,
9
+ showroomADark: `${STN_CDN_ASSET_BASE}/showroom-a-dark.png`,
10
+ showroomB: `${STN_CDN_ASSET_BASE}/showroom-b-light.png`,
11
+ showroomBLight: `${STN_CDN_ASSET_BASE}/showroom-b-light.png`,
12
+ showroomBDark: `${STN_CDN_ASSET_BASE}/showroom-b-dark.png`,
13
+ mapLight: `${STN_CDN_ASSET_BASE}/map-light.png`,
14
+ mapDark: `${STN_CDN_ASSET_BASE}/map-dark.png`,
15
+ login: `${STN_CDN_ASSET_BASE}/login-light.png`,
16
+ loginLight: `${STN_CDN_ASSET_BASE}/login-light.png`,
17
+ loginDark: `${STN_CDN_ASSET_BASE}/login-dark.png`
18
+ };
19
+ var STN_LAYER0_BACKGROUND_ASSET_PATHS = {
20
+ dashboard: "@assets/images/layer0/dashboard-light.png",
21
+ dashboardLight: "@assets/images/layer0/dashboard-light.png",
22
+ dashboardDark: "@assets/images/layer0/dashboard-dark.png",
23
+ showroomA: "@assets/images/layer0/showroom-a-light.png",
24
+ showroomALight: "@assets/images/layer0/showroom-a-light.png",
25
+ showroomADark: "@assets/images/layer0/showroom-a-dark.png",
26
+ showroomB: "@assets/images/layer0/showroom-b-light.png",
27
+ showroomBLight: "@assets/images/layer0/showroom-b-light.png",
28
+ showroomBDark: "@assets/images/layer0/showroom-b-dark.png",
29
+ mapLight: "@assets/images/layer0/map-light.png",
30
+ mapDark: "@assets/images/layer0/map-dark.png",
31
+ login: "@assets/images/layer0/login-light.png",
32
+ loginLight: "@assets/images/layer0/login-light.png",
33
+ loginDark: "@assets/images/layer0/login-dark.png"
34
+ };
35
+
36
+ export {
37
+ STN_CDN_ASSET_BASE,
38
+ STN_LAYER0_BACKGROUND_DEMO_IMAGES,
39
+ STN_LAYER0_BACKGROUND_ASSET_PATHS
40
+ };
41
+ //# sourceMappingURL=chunk-XBFXX3D6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/stnLayer0BackgroundAssets.ts"],"sourcesContent":["/**\n * L0 preset images — Hosted on STN Official Vercel CDN for zero-setup & instant loading.\n */\nexport const STN_CDN_ASSET_BASE = 'https://stn-design.vercel.app/images/layer0'\n\nexport const STN_LAYER0_BACKGROUND_DEMO_IMAGES = {\n dashboard: `${STN_CDN_ASSET_BASE}/dashboard-light.png`,\n dashboardLight: `${STN_CDN_ASSET_BASE}/dashboard-light.png`,\n dashboardDark: `${STN_CDN_ASSET_BASE}/dashboard-dark.png`,\n showroomA: `${STN_CDN_ASSET_BASE}/showroom-a-light.png`,\n showroomALight: `${STN_CDN_ASSET_BASE}/showroom-a-light.png`,\n showroomADark: `${STN_CDN_ASSET_BASE}/showroom-a-dark.png`,\n showroomB: `${STN_CDN_ASSET_BASE}/showroom-b-light.png`,\n showroomBLight: `${STN_CDN_ASSET_BASE}/showroom-b-light.png`,\n showroomBDark: `${STN_CDN_ASSET_BASE}/showroom-b-dark.png`,\n mapLight: `${STN_CDN_ASSET_BASE}/map-light.png`,\n mapDark: `${STN_CDN_ASSET_BASE}/map-dark.png`,\n login: `${STN_CDN_ASSET_BASE}/login-light.png`,\n loginLight: `${STN_CDN_ASSET_BASE}/login-light.png`,\n loginDark: `${STN_CDN_ASSET_BASE}/login-dark.png`,\n} as const\n\n/** Pub CSS @assets 경로 — HTML·vanilla 소비자용 */\nexport const STN_LAYER0_BACKGROUND_ASSET_PATHS = {\n dashboard: '@assets/images/layer0/dashboard-light.png',\n dashboardLight: '@assets/images/layer0/dashboard-light.png',\n dashboardDark: '@assets/images/layer0/dashboard-dark.png',\n showroomA: '@assets/images/layer0/showroom-a-light.png',\n showroomALight: '@assets/images/layer0/showroom-a-light.png',\n showroomADark: '@assets/images/layer0/showroom-a-dark.png',\n showroomB: '@assets/images/layer0/showroom-b-light.png',\n showroomBLight: '@assets/images/layer0/showroom-b-light.png',\n showroomBDark: '@assets/images/layer0/showroom-b-dark.png',\n mapLight: '@assets/images/layer0/map-light.png',\n mapDark: '@assets/images/layer0/map-dark.png',\n login: '@assets/images/layer0/login-light.png',\n loginLight: '@assets/images/layer0/login-light.png',\n loginDark: '@assets/images/layer0/login-dark.png',\n} as const\n"],"mappings":";AAGO,IAAM,qBAAqB;AAE3B,IAAM,oCAAoC;AAAA,EAC/C,WAAW,GAAG,kBAAkB;AAAA,EAChC,gBAAgB,GAAG,kBAAkB;AAAA,EACrC,eAAe,GAAG,kBAAkB;AAAA,EACpC,WAAW,GAAG,kBAAkB;AAAA,EAChC,gBAAgB,GAAG,kBAAkB;AAAA,EACrC,eAAe,GAAG,kBAAkB;AAAA,EACpC,WAAW,GAAG,kBAAkB;AAAA,EAChC,gBAAgB,GAAG,kBAAkB;AAAA,EACrC,eAAe,GAAG,kBAAkB;AAAA,EACpC,UAAU,GAAG,kBAAkB;AAAA,EAC/B,SAAS,GAAG,kBAAkB;AAAA,EAC9B,OAAO,GAAG,kBAAkB;AAAA,EAC5B,YAAY,GAAG,kBAAkB;AAAA,EACjC,WAAW,GAAG,kBAAkB;AAClC;AAGO,IAAM,oCAAoC;AAAA,EAC/C,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,WAAW;AACb;","names":[]}
package/dist/cli.js CHANGED
@@ -33,8 +33,7 @@ import {
33
33
  import {
34
34
  STN_LAYER0_BACKGROUND_USAGE
35
35
  } from "./chunk-QAPQ4DB2.js";
36
- import "./chunk-DFXOZYYY.js";
37
- import "./chunk-OKSQLPEC.js";
36
+ import "./chunk-XBFXX3D6.js";
38
37
  import {
39
38
  STN_LAYOUT_LIST_VIEW_USAGE
40
39
  } from "./chunk-7ASY5YJ6.js";
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/index.ts","../src/cli/runHelp.ts","../src/cli/resolveScaffold.ts","../src/cli/stnCliCatalog.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport process from 'node:process'\n\nimport { runStnHelp } from './runHelp'\n\nconst require = createRequire(import.meta.url)\nconst { version } = require('../package.json') as { version: string }\n\nexport { runStnHelp } from './runHelp'\nexport { STN_CLI_CATALOG, listStnCliCatalog } from './stnCliCatalog'\nexport { resolveStnScaffold } from './resolveScaffold'\n\nexport async function runCli(argv: string[]): Promise<void> {\n const [, , command, ...rest] = argv\n\n if (command === 'help' || command === undefined) {\n await runStnHelp()\n return\n }\n\n if (command === '--version' || command === '-V') {\n console.log(version)\n return\n }\n\n console.error(`Unknown command: ${command}${rest.length ? ` ${rest.join(' ')}` : ''}`)\n console.error('Usage: npx @stn-uiux/pub-ui help')\n process.exitCode = 1\n}\n","import process from 'node:process'\nimport { existsSync } from 'node:fs'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, join, resolve } from 'node:path'\n\nimport { confirm, input, select } from '@inquirer/prompts'\n\nimport { resolveStnScaffold } from './resolveScaffold'\nimport {\n listStnCliCatalog,\n STN_CLI_CATEGORY_LABELS,\n type StnCliCatalogItem,\n type StnCliCategory,\n} from './stnCliCatalog'\n\nconst CATEGORY_ORDER: StnCliCategory[] = ['component', 'pattern', 'layout']\n\nasync function pickCategory(): Promise<StnCliCategory> {\n return select({\n message: '무엇을 만들까요?',\n choices: CATEGORY_ORDER.map((value) => ({\n value,\n name: `${CATEGORY_ORDER.indexOf(value) + 1}. ${STN_CLI_CATEGORY_LABELS[value]}`,\n })),\n })\n}\n\nasync function pickItem(category: StnCliCategory): Promise<StnCliCatalogItem> {\n const items = listStnCliCatalog(category)\n return select({\n message: `${STN_CLI_CATEGORY_LABELS[category]} 선택`,\n choices: items.map((item) => ({\n value: item,\n name: item.label,\n description: item.docPath,\n })),\n })\n}\n\nasync function pickOutputPath(item: StnCliCatalogItem, cwd: string): Promise<string> {\n const defaultDir = join(cwd, 'src', 'pages')\n const defaultPath = join(defaultDir, item.defaultFileName)\n\n const answer = await input({\n message: '생성할 파일 경로',\n default: defaultPath,\n })\n\n return resolve(cwd, answer.trim() || defaultPath)\n}\n\nfunction printNextSteps(item: StnCliCatalogItem, filePath: string) {\n console.log('\\n✓ 생성 완료:', filePath)\n if (item.docPath) {\n console.log(' 문서:', item.docPath)\n }\n console.log('\\n다음 단계:')\n console.log(' 1. main.tsx 에 @stn-uiux/pub-ui/styles.css import 확인')\n console.log(' 2. StnProvider 로 앱 래핑')\n console.log(' 3. 라우터에 이 페이지 컴포넌트 연결')\n if (item.category === 'layout') {\n console.log(' 4. Playground 옵션 세부 조정은 문서 사이트에서 React/HTML 코드 복사')\n }\n}\n\nexport async function runStnHelp(cwd = process.cwd()): Promise<void> {\n console.log('STN Pub help — 컴포넌트 · 패턴 · 레이아웃 scaffold\\n')\n\n const category = await pickCategory()\n const item = await pickItem(category)\n const filePath = await pickOutputPath(item, cwd)\n\n if (existsSync(filePath)) {\n const overwrite = await confirm({\n message: `${filePath} 가 이미 있습니다. 덮어쓸까요?`,\n default: false,\n })\n if (!overwrite) {\n console.log('취소했습니다.')\n return\n }\n }\n\n const code = resolveStnScaffold(item.scaffoldKey)\n await mkdir(dirname(filePath), { recursive: true })\n await writeFile(filePath, code, 'utf8')\n\n printNextSteps(item, filePath)\n}\n","import { STN_ALERT_CENTER_USAGE } from '../data/stnAlertCenter'\nimport { STN_HEADER_USAGE } from '../data/stnHeader'\nimport { STN_DATE_PICKER_USAGE } from '../data/stnDatePicker'\nimport { STN_DROPDOWN_USAGE } from '../data/stnDropdown'\nimport { STN_SIDE_NAV_ITEM_USAGE, STN_SIDE_NAVIGATION_USAGE } from '../data/stnSideNavigation'\nimport { STN_LAYER0_BACKGROUND_USAGE } from '../data/stnLayer0Background'\nimport { STN_LAYER_ROLE_USAGE } from '../data/stnLayer'\nimport { STN_LAYOUT_LIST_VIEW_USAGE } from '../data/stnLayout'\nimport { STN_LOADING_SKELETON_USAGE } from '../data/stnLoadingSkeleton'\nimport { STN_POPUP_USAGE } from '../data/stnPopup'\nimport { STN_SCROLL_USAGE } from '../data/stnScroll'\nimport { STN_SEARCH_REQUIREMENT_USAGE } from '../data/stnSearchRequirement'\nimport { STN_TABLE_REACT_EXAMPLE } from '../data/stnTable'\nimport { STN_TOAST_REACT_USAGE } from '../data/stnToast'\nimport { STN_TREE_REACT_EXAMPLE } from '../data/stnTree'\nimport { STN_TEXT_FIELD_USAGE } from '../data/stnTextField'\nimport { STN_WIDGET_FIGMA_SHELL_REACT, STN_WIDGET_USAGE } from '../data/stnWidget'\n\nfunction wrapJsxPage(componentName: string, imports: string, body: string): string {\n return `/** Generated by \\`npx @stn-uiux/pub-ui help\\` */\n${imports}\n\nexport function ${componentName}() {\n${body}\n}\n`\n}\n\nconst SCAFFOLDS: Record<string, () => string> = {\n button: () =>\n wrapJsxPage(\n 'ButtonDemoPage',\n \"import { StnButton } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24, display: 'flex', gap: 8 }}>\n <StnButton variant=\"contained\" size=\"M\">레이블</StnButton>\n <StnButton variant=\"ghost\" size=\"S\">레이블</StnButton>\n <StnButton icon=\"line/settings\" aria-label=\"설정\" size=\"M\" />\n </div>\n )`,\n ),\n 'icon-button': () =>\n wrapJsxPage(\n 'IconButtonDemoPage',\n \"import { StnButton } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnButton icon=\"line/settings\" aria-label=\"설정\" size=\"M\" />\n </div>\n )`,\n ),\n toast: () => STN_TOAST_REACT_USAGE,\n 'progress-bar': () =>\n wrapJsxPage(\n 'ProgressBarDemoPage',\n \"import { StnProgressBar } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnProgressBar value={65} label=\"진행률\" />\n </div>\n )`,\n ),\n checkbox: () =>\n wrapJsxPage(\n 'CheckboxDemoPage',\n \"import { useState } from 'react'\\nimport { StnCheckbox } from '@stn-uiux/pub-ui-react'\",\n ` const [checked, setChecked] = useState(true)\n return (\n <div style={{ padding: 24 }}>\n <StnCheckbox checked={checked} onChange={setChecked} label=\"동의합니다\" />\n </div>\n )`,\n ),\n 'toggle-button': () =>\n wrapJsxPage(\n 'ToggleButtonDemoPage',\n \"import { StnToggleButton } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnToggleButton pressed={false}>토글</StnToggleButton>\n </div>\n )`,\n ),\n segmented: () =>\n wrapJsxPage(\n 'SegmentedDemoPage',\n \"import { useState } from 'react'\\nimport { StnSegmented } from '@stn-uiux/pub-ui-react'\",\n ` const [mode, setMode] = useState('normal')\n return (\n <div style={{ padding: 24 }}>\n <StnSegmented\n aria-label=\"로그인 방식\"\n value={mode}\n onChange={setMode}\n options={[\n { value: 'normal', label: '일반 로그인' },\n { value: 'social', label: '소셜 로그인' },\n ]}\n />\n </div>\n )`,\n ),\n radio: () =>\n wrapJsxPage(\n 'RadioDemoPage',\n \"import { useState } from 'react'\\nimport { StnRadioGroup } from '@stn-uiux/pub-ui-react'\",\n ` const [value, setValue] = useState('a')\n return (\n <div style={{ padding: 24 }}>\n <StnRadioGroup\n name=\"demo\"\n value={value}\n onChange={setValue}\n options={[\n { value: 'a', label: '옵션 A' },\n { value: 'b', label: '옵션 B' },\n ]}\n />\n </div>\n )`,\n ),\n switch: () =>\n wrapJsxPage(\n 'SwitchDemoPage',\n \"import { useState } from 'react'\\nimport { StnSwitch } from '@stn-uiux/pub-ui-react'\",\n ` const [on, setOn] = useState(true)\n return (\n <div style={{ padding: 24 }}>\n <StnSwitch checked={on} onChange={setOn} label=\"알림\" />\n </div>\n )`,\n ),\n slider: () =>\n wrapJsxPage(\n 'SliderDemoPage',\n \"import { useState } from 'react'\\nimport { StnSlider } from '@stn-uiux/pub-ui-react'\",\n ` const [value, setValue] = useState(40)\n return (\n <div style={{ padding: 24, maxWidth: 320 }}>\n <StnSlider value={value} onChange={setValue} min={0} max={100} />\n </div>\n )`,\n ),\n chip: () =>\n wrapJsxPage(\n 'ChipDemoPage',\n \"import { StnChip } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24, display: 'flex', gap: 8 }}>\n <StnChip grade=\"critical\" />\n <StnChip grade=\"major\" variant=\"border\" />\n </div>\n )`,\n ),\n 'side-nav-item': () => STN_SIDE_NAV_ITEM_USAGE,\n breadcrumb: () =>\n wrapJsxPage(\n 'BreadcrumbDemoPage',\n \"import { StnBreadcrumb } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnBreadcrumb\n size=\"md\"\n items={[\n { id: 'home', label: 'Home', href: '#' },\n { id: 'list', label: '목록', current: true },\n ]}\n />\n </div>\n )`,\n ),\n 'header-title': () =>\n wrapJsxPage(\n 'HeaderTitleDemoPage',\n \"import { StnHeaderTitle } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnHeaderTitle title=\"Network Topology\" showClock />\n </div>\n )`,\n ),\n dropdown: () => STN_DROPDOWN_USAGE,\n 'text-field': () => STN_TEXT_FIELD_USAGE,\n 'date-picker': () => STN_DATE_PICKER_USAGE,\n scroll: () => STN_SCROLL_USAGE,\n table: () => STN_TABLE_REACT_EXAMPLE,\n pagination: () =>\n wrapJsxPage(\n 'PaginationDemoPage',\n \"import { StnPagination } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnPagination page={1} count={8} onChange={() => {}} />\n </div>\n )`,\n ),\n widget: () => STN_WIDGET_FIGMA_SHELL_REACT,\n 'tree-node': () => STN_TREE_REACT_EXAMPLE,\n\n 'layer-l0': () => STN_LAYER0_BACKGROUND_USAGE,\n 'layer-l1': () => STN_LAYER_ROLE_USAGE,\n 'side-navigation': () => STN_SIDE_NAVIGATION_USAGE,\n 'alert-center': () => STN_ALERT_CENTER_USAGE,\n 'search-bar': () => STN_SEARCH_REQUIREMENT_USAGE,\n header: () => STN_HEADER_USAGE,\n background: () => STN_LAYER0_BACKGROUND_USAGE,\n popup: () => STN_POPUP_USAGE,\n 'data-table': () => STN_TABLE_REACT_EXAMPLE,\n tree: () => STN_TREE_REACT_EXAMPLE,\n 'loading-skeleton': () => STN_LOADING_SKELETON_USAGE,\n 'widget-pattern': () => STN_WIDGET_USAGE,\n\n login: () =>\n wrapJsxPage(\n 'LoginPage',\n \"import { LoginPageScaffold } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <LoginPageScaffold\n onLogin={(id, password) => {\n console.log(id, password)\n }}\n />\n )`,\n ),\n 'list-view': () => STN_LAYOUT_LIST_VIEW_USAGE,\n 'map-dashboard': () => `import {\n DashboardPageScaffold,\n StnHeader,\n StnSideNavigation,\n} from '@stn-uiux/pub-ui-react'\n\n/** Map Dashboard — /stn-design/layouts/dashboard/map Playground 기본 (SideNav · L1 헤더 · map-bg CSS) */\nexport function MapDashboardPage() {\n return (\n <DashboardPageScaffold\n shell=\"layer\"\n wrapClassName=\"stn-page--map-bg\"\n gnb={\n <StnSideNavigation>\n <StnSideNavigation.Header>\n <StnSideNavigation.Logo />\n <StnSideNavigation.Toggle />\n </StnSideNavigation.Header>\n <StnSideNavigation.Menu>\n <StnSideNavigation.Item label=\"메인 대시보드\" active />\n <StnSideNavigation.Item label=\"서버 모니터링\" />\n <StnSideNavigation.Item label=\"네트워크 분석\" />\n </StnSideNavigation.Menu>\n <StnSideNavigation.Spacer />\n <StnSideNavigation.Footer curved>\n <StnSideNavigation.Watermark />\n <StnSideNavigation.Item label=\"알림\" badge={12} />\n <StnSideNavigation.Item label=\"설정\" />\n </StnSideNavigation.Footer>\n </StnSideNavigation>\n }\n header={\n <StnHeader variant=\"widget\" />\n }\n mapMessage=\"Map Dashboard 캔버스\"\n mapNote=\"GIS / 맵 엔진 마운트 영역\"\n />\n )\n}`,\n 'topology-dashboard': () => `import {\n DashboardPageScaffold,\n StnHeader,\n StnSideNavigation,\n} from '@stn-uiux/pub-ui-react'\n\n/** Topology Dashboard — /stn-design/layouts/dashboard/topology Playground 기본 (SideNav · L1 헤더 · map-bg CSS) */\nexport function TopologyDashboardPage() {\n return (\n <DashboardPageScaffold\n shell=\"layer\"\n wrapClassName=\"stn-page--map-bg\"\n gnb={\n <StnSideNavigation>\n <StnSideNavigation.Header>\n <StnSideNavigation.Logo />\n <StnSideNavigation.Toggle />\n </StnSideNavigation.Header>\n <StnSideNavigation.Menu>\n <StnSideNavigation.Item label=\"메인 대시보드\" active />\n <StnSideNavigation.Item label=\"서버 모니터링\" />\n <StnSideNavigation.Item label=\"네트워크 분석\" />\n </StnSideNavigation.Menu>\n <StnSideNavigation.Spacer />\n <StnSideNavigation.Footer curved>\n <StnSideNavigation.Watermark />\n <StnSideNavigation.Item label=\"알림\" badge={12} />\n <StnSideNavigation.Item label=\"설정\" />\n </StnSideNavigation.Footer>\n </StnSideNavigation>\n }\n header={\n <StnHeader variant=\"widget\" />\n }\n mapMessage=\"Topology Dashboard 캔버스\"\n mapNote=\"네트워크 토폴로지 캔버스 마운트 영역\"\n />\n )\n}`,\n\n 'widget-grid': () => `import {\n DashboardPageScaffold,\n StnHeader,\n StnSideNavigation,\n StnWidget,\n} from '@stn-uiux/pub-ui-react'\n\n/** Widget Grid Board — /stn-design/layouts/dashboard/widget Playground 기본 (SideNav · L1 헤더 포함) */\nexport function WidgetGridDashboardPage() {\n return (\n <DashboardPageScaffold\n shell=\"layer\"\n gnb={\n <StnSideNavigation>\n <StnSideNavigation.Header>\n <StnSideNavigation.Logo />\n <StnSideNavigation.Toggle />\n </StnSideNavigation.Header>\n <StnSideNavigation.Menu>\n <StnSideNavigation.Item label=\"메인 대시보드\" active />\n <StnSideNavigation.Item label=\"서버 모니터링\" />\n <StnSideNavigation.Item label=\"네트워크 분석\" />\n </StnSideNavigation.Menu>\n <StnSideNavigation.Spacer />\n <StnSideNavigation.Footer curved>\n <StnSideNavigation.Watermark />\n <StnSideNavigation.Item label=\"알림\" badge={12} />\n <StnSideNavigation.Item label=\"설정\" />\n </StnSideNavigation.Footer>\n </StnSideNavigation>\n }\n header={\n <StnHeader variant=\"widget\" />\n }\n >\n <div>\n <div>\n <StnWidget title=\"장애 통계\" appearance=\"translucent\">\n <StnWidget.ChartSlot label=\"chart\" />\n </StnWidget>\n </div>\n <div>\n <StnWidget title=\"세션 현황\" appearance=\"translucent\">\n <StnWidget.ChartSlot label=\"chart\" />\n </StnWidget>\n </div>\n <div>\n <StnWidget title=\"모니터링\" appearance=\"translucent\">\n <StnWidget.ChartSlot label=\"chart\" />\n </StnWidget>\n </div>\n </div>\n </DashboardPageScaffold>\n )\n}`,\n}\n\nexport function resolveStnScaffold(scaffoldKey: string): string {\n const factory = SCAFFOLDS[scaffoldKey]\n if (!factory) {\n throw new Error(`Unknown scaffold: ${scaffoldKey}`)\n }\n const code = factory().trimEnd()\n return code.endsWith('\\n') ? code : `${code}\\n`\n}\n","export type StnCliCategory = 'component' | 'pattern' | 'layout'\n\nexport type StnCliCatalogItem = {\n id: string\n label: string\n category: StnCliCategory\n scaffoldKey: string\n /** 생성 파일 기본명 (예: ListViewPage.tsx) */\n defaultFileName: string\n docPath?: string\n}\n\n/** `npx @stn-uiux/pub-ui help` — 문서 사이트 nav와 동일한 선택지 */\nexport const STN_CLI_CATALOG: StnCliCatalogItem[] = [\n // —— Components ——\n { id: 'button', label: 'Button', category: 'component', scaffoldKey: 'button', defaultFileName: 'ButtonDemoPage.tsx', docPath: '/stn-design/components/button' },\n { id: 'toast', label: 'Toast', category: 'component', scaffoldKey: 'toast', defaultFileName: 'ToastDemoPage.tsx', docPath: '/stn-design/components/toast' },\n { id: 'progress-bar', label: 'Progress Bar', category: 'component', scaffoldKey: 'progress-bar', defaultFileName: 'ProgressBarDemoPage.tsx', docPath: '/stn-design/components/progress-bar' },\n { id: 'checkbox', label: 'Checkbox', category: 'component', scaffoldKey: 'checkbox', defaultFileName: 'CheckboxDemoPage.tsx', docPath: '/stn-design/components/checkbox' },\n { id: 'toggle-button', label: 'Toggle Button', category: 'component', scaffoldKey: 'toggle-button', defaultFileName: 'ToggleButtonDemoPage.tsx', docPath: '/stn-design/components/toggle-button' },\n { id: 'segmented', label: 'Segmented', category: 'component', scaffoldKey: 'segmented', defaultFileName: 'SegmentedDemoPage.tsx', docPath: '/stn-design/components/segmented' },\n { id: 'radio', label: 'Radio', category: 'component', scaffoldKey: 'radio', defaultFileName: 'RadioDemoPage.tsx', docPath: '/stn-design/components/radio' },\n { id: 'switch', label: 'Switch', category: 'component', scaffoldKey: 'switch', defaultFileName: 'SwitchDemoPage.tsx', docPath: '/stn-design/components/switch' },\n { id: 'slider', label: 'Slider', category: 'component', scaffoldKey: 'slider', defaultFileName: 'SliderDemoPage.tsx', docPath: '/stn-design/components/slider' },\n { id: 'chip', label: 'Chip', category: 'component', scaffoldKey: 'chip', defaultFileName: 'ChipDemoPage.tsx', docPath: '/stn-design/components/chip' },\n { id: 'side-nav-item', label: 'Side Nav Item', category: 'component', scaffoldKey: 'side-nav-item', defaultFileName: 'SideNavItemDemoPage.tsx', docPath: '/stn-design/components/side-nav-item' },\n { id: 'breadcrumb', label: 'Breadcrumb', category: 'component', scaffoldKey: 'breadcrumb', defaultFileName: 'BreadcrumbDemoPage.tsx', docPath: '/stn-design/components/breadcrumb' },\n { id: 'header-title', label: 'Header title', category: 'component', scaffoldKey: 'header-title', defaultFileName: 'HeaderTitleDemoPage.tsx', docPath: '/stn-design/components/header-title' },\n { id: 'dropdown', label: 'Dropdown', category: 'component', scaffoldKey: 'dropdown', defaultFileName: 'DropdownDemoPage.tsx', docPath: '/stn-design/components/dropdown' },\n { id: 'text-field', label: 'TextField', category: 'component', scaffoldKey: 'text-field', defaultFileName: 'TextFieldDemoPage.tsx', docPath: '/stn-design/components/text-field' },\n { id: 'date-picker', label: 'Date range picker', category: 'component', scaffoldKey: 'date-picker', defaultFileName: 'DatePickerDemoPage.tsx', docPath: '/stn-design/components/date-picker' },\n { id: 'indicator', label: 'System monitor · Theme', category: 'component', scaffoldKey: 'indicator', defaultFileName: 'IndicatorDemoPage.tsx', docPath: '/stn-design/components/indicator' },\n { id: 'scroll', label: 'Scroll', category: 'component', scaffoldKey: 'scroll', defaultFileName: 'ScrollDemoPage.tsx', docPath: '/stn-design/components/scroll' },\n { id: 'table', label: 'Table', category: 'component', scaffoldKey: 'table', defaultFileName: 'TableDemoPage.tsx', docPath: '/stn-design/components/table' },\n { id: 'table-pagination', label: 'Table · Pagination', category: 'component', scaffoldKey: 'pagination', defaultFileName: 'PaginationDemoPage.tsx', docPath: '/stn-design/components/table/pagination' },\n { id: 'widget', label: 'Widget', category: 'component', scaffoldKey: 'widget', defaultFileName: 'WidgetDemoPage.tsx', docPath: '/stn-design/components/widget' },\n { id: 'tree-node', label: 'Tree Node', category: 'component', scaffoldKey: 'tree-node', defaultFileName: 'TreeNodeDemoPage.tsx', docPath: '/stn-design/components/tree-node' },\n\n // —— Patterns ——\n { id: 'layer-l0', label: 'Layer · L0 Background', category: 'pattern', scaffoldKey: 'layer-l0', defaultFileName: 'Layer0BackgroundPattern.tsx', docPath: '/stn-design/layouts/layer/0' },\n { id: 'layer-l1', label: 'Layer · L1 Content', category: 'pattern', scaffoldKey: 'layer-l1', defaultFileName: 'Layer1ContentPattern.tsx', docPath: '/stn-design/layouts/layer/1' },\n { id: 'side-navigation', label: 'Side Navigation', category: 'pattern', scaffoldKey: 'side-navigation', defaultFileName: 'SideNavigationPatternPage.tsx', docPath: '/stn-design/pattern/side-navigation' },\n { id: 'alert-center', label: 'Alert center', category: 'pattern', scaffoldKey: 'alert-center', defaultFileName: 'AlertCenterPatternPage.tsx', docPath: '/stn-design/pattern/alert-center' },\n { id: 'search-bar', label: 'Search bar', category: 'pattern', scaffoldKey: 'search-bar', defaultFileName: 'SearchBarPatternPage.tsx', docPath: '/stn-design/pattern/search-bar' },\n { id: 'header', label: 'Header', category: 'pattern', scaffoldKey: 'header', defaultFileName: 'HeaderPatternPage.tsx', docPath: '/stn-design/pattern/header' },\n { id: 'background', label: 'Background', category: 'pattern', scaffoldKey: 'background', defaultFileName: 'BackgroundPatternPage.tsx', docPath: '/stn-design/layouts/layer/0' },\n { id: 'popup', label: 'Popup', category: 'pattern', scaffoldKey: 'popup', defaultFileName: 'PopupPatternPage.tsx', docPath: '/stn-design/pattern/popup' },\n { id: 'data-table', label: 'Data Table', category: 'pattern', scaffoldKey: 'data-table', defaultFileName: 'DataTablePatternPage.tsx', docPath: '/stn-design/pattern/data-table' },\n { id: 'tree', label: 'Tree', category: 'pattern', scaffoldKey: 'tree', defaultFileName: 'TreePatternPage.tsx', docPath: '/stn-design/pattern/tree' },\n { id: 'loading-skeleton', label: 'Loading skeleton', category: 'pattern', scaffoldKey: 'loading-skeleton', defaultFileName: 'LoadingSkeletonPatternPage.tsx', docPath: '/stn-design/pattern/loading-skeleton' },\n { id: 'widget-pattern', label: 'Widget', category: 'pattern', scaffoldKey: 'widget-pattern', defaultFileName: 'WidgetPatternPage.tsx', docPath: '/stn-design/pattern/widget' },\n\n // —— Layouts ——\n { id: 'login', label: 'Login', category: 'layout', scaffoldKey: 'login', defaultFileName: 'LoginPage.tsx', docPath: '/stn-design/layouts/login' },\n { id: 'list-view', label: 'List view', category: 'layout', scaffoldKey: 'list-view', defaultFileName: 'ListViewPage.tsx', docPath: '/stn-design/layouts/list-view' },\n { id: 'map-dashboard', label: 'Map Dashboard', category: 'layout', scaffoldKey: 'map-dashboard', defaultFileName: 'MapDashboardPage.tsx', docPath: '/stn-design/layouts/dashboard/map' },\n { id: 'topology-dashboard', label: 'Topology Dashboard', category: 'layout', scaffoldKey: 'topology-dashboard', defaultFileName: 'TopologyDashboardPage.tsx', docPath: '/stn-design/layouts/dashboard/topology' },\n { id: 'widget-grid', label: 'Widget Grid Board', category: 'layout', scaffoldKey: 'widget-grid', defaultFileName: 'WidgetGridDashboardPage.tsx', docPath: '/stn-design/layouts/dashboard/widget' },\n]\n\nexport const STN_CLI_CATEGORY_LABELS: Record<StnCliCategory, string> = {\n component: '컴포넌트',\n pattern: '패턴',\n layout: '레이아웃',\n}\n\nexport function listStnCliCatalog(category: StnCliCategory): StnCliCatalogItem[] {\n return STN_CLI_CATALOG.filter((item) => item.category === category)\n}\n\n"],"mappings":"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","names":["process","require","process"]}
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/cli/runHelp.ts","../src/cli/resolveScaffold.ts","../src/cli/stnCliCatalog.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport process from 'node:process'\n\nimport { runStnHelp } from './runHelp'\n\nconst require = createRequire(import.meta.url)\nconst { version } = require('../package.json') as { version: string }\n\nexport { runStnHelp } from './runHelp'\nexport { STN_CLI_CATALOG, listStnCliCatalog } from './stnCliCatalog'\nexport { resolveStnScaffold } from './resolveScaffold'\n\nexport async function runCli(argv: string[]): Promise<void> {\n const [, , command, ...rest] = argv\n\n if (command === 'help' || command === undefined) {\n await runStnHelp()\n return\n }\n\n if (command === '--version' || command === '-V') {\n console.log(version)\n return\n }\n\n console.error(`Unknown command: ${command}${rest.length ? ` ${rest.join(' ')}` : ''}`)\n console.error('Usage: npx @stn-uiux/pub-ui help')\n process.exitCode = 1\n}\n","import process from 'node:process'\nimport { existsSync } from 'node:fs'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, join, resolve } from 'node:path'\n\nimport { confirm, input, select } from '@inquirer/prompts'\n\nimport { resolveStnScaffold } from './resolveScaffold'\nimport {\n listStnCliCatalog,\n STN_CLI_CATEGORY_LABELS,\n type StnCliCatalogItem,\n type StnCliCategory,\n} from './stnCliCatalog'\n\nconst CATEGORY_ORDER: StnCliCategory[] = ['component', 'pattern', 'layout']\n\nasync function pickCategory(): Promise<StnCliCategory> {\n return select({\n message: '무엇을 만들까요?',\n choices: CATEGORY_ORDER.map((value) => ({\n value,\n name: `${CATEGORY_ORDER.indexOf(value) + 1}. ${STN_CLI_CATEGORY_LABELS[value]}`,\n })),\n })\n}\n\nasync function pickItem(category: StnCliCategory): Promise<StnCliCatalogItem> {\n const items = listStnCliCatalog(category)\n return select({\n message: `${STN_CLI_CATEGORY_LABELS[category]} 선택`,\n choices: items.map((item) => ({\n value: item,\n name: item.label,\n description: item.docPath,\n })),\n })\n}\n\nasync function pickOutputPath(item: StnCliCatalogItem, cwd: string): Promise<string> {\n const defaultDir = join(cwd, 'src', 'pages')\n const defaultPath = join(defaultDir, item.defaultFileName)\n\n const answer = await input({\n message: '생성할 파일 경로',\n default: defaultPath,\n })\n\n return resolve(cwd, answer.trim() || defaultPath)\n}\n\nfunction printNextSteps(item: StnCliCatalogItem, filePath: string) {\n console.log('\\n✓ 생성 완료:', filePath)\n if (item.docPath) {\n console.log(' 문서:', item.docPath)\n }\n console.log('\\n다음 단계:')\n console.log(' 1. main.tsx 에 @stn-uiux/pub-ui/styles.css import 확인')\n console.log(' 2. StnProvider 로 앱 래핑')\n console.log(' 3. 라우터에 이 페이지 컴포넌트 연결')\n if (item.category === 'layout') {\n console.log(' 4. Playground 옵션 세부 조정은 문서 사이트에서 React/HTML 코드 복사')\n }\n}\n\nexport async function runStnHelp(cwd = process.cwd()): Promise<void> {\n console.log('STN Pub help — 컴포넌트 · 패턴 · 레이아웃 scaffold\\n')\n\n const category = await pickCategory()\n const item = await pickItem(category)\n const filePath = await pickOutputPath(item, cwd)\n\n if (existsSync(filePath)) {\n const overwrite = await confirm({\n message: `${filePath} 가 이미 있습니다. 덮어쓸까요?`,\n default: false,\n })\n if (!overwrite) {\n console.log('취소했습니다.')\n return\n }\n }\n\n const code = resolveStnScaffold(item.scaffoldKey)\n await mkdir(dirname(filePath), { recursive: true })\n await writeFile(filePath, code, 'utf8')\n\n printNextSteps(item, filePath)\n}\n","import { STN_ALERT_CENTER_USAGE } from '../data/stnAlertCenter'\nimport { STN_HEADER_USAGE } from '../data/stnHeader'\nimport { STN_DATE_PICKER_USAGE } from '../data/stnDatePicker'\nimport { STN_DROPDOWN_USAGE } from '../data/stnDropdown'\nimport { STN_SIDE_NAV_ITEM_USAGE, STN_SIDE_NAVIGATION_USAGE } from '../data/stnSideNavigation'\nimport { STN_LAYER0_BACKGROUND_USAGE } from '../data/stnLayer0Background'\nimport { STN_LAYER_ROLE_USAGE } from '../data/stnLayer'\nimport { STN_LAYOUT_LIST_VIEW_USAGE } from '../data/stnLayout'\nimport { STN_LOADING_SKELETON_USAGE } from '../data/stnLoadingSkeleton'\nimport { STN_POPUP_USAGE } from '../data/stnPopup'\nimport { STN_SCROLL_USAGE } from '../data/stnScroll'\nimport { STN_SEARCH_REQUIREMENT_USAGE } from '../data/stnSearchRequirement'\nimport { STN_TABLE_REACT_EXAMPLE } from '../data/stnTable'\nimport { STN_TOAST_REACT_USAGE } from '../data/stnToast'\nimport { STN_TREE_REACT_EXAMPLE } from '../data/stnTree'\nimport { STN_TEXT_FIELD_USAGE } from '../data/stnTextField'\nimport { STN_WIDGET_FIGMA_SHELL_REACT, STN_WIDGET_USAGE } from '../data/stnWidget'\n\nfunction wrapJsxPage(componentName: string, imports: string, body: string): string {\n return `/** Generated by \\`npx @stn-uiux/pub-ui help\\` */\n${imports}\n\nexport function ${componentName}() {\n${body}\n}\n`\n}\n\nconst SCAFFOLDS: Record<string, () => string> = {\n button: () =>\n wrapJsxPage(\n 'ButtonDemoPage',\n \"import { StnButton } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24, display: 'flex', gap: 8 }}>\n <StnButton variant=\"contained\" size=\"M\">레이블</StnButton>\n <StnButton variant=\"ghost\" size=\"S\">레이블</StnButton>\n <StnButton icon=\"line/settings\" aria-label=\"설정\" size=\"M\" />\n </div>\n )`,\n ),\n 'icon-button': () =>\n wrapJsxPage(\n 'IconButtonDemoPage',\n \"import { StnButton } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnButton icon=\"line/settings\" aria-label=\"설정\" size=\"M\" />\n </div>\n )`,\n ),\n toast: () => STN_TOAST_REACT_USAGE,\n 'progress-bar': () =>\n wrapJsxPage(\n 'ProgressBarDemoPage',\n \"import { StnProgressBar } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnProgressBar value={65} label=\"진행률\" />\n </div>\n )`,\n ),\n checkbox: () =>\n wrapJsxPage(\n 'CheckboxDemoPage',\n \"import { useState } from 'react'\\nimport { StnCheckbox } from '@stn-uiux/pub-ui-react'\",\n ` const [checked, setChecked] = useState(true)\n return (\n <div style={{ padding: 24 }}>\n <StnCheckbox checked={checked} onChange={setChecked} label=\"동의합니다\" />\n </div>\n )`,\n ),\n 'toggle-button': () =>\n wrapJsxPage(\n 'ToggleButtonDemoPage',\n \"import { StnToggleButton } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnToggleButton pressed={false}>토글</StnToggleButton>\n </div>\n )`,\n ),\n segmented: () =>\n wrapJsxPage(\n 'SegmentedDemoPage',\n \"import { useState } from 'react'\\nimport { StnSegmented } from '@stn-uiux/pub-ui-react'\",\n ` const [mode, setMode] = useState('normal')\n return (\n <div style={{ padding: 24 }}>\n <StnSegmented\n aria-label=\"로그인 방식\"\n value={mode}\n onChange={setMode}\n options={[\n { value: 'normal', label: '일반 로그인' },\n { value: 'social', label: '소셜 로그인' },\n ]}\n />\n </div>\n )`,\n ),\n radio: () =>\n wrapJsxPage(\n 'RadioDemoPage',\n \"import { useState } from 'react'\\nimport { StnRadioGroup } from '@stn-uiux/pub-ui-react'\",\n ` const [value, setValue] = useState('a')\n return (\n <div style={{ padding: 24 }}>\n <StnRadioGroup\n name=\"demo\"\n value={value}\n onChange={setValue}\n options={[\n { value: 'a', label: '옵션 A' },\n { value: 'b', label: '옵션 B' },\n ]}\n />\n </div>\n )`,\n ),\n switch: () =>\n wrapJsxPage(\n 'SwitchDemoPage',\n \"import { useState } from 'react'\\nimport { StnSwitch } from '@stn-uiux/pub-ui-react'\",\n ` const [on, setOn] = useState(true)\n return (\n <div style={{ padding: 24 }}>\n <StnSwitch checked={on} onChange={setOn} label=\"알림\" />\n </div>\n )`,\n ),\n slider: () =>\n wrapJsxPage(\n 'SliderDemoPage',\n \"import { useState } from 'react'\\nimport { StnSlider } from '@stn-uiux/pub-ui-react'\",\n ` const [value, setValue] = useState(40)\n return (\n <div style={{ padding: 24, maxWidth: 320 }}>\n <StnSlider value={value} onChange={setValue} min={0} max={100} />\n </div>\n )`,\n ),\n chip: () =>\n wrapJsxPage(\n 'ChipDemoPage',\n \"import { StnChip } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24, display: 'flex', gap: 8 }}>\n <StnChip grade=\"critical\" />\n <StnChip grade=\"major\" variant=\"border\" />\n </div>\n )`,\n ),\n 'side-nav-item': () => STN_SIDE_NAV_ITEM_USAGE,\n breadcrumb: () =>\n wrapJsxPage(\n 'BreadcrumbDemoPage',\n \"import { StnBreadcrumb } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnBreadcrumb\n size=\"md\"\n items={[\n { id: 'home', label: 'Home', href: '#' },\n { id: 'list', label: '목록', current: true },\n ]}\n />\n </div>\n )`,\n ),\n 'header-title': () =>\n wrapJsxPage(\n 'HeaderTitleDemoPage',\n \"import { StnHeaderTitle } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnHeaderTitle title=\"Network Topology\" showClock />\n </div>\n )`,\n ),\n dropdown: () => STN_DROPDOWN_USAGE,\n 'text-field': () => STN_TEXT_FIELD_USAGE,\n 'date-picker': () => STN_DATE_PICKER_USAGE,\n scroll: () => STN_SCROLL_USAGE,\n table: () => STN_TABLE_REACT_EXAMPLE,\n pagination: () =>\n wrapJsxPage(\n 'PaginationDemoPage',\n \"import { StnPagination } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <div style={{ padding: 24 }}>\n <StnPagination page={1} count={8} onChange={() => {}} />\n </div>\n )`,\n ),\n widget: () => STN_WIDGET_FIGMA_SHELL_REACT,\n 'tree-node': () => STN_TREE_REACT_EXAMPLE,\n\n 'layer-l0': () => STN_LAYER0_BACKGROUND_USAGE,\n 'layer-l1': () => STN_LAYER_ROLE_USAGE,\n 'side-navigation': () => STN_SIDE_NAVIGATION_USAGE,\n 'alert-center': () => STN_ALERT_CENTER_USAGE,\n 'search-bar': () => STN_SEARCH_REQUIREMENT_USAGE,\n header: () => STN_HEADER_USAGE,\n background: () => STN_LAYER0_BACKGROUND_USAGE,\n popup: () => STN_POPUP_USAGE,\n 'data-table': () => STN_TABLE_REACT_EXAMPLE,\n tree: () => STN_TREE_REACT_EXAMPLE,\n 'loading-skeleton': () => STN_LOADING_SKELETON_USAGE,\n 'widget-pattern': () => STN_WIDGET_USAGE,\n\n login: () =>\n wrapJsxPage(\n 'LoginPage',\n \"import { LoginPageScaffold } from '@stn-uiux/pub-ui-react'\",\n ` return (\n <LoginPageScaffold\n onLogin={(id, password) => {\n console.log(id, password)\n }}\n />\n )`,\n ),\n 'list-view': () => STN_LAYOUT_LIST_VIEW_USAGE,\n 'map-dashboard': () => `import {\n DashboardPageScaffold,\n StnHeader,\n StnSideNavigation,\n} from '@stn-uiux/pub-ui-react'\n\n/** Map Dashboard — /stn-design/layouts/dashboard/map Playground 기본 (SideNav · L1 헤더 · map-bg CSS) */\nexport function MapDashboardPage() {\n return (\n <DashboardPageScaffold\n shell=\"layer\"\n wrapClassName=\"stn-page--map-bg\"\n gnb={\n <StnSideNavigation>\n <StnSideNavigation.Header>\n <StnSideNavigation.Logo />\n <StnSideNavigation.Toggle />\n </StnSideNavigation.Header>\n <StnSideNavigation.Menu>\n <StnSideNavigation.Item label=\"메인 대시보드\" active />\n <StnSideNavigation.Item label=\"서버 모니터링\" />\n <StnSideNavigation.Item label=\"네트워크 분석\" />\n </StnSideNavigation.Menu>\n <StnSideNavigation.Spacer />\n <StnSideNavigation.Footer curved>\n <StnSideNavigation.Watermark />\n <StnSideNavigation.Item label=\"알림\" badge={12} />\n <StnSideNavigation.Item label=\"설정\" />\n </StnSideNavigation.Footer>\n </StnSideNavigation>\n }\n header={\n <StnHeader variant=\"widget\" />\n }\n mapMessage=\"Map Dashboard 캔버스\"\n mapNote=\"GIS / 맵 엔진 마운트 영역\"\n />\n )\n}`,\n 'topology-dashboard': () => `import {\n DashboardPageScaffold,\n StnHeader,\n StnSideNavigation,\n} from '@stn-uiux/pub-ui-react'\n\n/** Topology Dashboard — /stn-design/layouts/dashboard/topology Playground 기본 (SideNav · L1 헤더 · map-bg CSS) */\nexport function TopologyDashboardPage() {\n return (\n <DashboardPageScaffold\n shell=\"layer\"\n wrapClassName=\"stn-page--map-bg\"\n gnb={\n <StnSideNavigation>\n <StnSideNavigation.Header>\n <StnSideNavigation.Logo />\n <StnSideNavigation.Toggle />\n </StnSideNavigation.Header>\n <StnSideNavigation.Menu>\n <StnSideNavigation.Item label=\"메인 대시보드\" active />\n <StnSideNavigation.Item label=\"서버 모니터링\" />\n <StnSideNavigation.Item label=\"네트워크 분석\" />\n </StnSideNavigation.Menu>\n <StnSideNavigation.Spacer />\n <StnSideNavigation.Footer curved>\n <StnSideNavigation.Watermark />\n <StnSideNavigation.Item label=\"알림\" badge={12} />\n <StnSideNavigation.Item label=\"설정\" />\n </StnSideNavigation.Footer>\n </StnSideNavigation>\n }\n header={\n <StnHeader variant=\"widget\" />\n }\n mapMessage=\"Topology Dashboard 캔버스\"\n mapNote=\"네트워크 토폴로지 캔버스 마운트 영역\"\n />\n )\n}`,\n\n 'widget-grid': () => `import {\n DashboardPageScaffold,\n StnHeader,\n StnSideNavigation,\n StnWidget,\n} from '@stn-uiux/pub-ui-react'\n\n/** Widget Grid Board — /stn-design/layouts/dashboard/widget Playground 기본 (SideNav · L1 헤더 포함) */\nexport function WidgetGridDashboardPage() {\n return (\n <DashboardPageScaffold\n shell=\"layer\"\n gnb={\n <StnSideNavigation>\n <StnSideNavigation.Header>\n <StnSideNavigation.Logo />\n <StnSideNavigation.Toggle />\n </StnSideNavigation.Header>\n <StnSideNavigation.Menu>\n <StnSideNavigation.Item label=\"메인 대시보드\" active />\n <StnSideNavigation.Item label=\"서버 모니터링\" />\n <StnSideNavigation.Item label=\"네트워크 분석\" />\n </StnSideNavigation.Menu>\n <StnSideNavigation.Spacer />\n <StnSideNavigation.Footer curved>\n <StnSideNavigation.Watermark />\n <StnSideNavigation.Item label=\"알림\" badge={12} />\n <StnSideNavigation.Item label=\"설정\" />\n </StnSideNavigation.Footer>\n </StnSideNavigation>\n }\n header={\n <StnHeader variant=\"widget\" />\n }\n >\n <div>\n <div>\n <StnWidget title=\"장애 통계\" appearance=\"translucent\">\n <StnWidget.ChartSlot label=\"chart\" />\n </StnWidget>\n </div>\n <div>\n <StnWidget title=\"세션 현황\" appearance=\"translucent\">\n <StnWidget.ChartSlot label=\"chart\" />\n </StnWidget>\n </div>\n <div>\n <StnWidget title=\"모니터링\" appearance=\"translucent\">\n <StnWidget.ChartSlot label=\"chart\" />\n </StnWidget>\n </div>\n </div>\n </DashboardPageScaffold>\n )\n}`,\n}\n\nexport function resolveStnScaffold(scaffoldKey: string): string {\n const factory = SCAFFOLDS[scaffoldKey]\n if (!factory) {\n throw new Error(`Unknown scaffold: ${scaffoldKey}`)\n }\n const code = factory().trimEnd()\n return code.endsWith('\\n') ? code : `${code}\\n`\n}\n","export type StnCliCategory = 'component' | 'pattern' | 'layout'\n\nexport type StnCliCatalogItem = {\n id: string\n label: string\n category: StnCliCategory\n scaffoldKey: string\n /** 생성 파일 기본명 (예: ListViewPage.tsx) */\n defaultFileName: string\n docPath?: string\n}\n\n/** `npx @stn-uiux/pub-ui help` — 문서 사이트 nav와 동일한 선택지 */\nexport const STN_CLI_CATALOG: StnCliCatalogItem[] = [\n // —— Components ——\n { id: 'button', label: 'Button', category: 'component', scaffoldKey: 'button', defaultFileName: 'ButtonDemoPage.tsx', docPath: '/stn-design/components/button' },\n { id: 'toast', label: 'Toast', category: 'component', scaffoldKey: 'toast', defaultFileName: 'ToastDemoPage.tsx', docPath: '/stn-design/components/toast' },\n { id: 'progress-bar', label: 'Progress Bar', category: 'component', scaffoldKey: 'progress-bar', defaultFileName: 'ProgressBarDemoPage.tsx', docPath: '/stn-design/components/progress-bar' },\n { id: 'checkbox', label: 'Checkbox', category: 'component', scaffoldKey: 'checkbox', defaultFileName: 'CheckboxDemoPage.tsx', docPath: '/stn-design/components/checkbox' },\n { id: 'toggle-button', label: 'Toggle Button', category: 'component', scaffoldKey: 'toggle-button', defaultFileName: 'ToggleButtonDemoPage.tsx', docPath: '/stn-design/components/toggle-button' },\n { id: 'segmented', label: 'Segmented', category: 'component', scaffoldKey: 'segmented', defaultFileName: 'SegmentedDemoPage.tsx', docPath: '/stn-design/components/segmented' },\n { id: 'radio', label: 'Radio', category: 'component', scaffoldKey: 'radio', defaultFileName: 'RadioDemoPage.tsx', docPath: '/stn-design/components/radio' },\n { id: 'switch', label: 'Switch', category: 'component', scaffoldKey: 'switch', defaultFileName: 'SwitchDemoPage.tsx', docPath: '/stn-design/components/switch' },\n { id: 'slider', label: 'Slider', category: 'component', scaffoldKey: 'slider', defaultFileName: 'SliderDemoPage.tsx', docPath: '/stn-design/components/slider' },\n { id: 'chip', label: 'Chip', category: 'component', scaffoldKey: 'chip', defaultFileName: 'ChipDemoPage.tsx', docPath: '/stn-design/components/chip' },\n { id: 'side-nav-item', label: 'Side Nav Item', category: 'component', scaffoldKey: 'side-nav-item', defaultFileName: 'SideNavItemDemoPage.tsx', docPath: '/stn-design/components/side-nav-item' },\n { id: 'breadcrumb', label: 'Breadcrumb', category: 'component', scaffoldKey: 'breadcrumb', defaultFileName: 'BreadcrumbDemoPage.tsx', docPath: '/stn-design/components/breadcrumb' },\n { id: 'header-title', label: 'Header title', category: 'component', scaffoldKey: 'header-title', defaultFileName: 'HeaderTitleDemoPage.tsx', docPath: '/stn-design/components/header-title' },\n { id: 'dropdown', label: 'Dropdown', category: 'component', scaffoldKey: 'dropdown', defaultFileName: 'DropdownDemoPage.tsx', docPath: '/stn-design/components/dropdown' },\n { id: 'text-field', label: 'TextField', category: 'component', scaffoldKey: 'text-field', defaultFileName: 'TextFieldDemoPage.tsx', docPath: '/stn-design/components/text-field' },\n { id: 'date-picker', label: 'Date range picker', category: 'component', scaffoldKey: 'date-picker', defaultFileName: 'DatePickerDemoPage.tsx', docPath: '/stn-design/components/date-picker' },\n { id: 'indicator', label: 'System monitor · Theme', category: 'component', scaffoldKey: 'indicator', defaultFileName: 'IndicatorDemoPage.tsx', docPath: '/stn-design/components/indicator' },\n { id: 'scroll', label: 'Scroll', category: 'component', scaffoldKey: 'scroll', defaultFileName: 'ScrollDemoPage.tsx', docPath: '/stn-design/components/scroll' },\n { id: 'table', label: 'Table', category: 'component', scaffoldKey: 'table', defaultFileName: 'TableDemoPage.tsx', docPath: '/stn-design/components/table' },\n { id: 'table-pagination', label: 'Table · Pagination', category: 'component', scaffoldKey: 'pagination', defaultFileName: 'PaginationDemoPage.tsx', docPath: '/stn-design/components/table/pagination' },\n { id: 'widget', label: 'Widget', category: 'component', scaffoldKey: 'widget', defaultFileName: 'WidgetDemoPage.tsx', docPath: '/stn-design/components/widget' },\n { id: 'tree-node', label: 'Tree Node', category: 'component', scaffoldKey: 'tree-node', defaultFileName: 'TreeNodeDemoPage.tsx', docPath: '/stn-design/components/tree-node' },\n\n // —— Patterns ——\n { id: 'layer-l0', label: 'Layer · L0 Background', category: 'pattern', scaffoldKey: 'layer-l0', defaultFileName: 'Layer0BackgroundPattern.tsx', docPath: '/stn-design/layouts/layer/0' },\n { id: 'layer-l1', label: 'Layer · L1 Content', category: 'pattern', scaffoldKey: 'layer-l1', defaultFileName: 'Layer1ContentPattern.tsx', docPath: '/stn-design/layouts/layer/1' },\n { id: 'side-navigation', label: 'Side Navigation', category: 'pattern', scaffoldKey: 'side-navigation', defaultFileName: 'SideNavigationPatternPage.tsx', docPath: '/stn-design/pattern/side-navigation' },\n { id: 'alert-center', label: 'Alert center', category: 'pattern', scaffoldKey: 'alert-center', defaultFileName: 'AlertCenterPatternPage.tsx', docPath: '/stn-design/pattern/alert-center' },\n { id: 'search-bar', label: 'Search bar', category: 'pattern', scaffoldKey: 'search-bar', defaultFileName: 'SearchBarPatternPage.tsx', docPath: '/stn-design/pattern/search-bar' },\n { id: 'header', label: 'Header', category: 'pattern', scaffoldKey: 'header', defaultFileName: 'HeaderPatternPage.tsx', docPath: '/stn-design/pattern/header' },\n { id: 'background', label: 'Background', category: 'pattern', scaffoldKey: 'background', defaultFileName: 'BackgroundPatternPage.tsx', docPath: '/stn-design/layouts/layer/0' },\n { id: 'popup', label: 'Popup', category: 'pattern', scaffoldKey: 'popup', defaultFileName: 'PopupPatternPage.tsx', docPath: '/stn-design/pattern/popup' },\n { id: 'data-table', label: 'Data Table', category: 'pattern', scaffoldKey: 'data-table', defaultFileName: 'DataTablePatternPage.tsx', docPath: '/stn-design/pattern/data-table' },\n { id: 'tree', label: 'Tree', category: 'pattern', scaffoldKey: 'tree', defaultFileName: 'TreePatternPage.tsx', docPath: '/stn-design/pattern/tree' },\n { id: 'loading-skeleton', label: 'Loading skeleton', category: 'pattern', scaffoldKey: 'loading-skeleton', defaultFileName: 'LoadingSkeletonPatternPage.tsx', docPath: '/stn-design/pattern/loading-skeleton' },\n { id: 'widget-pattern', label: 'Widget', category: 'pattern', scaffoldKey: 'widget-pattern', defaultFileName: 'WidgetPatternPage.tsx', docPath: '/stn-design/pattern/widget' },\n\n // —— Layouts ——\n { id: 'login', label: 'Login', category: 'layout', scaffoldKey: 'login', defaultFileName: 'LoginPage.tsx', docPath: '/stn-design/layouts/login' },\n { id: 'list-view', label: 'List view', category: 'layout', scaffoldKey: 'list-view', defaultFileName: 'ListViewPage.tsx', docPath: '/stn-design/layouts/list-view' },\n { id: 'map-dashboard', label: 'Map Dashboard', category: 'layout', scaffoldKey: 'map-dashboard', defaultFileName: 'MapDashboardPage.tsx', docPath: '/stn-design/layouts/dashboard/map' },\n { id: 'topology-dashboard', label: 'Topology Dashboard', category: 'layout', scaffoldKey: 'topology-dashboard', defaultFileName: 'TopologyDashboardPage.tsx', docPath: '/stn-design/layouts/dashboard/topology' },\n { id: 'widget-grid', label: 'Widget Grid Board', category: 'layout', scaffoldKey: 'widget-grid', defaultFileName: 'WidgetGridDashboardPage.tsx', docPath: '/stn-design/layouts/dashboard/widget' },\n]\n\nexport const STN_CLI_CATEGORY_LABELS: Record<StnCliCategory, string> = {\n component: '컴포넌트',\n pattern: '패턴',\n layout: '레이아웃',\n}\n\nexport function listStnCliCatalog(category: StnCliCategory): StnCliCatalogItem[] {\n return STN_CLI_CATALOG.filter((item) => item.category === category)\n}\n\n"],"mappings":"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","names":["process","require","process"]}
@@ -23,7 +23,7 @@ export { STN_ICONOGRAPHY_INTRO, STN_ICONOGRAPHY_PRIMITIVE_ROWS, STN_ICONOGRAPHY_
23
23
  export { STN_INPUT_WIDTH_PRESETS, StnInputWidthPreset, StnInputWidthValue, StnResolvedInputWidth, isStnInputFullWidth, isStnInputWidthPreset, resolveStnInputWidth, toStnInputWidthPreset } from './stnInputWidth.js';
24
24
  export { STN_ELEVATION_Z_INDEX, STN_LAYER_DIM_MODAL_HTML, STN_LAYER_INTRO, STN_LAYER_ROLE_ROWS, STN_LAYER_ROLE_TO_LEVEL, STN_LAYER_ROLE_USAGE, STN_LAYER_SURFACE_ROWS, StnElevationLevel, StnLayerRole, StnLayerSurface } from './stnLayer.js';
25
25
  export { STN_LAYER0_BACKGROUND_FIGMA, STN_LAYER0_BACKGROUND_INTRO, STN_LAYER0_BACKGROUND_PLAYGROUND_PRESETS, STN_LAYER0_BACKGROUND_USAGE, STN_LAYER0_BACKGROUND_USAGE_HTML, STN_LAYER0_BACKGROUND_VARIANT_ROWS, STN_LAYER0_MAP_LIGHT_OVERLAY, StnLayer0BackgroundKind, StnLayer0BackgroundPlaygroundPresetId, StnLayer0BackgroundPreset } from './stnLayer0Background.js';
26
- export { STN_LAYER0_BACKGROUND_ASSET_PATHS, STN_LAYER0_BACKGROUND_DEMO_IMAGES } from './stnLayer0BackgroundAssets.js';
26
+ export { STN_CDN_ASSET_BASE, STN_LAYER0_BACKGROUND_ASSET_PATHS, STN_LAYER0_BACKGROUND_DEMO_IMAGES } from './stnLayer0BackgroundAssets.js';
27
27
  export { STN_ALERT_CENTER_PAGE_SCAFFOLD_USAGE, STN_LAYER_SHELL_USAGE, STN_LAYOUT_ALERT_CENTER_USAGE, STN_LAYOUT_CONTENT_ROWS, STN_LAYOUT_INTRO, STN_LAYOUT_LAYER_PAGE_TREE, STN_LAYOUT_LIST_LAYER_TABS, STN_LAYOUT_LIST_VIEW_BARE_USAGE, STN_LAYOUT_LIST_VIEW_INTRO, STN_LAYOUT_LIST_VIEW_USAGE, STN_LAYOUT_MAP_DASHBOARD_HEADER_USAGE, STN_LAYOUT_MAP_DASHBOARD_INTRO, STN_LAYOUT_MAP_DASHBOARD_USAGE, STN_LAYOUT_MAP_LAYER_TABS, STN_LAYOUT_PAGE_TREE, STN_LAYOUT_PLAYGROUND_TABS, STN_LAYOUT_RECIPES, STN_LAYOUT_REGION_ROWS, STN_LAYOUT_SCREEN_RECIPES, STN_LAYOUT_SHELL_USAGE, STN_LAYOUT_SLOT_USAGE, STN_LAYOUT_WHEN_TO_USE, STN_PAGE_SCAFFOLD_COMPOUND_USAGE, STN_PAGE_SCAFFOLD_INTRO, STN_PAGE_SCAFFOLD_KINDS, StnContentAreaModifier, StnLayoutListLayerTabId, StnLayoutMapLayerTabId, StnLayoutRegion, StnLayoutScreenKind, StnLnbSide, StnPageScaffoldKind, applyLnbSideToModifiers, pubContentAreaClasses, pubLayoutRegionClass } from './stnLayout.js';
28
28
  export { STN_LIST_TABLE_FIGMA, STN_LIST_TABLE_FOOTER_MAX_ACTIONS, STN_LIST_TABLE_OPTION_ROWS, STN_LIST_TABLE_PAGE_SIZE_OPTIONS, StnListTableOptionRow } from './stnListTable.js';
29
29
  export { STN_LOADING_SKELETON_COLORS, STN_LOADING_SKELETON_INTRO, STN_LOADING_SKELETON_PARTS, STN_LOADING_SKELETON_USAGE, STN_LOADING_SKELETON_USAGE_HTML } from './stnLoadingSkeleton.js';
@@ -107,7 +107,7 @@ import {
107
107
  STN_LOGIN_HTML,
108
108
  STN_LOGIN_INTRO,
109
109
  STN_LOGIN_USAGE
110
- } from "../chunk-NIMEKZW6.js";
110
+ } from "../chunk-AWJXDCX2.js";
111
111
  import {
112
112
  STN_MAP_DASHBOARD_OPTION_ROWS
113
113
  } from "../chunk-3DAZMM4T.js";
@@ -125,7 +125,7 @@ import {
125
125
  import {
126
126
  STN_UI_VERSION,
127
127
  STN_UI_VERSION_LABEL
128
- } from "../chunk-ZLMVTZDK.js";
128
+ } from "../chunk-QT4HHVZH.js";
129
129
  import {
130
130
  STN_PAGE_ENTER_MOTION_INTRO,
131
131
  STN_PAGE_ENTER_MOTION_ROWS,
@@ -414,10 +414,10 @@ import {
414
414
  STN_LAYER0_MAP_LIGHT_OVERLAY
415
415
  } from "../chunk-QAPQ4DB2.js";
416
416
  import {
417
+ STN_CDN_ASSET_BASE,
417
418
  STN_LAYER0_BACKGROUND_ASSET_PATHS,
418
419
  STN_LAYER0_BACKGROUND_DEMO_IMAGES
419
- } from "../chunk-DFXOZYYY.js";
420
- import "../chunk-OKSQLPEC.js";
420
+ } from "../chunk-XBFXX3D6.js";
421
421
  import {
422
422
  STN_ALERT_CENTER_PAGE_SCAFFOLD_USAGE,
423
423
  STN_LAYER_SHELL_USAGE,
@@ -575,6 +575,7 @@ export {
575
575
  STN_CARD_PADDINGS,
576
576
  STN_CARD_RADII,
577
577
  STN_CARD_VARIANTS,
578
+ STN_CDN_ASSET_BASE,
578
579
  STN_CHART_INTRO,
579
580
  STN_CHECKBOX_FIGMA,
580
581
  STN_CHECKBOX_INTRO,
@@ -10,8 +10,7 @@ import {
10
10
  import {
11
11
  STN_LAYER0_BACKGROUND_ASSET_PATHS,
12
12
  STN_LAYER0_BACKGROUND_DEMO_IMAGES
13
- } from "../chunk-DFXOZYYY.js";
14
- import "../chunk-OKSQLPEC.js";
13
+ } from "../chunk-XBFXX3D6.js";
15
14
  export {
16
15
  STN_LAYER0_BACKGROUND_ASSET_PATHS,
17
16
  STN_LAYER0_BACKGROUND_DEMO_IMAGES,
@@ -1,18 +1,22 @@
1
+ /**
2
+ * L0 preset images — Hosted on STN Official Vercel CDN for zero-setup & instant loading.
3
+ */
4
+ declare const STN_CDN_ASSET_BASE = "https://stn-design.vercel.app/images/layer0";
1
5
  declare const STN_LAYER0_BACKGROUND_DEMO_IMAGES: {
2
- readonly dashboard: string;
3
- readonly dashboardLight: string;
4
- readonly dashboardDark: string;
5
- readonly showroomA: string;
6
- readonly showroomALight: string;
7
- readonly showroomADark: string;
8
- readonly showroomB: string;
9
- readonly showroomBLight: string;
10
- readonly showroomBDark: string;
11
- readonly mapLight: string;
12
- readonly mapDark: string;
13
- readonly login: string;
14
- readonly loginLight: string;
15
- readonly loginDark: string;
6
+ readonly dashboard: "https://stn-design.vercel.app/images/layer0/dashboard-light.png";
7
+ readonly dashboardLight: "https://stn-design.vercel.app/images/layer0/dashboard-light.png";
8
+ readonly dashboardDark: "https://stn-design.vercel.app/images/layer0/dashboard-dark.png";
9
+ readonly showroomA: "https://stn-design.vercel.app/images/layer0/showroom-a-light.png";
10
+ readonly showroomALight: "https://stn-design.vercel.app/images/layer0/showroom-a-light.png";
11
+ readonly showroomADark: "https://stn-design.vercel.app/images/layer0/showroom-a-dark.png";
12
+ readonly showroomB: "https://stn-design.vercel.app/images/layer0/showroom-b-light.png";
13
+ readonly showroomBLight: "https://stn-design.vercel.app/images/layer0/showroom-b-light.png";
14
+ readonly showroomBDark: "https://stn-design.vercel.app/images/layer0/showroom-b-dark.png";
15
+ readonly mapLight: "https://stn-design.vercel.app/images/layer0/map-light.png";
16
+ readonly mapDark: "https://stn-design.vercel.app/images/layer0/map-dark.png";
17
+ readonly login: "https://stn-design.vercel.app/images/layer0/login-light.png";
18
+ readonly loginLight: "https://stn-design.vercel.app/images/layer0/login-light.png";
19
+ readonly loginDark: "https://stn-design.vercel.app/images/layer0/login-dark.png";
16
20
  };
17
21
  /** Pub CSS @assets 경로 — HTML·vanilla 소비자용 */
18
22
  declare const STN_LAYER0_BACKGROUND_ASSET_PATHS: {
@@ -32,4 +36,4 @@ declare const STN_LAYER0_BACKGROUND_ASSET_PATHS: {
32
36
  readonly loginDark: "@assets/images/layer0/login-dark.png";
33
37
  };
34
38
 
35
- export { STN_LAYER0_BACKGROUND_ASSET_PATHS, STN_LAYER0_BACKGROUND_DEMO_IMAGES };
39
+ export { STN_CDN_ASSET_BASE, STN_LAYER0_BACKGROUND_ASSET_PATHS, STN_LAYER0_BACKGROUND_DEMO_IMAGES };
@@ -1,9 +1,10 @@
1
1
  import {
2
+ STN_CDN_ASSET_BASE,
2
3
  STN_LAYER0_BACKGROUND_ASSET_PATHS,
3
4
  STN_LAYER0_BACKGROUND_DEMO_IMAGES
4
- } from "../chunk-DFXOZYYY.js";
5
- import "../chunk-OKSQLPEC.js";
5
+ } from "../chunk-XBFXX3D6.js";
6
6
  export {
7
+ STN_CDN_ASSET_BASE,
7
8
  STN_LAYER0_BACKGROUND_ASSET_PATHS,
8
9
  STN_LAYER0_BACKGROUND_DEMO_IMAGES
9
10
  };
@@ -4,8 +4,7 @@ import {
4
4
  STN_LOGIN_HTML,
5
5
  STN_LOGIN_INTRO,
6
6
  STN_LOGIN_USAGE
7
- } from "../chunk-NIMEKZW6.js";
8
- import "../chunk-OKSQLPEC.js";
7
+ } from "../chunk-AWJXDCX2.js";
9
8
  export {
10
9
  STN_LOGIN_ASSETS,
11
10
  STN_LOGIN_FIGMA,
@@ -1,5 +1,5 @@
1
1
  /** Package version constants */
2
- declare const STN_UI_VERSION = "0.1.55";
3
- declare const STN_UI_VERSION_LABEL = "v0.1.55";
2
+ declare const STN_UI_VERSION = "0.1.57";
3
+ declare const STN_UI_VERSION_LABEL = "v0.1.57";
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-ZLMVTZDK.js";
4
+ } from "../chunk-QT4HHVZH.js";
5
5
  export {
6
6
  STN_UI_VERSION,
7
7
  STN_UI_VERSION_LABEL
package/dist/index.d.ts CHANGED
@@ -23,7 +23,7 @@ export { STN_ICONOGRAPHY_INTRO, STN_ICONOGRAPHY_PRIMITIVE_ROWS, STN_ICONOGRAPHY_
23
23
  export { STN_INPUT_WIDTH_PRESETS, StnInputWidthPreset, StnInputWidthValue, StnResolvedInputWidth, isStnInputFullWidth, isStnInputWidthPreset, resolveStnInputWidth, toStnInputWidthPreset } from './data/stnInputWidth.js';
24
24
  export { STN_ELEVATION_Z_INDEX, STN_LAYER_DIM_MODAL_HTML, STN_LAYER_INTRO, STN_LAYER_ROLE_ROWS, STN_LAYER_ROLE_TO_LEVEL, STN_LAYER_ROLE_USAGE, STN_LAYER_SURFACE_ROWS, StnElevationLevel, StnLayerRole, StnLayerSurface } from './data/stnLayer.js';
25
25
  export { STN_LAYER0_BACKGROUND_FIGMA, STN_LAYER0_BACKGROUND_INTRO, STN_LAYER0_BACKGROUND_PLAYGROUND_PRESETS, STN_LAYER0_BACKGROUND_USAGE, STN_LAYER0_BACKGROUND_USAGE_HTML, STN_LAYER0_BACKGROUND_VARIANT_ROWS, STN_LAYER0_MAP_LIGHT_OVERLAY, StnLayer0BackgroundKind, StnLayer0BackgroundPlaygroundPresetId, StnLayer0BackgroundPreset } from './data/stnLayer0Background.js';
26
- export { STN_LAYER0_BACKGROUND_ASSET_PATHS, STN_LAYER0_BACKGROUND_DEMO_IMAGES } from './data/stnLayer0BackgroundAssets.js';
26
+ export { STN_CDN_ASSET_BASE, STN_LAYER0_BACKGROUND_ASSET_PATHS, STN_LAYER0_BACKGROUND_DEMO_IMAGES } from './data/stnLayer0BackgroundAssets.js';
27
27
  export { STN_ALERT_CENTER_PAGE_SCAFFOLD_USAGE, STN_LAYER_SHELL_USAGE, STN_LAYOUT_ALERT_CENTER_USAGE, STN_LAYOUT_CONTENT_ROWS, STN_LAYOUT_INTRO, STN_LAYOUT_LAYER_PAGE_TREE, STN_LAYOUT_LIST_LAYER_TABS, STN_LAYOUT_LIST_VIEW_BARE_USAGE, STN_LAYOUT_LIST_VIEW_INTRO, STN_LAYOUT_LIST_VIEW_USAGE, STN_LAYOUT_MAP_DASHBOARD_HEADER_USAGE, STN_LAYOUT_MAP_DASHBOARD_INTRO, STN_LAYOUT_MAP_DASHBOARD_USAGE, STN_LAYOUT_MAP_LAYER_TABS, STN_LAYOUT_PAGE_TREE, STN_LAYOUT_PLAYGROUND_TABS, STN_LAYOUT_RECIPES, STN_LAYOUT_REGION_ROWS, STN_LAYOUT_SCREEN_RECIPES, STN_LAYOUT_SHELL_USAGE, STN_LAYOUT_SLOT_USAGE, STN_LAYOUT_WHEN_TO_USE, STN_PAGE_SCAFFOLD_COMPOUND_USAGE, STN_PAGE_SCAFFOLD_INTRO, STN_PAGE_SCAFFOLD_KINDS, StnContentAreaModifier, StnLayoutListLayerTabId, StnLayoutMapLayerTabId, StnLayoutRegion, StnLayoutScreenKind, StnLnbSide, StnPageScaffoldKind, applyLnbSideToModifiers, pubContentAreaClasses, pubLayoutRegionClass } from './data/stnLayout.js';
28
28
  export { STN_LIST_TABLE_FIGMA, STN_LIST_TABLE_FOOTER_MAX_ACTIONS, STN_LIST_TABLE_OPTION_ROWS, STN_LIST_TABLE_PAGE_SIZE_OPTIONS, StnListTableOptionRow } from './data/stnListTable.js';
29
29
  export { STN_LOADING_SKELETON_COLORS, STN_LOADING_SKELETON_INTRO, STN_LOADING_SKELETON_PARTS, STN_LOADING_SKELETON_USAGE, STN_LOADING_SKELETON_USAGE_HTML } from './data/stnLoadingSkeleton.js';
package/dist/index.js CHANGED
@@ -112,7 +112,7 @@ import {
112
112
  STN_LOGIN_HTML,
113
113
  STN_LOGIN_INTRO,
114
114
  STN_LOGIN_USAGE
115
- } from "./chunk-NIMEKZW6.js";
115
+ } from "./chunk-AWJXDCX2.js";
116
116
  import {
117
117
  STN_MAP_DASHBOARD_OPTION_ROWS
118
118
  } from "./chunk-3DAZMM4T.js";
@@ -130,7 +130,7 @@ import {
130
130
  import {
131
131
  STN_UI_VERSION,
132
132
  STN_UI_VERSION_LABEL
133
- } from "./chunk-ZLMVTZDK.js";
133
+ } from "./chunk-QT4HHVZH.js";
134
134
  import {
135
135
  STN_PAGE_ENTER_MOTION_INTRO,
136
136
  STN_PAGE_ENTER_MOTION_ROWS,
@@ -419,10 +419,10 @@ import {
419
419
  STN_LAYER0_MAP_LIGHT_OVERLAY
420
420
  } from "./chunk-QAPQ4DB2.js";
421
421
  import {
422
+ STN_CDN_ASSET_BASE,
422
423
  STN_LAYER0_BACKGROUND_ASSET_PATHS,
423
424
  STN_LAYER0_BACKGROUND_DEMO_IMAGES
424
- } from "./chunk-DFXOZYYY.js";
425
- import "./chunk-OKSQLPEC.js";
425
+ } from "./chunk-XBFXX3D6.js";
426
426
  import {
427
427
  STN_ALERT_CENTER_PAGE_SCAFFOLD_USAGE,
428
428
  STN_LAYER_SHELL_USAGE,
@@ -580,6 +580,7 @@ export {
580
580
  STN_CARD_PADDINGS,
581
581
  STN_CARD_RADII,
582
582
  STN_CARD_VARIANTS,
583
+ STN_CDN_ASSET_BASE,
583
584
  STN_CHART_INTRO,
584
585
  STN_CHECKBOX_FIGMA,
585
586
  STN_CHECKBOX_INTRO,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stn-uiux/pub-ui",
3
- "version": "0.1.55",
3
+ "version": "0.1.57",
4
4
  "description": "STN Pub design system — tokens, specs, and CSS for product HTML / React apps",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -13,6 +13,7 @@
13
13
  "dist",
14
14
  "bin",
15
15
  "styles",
16
+ "!styles/@assets/images/layer0",
16
17
  "README.md",
17
18
  "CHANGELOG.md"
18
19
  ],