@jpahd/kalendus 0.6.0 → 0.8.5

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.
@@ -0,0 +1,8 @@
1
+ {
2
+ "layout": "base.njk",
3
+ "title": "Kalendus",
4
+ "order": 0,
5
+ "tags": "docs",
6
+ "section": "Getting Started",
7
+ "permalink": "/"
8
+ }
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # kalendus
2
2
 
3
- A sophisticated, responsive calendar web component built with Lit 3.x and TypeScript. Multiple view modes, overlapping event handling, per-instance localization, and 80+ CSS design tokens.
3
+ A sophisticated, responsive calendar web component built with Lit 3.x and TypeScript. Multiple view modes, overlapping event handling, per-instance localization, and 151 CSS design tokens.
4
4
 
5
5
  ![demo](assets/demo.gif)
6
6
 
7
7
  ## Installation
8
8
 
9
9
  ```bash
10
- pnpm add @jpahd/kalendus
10
+ npm install @jpahd/kalendus
11
11
  ```
12
12
 
13
13
  ## Quick Usage
@@ -51,12 +51,12 @@ Each instance auto-detects its locale from `<html lang="...">`. Override per-ins
51
51
  - **Responsive Design**: Mobile-first approach with adaptive layouts and container queries
52
52
  - **Color Dot Indicators**: Scalable month view with color-coded event dots
53
53
  - **Accessibility**: Full keyboard navigation, ARIA labels, focus trapping, and screen reader support
54
- - **CSS Custom Properties**: 80+ design tokens for comprehensive theming
54
+ - **CSS Custom Properties**: 151 design tokens for comprehensive theming
55
55
 
56
56
  ### Per-Instance Localization
57
57
 
58
58
  - **Independent Locale Per Instance**: Multiple calendars on the same page can each display a different locale
