A timeline de recursos e as colunas de recursos do FullCalendar são Premium: uma aplicação comercial precisa de uma chave de licença paga. A página de licenças dele lista as opções gratuitas, para aplicações inteiramente AGPL e para organizações sem fins lucrativos registradas. O agendador do Needless UI oferece as duas coisas com licença MIT, além de eventos recorrentes e arquivos iCalendar. Este guia leva uma aplicação Angular de um para o outro: o que se aproveita, o que não se aproveita e os dados a converter.

Os nomes usados são os do FullCalendar 7, com os da versão 6 entre colchetes quando forem diferentes. O conector Angular do FullCalendar suporta do Angular 16 ao 22; o Needless UI precisa do Angular 22.

O que você ganha

O FullCalendar e o agendador do Needless UI
FuncionalidadeFullCalendarNeedless UI
Timeline de recursos: uma linha por sala ou pessoaPremiumSim: um dia, uma semana ou um mês
Recursos como colunas nas visualizações de dia e de semanaPremiumSim
Visualizações de mês, semana e diaGratuitoSim
Arrastar para mover e redimensionarGratuito; para outro recurso, com o PremiumSim, também para outros recursos. Redimensiona pelo fim, não pelo início.
Selecionar um horário para criar um eventoGratuitoSim, com o ponteiro, um toque longo ou o teclado
Regras como impedir sobreposiçõesGratuito: opções de sobreposição e de restriçãoSim: uma única função allow, consultada antes de cada mudança
Mover e redimensionar eventos pelo tecladoNão consta na documentação de acessibilidade dele, que trata de rótulos ARIA e do foco com TabSim, com anúncios para leitores de tela
Eventos recorrentesGratuito, com o plugin e a biblioteca rruleIntegrado: regras da RFC 5545, sem EXRULE, RDATE nem repetição de hora em hora
iCalendar (.ics)Gratuito: lê um feedLê e escreve arquivos .ics
Visualizações de lista e de anoGratuitoUma agenda dos próximos dias; sem visualizações de ano
Fusos horáriosGratuito: local, UTC ou fusos nomeadosNão: mostra os horários exatamente como os recebe
Recursos agrupados, aninhados ou com várias colunasPremiumNão: uma coluna, desenhada pelo seu template
Arrastar e soltar elementos externos, eventos de fundoGratuitoNão
Impressão, renderização virtualPremiumNão
FrameworksAngular 16 a 22, React, Vue, JavaScript puro e outrosAngular 22 e React 19

O que corresponde a quê

Opções do FullCalendar e seus equivalentes no Needless UI
FullCalendarAgendador do Needless UI
<full-calendar [options]>, plugins, schedulerLicenseKey<nui-scheduler>, com um input para cada opção; sem plugins e sem chave
initialView: 'resourceTimelineDay'view="timeline" e timelineSpan para uma semana ou um mês
initialView: 'timeGridWeek'view="week"; [(view)] é bidirecional
resources, events[resources], [events]
resourceId, extendedPropsresource, data
editable, selectableeditable, selectable
select(slotSelect): { start, end, allDay, resource }
eventDrop, eventResize(eventChange): nada se move até você atualizar events
eventClick(eventClick)
eventOverlap, selectOverlap, eventAllow[allow]: uma única função para mover, redimensionar e selecionar
slotDuration, snapDurationslotMinutes, snapMinutes, em minutos
slotMinTime, slotMaxTime, scrollTimedayStart, dayEnd, scrollHour, em horas
businessHours[businessHours], com os dias da semana de 1 (segunda-feira) a 7
datesSet(rangeChange)
eventContent, resourceCellContent [resourceLabelContent]Templates nuiSchedulerEvent e nuiSchedulerResource
locale, firstDaylocale (qualquer tag BCP 47), firstDay de 1 a 7 e labels para os textos do agendador

Uma timeline de reserva de salas, das duas formas

Salas são recursos e reservas são eventos. As pessoas arrastam ao longo de uma sala para reservá-la e arrastam uma reserva para movê-la, e cada sala só pode ter uma reserva por vez. Com o FullCalendar 7 e a timeline de recursos Premium dele:

Com o agendador do Needless UI:

Duas coisas funcionam de outro jeito. O FullCalendar move a reserva por conta própria, e a aplicação copia a mudança; o agendador do Needless UI só informa a mudança, e é a atualização de events que a mantém, então seus dados continuam sendo a única fonte da verdade. Além disso, allow é código comum, consultado antes de cada mudança feita com o ponteiro ou o teclado, então a regra é sua, e você pode testá-la. O guia do calendário de reservas constrói esta aplicação passo a passo.

Converta os dados

Os dados do FullCalendar e o que o agendador espera
FullCalendarNeedless UI
O end de um evento de dia inteiro é o dia seguinte ao eventoO end de um evento de dia inteiro é o último dia dele: subtraia um dia
Os horários podem terminar em Z ou em um deslocamento como +02:00Horários sem fuso nem deslocamento, como 2026-11-02T09:30
Dias da semana de 0 (domingo) a 6, em businessHours e firstDayDias da semana de 1 (segunda-feira) a 7 (domingo)
Durações como strings, como '00:30'Números: minutos ou horas
Recursos ordenados por id e depois por títuloRecursos na ordem do array
rrule como objeto, e exruleUma string RFC 5545, como FREQ=WEEKLY;BYDAY=MO,FR, e exdate
Um fuso horário como America/New_YorkConverta os horários antes. nuiSchedulerFromIcs(text, { timeZone }) converte arquivos .ics enquanto os lê.

Se você precisa do que falta

Se a sua aplicação depende de fusos horários, recursos agrupados, arrastar e soltar elementos externos ou impressão, o agendador ainda não substitui o FullCalendar. Abra uma issue com o que você precisa. Para todo o resto, a página do agendador tem todos os inputs, outputs e exemplos.