kakaotalk-chat-analyzer 0.2.18 → 0.2.19

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.
@@ -1,5 +1,5 @@
1
1
  import type { ReportData } from "./types.js";
2
- export declare const STORY_CSS = "\n #s-wrapped, #s-personas, #s-chapters, #s-calendar { scroll-margin-top: 76px; }\n .story-headline {\n margin: 0 0 14px;\n font-size: clamp(17px, 2.5vw, 21px);\n line-height: 1.55;\n font-weight: 650;\n color: var(--ink);\n max-width: 48ch;\n }\n .wrapped-section { margin-bottom: 20px; }\n .wrapped-section h2 { margin: 0 0 6px; font-size: 20px; font-weight: 800; letter-spacing: -0.02em; }\n .wrapped-lede { margin: 0 0 14px; font-size: 13px; color: var(--muted); line-height: 1.5; }\n .wrapped-deck {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));\n padding: 0;\n }\n .wrapped-card {\n border-radius: 18px;\n border: 1px solid var(--line);\n padding: 22px 20px;\n min-height: 200px;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n background: linear-gradient(155deg, rgba(15, 107, 92, 0.14), rgba(196, 92, 42, 0.08));\n box-shadow: var(--shadow);\n position: relative;\n overflow: hidden;\n }\n .wrapped-card::before {\n content: attr(data-emoji);\n position: absolute;\n top: 12px;\n right: 14px;\n font-size: 2.4rem;\n opacity: 0.35;\n line-height: 1;\n }\n .wrapped-card-kicker {\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--muted);\n margin: 0 0 6px;\n }\n .wrapped-card-stat {\n margin: 0;\n font-size: clamp(32px, 6vw, 44px);\n font-weight: 900;\n letter-spacing: -0.04em;\n line-height: 1.05;\n color: var(--ink);\n word-break: break-word;\n }\n .wrapped-card-sub {\n margin: 10px 0 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--muted);\n }\n .persona-grid {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n }\n .persona-chip {\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n }\n .persona-chip strong {\n display: block;\n font-size: 14px;\n color: var(--ink);\n margin-bottom: 4px;\n }\n .persona-chip em {\n display: block;\n font-style: normal;\n font-size: 12px;\n font-weight: 800;\n color: var(--accent);\n margin-bottom: 4px;\n }\n .persona-chip span { font-size: 11px; color: var(--muted); line-height: 1.4; }\n .chapter-list { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }\n .chapter-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n gap: 10px 14px;\n align-items: center;\n padding: 14px 16px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n }\n @media (max-width: 560px) {\n .chapter-item { grid-template-columns: auto 1fr; }\n .chapter-item .chapter-stat { grid-column: 1 / -1; text-align: left; }\n }\n .chapter-badge {\n font-size: 12px;\n font-weight: 900;\n color: var(--accent);\n min-width: 2.5rem;\n }\n .chapter-meta { font-size: 13px; line-height: 1.45; color: var(--ink); }\n .chapter-meta small { display: block; color: var(--muted); font-size: 11px; margin-top: 4px; }\n .chapter-stat { text-align: right; font-size: 13px; font-weight: 750; color: var(--muted); font-variant-numeric: tabular-nums; }\n .cal-wrap { width: 100%; max-width: 100%; padding-bottom: 4px; }\n .cal-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 6px 4px;\n align-items: flex-start;\n width: 100%;\n }\n .cal-week { display: grid; grid-template-rows: repeat(7, minmax(0, 1fr)); gap: 2px; }\n .cal-cell {\n width: clamp(8px, 2.2vw, 12px);\n height: clamp(8px, 2.2vw, 12px);\n border-radius: 3px;\n border: 1px solid transparent;\n display: block;\n }\n .cal-cell[data-level=\"0\"] { background: var(--bar-bg); border-color: var(--line); }\n .cal-cell[data-level=\"1\"] { background: rgba(15, 107, 92, 0.25); }\n .cal-cell[data-level=\"2\"] { background: rgba(15, 107, 92, 0.45); }\n .cal-cell[data-level=\"3\"] { background: rgba(15, 107, 92, 0.65); }\n .cal-cell[data-level=\"4\"] { background: var(--accent); }\n :root[data-theme=\"dark\"] .cal-cell[data-level=\"1\"] { background: rgba(62, 232, 197, 0.2); }\n :root[data-theme=\"dark\"] .cal-cell[data-level=\"2\"] { background: rgba(62, 232, 197, 0.35); }\n :root[data-theme=\"dark\"] .cal-cell[data-level=\"3\"] { background: rgba(62, 232, 197, 0.55); }\n .cal-legend {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 10px;\n font-size: 11px;\n color: var(--muted);\n }\n .cal-legend i { display: inline-flex; gap: 2px; align-items: center; }\n .cal-legend span { width: 10px; height: 10px; border-radius: 2px; display: inline-block; }\n\n";
2
+ export declare const STORY_CSS = "\n #s-wrapped, #s-personas, #s-chapters, #s-calendar { scroll-margin-top: 76px; }\n .story-headline {\n margin: 0 0 14px;\n font-size: clamp(17px, 2.5vw, 21px);\n line-height: 1.55;\n font-weight: 650;\n color: var(--ink);\n max-width: 48ch;\n }\n .wrapped-section { margin-bottom: 20px; }\n .wrapped-section h2 { margin: 0 0 6px; font-size: 20px; font-weight: 800; letter-spacing: -0.02em; }\n .wrapped-lede { margin: 0 0 14px; font-size: 13px; color: var(--muted); line-height: 1.5; }\n .wrapped-deck {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));\n padding: 0;\n }\n .wrapped-card {\n border-radius: 18px;\n border: 1px solid var(--line);\n padding: 22px 20px;\n min-height: 200px;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n background: linear-gradient(155deg, rgba(15, 107, 92, 0.14), rgba(196, 92, 42, 0.08));\n box-shadow: var(--shadow);\n position: relative;\n overflow: hidden;\n }\n .wrapped-card::before {\n content: attr(data-emoji);\n position: absolute;\n top: 12px;\n right: 14px;\n font-size: 2.4rem;\n opacity: 0.35;\n line-height: 1;\n }\n .wrapped-card-kicker {\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--muted);\n margin: 0 0 6px;\n }\n .wrapped-card-stat {\n margin: 0;\n font-size: clamp(32px, 6vw, 44px);\n font-weight: 900;\n letter-spacing: -0.04em;\n line-height: 1.05;\n color: var(--ink);\n word-break: break-word;\n }\n .wrapped-card-sub {\n margin: 10px 0 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--muted);\n }\n .persona-grid {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n }\n .persona-chip {\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n }\n .persona-chip strong {\n display: block;\n font-size: 14px;\n color: var(--ink);\n margin-bottom: 4px;\n }\n .persona-chip em {\n display: block;\n font-style: normal;\n font-size: 12px;\n font-weight: 800;\n color: var(--accent);\n margin-bottom: 4px;\n }\n .persona-chip span { font-size: 11px; color: var(--muted); line-height: 1.4; }\n .chapter-list { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }\n .chapter-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n gap: 10px 14px;\n align-items: center;\n padding: 14px 16px;\n border-radius: 12px;\n border: 1px solid var(--line);\n background: var(--panel);\n }\n @media (max-width: 560px) {\n .chapter-item { grid-template-columns: auto 1fr; }\n .chapter-item .chapter-stat { grid-column: 1 / -1; text-align: left; }\n }\n .chapter-badge {\n font-size: 12px;\n font-weight: 900;\n color: var(--accent);\n min-width: 2.5rem;\n }\n .chapter-meta { font-size: 13px; line-height: 1.45; color: var(--ink); }\n .chapter-meta small { display: block; color: var(--muted); font-size: 11px; margin-top: 4px; }\n .chapter-stat { text-align: right; font-size: 13px; font-weight: 750; color: var(--muted); font-variant-numeric: tabular-nums; }\n\n /* GitHub contribution graph (\uC794\uB514) */\n :root {\n --gh-cell-size: 11px;\n --gh-cell-gap: 3px;\n --gh-cell-0: #ebedf0;\n --gh-cell-1: #9be9a8;\n --gh-cell-2: #40c463;\n --gh-cell-3: #30a14e;\n --gh-cell-4: #216e39;\n }\n @media (prefers-color-scheme: dark) {\n :root:not([data-theme=\"light\"]) {\n --gh-cell-0: #161b22;\n --gh-cell-1: #0e4429;\n --gh-cell-2: #006d32;\n --gh-cell-3: #26a641;\n --gh-cell-4: #39d353;\n }\n }\n :root[data-theme=\"dark\"] {\n --gh-cell-0: #161b22;\n --gh-cell-1: #0e4429;\n --gh-cell-2: #006d32;\n --gh-cell-3: #26a641;\n --gh-cell-4: #39d353;\n }\n :root[data-theme=\"light\"] {\n --gh-cell-0: #ebedf0;\n --gh-cell-1: #9be9a8;\n --gh-cell-2: #40c463;\n --gh-cell-3: #30a14e;\n --gh-cell-4: #216e39;\n }\n .gh-contrib {\n border: 1px solid var(--line);\n border-radius: 12px;\n padding: 16px 18px 14px;\n background: var(--panel);\n }\n .gh-contrib-summary {\n margin: 0 0 12px;\n font-size: 14px;\n line-height: 1.4;\n color: var(--muted);\n }\n .gh-contrib-summary strong {\n font-weight: 600;\n color: var(--ink);\n font-variant-numeric: tabular-nums;\n }\n .gh-contrib-span {\n display: block;\n margin-top: 4px;\n font-size: 11px;\n color: var(--muted);\n }\n .gh-cal-scroll {\n overflow-x: auto;\n overflow-y: hidden;\n max-width: 100%;\n -webkit-overflow-scrolling: touch;\n padding-bottom: 2px;\n }\n .gh-cal-graph {\n display: grid;\n grid-template-areas:\n \". months\"\n \"days weeks\";\n grid-template-columns: max-content max-content;\n column-gap: 8px;\n row-gap: 4px;\n width: max-content;\n min-width: min(100%, max-content);\n }\n .gh-cal-days {\n grid-area: days;\n display: grid;\n grid-template-rows: repeat(7, var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n align-items: center;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 9px;\n line-height: 1;\n color: var(--muted);\n padding-right: 2px;\n }\n .gh-cal-days span {\n height: var(--gh-cell-size);\n display: flex;\n align-items: center;\n }\n .gh-cal-days span:empty { visibility: hidden; }\n .gh-cal-months {\n grid-area: months;\n display: grid;\n grid-template-columns: repeat(var(--gh-weeks), var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n height: 14px;\n align-items: end;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 9px;\n line-height: 1;\n color: var(--muted);\n }\n .gh-cal-month {\n grid-column: span 1;\n white-space: nowrap;\n overflow: visible;\n }\n .gh-cal-weeks {\n grid-area: weeks;\n display: grid;\n grid-template-columns: repeat(var(--gh-weeks), var(--gh-cell-size));\n grid-template-rows: repeat(7, var(--gh-cell-size));\n gap: var(--gh-cell-gap);\n grid-auto-flow: column;\n }\n .gh-cal-cell {\n width: var(--gh-cell-size);\n height: var(--gh-cell-size);\n border-radius: 2px;\n background: var(--gh-cell-0);\n display: block;\n }\n .gh-cal-cell[data-level=\"1\"] { background: var(--gh-cell-1); }\n .gh-cal-cell[data-level=\"2\"] { background: var(--gh-cell-2); }\n .gh-cal-cell[data-level=\"3\"] { background: var(--gh-cell-3); }\n .gh-cal-cell[data-level=\"4\"] { background: var(--gh-cell-4); }\n .gh-cal-legend {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 4px;\n margin-top: 12px;\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif;\n font-size: 11px;\n color: var(--muted);\n }\n .gh-cal-legend-scale {\n display: inline-flex;\n gap: var(--gh-cell-gap);\n align-items: center;\n margin: 0 2px;\n }\n .gh-cal-legend-scale i {\n width: var(--gh-cell-size);\n height: var(--gh-cell-size);\n border-radius: 2px;\n display: block;\n font-style: normal;\n background: var(--gh-cell-0);\n }\n .gh-cal-legend-scale i[data-level=\"1\"] { background: var(--gh-cell-1); }\n .gh-cal-legend-scale i[data-level=\"2\"] { background: var(--gh-cell-2); }\n .gh-cal-legend-scale i[data-level=\"3\"] { background: var(--gh-cell-3); }\n .gh-cal-legend-scale i[data-level=\"4\"] { background: var(--gh-cell-4); }\n\n";
3
3
  export declare function renderStorySections(data: ReportData): string;