59
- - **21 Built-in Locales**: English, German, Spanish, French, Hindi, Bengali, Russian, Indonesian, Korean, Turkish, Vietnamese, Italian, Thai, Polish, Ukrainian, Dutch, Japanese, Portuguese, Arabic, Chinese (Simplified), and German (DE)
59
+ - **28 Built-in Locales**: See [Supported Locales](#supported-locales) below for the full list
60
60
  - **Localized UI Strings**: All buttons, labels, and messages translated per instance
61
61
  - **Localized Date Formatting**: Weekday names, month names, and date formats use the instance's locale
62
62
  - **Configurable Week Start**: `firstDayOfWeek` property supports Monday (ISO), Sunday (US/JP), Saturday (AR), or any day
@@ -68,11 +68,12 @@ Each instance auto-detects its locale from `<html lang="...">`. Override per-ins
68
68
  | `heading` | `string` | `undefined` | Calendar title displayed in header |
69
69
  | `activeDate` | `CalendarDate` | Current date | Initially displayed date |
70
70
  | `entries` | `CalendarEntry[]` | `[]` | Array of calendar events |
71
- | `color` | `string` | `'#000000'` | Primary theme color |
71
+ | `color` | `string` | `'#000000'` | Primary theme color (any CSS color format) |
72
72
  | `locale` | `string` | `document.documentElement.lang \|\| 'en'` | Locale for UI strings and date formatting (auto-detected from page, overridable per-instance) |
73
73
  | `firstDayOfWeek` | `0-6` | `1` | First day of the week (0=Sun, 1=Mon, ..., 6=Sat) |
74
74
  | `yearDrillTarget` | `'day' \| 'month'` | `'month'` | Determines whether a year-view click opens day or month view |
75
75
  | `yearDensityMode` | `'dot' \| 'heatmap' \| 'count'` | `'dot'` | Chooses how per-day entry density is visualized in year view |
76
+ | `dir` | `'ltr' \| 'rtl' \| 'auto'` | `'auto'` | Text direction; auto-detected from locale (RTL for `ar`, `he`, etc.) |
76
77
 
77
78
  ### Event Structure
78
79
 
@@ -80,7 +81,7 @@ Each instance auto-detects its locale from `<html lang="...">`. Override per-ins
80
81
  interface CalendarEntry {
81
82
  heading: string;
82
83
  content: string;
83
- color: string;
84
+ color: string; // any CSS color: hex, named, rgb(), hsl(), oklch(), …
84
85
  isContinuation: boolean;
85
86
  date: {
86
87
  start: { day: number; month: number; year: number };
@@ -108,72 +109,96 @@ interface CalendarEntry {
108
109
 
109
110
  ### Supported Locales
110
111
 
111
- | Code | Language | Default Week Start |
112
- | --------- | -------------------- | ------------------ |
113
- | `en` | English | Sunday |
114
- | `de` | German | Monday |
115
- | `de-DE` | German (Germany) | Monday |
116
- | `es` | Spanish | Monday |
117
- | `fr` | French | Monday |
118
- | `hi` | Hindi | Sunday |
119
- | `bn` | Bengali | Sunday |
120
- | `ru` | Russian | Monday |
121
- | `id` | Indonesian | Sunday |
122
- | `ko` | Korean | Sunday |
123
- | `tr` | Turkish | Monday |
124
- | `vi` | Vietnamese | Monday |
125
- | `it` | Italian | Monday |
126
- | `th` | Thai | Sunday |
127
- | `pl` | Polish | Monday |
128
- | `uk` | Ukrainian | Monday |
129
- | `nl` | Dutch | Monday |
130
- | `ja` | Japanese | Sunday |
131
- | `pt` | Portuguese | Sunday |
132
- | `ar` | Arabic | Saturday |
133
- | `zh-Hans` | Chinese (Simplified) | Sunday |
112
+ <!-- GENERATED:LOCALE_TABLE:START -->
113
+
114
+ | Code | Language | Default Week Start |
115
+ | --------- | ------------------ | ------------------ |
116
+ | `en` | English | Sunday |
117
+ | `ar` | Arabic | Saturday |
118
+ | `bn` | Bangla | Sunday |
119
+ | `cs` | Czech | Monday |
120
+ | `da` | Danish | Monday |
121
+ | `de` | German | Monday |
122
+ | `de-DE` | German (Germany) | Monday |
123
+ | `el` | Greek | Monday |
124
+ | `es` | Spanish | Monday |
125
+ | `fi` | Finnish | Monday |
126
+ | `fr` | French | Monday |
127
+ | `he` | Hebrew | Sunday |
128
+ | `hi` | Hindi | Sunday |
129
+ | `id` | Indonesian | Sunday |
130
+ | `it` | Italian | Monday |
131
+ | `ja` | Japanese | Sunday |
132
+ | `ko` | Korean | Sunday |
133
+ | `nb` | Norwegian Bokmål | Monday |
134
+ | `nl` | Dutch | Monday |
135
+ | `pl` | Polish | Monday |
136
+ | `pt` | Portuguese | Sunday |
137
+ | `ru` | Russian | Monday |
138
+ | `sv` | Swedish | Monday |
139
+ | `th` | Thai | Sunday |
140
+ | `tr` | Turkish | Monday |
141
+ | `uk` | Ukrainian | Monday |
142
+ | `vi` | Vietnamese | Monday |
143
+ | `zh-Hans` | Simplified Chinese | Sunday |
144
+
145
+ <!-- GENERATED:LOCALE_TABLE:END -->
134
146
 
135
147
  ## Styling & Theming
136
148
 
137
- Override CSS custom properties to match your design system:
149
+ Kalendus ships **unstyled by default** (neutral base, respects OS light/dark mode). Import a built-in theme for an opinionated look:
150
+
151
+ ```js
152
+ import '@jpahd/kalendus/themes/default.css'; // polished light theme
153
+ import '@jpahd/kalendus/themes/ink.css'; // monochrome editorial
154
+ import '@jpahd/kalendus/themes/soft.css'; // pastel, generous radii
155
+ import '@jpahd/kalendus/themes/brutalist.css'; // bold borders, stark contrast
156
+ import '@jpahd/kalendus/themes/midnight.css'; // dark mode
157
+ ```
158
+
159
+ Override individual CSS custom properties to fine-tune any theme:
138
160
 
139
161
  ```css
140
162
  lms-calendar {
141
163
  --primary-color: #1976d2;
142
164
  --background-color: #ffffff;
143
165
  --entry-border-radius: 6px;
144
- --header-height: 4em;
145
166
  }
146
167
  ```
147
168
 
148
- See [docs/theming.md](docs/theming.md) for the full token reference (primary colors, entry styling, layout & spacing, week column controls, year view tokens).
169
+ See [Theming Reference](docs/theming.md) for all 5 built-in themes, color format support, and quick-start examples. For the complete token list, see the [CSS Token Reference](docs/css-tokens.md).
149
170
 
150
171
  ## Documentation Map
151
172
 
152
- | Audience | Document | Highlights |
153
- | ---------------------- | ------------------------------------------------------------ | ----------------------------------------------------- |
154
- | Integrators | [Integration Guide](docs/integration-guide.md) | Framework recipes, theming tokens, analytics hooks |
155
- | Application Developers | [Library Usage](docs/library-usage.md) | API surface, data contracts, DOM events |
156
- | Component Contributors | [Developer Guide](docs/developer-guide.md) | Internal architecture, debugging tips, adding locales |
157
- | Rendering Internals | [Rendering Calculations](docs/rendering-calculations.md) | Grid math, condensed weeks, density modes |
158
- | Design Systems | [Theming Reference](docs/theming.md) | Full CSS custom property reference (80+ tokens) |
159
- | Architecture | [Architecture Overview](docs/architecture.md) | Component tree, technologies, design patterns |
160
- | Design Tokens | [Design Token Refactoring](docs/design-token-refactoring.md) | Token audit and proposed hierarchy |
161
- | Backend/API | [API Server Guide](docs/api-server.md) | REST + SSE backend, database + adapters |
173
+ | Audience | Document | Highlights |
174
+ | ---------------------- | ------------------------------------------------------------ | -------------------------------------------------------- |
175
+ | Integrators | [Integration Guide](docs/integration-guide.md) | Framework recipes, theming tokens, analytics hooks |
176
+ | Application Developers | [Library Usage](docs/library-usage.md) | API surface, data contracts, DOM events |
177
+ | CSS / Design Systems | [CSS Token Reference](docs/css-tokens.md) | Complete reference of all 151 CSS custom properties |
178
+ | CSS / Design Systems | [Theming Reference](docs/theming.md) | Built-in themes, color formats, quick-start examples |
179
+ | Events | [Events Reference](docs/events.md) | All 8 custom events with payloads and code examples |
180
+ | Layout | [Layout & Positioning](docs/layout-and-positioning.md) | Height requirements, responsive behavior, all-day events |
181
+ | Troubleshooting | [Troubleshooting](docs/troubleshooting.md) | Top consumer issues and fixes |
182
+ | Component Contributors | [Developer Guide](docs/developer-guide.md) | Internal architecture, debugging tips, adding locales |
183
+ | Rendering Internals | [Rendering Calculations](docs/rendering-calculations.md) | Grid math, condensed weeks, density modes |
184
+ | Architecture | [Architecture Overview](docs/architecture.md) | Component tree, technologies, design patterns |
185
+ | Design Tokens | [Design Token Refactoring](docs/design-token-refactoring.md) | Historical: token audit and proposed hierarchy |
186
+ | Backend/API | [API Server Guide](docs/api-server.md) | REST + SSE backend, database + adapters |
162
187
 
163
188
  ## Testing
164
189
 
165
190
  ```bash
166
191
  # Run unit tests
167
- pnpm test
192
+ npm test
168
193
 
169
194
  # Run tests in watch mode
170
- pnpm test:watch
195
+ npm run test:watch
171
196
 
172
197
  # Run component tests (Web Test Runner + Playwright)
173
- pnpm test:components
198
+ npm run test:components
174
199
 
175
200
  # Run Storybook interaction tests (Vitest)
176
- pnpm test-storybook
201
+ npm run test-storybook
177
202
  ```
178
203
 
179
204
  ### Test Categories
@@ -187,30 +212,34 @@ pnpm test-storybook
187
212
  Explore all features and variations in Storybook:
188
213
 
189
214
  ```bash
190
- pnpm storybook
215
+ npm run storybook
191
216
  ```
192
217
 
193
218
  ### Available Stories
194
219
 
195
220
  - **Default**: Basic calendar with sample events
221
+ - **Theme stories**: Default, Ink, Soft, Brutalist, Midnight — one story per built-in theme
222
+ - **Custom Theming**: Inline CSS variable overrides
196
223
  - **Locale stories**: Individual stories for each supported locale (German, French, Spanish, Japanese, etc.)
197
- - **LocaleShowcase**: 19 calendars on one page, each with a different locale
224
+ - **LocaleShowcase**: 26 calendars on one page, each with a different locale
198
225
  - **WeekStartComparison**: Side-by-side Monday-first vs Sunday-first
199
226
  - **Heavy Event Load**: Stress testing with 200+ events
200
227
  - **Overlapping Events**: Extreme overlap scenarios
228
+ - **Tall Container**: Verifies layout in oversized containers
229
+ - **RTLShowcase**: Side-by-side Arabic and Hebrew calendars with automatic RTL layout
230
+ - **RTLOverride**: Demonstrates explicit `dir="ltr"` override on an RTL locale
201
231
  - **Mobile View**: Responsive mobile experience
202
- - **Custom Theming**: Theme variations and customization
203
232
 
204
233
  ## Development
205
234
 
206
235
  ```bash
207
- pnpm install
208
- pnpm storybook # Start Storybook dev server
209
- pnpm build # Build with Vite
210
- pnpm test # Run tests
211
- pnpm lint # Run lit-analyzer + oxlint
212
- pnpm format # Format with oxfmt
213
- pnpm demo:gif # Record demo GIF (requires ffmpeg)
236
+ npm install
237
+ npm run storybook # Start Storybook dev server
238
+ npm run build # Build with Vite
239
+ npm test # Run tests
240
+ npm run lint # Run lit-analyzer + oxlint
241
+ npm run format # Format with oxfmt
242
+ npm run demo:gif # Record demo GIF (requires ffmpeg)
214
243
  ```
215
244
 
216
245
  See `docs/developer-guide.md` for internal architecture notes, troubleshooting checklists, and tips on extending condensed week layouts or localization.
@@ -220,10 +249,11 @@ See `docs/developer-guide.md` for internal architecture notes, troubleshooting c
220
249
  The repository includes `@jpahd/kalendus-server`, a Hono + SQLite backend with REST/SSE endpoints.
221
250
 
222
251
  ```bash
223
- # From repo root
224
- pnpm --filter @jpahd/kalendus-server db:migrate
225
- pnpm --filter @jpahd/kalendus-server db:seed
226
- pnpm --filter @jpahd/kalendus-server dev
252
+ # From the server directory
253
+ cd server
254
+ npm run db:migrate
255
+ npm run db:seed
256
+ npm run dev
227
257
  ```
228
258
 
229
259
  Configuration, endpoint overview, and adapter usage live in `docs/api-server.md`.
@@ -17,6 +17,7 @@
17
17
  "type": {
18
18
  "text": "string | undefined"
19
19
  },
20
+ "description": "Optional title displayed in the calendar header.",
20
21
  "attribute": "heading"
21
22
  },
22
23
  {
@@ -26,13 +27,26 @@
26
27
  "text": "FirstDayOfWeek"
27
28
  },
28
29
  "default": "1",
30
+ "description": "First day of the week.\n`0` = Sunday, `1` = Monday (ISO default), …, `6` = Saturday.\nReflected as the `first-day-of-week` HTML attribute.",
29
31
  "attribute": "first-day-of-week"
30
32
  },
31
33
  {
32
34
  "kind": "field",
33
35
  "name": "locale",
36
+ "description": "BCP 47 locale code for UI strings and date formatting.\nAuto-detected from `<html lang=\"…\">` when not set explicitly.\nEach instance can use a different locale.",
34
37
  "attribute": "locale"
35
38
  },
39
+ {
40
+ "kind": "field",
41
+ "name": "dir",
42
+ "type": {
43
+ "text": "'ltr' | 'rtl' | 'auto'"
44
+ },
45
+ "default": "'auto'",
46
+ "description": "Text direction for the calendar UI chrome.\n- `'auto'` — detected from `locale` (Arabic, Hebrew → RTL).\n- `'ltr'` / `'rtl'` — explicit override.\n\nThe calendar grid (day columns, time axis) always stays LTR,\nmatching Google Calendar / Apple Calendar convention.",
47
+ "attribute": "dir",
48
+ "reflects": true
49
+ },
36
50
  {
37
51
  "kind": "field",
38
52
  "name": "yearDrillTarget",
@@ -40,6 +54,7 @@
40
54
  "text": "DrillTarget"
41
55
  },
42
56
  "default": "'month'",
57
+ "description": "Determines which view opens when a day cell is clicked in the year overview.\n- `'month'` — zooms into the month grid (default).\n- `'day'` — jumps straight to the 24-hour day view.",
43
58
  "attribute": "year-drill-target"
44
59
  },
45
60
  {
@@ -49,6 +64,7 @@
49
64
  "text": "DensityMode"
50
65
  },
51
66
  "default": "'dot'",
67
+ "description": "Controls how per-day entry density is visualized in the year overview.\n- `'dot'` — a small dot per day with entries (default).\n- `'heatmap'` — tonal background intensity based on count.\n- `'count'` — explicit numeric count.",
52
68
  "attribute": "year-density-mode"
53
69
  },
