Multi-Resource Shared Events
Usage
theme: 'ios' You can turn auto theming on and let it decide based on the platform.
Usage
themeVariant: 'light' You can turn auto dark mode on based on system settings.
Usage
clickToCreate: true,
// click to create is on dragToCreate: true,
// drag to create is on dragToMove: true,
// reordering is on dragToResize: true,
// resizing is on eventDelete: true
// deleting is on Fine-tune drag & drop with these options, which are false by default.
Usage
locale: mobiscroll.localeEn Selecting the locale loads the localized settings and the translated UI text.
Multi-Resource Shared Events
Events can be shared among resources. This can easily be the same resource type, like people in a shared work calendar scenario or different resource types, like aircraft and instructor in a flight training scenario where you'll have to schedule an instructor and an aircraft for a class which is the event.
Shared events will render correctly in the appropriate resource columns with drag & drop, validation across invalid dates and times will work out of the box. All you need to do is to add both resourceIDs to the event.
Demo

Code
mobiscroll.setOptions({
locale: ,
theme: ' ',
themeVariant: ' '
});
function showPopup(args) {
var event = args.event;
var resources = Array.isArray(event.resource) ? event.resource : [event.resource];
// Store temporary event
tempEvent = event;
// Fill popup with the current event data
mobiscroll.getInst(titleInput).value = event.title;
for (var i = 0; i < nameSegmented.length; i++) {
var segmented = nameSegmented[i];
var value = +segmented.value;
var segmentedInst = mobiscroll.getInst(segmented);
segmentedInst.checked = resources.indexOf(value) !== -1;
}
// Set anchor for the popup
popup.setOptions({ anchor: args.target ? args.target : args.domEvent.target });
popup.open();
}
var tempEvent;
var deleteEvent;
var titleInput = document.getElementById('demo-shared-events-title');
var nameSegmented = document.getElementsByName('demo-shared-events-select');
var calendar = mobiscroll.eventcalendar('#demo-shared-events-across-resources', {
clickToCreate: true,
dragToCreate: true,
dragToMove: true,
dragToResize: true,
view: {
scheduler: {
type: 'week',
allDay: false,
startDay: 1,
endDay: 5,
startTime: '05:00',
endTime: '22:00',
},
},
data: [
{
start: '2026-10-21T10:00',
end: '2026-10-21T15:00',
title: 'Impact Training',
resource: [2, 3],
color: '#35bb5a',
},
{
start: '2026-10-22T10:00',
end: '2026-10-22T15:00',
title: 'Impact Training',
resource: [2, 3],
color: '#35bb5a',
},
{
start: '2026-10-24T08:30',
end: '2026-10-24T10:00',
title: 'Quick mtg. with Martin',
resource: 3,
color: '#913aa7',
},
{
start: '2026-10-24T12:00',
end: '2026-10-24T13:00',
title: 'General orientation',
resource: [1, 2, 3],
color: '#a71111',
},
{
start: '2026-10-25T10:00',
end: '2026-10-25T11:00',
title: 'Product team mtg.',
resource: [2, 3],
color: '#6e7f29',
},
{
start: '2026-10-26T14:00',
end: '2026-10-26T16:00',
title: 'Stakeholder mtg.',
resource: 1,
color: '#dcd234',
},
{
start: '2026-10-27T10:00',
end: '2026-10-27T14:00',
title: 'Innovation mtg.',
resource: [1, 2],
color: '#de3d83',
},
],
resources: [
{
id: 1,
name: 'Ryan',
color: '#f7c4b4',
},
{
id: 2,
name: 'Kate',
color: '#c6f1c9',
},
{
id: 3,
name: 'John',
color: '#e8d0ef',
},
],
extendDefaultEvent: function () {
return { color: '#4a9e42' };
},
onEventCreated: function (args) {
deleteEvent = true;
showPopup(args);
},
onEventDoubleClick: function (args) {
deleteEvent = false;
showPopup(args);
},
});
var popup = mobiscroll.popup('#demo-shared-events-popup', {
display: 'anchored',
contentPadding: false,
touchUi: false,
width: 350,
buttons: [
'cancel',
{
text: 'OK',
keyCode: 'enter',
handler: function () {
var selected = [];
for (var i = 0; i < nameSegmented.length; i++) {
var segmented = nameSegmented[i];
var segmentedInst = mobiscroll.getInst(segmented);
if (segmentedInst.checked) {
selected.push(+segmented.value);
}
}
tempEvent.resource = selected;
deleteEvent = false;
// Update event with the new properties on OK button click
calendar.updateEvent(tempEvent);
popup.close();
},
cssClass: 'mbsc-popup-button-primary',
},
],
onClose: function () {
if (deleteEvent) {
calendar.removeEvent(tempEvent);
}
},
});
titleInput.addEventListener('input', function (ev) {
tempEvent.title = ev.target.value;
});
<div id="demo-shared-events-across-resources"></div>
<div id="demo-shared-events-popup">
<div class="mbsc-form-group">
<label>
Title
<input id="demo-shared-events-title" mbsc-input data-input-style="box" data-label-style="stacked" />
</label>
<div class="mbsc-padding">
<label class="mbsc-txt-muted">Select event participants</label>
</div>
<div mbsc-segmented-group data-select="multiple">
<label>
Ryan
<input value="1" mbsc-segmented type="checkbox" name="demo-shared-events-select">
</label>
<label>
Kate
<input value="2" mbsc-segmented type="checkbox" name="demo-shared-events-select">
</label>
<label>
John
<input value="3" mbsc-segmented type="checkbox" name="demo-shared-events-select">
</label>
</div>
</div>
</div>