kakaotalk-chat-analyzer 0.2.0 → 0.2.1
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/README.md +59 -18
- package/dist/src/cli.js +4 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/report.js +148 -14
- package/dist/src/report.js.map +1 -1
- package/package.json +6 -5
package/README.md
CHANGED
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
# KakaoTalk Chat Analyzer
|
|
4
4
|
|
|
5
|
-
### 카카오톡 CSV보내기 → 익명 집계 리포트 → 선택적 임시 공유 · 한 번에 끝내는 CLI
|
|
5
|
+
### 카카오톡 CSV 보내기 → 익명 집계 리포트 → 선택적 임시 공유 · 한 번에 끝내는 CLI
|
|
6
6
|
|
|
7
7
|
[](./LICENSE)
|
|
8
8
|
[](https://nodejs.org/)
|
|
9
9
|
[](https://claudianus.github.io/kakaotalk-chat-analyzer/)
|
|
10
|
+
[](https://www.npmjs.com/package/kcachat)
|
|
11
|
+
[](https://www.npmjs.com/package/kakaotalk-chat-analyzer)
|
|
10
12
|
|
|
11
|
-
[**랜딩
|
|
13
|
+
[**랜딩 (GitHub Pages)**](https://claudianus.github.io/kakaotalk-chat-analyzer/) · [**소스 코드**](https://github.com/claudianus/kakaotalk-chat-analyzer) · [**이슈**](https://github.com/claudianus/kakaotalk-chat-analyzer/issues)
|
|
12
14
|
|
|
13
15
|
<br>
|
|
14
16
|
|
|
@@ -18,6 +20,21 @@
|
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
|
23
|
+
## 목차
|
|
24
|
+
|
|
25
|
+
- [왜 이 프로젝트인가요?](#왜-이-프로젝트인가요)
|
|
26
|
+
- [핵심 기능](#핵심-기능)
|
|
27
|
+
- [카카오톡에서 CSV 보내기](#카카오톡에서-csv-보내기)
|
|
28
|
+
- [빠른 시작](#빠른-시작)
|
|
29
|
+
- [생성되는 리포트](#생성되는-리포트)
|
|
30
|
+
- [프라이버시 기본값](#프라이버시-기본값)
|
|
31
|
+
- [아키텍처 한눈에](#아키텍처-한눈에)
|
|
32
|
+
- [개발](#개발)
|
|
33
|
+
- [문서 사이트 (GitHub Pages)](#문서-사이트-github-pages)
|
|
34
|
+
- [기여하기](#기여하기)
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
21
38
|
## 왜 이 프로젝트인가요?
|
|
22
39
|
|
|
23
40
|
카카오톡 대화를 **CSV로 보낸 뒤**, 팀·친구·커뮤니티에 **재미있는 통계**를 공유하고 싶을 때가 있습니다.
|
|
@@ -35,12 +52,23 @@
|
|
|
35
52
|
|------|------|
|
|
36
53
|
| **인코딩** | UTF-8 BOM, UTF-8, CP949/EUC-KR 등 보내기 인코딩 자동 감지 |
|
|
37
54
|
| **파싱** | `Date,User,Message` 헤더 기반 CSV + 멀티라인 메시지 처리 |
|
|
38
|
-
| **리포트** | 한글 UI, 하이라이트, 월별·심야·응답
|
|
55
|
+
| **리포트** | 한글 UI, 일별·시간대, 하이라이트, 월별·심야·응답 간격·키워드/도메인 등 **집계 전용** 시각화 |
|
|
39
56
|
| **배포** | BrewPage(기본) / TempFile / Cloudflare 등 **TTL 기반** 임시 호스팅 연동 |
|
|
57
|
+
| **npx** | 짧은 별칭 **[`kcachat`](https://www.npmjs.com/package/kcachat)** 또는 본체 **`kakaotalk-chat-analyzer`** |
|
|
40
58
|
| **프라이버시** | 원문 미포함, 참여자 **부분 마스킹 표시명**(기본), URL은 **도메인**만 집계 |
|
|
41
59
|
|
|
42
60
|
---
|
|
43
61
|
|
|
62
|
+
## 카카오톡에서 CSV 보내기
|
|
63
|
+
|
|
64
|
+
1. 카카오톡에서 분석할 **채팅방**을 엽니다.
|
|
65
|
+
2. 우측 상단 **더보기(≡)** → **대화 보내기** → **CSV 보내기**로 파일을 저장합니다. (파일명은 보통 `KakaoTalk_Chat_…` 형태입니다.)
|
|
66
|
+
3. 아래 [빠른 시작](#빠른-시작)의 `npx` 명령에 **저장한 파일 경로**를 넣어 실행합니다.
|
|
67
|
+
|
|
68
|
+
> iOS/Android 앱 버전에 따라 메뉴 문구가 조금 다를 수 있습니다. **메시지 원문이 포함된 CSV**이므로, 공유·업로드 전에 항상 내용을 확인하세요.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
44
72
|
## 빠른 시작
|
|
45
73
|
|
|
46
74
|
### 요구 사항
|
|
@@ -49,24 +77,30 @@
|
|
|
49
77
|
|
|
50
78
|
### npx 한 줄 (추천)
|
|
51
79
|
|
|
52
|
-
|
|
80
|
+
**짧은 패키지명 [`kcachat`](https://www.npmjs.com/package/kcachat)** 으로 본체(`kakaotalk-chat-analyzer`)와 똑같이 실행할 수 있습니다.
|
|
53
81
|
|
|
54
|
-
**로컬에만**
|
|
82
|
+
**로컬에만** (`--local`: HTML만 만들고 기본 BrewPage 업로드는 생략. 출력 기본 `.tmp/kca-report`, `-o ./report`로 변경):
|
|
55
83
|
|
|
56
84
|
```bash
|
|
57
|
-
npx
|
|
85
|
+
npx kcachat@latest "./KakaoTalk_Chat_....csv" --local
|
|
58
86
|
```
|
|
59
87
|
|
|
60
|
-
**리포트 생성
|
|
88
|
+
**리포트 생성 후 기본 호스트(BrewPage)로 업로드**:
|
|
61
89
|
|
|
62
90
|
```bash
|
|
63
|
-
npx
|
|
91
|
+
npx kcachat@latest "./KakaoTalk_Chat_....csv"
|
|
64
92
|
```
|
|
65
93
|
|
|
66
|
-
|
|
94
|
+
전체 이름으로 실행해도 동일합니다:
|
|
67
95
|
|
|
68
96
|
```bash
|
|
69
|
-
npx
|
|
97
|
+
npx kakaotalk-chat-analyzer@latest "./KakaoTalk_Chat_....csv" --local
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
GitHub 소스에서 직접:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npx github:claudianus/kakaotalk-chat-analyzer "./KakaoTalk_Chat_....csv" --local
|
|
70
104
|
```
|
|
71
105
|
|
|
72
106
|
### 로컬 클론 개발
|
|
@@ -106,6 +140,14 @@ kca --help
|
|
|
106
140
|
|
|
107
141
|
---
|
|
108
142
|
|
|
143
|
+
## 생성되는 리포트
|
|
144
|
+
|
|
145
|
+
- **단일 `index.html`**: 오프라인으로 열어도 되는 **자급자족** 파일입니다(집계용 JSON은 `<script type="application/json">` 등으로 같은 파일 안에 포함).
|
|
146
|
+
- **원문 미저장**: 메시지 본문은 통계에만 쓰이고, 결과 HTML에는 넣지 않습니다.
|
|
147
|
+
- **하단 안내(선택적 홍보)**: 리포트 맨 아래에, 같은 도구로 **다른 대화**도 만들어 볼 수 있도록 `npx` 예시와 문서 링크가 **짧게** 들어갈 수 있습니다. 통계 본문과 겹치지 않도록 별도 박스로 구분되어 있습니다.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
109
151
|
## 프라이버시 기본값
|
|
110
152
|
|
|
111
153
|
- 기본(`public-masked`)은 참여자 이름을 **앞·뒤 글자만 남기고 가운데 마스킹**합니다(동명이의 충돌 시 `·2`처럼 구분자가 붙을 수 있음). 완전 별칭(`User 001`)은 `--privacy public-anonymous` 로 선택할 수 있습니다.
|
|
@@ -144,17 +186,16 @@ npm test
|
|
|
144
186
|
|
|
145
187
|
## 문서 사이트 (GitHub Pages)
|
|
146
188
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
- **URL:** [https://claudianus.github.io/kakaotalk-chat-analyzer/](https://claudianus.github.io/kakaotalk-chat-analyzer/)
|
|
189
|
+
랜딩 페이지(`docs/index.html`)는 **저장소의 `docs/` 폴더**를 그대로 올리며, **GitHub Actions**가 `main`에 푸시될 때마다 배포합니다.
|
|
150
190
|
|
|
151
|
-
|
|
191
|
+
- **공개 URL:** [https://claudianus.github.io/kakaotalk-chat-analyzer/](https://claudianus.github.io/kakaotalk-chat-analyzer/)
|
|
192
|
+
- **워크플로:** [`.github/workflows/pages.yml`](.github/workflows/pages.yml)
|
|
152
193
|
|
|
153
|
-
저장소를
|
|
194
|
+
### 저장소를 새로 쓸 때 (Pages 켜기)
|
|
154
195
|
|
|
155
|
-
1. **Settings → Pages**
|
|
156
|
-
2. **Build and deployment → Source:**
|
|
157
|
-
3. `main
|
|
196
|
+
1. GitHub **Settings → Pages**
|
|
197
|
+
2. **Build and deployment → Source:** **GitHub Actions** 선택
|
|
198
|
+
3. `main`에 푸시하면 **Deploy GitHub Pages** 워크플로가 `docs/`를 게시합니다. (최초 1회는 Actions 탭에서 권한/환경 승인이 필요할 수 있습니다.)
|
|
158
199
|
|
|
159
200
|
---
|
|
160
201
|
|
package/dist/src/cli.js
CHANGED
|
@@ -18,7 +18,10 @@ program.addHelpText("after", `
|
|
|
18
18
|
kca <보내기.csv> HTML 리포트 생성 후 BrewPage에 업로드
|
|
19
19
|
kca <보내기.csv> --local 업로드 없이 로컬에만 저장 (-o 로 폴더 지정)
|
|
20
20
|
kca <보내기.csv> --dry-run 업로드 생략(미리 생성만)
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
npx 예시:
|
|
23
|
+
npx kakaotalk-chat-analyzer@latest <보내기.csv> --local
|
|
24
|
+
npx kakaotalk-chat-analyzer@latest <보내기.csv>
|
|
22
25
|
`);
|
|
23
26
|
const main = program.command("default", { isDefault: true, hidden: true });
|
|
24
27
|
main
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAC9C,MAAM,WAAW,GAAG,iBAAiB,CAAC;AACtC,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/F,OAAO,CAAC,WAAW,CACjB,OAAO,EACP
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/report.js
CHANGED
|
@@ -49,20 +49,101 @@ export function renderReportHtml(data) {
|
|
|
49
49
|
.bar-row { display: grid; grid-template-columns: minmax(72px, 1fr) minmax(0, 2.2fr) 52px; gap: 10px; align-items: center; min-height: 22px; }
|
|
50
50
|
.bar-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
|
|
51
51
|
.bar-track { height: 9px; background: #e5dfd4; border-radius: 999px; overflow: hidden; }
|
|
52
|
-
.bar-fill {
|
|
52
|
+
.bar-fill {
|
|
53
|
+
display: block;
|
|
54
|
+
height: 100%;
|
|
55
|
+
min-width: 2px;
|
|
56
|
+
background: linear-gradient(90deg, var(--accent), #1a9d87);
|
|
57
|
+
border-radius: inherit;
|
|
58
|
+
}
|
|
53
59
|
.bar-value { text-align: right; color: var(--muted); font-variant-numeric: tabular-nums; font-size: 12px; }
|
|
54
|
-
.
|
|
55
|
-
.
|
|
56
|
-
.
|
|
57
|
-
.
|
|
60
|
+
.chart-hint { margin: 0 0 10px; font-size: 12px; color: var(--muted); line-height: 1.45; }
|
|
61
|
+
.chart-hint strong { color: var(--ink); font-weight: 700; }
|
|
62
|
+
.calendar-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: 4px; margin: 0 -2px; }
|
|
63
|
+
.calendar {
|
|
64
|
+
display: grid;
|
|
65
|
+
gap: 4px;
|
|
66
|
+
width: max-content;
|
|
67
|
+
max-width: 100%;
|
|
68
|
+
box-sizing: border-box;
|
|
69
|
+
}
|
|
70
|
+
.day {
|
|
71
|
+
border-radius: 6px;
|
|
72
|
+
display: flex;
|
|
73
|
+
flex-direction: column;
|
|
74
|
+
align-items: center;
|
|
75
|
+
justify-content: center;
|
|
76
|
+
gap: 2px;
|
|
77
|
+
min-width: 42px;
|
|
78
|
+
min-height: 46px;
|
|
79
|
+
padding: 4px 3px;
|
|
80
|
+
font-weight: 650;
|
|
81
|
+
border: 1px solid rgba(15, 107, 92, 0.12);
|
|
82
|
+
}
|
|
83
|
+
.day-k { font-size: 10px; line-height: 1.15; font-weight: 750; letter-spacing: -0.02em; }
|
|
84
|
+
.day-n { font-size: 12px; line-height: 1; font-weight: 800; font-variant-numeric: tabular-nums; }
|
|
85
|
+
.hours-wrap { display: flex; flex-direction: column; gap: 0; }
|
|
86
|
+
.hours-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: 2px; margin: 0 -2px; }
|
|
87
|
+
.hours-chart-inner { min-width: 520px; display: flex; flex-direction: column; gap: 5px; }
|
|
88
|
+
.hours-bars { display: grid; grid-template-columns: repeat(24, 1fr); gap: 3px; align-items: end; height: 140px; }
|
|
89
|
+
.hour {
|
|
90
|
+
min-width: 0;
|
|
91
|
+
width: 100%;
|
|
92
|
+
align-self: end;
|
|
93
|
+
background: linear-gradient(180deg, var(--accent2), #e07a45);
|
|
94
|
+
border-radius: 3px 3px 0 0;
|
|
95
|
+
}
|
|
96
|
+
.hours-labels {
|
|
97
|
+
display: grid;
|
|
98
|
+
grid-template-columns: repeat(24, 1fr);
|
|
99
|
+
gap: 2px;
|
|
100
|
+
font-size: 9px;
|
|
101
|
+
line-height: 1.15;
|
|
102
|
+
color: var(--muted);
|
|
103
|
+
text-align: center;
|
|
104
|
+
font-variant-numeric: tabular-nums;
|
|
105
|
+
}
|
|
106
|
+
.hours-labels span { min-width: 0; }
|
|
58
107
|
.table { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
59
108
|
.table th, .table td { text-align: left; border-bottom: 1px solid var(--line); padding: 9px 6px; }
|
|
60
109
|
.table th { color: var(--muted); font-weight: 650; font-size: 11px; text-transform: none; }
|
|
61
110
|
.table td.num { text-align: right; font-variant-numeric: tabular-nums; }
|
|
111
|
+
.self-serve {
|
|
112
|
+
margin-top: 14px;
|
|
113
|
+
border: 1px dashed rgba(15, 107, 92, 0.38);
|
|
114
|
+
border-radius: 12px;
|
|
115
|
+
padding: 16px 18px;
|
|
116
|
+
background: linear-gradient(135deg, rgba(15, 107, 92, 0.06), rgba(196, 92, 42, 0.04));
|
|
117
|
+
font-size: 13px;
|
|
118
|
+
line-height: 1.6;
|
|
119
|
+
color: var(--muted);
|
|
120
|
+
}
|
|
121
|
+
.self-serve h2 { margin: 0 0 10px; font-size: 16px; font-weight: 750; color: var(--ink); letter-spacing: -0.02em; }
|
|
122
|
+
.self-serve p { margin: 0 0 8px; }
|
|
123
|
+
.self-serve ol { margin: 0 0 10px; padding-left: 1.25rem; }
|
|
124
|
+
.self-serve li { margin: 4px 0; }
|
|
125
|
+
.self-serve code { font-size: 11.5px; background: rgba(0, 0, 0, 0.06); padding: 1px 5px; border-radius: 4px; color: var(--ink); }
|
|
126
|
+
.self-serve .cmd {
|
|
127
|
+
margin: 10px 0 12px;
|
|
128
|
+
padding: 11px 13px;
|
|
129
|
+
border-radius: 8px;
|
|
130
|
+
background: #f0ebe3;
|
|
131
|
+
border: 1px solid var(--line);
|
|
132
|
+
font-family: ui-monospace, "Cascadia Code", "Consolas", monospace;
|
|
133
|
+
font-size: 12px;
|
|
134
|
+
line-height: 1.45;
|
|
135
|
+
color: #1a2420;
|
|
136
|
+
overflow-x: auto;
|
|
137
|
+
white-space: pre-wrap;
|
|
138
|
+
overflow-wrap: anywhere;
|
|
139
|
+
word-break: break-word;
|
|
140
|
+
}
|
|
141
|
+
.self-serve .links { margin: 10px 0 0; font-size: 12px; }
|
|
142
|
+
.self-serve .links a { font-weight: 650; }
|
|
62
143
|
footer { margin-top: 28px; color: var(--muted); font-size: 11px; line-height: 1.5; }
|
|
63
144
|
@media (max-width: 900px) {
|
|
64
145
|
.hero, .two, .three, .metrics, .metrics6 { grid-template-columns: 1fr; }
|
|
65
|
-
.hours {
|
|
146
|
+
.hours-chart-inner { min-width: 480px; }
|
|
66
147
|
}
|
|
67
148
|
</style>
|
|
68
149
|
</head>
|
|
@@ -125,6 +206,8 @@ export function renderReportHtml(data) {
|
|
|
125
206
|
${panel("키워드 스냅샷", renderCountBars(data.keywords))}
|
|
126
207
|
</section>
|
|
127
208
|
|
|
209
|
+
${renderSelfServeCallout()}
|
|
210
|
+
|
|
128
211
|
<script type="application/json" id="report-data">${escapeJsonForHtml(data)}</script>
|
|
129
212
|
<footer>${escapeHtml(data.source.fileName)} · 경고 ${data.source.warnings}건 · 본 리포트는 통계 목적이며 법적·회계적 증빙으로 사용할 수 없습니다.</footer>
|
|
130
213
|
</main>
|
|
@@ -149,16 +232,50 @@ function metric(label, value, sub) {
|
|
|
149
232
|
function panel(title, content) {
|
|
150
233
|
return `<div class="card"><h2>${escapeHtml(title)}</h2>${content}</div>`;
|
|
151
234
|
}
|
|
235
|
+
function renderSelfServeCallout() {
|
|
236
|
+
const gh = "https://github.com/claudianus/kakaotalk-chat-analyzer";
|
|
237
|
+
const site = "https://claudianus.github.io/kakaotalk-chat-analyzer/";
|
|
238
|
+
const npmShort = "https://www.npmjs.com/package/kcachat";
|
|
239
|
+
const npmFull = "https://www.npmjs.com/package/kakaotalk-chat-analyzer";
|
|
240
|
+
return `<section class="card self-serve" aria-label="리포트 직접 만들기">
|
|
241
|
+
<h2>비슷한 리포트, 다른 대화에도 만들어보기</h2>
|
|
242
|
+
<p>이 페이지는 <strong>KakaoTalk Chat Analyzer</strong>(CLI 이름 <strong>kca</strong>)로 만든 <strong>집계 전용</strong> 리포트예요. 카카오톡에서 CSV로 보낸 뒤 같은 방식으로 돌려볼 수 있습니다.</p>
|
|
243
|
+
<ol>
|
|
244
|
+
<li>카카오톡에서 채팅방 → <strong>더보기(≡)</strong> → <strong>대화보내기</strong> → <strong>CSV 보내기</strong>로 파일 저장</li>
|
|
245
|
+
<li><strong>Node.js 22+</strong>가 있는 Mac/Windows/Linux에서 터미널을 열고, 보낸 파일 경로를 넣어 실행해 보세요.</li>
|
|
246
|
+
</ol>
|
|
247
|
+
<div class="cmd">npx kcachat@latest "./KakaoTalk_Chat_보낸파일.csv" --local</div>
|
|
248
|
+
<p><code>--local</code> 은 PC에만 <code>index.html</code> 을 만들고 업로드는 건너뜁니다. BrewPage 등으로 올리고 싶다면 이 플래그만 빼면 됩니다.</p>
|
|
249
|
+
<p>짧은 이름이 부담스럽다면 전체 패키지명으로도 동일해요: <code>npx kakaotalk-chat-analyzer@latest "./파일.csv" --local</code></p>
|
|
250
|
+
<p class="links">
|
|
251
|
+
<a href="${gh}">GitHub 소스</a>
|
|
252
|
+
· <a href="${npmShort}">npm · kcachat</a>
|
|
253
|
+
· <a href="${npmFull}">npm · kakaotalk-chat-analyzer</a>
|
|
254
|
+
· <a href="${site}">소개 페이지</a>
|
|
255
|
+
</p>
|
|
256
|
+
</section>`;
|
|
257
|
+
}
|
|
152
258
|
function renderDaily(days) {
|
|
153
259
|
if (days.length === 0)
|
|
154
260
|
return `<p style="margin:0;color:var(--muted);font-size:13px">날짜가 있는 메시지가 없습니다.</p>`;
|
|
155
261
|
const max = Math.max(...days.map((day) => day.count), 1);
|
|
156
|
-
|
|
262
|
+
const cols = `repeat(${days.length}, minmax(42px, 1fr))`;
|
|
263
|
+
const cells = days
|
|
157
264
|
.map((day) => {
|
|
158
|
-
const
|
|
159
|
-
|
|
265
|
+
const ratio = day.count / max;
|
|
266
|
+
const alpha = Math.min(0.92, Math.max(0.1, 0.1 + ratio * 0.82));
|
|
267
|
+
const bg = `rgba(15, 107, 92, ${alpha.toFixed(2)})`;
|
|
268
|
+
const fg = ratio > 0.42 ? "#f4f8f7" : "#0c2a24";
|
|
269
|
+
const short = formatDayMd(day.date);
|
|
270
|
+
return `<div class="day" title="${escapeHtml(day.date)} · ${day.count}건" style="background-color:${bg};color:${fg}"><span class="day-k">${escapeHtml(short)}</span><span class="day-n">${day.count}</span></div>`;
|
|
160
271
|
})
|
|
161
|
-
.join("")
|
|
272
|
+
.join("");
|
|
273
|
+
return `<div class="calendar-wrap">
|
|
274
|
+
<p class="chart-hint">각 칸: <strong>월/일</strong>(위) · 해당일 <strong>메시지 수</strong>(아래). 온전한 날짜는 칸에 마우스를 올리면 툴팁으로 보입니다.</p>
|
|
275
|
+
<div class="calendar-scroll">
|
|
276
|
+
<div class="calendar" style="grid-template-columns:${cols}">${cells}</div>
|
|
277
|
+
</div>
|
|
278
|
+
</div>`;
|
|
162
279
|
}
|
|
163
280
|
function renderMonthly(months) {
|
|
164
281
|
if (months.length === 0)
|
|
@@ -167,12 +284,29 @@ function renderMonthly(months) {
|
|
|
167
284
|
}
|
|
168
285
|
function renderHours(hours) {
|
|
169
286
|
const max = Math.max(...hours, 1);
|
|
170
|
-
|
|
287
|
+
const bars = hours
|
|
171
288
|
.map((count, hour) => {
|
|
172
289
|
const height = Math.max(2, Math.round((count / max) * 100));
|
|
173
|
-
return `<div class="hour" title="${hour}시 · ${count}건" style="
|
|
290
|
+
return `<div class="hour" title="${hour}시 · ${formatNumber(count)}건" style="height:${height}%"></div>`;
|
|
174
291
|
})
|
|
175
|
-
.join("")
|
|
292
|
+
.join("");
|
|
293
|
+
const labels = Array.from({ length: 24 }, (_, hour) => `<span title="${hour}시">${hour}</span>`).join("");
|
|
294
|
+
return `<div class="hours-wrap">
|
|
295
|
+
<p class="chart-hint">가로 한 칸이 <strong>1시간</strong>입니다. 아래 숫자는 <strong>시각(0~23시)</strong>이며, 막대 높이는 해당 시간대 메시지 수 비율입니다.</p>
|
|
296
|
+
<div class="hours-scroll">
|
|
297
|
+
<div class="hours-chart-inner">
|
|
298
|
+
<div class="hours-bars">${bars}</div>
|
|
299
|
+
<div class="hours-labels">${labels}</div>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
</div>`;
|
|
303
|
+
}
|
|
304
|
+
/** YYYY-MM-DD → M/D (앞자리 0 제거) */
|
|
305
|
+
function formatDayMd(ymd) {
|
|
306
|
+
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(ymd.trim());
|
|
307
|
+
if (!m)
|
|
308
|
+
return ymd;
|
|
309
|
+
return `${Number(m[2])}/${Number(m[3])}`;
|
|
176
310
|
}
|
|
177
311
|
function renderParticipants(participants) {
|
|
178
312
|
if (participants.length === 0) {
|
|
@@ -189,7 +323,7 @@ function renderCountBars(items) {
|
|
|
189
323
|
return `<div class="bars">${items
|
|
190
324
|
.map((item) => {
|
|
191
325
|
const width = Math.max(2, Math.round((item.count / max) * 100));
|
|
192
|
-
return `<div class="bar-row"><span class="bar-label" title="${escapeHtml(item.label)}">${escapeHtml(item.label)}</span><span class="bar-track"><span class="bar-fill" style="
|
|
326
|
+
return `<div class="bar-row"><span class="bar-label" title="${escapeHtml(item.label)}">${escapeHtml(item.label)}</span><span class="bar-track"><span class="bar-fill" style="width:${width}%"></span></span><span class="bar-value">${formatNumber(item.count)}</span></div>`;
|
|
193
327
|
})
|
|
194
328
|
.join("")}</div>`;
|
|
195
329
|
}
|
package/dist/src/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/report.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjC,MAAM,UAAU,gBAAgB,CAAC,IAAgB;IAC/C,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/report.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kakaotalk-chat-analyzer",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "카카오톡 CSV 보내기 → 한글 리포트 → 선택적 임시 공유. npx 한 줄로 실행 가능한 CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://claudianus.github.io/kakaotalk-chat-analyzer/",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/claudianus/kakaotalk-chat-analyzer.git"
|
|
9
|
+
"url": "git+https://github.com/claudianus/kakaotalk-chat-analyzer.git"
|
|
10
10
|
},
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/claudianus/kakaotalk-chat-analyzer/issues"
|
|
13
13
|
},
|
|
14
14
|
"bin": {
|
|
15
|
-
"kca": "
|
|
16
|
-
"kakaotalk-chat-analyzer": "
|
|
15
|
+
"kca": "dist/src/cli.js",
|
|
16
|
+
"kakaotalk-chat-analyzer": "dist/src/cli.js"
|
|
17
17
|
},
|
|
18
18
|
"files": [
|
|
19
19
|
"dist/src",
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"build": "tsc -p tsconfig.json",
|
|
25
25
|
"prepack": "npm run build",
|
|
26
26
|
"test": "npm run build && node --test dist/test/*.test.js",
|
|
27
|
-
"smoke": "node dist/src/cli.js --help"
|
|
27
|
+
"smoke": "node dist/src/cli.js --help",
|
|
28
|
+
"gh:sync-npm-secret": "bash scripts/sync-npm-token-to-gh.sh"
|
|
28
29
|
},
|
|
29
30
|
"engines": {
|
|
30
31
|
"node": ">=22"
|