54
70
  {
@@ -62,7 +78,8 @@
62
78
  "name": "activeDate",
63
79
  "type": {
64
80
  "text": "CalendarDate"
65
- }
81
+ },
82
+ "description": "The currently displayed date. Assigning a new value navigates\nthe calendar to that date. Defaults to today."
66
83
  },
67
84
  {
68
85
  "kind": "field",
@@ -71,6 +88,7 @@
71
88
  "text": "CalendarEntry[]"
72
89
  },
73
90
  "default": "[]",
91
+ "description": "Array of calendar events to display. Provide a new array reference\nwhen mutating (Lit requires immutable updates to detect changes).\nInvalid entries (end before start) are automatically dropped.",
74
92
  "attribute": "entries"
75
93
  },
76
94
  {
@@ -80,6 +98,7 @@
80
98
  "text": "string"
81
99
  },
82
100
  "default": "'#000000'",
101
+ "description": "Primary accent color used for header buttons, highlights, and gradients.\nAccepts any valid CSS color format: hex, named, `rgb()`, `hsl()`, `oklch()`, etc.",
83
102
  "attribute": "color"
84
103
  },
85
104
  {
@@ -329,9 +348,11 @@
329
348
  "name": "eventDetails",
330
349
  "type": {
331
350
  "text": "{\n heading: string;\n content: string;\n time?: CalendarTimeInterval;\n displayTime: string;\n date?: CalendarDate;\n anchorRect?: DOMRect;\n }"
332
- }
351
+ },
352
+ "description": "The event data to display in the menu."
333
353
  }
