@adatechnology/scheduling-ui 0.1.0-rc.1

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,316 @@
1
+ import * as _adatechnology_scheduling_contracts from '@adatechnology/scheduling-contracts';
2
+ import { ListResourcesParams, PaginatedResponse, Resource, CreateResourceInput, ResourceId, UpdateResourceInput, ListServicesParams, Service, CreateServiceInput, ServiceId, UpdateServiceInput, AvailabilityRule, CreateAvailabilityRuleInput, AvailabilityException, CreateAvailabilityExceptionInput, AvailabilityExceptionId, GetAvailabilityParams, AvailableSlot, ListBookingsParams, Booking, BookingId, RequestBookingInput, RescheduleBookingInput, CancelBookingInput, ResourceKind } from '@adatechnology/scheduling-contracts';
3
+ import * as react from 'react';
4
+ import { ReactNode } from 'react';
5
+ import * as _tanstack_react_query from '@tanstack/react-query';
6
+ import { UseMutationResult } from '@tanstack/react-query';
7
+
8
+ /**
9
+ * Copyright (c) 2026 Ada Technology. MIT License.
10
+ *
11
+ * `SchedulingApi` é a fronteira com o host: cada método espelha um caso de uso de
12
+ * `scheduling-module`, sem `companyId` — o host já resolve o tenant do contexto autenticado antes
13
+ * de chamar o pacote (`security.md` §2, BOLA). O pacote nunca decide como a requisição é feita.
14
+ */
15
+
16
+ type SchedulingApi = {
17
+ listResources(params?: Omit<ListResourcesParams, 'companyId'>): Promise<PaginatedResponse<Resource>>;
18
+ createResource(input: CreateResourceInput): Promise<Resource>;
19
+ updateResource(id: ResourceId, input: UpdateResourceInput): Promise<Resource>;
20
+ deleteResource(id: ResourceId): Promise<void>;
21
+ listServices(params?: Omit<ListServicesParams, 'companyId'>): Promise<PaginatedResponse<Service>>;
22
+ createService(input: CreateServiceInput): Promise<Service>;
23
+ updateService(id: ServiceId, input: UpdateServiceInput): Promise<Service>;
24
+ deleteService(id: ServiceId): Promise<void>;
25
+ listAvailabilityRules(resourceId: ResourceId): Promise<readonly AvailabilityRule[]>;
26
+ setAvailabilityRules(resourceId: ResourceId, rules: readonly CreateAvailabilityRuleInput[]): Promise<readonly AvailabilityRule[]>;
27
+ listAvailabilityExceptions(resourceId: ResourceId): Promise<readonly AvailabilityException[]>;
28
+ addAvailabilityException(input: CreateAvailabilityExceptionInput): Promise<AvailabilityException>;
29
+ removeAvailabilityException(id: AvailabilityExceptionId): Promise<void>;
30
+ getAvailableSlots(params: Omit<GetAvailabilityParams, 'companyId'>): Promise<readonly AvailableSlot[]>;
31
+ listBookings(params?: Omit<ListBookingsParams, 'companyId'>): Promise<PaginatedResponse<Booking>>;
32
+ getBooking(id: BookingId): Promise<Booking>;
33
+ requestBooking(input: RequestBookingInput, idempotencyKey: string): Promise<Booking>;
34
+ confirmBooking(id: BookingId): Promise<Booking>;
35
+ rescheduleBooking(id: BookingId, input: RescheduleBookingInput): Promise<Booking>;
36
+ cancelBooking(id: BookingId, input: CancelBookingInput): Promise<Booking>;
37
+ completeBooking(id: BookingId): Promise<Booking>;
38
+ markNoShow(id: BookingId): Promise<Booking>;
39
+ };
40
+ type SchedulingUiConfig = {
41
+ readonly locale: string;
42
+ /** 0 = domingo, 1 = segunda — só a grade de agenda (T7.3) e o editor de disponibilidade (T7.4) usam. */
43
+ readonly weekStartsOn: 0 | 1;
44
+ /**
45
+ * F-016: expediente exibido na grade de agenda (T7.3) — hora local, `[agendaStartHour,
46
+ * agendaEndHour)`. Cada host define o próprio; o pacote não presume horário comercial de
47
+ * nenhum produto.
48
+ */
49
+ readonly agendaStartHour: number;
50
+ readonly agendaEndHour: number;
51
+ };
52
+ declare const DEFAULT_SCHEDULING_UI_CONFIG: SchedulingUiConfig;
53
+
54
+ type SchedulingProviderProps = {
55
+ readonly api: SchedulingApi;
56
+ readonly config?: Partial<SchedulingUiConfig>;
57
+ readonly children: ReactNode;
58
+ };
59
+ declare function SchedulingProvider({ api, config, children }: SchedulingProviderProps): react.JSX.Element;
60
+ declare function useScheduling(): SchedulingApi;
61
+ declare function useSchedulingConfig(): SchedulingUiConfig;
62
+
63
+ /**
64
+ * Copyright (c) 2026 Ada Technology. MIT License.
65
+ *
66
+ * Chaves centralizadas: mutação e listagem da mesma entidade precisam invalidar a mesma raiz, e
67
+ * uma chave montada inline em cada hook é como agenda e tabela de reservas passam a mostrar
68
+ * estados diferentes depois de uma confirmação.
69
+ */
70
+ declare const SCHEDULING_QUERY_KEYS: {
71
+ readonly resources: {
72
+ readonly all: readonly ["scheduling", "resources"];
73
+ readonly list: (params: unknown) => readonly ["scheduling", "resources", "list", unknown];
74
+ };
75
+ readonly services: {
76
+ readonly all: readonly ["scheduling", "services"];
77
+ readonly list: (params: unknown) => readonly ["scheduling", "services", "list", unknown];
78
+ };
79
+ readonly availabilityRules: {
80
+ readonly all: (resourceId: string) => readonly ["scheduling", "availability-rules", string];
81
+ };
82
+ readonly availabilityExceptions: {
83
+ readonly all: (resourceId: string) => readonly ["scheduling", "availability-exceptions", string];
84
+ };
85
+ readonly availableSlots: {
86
+ readonly list: (params: unknown) => readonly ["scheduling", "available-slots", unknown];
87
+ };
88
+ readonly bookings: {
89
+ readonly all: readonly ["scheduling", "bookings"];
90
+ readonly list: (params: unknown) => readonly ["scheduling", "bookings", "list", unknown];
91
+ readonly detail: (id: string) => readonly ["scheduling", "bookings", "detail", string];
92
+ };
93
+ };
94
+
95
+ type UseResourcesOptions = {
96
+ readonly page?: number;
97
+ readonly pageSize?: number;
98
+ readonly kind?: ResourceKind;
99
+ readonly active?: boolean;
100
+ };
101
+ declare function useResources(options?: UseResourcesOptions): _tanstack_react_query.UseQueryResult<NoInfer<_adatechnology_scheduling_contracts.PaginatedResponse<_adatechnology_scheduling_contracts.Resource>>, Error>;
102
+
103
+ declare function useCreateResource(): _tanstack_react_query.UseMutationResult<_adatechnology_scheduling_contracts.Resource, Error, CreateResourceInput, unknown>;
104
+ declare function useUpdateResource(): _tanstack_react_query.UseMutationResult<_adatechnology_scheduling_contracts.Resource, Error, {
105
+ readonly id: ResourceId;
106
+ readonly input: UpdateResourceInput;
107
+ }, unknown>;
108
+ declare function useDeleteResource(): _tanstack_react_query.UseMutationResult<void, Error, string, unknown>;
109
+
110
+ /**
111
+ * Copyright (c) 2026 Ada Technology. MIT License.
112
+ */
113
+ type UseServicesOptions = {
114
+ readonly page?: number;
115
+ readonly pageSize?: number;
116
+ readonly active?: boolean;
117
+ };
118
+ declare function useServices(options?: UseServicesOptions): _tanstack_react_query.UseQueryResult<NoInfer<_adatechnology_scheduling_contracts.PaginatedResponse<_adatechnology_scheduling_contracts.Service>>, Error>;
119
+
120
+ declare function useCreateService(): _tanstack_react_query.UseMutationResult<_adatechnology_scheduling_contracts.Service, Error, CreateServiceInput, unknown>;
121
+ declare function useUpdateService(): _tanstack_react_query.UseMutationResult<_adatechnology_scheduling_contracts.Service, Error, {
122
+ readonly id: ServiceId;
123
+ readonly input: UpdateServiceInput;
124
+ }, unknown>;
125
+ declare function useDeleteService(): _tanstack_react_query.UseMutationResult<void, Error, string, unknown>;
126
+
127
+ declare function useAvailabilityRules(resourceId: ResourceId): _tanstack_react_query.UseQueryResult<NoInfer<readonly _adatechnology_scheduling_contracts.AvailabilityRule[]>, Error>;
128
+
129
+ declare function useAvailabilityExceptions(resourceId: ResourceId): _tanstack_react_query.UseQueryResult<NoInfer<readonly _adatechnology_scheduling_contracts.AvailabilityException[]>, Error>;
130
+
131
+ declare function useSetAvailabilityRules(): _tanstack_react_query.UseMutationResult<readonly _adatechnology_scheduling_contracts.AvailabilityRule[], Error, {
132
+ readonly resourceId: ResourceId;
133
+ readonly rules: readonly CreateAvailabilityRuleInput[];
134
+ }, unknown>;
135
+ declare function useAddAvailabilityException(): _tanstack_react_query.UseMutationResult<_adatechnology_scheduling_contracts.AvailabilityException, Error, CreateAvailabilityExceptionInput, unknown>;
136
+ declare function useRemoveAvailabilityException(): _tanstack_react_query.UseMutationResult<void, Error, {
137
+ readonly id: AvailabilityExceptionId;
138
+ readonly resourceId: ResourceId;
139
+ }, unknown>;
140
+
141
+ type UseAvailableSlotsParams = Omit<GetAvailabilityParams, 'companyId'>;
142
+ declare function useAvailableSlots(params: UseAvailableSlotsParams): _tanstack_react_query.UseQueryResult<NoInfer<readonly _adatechnology_scheduling_contracts.AvailableSlot[]>, Error>;
143
+
144
+ type UseBookingsParams = Omit<ListBookingsParams, 'companyId'>;
145
+ declare function useBookings(params?: UseBookingsParams): _tanstack_react_query.UseQueryResult<NoInfer<_adatechnology_scheduling_contracts.PaginatedResponse<_adatechnology_scheduling_contracts.Booking>>, Error>;
146
+ declare function useBooking(id: BookingId): _tanstack_react_query.UseQueryResult<NoInfer<_adatechnology_scheduling_contracts.Booking>, Error>;
147
+
148
+ /**
149
+ * Copyright (c) 2026 Ada Technology. MIT License.
150
+ */
151
+
152
+ declare function useConfirmBooking(): UseMutationResult<Booking, Error, BookingId>;
153
+ declare function useCancelBooking(): UseMutationResult<Booking, Error, {
154
+ readonly id: BookingId;
155
+ readonly input: CancelBookingInput;
156
+ }, unknown>;
157
+ declare function useCompleteBooking(): UseMutationResult<Booking, Error, BookingId>;
158
+ declare function useMarkNoShow(): UseMutationResult<Booking, Error, BookingId>;
159
+
160
+ declare function useRequestBooking(): _tanstack_react_query.UseMutationResult<_adatechnology_scheduling_contracts.Booking, Error, {
161
+ readonly input: RequestBookingInput;
162
+ readonly idempotencyKey: string;
163
+ }, unknown>;
164
+
165
+ declare function useRescheduleBooking(): _tanstack_react_query.UseMutationResult<_adatechnology_scheduling_contracts.Booking, Error, {
166
+ readonly id: BookingId;
167
+ readonly input: RescheduleBookingInput;
168
+ }, unknown>;
169
+
170
+ /**
171
+ * Copyright (c) 2026 Ada Technology. MIT License.
172
+ *
173
+ * Vocabulário da moldura do workspace — título e nome das abas. Tudo sobrescrevível via prop
174
+ * `labels`, sem manter cópia da tela (T7.2). Texto interno de cada área vem de `src/locales`.
175
+ */
176
+ interface SchedulingWorkspaceLabels {
177
+ readonly title: string;
178
+ readonly areaNav: string;
179
+ readonly agendaTab: string;
180
+ readonly bookingsTab: string;
181
+ readonly resourcesTab: string;
182
+ readonly servicesTab: string;
183
+ readonly availabilityTab: string;
184
+ }
185
+ declare const DEFAULT_SCHEDULING_WORKSPACE_LABELS: SchedulingWorkspaceLabels;
186
+
187
+ /**
188
+ * Copyright (c) 2026 Ada Technology. MIT License.
189
+ *
190
+ * Cinco áreas, e não uma lista só: agenda, reservas, recursos, serviços e disponibilidade têm
191
+ * colunas, filtros e frequência de uso diferentes (spec §T7.2) — empilhar tudo numa tela esconderia
192
+ * a maioria atrás de scroll.
193
+ */
194
+ declare const SCHEDULING_WORKSPACE_AREA: {
195
+ readonly AGENDA: "agenda";
196
+ readonly BOOKINGS: "bookings";
197
+ readonly RESOURCES: "resources";
198
+ readonly SERVICES: "services";
199
+ readonly AVAILABILITY: "availability";
200
+ };
201
+ type SchedulingWorkspaceArea = (typeof SCHEDULING_WORKSPACE_AREA)[keyof typeof SCHEDULING_WORKSPACE_AREA];
202
+ declare function isSchedulingWorkspaceArea(value: string): value is SchedulingWorkspaceArea;
203
+
204
+ type SchedulingWorkspaceProps = {
205
+ readonly labels?: Partial<SchedulingWorkspaceLabels>;
206
+ /** Ações do produto no cabeçalho (ex: exportar agenda). Ausente, nada é desenhado. */
207
+ readonly renderHeaderActions?: () => ReactNode;
208
+ /**
209
+ * Área aberta, controlada pelo host — é assim que ela vai para a query string e sobrevive ao
210
+ * refresh e ao link colado. Sem `onAreaChange` a tela controla a própria área internamente.
211
+ */
212
+ readonly area?: SchedulingWorkspaceArea;
213
+ readonly onAreaChange?: (area: SchedulingWorkspaceArea) => void;
214
+ };
215
+ declare function SchedulingWorkspace({ labels: labelsOverride, renderHeaderActions, area: areaProp, onAreaChange, }: SchedulingWorkspaceProps): react.JSX.Element;
216
+
217
+ var ptBR = {
218
+ "common.close": "Fechar",
219
+ "common.cancel": "Cancelar",
220
+ "common.save": "Salvar",
221
+ "common.remove": "Excluir",
222
+ "common.loading": "Carregando…",
223
+ "common.loadFailure": "Não foi possível carregar",
224
+ "common.actionFailure": "Ação falhou. Tente novamente.",
225
+ "common.empty": "Nada por aqui ainda",
226
+ "common.clearFilters": "Limpar filtros",
227
+ "common.selectAll": "Selecionar todos",
228
+ "common.previousPage": "Página anterior",
229
+ "common.nextPage": "Próxima página",
230
+ "resource.newResource": "Novo recurso",
231
+ "resource.editTitle": "Editar recurso",
232
+ "resource.createTitle": "Novo recurso",
233
+ "resource.name": "Nome",
234
+ "resource.kind": "Tipo",
235
+ "resource.timezone": "Fuso horário",
236
+ "resource.active": "Ativo",
237
+ "resource.inactive": "Inativo",
238
+ "resource.kind.person": "Pessoa",
239
+ "resource.kind.room": "Sala",
240
+ "resource.kind.equipment": "Equipamento",
241
+ "service.newService": "Novo serviço",
242
+ "service.editTitle": "Editar serviço",
243
+ "service.createTitle": "Novo serviço",
244
+ "service.name": "Nome",
245
+ "service.durationMinutes": "Duração (minutos)",
246
+ "service.bufferBeforeMinutes": "Intervalo antes (minutos)",
247
+ "service.bufferAfterMinutes": "Intervalo depois (minutos)",
248
+ "service.active": "Ativo",
249
+ "service.inactive": "Inativo",
250
+ "agenda.resourceLabel": "Recurso",
251
+ "agenda.today": "Hoje",
252
+ "agenda.previous": "Anterior",
253
+ "agenda.next": "Próximo",
254
+ "agenda.viewDay": "Dia",
255
+ "agenda.viewWeek": "Semana",
256
+ "agenda.empty": "Sem reservas neste período",
257
+ "availability.weeklyRulesTitle": "Regras semanais",
258
+ "availability.exceptionsTitle": "Exceções",
259
+ "availability.resourceTimezone": "Fuso do recurso",
260
+ "availability.addRule": "Adicionar regra",
261
+ "availability.removeRule": "Remover",
262
+ "availability.addException": "Adicionar exceção",
263
+ "availability.removeException": "Remover",
264
+ "availability.exceptionKind.blocked": "Bloqueio",
265
+ "availability.exceptionKind.extra": "Extra",
266
+ "availability.exceptionReason": "Motivo",
267
+ "availability.weekday.0": "Domingo",
268
+ "availability.weekday.1": "Segunda",
269
+ "availability.weekday.2": "Terça",
270
+ "availability.weekday.3": "Quarta",
271
+ "availability.weekday.4": "Quinta",
272
+ "availability.weekday.5": "Sexta",
273
+ "availability.weekday.6": "Sábado",
274
+ "booking.status.requested": "Solicitada",
275
+ "booking.status.confirmed": "Confirmada",
276
+ "booking.status.cancelled": "Cancelada",
277
+ "booking.status.completed": "Concluída",
278
+ "booking.status.noShow": "Não compareceu",
279
+ "booking.confirm": "Confirmar",
280
+ "booking.cancel": "Cancelar reserva",
281
+ "booking.complete": "Concluir",
282
+ "booking.markNoShow": "Marcar não compareceu",
283
+ "booking.reschedule": "Reagendar",
284
+ "booking.detailTitle": "Detalhes da reserva",
285
+ "booking.cancelReason": "Motivo do cancelamento",
286
+ "booking.cancelledBy": "Cancelado por",
287
+ "booking.column.title": "Título",
288
+ "booking.column.resource": "Recurso",
289
+ "booking.column.status": "Status",
290
+ "booking.column.startsAt": "Início",
291
+ "booking.column.endsAt": "Fim",
292
+ "booking.column.actions": "Ações",
293
+ "booking.filterByStatus": "Filtrar por status",
294
+ "booking.bulkConfirm": "Confirmar selecionadas",
295
+ "booking.bulkCancel": "Cancelar selecionadas",
296
+ "availability.weekdayLabel": "Dia da semana",
297
+ "availability.startsAtLocal": "Início",
298
+ "availability.endsAtLocal": "Fim",
299
+ "availability.exceptionFrom": "De",
300
+ "availability.exceptionUntil": "Até"
301
+ };
302
+
303
+ /**
304
+ * Copyright (c) 2026 Ada Technology. MIT License.
305
+ *
306
+ * Textos internos dos componentes (rótulos de campo, dias da semana, status). Vocabulário da moldura
307
+ * do workspace (título, abas) é responsabilidade de `workspace/labels.ts` — separado porque o host
308
+ * troca o nome de uma aba com muito mais frequência do que troca "Domingo" por outra palavra.
309
+ */
310
+
311
+ type SchedulingMessages = typeof ptBR;
312
+ type SchedulingLocale = 'pt-BR' | 'en';
313
+ declare const DEFAULT_SCHEDULING_LOCALE: SchedulingLocale;
314
+ declare function resolveSchedulingMessages(locale: string): SchedulingMessages;
315
+
316
+ export { DEFAULT_SCHEDULING_LOCALE, DEFAULT_SCHEDULING_UI_CONFIG, DEFAULT_SCHEDULING_WORKSPACE_LABELS, SCHEDULING_QUERY_KEYS, SCHEDULING_WORKSPACE_AREA, type SchedulingApi, type SchedulingLocale, type SchedulingMessages, SchedulingProvider, type SchedulingProviderProps, type SchedulingUiConfig, SchedulingWorkspace, type SchedulingWorkspaceArea, type SchedulingWorkspaceLabels, type SchedulingWorkspaceProps, type UseAvailableSlotsParams, type UseBookingsParams, type UseResourcesOptions, type UseServicesOptions, isSchedulingWorkspaceArea, resolveSchedulingMessages, useAddAvailabilityException, useAvailabilityExceptions, useAvailabilityRules, useAvailableSlots, useBooking, useBookings, useCancelBooking, useCompleteBooking, useConfirmBooking, useCreateResource, useCreateService, useDeleteResource, useDeleteService, useMarkNoShow, useRemoveAvailabilityException, useRequestBooking, useRescheduleBooking, useResources, useScheduling, useSchedulingConfig, useServices, useSetAvailabilityRules, useUpdateResource, useUpdateService };