Skip to content

Commit 00cc503

Browse files
committed
feat: add calendar event stacking configuration options (#1257, #1064)
Add user-configurable options for controlling how events display and stack in the calendar view: - slotEventOverlap: toggle visual overlap of timed events - eventMaxStack: limit stacked events in week/day view - dayMaxEvents: limit events per day in month view - dayMaxEventRows: limit event rows per day in month view Also includes dark mode styling fixes for the timeGrid more-link element and translations for all supported locales.
1 parent fa357a6 commit 00cc503

File tree

17 files changed

+315
-6
lines changed

17 files changed

+315
-6
lines changed

docs/releases/unreleased.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ Example:
6868
- Search existing tasks or type natural language to create new tasks (e.g., "Buy groceries tomorrow #shopping")
6969
- Press Enter to select an existing task, Shift+Enter to create a new task
7070
- Real-time preview shows parsed title, due date, priority, tags, and other metadata
71+
- Can be used when adding sub-tasks to create sub-tasks on-the-fly
7172
- Thanks to @luciolebrillante for the feature request
7273

7374
- (#1044), (#1222) Added unsaved changes confirmation when closing task edit modal
@@ -87,6 +88,14 @@ Example:
8788
- Example: `if(priority=="high",0,if(priority=="normal",1,if(priority=="low",2,999)))`
8889
- Thanks to @jhedlund for the suggestion
8990

91+
- (#1257), (#1064) Added configurable event stacking options for Bases Calendar view
92+
- **Allow events to overlap**: Toggle whether timed events visually overlap or display side-by-side in week/day views
93+
- **Max stacked events**: Limit horizontal event stacking in week/day views (0 = unlimited)
94+
- **Max events per day**: Limit events shown per day cell in month view (0 = auto based on cell height)
95+
- **Max event rows per day**: Limit event rows per day cell in month view (0 = unlimited)
96+
- Configure per-view in the Bases Calendar view settings under Layout
97+
- Thanks to @3zra47 and @hasanyilmaz for the feature requests
98+
9099
## Changed
91100

92101
- Improved inline task conversion to merge TasksPlugin and NLP parsing results

docs/settings/calendar-settings.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ You can also configure the **Calendar Locale** to change the calendar's language
1818

1919
You can control which types of events are shown by default in the calendar views, including scheduled tasks, tasks with due dates, recurring tasks, time entries, and events from external calendars.
2020

21+
## Event Display and Stacking
22+
23+
These settings control how events are displayed when multiple events occur at the same time or on the same day.
24+
25+
**Allow events to overlap** - When enabled, timed events in week and day views can visually overlap each other. When disabled, events are displayed side-by-side with no overlapping.
26+
27+
**Max stacked events (week/day view)** - Limits how many events can stack horizontally in the week and day views. When exceeded, a "+X more" link appears. Set to 0 for unlimited stacking.
28+
29+
**Max events per day (month view)** - Limits how many events are shown per day cell in month view. When exceeded, a "+X more" link appears. Set to 0 for automatic limiting based on cell height.
30+
31+
**Max event rows per day (month view)** - Limits how many rows of events are shown per day cell in month view. Set to 0 for unlimited rows.
32+
2133
## Timeblocking Features
2234

2335
You can enable or disable the **Timeblocking** feature in the Features tab, which allows you to create and manage timeblocks in the calendar views. When enabled, dragging on a time slot in the calendar view will display a context menu that includes the "Create timeblock" option.

i18n.manifest.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@
167167
"views.basesCalendar.settings.layout.initialScrollTime": "57489455a18c7f3f66048b39c934497b1a858b6b",
168168
"views.basesCalendar.settings.layout.initialScrollTimePlaceholder": "76b7b3219aac0cf237e1aa634f4d4034665565d0",
169169
"views.basesCalendar.settings.layout.minimumEventHeight": "0c7471e72296e1a9ba5487514e4c96c819b4e53a",
170+
"views.basesCalendar.settings.layout.slotEventOverlap": "4f268fa7ce2545e141181e81a09d907c293505b7",
171+
"views.basesCalendar.settings.layout.enableSearch": "c814e198f0848e59affefac11f1186ff95464085",
172+
"views.basesCalendar.settings.layout.eventMaxStack": "33531c6baf7200666603776e293d9d6ef507fcec",
173+
"views.basesCalendar.settings.layout.dayMaxEvents": "13a7bf6c528f5d52ea1f45a9a37059305351d609",
174+
"views.basesCalendar.settings.layout.dayMaxEventRows": "c36df6fb674736e1999726e4446702c5ab4938fa",
170175
"views.basesCalendar.settings.propertyBasedEvents.startDateProperty": "05c65e1fc55d32dc8aab0c001a11218e4ee4119c",
171176
"views.basesCalendar.settings.propertyBasedEvents.startDatePropertyPlaceholder": "f46d1039527ed2dab5f0d0f1218cc0f45b2f6c42",
172177
"views.basesCalendar.settings.propertyBasedEvents.endDateProperty": "5bd23d448ccda903b2388615927c2d497117466f",

i18n.state.json

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,26 @@
672672
"source": "0c7471e72296e1a9ba5487514e4c96c819b4e53a",
673673
"translation": "9899569d7041013b13d8870aef0d224eac9c84cf"
674674
},
675+
"views.basesCalendar.settings.layout.slotEventOverlap": {
676+
"source": "4f268fa7ce2545e141181e81a09d907c293505b7",
677+
"translation": "16084bef7221db4e74746881ce7877a90b361ac8"
678+
},
679+
"views.basesCalendar.settings.layout.enableSearch": {
680+
"source": "c814e198f0848e59affefac11f1186ff95464085",
681+
"translation": "9752015595a2dbdf8c6dd41b606df87221908e6e"
682+
},
683+
"views.basesCalendar.settings.layout.eventMaxStack": {
684+
"source": "33531c6baf7200666603776e293d9d6ef507fcec",
685+
"translation": "d2b82746821b4464282c92cdb153536a75ba4819"
686+
},
687+
"views.basesCalendar.settings.layout.dayMaxEvents": {
688+
"source": "13a7bf6c528f5d52ea1f45a9a37059305351d609",
689+
"translation": "029ae1ea3a02b3917a10410bf2f3f7c2d4dbe2a4"
690+
},
691+
"views.basesCalendar.settings.layout.dayMaxEventRows": {
692+
"source": "c36df6fb674736e1999726e4446702c5ab4938fa",
693+
"translation": "444746b8d379be2e1a9a6632a99e6acd4c1f7d05"
694+
},
675695
"views.basesCalendar.settings.propertyBasedEvents.startDateProperty": {
676696
"source": "05c65e1fc55d32dc8aab0c001a11218e4ee4119c",
677697
"translation": "14ffc61439bc59829f7f6f92e7422158c370036a"
@@ -7846,6 +7866,26 @@
78467866
"source": "0c7471e72296e1a9ba5487514e4c96c819b4e53a",
78477867
"translation": "7d970abc24a1ea8ff9f516cbe6010c6d7fb9e325"
78487868
},
7869+
"views.basesCalendar.settings.layout.slotEventOverlap": {
7870+
"source": "4f268fa7ce2545e141181e81a09d907c293505b7",
7871+
"translation": "a7d46bd7e90b4fdfedb596ffc4bfd56fe677a2c1"
7872+
},
7873+
"views.basesCalendar.settings.layout.enableSearch": {
7874+
"source": "c814e198f0848e59affefac11f1186ff95464085",
7875+
"translation": "389d3ee2dc8b82b244cbc1fc61c68b0e0ae193dd"
7876+
},
7877+
"views.basesCalendar.settings.layout.eventMaxStack": {
7878+
"source": "33531c6baf7200666603776e293d9d6ef507fcec",
7879+
"translation": "0e125a289ed0a3ac5dc3a8264a5bf11042977b84"
7880+
},
7881+
"views.basesCalendar.settings.layout.dayMaxEvents": {
7882+
"source": "13a7bf6c528f5d52ea1f45a9a37059305351d609",
7883+
"translation": "246098bff6e068a8f4f7abefedf2e90a10b6266e"
7884+
},
7885+
"views.basesCalendar.settings.layout.dayMaxEventRows": {
7886+
"source": "c36df6fb674736e1999726e4446702c5ab4938fa",
7887+
"translation": "7807b7c9ab99851eb47727fd6dff0a272e86438c"
7888+
},
78497889
"views.basesCalendar.settings.propertyBasedEvents.startDateProperty": {
78507890
"source": "05c65e1fc55d32dc8aab0c001a11218e4ee4119c",
78517891
"translation": "e1595c21e6dff6aa736d8e689f6414b130ccc13f"
@@ -15020,6 +15060,26 @@
1502015060
"source": "0c7471e72296e1a9ba5487514e4c96c819b4e53a",
1502115061
"translation": "69932caff3a7e60d94199f6ab571fa8ac0288e11"
1502215062
},
15063+
"views.basesCalendar.settings.layout.slotEventOverlap": {
15064+
"source": "4f268fa7ce2545e141181e81a09d907c293505b7",
15065+
"translation": "5ba447b7b44c99705e62ca37c1b7991892c070bf"
15066+
},
15067+
"views.basesCalendar.settings.layout.enableSearch": {
15068+
"source": "c814e198f0848e59affefac11f1186ff95464085",
15069+
"translation": "6fad57d0aa365ee05281094b72db7d33be7dc2a4"
15070+
},
15071+
"views.basesCalendar.settings.layout.eventMaxStack": {
15072+
"source": "33531c6baf7200666603776e293d9d6ef507fcec",
15073+
"translation": "15143c97661ca69add35026a99a0d40b2d374b26"
15074+
},
15075+
"views.basesCalendar.settings.layout.dayMaxEvents": {
15076+
"source": "13a7bf6c528f5d52ea1f45a9a37059305351d609",
15077+
"translation": "c55ea7bc1fbe2121fe8b0cf757e9e6f41f7e5a8d"
15078+
},
15079+
"views.basesCalendar.settings.layout.dayMaxEventRows": {
15080+
"source": "c36df6fb674736e1999726e4446702c5ab4938fa",
15081+
"translation": "c682d3eb1fab2c9548adfdea706775950fcf6779"
15082+
},
1502315083
"views.basesCalendar.settings.propertyBasedEvents.startDateProperty": {
1502415084
"source": "05c65e1fc55d32dc8aab0c001a11218e4ee4119c",
1502515085
"translation": "203d111e33f69228908d5681133ccbe72f17dd99"
@@ -22194,6 +22254,26 @@
2219422254
"source": "0c7471e72296e1a9ba5487514e4c96c819b4e53a",
2219522255
"translation": "b29e0df7212084d973911cd7651a9e42e74f2007"
2219622256
},
22257+
"views.basesCalendar.settings.layout.slotEventOverlap": {
22258+
"source": "4f268fa7ce2545e141181e81a09d907c293505b7",
22259+
"translation": "4183339a41f281e72fe3769a25f619d31fbdca54"
22260+
},
22261+
"views.basesCalendar.settings.layout.enableSearch": {
22262+
"source": "c814e198f0848e59affefac11f1186ff95464085",
22263+
"translation": "79e90c4b5f88e93106da0901176fb530584e30fe"
22264+
},
22265+
"views.basesCalendar.settings.layout.eventMaxStack": {
22266+
"source": "33531c6baf7200666603776e293d9d6ef507fcec",
22267+
"translation": "130981bc3723501d489432756e1c8c77435c7386"
22268+
},
22269+
"views.basesCalendar.settings.layout.dayMaxEvents": {
22270+
"source": "13a7bf6c528f5d52ea1f45a9a37059305351d609",
22271+
"translation": "0e8800ad75bb44487ab035267e0c47178b0e0de0"
22272+
},
22273+
"views.basesCalendar.settings.layout.dayMaxEventRows": {
22274+
"source": "c36df6fb674736e1999726e4446702c5ab4938fa",
22275+
"translation": "1f2e0b32ea67b7bc88bff9979581689412b069ec"
22276+
},
2219722277
"views.basesCalendar.settings.propertyBasedEvents.startDateProperty": {
2219822278
"source": "05c65e1fc55d32dc8aab0c001a11218e4ee4119c",
2219922279
"translation": "a563266dbf5e822216ebb842629702644bb73636"
@@ -29368,6 +29448,26 @@
2936829448
"source": "0c7471e72296e1a9ba5487514e4c96c819b4e53a",
2936929449
"translation": "a9e578ac4f64ae08610c9545feb2e9cad0e936dc"
2937029450
},
29451+
"views.basesCalendar.settings.layout.slotEventOverlap": {
29452+
"source": "4f268fa7ce2545e141181e81a09d907c293505b7",
29453+
"translation": "9e4092b46fcb4ce354809fdfe597b5ca1a86119d"
29454+
},
29455+
"views.basesCalendar.settings.layout.enableSearch": {
29456+
"source": "c814e198f0848e59affefac11f1186ff95464085",
29457+
"translation": "36deb7ea2780ffacb186a28284c51666b69e8911"
29458+
},
29459+
"views.basesCalendar.settings.layout.eventMaxStack": {
29460+
"source": "33531c6baf7200666603776e293d9d6ef507fcec",
29461+
"translation": "51527c04be75e348e2cd9f5b2d62ebb4330878d7"
29462+
},
29463+
"views.basesCalendar.settings.layout.dayMaxEvents": {
29464+
"source": "13a7bf6c528f5d52ea1f45a9a37059305351d609",
29465+
"translation": "fa0411414300e1604ea0be730d99e522b5738100"
29466+
},
29467+
"views.basesCalendar.settings.layout.dayMaxEventRows": {
29468+
"source": "c36df6fb674736e1999726e4446702c5ab4938fa",
29469+
"translation": "1aaa140c24f041e9b8584d986efc902a7b80d6ec"
29470+
},
2937129471
"views.basesCalendar.settings.propertyBasedEvents.startDateProperty": {
2937229472
"source": "05c65e1fc55d32dc8aab0c001a11218e4ee4119c",
2937329473
"translation": "2efd3012d6e8d4c8d8d5e17e010ccbf10c7c4b1a"
@@ -36542,6 +36642,26 @@
3654236642
"source": "0c7471e72296e1a9ba5487514e4c96c819b4e53a",
3654336643
"translation": "50663327fc5ba67975e8e5fa08adab8449d8d43e"
3654436644
},
36645+
"views.basesCalendar.settings.layout.slotEventOverlap": {
36646+
"source": "4f268fa7ce2545e141181e81a09d907c293505b7",
36647+
"translation": "794384386430a0bfbb8aeb13765e26e3470067ef"
36648+
},
36649+
"views.basesCalendar.settings.layout.enableSearch": {
36650+
"source": "c814e198f0848e59affefac11f1186ff95464085",
36651+
"translation": "04ad3b19e9cda738f16f899f80a056222bb7df78"
36652+
},
36653+
"views.basesCalendar.settings.layout.eventMaxStack": {
36654+
"source": "33531c6baf7200666603776e293d9d6ef507fcec",
36655+
"translation": "32831b47fd4ae9a90d4486e87c37f77909b574a5"
36656+
},
36657+
"views.basesCalendar.settings.layout.dayMaxEvents": {
36658+
"source": "13a7bf6c528f5d52ea1f45a9a37059305351d609",
36659+
"translation": "df38ee14c9f43048db482aa2d2dac096e0636108"
36660+
},
36661+
"views.basesCalendar.settings.layout.dayMaxEventRows": {
36662+
"source": "c36df6fb674736e1999726e4446702c5ab4938fa",
36663+
"translation": "5bce529be6bbe9de882971c455d651564f72ffd2"
36664+
},
3654536665
"views.basesCalendar.settings.propertyBasedEvents.startDateProperty": {
3654636666
"source": "05c65e1fc55d32dc8aab0c001a11218e4ee4119c",
3654736667
"translation": "76ca7e2d4d189ade6e69c3bbde68bf280ab93da1"
@@ -43716,6 +43836,26 @@
4371643836
"source": "0c7471e72296e1a9ba5487514e4c96c819b4e53a",
4371743837
"translation": "1dc77fabfa7166ff86c4d70720c99e1a21d6a072"
4371843838
},
43839+
"views.basesCalendar.settings.layout.slotEventOverlap": {
43840+
"source": "4f268fa7ce2545e141181e81a09d907c293505b7",
43841+
"translation": "c6ac2feea0c7290d03c8171d85d48f877dee9be3"
43842+
},
43843+
"views.basesCalendar.settings.layout.enableSearch": {
43844+
"source": "c814e198f0848e59affefac11f1186ff95464085",
43845+
"translation": "657b6f387cbe9adf6e84063e19ab492890ff57d0"
43846+
},
43847+
"views.basesCalendar.settings.layout.eventMaxStack": {
43848+
"source": "33531c6baf7200666603776e293d9d6ef507fcec",
43849+
"translation": "457dfbcd888b94be03d9e3282e8480d943dfd3b6"
43850+
},
43851+
"views.basesCalendar.settings.layout.dayMaxEvents": {
43852+
"source": "13a7bf6c528f5d52ea1f45a9a37059305351d609",
43853+
"translation": "fbe10e475d188602de8ce62a86574101beb0f24a"
43854+
},
43855+
"views.basesCalendar.settings.layout.dayMaxEventRows": {
43856+
"source": "c36df6fb674736e1999726e4446702c5ab4938fa",
43857+
"translation": "e1e19ae69d25c529a01b733ba69e1c68dbdc2d84"
43858+
},
4371943859
"views.basesCalendar.settings.propertyBasedEvents.startDateProperty": {
4372043860
"source": "05c65e1fc55d32dc8aab0c001a11218e4ee4119c",
4372143861
"translation": "c1a169c76040d5baa529dee7a2edc6550ef02ca9"

src/bases/CalendarView.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ export class CalendarView extends BasesViewBase {
125125
timeFormat: string;
126126
scrollTime: string;
127127
eventMinHeight: number;
128+
slotEventOverlap: boolean;
129+
eventMaxStack: number | null;
130+
dayMaxEvents: number | boolean;
131+
dayMaxEventRows: number | boolean;
128132
// Locale (non-configurable per view)
129133
locale: string;
130134

@@ -181,6 +185,10 @@ export class CalendarView extends BasesViewBase {
181185
selectMirror: calendarSettings.selectMirror,
182186
timeFormat: calendarSettings.timeFormat,
183187
eventMinHeight: calendarSettings.eventMinHeight,
188+
slotEventOverlap: calendarSettings.slotEventOverlap,
189+
eventMaxStack: calendarSettings.eventMaxStack,
190+
dayMaxEvents: calendarSettings.dayMaxEvents,
191+
dayMaxEventRows: calendarSettings.dayMaxEventRows,
184192
locale: calendarSettings.locale,
185193

186194
// Property-based events
@@ -365,6 +373,25 @@ export class CalendarView extends BasesViewBase {
365373
this.viewOptions.selectMirror = this.config.get('selectMirror') ?? this.viewOptions.selectMirror;
366374
this.viewOptions.timeFormat = this.config.get('timeFormat') ?? this.viewOptions.timeFormat;
367375
this.viewOptions.eventMinHeight = this.config.get('eventMinHeight') ?? this.viewOptions.eventMinHeight;
376+
this.viewOptions.slotEventOverlap = this.config.get('slotEventOverlap') ?? this.viewOptions.slotEventOverlap;
377+
378+
// Convert slider values: 0 means special behavior (null/true/false)
379+
const eventMaxStackValue = this.config.get('eventMaxStack');
380+
if (eventMaxStackValue !== undefined) {
381+
this.viewOptions.eventMaxStack = eventMaxStackValue === 0 ? null : eventMaxStackValue;
382+
}
383+
384+
const dayMaxEventsValue = this.config.get('dayMaxEvents');
385+
if (dayMaxEventsValue !== undefined) {
386+
// 0 = auto (true), positive number = limit
387+
this.viewOptions.dayMaxEvents = dayMaxEventsValue === 0 ? true : dayMaxEventsValue;
388+
}
389+
390+
const dayMaxEventRowsValue = this.config.get('dayMaxEventRows');
391+
if (dayMaxEventRowsValue !== undefined) {
392+
// 0 = unlimited (false), positive number = limit
393+
this.viewOptions.dayMaxEventRows = dayMaxEventRowsValue === 0 ? false : dayMaxEventRowsValue;
394+
}
368395

369396
// Property-based events
370397
this.viewOptions.startDateProperty = this.config.get('startDateProperty') ?? this.viewOptions.startDateProperty;
@@ -531,7 +558,9 @@ export class CalendarView extends BasesViewBase {
531558
nowIndicator: this.viewOptions.nowIndicator,
532559
weekends: this.viewOptions.showWeekends,
533560
allDaySlot: this.viewOptions.showAllDaySlot,
534-
dayMaxEvents: true,
561+
dayMaxEvents: this.viewOptions.dayMaxEvents,
562+
dayMaxEventRows: this.viewOptions.dayMaxEventRows,
563+
eventMaxStack: this.viewOptions.eventMaxStack ?? undefined,
535564
navLinks: true,
536565
navLinkDayClick: (date: Date) => handleDateTitleClick(date, this.plugin),
537566
editable: true,
@@ -549,6 +578,7 @@ export class CalendarView extends BasesViewBase {
549578
},
550579
scrollTime: this.viewOptions.scrollTime,
551580
eventMinHeight: this.viewOptions.eventMinHeight,
581+
slotEventOverlap: this.viewOptions.slotEventOverlap,
552582
eventAllow: () => true, // Allow all drops to proceed visually
553583
events: (fetchInfo, successCallback, failureCallback) => {
554584
this.fetchEvents(fetchInfo, successCallback, failureCallback);

src/bases/registration.ts

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,18 @@ export async function registerBasesTaskList(plugin: TaskNotesPlugin): Promise<vo
299299
displayName: t("layout.showSelectionPreview"),
300300
default: calendarSettings.selectMirror,
301301
},
302+
{
303+
type: "toggle",
304+
key: "slotEventOverlap",
305+
displayName: t("layout.slotEventOverlap"),
306+
default: calendarSettings.slotEventOverlap,
307+
},
308+
{
309+
type: "toggle",
310+
key: "enableSearch",
311+
displayName: t("layout.enableSearch"),
312+
default: false,
313+
},
302314
{
303315
type: "dropdown",
304316
key: "timeFormat",
@@ -326,10 +338,31 @@ export async function registerBasesTaskList(plugin: TaskNotesPlugin): Promise<vo
326338
step: 5,
327339
},
328340
{
329-
type: "toggle",
330-
key: "enableSearch",
331-
displayName: "Enable search box",
332-
default: false,
341+
type: "slider",
342+
key: "eventMaxStack",
343+
displayName: t("layout.eventMaxStack"),
344+
default: calendarSettings.eventMaxStack ?? 0,
345+
min: 0,
346+
max: 10,
347+
step: 1,
348+
},
349+
{
350+
type: "slider",
351+
key: "dayMaxEvents",
352+
displayName: t("layout.dayMaxEvents"),
353+
default: typeof calendarSettings.dayMaxEvents === 'number' ? calendarSettings.dayMaxEvents : 0,
354+
min: 0,
355+
max: 20,
356+
step: 1,
357+
},
358+
{
359+
type: "slider",
360+
key: "dayMaxEventRows",
361+
displayName: t("layout.dayMaxEventRows"),
362+
default: typeof calendarSettings.dayMaxEventRows === 'number' ? calendarSettings.dayMaxEventRows : 0,
363+
min: 0,
364+
max: 10,
365+
step: 1,
333366
},
334367
],
335368
},

src/i18n/resources/de.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,11 @@ export const de: TranslationTree = {
229229
initialScrollTime: "Anfangsscrollzeit",
230230
initialScrollTimePlaceholder: "HH:mm:ss (z.B. 08:00:00)",
231231
minimumEventHeight: "Minimale Ereignishöhe (px)",
232+
slotEventOverlap: "Ereignisüberlappung zulassen",
233+
enableSearch: "Suchfeld aktivieren",
234+
eventMaxStack: "Max. gestapelte Ereignisse (Wochen-/Tagesansicht, 0 = unbegrenzt)",
235+
dayMaxEvents: "Max. Ereignisse pro Tag (Monatsansicht, 0 = automatisch)",
236+
dayMaxEventRows: "Max. Ereigniszeilen pro Tag (Monatsansicht, 0 = unbegrenzt)",
232237
},
233238
propertyBasedEvents: {
234239
startDateProperty: "Startdatumseigenschaft",

src/i18n/resources/en.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,11 @@ export const en: TranslationTree = {
231231
initialScrollTime: "Initial scroll time",
232232
initialScrollTimePlaceholder: "HH:mm:ss (e.g., 08:00:00)",
233233
minimumEventHeight: "Minimum event height (px)",
234+
slotEventOverlap: "Allow events to overlap",
235+
enableSearch: "Enable search box",
236+
eventMaxStack: "Max stacked events (week/day view, 0 = unlimited)",
237+
dayMaxEvents: "Max events per day (month view, 0 = auto)",
238+
dayMaxEventRows: "Max event rows per day (month view, 0 = unlimited)",
234239
},
235240
propertyBasedEvents: {
236241
startDateProperty: "Start date property",

0 commit comments

Comments
 (0)