334
- ]
354
+ ],
355
+ "description": "Opens the built-in detail menu overlay.\n\nUse this to show the same menu from external UI (e.g., a sidebar list item).\nThe menu will position itself relative to `anchorRect` if provided."
335
356
  },
336
357
  {
337
358
  "kind": "method",
@@ -609,6 +630,7 @@
609
630
  "type": {
610
631
  "text": "string | undefined"
611
632
  },
633
+ "description": "Optional title displayed in the calendar header.",
612
634
  "fieldName": "heading"
613
635
  },
614
636
  {
@@ -617,18 +639,30 @@
617
639
  "text": "FirstDayOfWeek"
618
640
  },
619
641
  "default": "1",
642
+ "description": "First day of the week.\n`0` = Sunday, `1` = Monday (ISO default), …, `6` = Saturday.\nReflected as the `first-day-of-week` HTML attribute.",
620
643
  "fieldName": "firstDayOfWeek"
621
644
  },
622
645
  {
623
646
  "name": "locale",
647
+ "description": "BCP 47 locale code for UI strings and date formatting.\nAuto-detected from `<html lang=\"…\">` when not set explicitly.\nEach instance can use a different locale.",
624
648
  "fieldName": "locale"
625
649
  },
650
+ {
651
+ "name": "dir",
652
+ "type": {
653
+ "text": "'ltr' | 'rtl' | 'auto'"
654
+ },
655
+ "default": "'auto'",
656
+ "description": "Text direction for the calendar UI chrome.\n- `'auto'` — detected from `locale` (Arabic, Hebrew → RTL).\n- `'ltr'` / `'rtl'` — explicit override.\n\nThe calendar grid (day columns, time axis) always stays LTR,\nmatching Google Calendar / Apple Calendar convention.",
657
+ "fieldName": "dir"
658
+ },
626
659
  {
627
660
  "name": "year-drill-target",
628
661
  "type": {
629
662
  "text": "DrillTarget"
630
663
  },
631
664
  "default": "'month'",
665
+ "description": "Determines which view opens when a day cell is clicked in the year overview.\n- `'month'` — zooms into the month grid (default).\n- `'day'` — jumps straight to the 24-hour day view.",
632
666
  "fieldName": "yearDrillTarget"
633
667
  },
634
668
  {
@@ -637,6 +671,7 @@
637
671
  "text": "DensityMode"
638
672
  },
639
673
  "default": "'dot'",
674
+ "description": "Controls how per-day entry density is visualized in the year overview.\n- `'dot'` — a small dot per day with entries (default).\n- `'heatmap'` — tonal background intensity based on count.\n- `'count'` — explicit numeric count.",
640
675
  "fieldName": "yearDensityMode"
641
676
  },
642
677
  {
@@ -645,6 +680,7 @@
645
680
  "text": "CalendarEntry[]"
646
681
  },
647
682
  "default": "[]",
683
+ "description": "Array of calendar events to display. Provide a new array reference\nwhen mutating (Lit requires immutable updates to detect changes).\nInvalid entries (end before start) are automatically dropped.",
648
684
  "fieldName": "entries"
649
685
  },
650
686
  {
@@ -653,6 +689,7 @@
653
689
  "text": "string"
654
690
  },
