@siegesailor/terminal-sigma 1.0.0 → 1.1.0

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 +1 @@
1
- {"version":3,"file":"menu-grid.js","sourceRoot":"","sources":["../../source/components/menu-grid.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"menu-grid.js","sourceRoot":"","sources":["../../source/components/menu-grid.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import { Box, Text } from "ink";
3
+ import { colors } from "../theme.js";
4
+ export default function TodayPanel({ title, metrics, width }) {
5
+ // Border and padding take 4 columns, and " 100%" takes 5.
6
+ const barWidth = Math.max(width - 9, 4);
7
+ return (React.createElement(Box, { borderColor: colors.border, borderStyle: "round", flexDirection: "column", flexShrink: 0, paddingX: 1, width: width },
8
+ React.createElement(Text, { bold: true }, title),
9
+ metrics.map((metric, index) => {
10
+ const value = Math.min(Math.max(Math.round(metric.value), 0), 100);
11
+ const filled = Math.round((value / 100) * barWidth);
12
+ return (React.createElement(Box, { key: metric.label, flexDirection: "column", marginTop: index === 0 ? 0 : 1 },
13
+ React.createElement(Box, { gap: 1, justifyContent: "space-between" },
14
+ React.createElement(Box, { flexShrink: 0 },
15
+ React.createElement(Text, { bold: true, color: metric.color }, metric.label)),
16
+ React.createElement(Text, { dimColor: true, wrap: "truncate-end" }, metric.detail)),
17
+ React.createElement(Text, null,
18
+ React.createElement(Text, { color: metric.color }, "█".repeat(filled)),
19
+ React.createElement(Text, { dimColor: true }, "░".repeat(barWidth - filled)),
20
+ React.createElement(Text, null, ` ${String(value).padStart(3)}%`))));
21
+ })));
22
+ }
23
+ //# sourceMappingURL=today-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"today-panel.js","sourceRoot":"","sources":["../../source/components/today-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAerC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAmB;IAC5E,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAExC,OAAO,CACN,oBAAC,GAAG,IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAC1B,WAAW,EAAC,OAAO,EACnB,aAAa,EAAC,QAAQ,EACtB,UAAU,EAAE,CAAC,EACb,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,KAAK;QAEZ,oBAAC,IAAI,IAAC,IAAI,UAAE,KAAK,CAAQ;QACxB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;YAEpD,OAAO,CACN,oBAAC,GAAG,IACH,GAAG,EAAE,MAAM,CAAC,KAAK,EACjB,aAAa,EAAC,QAAQ,EACtB,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE9B,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,cAAc,EAAC,eAAe;oBAC1C,oBAAC,GAAG,IAAC,UAAU,EAAE,CAAC;wBACjB,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAC5B,MAAM,CAAC,KAAK,CACP,CACF;oBACN,oBAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,IAChC,MAAM,CAAC,MAAM,CACR,CACF;gBACN,oBAAC,IAAI;oBACJ,oBAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAQ;oBACtD,oBAAC,IAAI,IAAC,QAAQ,UAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAQ;oBACrD,oBAAC,IAAI,QAAE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAQ,CACzC,CACF,CACN,CAAC;QACH,CAAC,CAAC,CACG,CACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { formatNumber, intensities, workoutActivities, } from "./i18n.js";
2
+ import { dailyGoals, experienceOf, experiencePerLevel, todayOf, } from "./progress.js";
3
+ import { quoteRefreshMinutes } from "./quotes.js";
4
+ import { colors } from "./theme.js";
5
+ export const characterWidth = 30;
6
+ // Header and footer take 5 rows; the character and Today panels 15 each.
7
+ const chromeRows = 5;
8
+ const panelRows = 15;
9
+ // The panel that takes input always shows; the rest appears as space allows.
10
+ export function layoutOf(columns, rows) {
11
+ const menuColumnsOf = (panelWidth) => {
12
+ const inner = panelWidth - 4;
13
+ if (inner >= 90) {
14
+ return 3;
15
+ }
16
+ return inner >= 52 ? 2 : 1;
17
+ };
18
+ if (columns >= 120) {
19
+ const panelWidth = Math.floor((columns - characterWidth) / 2);
20
+ return {
21
+ panelWidth,
22
+ todayWidth: columns - characterWidth - panelWidth,
23
+ menuColumns: menuColumnsOf(panelWidth),
24
+ showCharacter: true,
25
+ showToday: true,
26
+ todayBeside: true,
27
+ stacked: false,
28
+ };
29
+ }
30
+ if (columns >= 76) {
31
+ const panelWidth = columns - characterWidth;
32
+ return {
33
+ panelWidth,
34
+ todayWidth: columns,
35
+ menuColumns: menuColumnsOf(panelWidth),
36
+ showCharacter: true,
37
+ showToday: rows >= chromeRows + panelRows * 2,
38
+ todayBeside: false,
39
+ stacked: false,
40
+ };
41
+ }
42
+ return {
43
+ panelWidth: columns,
44
+ todayWidth: columns,
45
+ menuColumns: menuColumnsOf(columns),
46
+ showCharacter: rows >= chromeRows + panelRows * 2,
47
+ showToday: rows >= chromeRows + panelRows * 3,
48
+ todayBeside: false,
49
+ stacked: true,
50
+ };
51
+ }
52
+ const percentOf = (value, goal) => (value / goal) * 100;
53
+ export function metricsOf(messages, language, progress, now) {
54
+ const today = todayOf(progress, now);
55
+ const experience = experienceOf(progress);
56
+ const level = Math.floor(experience / experiencePerLevel) + 1;
57
+ const levelExperience = experience % experiencePerLevel;
58
+ return [
59
+ {
60
+ label: messages.today.character,
61
+ detail: messages.today.characterDetail(level + 1, experiencePerLevel - levelExperience),
62
+ value: percentOf(levelExperience, experiencePerLevel),
63
+ color: colors.accent,
64
+ },
65
+ {
66
+ label: messages.today.focus,
67
+ detail: messages.today.focusDetail(today.focusSessions, dailyGoals.focusSessions),
68
+ value: percentOf(today.focusSessions, dailyGoals.focusSessions),
69
+ color: colors.focus,
70
+ },
71
+ {
72
+ label: messages.today.diet,
73
+ detail: messages.today.dietDetail(today.meals, dailyGoals.meals, formatNumber(language, today.calories), formatNumber(language, today.protein)),
74
+ value: percentOf(today.meals, dailyGoals.meals),
75
+ color: colors.diet,
76
+ },
77
+ {
78
+ label: messages.today.workout,
79
+ detail: messages.today.workoutDetail(today.workoutMinutes, dailyGoals.workoutMinutes),
80
+ value: percentOf(today.workoutMinutes, dailyGoals.workoutMinutes),
81
+ color: colors.workout,
82
+ },
83
+ ];
84
+ }
85
+ export const menuOrder = [
86
+ "timer",
87
+ "diet",
88
+ "workout",
89
+ "logs",
90
+ "quotes",
91
+ "language",
92
+ ];
93
+ export function menuItemsOf(messages, language, state) {
94
+ return [
95
+ {
96
+ label: messages.menu.timer,
97
+ signal: state.timerSignal,
98
+ description: messages.describe.timer(state.focus, state.rest),
99
+ },
100
+ {
101
+ label: messages.menu.diet,
102
+ signal: messages.signal.meals(state.meals),
103
+ description: messages.describe.diet,
104
+ },
105
+ {
106
+ label: messages.menu.workout,
107
+ signal: messages.signal.minutes(state.workoutMinutes),
108
+ description: messages.describe.workout,
109
+ },
110
+ {
111
+ label: messages.menu.logs,
112
+ signal: messages.signal.entries(state.logs),
113
+ description: messages.describe.logs,
114
+ },
115
+ {
116
+ label: messages.menu.quotes,
117
+ signal: messages.signal.newQuote,
118
+ description: messages.describe.quotes(quoteRefreshMinutes),
119
+ },
120
+ {
121
+ label: messages.menu.language,
122
+ signal: language === "zh-TW" ? "繁中" : "EN",
123
+ description: messages.describe.language,
124
+ },
125
+ ];
126
+ }
127
+ export const dietFieldsOf = (messages) => [
128
+ {
129
+ key: "food",
130
+ label: messages.form.food,
131
+ kind: "text",
132
+ placeholder: messages.form.foodExample,
133
+ },
134
+ {
135
+ key: "calories",
136
+ label: messages.form.calories,
137
+ kind: "number",
138
+ minimum: 0,
139
+ maximum: 5000,
140
+ },
141
+ {
142
+ key: "protein",
143
+ label: messages.form.protein,
144
+ kind: "number",
145
+ minimum: 0,
146
+ maximum: 500,
147
+ },
148
+ ];
149
+ export const workoutFieldsOf = (messages) => [
150
+ {
151
+ key: "activity",
152
+ label: messages.form.activity,
153
+ kind: "select",
154
+ options: workoutActivities.map((option) => ({
155
+ label: messages.workoutActivity[option],
156
+ value: option,
157
+ })),
158
+ },
159
+ {
160
+ key: "minutes",
161
+ label: messages.form.minutes,
162
+ kind: "number",
163
+ minimum: 1,
164
+ maximum: 600,
165
+ },
166
+ {
167
+ key: "intensity",
168
+ label: messages.form.intensity,
169
+ kind: "select",
170
+ options: intensities.map((option) => ({
171
+ label: messages.intensity[option],
172
+ value: option,
173
+ })),
174
+ },
175
+ ];
176
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../source/content.ts"],"names":[],"mappings":"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"}
package/build/i18n.js ADDED
@@ -0,0 +1,254 @@
1
+ export const languages = ["en", "zh-TW"];
2
+ export const workoutActivities = [
3
+ "running",
4
+ "walking",
5
+ "cycling",
6
+ "swimming",
7
+ "strength",
8
+ "yoga",
9
+ "other",
10
+ ];
11
+ export const intensities = ["light", "moderate", "vigorous"];
12
+ const en = {
13
+ languageName: "English",
14
+ languageChanged: "Language set to English.",
15
+ welcome: "Welcome to Terminal Sigma",
16
+ chooseLanguage: "Choose your language · 選擇語言",
17
+ level: (level) => `Lv ${level}`,
18
+ savedTo: (file) => `Progress is saved to ${file}`,
19
+ notSaved: (error) => `Not saved: ${error}`,
20
+ hints: {
21
+ menu: "↑↓←→ move · enter select · q quit",
22
+ select: "↑↓ move · enter select · esc back",
23
+ form: "enter next · esc cancel",
24
+ logs: "←→ filter · ↑↓ scroll · esc back",
25
+ },
26
+ menu: {
27
+ timer: "Tomato Timer",
28
+ diet: "Diet Tracker",
29
+ workout: "Workout Tracker",
30
+ logs: "Logs",
31
+ quotes: "Everyday Quotes",
32
+ language: "Language",
33
+ },
34
+ describe: {
35
+ timer: (focus, rest) => `Enter starts a ${focus}-minute focus, and pauses, resumes, or stops a running one. A finished focus earns ${focus} XP, then a ${rest}-minute break begins.`,
36
+ diet: "Log a meal step by step: food, calories, and protein. Each meal earns 5 XP.",
37
+ workout: "Log a workout step by step: activity, minutes, and intensity. Earns 1 to 2 XP per minute, by intensity.",
38
+ logs: "Browse every focus, meal, and workout you have logged.",
39
+ quotes: (minutes) => `Draw a new quote. Quotes also refresh every ${minutes} minutes.`,
40
+ language: "Switch between English and Traditional Chinese.",
41
+ },
42
+ signal: {
43
+ ready: "Ready",
44
+ paused: "Paused",
45
+ meals: (count) => `${count} ${count === 1 ? "meal" : "meals"}`,
46
+ minutes: (count) => `${count} min`,
47
+ entries: (count) => `${count} ${count === 1 ? "log" : "logs"}`,
48
+ newQuote: "New",
49
+ },
50
+ today: {
51
+ title: "Today",
52
+ character: "Character",
53
+ characterDetail: (next, missing) => `${missing} XP to Lv ${next}`,
54
+ focus: "Focus",
55
+ focusDetail: (count, goal) => `${count} of ${goal} sessions`,
56
+ diet: "Diet",
57
+ dietDetail: (count, goal, calories, protein) => `${count} of ${goal} meals · ${calories} kcal · ${protein} g protein`,
58
+ workout: "Workout",
59
+ workoutDetail: (minutes, goal) => `${minutes} of ${goal} minutes`,
60
+ },
61
+ activity: {
62
+ idle: "Standing by",
63
+ focus: "Focusing…",
64
+ break: "On a break…",
65
+ eat: "Eating…",
66
+ run: "Running…",
67
+ lift: "Lifting…",
68
+ stretch: "Stretching…",
69
+ levelUp: "Level up!",
70
+ },
71
+ timer: {
72
+ focus: "Focus",
73
+ break: "Break",
74
+ left: (phase, clock) => `${phase} · ${clock} left`,
75
+ pausedAt: (phase, clock) => `${phase} paused at ${clock}`,
76
+ pause: "Pause",
77
+ resume: "Resume",
78
+ stop: "Stop this tomato",
79
+ back: "Back",
80
+ started: "Focus started.",
81
+ paused: "Timer paused.",
82
+ resumed: "Timer resumed.",
83
+ stopped: "Tomato stopped. An unfinished focus earns no XP.",
84
+ focusComplete: (xp, rest) => `Focus complete, +${xp} XP. ${rest}-minute break started.`,
85
+ breakOver: "Break over. Select Tomato Timer to focus again.",
86
+ },
87
+ form: {
88
+ dietTitle: "Log a meal",
89
+ workoutTitle: "Log a workout",
90
+ food: "Food",
91
+ foodExample: "e.g. Chicken salad",
92
+ calories: "Calories (kcal)",
93
+ protein: "Protein (g)",
94
+ activity: "Activity",
95
+ minutes: "Minutes",
96
+ intensity: "Intensity",
97
+ required: "Required.",
98
+ wholeNumber: (minimum, maximum) => `Enter a whole number from ${minimum} to ${maximum}.`,
99
+ cancelled: "Nothing logged.",
100
+ mealLogged: (food, xp) => `Logged ${food}, +${xp} XP.`,
101
+ workoutLogged: (activity, minutes, xp) => `Logged ${activity} for ${minutes} minutes, +${xp} XP.`,
102
+ levelUp: (level) => ` Level up! Lv ${level}.`,
103
+ },
104
+ workoutActivity: {
105
+ running: "Running",
106
+ walking: "Walking",
107
+ cycling: "Cycling",
108
+ swimming: "Swimming",
109
+ strength: "Strength",
110
+ yoga: "Yoga",
111
+ other: "Other",
112
+ },
113
+ intensity: {
114
+ light: "Light",
115
+ moderate: "Moderate",
116
+ vigorous: "Vigorous",
117
+ },
118
+ logs: {
119
+ title: "Logs",
120
+ all: "All",
121
+ focus: "Focus",
122
+ diet: "Diet",
123
+ workout: "Workout",
124
+ empty: "Nothing logged yet.",
125
+ summary: (count, xp) => `${count} logs · ${xp} XP`,
126
+ focusEntry: (minutes) => `${minutes}-minute focus`,
127
+ mealEntry: (food, calories, protein) => `${food} · ${calories} kcal · ${protein} g protein`,
128
+ workoutEntry: (activity, minutes, intensity) => `${activity} · ${minutes} min · ${intensity}`,
129
+ },
130
+ quoteDrawn: "New quote drawn.",
131
+ };
132
+ const traditionalChinese = {
133
+ languageName: "繁體中文",
134
+ languageChanged: "語言已設為繁體中文。",
135
+ welcome: "歡迎使用 Terminal Sigma",
136
+ chooseLanguage: "Choose your language · 選擇語言",
137
+ level: (level) => `Lv ${level}`,
138
+ savedTo: (file) => `進度儲存於 ${file}`,
139
+ notSaved: (error) => `未儲存:${error}`,
140
+ hints: {
141
+ menu: "↑↓←→ 移動 · enter 選擇 · q 離開",
142
+ select: "↑↓ 移動 · enter 選擇 · esc 返回",
143
+ form: "enter 下一步 · esc 取消",
144
+ logs: "←→ 篩選 · ↑↓ 捲動 · esc 返回",
145
+ },
146
+ menu: {
147
+ timer: "番茄鐘",
148
+ diet: "飲食紀錄",
149
+ workout: "運動紀錄",
150
+ logs: "所有紀錄",
151
+ quotes: "每日語錄",
152
+ language: "語言",
153
+ },
154
+ describe: {
155
+ timer: (focus, rest) => `按 Enter 開始 ${focus} 分鐘專注;計時中再按 Enter 可暫停、繼續或停止。完成專注獲得 ${focus} XP,接著休息 ${rest} 分鐘。`,
156
+ diet: "逐步記錄一餐:食物、熱量與蛋白質。每餐獲得 5 XP。",
157
+ workout: "逐步記錄運動:項目、分鐘數與強度。依強度每分鐘獲得 1 至 2 XP。",
158
+ logs: "瀏覽所有專注、飲食與運動紀錄。",
159
+ quotes: (minutes) => `換一則語錄。語錄也會每 ${minutes} 分鐘自動更新。`,
160
+ language: "切換英文與繁體中文。",
161
+ },
162
+ signal: {
163
+ ready: "就緒",
164
+ paused: "已暫停",
165
+ meals: (count) => `${count} 餐`,
166
+ minutes: (count) => `${count} 分鐘`,
167
+ entries: (count) => `${count} 筆`,
168
+ newQuote: "換一則",
169
+ },
170
+ today: {
171
+ title: "今日",
172
+ character: "角色",
173
+ characterDetail: (next, missing) => `距 Lv ${next} 還差 ${missing} XP`,
174
+ focus: "專注",
175
+ focusDetail: (count, goal) => `${count} / ${goal} 次`,
176
+ diet: "飲食",
177
+ dietDetail: (count, goal, calories, protein) => `${count} / ${goal} 餐 · ${calories} 大卡 · 蛋白質 ${protein} 克`,
178
+ workout: "運動",
179
+ workoutDetail: (minutes, goal) => `${minutes} / ${goal} 分鐘`,
180
+ },
181
+ activity: {
182
+ idle: "待命中",
183
+ focus: "專注中…",
184
+ break: "休息中…",
185
+ eat: "用餐中…",
186
+ run: "跑步中…",
187
+ lift: "重訓中…",
188
+ stretch: "伸展中…",
189
+ levelUp: "升級了!",
190
+ },
191
+ timer: {
192
+ focus: "專注",
193
+ break: "休息",
194
+ left: (phase, clock) => `${phase} · 剩 ${clock}`,
195
+ pausedAt: (phase, clock) => `${phase}已暫停於 ${clock}`,
196
+ pause: "暫停",
197
+ resume: "繼續",
198
+ stop: "結束這顆番茄",
199
+ back: "返回",
200
+ started: "開始專注。",
201
+ paused: "計時已暫停。",
202
+ resumed: "計時繼續。",
203
+ stopped: "已結束這顆番茄。未完成的專注不計 XP。",
204
+ focusComplete: (xp, rest) => `專注完成,+${xp} XP。開始休息 ${rest} 分鐘。`,
205
+ breakOver: "休息結束。選擇番茄鐘開始下一次專注。",
206
+ },
207
+ form: {
208
+ dietTitle: "記錄一餐",
209
+ workoutTitle: "記錄運動",
210
+ food: "食物",
211
+ foodExample: "例如:雞肉沙拉",
212
+ calories: "熱量(大卡)",
213
+ protein: "蛋白質(克)",
214
+ activity: "運動項目",
215
+ minutes: "分鐘數",
216
+ intensity: "強度",
217
+ required: "必填。",
218
+ wholeNumber: (minimum, maximum) => `請輸入 ${minimum} 到 ${maximum} 的整數。`,
219
+ cancelled: "未記錄任何內容。",
220
+ mealLogged: (food, xp) => `已記錄 ${food},+${xp} XP。`,
221
+ workoutLogged: (activity, minutes, xp) => `已記錄${activity} ${minutes} 分鐘,+${xp} XP。`,
222
+ levelUp: (level) => `升級了!Lv ${level}。`,
223
+ },
224
+ workoutActivity: {
225
+ running: "跑步",
226
+ walking: "健走",
227
+ cycling: "騎單車",
228
+ swimming: "游泳",
229
+ strength: "重量訓練",
230
+ yoga: "瑜伽",
231
+ other: "其他",
232
+ },
233
+ intensity: {
234
+ light: "輕度",
235
+ moderate: "中度",
236
+ vigorous: "高強度",
237
+ },
238
+ logs: {
239
+ title: "所有紀錄",
240
+ all: "全部",
241
+ focus: "專注",
242
+ diet: "飲食",
243
+ workout: "運動",
244
+ empty: "尚無紀錄。",
245
+ summary: (count, xp) => `共 ${count} 筆 · ${xp} XP`,
246
+ focusEntry: (minutes) => `專注 ${minutes} 分鐘`,
247
+ mealEntry: (food, calories, protein) => `${food} · ${calories} 大卡 · 蛋白質 ${protein} 克`,
248
+ workoutEntry: (activity, minutes, intensity) => `${activity} · ${minutes} 分鐘 · ${intensity}`,
249
+ },
250
+ quoteDrawn: "已換一則語錄。",
251
+ };
252
+ export const messagesOf = (language) => language === "zh-TW" ? traditionalChinese : en;
253
+ export const formatNumber = (language, value) => value.toLocaleString(language);
254
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../source/i18n.ts"],"names":[],"mappings":"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"}