Таймлайн ресурсов и столбцы ресурсов в FullCalendar относятся к Premium: коммерческому приложению нужен платный лицензионный ключ. На странице лицензий FullCalendar перечислены бесплатные варианты — для приложений, полностью открытых под AGPL, и для зарегистрированных некоммерческих организаций. В планировщике Needless UI и то и другое доступно под лицензией MIT, а вместе с ними повторяющиеся события и файлы iCalendar. Это руководство помогает перевести приложение Angular с одного на другое: что переносится, что нет и какие данные нужно преобразовать.

Здесь используются названия из FullCalendar 7, а там, где в версии 6 они другие, старые названия указаны в квадратных скобках. Коннектор FullCalendar для Angular поддерживает Angular с 16 по 22; Needless UI нужен Angular 22.

Что вы получаете

FullCalendar и планировщик Needless UI
ВозможностьFullCalendarNeedless UI
Таймлайн ресурсов: по строке на каждую комнату или человекаPremiumДа: день, неделя или месяц
Ресурсы столбцами в видах дня и неделиPremiumДа
Виды месяца, недели и дняБесплатноДа
Перенос и изменение длительности перетаскиваниемБесплатно; на другой ресурс — в PremiumДа, в том числе на другие ресурсы. Длительность меняется за конец, а не за начало.
Выбор времени для создания событияБесплатноДа: указателем, долгим нажатием или с клавиатуры
Правила вроде запрета пересеченийБесплатно: параметры пересечений и ограниченийДа: одна функция allow, которая вызывается перед каждым изменением
Перенос и изменение длительности событий с клавиатурыНет в его документации по доступности: она описывает метки ARIA и фокус по TabДа, с озвучиванием для скринридеров
Повторяющиеся событияБесплатно, с плагином и библиотекой rruleВстроены: правила RFC 5545, кроме EXRULE, RDATE и ежечасных правил
iCalendar (.ics)Бесплатно: чтение фидаЧтение и запись файлов .ics
Виды списка и годаБесплатноПовестка дня на ближайшие дни; видов года нет
Часовые поясаБесплатно: локальный, UTC или именованныйНет: показывает полученное время как есть
Сгруппированные, вложенные или многоколоночные ресурсыPremiumНет: один столбец, который рисует ваш шаблон
Перетаскивание извне, фоновые событияБесплатноНет
Печать, виртуальный рендерингPremiumНет
ФреймворкиAngular с 16 по 22, React, Vue, чистый JavaScript и другиеAngular 22 и React 19

Что чему соответствует

Параметры FullCalendar и их аналоги в Needless UI
FullCalendarПланировщик Needless UI
<full-calendar [options]>, plugins, schedulerLicenseKey<nui-scheduler> с входным свойством для каждого параметра; без плагинов и ключа
initialView: 'resourceTimelineDay'view="timeline", а для недели или месяца — timelineSpan
initialView: 'timeGridWeek'view="week"; [(view)] — двусторонняя привязка
resources, events[resources], [events]
resourceId, extendedPropsresource, data
editable, selectableeditable, selectable
select(slotSelect): { start, end, allDay, resource }
eventDrop, eventResize(eventChange): ничего не сдвинется, пока вы не обновите events
eventClick(eventClick)
eventOverlap, selectOverlap, eventAllow[allow]: одна функция для переноса, изменения длительности и выбора времени
slotDuration, snapDurationslotMinutes, snapMinutes — в минутах
slotMinTime, slotMaxTime, scrollTimedayStart, dayEnd, scrollHour — в часах
businessHours[businessHours] с днями недели от 1 (понедельник) до 7
datesSet(rangeChange)
eventContent, resourceCellContent [resourceLabelContent]Шаблоны nuiSchedulerEvent и nuiSchedulerResource
locale, firstDaylocale (любой тег BCP 47), firstDay от 1 до 7 и labels для текстов планировщика

Таймлайн бронирования переговорных в двух вариантах

Переговорные — это ресурсы, а бронирования — события. Пользователи протягивают по строке переговорной, чтобы забронировать её, и перетаскивают бронирование, чтобы перенести его, а в переговорной одновременно может быть только одно бронирование. С FullCalendar 7 и его таймлайном ресурсов из Premium:

С планировщиком Needless UI:

Есть два отличия. FullCalendar сам переносит бронирование, а приложение копирует изменение; планировщик Needless UI только сообщает о нём, а сохраняется оно, когда вы обновляете events, так что единственным источником истины остаются ваши данные. Кроме того, allow — обычный код, который вызывается перед каждым изменением указателем или с клавиатуры, поэтому правило в ваших руках и его можно протестировать. В руководстве по календарю бронирования это приложение собирается шаг за шагом.

Преобразование данных

Данные FullCalendar и то, чего ждёт планировщик
FullCalendarNeedless UI
end события на весь день — следующий день после событияend события на весь день — его последний день: вычтите один день
Время может заканчиваться на Z или на смещение вроде +02:00Время без смещения, как на часах, например 2026-11-02T09:30
Дни недели от 0 (воскресенье) до 6 в businessHours и firstDayДни недели от 1 (понедельник) до 7 (воскресенье)
Длительности строками, например '00:30'Числа: минуты или часы
Ресурсы сортируются по id, затем по названиюРесурсы идут в порядке массива
rrule в виде объекта и exruleСтрока RFC 5545, например FREQ=WEEKLY;BYDAY=MO,FR, и exdate
Часовой пояс, например America/New_YorkСначала пересчитайте время. nuiSchedulerFromIcs(text, { timeZone }) делает это сам при чтении файлов .ics.

Если вам нужно то, чего нет

Если ваше приложение зависит от часовых поясов, сгруппированных ресурсов, перетаскивания извне или печати, планировщик пока не заменит FullCalendar. Откройте issue и опишите, что вам нужно. Для всего остального на странице планировщика есть все входные и выходные свойства и примеры.