655
691
  "default": "'#000000'",
692
+ "description": "Primary accent color used for header buttons, highlights, and gradients.\nAccepts any valid CSS color format: hex, named, `rgb()`, `hsl()`, `oklch()`, etc.",
656
693
  "fieldName": "color"
657
694
  }
658
695
  ],
@@ -2462,18 +2499,18 @@
2462
2499
  "kind": "variable",
2463
2500
  "name": "targetLocales",
2464
2501
  "type": {
2465
- "text": "[\n `ar`,\n `bn`,\n `de`,\n `de-DE`,\n `es`,\n `fr`,\n `hi`,\n `id`,\n `it`,\n `ja`,\n `ko`,\n `nl`,\n `pl`,\n `pt`,\n `ru`,\n `th`,\n `tr`,\n `uk`,\n `vi`,\n `zh-Hans`,\n]"
2502
+ "text": "[\n `ar`,\n `bn`,\n `cs`,\n `da`,\n `de`,\n `de-DE`,\n `el`,\n `es`,\n `fi`,\n `fr`,\n `he`,\n `hi`,\n `id`,\n `it`,\n `ja`,\n `ko`,\n `nb`,\n `nl`,\n `pl`,\n `pt`,\n `ru`,\n `sv`,\n `th`,\n `tr`,\n `uk`,\n `vi`,\n `zh-Hans`,\n]"
2466
2503
  },
2467
- "default": "[ `ar`, `bn`, `de`, `de-DE`, `es`, `fr`, `hi`, `id`, `it`, `ja`, `ko`, `nl`, `pl`, `pt`, `ru`, `th`, `tr`, `uk`, `vi`, `zh-Hans`, ]",
2504
+ "default": "[ `ar`, `bn`, `cs`, `da`, `de`, `de-DE`, `el`, `es`, `fi`, `fr`, `he`, `hi`, `id`, `it`, `ja`, `ko`, `nb`, `nl`, `pl`, `pt`, `ru`, `sv`, `th`, `tr`, `uk`, `vi`, `zh-Hans`, ]",
2468
2505
  "description": "The other locale codes that this application is localized into. Sorted\nlexicographically."
2469
2506
  },
2470
2507
  {
2471
2508
  "kind": "variable",
2472
2509
  "name": "allLocales",
2473
2510
  "type": {
2474
- "text": "[\n `ar`,\n `bn`,\n `de`,\n `de-DE`,\n `en`,\n `es`,\n `fr`,\n `hi`,\n `id`,\n `it`,\n `ja`,\n `ko`,\n `nl`,\n `pl`,\n `pt`,\n `ru`,\n `th`,\n `tr`,\n `uk`,\n `vi`,\n `zh-Hans`,\n]"
2511
+ "text": "[\n `ar`,\n `bn`,\n `cs`,\n `da`,\n `de`,\n `de-DE`,\n `el`,\n `en`,\n `es`,\n `fi`,\n `fr`,\n `he`,\n `hi`,\n `id`,\n `it`,\n `ja`,\n `ko`,\n `nb`,\n `nl`,\n `pl`,\n `pt`,\n `ru`,\n `sv`,\n `th`,\n `tr`,\n `uk`,\n `vi`,\n `zh-Hans`,\n]"
2475
2512
  },
2476
- "default": "[ `ar`, `bn`, `de`, `de-DE`, `en`, `es`, `fr`, `hi`, `id`, `it`, `ja`, `ko`, `nl`, `pl`, `pt`, `ru`, `th`, `tr`, `uk`, `vi`, `zh-Hans`, ]",
2513
+ "default": "[ `ar`, `bn`, `cs`, `da`, `de`, `de-DE`, `el`, `en`, `es`, `fi`, `fr`, `he`, `hi`, `id`, `it`, `ja`, `ko`, `nb`, `nl`, `pl`, `pt`, `ru`, `sv`, `th`, `tr`, `uk`, `vi`, `zh-Hans`, ]",
2477
2514
  "description": "All valid project locale codes. Sorted lexicographically."
2478
2515
  }
2479
2516
  ],
@@ -4032,6 +4069,54 @@
4032
4069
  }
4033
4070
  ]
4034
4071
  },
