@snksergio/design-system 0.55.0 → 0.57.0
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.
- package/dist-lib/index.cjs +2597 -3
- package/dist-lib/index.cjs.map +1 -1
- package/dist-lib/index.mjs +2631 -37
- package/dist-lib/index.mjs.map +1 -1
- package/dist-lib/src/components/index.d.ts +1 -0
- package/dist-lib/src/components/index.d.ts.map +1 -1
- package/dist-lib/src/components/ui/Scheduler/hooks/layout.d.ts +165 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/layout.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-media-query.d.ts +21 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-media-query.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-dnd.d.ts +41 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-dnd.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-filter.d.ts +35 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-filter.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-keyboard.d.ts +47 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-keyboard.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-state.d.ts +44 -0
- package/dist-lib/src/components/ui/Scheduler/hooks/use-scheduler-state.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/index.d.ts +14 -0
- package/dist-lib/src/components/ui/Scheduler/index.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/parts/draggable-event.d.ts +30 -0
- package/dist-lib/src/components/ui/Scheduler/parts/draggable-event.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/parts/mini-month.d.ts +28 -0
- package/dist-lib/src/components/ui/Scheduler/parts/mini-month.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/parts/scheduler-event.d.ts +53 -0
- package/dist-lib/src/components/ui/Scheduler/parts/scheduler-event.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/parts/scheduler-filter-panel.d.ts +54 -0
- package/dist-lib/src/components/ui/Scheduler/parts/scheduler-filter-panel.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/parts/scheduler-toolbar.d.ts +25 -0
- package/dist-lib/src/components/ui/Scheduler/parts/scheduler-toolbar.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/scheduler.d.ts +44 -0
- package/dist-lib/src/components/ui/Scheduler/scheduler.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/scheduler.styles.d.ts +911 -0
- package/dist-lib/src/components/ui/Scheduler/scheduler.styles.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/scheduler.types.d.ts +285 -0
- package/dist-lib/src/components/ui/Scheduler/scheduler.types.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/views/list.d.ts +33 -0
- package/dist-lib/src/components/ui/Scheduler/views/list.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/views/month.d.ts +47 -0
- package/dist-lib/src/components/ui/Scheduler/views/month.d.ts.map +1 -0
- package/dist-lib/src/components/ui/Scheduler/views/time-grid.d.ts +48 -0
- package/dist-lib/src/components/ui/Scheduler/views/time-grid.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/Scheduler/scheduler.styles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* União fechada sobre as 6 famílias semânticas existentes do DS. `brand`,
|
|
5
|
+
* não `primary` — `primary` é a nomenclatura V2 extinta que só o `Chip`
|
|
6
|
+
* ainda carrega por herança; componente novo não herda essa dívida
|
|
7
|
+
* (CLAUDE.md §Nomenclatura de cores). Default visual: `"brand"`.
|
|
8
|
+
*
|
|
9
|
+
* Teto real são ~5 categorias visualmente separáveis, não 6: `brand` e
|
|
10
|
+
* `success` são ambos verdes (10° de matiz) e não devem ser usados como
|
|
11
|
+
* duas categorias adjacentes no mesmo calendário — documentado em detalhe
|
|
12
|
+
* no `USAGE.md` (fatia de showcase).
|
|
13
|
+
*
|
|
14
|
+
* Gatilho de reabertura pra uma paleta categórica própria (spec §2.4): um
|
|
15
|
+
* consumidor real precisando de 6+ categorias simultâneas no mesmo
|
|
16
|
+
* calendário. Até lá esta união de 6 nomes é a fronteira; ampliá-la depois
|
|
17
|
+
* é aditivo, não breaking.
|
|
18
|
+
*/
|
|
19
|
+
export type SchedulerEventColor = "brand" | "info" | "success" | "warning" | "danger" | "neutral";
|
|
20
|
+
/**
|
|
21
|
+
* Um evento do calendário. O `Scheduler` nunca muta este objeto nem o
|
|
22
|
+
* array `events` — toda mudança (mover, redimensionar) é emitida via
|
|
23
|
+
* callback (`onEventMove`/`onEventResize`) e o consumidor decide se e
|
|
24
|
+
* como aplica.
|
|
25
|
+
*/
|
|
26
|
+
export type SchedulerEvent = {
|
|
27
|
+
/** Identificador único — usado em lane-packing, dnd e `aria-label`. */
|
|
28
|
+
id: string;
|
|
29
|
+
/** Título visível. `ReactNode` pra permitir markup rico no pill/bloco. */
|
|
30
|
+
title: ReactNode;
|
|
31
|
+
/** Início. */
|
|
32
|
+
start: Date;
|
|
33
|
+
/**
|
|
34
|
+
* Fim — **obrigatório**, nunca opcional. `end` opcional obrigaria cada
|
|
35
|
+
* função de `hooks/layout.ts` a inventar uma duração default; duração
|
|
36
|
+
* zero é caso legítimo (`start === end` — ver `packLanes` e
|
|
37
|
+
* `computeOverflow`) e deve ser dita como igualdade, não como ausência.
|
|
38
|
+
*
|
|
39
|
+
* Invariante `end >= start` é responsabilidade de quem monta o evento
|
|
40
|
+
* nesta fatia — `hooks/layout.ts` é puro e não normaliza entrada
|
|
41
|
+
* inválida (a normalização com `console.warn` em DEV é da fatia 2, em
|
|
42
|
+
* `use-scheduler-state.ts`).
|
|
43
|
+
*/
|
|
44
|
+
end: Date;
|
|
45
|
+
/**
|
|
46
|
+
* Evento de dia inteiro. Quando `true`, a hora de `start`/`end` é
|
|
47
|
+
* ignorada — a faixa considerada é `[startOfDay(start), endOfDay(end)]`.
|
|
48
|
+
*/
|
|
49
|
+
allDay?: boolean;
|
|
50
|
+
/** Categoria de cor do pill/bloco/dot. Default visual: `"brand"`. */
|
|
51
|
+
color?: SchedulerEventColor;
|
|
52
|
+
/** Id de categoria livre do consumidor — não interpretado pelo componente. */
|
|
53
|
+
categoryId?: string;
|
|
54
|
+
/** Ids de tags livres do consumidor — não interpretados pelo componente. */
|
|
55
|
+
tagIds?: string[];
|
|
56
|
+
/** Descrição — aparece na view `list` e no `aria-label` estendido. */
|
|
57
|
+
description?: ReactNode;
|
|
58
|
+
/** Sobrepõe o `draggable` global (prop do `<Scheduler>`) só pra este evento. */
|
|
59
|
+
draggable?: boolean;
|
|
60
|
+
/** Sobrepõe o `resizable` global só pra este evento. */
|
|
61
|
+
resizable?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Payload cru do domínio do consumidor, devolvido intacto em
|
|
64
|
+
* `onEventClick`. É o que impede o `Scheduler` de conhecer o domínio —
|
|
65
|
+
* mesma escolha do `meta` de card do `Kanban`.
|
|
66
|
+
*/
|
|
67
|
+
meta?: unknown;
|
|
68
|
+
/**
|
|
69
|
+
* Texto pra busca quando `title` não é uma string simples. O motor de
|
|
70
|
+
* busca (`searchable`) casa **só string**: varrer a árvore de um
|
|
71
|
+
* `ReactNode` pra extrair texto é caro e frágil. Sem `searchText`, um
|
|
72
|
+
* evento com `title` rico (ex: `<b>Reunião</b> — Cliente X`) não é
|
|
73
|
+
* encontrado pela busca — silenciosamente. Documentar isso é melhor do
|
|
74
|
+
* que fingir que a busca "sempre funciona".
|
|
75
|
+
*/
|
|
76
|
+
searchText?: string;
|
|
77
|
+
};
|
|
78
|
+
export type SchedulerView = "month" | "week" | "day" | "list";
|
|
79
|
+
export type SchedulerHourFormat = "12h" | "24h";
|
|
80
|
+
/**
|
|
81
|
+
* União fechada, não `number`: `snapMinutes: 7` produziria uma grade que
|
|
82
|
+
* não fecha na hora.
|
|
83
|
+
*/
|
|
84
|
+
export type SchedulerSnapMinutes = 15 | 30 | 60;
|
|
85
|
+
/** Em `"server"` o componente só emite `onFilterModelChange`; não filtra. */
|
|
86
|
+
export type SchedulerFilterMode = "client" | "server";
|
|
87
|
+
/** Qual alça de resize está sendo arrastada. */
|
|
88
|
+
export type SchedulerResizeEdge = "start" | "end";
|
|
89
|
+
/** Uma opção de um `SchedulerFilterField` — vira 1 chip quando aplicada. */
|
|
90
|
+
export type SchedulerFilterOption = {
|
|
91
|
+
value: string;
|
|
92
|
+
label: string;
|
|
93
|
+
/** Cor do dot do chip, quando o filtro espelha a paleta de evento. */
|
|
94
|
+
color?: SchedulerEventColor;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Campo de filtro declarativo. O `Scheduler` renderiza os chips **e**
|
|
98
|
+
* filtra sozinho (modo `"client"`) — nunca um form solto acima da grade
|
|
99
|
+
* (L-051).
|
|
100
|
+
*/
|
|
101
|
+
export type SchedulerFilterField = {
|
|
102
|
+
id: string;
|
|
103
|
+
label: string;
|
|
104
|
+
options: SchedulerFilterOption[];
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Valores selecionados por campo de filtro — `fieldId → values[]`. Um
|
|
108
|
+
* `fieldId` ausente do model equivale a "sem filtro aplicado naquele
|
|
109
|
+
* campo" (não a "todas as opções selecionadas").
|
|
110
|
+
*/
|
|
111
|
+
export type SchedulerFilterModel = Record<string, string[]>;
|
|
112
|
+
export type SchedulerRef = {
|
|
113
|
+
/** Move a data-âncora do período pra `date` (sem trocar de view). */
|
|
114
|
+
goToDate: (date: Date) => void;
|
|
115
|
+
/** Atalho pra `goToDate(new Date())`. */
|
|
116
|
+
goToToday: () => void;
|
|
117
|
+
/** Avança 1 período (dia/semana/mês, conforme a view ativa). */
|
|
118
|
+
next: () => void;
|
|
119
|
+
/** Volta 1 período. */
|
|
120
|
+
prev: () => void;
|
|
121
|
+
/**
|
|
122
|
+
* Janela de datas atualmente visível. Existe pra `filterMode="server"`:
|
|
123
|
+
* o consumidor precisa saber qual intervalo buscar, e derivar isso de
|
|
124
|
+
* fora duplicaria a lógica de `hooks/layout.ts`.
|
|
125
|
+
*/
|
|
126
|
+
getVisibleRange: () => {
|
|
127
|
+
start: Date;
|
|
128
|
+
end: Date;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
/** Parâmetros passados pro callback `renderEvent`. */
|
|
132
|
+
export type SchedulerRenderEventParams = {
|
|
133
|
+
event: SchedulerEvent;
|
|
134
|
+
view: SchedulerView;
|
|
135
|
+
selected: boolean;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Payload emitido por `onEventMove`/`onEventResize`. O componente
|
|
139
|
+
* **emite**, nunca muta `events` — o consumidor decide se e como aplica
|
|
140
|
+
* (mesma gramática do `onCardMove` do `Kanban`).
|
|
141
|
+
*/
|
|
142
|
+
export type SchedulerEventChange = {
|
|
143
|
+
id: string;
|
|
144
|
+
start: Date;
|
|
145
|
+
end: Date;
|
|
146
|
+
};
|
|
147
|
+
export type SchedulerProps = {
|
|
148
|
+
/** Única fonte de eventos. O componente nunca muta este array. */
|
|
149
|
+
events: SchedulerEvent[];
|
|
150
|
+
/** Locale do date-fns — nome de mês/dia e 1ª letra do weekday saem daqui. */
|
|
151
|
+
locale?: Locale;
|
|
152
|
+
/** Primeiro dia da semana. Default `0` (domingo) — convenção BR fechada. */
|
|
153
|
+
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
154
|
+
/** Formato de hora do gutter/pill. `"12h"` muda a largura do gutter. */
|
|
155
|
+
hourFormat?: SchedulerHourFormat;
|
|
156
|
+
/**
|
|
157
|
+
* Recorte de horas visíveis na grade de week/day. Não é scroll — é o
|
|
158
|
+
* que existe na grade (ex: `[8, 18]` não renderiza madrugada).
|
|
159
|
+
*/
|
|
160
|
+
dayRange?: [number, number];
|
|
161
|
+
/**
|
|
162
|
+
* Âncora inicial do scroll, separada de `dayRange` porque "mostrar
|
|
163
|
+
* 0–24 mas começar às 8" é o caso comum.
|
|
164
|
+
*/
|
|
165
|
+
scrollToHour?: number;
|
|
166
|
+
/** Linha do "agora" em week/day. Default `true`. */
|
|
167
|
+
nowIndicator?: boolean;
|
|
168
|
+
defaultDate?: Date;
|
|
169
|
+
date?: Date;
|
|
170
|
+
onDateChange?: (date: Date) => void;
|
|
171
|
+
defaultView?: SchedulerView;
|
|
172
|
+
view?: SchedulerView;
|
|
173
|
+
onViewChange?: (view: SchedulerView) => void;
|
|
174
|
+
/**
|
|
175
|
+
* O 2º argumento entrega o alvo pro consumidor ancorar painel/popover.
|
|
176
|
+
* Tipado com `KeyboardEvent` também porque `Enter`/`Space` abrem o
|
|
177
|
+
* evento focado (§6.2 da spec).
|
|
178
|
+
*/
|
|
179
|
+
onEventClick?: (event: SchedulerEvent, evt: React.MouseEvent | React.KeyboardEvent) => void;
|
|
180
|
+
/** `+` revelado no hover da célula, e clique em faixa vazia. */
|
|
181
|
+
onSlotClick?: (start: Date, end: Date) => void;
|
|
182
|
+
/** Emite. Não muta — o consumidor aplica em `events`. */
|
|
183
|
+
onEventMove?: (change: SchedulerEventChange) => void;
|
|
184
|
+
/**
|
|
185
|
+
* Separado de `onEventMove` porque a intenção de negócio difere
|
|
186
|
+
* (reagendar × mudar duração) e frequentemente tem permissão diferente.
|
|
187
|
+
*/
|
|
188
|
+
onEventResize?: (change: SchedulerEventChange) => void;
|
|
189
|
+
/**
|
|
190
|
+
* Global; `event.draggable` sobrepõe. Default **`false`** — dnd ligado
|
|
191
|
+
* sem `onEventMove` conectado deixa o usuário arrastar e ver o evento
|
|
192
|
+
* voltar sozinho (o pior estado possível: parece bug do app). Em DEV,
|
|
193
|
+
* `draggable && !onEventMove` deve emitir `console.warn` — mesma razão
|
|
194
|
+
* do `enableDnD` do `Kanban`.
|
|
195
|
+
*/
|
|
196
|
+
draggable?: boolean;
|
|
197
|
+
/** Global; `event.resizable` sobrepõe. Default `false`. */
|
|
198
|
+
resizable?: boolean;
|
|
199
|
+
/** Default `15`. */
|
|
200
|
+
snapMinutes?: SchedulerSnapMinutes;
|
|
201
|
+
/**
|
|
202
|
+
* Preview local durante o gesto de dnd. Opt-in porque, ligado, o
|
|
203
|
+
* componente passa a ter um estado que pode divergir de `events`.
|
|
204
|
+
*/
|
|
205
|
+
optimistic?: boolean;
|
|
206
|
+
/** Casa `title` (ou `searchText`), `description` e labels de `tagIds`. */
|
|
207
|
+
searchable?: boolean;
|
|
208
|
+
search?: string;
|
|
209
|
+
onSearchChange?: (search: string) => void;
|
|
210
|
+
/** Declarativo: o componente renderiza os chips e filtra sozinho. */
|
|
211
|
+
filterFields?: SchedulerFilterField[];
|
|
212
|
+
filterModel?: SchedulerFilterModel;
|
|
213
|
+
onFilterModelChange?: (model: SchedulerFilterModel) => void;
|
|
214
|
+
/** Default `"client"`. */
|
|
215
|
+
filterMode?: SchedulerFilterMode;
|
|
216
|
+
/**
|
|
217
|
+
* O painel de filtro já vem aberto. Default `false`.
|
|
218
|
+
*
|
|
219
|
+
* Ele é uma **coluna** à direita da grade, não um overlay: abrir encolhe a
|
|
220
|
+
* grade em ~296px. Por isso nasce fechado — e por isso não existe abaixo de
|
|
221
|
+
* 1024px, onde a coluna extra não caberia junto de uma semana legível.
|
|
222
|
+
*
|
|
223
|
+
* Só o estado INICIAL é prop: depois é o usuário que abre e fecha. Um par
|
|
224
|
+
* controlado (`filterPanelOpen` + `onFilterPanelOpenChange`) entraria se
|
|
225
|
+
* alguma tela precisasse dirigir isso de fora — nenhuma precisa hoje, e
|
|
226
|
+
* `defaultX` sem `x` é a metade que não mente sobre o que existe.
|
|
227
|
+
*/
|
|
228
|
+
defaultFilterPanelOpen?: boolean;
|
|
229
|
+
/** Área custom, entre o botão de filtro e o seletor de view. */
|
|
230
|
+
toolbarActions?: ReactNode;
|
|
231
|
+
/**
|
|
232
|
+
* Slot do botão primário à direita. `ReactNode`, não `{ label, onClick }`,
|
|
233
|
+
* porque o consumidor já tem `Button` do DS e pode querer split button
|
|
234
|
+
* ou botão só de ícone.
|
|
235
|
+
*/
|
|
236
|
+
primaryAction?: ReactNode;
|
|
237
|
+
/** Override do título do período (default derivado de `date`+`view`+`locale`). */
|
|
238
|
+
title?: ReactNode;
|
|
239
|
+
/**
|
|
240
|
+
* Substitui só o miolo do pill/bloco/linha — o wrapper (posicionamento,
|
|
241
|
+
* foco, dnd, borda) permanece do componente. Mesma divisão do
|
|
242
|
+
* `renderCard` do `Kanban`, pela mesma razão: garante consistência
|
|
243
|
+
* entre calendários.
|
|
244
|
+
*/
|
|
245
|
+
renderEvent?: (params: SchedulerRenderEventParams) => ReactNode;
|
|
246
|
+
/** Só a view `list` tem empty state — mês vazio é grade vazia legítima. */
|
|
247
|
+
emptyState?: ReactNode;
|
|
248
|
+
/** ClassName extra no root. */
|
|
249
|
+
className?: string;
|
|
250
|
+
};
|
|
251
|
+
/**
|
|
252
|
+
* Um recorte de evento multi-dia dentro de UMA linha (semana) da grade do
|
|
253
|
+
* mês. Um evento que atravessa 2 semanas vira 2 `MonthSegment`s — um por
|
|
254
|
+
* linha da grade (spec §7 #1).
|
|
255
|
+
*/
|
|
256
|
+
export type MonthSegment = {
|
|
257
|
+
event: SchedulerEvent;
|
|
258
|
+
/** Índice da linha (0–5) em `Date[][]`, o retorno de `buildMonthMatrix`. */
|
|
259
|
+
weekIndex: number;
|
|
260
|
+
/** Coluna inicial do segmento nesta linha (0–6). */
|
|
261
|
+
colStart: number;
|
|
262
|
+
/** Quantas colunas o segmento ocupa nesta linha. */
|
|
263
|
+
colSpan: number;
|
|
264
|
+
/**
|
|
265
|
+
* `true` quando este segmento contém o dia real de início do evento.
|
|
266
|
+
* `false` quando o segmento é a continuação truncada de uma linha ou de
|
|
267
|
+
* um mês anterior — nesse caso a barra não deve ter canto arredondado
|
|
268
|
+
* nem "ponta" desse lado (spec §5.1, §7 #2/#6/#7).
|
|
269
|
+
*/
|
|
270
|
+
isStart: boolean;
|
|
271
|
+
/** Espelho de `isStart` para o fim do evento. */
|
|
272
|
+
isEnd: boolean;
|
|
273
|
+
};
|
|
274
|
+
/** Posição de um evento numa "lane" horizontal, após `packLanes`. */
|
|
275
|
+
export type LaneBox = {
|
|
276
|
+
event: SchedulerEvent;
|
|
277
|
+
/** Índice da lane (0-based) dentro do grupo conexo de colisão. */
|
|
278
|
+
laneIndex: number;
|
|
279
|
+
/**
|
|
280
|
+
* Total de lanes do grupo conexo — **não** do dia inteiro (spec §7 #3).
|
|
281
|
+
* Largura de render = `1 / laneCount`; `left = laneIndex / laneCount`.
|
|
282
|
+
*/
|
|
283
|
+
laneCount: number;
|
|
284
|
+
};
|
|
285
|
+
//# sourceMappingURL=scheduler.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/Scheduler/scheduler.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
import { SchedulerEvent, SchedulerHourFormat, SchedulerRenderEventParams } from '../scheduler.types';
|
|
3
|
+
/**
|
|
4
|
+
* View `list` — a agenda.
|
|
5
|
+
*
|
|
6
|
+
* ## Só os dias QUE TÊM evento
|
|
7
|
+
*
|
|
8
|
+
* A grade do mês mostra os 42 dias porque a grade *é* a informação: um dia vazio
|
|
9
|
+
* ali diz "nada marcado nesta terça". Aqui não — uma agenda que lista 30 dias
|
|
10
|
+
* pra mostrar 8 eventos obriga a rolar por 22 blocos vazios. Dia sem evento
|
|
11
|
+
* simplesmente não aparece, e o salto entre datas é o próprio sinal de que não
|
|
12
|
+
* há nada no meio.
|
|
13
|
+
*
|
|
14
|
+
* ## A janela é o MÊS da âncora
|
|
15
|
+
*
|
|
16
|
+
* Mesmo recorte que `useSchedulerState.visibleRange` calcula pra `list`, e
|
|
17
|
+
* recalculado aqui a partir de `date` pelas mesmas regras — não recebido por
|
|
18
|
+
* prop, pra que a view não dependa da ordem em que o pai monta as coisas. As
|
|
19
|
+
* setas da toolbar andam de DIA nesta view (decisão registrada no hook), então o
|
|
20
|
+
* usuário navega dentro do mês sem que a lista salte de mês a cada clique.
|
|
21
|
+
*/
|
|
22
|
+
export type SchedulerListViewProps = {
|
|
23
|
+
date: Date;
|
|
24
|
+
events: SchedulerEvent[];
|
|
25
|
+
locale?: Locale;
|
|
26
|
+
hourFormat: SchedulerHourFormat;
|
|
27
|
+
now: Date;
|
|
28
|
+
onEventClick?: (event: SchedulerEvent, evt: React.MouseEvent | React.KeyboardEvent) => void;
|
|
29
|
+
renderEvent?: (params: SchedulerRenderEventParams) => React.ReactNode;
|
|
30
|
+
emptyState?: React.ReactNode;
|
|
31
|
+
};
|
|
32
|
+
export declare function SchedulerListView({ date, events, locale, hourFormat, now, onEventClick, renderEvent, emptyState, }: SchedulerListViewProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Scheduler/views/list.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,MAAM,EACZ,MAAM,UAAU,CAAC;AAYlB,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,mBAAmB,CAAC;IAChC,GAAG,EAAE,IAAI,CAAC;IACV,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,KACxC,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,KAAK,CAAC,SAAS,CAAC;IACtE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,MAAM,EACN,MAAM,EACN,UAAU,EACV,GAAG,EACH,YAAY,EACZ,WAAW,EACX,UAAU,GACX,EAAE,sBAAsB,2CA6GxB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
import { SchedulerEvent, SchedulerHourFormat, SchedulerRenderEventParams } from '../scheduler.types';
|
|
3
|
+
/**
|
|
4
|
+
* View de mês — grade 6×7 fixa.
|
|
5
|
+
*
|
|
6
|
+
* ## Por que os eventos são desenhados POR CÉLULA e não como barras absolutas
|
|
7
|
+
*
|
|
8
|
+
* A `segmentMultiDay` já devolve `colStart`/`colSpan` por linha, o que
|
|
9
|
+
* permitiria posicionar cada evento multi-dia como uma barra única atravessando
|
|
10
|
+
* as colunas. Esta fatia **não** faz isso: uma barra absoluta precisa reservar
|
|
11
|
+
* a mesma faixa vertical em todas as células que atravessa, senão ela cobre o
|
|
12
|
+
* evento de um dia vizinho. Esse reservatório é lane-packing por LINHA da
|
|
13
|
+
* grade (não por dia), e é trabalho da fatia que traz o dnd — onde a posição
|
|
14
|
+
* já vai ter que ser calculada em px de qualquer forma.
|
|
15
|
+
*
|
|
16
|
+
* O que existe aqui e é honesto: o evento multi-dia aparece em **cada dia que
|
|
17
|
+
* ocupa**, com `truncateStart`/`truncateEnd` marcando a continuação, então o
|
|
18
|
+
* usuário lê a extensão dele corretamente. A barra contínua é refinamento
|
|
19
|
+
* visual, não informação nova.
|
|
20
|
+
*/
|
|
21
|
+
export type SchedulerMonthViewProps = {
|
|
22
|
+
date: Date;
|
|
23
|
+
events: SchedulerEvent[];
|
|
24
|
+
locale?: Locale;
|
|
25
|
+
weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
26
|
+
hourFormat: SchedulerHourFormat;
|
|
27
|
+
now: Date;
|
|
28
|
+
/**
|
|
29
|
+
* Trava quantos pills aparecem por célula. **Omita** no caso normal: sem ela,
|
|
30
|
+
* o corte é DERIVADO da altura real da linha, que é o que faz o calendário
|
|
31
|
+
* aproveitar a tela quando usado como página inteira — célula alta mostra 8
|
|
32
|
+
* eventos, célula baixa mostra 2, sem ninguém configurar nada.
|
|
33
|
+
*
|
|
34
|
+
* Use só quando a tela precisa de altura de linha previsível
|
|
35
|
+
* independentemente do conteúdo.
|
|
36
|
+
*/
|
|
37
|
+
maxPerCell?: number;
|
|
38
|
+
onEventClick?: (event: SchedulerEvent, evt: React.MouseEvent | React.KeyboardEvent) => void;
|
|
39
|
+
onSlotClick?: (start: Date, end: Date) => void;
|
|
40
|
+
renderEvent?: (params: SchedulerRenderEventParams) => React.ReactNode;
|
|
41
|
+
/** Liga os droppables. `false` deixa o dnd inerte sem desmontar nada. */
|
|
42
|
+
dndAtivo?: boolean;
|
|
43
|
+
/** Decide por evento se ele pode ser arrastado — vem do hook de dnd. */
|
|
44
|
+
podeMover?: (event: SchedulerEvent) => boolean;
|
|
45
|
+
};
|
|
46
|
+
export declare function SchedulerMonthView({ date, events, locale, weekStartsOn, hourFormat, now, maxPerCell, onEventClick, onSlotClick, renderEvent, dndAtivo, podeMover, }: SchedulerMonthViewProps): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
//# sourceMappingURL=month.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Scheduler/views/month.tsx"],"names":[],"mappings":"AACA,OAAO,EAA8C,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAsBnF,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,UAAU,EAAE,mBAAmB,CAAC;IAChC,GAAG,EAAE,IAAI,CAAC;IACV;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,KACxC,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/C,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,KAAK,CAAC,SAAS,CAAC;IACtE,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC;CAChD,CAAC;AAuBF,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,GAAG,EACH,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,QAAgB,EAChB,SAAS,GACV,EAAE,uBAAuB,2CAkRzB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
import { SchedulerEvent, SchedulerHourFormat, SchedulerRenderEventParams, SchedulerSnapMinutes, SchedulerView } from '../scheduler.types';
|
|
3
|
+
/**
|
|
4
|
+
* Grade de horas — serve `week` (7 colunas) e `day` (1 coluna).
|
|
5
|
+
*
|
|
6
|
+
* Uma view só, não duas: o gutter de horas, a banda de dia inteiro, o
|
|
7
|
+
* lane-packing de sobreposição, a linha do "agora" e o alvo de clique por faixa
|
|
8
|
+
* são idênticos; o que muda é quantas colunas o `.map` produz. Dois arquivos
|
|
9
|
+
* duplicariam cinco mecanismos pra ganhar zero.
|
|
10
|
+
*
|
|
11
|
+
* ## O acoplamento com o token, declarado
|
|
12
|
+
*
|
|
13
|
+
* `HOUR_HEIGHT_PX` espelha `h-comp-3xl` (48px). Posicionamento absoluto exige a
|
|
14
|
+
* altura como NÚMERO em JS — `minutesToOffset()` devolve px. Não há como derivar
|
|
15
|
+
* isso do CSS sem medir o DOM, e medir antes do primeiro paint produziria um
|
|
16
|
+
* salto visível. A nota inversa está em `scheduler.styles.ts`, no
|
|
17
|
+
* `schedulerTimeFrame`.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Espelha `h-comp-3xl` — ver nota acima.
|
|
21
|
+
*
|
|
22
|
+
* Exportado porque o `use-scheduler-dnd` precisa do MESMO número pra converter
|
|
23
|
+
* `delta.y` em minutos. Duas constantes iguais em arquivos diferentes é como o
|
|
24
|
+
* arraste passa a mover o evento pra uma hora que não é a que o cursor aponta.
|
|
25
|
+
*/
|
|
26
|
+
export declare const HOUR_HEIGHT_PX = 48;
|
|
27
|
+
export type SchedulerTimeGridProps = {
|
|
28
|
+
date: Date;
|
|
29
|
+
view: Extract<SchedulerView, "week" | "day">;
|
|
30
|
+
events: SchedulerEvent[];
|
|
31
|
+
locale?: Locale;
|
|
32
|
+
weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
33
|
+
hourFormat: SchedulerHourFormat;
|
|
34
|
+
dayRange: [number, number];
|
|
35
|
+
scrollToHour: number;
|
|
36
|
+
nowIndicator: boolean;
|
|
37
|
+
now: Date;
|
|
38
|
+
snapMinutes: SchedulerSnapMinutes;
|
|
39
|
+
onEventClick?: (event: SchedulerEvent, evt: React.MouseEvent | React.KeyboardEvent) => void;
|
|
40
|
+
onSlotClick?: (start: Date, end: Date) => void;
|
|
41
|
+
renderEvent?: (params: SchedulerRenderEventParams) => React.ReactNode;
|
|
42
|
+
/** Liga os droppables das colunas. */
|
|
43
|
+
dndAtivo?: boolean;
|
|
44
|
+
podeMover?: (event: SchedulerEvent) => boolean;
|
|
45
|
+
podeRedimensionar?: (event: SchedulerEvent) => boolean;
|
|
46
|
+
};
|
|
47
|
+
export declare function SchedulerTimeGrid({ date, view, events, locale, weekStartsOn, hourFormat, dayRange, scrollToHour, nowIndicator, now, snapMinutes, onEventClick, onSlotClick, renderEvent, dndAtivo, podeMover, podeRedimensionar, }: SchedulerTimeGridProps): import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
//# sourceMappingURL=time-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-grid.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ui/Scheduler/views/time-grid.tsx"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,MAAM,EACZ,MAAM,UAAU,CAAC;AA2BlB,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AASjC,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IAC7C,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,UAAU,EAAE,mBAAmB,CAAC;IAChC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,IAAI,CAAC;IACV,WAAW,EAAE,oBAAoB,CAAC;IAClC,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,KACxC,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/C,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,KAAK,CAAC,SAAS,CAAC;IACtE,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC;CACxD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,GAAG,EACH,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,QAAgB,EAChB,SAAS,EACT,iBAAiB,GAClB,EAAE,sBAAsB,2CA+TxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@snksergio/design-system",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.57.0",
|
|
4
4
|
"//distribuicao": "Canal PRIMARIO = registry shadcn (copy-in) + CLI @snksergio/create-design-system; sobe sozinho no merge (Vercel). Canal SECUNDARIO = este pacote npm (@snksergio/design-system), publicado por passo MANUAL do mantenedor, entao costuma ficar atras do registry. SECUNDARIO descreve a ORDEM DE PUBLICACAO, nao o nivel de suporte: NAO e depreciado, e desde a 0.37.0 entrega 41 dos 42 componentes ui/ no barrel raiz + os 41 primitivos shadcn no subpath ./shadcn (so TabelaTeste, demo interno, fica de fora). Publish so pelo Passo 7 do .claude/skills/ds-dev/release.md (valida com `npm run lib:verify`, pede o token, publica, revoga). Ver DISTRIBUICAO.md.",
|
|
5
5
|
"description": "iGreen Design System — internal library for SaaS CRM, admin panels and dashboards. React 19 + Tailwind v4 + Shadcn + Radix.",
|
|
6
6
|
"license": "UNLICENSED",
|