4
4
  export declare function storyNavLinks(data: ReportData): string;
5
5
  export declare function renderStoryHeadline(data: ReportData): string;
@@ -114,42 +114,205 @@ export const STORY_CSS = `
114
114
  .chapter-meta { font-size: 13px; line-height: 1.45; color: var(--ink); }
115
115
  .chapter-meta small { display: block; color: var(--muted); font-size: 11px; margin-top: 4px; }
116
116
  .chapter-stat { text-align: right; font-size: 13px; font-weight: 750; color: var(--muted); font-variant-numeric: tabular-nums; }
117
- .cal-wrap { width: 100%; max-width: 100%; padding-bottom: 4px; }
118
- .cal-grid {
117
+
118
+ /* GitHub contribution graph (잔디) */
119
+ :root {
120
+ --gh-cell-size: 11px;
121
+ --gh-cell-gap: 3px;
122
+ --gh-cell-0: #ebedf0;
123
+ --gh-cell-1: #9be9a8;
124
+ --gh-cell-2: #40c463;
125
+ --gh-cell-3: #30a14e;
126
+ --gh-cell-4: #216e39;
127
+ }
128
+ @media (prefers-color-scheme: dark) {
129
+ :root:not([data-theme="light"]) {
130
+ --gh-cell-0: #161b22;
131
+ --gh-cell-1: #0e4429;
132
+ --gh-cell-2: #006d32;
133
+ --gh-cell-3: #26a641;
134
+ --gh-cell-4: #39d353;
135
+ }
136
+ }
137
+ :root[data-theme="dark"] {
138
+ --gh-cell-0: #161b22;
139
+ --gh-cell-1: #0e4429;
140
+ --gh-cell-2: #006d32;
141
+ --gh-cell-3: #26a641;
142
+ --gh-cell-4: #39d353;
143
+ }
144
+ :root[data-theme="light"] {
145
+ --gh-cell-0: #ebedf0;
146
+ --gh-cell-1: #9be9a8;
147
+ --gh-cell-2: #40c463;
148
+ --gh-cell-3: #30a14e;
149
+ --gh-cell-4: #216e39;
150
+ }
151
+ .gh-contrib {
152
+ border: 1px solid var(--line);
153
+ border-radius: 12px;
154
+ padding: 16px 18px 14px;
155
+ background: var(--panel);
156
+ }
157
+ .gh-contrib-summary {
158
+ margin: 0 0 12px;
159
+ font-size: 14px;
160
+ line-height: 1.4;
161
+ color: var(--muted);
162
+ }
163
+ .gh-contrib-summary strong {
164
+ font-weight: 600;
165
+ color: var(--ink);
166
+ font-variant-numeric: tabular-nums;
167
+ }
168
+ .gh-contrib-span {
169
+ display: block;
170
+ margin-top: 4px;
171
+ font-size: 11px;
172
+ color: var(--muted);
173
+ }
174
+ .gh-cal-scroll {
175
+ overflow-x: auto;
176
+ overflow-y: hidden;
177
+ max-width: 100%;
178
+ -webkit-overflow-scrolling: touch;
179
+ padding-bottom: 2px;
180
+ }
181
+ .gh-cal-graph {
182
+ display: grid;
183
+ grid-template-areas:
184
+ ". months"
185
+ "days weeks";
186
+ grid-template-columns: max-content max-content;
187
+ column-gap: 8px;
188
+ row-gap: 4px;
189
+ width: max-content;
190
+ min-width: min(100%, max-content);
191
+ }
192
+ .gh-cal-days {
193
+ grid-area: days;
194
+ display: grid;
195
+ grid-template-rows: repeat(7, var(--gh-cell-size));
196
+ gap: var(--gh-cell-gap);
197
+ align-items: center;
198
+ font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
199
+ font-size: 9px;
200
+ line-height: 1;
201
+ color: var(--muted);
202
+ padding-right: 2px;
203
+ }
204
+ .gh-cal-days span {
205
+ height: var(--gh-cell-size);
119
206
  display: flex;
120
- flex-wrap: wrap;
121
- gap: 6px 4px;
122
- align-items: flex-start;
123
- width: 100%;
124
- }
125
- .cal-week { display: grid; grid-template-rows: repeat(7, minmax(0, 1fr)); gap: 2px; }
126
- .cal-cell {
127
- width: clamp(8px, 2.2vw, 12px);
128
- height: clamp(8px, 2.2vw, 12px);
129
- border-radius: 3px;
130
- border: 1px solid transparent;
207
+ align-items: center;
208
+ }
209
+ .gh-cal-days span:empty { visibility: hidden; }
210
+ .gh-cal-months {
211
+ grid-area: months;
212
+ display: grid;
213
+ grid-template-columns: repeat(var(--gh-weeks), var(--gh-cell-size));
214
+ gap: var(--gh-cell-gap);
215
+ height: 14px;
216
+ align-items: end;
217
+ font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
218
+ font-size: 9px;
219
+ line-height: 1;
220
+ color: var(--muted);
221
+ }
222
+ .gh-cal-month {
223
+ grid-column: span 1;
224
+ white-space: nowrap;
225
+ overflow: visible;
226
+ }
227
+ .gh-cal-weeks {
228
+ grid-area: weeks;
229
+ display: grid;
230
+ grid-template-columns: repeat(var(--gh-weeks), var(--gh-cell-size));
231
+ grid-template-rows: repeat(7, var(--gh-cell-size));
232
+ gap: var(--gh-cell-gap);
233
+ grid-auto-flow: column;
234
+ }
235
+ .gh-cal-cell {
236
+ width: var(--gh-cell-size);
237
+ height: var(--gh-cell-size);
238
+ border-radius: 2px;
239
+ background: var(--gh-cell-0);
131
240
  display: block;
132
241
  }
133
- .cal-cell[data-level="0"] { background: var(--bar-bg); border-color: var(--line); }
134
- .cal-cell[data-level="1"] { background: rgba(15, 107, 92, 0.25); }
135
- .cal-cell[data-level="2"] { background: rgba(15, 107, 92, 0.45); }
136
- .cal-cell[data-level="3"] { background: rgba(15, 107, 92, 0.65); }
137
- .cal-cell[data-level="4"] { background: var(--accent); }
138
- :root[data-theme="dark"] .cal-cell[data-level="1"] { background: rgba(62, 232, 197, 0.2); }
139
- :root[data-theme="dark"] .cal-cell[data-level="2"] { background: rgba(62, 232, 197, 0.35); }
140
- :root[data-theme="dark"] .cal-cell[data-level="3"] { background: rgba(62, 232, 197, 0.55); }
141
- .cal-legend {
242
+ .gh-cal-cell[data-level="1"] { background: var(--gh-cell-1); }
243
+ .gh-cal-cell[data-level="2"] { background: var(--gh-cell-2); }
244
+ .gh-cal-cell[data-level="3"] { background: var(--gh-cell-3); }
245
+ .gh-cal-cell[data-level="4"] { background: var(--gh-cell-4); }
246
+ .gh-cal-legend {
142
247
  display: flex;
143
248
  align-items: center;
144
- gap: 8px;
145
- margin-top: 10px;
249
+ justify-content: flex-end;
250
+ gap: 4px;
251
+ margin-top: 12px;
252
+ font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
146
253
  font-size: 11px;
147
254
  color: var(--muted);
148
255
  }
149
- .cal-legend i { display: inline-flex; gap: 2px; align-items: center; }
150
- .cal-legend span { width: 10px; height: 10px; border-radius: 2px; display: inline-block; }
256
+ .gh-cal-legend-scale {
257
+ display: inline-flex;
258
+ gap: var(--gh-cell-gap);
259
+ align-items: center;
260
+ margin: 0 2px;
261
+ }
262
+ .gh-cal-legend-scale i {
263
+ width: var(--gh-cell-size);
264
+ height: var(--gh-cell-size);
265
+ border-radius: 2px;
266
+ display: block;
267
+ font-style: normal;
268
+ background: var(--gh-cell-0);
269
+ }
270
+ .gh-cal-legend-scale i[data-level="1"] { background: var(--gh-cell-1); }
271
+ .gh-cal-legend-scale i[data-level="2"] { background: var(--gh-cell-2); }
272
+ .gh-cal-legend-scale i[data-level="3"] { background: var(--gh-cell-3); }
273
+ .gh-cal-legend-scale i[data-level="4"] { background: var(--gh-cell-4); }
151
274
 
152
275
  `;