4072
+ {
4073
+ "kind": "javascript-module",
4074
+ "path": "src/generated/locales/cs.ts",
4075
+ "declarations": [
4076
+ {
4077
+ "kind": "variable",
4078
+ "name": "templates",
4079
+ "type": {
4080
+ "text": "object"
4081
+ },
4082
+ "default": "{ s005053d82b712e0a: `Poznámky`, s090f2107b5a69a7f: `týd`, s15ba5784a11e0b88: `Aktuální měsíc`, s22380c7fc798a44f: `Žádný obsah`, s2bc4d1196bce49dc: `Exportovat jako ICS`, s3c44e22d1af5693e: `Rok`, s48e186fb300e5464: `Čas`, s58ab939b42a026a6: `Celý den`, s5e8250fb85d64c23: `Zavřít`, s63d040e37887f17e: `Dnes`, s680f01021b5e339d: `Týden`, s98b32ef4a0856c08: `Bez názvu`, s99f110d27e30b289: `Název`, sa0fd990c985f24bd: `Podrobnosti události`, sac8252732f2edb19: `Datum`, sb47daaf9e1c4a905: `Měsíc`, se0955919920ee87d: `Den`, sfce4bfbe0f911aa7: `Bez času`, sa1b2c3d4e5f60001: `Předchozí`, sa1b2c3d4e5f60002: `Další`, sa1b2c3d4e5f60003: `událostí`, sa1b2c3d4e5f60004: `Událost v kalendáři`, sa1b2c3d4e5f60005: `Stiskněte Enter nebo Mezerník pro otevření podrobností`, sa1b2c3d4e5f60006: `do`, sa1b2c3d4e5f60007: `Přepnout na denní zobrazení pro`, sa1b2c3d4e5f60008: `Zobrazit dřívější dny`, sa1b2c3d4e5f60009: `Zobrazit pozdější dny`, sa1b2c3d4e5f60010: `více`, sa1b2c3d4e5f60011: `Zobrazení kalendáře`, sa1b2c3d4e5f60012: `zobrazení`, }"
4083
+ }
4084
+ ],
4085
+ "exports": [
4086
+ {
4087
+ "kind": "js",
4088
+ "name": "templates",
4089
+ "declaration": {
4090
+ "name": "templates",
4091
+ "module": "src/generated/locales/cs.ts"
4092
+ }
4093
+ }
4094
+ ]
4095
+ },
4096
+ {
4097
+ "kind": "javascript-module",
4098
+ "path": "src/generated/locales/da.ts",
4099
+ "declarations": [
4100
+ {
4101
+ "kind": "variable",
4102
+ "name": "templates",
4103
+ "type": {
4104
+ "text": "object"
4105
+ },
4106
+ "default": "{ s005053d82b712e0a: `Noter`, s090f2107b5a69a7f: `uge`, s15ba5784a11e0b88: `Aktuel måned`, s22380c7fc798a44f: `Intet indhold`, s2bc4d1196bce49dc: `Eksportér som ICS`, s3c44e22d1af5693e: `År`, s48e186fb300e5464: `Tid`, s58ab939b42a026a6: `Hele dagen`, s5e8250fb85d64c23: `Luk`, s63d040e37887f17e: `I dag`, s680f01021b5e339d: `Uge`, s98b32ef4a0856c08: `Ingen titel`, s99f110d27e30b289: `Titel`, sa0fd990c985f24bd: `Begivenhedsdetaljer`, sac8252732f2edb19: `Dato`, sb47daaf9e1c4a905: `Måned`, se0955919920ee87d: `Dag`, sfce4bfbe0f911aa7: `Intet tidspunkt`, sa1b2c3d4e5f60001: `Forrige`, sa1b2c3d4e5f60002: `Næste`, sa1b2c3d4e5f60003: `begivenheder`, sa1b2c3d4e5f60004: `Kalenderbegivenhed`, sa1b2c3d4e5f60005: `Tryk Enter eller Mellemrum for at åbne detaljer`, sa1b2c3d4e5f60006: `til`, sa1b2c3d4e5f60007: `Skift til dagsvisning for`, sa1b2c3d4e5f60008: `Vis tidligere dage`, sa1b2c3d4e5f60009: `Vis senere dage`, sa1b2c3d4e5f60010: `mere`, sa1b2c3d4e5f60011: `Kalendervisning`, sa1b2c3d4e5f60012: `visning`, }"
4107
+ }
4108
+ ],
4109
+ "exports": [
4110
+ {
4111
+ "kind": "js",
4112
+ "name": "templates",
4113
+ "declaration": {
4114
+ "name": "templates",
4115
+ "module": "src/generated/locales/da.ts"
4116
+ }
4117
+ }
4118
+ ]
4119
+ },
4035
4120
  {
4036
4121
  "kind": "javascript-module",
4037
4122
  "path": "src/generated/locales/de-DE.ts",
@@ -4080,6 +4165,30 @@
4080
4165
  }
4081
4166
  ]
4082
4167
  },
4168
+ {
4169
+ "kind": "javascript-module",
4170
+ "path": "src/generated/locales/el.ts",
4171
+ "declarations": [
4172
+ {
4173
+ "kind": "variable",
4174
+ "name": "templates",
4175
+ "type": {
4176
+ "text": "object"
4177
+ },
4178
+ "default": "{ s005053d82b712e0a: `Σημειώσεις`, s090f2107b5a69a7f: `Εβδ`, s15ba5784a11e0b88: `Τρέχων μήνας`, s22380c7fc798a44f: `Χωρίς περιεχόμενο`, s2bc4d1196bce49dc: `Εξαγωγή ως ICS`, s3c44e22d1af5693e: `Έτος`, s48e186fb300e5464: `Ώρα`, s58ab939b42a026a6: `Ολοήμερο`, s5e8250fb85d64c23: `Κλείσιμο`, s63d040e37887f17e: `Σήμερα`, s680f01021b5e339d: `Εβδομάδα`, s98b32ef4a0856c08: `Χωρίς τίτλο`, s99f110d27e30b289: `Τίτλος`, sa0fd990c985f24bd: `Λεπτομέρειες εκδήλωσης`, sac8252732f2edb19: `Ημερομηνία`, sb47daaf9e1c4a905: `Μήνας`, se0955919920ee87d: `Ημέρα`, sfce4bfbe0f911aa7: `Χωρίς ώρα`, sa1b2c3d4e5f60001: `Προηγούμενο`, sa1b2c3d4e5f60002: `Επόμενο`, sa1b2c3d4e5f60003: `εκδηλώσεις`, sa1b2c3d4e5f60004: `Εκδήλωση ημερολογίου`, sa1b2c3d4e5f60005: `Πατήστε Enter ή Space για άνοιγμα λεπτομερειών`, sa1b2c3d4e5f60006: `έως`, sa1b2c3d4e5f60007: `Μετάβαση σε ημερήσια προβολή για`, sa1b2c3d4e5f60008: `Εμφάνιση προηγούμενων ημερών`, sa1b2c3d4e5f60009: `Εμφάνιση επόμενων ημερών`, sa1b2c3d4e5f60010: `περισσότερα`, sa1b2c3d4e5f60011: `Προβολή ημερολογίου`, sa1b2c3d4e5f60012: `προβολή`, }"
4179
+ }
4180
+ ],
4181
+ "exports": [
4182
+ {
4183
+ "kind": "js",
4184
+ "name": "templates",
4185
+ "declaration": {
4186
+ "name": "templates",
4187
+ "module": "src/generated/locales/el.ts"
4188
+ }
4189
+ }
4190
+ ]
4191
+ },
4083
4192
  {
4084
4193
  "kind": "javascript-module",
4085
4194
  "path": "src/generated/locales/es.ts",
@@ -4104,6 +4213,30 @@
4104
4213
  }
