@stn-uiux/pub-ui 0.1.81 → 0.1.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-6FEWLKVE.js → chunk-2TRZNWCA.js} +32 -2
- package/dist/chunk-2TRZNWCA.js.map +1 -0
- package/dist/{chunk-AJLP3Y53.js → chunk-2VSSPMZ3.js} +2 -2
- package/dist/{chunk-AJLP3Y53.js.map → chunk-2VSSPMZ3.js.map} +1 -1
- package/dist/{chunk-AOS3IX4T.js → chunk-65B7YUTE.js} +2 -1
- package/dist/{chunk-AOS3IX4T.js.map → chunk-65B7YUTE.js.map} +1 -1
- package/dist/chunk-APXT43OG.js +232 -0
- package/dist/chunk-APXT43OG.js.map +1 -0
- package/dist/chunk-C5WP6UQO.js +107 -0
- package/dist/chunk-C5WP6UQO.js.map +1 -0
- package/dist/chunk-ERZPIKPF.js +1 -0
- package/dist/chunk-FLKGJJD5.js +45 -0
- package/dist/chunk-FLKGJJD5.js.map +1 -0
- package/dist/{chunk-N46UQH6L.js → chunk-K6TWXWIO.js} +11 -2
- package/dist/chunk-K6TWXWIO.js.map +1 -0
- package/dist/chunk-N4PVFFKV.js +38 -0
- package/dist/chunk-N4PVFFKV.js.map +1 -0
- package/dist/chunk-NYZMUDVK.js +12 -0
- package/dist/chunk-NYZMUDVK.js.map +1 -0
- package/dist/chunk-P22H2BFQ.js +9 -0
- package/dist/chunk-P22H2BFQ.js.map +1 -0
- package/dist/chunk-QJN2Z6RG.js +160 -0
- package/dist/chunk-QJN2Z6RG.js.map +1 -0
- package/dist/chunk-W7K3FSAX.js +24 -0
- package/dist/chunk-W7K3FSAX.js.map +1 -0
- package/dist/cli.js +17 -17
- package/dist/components.d.ts +1 -1
- package/dist/components.js +1 -1
- package/dist/data/index.d.ts +8 -3
- package/dist/data/index.js +148 -94
- package/dist/data/stnCard.d.ts +1 -1
- package/dist/data/stnCard.js +1 -1
- package/dist/data/stnChart.d.ts +35 -1
- package/dist/data/stnChart.js +7 -3
- package/dist/data/stnDatePicker.d.ts +41 -10
- package/dist/data/stnDatePicker.js +9 -3
- package/dist/data/stnEmptyState.d.ts +35 -0
- package/dist/data/stnEmptyState.js +19 -0
- package/dist/data/stnEmptyState.js.map +1 -0
- package/dist/data/stnPackageVersion.d.ts +2 -2
- package/dist/data/stnPackageVersion.js +1 -1
- package/dist/data/stnPopover.d.ts +18 -0
- package/dist/data/stnPopover.js +9 -0
- package/dist/data/stnPopover.js.map +1 -0
- package/dist/data/stnSplitView.d.ts +16 -0
- package/dist/data/stnSplitView.js +11 -0
- package/dist/data/stnSplitView.js.map +1 -0
- package/dist/data/stnStepCards.d.ts +32 -0
- package/dist/data/stnStepCards.js +7 -0
- package/dist/data/stnStepCards.js.map +1 -0
- package/dist/data/stnStepper.d.ts +78 -0
- package/dist/data/stnStepper.js +7 -0
- package/dist/data/stnStepper.js.map +1 -0
- package/dist/data/stnTree.d.ts +3 -0
- package/dist/data/stnTree.js +1 -1
- package/dist/data/stnTypography.d.ts +17 -1
- package/dist/data/stnTypography.js +7 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.js +149 -95
- package/package.json +1 -1
- package/styles/@assets/images/empty-state/forbidden.png +0 -0
- package/styles/@assets/images/empty-state/load-failed.png +0 -0
- package/styles/@assets/images/empty-state/maintenance.png +0 -0
- package/styles/@assets/images/empty-state/network.png +0 -0
- package/styles/@assets/images/empty-state/no-data.png +0 -0
- package/styles/@assets/images/empty-state/not-found.png +0 -0
- package/styles/@assets/images/empty-state/search-empty.png +0 -0
- package/styles/@assets/images/empty-state/server-error.png +0 -0
- package/styles/@assets/images/empty-state/timeout.png +0 -0
- package/styles/@assets/images/empty-state/unauthorized.png +0 -0
- package/styles/components/stn-bar-chart.css +394 -0
- package/styles/components/stn-card.css +49 -13
- package/styles/components/stn-chart-common.css +243 -0
- package/styles/components/stn-chart.css +20 -0
- package/styles/components/stn-checkbox.css +1 -1
- package/styles/components/stn-combo-chart.css +279 -0
- package/styles/components/stn-date-picker.css +251 -44
- package/styles/components/stn-drawer.css +2 -2
- package/styles/components/stn-empty-state.css +238 -0
- package/styles/components/stn-line-chart.css +125 -0
- package/styles/components/stn-pie-chart.css +112 -0
- package/styles/components/stn-popover.css +52 -0
- package/styles/components/stn-radio.css +1 -1
- package/styles/components/stn-slider.css +1 -1
- package/styles/components/stn-stepper.css +570 -0
- package/styles/components/stn-switch.css +1 -1
- package/styles/components/stn-table.css +30 -0
- package/styles/components/stn-tooltip.css +1 -1
- package/styles/components/stn-widget.css +3 -116
- package/styles/layouts/stn-container.css +8 -0
- package/styles/layouts/stn-layer0-bg.css +18 -17
- package/styles/patterns/stn-split-view.css +130 -0
- package/styles/patterns/stn-step-cards.css +60 -0
- package/styles/patterns/stn-tree.css +9 -0
- package/styles/patterns/stn-widget-patterns.css +294 -0
- package/styles/style-pub.css +7 -0
- package/styles/tokens/stn-colors-semantic.css +194 -0
- package/styles/tokens/stn-size-semantic.css +84 -0
- package/styles/tokens/stn-size.css +1 -0
- package/styles/tokens/stn-spacing-semantic.css +55 -0
- package/styles/tokens/stn-typography-semantic.css +3 -0
- package/styles/tokens/stn-typography.css +16 -0
- package/dist/chunk-6FEWLKVE.js.map +0 -1
- package/dist/chunk-DGZVOSEM.js +0 -7
- package/dist/chunk-DGZVOSEM.js.map +0 -1
- package/dist/chunk-N46UQH6L.js.map +0 -1
- package/dist/chunk-PSVPO4FH.js +0 -9
- package/dist/chunk-PSVPO4FH.js.map +0 -1
- package/dist/chunk-WKQLAHIG.js +0 -1
- package/dist/chunk-YBNEQ5LB.js +0 -75
- package/dist/chunk-YBNEQ5LB.js.map +0 -1
- /package/dist/{chunk-WKQLAHIG.js.map → chunk-ERZPIKPF.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/stnEmptyState.ts"],"sourcesContent":["/**\n * Empty State / Error page — 공통 빈·오류 상태 표면\n * @see StnEmptyState (@stn-uiux/pub-ui-react)\n * @see styles/components/stn-empty-state.css\n */\n\nimport noDataGraphic from '../../styles/@assets/images/empty-state/no-data.png'\nimport notFoundGraphic from '../../styles/@assets/images/empty-state/not-found.png'\nimport unauthorizedGraphic from '../../styles/@assets/images/empty-state/unauthorized.png'\nimport forbiddenGraphic from '../../styles/@assets/images/empty-state/forbidden.png'\nimport serverErrorGraphic from '../../styles/@assets/images/empty-state/server-error.png'\nimport networkGraphic from '../../styles/@assets/images/empty-state/network.png'\nimport timeoutGraphic from '../../styles/@assets/images/empty-state/timeout.png'\nimport maintenanceGraphic from '../../styles/@assets/images/empty-state/maintenance.png'\nimport searchEmptyGraphic from '../../styles/@assets/images/empty-state/search-empty.png'\nimport loadFailedGraphic from '../../styles/@assets/images/empty-state/load-failed.png'\n\nexport const STN_EMPTY_STATE_GRAPHICS: Record<StnEmptyStateKind, string> = {\n 'no-data': noDataGraphic,\n 'not-found': notFoundGraphic,\n unauthorized: unauthorizedGraphic,\n forbidden: forbiddenGraphic,\n 'server-error': serverErrorGraphic,\n network: networkGraphic,\n timeout: timeoutGraphic,\n maintenance: maintenanceGraphic,\n 'search-empty': searchEmptyGraphic,\n 'load-failed': loadFailedGraphic,\n}\n\nexport const STN_EMPTY_STATE_INTRO =\n '아이콘 · 3D 일러스트 · 제목 · 설명 · 액션 버튼으로 구성되는 공통 빈·오류 상태입니다. 위젯 본문부터 전체 페이지(404 등)까지 `kind` 프리셋 또는 슬롯으로 조립하며, 3D 그래픽과 심볼 아이콘을 자유롭게 선택할 수 있습니다.'\n\n/** 대표 프리셋 10종 */\nexport const STN_EMPTY_STATE_KINDS = [\n 'no-data',\n 'not-found',\n 'unauthorized',\n 'forbidden',\n 'server-error',\n 'network',\n 'timeout',\n 'maintenance',\n 'search-empty',\n 'load-failed',\n] as const\n\nexport type StnEmptyStateKind = (typeof STN_EMPTY_STATE_KINDS)[number]\n\nexport type StnEmptyStateTone = 'neutral' | 'info' | 'warning' | 'error' | 'success'\n\nexport type StnEmptyStateSize = 'sm' | 'md' | 'lg'\n\nexport type StnEmptyStatePreset = {\n kind: StnEmptyStateKind\n /** HTTP/상태 코드 표기 (문서·뱃지용, 선택) */\n code?: string\n label: string\n title: string\n description: string\n /** Iconography slug (`line/…` · `fill/…`) */\n icon: string\n /** 3D 일러스트 그래픽 이미지 (Data URL / static asset) */\n graphic?: string\n tone: StnEmptyStateTone\n /** 기본 1차 액션 라벨 (문서·프리셋 제안) */\n primaryActionLabel?: string\n /** 기본 2차 액션 라벨 */\n secondaryActionLabel?: string\n}\n\nexport const STN_EMPTY_STATE_PRESETS: Record<StnEmptyStateKind, StnEmptyStatePreset> = {\n 'no-data': {\n kind: 'no-data',\n label: '데이터 없음',\n title: '데이터가 없습니다.',\n description: '표시할 항목이 없습니다. 조건을 바꾸거나 나중에 다시 확인해 주세요.',\n icon: 'fill/exclamation-circle',\n graphic: noDataGraphic,\n tone: 'neutral',\n primaryActionLabel: '되돌아가기',\n },\n 'not-found': {\n kind: 'not-found',\n code: '404',\n label: '페이지 없음',\n title: '페이지를 찾을 수 없습니다.',\n description: '요청하신 주소가 변경되었거나 삭제되었을 수 있습니다.',\n icon: 'line/help-circle',\n graphic: notFoundGraphic,\n tone: 'warning',\n primaryActionLabel: '홈으로',\n secondaryActionLabel: '되돌아가기',\n },\n unauthorized: {\n kind: 'unauthorized',\n code: '401',\n label: '인증 필요',\n title: '로그인이 필요합니다.',\n description: '이 페이지를 보려면 먼저 로그인해 주세요.',\n icon: 'line/lock',\n graphic: unauthorizedGraphic,\n tone: 'warning',\n primaryActionLabel: '로그인',\n secondaryActionLabel: '되돌아가기',\n },\n forbidden: {\n kind: 'forbidden',\n code: '403',\n label: '접근 거부',\n title: '접근 권한이 없습니다.',\n description: '이 리소스에 대한 권한이 없습니다. 관리자에게 문의해 주세요.',\n icon: 'line/shield',\n graphic: forbiddenGraphic,\n tone: 'error',\n primaryActionLabel: '되돌아가기',\n },\n 'server-error': {\n kind: 'server-error',\n code: '500',\n label: '서버 오류',\n title: '서버 오류가 발생했습니다.',\n description: '일시적인 문제일 수 있습니다. 잠시 후 다시 시도해 주세요.',\n icon: 'fill/alert1',\n graphic: serverErrorGraphic,\n tone: 'error',\n primaryActionLabel: '다시 시도',\n secondaryActionLabel: '되돌아가기',\n },\n network: {\n kind: 'network',\n label: '네트워크',\n title: '네트워크 연결을 확인해 주세요.',\n description: '인터넷 연결 상태를 확인한 뒤 다시 시도해 주세요.',\n icon: 'line/wifi',\n graphic: networkGraphic,\n tone: 'warning',\n primaryActionLabel: '다시 시도',\n secondaryActionLabel: '되돌아가기',\n },\n timeout: {\n kind: 'timeout',\n label: '시간 초과',\n title: '요청 시간이 초과되었습니다.',\n description: '서버 응답이 지연되고 있습니다. 잠시 후 다시 시도해 주세요.',\n icon: 'line/clock',\n graphic: timeoutGraphic,\n tone: 'warning',\n primaryActionLabel: '다시 시도',\n secondaryActionLabel: '되돌아가기',\n },\n maintenance: {\n kind: 'maintenance',\n label: '점검 중',\n title: '시스템 점검 중입니다.',\n description: '더 나은 서비스를 위해 잠시 점검을 진행하고 있습니다.',\n icon: 'fill/under_setting',\n graphic: maintenanceGraphic,\n tone: 'info',\n primaryActionLabel: '홈으로',\n },\n 'search-empty': {\n kind: 'search-empty',\n label: '검색 결과 없음',\n title: '검색 결과가 없습니다.',\n description: '다른 검색어로 다시 시도해 주세요.',\n icon: 'line/search',\n graphic: searchEmptyGraphic,\n tone: 'neutral',\n primaryActionLabel: '검색 초기화',\n },\n 'load-failed': {\n kind: 'load-failed',\n label: '불러오기 실패',\n title: '데이터를 불러오지 못했습니다.',\n description: '문제가 계속되면 관리자에게 문의해 주세요.',\n icon: 'line/alert-triangle',\n graphic: loadFailedGraphic,\n tone: 'error',\n primaryActionLabel: '다시 시도',\n secondaryActionLabel: '되돌아가기',\n },\n}\n\nexport const STN_EMPTY_STATE_KIND_ROWS = STN_EMPTY_STATE_KINDS.map(\n (kind) => STN_EMPTY_STATE_PRESETS[kind],\n)\n\nexport const STN_EMPTY_STATE_REACT_USAGE = `import { StnEmptyState, StnButton } from '@stn-uiux/pub-ui-react'\n\n{/* 프리셋 + 기본 액션 */}\n<StnEmptyState\n kind=\"no-data\"\n primaryAction={{ label: '되돌아가기', onClick: () => history.back() }}\n/>\n\n{/* 전체 페이지 (404) */}\n<StnEmptyState\n kind=\"not-found\"\n size=\"lg\"\n fullPage\n primaryAction={{ label: '홈으로', onClick: () => navigate('/') }}\n secondaryAction={{ label: '되돌아가기', onClick: () => history.back() }}\n/>\n\n{/* 슬롯으로 완전 커스텀 */}\n<StnEmptyState\n icon=\"line/database\"\n title=\"표시할 장비가 없습니다.\"\n description=\"장비를 등록하면 여기에 표시됩니다.\"\n tone=\"neutral\"\n actions={\n <>\n <StnButton variant=\"contained\">장비 등록</StnButton>\n <StnButton variant=\"outlined\">되돌아가기</StnButton>\n </>\n }\n/>`\n\nexport const STN_EMPTY_STATE_USAGE_HTML = `<!-- 공통 empty / error 상태 · stn-empty-state.css -->\n<div class=\"stn-empty-state md tone-neutral\" role=\"status\">\n <div class=\"stn-empty-state__icon\" aria-hidden=\"true\">\n <!-- StnIcon: fill/exclamation-circle -->\n </div>\n <div class=\"stn-empty-state__body\">\n <p class=\"stn-empty-state__title stn-text-title-2\">데이터가 없습니다.</p>\n <p class=\"stn-empty-state__description stn-text-body-3 stn-text-color-secondary\">\n 표시할 항목이 없습니다.\n </p>\n </div>\n <div class=\"stn-empty-state__actions\">\n <button type=\"button\" class=\"stn-btn contained md\">되돌아가기</button>\n </div>\n</div>\n\n<!-- 전체 페이지 404 -->\n<div class=\"stn-empty-state lg page tone-warning\" role=\"status\">\n …\n</div>`\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// src/data/stnChart.ts
|
|
2
|
+
var STN_CHART_INTRO = "\uC704\uC82F \uC178(`StnWidget`) \uC548\uC5D0 \uB123\uB294 \uCC28\uD2B8\xB7\uB9C9\uB300\xB7\uD604\uD669 \uBCF8\uBB38\uC785\uB2C8\uB2E4. Patterns \u2192 Widget\uC740 \uC178 + Chart \uC870\uD569\uC73C\uB85C \uC2E4\uC81C \uB300\uC2DC\uBCF4\uB4DC \uC704\uC82F\uC744 \uBCF4\uC5EC \uC90D\uB2C8\uB2E4.";
|
|
3
|
+
var STN_CHART_COLOR_DEFINITIONS = [
|
|
4
|
+
{ num: 1, token: "chart.color.1", cssVar: "--stn-chart-color-1", name: "Sky Blue", nameKo: "\uC2A4\uCE74\uC774 \uBE14\uB8E8", darkPrimitive: "pub.blue.400", lightPrimitive: "pub.blue.500", description: "\uAE30\uBCF8 1\uC21C\uC704 \uB300\uD45C \uBE14\uB8E8 \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
5
|
+
{ num: 2, token: "chart.color.2", cssVar: "--stn-chart-color-2", name: "Purple", nameKo: "\uD37C\uD50C", darkPrimitive: "pub.purple.300", lightPrimitive: "pub.purple.500", description: "2\uC21C\uC704 \uB300\uD45C \uBCF4\uB77C \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
6
|
+
{ num: 3, token: "chart.color.3", cssVar: "--stn-chart-color-3", name: "Green", nameKo: "\uADF8\uB9B0", darkPrimitive: "pub.green.300", lightPrimitive: "pub.green.500", description: "3\uC21C\uC704 \uB300\uD45C \uADF8\uB9B0 \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
7
|
+
{ num: 4, token: "chart.color.4", cssVar: "--stn-chart-color-4", name: "Cobalt", nameKo: "\uCF54\uBC1C\uD2B8", darkPrimitive: "pub.cobalt.350", lightPrimitive: "pub.cobalt.500", description: "4\uC21C\uC704 \uC120\uBA85\uD55C \uCF54\uBC1C\uD2B8 \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
8
|
+
{ num: 5, token: "chart.color.5", cssVar: "--stn-chart-color-5", name: "Aqua", nameKo: "\uC544\uCFE0\uC544", darkPrimitive: "pub.cyan.250", lightPrimitive: "pub.cyan.450", description: "5\uC21C\uC704 \uC120\uBA85\uD55C \uC544\uCFE0\uC544 \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
9
|
+
{ num: 6, token: "chart.color.6", cssVar: "--stn-chart-color-6", name: "Lavender", nameKo: "\uB77C\uBCA4\uB354", darkPrimitive: "pub.purple.150", lightPrimitive: "pub.purple.350", description: "6\uC21C\uC704 \uC5F0\uBCF4\uB77C \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
10
|
+
{ num: 7, token: "chart.color.7", cssVar: "--stn-chart-color-7", name: "Mint", nameKo: "\uBBFC\uD2B8", darkPrimitive: "pub.green.150", lightPrimitive: "pub.green.350", description: "7\uC21C\uC704 \uD30C\uC2A4\uD154 \uBBFC\uD2B8 \uADF8\uB9B0 \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
11
|
+
{ num: 8, token: "chart.color.8", cssVar: "--stn-chart-color-8", name: "Midnight", nameKo: "\uBBF8\uB4DC\uB098\uC787", darkPrimitive: "pub.cobalt.500", lightPrimitive: "pub.cobalt.650", description: "8\uC21C\uC704 \uB525 \uBBF8\uB4DC\uB098\uC787 \uBE14\uB8E8 \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
12
|
+
{ num: 9, token: "chart.color.9", cssVar: "--stn-chart-color-9", name: "Deep Violet", nameKo: "\uB525 \uBC14\uC774\uC62C\uB81B", darkPrimitive: "pub.purple.450", lightPrimitive: "pub.purple.650", description: "9\uC21C\uC704 \uB525 \uBC14\uC774\uC62C\uB81B \uC2DC\uAC01\uD654 \uC0C9\uC0C1" },
|
|
13
|
+
{ num: 10, token: "chart.color.10", cssVar: "--stn-chart-color-10", name: "Ice Blue", nameKo: "\uC544\uC774\uC2A4 \uBE14\uB8E8", darkPrimitive: "pub.blue.200", lightPrimitive: "pub.blue.350", description: "10\uC21C\uC704 \uBC1D\uC740 \uC544\uC774\uC2A4 \uBE14\uB8E8 \uC2DC\uAC01\uD654 \uC0C9\uC0C1" }
|
|
14
|
+
];
|
|
15
|
+
var STN_CHART_STATUS_DEFINITIONS = [
|
|
16
|
+
{
|
|
17
|
+
status: "critical",
|
|
18
|
+
token: "chart.status.critical",
|
|
19
|
+
cssVar: "--stn-chart-status-critical",
|
|
20
|
+
aliasVar: "--stn-chart-critical",
|
|
21
|
+
name: "Critical (Red)",
|
|
22
|
+
nameKo: "\uCE58\uBA85 / \uC7A5\uC560",
|
|
23
|
+
baseToken: "--stn-grade-critical",
|
|
24
|
+
darkPrimitive: "pub.red.400",
|
|
25
|
+
lightPrimitive: "pub.red.500",
|
|
26
|
+
description: "\uAE34\uAE09 \uC7A5\uC560, \uC11C\uBE44\uC2A4 \uC911\uB2E8, \uCE58\uBA85\uC801 \uACB0\uD568 \uB4F1 \uC704\uD5D8 \uC9C0\uD45C"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
status: "major",
|
|
30
|
+
token: "chart.status.major",
|
|
31
|
+
cssVar: "--stn-chart-status-major",
|
|
32
|
+
aliasVar: "--stn-chart-major",
|
|
33
|
+
name: "Major (Orange)",
|
|
34
|
+
nameKo: "\uC2EC\uAC01 / \uC8FC\uC694",
|
|
35
|
+
baseToken: "--stn-grade-major",
|
|
36
|
+
darkPrimitive: "pub.orange.250",
|
|
37
|
+
lightPrimitive: "pub.orange.400",
|
|
38
|
+
description: "\uC2EC\uAC01\uD55C \uC131\uB2A5 \uC800\uD558, \uC704\uD5D8 \uC784\uACC4\uCE58 \uADFC\uC811, \uC8FC\uC694 \uACB0\uD568 \uC9C0\uD45C"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
status: "minor",
|
|
42
|
+
token: "chart.status.minor",
|
|
43
|
+
cssVar: "--stn-chart-status-minor",
|
|
44
|
+
aliasVar: "--stn-chart-minor",
|
|
45
|
+
name: "Minor (Yellow)",
|
|
46
|
+
nameKo: "\uACBD\uBBF8 / \uC8FC\uC758",
|
|
47
|
+
baseToken: "--stn-grade-minor",
|
|
48
|
+
darkPrimitive: "pub.yellow.300",
|
|
49
|
+
lightPrimitive: "pub.yellow.400",
|
|
50
|
+
description: "\uACBD\uBBF8\uD55C \uC774\uC0C1 \uC9D5\uD6C4, \uBAA8\uB2C8\uD130\uB9C1 \uC8FC\uC758 \uAD6C\uAC04 \uC9C0\uD45C"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
status: "warning",
|
|
54
|
+
token: "chart.status.warning",
|
|
55
|
+
cssVar: "--stn-chart-status-warning",
|
|
56
|
+
aliasVar: "--stn-chart-warning",
|
|
57
|
+
name: "Warning (Teal)",
|
|
58
|
+
nameKo: "\uACBD\uACE0 / \uAC10\uC2DC",
|
|
59
|
+
baseToken: "--stn-grade-warning",
|
|
60
|
+
darkPrimitive: "pub.teal.400",
|
|
61
|
+
lightPrimitive: "pub.teal.500",
|
|
62
|
+
description: "\uC0AC\uC804 \uC608\uBC29 \uAC10\uC2DC, \uC810\uAC80 \uAD8C\uACE0 \uB300\uC0C1 \uC9C0\uD45C"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
status: "success",
|
|
66
|
+
token: "chart.status.success",
|
|
67
|
+
cssVar: "--stn-chart-status-success",
|
|
68
|
+
aliasVar: "--stn-chart-success",
|
|
69
|
+
name: "Success / Normal (Green)",
|
|
70
|
+
nameKo: "\uC815\uC0C1 / \uC131\uACF5",
|
|
71
|
+
baseToken: "--stn-grade-normal",
|
|
72
|
+
darkPrimitive: "pub.green.400",
|
|
73
|
+
lightPrimitive: "pub.green.500",
|
|
74
|
+
description: "\uC815\uC0C1 \uAC00\uB3D9\uB960, \uBAA9\uD45C \uB2EC\uC131\uCE58, \uC548\uC804 \uAD6C\uAC04 \uC9C0\uD45C"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
status: "info",
|
|
78
|
+
token: "chart.status.info",
|
|
79
|
+
cssVar: "--stn-chart-status-info",
|
|
80
|
+
aliasVar: "--stn-chart-info",
|
|
81
|
+
name: "Info (Blue)",
|
|
82
|
+
nameKo: "\uC815\uBCF4 / \uC548\uB0B4",
|
|
83
|
+
baseToken: "--stn-feedback-info",
|
|
84
|
+
darkPrimitive: "pub.blue.400",
|
|
85
|
+
lightPrimitive: "pub.blue.500",
|
|
86
|
+
description: "\uAE30\uC900\uCE58(Benchmark), \uD3C9\uADE0\uAC12, \uC77C\uBC18 \uC815\uBCF4 \uC9C0\uD45C"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
status: "neutral",
|
|
90
|
+
token: "chart.status.neutral",
|
|
91
|
+
cssVar: "--stn-chart-status-neutral",
|
|
92
|
+
aliasVar: "--stn-chart-neutral",
|
|
93
|
+
name: "Neutral (Gray)",
|
|
94
|
+
nameKo: "\uC911\uB9BD / \uBBF8\uCE21\uC815",
|
|
95
|
+
baseToken: "--stn-grade-neutral",
|
|
96
|
+
darkPrimitive: "pub.gray.500",
|
|
97
|
+
lightPrimitive: "pub.gray.400",
|
|
98
|
+
description: "\uBE44\uD65C\uC131, \uC810\uAC80 \uC911, \uB370\uC774\uD130 \uBBF8\uC218\uC9D1 \uAD6C\uAC04 \uC9C0\uD45C"
|
|
99
|
+
}
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
export {
|
|
103
|
+
STN_CHART_INTRO,
|
|
104
|
+
STN_CHART_COLOR_DEFINITIONS,
|
|
105
|
+
STN_CHART_STATUS_DEFINITIONS
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=chunk-C5WP6UQO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/stnChart.ts"],"sourcesContent":["/** Components → Chart — 대시보드 본문 차트·현황 블록 */\nexport const STN_CHART_INTRO =\n '위젯 셸(`StnWidget`) 안에 넣는 차트·막대·현황 본문입니다. Patterns → Widget은 셸 + Chart 조합으로 실제 대시보드 위젯을 보여 줍니다.'\n\nexport type StnChartColorDefinition = {\n num: number\n token: string\n cssVar: string\n name: string\n nameKo: string\n darkPrimitive: string\n lightPrimitive: string\n description: string\n}\n\n/**\n * STN 비상태 데이터 시각화 전용 통합 10종 컬러 팔레트 정의\n * 모든 차트 컴포넌트(StnBarChart, StnPieChart, StnLineChart, StnComboChart)에 순차 자동 적용되는 SSOT 기준입니다.\n * 심각도/경보(Critical, Major, Minor, Warning)와 중복되지 않도록 고유한 색조(Hue) 및 명암 대비로 엄선되었습니다.\n */\nexport const STN_CHART_COLOR_DEFINITIONS: StnChartColorDefinition[] = [\n { num: 1, token: 'chart.color.1', cssVar: '--stn-chart-color-1', name: 'Sky Blue', nameKo: '스카이 블루', darkPrimitive: 'pub.blue.400', lightPrimitive: 'pub.blue.500', description: '기본 1순위 대표 블루 시각화 색상' },\n { num: 2, token: 'chart.color.2', cssVar: '--stn-chart-color-2', name: 'Purple', nameKo: '퍼플', darkPrimitive: 'pub.purple.300', lightPrimitive: 'pub.purple.500', description: '2순위 대표 보라 시각화 색상' },\n { num: 3, token: 'chart.color.3', cssVar: '--stn-chart-color-3', name: 'Green', nameKo: '그린', darkPrimitive: 'pub.green.300', lightPrimitive: 'pub.green.500', description: '3순위 대표 그린 시각화 색상' },\n { num: 4, token: 'chart.color.4', cssVar: '--stn-chart-color-4', name: 'Cobalt', nameKo: '코발트', darkPrimitive: 'pub.cobalt.350', lightPrimitive: 'pub.cobalt.500', description: '4순위 선명한 코발트 시각화 색상' },\n { num: 5, token: 'chart.color.5', cssVar: '--stn-chart-color-5', name: 'Aqua', nameKo: '아쿠아', darkPrimitive: 'pub.cyan.250', lightPrimitive: 'pub.cyan.450', description: '5순위 선명한 아쿠아 시각화 색상' },\n { num: 6, token: 'chart.color.6', cssVar: '--stn-chart-color-6', name: 'Lavender', nameKo: '라벤더', darkPrimitive: 'pub.purple.150', lightPrimitive: 'pub.purple.350', description: '6순위 연보라 시각화 색상' },\n { num: 7, token: 'chart.color.7', cssVar: '--stn-chart-color-7', name: 'Mint', nameKo: '민트', darkPrimitive: 'pub.green.150', lightPrimitive: 'pub.green.350', description: '7순위 파스텔 민트 그린 시각화 색상' },\n { num: 8, token: 'chart.color.8', cssVar: '--stn-chart-color-8', name: 'Midnight', nameKo: '미드나잇', darkPrimitive: 'pub.cobalt.500', lightPrimitive: 'pub.cobalt.650', description: '8순위 딥 미드나잇 블루 시각화 색상' },\n { num: 9, token: 'chart.color.9', cssVar: '--stn-chart-color-9', name: 'Deep Violet', nameKo: '딥 바이올렛', darkPrimitive: 'pub.purple.450', lightPrimitive: 'pub.purple.650', description: '9순위 딥 바이올렛 시각화 색상' },\n { num: 10, token: 'chart.color.10', cssVar: '--stn-chart-color-10', name: 'Ice Blue', nameKo: '아이스 블루', darkPrimitive: 'pub.blue.200', lightPrimitive: 'pub.blue.350', description: '10순위 밝은 아이스 블루 시각화 색상' },\n]\n\nexport type StnChartStatus = 'critical' | 'major' | 'minor' | 'warning' | 'success' | 'info' | 'neutral'\n\nexport type StnChartStatusDefinition = {\n status: StnChartStatus\n token: string\n cssVar: string\n aliasVar: string\n name: string\n nameKo: string\n baseToken: string\n darkPrimitive: string\n lightPrimitive: string\n description: string\n}\n\n/**\n * STN 차트 전용 상태/심각도(Severity & Status) 시맨틱 컬러 정의\n * 장애·경보·가동률·점검 등 상태 기반 지표를 차트에 직관적으로 매핑할 때 사용합니다.\n */\nexport const STN_CHART_STATUS_DEFINITIONS: StnChartStatusDefinition[] = [\n {\n status: 'critical',\n token: 'chart.status.critical',\n cssVar: '--stn-chart-status-critical',\n aliasVar: '--stn-chart-critical',\n name: 'Critical (Red)',\n nameKo: '치명 / 장애',\n baseToken: '--stn-grade-critical',\n darkPrimitive: 'pub.red.400',\n lightPrimitive: 'pub.red.500',\n description: '긴급 장애, 서비스 중단, 치명적 결함 등 위험 지표',\n },\n {\n status: 'major',\n token: 'chart.status.major',\n cssVar: '--stn-chart-status-major',\n aliasVar: '--stn-chart-major',\n name: 'Major (Orange)',\n nameKo: '심각 / 주요',\n baseToken: '--stn-grade-major',\n darkPrimitive: 'pub.orange.250',\n lightPrimitive: 'pub.orange.400',\n description: '심각한 성능 저하, 위험 임계치 근접, 주요 결함 지표',\n },\n {\n status: 'minor',\n token: 'chart.status.minor',\n cssVar: '--stn-chart-status-minor',\n aliasVar: '--stn-chart-minor',\n name: 'Minor (Yellow)',\n nameKo: '경미 / 주의',\n baseToken: '--stn-grade-minor',\n darkPrimitive: 'pub.yellow.300',\n lightPrimitive: 'pub.yellow.400',\n description: '경미한 이상 징후, 모니터링 주의 구간 지표',\n },\n {\n status: 'warning',\n token: 'chart.status.warning',\n cssVar: '--stn-chart-status-warning',\n aliasVar: '--stn-chart-warning',\n name: 'Warning (Teal)',\n nameKo: '경고 / 감시',\n baseToken: '--stn-grade-warning',\n darkPrimitive: 'pub.teal.400',\n lightPrimitive: 'pub.teal.500',\n description: '사전 예방 감시, 점검 권고 대상 지표',\n },\n {\n status: 'success',\n token: 'chart.status.success',\n cssVar: '--stn-chart-status-success',\n aliasVar: '--stn-chart-success',\n name: 'Success / Normal (Green)',\n nameKo: '정상 / 성공',\n baseToken: '--stn-grade-normal',\n darkPrimitive: 'pub.green.400',\n lightPrimitive: 'pub.green.500',\n description: '정상 가동률, 목표 달성치, 안전 구간 지표',\n },\n {\n status: 'info',\n token: 'chart.status.info',\n cssVar: '--stn-chart-status-info',\n aliasVar: '--stn-chart-info',\n name: 'Info (Blue)',\n nameKo: '정보 / 안내',\n baseToken: '--stn-feedback-info',\n darkPrimitive: 'pub.blue.400',\n lightPrimitive: 'pub.blue.500',\n description: '기준치(Benchmark), 평균값, 일반 정보 지표',\n },\n {\n status: 'neutral',\n token: 'chart.status.neutral',\n cssVar: '--stn-chart-status-neutral',\n aliasVar: '--stn-chart-neutral',\n name: 'Neutral (Gray)',\n nameKo: '중립 / 미측정',\n baseToken: '--stn-grade-neutral',\n darkPrimitive: 'pub.gray.500',\n lightPrimitive: 'pub.gray.400',\n description: '비활성, 점검 중, 데이터 미수집 구간 지표',\n },\n]\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-ERZPIKPF.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// src/data/stnPopover.ts
|
|
2
|
+
var STN_POPOVER_INTRO = "\uD2B9\uC815 \uC5D8\uB9AC\uBA3C\uD2B8(anchorEl) \uB610\uB294 \uD654\uBA74 \uC88C\uD45C(anchorPosition)\uB97C \uAE30\uC900\uC73C\uB85C \uC9C0\uC815\uB41C \uC704\uCE58(anchorOrigin \uBC0F transformOrigin)\uC5D0 \uB744\uC6B0\uB294 STN \uD45C\uC900 \uD50C\uB85C\uD305 \uD31D\uC624\uBC84 \uCEF4\uD3EC\uB10C\uD2B8\uC785\uB2C8\uB2E4.";
|
|
3
|
+
var STN_POPOVER_USAGE = `import { useState } from 'react'
|
|
4
|
+
import { StnButton, StnPopover } from '@stn-uiux/pub-ui-react'
|
|
5
|
+
|
|
6
|
+
export function PopoverExample() {
|
|
7
|
+
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)
|
|
8
|
+
|
|
9
|
+
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
|
|
10
|
+
setAnchorEl(event.currentTarget)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const handleClose = () => {
|
|
14
|
+
setAnchorEl(null)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const open = Boolean(anchorEl)
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<>
|
|
21
|
+
<StnButton onClick={handleClick}>Open Popover</StnButton>
|
|
22
|
+
<StnPopover
|
|
23
|
+
open={open}
|
|
24
|
+
anchorEl={anchorEl}
|
|
25
|
+
onClose={handleClose}
|
|
26
|
+
anchorOrigin={{
|
|
27
|
+
vertical: 'bottom',
|
|
28
|
+
horizontal: 'left',
|
|
29
|
+
}}
|
|
30
|
+
transformOrigin={{
|
|
31
|
+
vertical: 'top',
|
|
32
|
+
horizontal: 'left',
|
|
33
|
+
}}
|
|
34
|
+
>
|
|
35
|
+
<div style={{ padding: 'var(--stn-space-16)' }}>\uD31D\uC624\uBC84 \uCF58\uD150\uCE20</div>
|
|
36
|
+
</StnPopover>
|
|
37
|
+
</>
|
|
38
|
+
)
|
|
39
|
+
}`;
|
|
40
|
+
|
|
41
|
+
export {
|
|
42
|
+
STN_POPOVER_INTRO,
|
|
43
|
+
STN_POPOVER_USAGE
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=chunk-FLKGJJD5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/stnPopover.ts"],"sourcesContent":["/**\n * StnPopover — Data & Types\n */\n\nexport type StnPopoverHorizontalOrigin = 'left' | 'center' | 'right' | number\nexport type StnPopoverVerticalOrigin = 'top' | 'center' | 'bottom' | number\n\nexport interface StnPopoverOrigin {\n vertical: StnPopoverVerticalOrigin\n horizontal: StnPopoverHorizontalOrigin\n}\n\nexport interface StnPopoverPosition {\n top: number\n left: number\n}\n\nexport type StnPopoverReference = 'anchorEl' | 'anchorPosition'\n\nexport const STN_POPOVER_INTRO =\n '특정 엘리먼트(anchorEl) 또는 화면 좌표(anchorPosition)를 기준으로 지정된 위치(anchorOrigin 및 transformOrigin)에 띄우는 STN 표준 플로팅 팝오버 컴포넌트입니다.'\n\nexport const STN_POPOVER_USAGE = `import { useState } from 'react'\nimport { StnButton, StnPopover } from '@stn-uiux/pub-ui-react'\n\nexport function PopoverExample() {\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = () => {\n setAnchorEl(null)\n }\n\n const open = Boolean(anchorEl)\n\n return (\n <>\n <StnButton onClick={handleClick}>Open Popover</StnButton>\n <StnPopover\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n >\n <div style={{ padding: 'var(--stn-space-16)' }}>팝오버 콘텐츠</div>\n </StnPopover>\n </>\n )\n}`\n"],"mappings":";AAmBO,IAAM,oBACX;AAEK,IAAM,oBAAoB;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":[]}
|
|
@@ -60,7 +60,16 @@ var STN_UI_COMPONENTS = [
|
|
|
60
60
|
label: "Tree",
|
|
61
61
|
pubSelector: ".stn-tree",
|
|
62
62
|
styles: ["@stn-uiux/pub-ui/styles.css"],
|
|
63
|
-
dataModule: "@stn-uiux/pub-ui/data/
|
|
63
|
+
dataModule: "@stn-uiux/pub-ui/data/stnTree",
|
|
64
|
+
status: "implemented"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: "popover",
|
|
68
|
+
kind: "component",
|
|
69
|
+
label: "Popover",
|
|
70
|
+
pubSelector: ".stn-popover",
|
|
71
|
+
styles: ["@stn-uiux/pub-ui/styles.css"],
|
|
72
|
+
dataModule: "@stn-uiux/pub-ui/data/stnPopover",
|
|
64
73
|
status: "implemented"
|
|
65
74
|
}
|
|
66
75
|
];
|
|
@@ -145,4 +154,4 @@ export {
|
|
|
145
154
|
STN_UI_FOUNDATIONS,
|
|
146
155
|
STN_UI_CATALOG
|
|
147
156
|
};
|
|
148
|
-
//# sourceMappingURL=chunk-
|
|
157
|
+
//# sourceMappingURL=chunk-K6TWXWIO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components.ts"],"sourcesContent":["/**\n * STN Pub UI — component catalog (class-based HTML/CSS; React wrappers TBD)\n */\nexport type StnUiComponentId =\n | 'button'\n | 'chip'\n | 'side-navigation'\n | 'popup'\n | 'pagination'\n | 'data-table'\n | 'tree'\n | 'popover'\n\nexport type StnUiFoundationId =\n | 'color'\n | 'typography'\n | 'elevation'\n | 'space'\n | 'spacing-semantic'\n | 'radius'\n | 'radius-semantic'\n | 'gradients'\n\nexport type StnUiEntry = {\n id: StnUiComponentId | StnUiFoundationId\n kind: 'component' | 'foundation'\n label: string\n /** Pub HTML class prefix or shell selector */\n pubSelector: string\n /** CSS entry paths (package exports) */\n styles: string[]\n /** Spec module under @stn-uiux/pub-ui/data */\n dataModule?: string\n status: 'implemented' | 'partial' | 'planned'\n}\n\nexport const STN_UI_COMPONENTS: StnUiEntry[] = [\n {\n id: 'button',\n kind: 'component',\n label: 'Button',\n pubSelector: '.stn-btn',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnButtonStates',\n status: 'implemented',\n },\n {\n id: 'chip',\n kind: 'component',\n label: 'Chip',\n pubSelector: '.stn-badge, .tag.critic, .error_tag',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubChip',\n status: 'implemented',\n },\n {\n id: 'side-navigation',\n kind: 'component',\n label: 'Side Navigation',\n pubSelector: '.stn-side-nav',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnSideNavigation',\n status: 'implemented',\n },\n {\n id: 'popup',\n kind: 'component',\n label: 'Popup',\n pubSelector: '.stn-pop',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubPopup',\n status: 'implemented',\n },\n {\n id: 'pagination',\n kind: 'component',\n label: 'Pagination',\n pubSelector: '.stn-pagination',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubPagination',\n status: 'implemented',\n },\n {\n id: 'data-table',\n kind: 'component',\n label: 'Data Table',\n pubSelector: '.stn-table',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubTable',\n status: 'implemented',\n },\n {\n id: 'tree',\n kind: 'component',\n label: 'Tree',\n pubSelector: '.stn-tree',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnTree',\n status: 'implemented',\n },\n {\n id: 'popover',\n kind: 'component',\n label: 'Popover',\n pubSelector: '.stn-popover',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPopover',\n status: 'implemented',\n },\n]\n\nexport const STN_UI_FOUNDATIONS: StnUiEntry[] = [\n {\n id: 'color',\n kind: 'foundation',\n label: 'Color',\n pubSelector: ':root',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubColorPalette',\n status: 'implemented',\n },\n {\n id: 'typography',\n kind: 'foundation',\n label: 'Typography',\n pubSelector: ':root',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubTypography',\n status: 'implemented',\n },\n {\n id: 'elevation',\n kind: 'foundation',\n label: 'Elevation',\n pubSelector: ':root',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubElevation',\n status: 'implemented',\n },\n {\n id: 'space',\n kind: 'foundation',\n label: 'Space',\n pubSelector: ':root',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubSpace',\n status: 'implemented',\n },\n {\n id: 'spacing-semantic',\n kind: 'foundation',\n label: 'Spacing (semantic)',\n pubSelector: ':root',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubSpacingSemantic',\n status: 'implemented',\n },\n {\n id: 'radius',\n kind: 'foundation',\n label: 'Radius',\n pubSelector: ':root',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubRadius',\n status: 'implemented',\n },\n {\n id: 'radius-semantic',\n kind: 'foundation',\n label: 'Radius (semantic)',\n pubSelector: ':root',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubRadiusSemantic',\n status: 'implemented',\n },\n {\n id: 'gradients',\n kind: 'foundation',\n label: 'Gradients',\n pubSelector: ':root',\n styles: ['@stn-uiux/pub-ui/styles.css'],\n dataModule: '@stn-uiux/pub-ui/data/stnPubGradients',\n status: 'implemented',\n },\n]\n\nexport const STN_UI_CATALOG = [...STN_UI_FOUNDATIONS, ...STN_UI_COMPONENTS]\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// src/data/stnStepper.ts
|
|
2
|
+
var STN_STEP_STATUS_SPEC = {
|
|
3
|
+
success: {
|
|
4
|
+
label: "\uC644\uB8CC (Success)",
|
|
5
|
+
token: "var(--stn-feedback-success)",
|
|
6
|
+
icon: "line/check",
|
|
7
|
+
desc: "\uC131\uACF5\uC801\uC73C\uB85C \uC644\uB8CC\uB41C \uB2E8\uACC4"
|
|
8
|
+
},
|
|
9
|
+
running: {
|
|
10
|
+
label: "\uC9C4\uD589 \uC911 (Running)",
|
|
11
|
+
token: "var(--stn-primary)",
|
|
12
|
+
icon: "spinner",
|
|
13
|
+
desc: "\uD604\uC7AC \uCC98\uB9AC \uC911 \uB610\uB294 \uC785\uB825 \uC9C4\uD589 \uC911\uC778 \uB2E8\uACC4"
|
|
14
|
+
},
|
|
15
|
+
wait: {
|
|
16
|
+
label: "\uB300\uAE30 (Wait)",
|
|
17
|
+
token: "var(--stn-border-default)",
|
|
18
|
+
textToken: "var(--stn-text-tertiary)",
|
|
19
|
+
desc: "\uC544\uC9C1 \uB3C4\uB2EC\uD558\uC9C0 \uC54A\uC740 \uB300\uAE30 \uB2E8\uACC4"
|
|
20
|
+
},
|
|
21
|
+
error: {
|
|
22
|
+
label: "\uC624\uB958 (Error)",
|
|
23
|
+
token: "var(--stn-feedback-error)",
|
|
24
|
+
icon: "line/alert-circle",
|
|
25
|
+
desc: "\uAC80\uC99D \uC2E4\uD328 \uB610\uB294 \uC2E4\uD589 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD55C \uB2E8\uACC4"
|
|
26
|
+
},
|
|
27
|
+
warning: {
|
|
28
|
+
label: "\uACBD\uACE0 (Warning)",
|
|
29
|
+
token: "var(--stn-feedback-warning)",
|
|
30
|
+
icon: "line/alert-triangle",
|
|
31
|
+
desc: "\uC8FC\uC758\uAC00 \uD544\uC694\uD558\uAC70\uB098 \uCD94\uAC00 \uD655\uC778\uC774 \uD544\uC694\uD55C \uB2E8\uACC4"
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
STN_STEP_STATUS_SPEC
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chunk-N4PVFFKV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/stnStepper.ts"],"sourcesContent":["/**\n * STN Stepper — SSOT Data & Type Definitions\n */\nimport type { ReactNode } from 'react'\n\n/** 가로/세로 진행 방향 */\nexport type StnStepperOrientation = 'horizontal' | 'vertical'\n\n/** 세로(vertical) 모드일 때 스텝 노드와 연결선의 위치 (left: 기본 왼쪽, right: 오른쪽) */\nexport type StnStepperPosition = 'left' | 'right'\n\n/** STN 표준 규격 크기 스케일 (GEMINI.md Rule 1 강제 준수: xs, sm, md, lg, xl) */\nexport type StnStepperSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/** 스텝 연결선 두께 설정 (1~4px 숫자 또는 'xs' | 'sm' | 'md' | 'lg' | 'xl' 프리셋, 커스텀 치수 문자열) */\nexport type StnStepperLineThickness = StnStepperSize | 1 | 2 | 3 | 4 | (number & {}) | string\n\n/** 각 스텝의 5대 상태 (Status) */\nexport type StnStepStatus = 'wait' | 'running' | 'success' | 'warning' | 'error'\n\n/** 스텝 데이터 항목 정의 (Data-driven 배열용) */\nexport interface StnStepItem {\n /** 고유 키 (미지정 시 인덱스) */\n key?: string | number\n /** 메인 스텝 제목 */\n label: ReactNode\n /** 서브 캡션 설명 */\n caption?: ReactNode\n /** 세로(vertical) 모드에서 펼쳐질 본문 내용 슬롯 (폼, 상세 설명, Continue/Back 버튼 등) */\n content?: ReactNode\n /** 세로(vertical) 모드에서 본문 내용 강제 펼침 여부 (미지정 시 activeStep과 일치할 때 자동 펼침) */\n expanded?: boolean\n /** 상태 직접 지정 (미지정 시 activeStep과 인덱스 비교로 자동 산출) */\n status?: StnStepStatus\n /** 커스텀 아이콘 (StnIcon 문자열 이름 또는 ReactNode) */\n icon?: string | ReactNode\n /** 에러 여부 또는 커스텀 에러 문구 */\n error?: boolean | ReactNode\n /** 에러 발생 시 표시할 상세 안내 텍스트 */\n errorText?: ReactNode\n /** 비활성화 여부 */\n disabled?: boolean\n /** 선택 사항 라벨 (예: '선택 사항' 배지/텍스트) */\n optional?: ReactNode\n /** 클릭 핸들러 (nonLinear 모드에서 동작) */\n onClick?: () => void\n}\n\n/** 5대 상태별 시각적 표현 및 시멘틱 토큰 매핑 명세 */\nexport const STN_STEP_STATUS_SPEC = {\n success: {\n label: '완료 (Success)',\n token: 'var(--stn-feedback-success)',\n icon: 'line/check',\n desc: '성공적으로 완료된 단계',\n },\n running: {\n label: '진행 중 (Running)',\n token: 'var(--stn-primary)',\n icon: 'spinner',\n desc: '현재 처리 중 또는 입력 진행 중인 단계',\n },\n wait: {\n label: '대기 (Wait)',\n token: 'var(--stn-border-default)',\n textToken: 'var(--stn-text-tertiary)',\n desc: '아직 도달하지 않은 대기 단계',\n },\n error: {\n label: '오류 (Error)',\n token: 'var(--stn-feedback-error)',\n icon: 'line/alert-circle',\n desc: '검증 실패 또는 실행 중 오류가 발생한 단계',\n },\n warning: {\n label: '경고 (Warning)',\n token: 'var(--stn-feedback-warning)',\n icon: 'line/alert-triangle',\n desc: '주의가 필요하거나 추가 확인이 필요한 단계',\n },\n} as const\n"],"mappings":";AAiDO,IAAM,uBAAuB;AAAA,EAClC,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/data/stnStepCards.ts
|
|
2
|
+
var STN_STEP_CARDS_INTRO = {
|
|
3
|
+
name: "Step Cards",
|
|
4
|
+
slug: "step-cards",
|
|
5
|
+
kind: "pattern",
|
|
6
|
+
description: "\uB178\uB4DC\uB9CC \uC788\uB294 \uAC00\uB85C \uC2A4\uD15D\uD37C \uC544\uB798 \uB2E8\uACC4\uBCC4 \uC810\uAC80 \uACB0\uACFC \uBC0F \uC561\uC158 \uCE74\uB4DC\uB97C 1:1\uB85C \uACB0\uD569\uD55C \uBCF5\uD569 \uD328\uD134"
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
STN_STEP_CARDS_INTRO
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=chunk-NYZMUDVK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/stnStepCards.ts"],"sourcesContent":["/**\n * STN Step Cards Pattern — SSOT Data & Type Definitions\n */\nimport type { ReactNode } from 'react'\nimport type { StnStepStatus, StnStepperSize, StnStepperLineThickness } from './stnStepper'\n\nexport type { StnStepStatus, StnStepperSize, StnStepperLineThickness }\n\nexport interface StnStepCardItem {\n key?: string | number\n /** 카드 제목 위 단계 라벨. 없으면 STEP 01 */\n stepLabel?: ReactNode\n title: ReactNode\n /** 이 카드의 결과 제목. 없으면 StnStepCards의 resultLabel */\n resultLabel?: ReactNode\n /** 결과 값. 없으면 상태 이름(성공·진행·대기·오류·경고) */\n resultText?: ReactNode\n status?: StnStepStatus\n /** 이 카드의 버튼 문구. 없으면 StnStepCards의 actionLabel */\n actionLabel?: ReactNode\n onAction?: () => void\n /** 결과를 열 수 있는 상태여도 버튼을 막는다 */\n actionDisabled?: boolean\n}\n\nexport const STN_STEP_CARDS_INTRO = {\n name: 'Step Cards',\n slug: 'step-cards',\n kind: 'pattern' as const,\n description: '노드만 있는 가로 스텝퍼 아래 단계별 점검 결과 및 액션 카드를 1:1로 결합한 복합 패턴',\n}\n"],"mappings":";AAyBO,IAAM,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AACf;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/stnPackageVersion.ts"],"sourcesContent":["/** Package version constants */\nexport const STN_UI_VERSION = '0.1.84'\nexport const STN_UI_VERSION_LABEL = 'v0.1.84'\n"],"mappings":";AACO,IAAM,iBAAiB;AACvB,IAAM,uBAAuB;","names":[]}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import {
|
|
2
|
+
STN_DATE_RANGE_FIELD_HTML
|
|
3
|
+
} from "./chunk-5F63CMM7.js";
|
|
4
|
+
|
|
5
|
+
// src/data/stnDatePicker.ts
|
|
6
|
+
var STN_DATE_PRESET_LABEL = {
|
|
7
|
+
today: "\uC624\uB298",
|
|
8
|
+
days7: "7\uC77C",
|
|
9
|
+
month1: "1\uAC1C\uC6D4",
|
|
10
|
+
month3: "3\uAC1C\uC6D4",
|
|
11
|
+
thisMonth: "\uB2F9\uC6D4",
|
|
12
|
+
prevMonth: "\uC804\uC6D4"
|
|
13
|
+
};
|
|
14
|
+
function atStartOfDay(date) {
|
|
15
|
+
const next = new Date(date);
|
|
16
|
+
next.setHours(0, 0, 0, 0);
|
|
17
|
+
return next;
|
|
18
|
+
}
|
|
19
|
+
function atEndOfDay(date) {
|
|
20
|
+
const next = new Date(date);
|
|
21
|
+
next.setHours(23, 59, 59, 0);
|
|
22
|
+
return next;
|
|
23
|
+
}
|
|
24
|
+
function rangeForPreset(kind, now) {
|
|
25
|
+
if (kind === "today") {
|
|
26
|
+
return { start: atStartOfDay(now), end: atEndOfDay(now) };
|
|
27
|
+
}
|
|
28
|
+
if (kind === "days7") {
|
|
29
|
+
const start2 = atStartOfDay(now);
|
|
30
|
+
start2.setDate(start2.getDate() - 6);
|
|
31
|
+
return { start: start2, end: atEndOfDay(now) };
|
|
32
|
+
}
|
|
33
|
+
if (kind === "month1" || kind === "month3") {
|
|
34
|
+
const start2 = atStartOfDay(now);
|
|
35
|
+
start2.setMonth(start2.getMonth() - (kind === "month1" ? 1 : 3));
|
|
36
|
+
return { start: start2, end: atEndOfDay(now) };
|
|
37
|
+
}
|
|
38
|
+
if (kind === "thisMonth") {
|
|
39
|
+
const start2 = new Date(now.getFullYear(), now.getMonth(), 1, 0, 0, 0, 0);
|
|
40
|
+
const end2 = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 0);
|
|
41
|
+
return { start: start2, end: end2 };
|
|
42
|
+
}
|
|
43
|
+
const start = new Date(now.getFullYear(), now.getMonth() - 1, 1, 0, 0, 0, 0);
|
|
44
|
+
const end = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 0);
|
|
45
|
+
return { start, end };
|
|
46
|
+
}
|
|
47
|
+
function createStnDatePreset(kind, label) {
|
|
48
|
+
return {
|
|
49
|
+
id: kind,
|
|
50
|
+
label: label ?? STN_DATE_PRESET_LABEL[kind],
|
|
51
|
+
getRange: (now) => rangeForPreset(kind, now)
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function createStnDatePresets(kinds, labels) {
|
|
55
|
+
return kinds.map((kind) => createStnDatePreset(kind, labels?.[kind]));
|
|
56
|
+
}
|
|
57
|
+
var STN_DATE_PICKER_NAME = "Date range picker";
|
|
58
|
+
var STN_DATE_PICKER_KO_NAME = "\uAE30\uAC04 \uC120\uD0DD \uB2EC\uB825";
|
|
59
|
+
var STN_DATE_PICKER_INTRO = '\uB2EC\uB825 \uC544\uC774\uCF58 \uD074\uB9AD \uC2DC \uC5F4\uB9AC\uB294 **\uAE30\uAC04 \uC120\uD0DD \uD31D\uC5C5**\uC785\uB2C8\uB2E4. \uAE30\uBCF8\uC740 2\uAC1C\uC6D4 \uBC94\uC704\uC774\uACE0, `mode="single"`\uC774\uBA74 \uB2EC\uB825 \uD55C \uB2EC\uC785\uB2C8\uB2E4. \uB2E8\uAC74\uC5D0 `showTime`\uC744 \uC8FC\uBA74 \uC2DC\xB7\uBD84\xB7\uCD08\uAC00 \uAE30\uBCF8\uC73C\uB85C \uB2EC\uB825 \uC624\uB978\uCABD\uC5D0 \uBD99\uACE0, `timePlacement="bottom"`\uC774\uBA74 \uB2EC\uB825 \uC544\uB798\uC785\uB2C8\uB2E4. `presets`\uB294 \uC624\uB298\xB77\uC77C\uCC98\uB7FC \uD558\uB2E8 \uBC84\uD2BC\uC774\uBA70, \uB2E8\uAC74\uC5D0\uC11C\uB3C4 \uADF8 \uAE30\uAC04 \uC804\uCCB4\uB97C \uACE0\uB985\uB2C8\uB2E4. \uD2B8\uB9AC\uAC70\uB294 `StnDateRangeField`\uC640 \uB3D9\uC77C \uC2A4\uCF00\uC77C(sm/md/lg)\uC774\uBA70, \uD1B5\uD569 \uC870\uB9BD\uC740 `StnDateRangePickerField` \xB7 \uD31D\uC5C5\uB9CC \uC4F0\uB824\uBA74 `StnDateRangePicker`.';
|
|
60
|
+
var STN_DATE_PICKER_PART_ROWS = [
|
|
61
|
+
{
|
|
62
|
+
part: "Trigger",
|
|
63
|
+
component: "StnDateRangeField",
|
|
64
|
+
note: "\uAE30\uAC04 \uD45C\uC2DC + \uB2EC\uB825 \uC544\uC774\uCF58 \xB7 TextField sm/md/lg \uC2A4\uCF00\uC77C"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
part: "Field + popup",
|
|
68
|
+
component: "StnDateRangePickerField",
|
|
69
|
+
note: "\uD2B8\uB9AC\uAC70 + portal \uD31D\uC5C5 \xB7 \uAC80\uC0C9\uC870\uAC74 \uB4F1 \uAE30\uBCF8 \uC0AC\uC6A9"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
part: "Panel only",
|
|
73
|
+
component: "StnDateRangePicker",
|
|
74
|
+
note: "\uB2EC\uB825\xB7\uC2DC\uAC04\xB7\uCDE8\uC18C\xB7\uD655\uC778 UI\uB9CC \xB7 \uCEE4\uC2A4\uD140 \uC575\uCEE4\uC5D0 \uC5F0\uACB0"
|
|
75
|
+
}
|
|
76
|
+
];
|
|
77
|
+
var STN_DATE_PICKER_SPEC = [
|
|
78
|
+
{ property: "Calendar", value: "range: 2 months \xB7 single: 1 month", note: "`mode` \uAE30\uBCF8 range" },
|
|
79
|
+
{ property: "Size", value: "sm \xB7 md \xB7 lg", note: "\uD544\uB4DC\xB7\uB2EC\uB825 \uCE78\xB7\uD328\uB529 \uD1A0\uD070 \uC2A4\uCF00\uC77C. \uAE30\uBCF8 md" },
|
|
80
|
+
{ property: "Hover preview", value: "start only \u2192 hover band", note: "\uC2DC\uC791\uC77C\uB9CC \uACE0\uB978 \uB4A4 \uB2E4\uB978 \uB0A0 \uC704\uC5D0 \uC62C\uB9AC\uBA74 \uBC94\uC704 \uBBF8\uB9AC\uBCF4\uAE30" },
|
|
81
|
+
{ property: "Time", value: "optional `showTime`", note: "\uAE30\uAC04\uC740 \uB2EC\uB825 \uC544\uB798. \uB2E8\uAC74\uC740 `timePlacement`\uB85C \uC624\uB978\uCABD \uB610\uB294 \uC544\uB798" },
|
|
82
|
+
{ property: "Presets", value: "optional `presets`", note: "\uD558\uB2E8 \uBC84\uD2BC \xB7 \uC904\uBC14\uAFC8 \xB7 \uB2E8\uAC74\uC5D0\uC11C\uB3C4 \uAE30\uAC04 \uC804\uCCB4" },
|
|
83
|
+
{ property: "Apply", value: "\uD655\uC778 button", note: "\uC801\uC6A9 \uD6C4 \uD31D\uC5C5 \uB2EB\uAE30" },
|
|
84
|
+
{ property: "Cancel", value: "\uCDE8\uC18C button \xB7 Esc \xB7 outside", note: "\uBC18\uC601 \uC5C6\uC774 \uB2EB\uAE30" },
|
|
85
|
+
{ property: "CSS", value: "stn-date-picker.css", note: "--calendar-* \xB7 --stn-date-picker-* \uD1A0\uD070" }
|
|
86
|
+
];
|
|
87
|
+
var STN_DATE_PICKER_USAGE = `import { StnDateRangePickerField, createStnDatePresets } from '@stn-uiux/pub-ui-react'
|
|
88
|
+
|
|
89
|
+
const [range, setRange] = useState({
|
|
90
|
+
start: new Date('2024-02-07T09:22:34'),
|
|
91
|
+
end: new Date('2024-03-07T09:22:34'),
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
<StnDateRangePickerField
|
|
95
|
+
size="md"
|
|
96
|
+
value={range}
|
|
97
|
+
onChange={setRange}
|
|
98
|
+
showTime
|
|
99
|
+
aria-label="Search period"
|
|
100
|
+
/>
|
|
101
|
+
|
|
102
|
+
// \uB2E8\uAC74 + \uC2DC\uAC04. \uBC14\uB85C\uAC00\uAE30\uB294 \uD654\uBA74\uC774 \uBC30\uC5F4\uB85C \uC815\uD55C\uB2E4.
|
|
103
|
+
<StnDateRangePickerField
|
|
104
|
+
mode="single"
|
|
105
|
+
showTime
|
|
106
|
+
timePlacement="bottom"
|
|
107
|
+
presets={createStnDatePresets(['today', 'days7', 'month1', 'month3', 'thisMonth', 'prevMonth'])}
|
|
108
|
+
value={day}
|
|
109
|
+
onChange={setDay}
|
|
110
|
+
/>`;
|
|
111
|
+
var STN_DATE_PICKER_USAGE_HTML = `${STN_DATE_RANGE_FIELD_HTML}
|
|
112
|
+
|
|
113
|
+
<!-- \uB2EC\uB825 \uD328\uB110 \u2014 stn-date-picker.css -->
|
|
114
|
+
<div class="stn-date-picker-dropdown" role="dialog" aria-label="\uAE30\uAC04 \uC120\uD0DD">
|
|
115
|
+
<div class="stn-date-picker-dropdown__body">
|
|
116
|
+
<div class="stn-date-picker-dropdown__panels">
|
|
117
|
+
<div class="stn-date-picker-panel">...</div>
|
|
118
|
+
<div class="stn-date-picker-panel">...</div>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="stn-date-picker-time">
|
|
121
|
+
<div class="stn-date-picker-time__side">...</div>
|
|
122
|
+
<div class="stn-date-picker-time__side">...</div>
|
|
123
|
+
</div>
|
|
124
|
+
<div class="stn-date-picker-footer">
|
|
125
|
+
<button type="button" class="stn-btn text md">
|
|
126
|
+
<span class="stn-btn__label">\uCDE8\uC18C</span>
|
|
127
|
+
</button>
|
|
128
|
+
<button type="button" class="stn-btn text md">
|
|
129
|
+
<span class="stn-btn__label">\uD655\uC778</span>
|
|
130
|
+
</button>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</div>`;
|
|
134
|
+
var STN_DATE_PICKER_PANEL_USAGE = `import { StnDateRangePicker } from '@stn-uiux/pub-ui-react'
|
|
135
|
+
|
|
136
|
+
<StnDateRangePicker
|
|
137
|
+
open
|
|
138
|
+
value={{ start, end }}
|
|
139
|
+
onChange={setDraft}
|
|
140
|
+
onApply={(next) => { setRange(next); setOpen(false) }}
|
|
141
|
+
onClose={() => setOpen(false)}
|
|
142
|
+
showTime
|
|
143
|
+
/>`;
|
|
144
|
+
var STN_DATE_PICKER_WEEKDAYS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
|
|
145
|
+
|
|
146
|
+
export {
|
|
147
|
+
STN_DATE_PRESET_LABEL,
|
|
148
|
+
createStnDatePreset,
|
|
149
|
+
createStnDatePresets,
|
|
150
|
+
STN_DATE_PICKER_NAME,
|
|
151
|
+
STN_DATE_PICKER_KO_NAME,
|
|
152
|
+
STN_DATE_PICKER_INTRO,
|
|
153
|
+
STN_DATE_PICKER_PART_ROWS,
|
|
154
|
+
STN_DATE_PICKER_SPEC,
|
|
155
|
+
STN_DATE_PICKER_USAGE,
|
|
156
|
+
STN_DATE_PICKER_USAGE_HTML,
|
|
157
|
+
STN_DATE_PICKER_PANEL_USAGE,
|
|
158
|
+
STN_DATE_PICKER_WEEKDAYS
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=chunk-QJN2Z6RG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/stnDatePicker.ts"],"sourcesContent":["import { STN_DATE_RANGE_FIELD_HTML } from './stnDateRangeField'\n\nexport type StnDateRange = {\n start: Date | null\n end: Date | null\n}\n\n/** `range`는 두 달, `single`은 한 달. 고르는 방식은 같다. 한 번은 시작일, 같은 날을 다시 누르면 그날만, 다른 날이면 범위. */\nexport type StnDatePickerMode = 'range' | 'single'\n\n/** 단건에 시간을 켤 때 시·분·초 위치. 기간 검색은 항상 달력 아래. */\nexport type StnDateTimePlacement = 'side' | 'bottom'\n\nexport type StnDatePresetKind = 'today' | 'days7' | 'month1' | 'month3' | 'thisMonth' | 'prevMonth'\n\nexport type StnDatePreset = {\n id: string\n label: string\n getRange: (now: Date) => StnDateRange\n}\n\nexport const STN_DATE_PRESET_LABEL: Record<StnDatePresetKind, string> = {\n today: '오늘',\n days7: '7일',\n month1: '1개월',\n month3: '3개월',\n thisMonth: '당월',\n prevMonth: '전월',\n}\n\nfunction atStartOfDay(date: Date): Date {\n const next = new Date(date)\n next.setHours(0, 0, 0, 0)\n return next\n}\n\nfunction atEndOfDay(date: Date): Date {\n const next = new Date(date)\n next.setHours(23, 59, 59, 0)\n return next\n}\n\nfunction rangeForPreset(kind: StnDatePresetKind, now: Date): StnDateRange {\n if (kind === 'today') {\n return { start: atStartOfDay(now), end: atEndOfDay(now) }\n }\n if (kind === 'days7') {\n const start = atStartOfDay(now)\n start.setDate(start.getDate() - 6)\n return { start, end: atEndOfDay(now) }\n }\n if (kind === 'month1' || kind === 'month3') {\n const start = atStartOfDay(now)\n start.setMonth(start.getMonth() - (kind === 'month1' ? 1 : 3))\n return { start, end: atEndOfDay(now) }\n }\n if (kind === 'thisMonth') {\n const start = new Date(now.getFullYear(), now.getMonth(), 1, 0, 0, 0, 0)\n const end = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 0)\n return { start, end }\n }\n const start = new Date(now.getFullYear(), now.getMonth() - 1, 1, 0, 0, 0, 0)\n const end = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 0)\n return { start, end }\n}\n\n/** 바로가기 하나. `label`을 비우면 오늘·7일·1개월·3개월·당월·전월 중 해당 이름을 쓴다. */\nexport function createStnDatePreset(kind: StnDatePresetKind, label?: string): StnDatePreset {\n return {\n id: kind,\n label: label ?? STN_DATE_PRESET_LABEL[kind],\n getRange: (now) => rangeForPreset(kind, now),\n }\n}\n\n/** 화면에 둘 바로가기만 고른다. 순서는 배열 순서이고, 빼면 버튼도 빠진다. */\nexport function createStnDatePresets(\n kinds: readonly StnDatePresetKind[],\n labels?: Partial<Record<StnDatePresetKind, string>>,\n): StnDatePreset[] {\n return kinds.map((kind) => createStnDatePreset(kind, labels?.[kind]))\n}\n\nexport const STN_DATE_PICKER_NAME = 'Date range picker'\n\nexport const STN_DATE_PICKER_KO_NAME = '기간 선택 달력'\n\nexport const STN_DATE_PICKER_INTRO =\n '달력 아이콘 클릭 시 열리는 **기간 선택 팝업**입니다. 기본은 2개월 범위이고, `mode=\"single\"`이면 달력 한 달입니다. 단건에 `showTime`을 주면 시·분·초가 기본으로 달력 오른쪽에 붙고, `timePlacement=\"bottom\"`이면 달력 아래입니다. `presets`는 오늘·7일처럼 하단 버튼이며, 단건에서도 그 기간 전체를 고릅니다. 트리거는 `StnDateRangeField`와 동일 스케일(sm/md/lg)이며, 통합 조립은 `StnDateRangePickerField` · 팝업만 쓰려면 `StnDateRangePicker`.'\n\nexport const STN_DATE_PICKER_PART_ROWS = [\n {\n part: 'Trigger',\n component: 'StnDateRangeField',\n note: '기간 표시 + 달력 아이콘 · TextField sm/md/lg 스케일',\n },\n {\n part: 'Field + popup',\n component: 'StnDateRangePickerField',\n note: '트리거 + portal 팝업 · 검색조건 등 기본 사용',\n },\n {\n part: 'Panel only',\n component: 'StnDateRangePicker',\n note: '달력·시간·취소·확인 UI만 · 커스텀 앵커에 연결',\n },\n] as const\n\nexport const STN_DATE_PICKER_SPEC = [\n { property: 'Calendar', value: 'range: 2 months · single: 1 month', note: '`mode` 기본 range' },\n { property: 'Size', value: 'sm · md · lg', note: '필드·달력 칸·패딩 토큰 스케일. 기본 md' },\n { property: 'Hover preview', value: 'start only → hover band', note: '시작일만 고른 뒤 다른 날 위에 올리면 범위 미리보기' },\n { property: 'Time', value: 'optional `showTime`', note: '기간은 달력 아래. 단건은 `timePlacement`로 오른쪽 또는 아래' },\n { property: 'Presets', value: 'optional `presets`', note: '하단 버튼 · 줄바꿈 · 단건에서도 기간 전체' },\n { property: 'Apply', value: '확인 button', note: '적용 후 팝업 닫기' },\n { property: 'Cancel', value: '취소 button · Esc · outside', note: '반영 없이 닫기' },\n { property: 'CSS', value: 'stn-date-picker.css', note: '--calendar-* · --stn-date-picker-* 토큰' },\n] as const\n\nexport const STN_DATE_PICKER_USAGE = `import { StnDateRangePickerField, createStnDatePresets } from '@stn-uiux/pub-ui-react'\n\nconst [range, setRange] = useState({\n start: new Date('2024-02-07T09:22:34'),\n end: new Date('2024-03-07T09:22:34'),\n})\n\n<StnDateRangePickerField\n size=\"md\"\n value={range}\n onChange={setRange}\n showTime\n aria-label=\"Search period\"\n/>\n\n// 단건 + 시간. 바로가기는 화면이 배열로 정한다.\n<StnDateRangePickerField\n mode=\"single\"\n showTime\n timePlacement=\"bottom\"\n presets={createStnDatePresets(['today', 'days7', 'month1', 'month3', 'thisMonth', 'prevMonth'])}\n value={day}\n onChange={setDay}\n/>`\n\nexport const STN_DATE_PICKER_USAGE_HTML = `${STN_DATE_RANGE_FIELD_HTML}\n\n<!-- 달력 패널 — stn-date-picker.css -->\n<div class=\"stn-date-picker-dropdown\" role=\"dialog\" aria-label=\"기간 선택\">\n <div class=\"stn-date-picker-dropdown__body\">\n <div class=\"stn-date-picker-dropdown__panels\">\n <div class=\"stn-date-picker-panel\">...</div>\n <div class=\"stn-date-picker-panel\">...</div>\n </div>\n <div class=\"stn-date-picker-time\">\n <div class=\"stn-date-picker-time__side\">...</div>\n <div class=\"stn-date-picker-time__side\">...</div>\n </div>\n <div class=\"stn-date-picker-footer\">\n <button type=\"button\" class=\"stn-btn text md\">\n <span class=\"stn-btn__label\">취소</span>\n </button>\n <button type=\"button\" class=\"stn-btn text md\">\n <span class=\"stn-btn__label\">확인</span>\n </button>\n </div>\n </div>\n</div>`\n\nexport const STN_DATE_PICKER_PANEL_USAGE = `import { StnDateRangePicker } from '@stn-uiux/pub-ui-react'\n\n<StnDateRangePicker\n open\n value={{ start, end }}\n onChange={setDraft}\n onApply={(next) => { setRange(next); setOpen(false) }}\n onClose={() => setOpen(false)}\n showTime\n/>`\n\nexport const STN_DATE_PICKER_WEEKDAYS = ['일', '월', '화', '수', '목', '금', '토'] as const\n"],"mappings":";;;;;AAqBO,IAAM,wBAA2D;AAAA,EACtE,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,WAAW;AACb;AAEA,SAAS,aAAa,MAAkB;AACtC,QAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,OAAK,SAAS,GAAG,GAAG,GAAG,CAAC;AACxB,SAAO;AACT;AAEA,SAAS,WAAW,MAAkB;AACpC,QAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,OAAK,SAAS,IAAI,IAAI,IAAI,CAAC;AAC3B,SAAO;AACT;AAEA,SAAS,eAAe,MAAyB,KAAyB;AACxE,MAAI,SAAS,SAAS;AACpB,WAAO,EAAE,OAAO,aAAa,GAAG,GAAG,KAAK,WAAW,GAAG,EAAE;AAAA,EAC1D;AACA,MAAI,SAAS,SAAS;AACpB,UAAMA,SAAQ,aAAa,GAAG;AAC9B,IAAAA,OAAM,QAAQA,OAAM,QAAQ,IAAI,CAAC;AACjC,WAAO,EAAE,OAAAA,QAAO,KAAK,WAAW,GAAG,EAAE;AAAA,EACvC;AACA,MAAI,SAAS,YAAY,SAAS,UAAU;AAC1C,UAAMA,SAAQ,aAAa,GAAG;AAC9B,IAAAA,OAAM,SAASA,OAAM,SAAS,KAAK,SAAS,WAAW,IAAI,EAAE;AAC7D,WAAO,EAAE,OAAAA,QAAO,KAAK,WAAW,GAAG,EAAE;AAAA,EACvC;AACA,MAAI,SAAS,aAAa;AACxB,UAAMA,SAAQ,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACvE,UAAMC,OAAM,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC;AAC5E,WAAO,EAAE,OAAAD,QAAO,KAAAC,KAAI;AAAA,EACtB;AACA,QAAM,QAAQ,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3E,QAAM,MAAM,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC;AACxE,SAAO,EAAE,OAAO,IAAI;AACtB;AAGO,SAAS,oBAAoB,MAAyB,OAA+B;AAC1F,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO,SAAS,sBAAsB,IAAI;AAAA,IAC1C,UAAU,CAAC,QAAQ,eAAe,MAAM,GAAG;AAAA,EAC7C;AACF;AAGO,SAAS,qBACd,OACA,QACiB;AACjB,SAAO,MAAM,IAAI,CAAC,SAAS,oBAAoB,MAAM,SAAS,IAAI,CAAC,CAAC;AACtE;AAEO,IAAM,uBAAuB;AAE7B,IAAM,0BAA0B;AAEhC,IAAM,wBACX;AAEK,IAAM,4BAA4B;AAAA,EACvC;AAAA,IACE,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AACF;AAEO,IAAM,uBAAuB;AAAA,EAClC,EAAE,UAAU,YAAY,OAAO,wCAAqC,MAAM,4BAAkB;AAAA,EAC5F,EAAE,UAAU,QAAQ,OAAO,sBAAgB,MAAM,uGAA2B;AAAA,EAC5E,EAAE,UAAU,iBAAiB,OAAO,gCAA2B,MAAM,yIAAgC;AAAA,EACrG,EAAE,UAAU,QAAQ,OAAO,uBAAuB,MAAM,sIAA4C;AAAA,EACpG,EAAE,UAAU,WAAW,OAAO,sBAAsB,MAAM,kHAA4B;AAAA,EACtF,EAAE,UAAU,SAAS,OAAO,uBAAa,MAAM,gDAAa;AAAA,EAC5D,EAAE,UAAU,UAAU,OAAO,6CAA6B,MAAM,yCAAW;AAAA,EAC3E,EAAE,UAAU,OAAO,OAAO,uBAAuB,MAAM,qDAAwC;AACjG;AAEO,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB9B,IAAM,6BAA6B,GAAG,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwB/D,IAAM,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWpC,IAAM,2BAA2B,CAAC,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,QAAG;","names":["start","end"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/data/stnSplitView.ts
|
|
2
|
+
var STN_SPLIT_VIEW_SIDE_WIDTHS = ["sm", "md", "lg"];
|
|
3
|
+
var STN_SPLIT_VIEW_OVERLAY_PLACEMENTS = [
|
|
4
|
+
"top-left",
|
|
5
|
+
"top-right",
|
|
6
|
+
"bottom-left",
|
|
7
|
+
"bottom-center",
|
|
8
|
+
"bottom-right",
|
|
9
|
+
"center-left",
|
|
10
|
+
"center-right"
|
|
11
|
+
];
|
|
12
|
+
var STN_SPLIT_VIEW_INTRO = {
|
|
13
|
+
name: "Split View",
|
|
14
|
+
slug: "split-view",
|
|
15
|
+
kind: "pattern",
|
|
16
|
+
description: "\uCE74\uB4DC(\uB610\uB294 \uD328\uB110) \uBCF8\uBB38\uC744 \uC88C Side \xB7 \uC6B0 Stage\uB85C \uB098\uB204\uB294 \uB808\uC774\uC544\uC6C3 \uC178\uC785\uB2C8\uB2E4. Stage\uB294 position:relative \uCE94\uBC84\uC2A4 \uD638\uC2A4\uD2B8\uC774\uBA70 StnFloatingToolbar\xB7Overlay\uB97C \uC62C\uB9BD\uB2C8\uB2E4. \uB9F5\xB7\uD1A0\uD3F4\uB85C\uC9C0\xB7\uC2A4\uD1A0\uC5B4 \uB85C\uCF00\uC774\uD130 \uB4F1\uC5D0 \uACF5\uD1B5\uC73C\uB85C \uC501\uB2C8\uB2E4."
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
STN_SPLIT_VIEW_SIDE_WIDTHS,
|
|
21
|
+
STN_SPLIT_VIEW_OVERLAY_PLACEMENTS,
|
|
22
|
+
STN_SPLIT_VIEW_INTRO
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=chunk-W7K3FSAX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/stnSplitView.ts"],"sourcesContent":["/**\n * STN Split View Pattern — Side + Stage shell (SSOT types)\n * Store locator / 망구성도 / 캔버스 탐색: 중첩 Card 없이 좌 패널 + 우 스테이지.\n */\n\nexport type StnSplitViewSideWidth = 'sm' | 'md' | 'lg'\n\nexport type StnSplitViewOverlayPlacement =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right'\n | 'center-left'\n | 'center-right'\n\nexport const STN_SPLIT_VIEW_SIDE_WIDTHS: readonly StnSplitViewSideWidth[] = ['sm', 'md', 'lg'] as const\n\nexport const STN_SPLIT_VIEW_OVERLAY_PLACEMENTS: readonly StnSplitViewOverlayPlacement[] = [\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n 'center-left',\n 'center-right',\n] as const\n\nexport const STN_SPLIT_VIEW_INTRO = {\n name: 'Split View',\n slug: 'split-view',\n kind: 'pattern' as const,\n description:\n '카드(또는 패널) 본문을 좌 Side · 우 Stage로 나누는 레이아웃 셸입니다. Stage는 position:relative 캔버스 호스트이며 StnFloatingToolbar·Overlay를 올립니다. 맵·토폴로지·스토어 로케이터 등에 공통으로 씁니다.',\n}\n"],"mappings":";AAgBO,IAAM,6BAA+D,CAAC,MAAM,MAAM,IAAI;AAEtF,IAAM,oCAA6E;AAAA,EACxF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aACE;AACJ;","names":[]}
|