276
+ function renderGitHubCalendar(data) {
277
+ const s = data.story;
278
+ const weekCount = s.calendarWeeks.length;
279
+ if (weekCount === 0)
280
+ return "";
281
+ const monthCells = Array.from({ length: weekCount }, (_, wi) => {
282
+ const hit = s.calendarMonthLabels.find((m) => m.weekIndex === wi);
283
+ return `<span class="gh-cal-month">${hit ? escapeHtml(hit.label) : ""}</span>`;
284
+ }).join("");
285
+ const dayLabels = ["", "Mon", "", "Wed", "", "Fri", ""]
286
+ .map((d) => `<span>${d}</span>`)
287
+ .join("");
288
+ const cells = s.calendarWeeks
289
+ .flatMap((w) => w.cells)
290
+ .map((c) => {
291
+ const title = c.date && c.count > 0 ? `${c.date}: ${formatNumber(c.count)}건` : c.date ? c.date : "";
292
+ return `<span class="gh-cal-cell" data-level="${c.level}"${title ? ` title="${escapeHtml(title)}"` : ""}></span>`;
293
+ })
294
+ .join("");
295
+ const summary = s.calendarTotalMessages > 0
296
+ ? `<p class="gh-contrib-summary"><strong>${formatNumber(s.calendarTotalMessages)}</strong> messages in this period<span class="gh-contrib-span">${escapeHtml(s.calendarSpanLabel)}</span></p>`
297
+ : `<p class="gh-contrib-summary">No activity in this period<span class="gh-contrib-span">${escapeHtml(s.calendarSpanLabel)}</span></p>`;
298
+ return `<div class="gh-contrib">
299
+ ${summary}
300
+ <div class="gh-cal-scroll">
301
+ <div class="gh-cal-graph" style="--gh-weeks:${weekCount}" role="img" aria-label="일별 활동 히트맵, GitHub 잔디 형식">
302
+ <div class="gh-cal-months" aria-hidden="true">${monthCells}</div>
303
+ <div class="gh-cal-days" aria-hidden="true">${dayLabels}</div>
304
+ <div class="gh-cal-weeks">${cells}</div>
305
+ </div>
306
+ </div>
307
+ <footer class="gh-cal-legend" aria-hidden="true">
308
+ <span>Less</span>
309
+ <span class="gh-cal-legend-scale">
310
+ <i data-level="0"></i><i data-level="1"></i><i data-level="2"></i><i data-level="3"></i><i data-level="4"></i>
311
+ </span>
312
+ <span>More</span>
313
+ </footer>
314
+ </div>`;
315
+ }
153
316
  export function renderStorySections(data) {
154
317
  const s = data.story;
155
318
  const parts = [];
@@ -200,32 +363,10 @@ export function renderStorySections(data) {
200
363
  </section>`);
201
364
  }
202
365
  if (s.calendarWeeks.length > 0) {
203
- parts.push(`<section id="s-calendar" class="card anim-enter" style="margin-bottom:14px;--enter-delay:0.05s">
204
- <h2>연간 활동 그리드</h2>
205
- <p class="chart-hint">GitHub 잔디처럼 <strong>날짜별 메시지 밀도</strong>예요. ${escapeHtml(s.calendarSpanLabel)}</p>
206
- <div class="cal-wrap">
207
- <div class="cal-grid" role="img" aria-label="일별 활동 히트맵">
208
- ${s.calendarWeeks
209
- .map((w) => `<div class="cal-week">
210
- ${w.cells
211
- .map((c) => {
212
- const title = c.date && c.count > 0
213
- ? `${c.date}: ${c.count}건`
214
- : c.date
215
- ? c.date
216
- : "";
217
- return `<span class="cal-cell" data-level="${c.level}"${title ? ` title="${escapeHtml(title)}"` : ""}></span>`;
218
- })
219
- .join("")}
220
- </div>`)
221
- .join("")}
222
- </div>
223
- </div>
224
- <div class="cal-legend" aria-hidden="true">
225
- <span>적음</span>
226
- <i><span style="background:var(--bar-bg);border:1px solid var(--line)"></span><span style="background:rgba(15,107,92,0.35)"></span><span style="background:rgba(15,107,92,0.65)"></span><span style="background:var(--accent)"></span></i>
227
- <span>많음</span>
228
- </div>
366
+ parts.push(`<section id="s-calendar" class="anim-enter" style="margin-bottom:14px;--enter-delay:0.05s">
367
+ <h2 style="margin:0 0 6px;font-size:20px;font-weight:800;letter-spacing:-0.02em">연간 활동 그리드</h2>
368
+ <p class="chart-hint" style="margin-bottom:12px">GitHub 프로필 <strong>Contributions</strong>와 같은 레이아웃·색 단계예요. 셀에 마우스를 올리면 날짜와 건수를 볼 수 있습니다.</p>
369
+ ${renderGitHubCalendar(data)}
229
370
  </section>`);
230
371
  }
231
372
  return parts.join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"report-story.js","sourceRoot":"","sources":["../../src/report-story.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-story.js","sourceRoot":"","sources":["../../src/report-story.ts"],"names":[],"mappings":"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"}
package/dist/src/story.js CHANGED
@@ -1,10 +1,11 @@
1
+ const GH_MONTH_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
1
2
  const CHAPTER_GAP_DAYS = 7;
2
3
  export function buildReportStory(input) {
3
4
  const tone = buildTone(input.totalMessages, input.laughMessages, input.shortMessages, input.emojiMessages);
4
5
  const wrapped = buildWrappedCards(input, tone);
5
6
  const personas = buildPersonas(input.participants, input.laughBySender, input.shortBySender);
6
7
  const chapters = buildChapters(input.daily, input.dailySenderCounts, input.senderAliases, input.totalMessages);
7
- const { weeks, spanLabel } = buildCalendarGrid(input.daily);
8
+ const { weeks, spanLabel, totalMessages, monthLabels } = buildCalendarGrid(input.daily);
8
9
  const headline = buildHeadline(input);
9
10
  return {
10
11
  headline,
@@ -13,6 +14,8 @@ export function buildReportStory(input) {
13
14
  chapters,
14
15
  calendarWeeks: weeks,
15
16
  calendarSpanLabel: spanLabel,
17
+ calendarTotalMessages: totalMessages,
18
+ calendarMonthLabels: monthLabels,
16
19
  tone,
17
20
  };
18
21
  }
@@ -249,15 +252,13 @@ function buildChapters(daily, dailySenderCounts, senderAliases, totalMessages) {
249
252
  }
250
253
  function buildCalendarGrid(daily) {
251
254
  if (daily.length === 0) {
252
- return { weeks: [], spanLabel: "" };
255
+ return { weeks: [], spanLabel: "", totalMessages: 0, monthLabels: [] };
253
256
  }
254
257
  const map = new Map(daily.map((d) => [d.date, d.count]));
255
258
  const sorted = [...map.keys()].sort();
256
259
  const first = sorted[0];
257
260
  const last = sorted[sorted.length - 1];
258
- let max = 1;
259
- for (const c of map.values())
260
- max = Math.max(max, c);
261
+ let totalMessages = 0;
261
262
  const start = new Date(`${first}T12:00:00Z`);
262
263
  const end = new Date(`${last}T12:00:00Z`);
263
264
  const padStart = start.getUTCDay();
@@ -265,6 +266,7 @@ function buildCalendarGrid(daily) {
265
266
  cursor.setUTCDate(cursor.getUTCDate() - padStart);
266
267
  const weeks = [];
267
268
  let week = [];
269
+ const levelThresholds = buildContributionLevelThresholds([...map.values()]);
268
270
  while (cursor.getTime() <= end.getTime() + 6 * 86_400_000) {
269
271
  const y = cursor.getUTCFullYear();
270
272
  const m = pad2(cursor.getUTCMonth() + 1);
@@ -272,10 +274,12 @@ function buildCalendarGrid(daily) {
272
274
  const key = `${y}-${m}-${d}`;
273
275
  const inRange = key >= first && key <= last;
274
276
  const count = inRange ? (map.get(key) ?? 0) : 0;
277
+ if (inRange && count > 0)
278
+ totalMessages += count;
275
279
  week.push({
276
280
  date: inRange ? key : null,
277
281
  count,
278
- level: inRange && count > 0 ? levelFromCount(count, max) : 0,
282
+ level: inRange && count > 0 ? levelFromCount(count, levelThresholds) : 0,
279
283
  });
280
284
  if (week.length === 7) {
281
285
  weeks.push({ cells: week });
@@ -293,19 +297,50 @@ function buildCalendarGrid(daily) {
293
297
  return {
294
298
  weeks,
295
299
  spanLabel: `${first} ~ ${last}`,
300
+ totalMessages,
301
+ monthLabels: buildMonthLabels(weeks),
296
302
  };
297
303
  }
298
- function levelFromCount(count, max) {
304
+ /** GitHub 잔디와 같이 활동 분포 사분위로 4단계 + 빈 칸 */
305
+ function buildContributionLevelThresholds(counts) {
306
+ const positive = counts.filter((c) => c > 0).sort((a, b) => a - b);
307
+ if (positive.length === 0)
308
+ return [];
309
+ if (positive.length === 1)
310
+ return [positive[0]];
311
+ const pick = (p) => positive[Math.min(positive.length - 1, Math.max(0, Math.ceil(p * positive.length) - 1))];
312
+ const t1 = pick(0.25);
313
+ const t2 = pick(0.5);
314
+ const t3 = pick(0.75);
315
+ const max = positive[positive.length - 1];
316
+ return [...new Set([t1, t2, t3, max])].sort((a, b) => a - b);
317
+ }
318
+ function levelFromCount(count, thresholds) {
299
319
  if (count <= 0)
300
320
  return 0;
301
- const r = count / max;
302
- if (r >= 0.85)
303
- return 4;
304
- if (r >= 0.55)
305
- return 3;
306
- if (r >= 0.3)
307
- return 2;
308
- return 1;
321
+ if (thresholds.length === 0)
322
+ return 1;
323
+ let level = 0;
324
+ for (const t of thresholds) {
325
+ if (count >= t)
326
+ level += 1;
327
+ }
328
+ return Math.min(4, level);
329
+ }
330
+ function buildMonthLabels(weeks) {
331
+ const labels = [];
332
+ let lastMonth = -1;
333
+ for (let wi = 0; wi < weeks.length; wi++) {
334
+ const firstInWeek = weeks[wi].cells.find((c) => c.date);
335
+ if (!firstInWeek?.date)
336
+ continue;
337
+ const month = Number.parseInt(firstInWeek.date.slice(5, 7), 10) - 1;
338
+ if (month !== lastMonth && month >= 0 && month < 12) {
339
+ labels.push({ weekIndex: wi, label: GH_MONTH_SHORT[month] });
340
+ lastMonth = month;
341
+ }
342
+ }
343
+ return labels;
309
344
  }
310
345
  function dayDiff(a, b) {
311
346
  const ta = new Date(`${a}T12:00:00Z`).getTime();
@@ -1 +1 @@
1
- {"version":3,"file":"story.js","sourceRoot":"","sources":["../../src/story.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"story.js","sourceRoot":"","sources":["../../src/story.ts"],"names":[],"mappings":"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"}
@@ -93,6 +93,11 @@ export interface CalendarCell {
93
93
  export interface CalendarWeek {
94
94
  cells: CalendarCell[];
95
95
  }
96
+ /** 연간 그리드 상단 월 라벨(주 열 인덱스) */
97
+ export interface CalendarMonthLabel {
98
+ weekIndex: number;
99
+ label: string;
100
+ }
96
101
  export interface ConversationTone {
97
102
  laughMessages: number;
98
103
  laughPer100: number;
@@ -107,6 +112,9 @@ export interface ReportStory {
107
112
  chapters: StoryChapter[];
108
113
  calendarWeeks: CalendarWeek[];
109
114
  calendarSpanLabel: string;
115
+ /** 그리드 기간 내 메시지 합(잔디 셀 합) */
116
+ calendarTotalMessages: number;
117
+ calendarMonthLabels: CalendarMonthLabel[];
110
118
  tone: ConversationTone;
111
119
  }
112
120
  /** 고급 집계·행동 패턴 지표(원문 미저장, 통계 전용) */
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.2.18";
2
- export declare const USER_AGENT = "kakaotalk-chat-analyzer/0.2.18";
1
+ export declare const VERSION = "0.2.19";
2
+ export declare const USER_AGENT = "kakaotalk-chat-analyzer/0.2.19";
@@ -1,3 +1,3 @@
1
- export const VERSION = "0.2.18";
1
+ export const VERSION = "0.2.19";
2
2
  export const USER_AGENT = `kakaotalk-chat-analyzer/${VERSION}`;
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kakaotalk-chat-analyzer",
3
- "version": "0.2.18",
3
+ "version": "0.2.19",
4
4
  "description": "카카오톡 CSV 보내기 → 한글 리포트 → 선택적 임시 공유. npx 한 줄로 실행 가능한 CLI.",
5
5
  "type": "module",
6
6
  "homepage": "https://claudianus.github.io/kakaotalk-chat-analyzer/",