4105
4214
  ]
4106
4215
  },
4216
+ {
4217
+ "kind": "javascript-module",
4218
+ "path": "src/generated/locales/fi.ts",
4219
+ "declarations": [
4220
+ {
4221
+ "kind": "variable",
4222
+ "name": "templates",
4223
+ "type": {
4224
+ "text": "object"
4225
+ },
4226
+ "default": "{ s005053d82b712e0a: `Muistiinpanot`, s090f2107b5a69a7f: `vk`, s15ba5784a11e0b88: `Nykyinen kuukausi`, s22380c7fc798a44f: `Ei sisältöä`, s2bc4d1196bce49dc: `Vie ICS-tiedostona`, s3c44e22d1af5693e: `Vuosi`, s48e186fb300e5464: `Aika`, s58ab939b42a026a6: `Koko päivä`, s5e8250fb85d64c23: `Sulje`, s63d040e37887f17e: `Tänään`, s680f01021b5e339d: `Viikko`, s98b32ef4a0856c08: `Ei otsikkoa`, s99f110d27e30b289: `Otsikko`, sa0fd990c985f24bd: `Tapahtuman tiedot`, sac8252732f2edb19: `Päivämäärä`, sb47daaf9e1c4a905: `Kuukausi`, se0955919920ee87d: `Päivä`, sfce4bfbe0f911aa7: `Ei aikaa`, sa1b2c3d4e5f60001: `Edellinen`, sa1b2c3d4e5f60002: `Seuraava`, sa1b2c3d4e5f60003: `tapahtumaa`, sa1b2c3d4e5f60004: `Kalenteritapahtuma`, sa1b2c3d4e5f60005: `Paina Enter tai välilyöntiä avataksesi tiedot`, sa1b2c3d4e5f60006: `–`, sa1b2c3d4e5f60007: `Vaihda päivänäkymään:`, sa1b2c3d4e5f60008: `Näytä aiemmat päivät`, sa1b2c3d4e5f60009: `Näytä myöhemmät päivät`, sa1b2c3d4e5f60010: `lisää`, sa1b2c3d4e5f60011: `Kalenterinäkymä`, sa1b2c3d4e5f60012: `näkymä`, }"
4227
+ }
4228
+ ],
4229
+ "exports": [
4230
+ {
4231
+ "kind": "js",
4232
+ "name": "templates",
4233
+ "declaration": {
4234
+ "name": "templates",
4235
+ "module": "src/generated/locales/fi.ts"
4236
+ }
4237
+ }
4238
+ ]
4239
+ },
4107
4240
  {
4108
4241
  "kind": "javascript-module",
4109
4242
  "path": "src/generated/locales/fr.ts",
@@ -4128,6 +4261,30 @@
4128
4261
  }
4129
4262
  ]
4130
4263
  },
4264
+ {
4265
+ "kind": "javascript-module",
4266
+ "path": "src/generated/locales/he.ts",
4267
+ "declarations": [
4268
+ {
4269
+ "kind": "variable",
4270
+ "name": "templates",
4271
+ "type": {
4272
+ "text": "object"
4273
+ },
4274
+ "default": "{ s005053d82b712e0a: `הערות`, s090f2107b5a69a7f: `שס`, s15ba5784a11e0b88: `החודש הנוכחי`, s22380c7fc798a44f: `אין תוכן`, s2bc4d1196bce49dc: `ייצוא כ-ICS`, s3c44e22d1af5693e: `שנה`, s48e186fb300e5464: `שעה`, s58ab939b42a026a6: `כל היום`, s5e8250fb85d64c23: `סגור`, s63d040e37887f17e: `היום`, s680f01021b5e339d: `שבוע`, s98b32ef4a0856c08: `ללא כותרת`, s99f110d27e30b289: `כותרת`, sa0fd990c985f24bd: `פרטי אירוע`, sac8252732f2edb19: `תאריך`, sb47daaf9e1c4a905: `חודש`, se0955919920ee87d: `יום`, sfce4bfbe0f911aa7: `ללא שעה`, sa1b2c3d4e5f60001: `הקודם`, sa1b2c3d4e5f60002: `הבא`, sa1b2c3d4e5f60003: `אירועים`, sa1b2c3d4e5f60004: `אירוע ביומן`, sa1b2c3d4e5f60005: `לחץ Enter או Space לפתיחת פרטים`, sa1b2c3d4e5f60006: `עד`, sa1b2c3d4e5f60007: `מעבר לתצוגת יום עבור`, sa1b2c3d4e5f60008: `הצג ימים קודמים`, sa1b2c3d4e5f60009: `הצג ימים מאוחרים יותר`, sa1b2c3d4e5f60010: `עוד`, sa1b2c3d4e5f60011: `תצוגת יומן`, sa1b2c3d4e5f60012: `תצוגה`, }"
4275
+ }
4276
+ ],
4277
+ "exports": [
4278
+ {
4279
+ "kind": "js",
4280
+ "name": "templates",
4281
+ "declaration": {
4282
+ "name": "templates",
4283
+ "module": "src/generated/locales/he.ts"
4284
+ }
4285
+ }
4286
+ ]
4287
+ },
4131
4288
  {
4132
4289
  "kind": "javascript-module",
4133
4290
  "path": "src/generated/locales/hi.ts",
@@ -4248,6 +4405,30 @@
4248
4405
  }
4249
4406
  ]
4250
4407
  },
4408
+ {
4409
+ "kind": "javascript-module",
4410
+ "path": "src/generated/locales/nb.ts",
4411
+ "declarations": [
4412
+ {
4413
+ "kind": "variable",
4414
+ "name": "templates",
4415
+ "type": {
4416
+ "text": "object"
4417
+ },
4418
+ "default": "{ s005053d82b712e0a: `Notater`, s090f2107b5a69a7f: `uke`, s15ba5784a11e0b88: `Gjeldende måned`, s22380c7fc798a44f: `Ikke noe innhold`, s2bc4d1196bce49dc: `Eksporter som ICS`, s3c44e22d1af5693e: `År`, s48e186fb300e5464: `Tid`, s58ab939b42a026a6: `Hele dagen`, s5e8250fb85d64c23: `Lukk`, s63d040e37887f17e: `I dag`, s680f01021b5e339d: `Uke`, s98b32ef4a0856c08: `Ingen tittel`, s99f110d27e30b289: `Tittel`, sa0fd990c985f24bd: `Hendelsesdetaljer`, sac8252732f2edb19: `Dato`, sb47daaf9e1c4a905: `Måned`, se0955919920ee87d: `Dag`, sfce4bfbe0f911aa7: `Ingen tid`, sa1b2c3d4e5f60001: `Forrige`, sa1b2c3d4e5f60002: `Neste`, sa1b2c3d4e5f60003: `hendelser`, sa1b2c3d4e5f60004: `Kalenderhendelse`, sa1b2c3d4e5f60005: `Trykk Enter eller Mellomrom for å åpne detaljer`, sa1b2c3d4e5f60006: `til`, sa1b2c3d4e5f60007: `Bytt til dagsvisning for`, sa1b2c3d4e5f60008: `Vis tidligere dager`, sa1b2c3d4e5f60009: `Vis senere dager`, sa1b2c3d4e5f60010: `mer`, sa1b2c3d4e5f60011: `Kalendervisning`, sa1b2c3d4e5f60012: `visning`, }"
4419
+ }
4420
+ ],
4421
+ "exports": [
4422
+ {
4423
+ "kind": "js",
4424
+ "name": "templates",
4425
+ "declaration": {
4426
+ "name": "templates",
4427
+ "module": "src/generated/locales/nb.ts"
4428
+ }
4429
+ }
4430
+ ]
4431
+ },
4251
4432
  {
4252
4433
  "kind": "javascript-module",
4253
4434
  "path": "src/generated/locales/nl.ts",
@@ -4344,6 +4525,30 @@
4344
4525
  }
4345
4526
  ]
4346
4527
  },
4528
+ {
4529
+ "kind": "javascript-module",
4530
+ "path": "src/generated/locales/sv.ts",
4531
+ "declarations": [
4532
+ {
4533
+ "kind": "variable",
4534
+ "name": "templates",
4535
+ "type": {
4536
+ "text": "object"
4537
+ },
4538
+ "default": "{ s005053d82b712e0a: `Anteckningar`, s090f2107b5a69a7f: `v.`, s15ba5784a11e0b88: `Aktuell månad`, s22380c7fc798a44f: `Inget innehåll`, s2bc4d1196bce49dc: `Exportera som ICS`, s3c44e22d1af5693e: `År`, s48e186fb300e5464: `Tid`, s58ab939b42a026a6: `Heldag`, s5e8250fb85d64c23: `Stäng`, s63d040e37887f17e: `Idag`, s680f01021b5e339d: `Vecka`, s98b32ef4a0856c08: `Ingen titel`, s99f110d27e30b289: `Titel`, sa0fd990c985f24bd: `Händelsedetaljer`, sac8252732f2edb19: `Datum`, sb47daaf9e1c4a905: `Månad`, se0955919920ee87d: `Dag`, sfce4bfbe0f911aa7: `Ingen tid`, sa1b2c3d4e5f60001: `Föregående`, sa1b2c3d4e5f60002: `Nästa`, sa1b2c3d4e5f60003: `händelser`, sa1b2c3d4e5f60004: `Kalenderhändelse`, sa1b2c3d4e5f60005: `Tryck Enter eller Mellanslag för att öppna detaljer`, sa1b2c3d4e5f60006: `till`, sa1b2c3d4e5f60007: `Byt till dagsvy för`, sa1b2c3d4e5f60008: `Visa tidigare dagar`, sa1b2c3d4e5f60009: `Visa senare dagar`, sa1b2c3d4e5f60010: `mer`, sa1b2c3d4e5f60011: `Kalendervy`, sa1b2c3d4e5f60012: `vy`, }"
4539
+ }
4540
+ ],
4541
+ "exports": [
4542
+ {
4543
+ "kind": "js",
4544
+ "name": "templates",
4545
+ "declaration": {
4546
+ "name": "templates",
4547
+ "module": "src/generated/locales/sv.ts"
4548
+ }
4549
+ }
4550
+ ]
4551
+ },
4347
4552
  {
4348
4553
  "kind": "javascript-module",
4349
4554
  "path": "src/generated/locales/th.ts",