@savvycal/calendar 0.3.0 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceColumn.d.ts","sourceRoot":"","sources":["../../../src/components/resource-grid-view/ResourceColumn.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAG1B,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,0BAA0B,KAAK,MAAM,CAAC;IACvD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,kBAAkB,CAAC;QAC1B,QAAQ,EAAE,eAAe,CAAC;KAC3B,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,cAAc,2DA4CzB,CAAC"}
1
+ {"version":3,"file":"ResourceColumn.d.ts","sourceRoot":"","sources":["../../../src/components/resource-grid-view/ResourceColumn.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAG1B,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,0BAA0B,KAAK,MAAM,CAAC;IACvD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,kBAAkB,CAAC;QAC1B,QAAQ,EAAE,eAAe,CAAC;KAC3B,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,cAAc,2DA6CzB,CAAC"}
@@ -1,45 +1,46 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- import { memo as p } from "react";
3
- import { EventChip as R } from "./EventChip.js";
4
- const x = p(function({
5
- resource: t,
6
- positionedEvents: m,
7
- column: i,
8
- timeZone: c,
9
- cls: n,
10
- onEventClick: l,
11
- renderEvent: u,
12
- eventGap: s,
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import { memo as f } from "react";
3
+ import { EventChip as p } from "./EventChip.js";
4
+ const x = f(function({
5
+ resource: r,
6
+ positionedEvents: i,
7
+ column: m,
8
+ timeZone: l,
9
+ cls: o,
10
+ onEventClick: s,
11
+ renderEvent: c,
12
+ eventGap: u,
13
13
  eventLayout: v,
14
14
  stackOffset: d,
15
15
  selectedEventId: C,
16
- selectedEventRef: f
16
+ selectedEventRef: a
17
17
  }) {
18
- return /* @__PURE__ */ r(
18
+ return /* @__PURE__ */ t(
19
19
  "div",
20
20
  {
21
- className: n("eventColumn"),
21
+ className: o("eventColumn"),
22
22
  style: {
23
23
  gridRow: "3 / -1",
24
- gridColumn: i,
25
- pointerEvents: "none"
24
+ gridColumn: m,
25
+ pointerEvents: "none",
26
+ isolation: "isolate"
26
27
  },
27
- children: m.map((e) => {
28
- const o = e.event.id === C;
29
- return /* @__PURE__ */ r(
30
- R,
28
+ children: i.map((e) => {
29
+ const n = e.event.id === C;
30
+ return /* @__PURE__ */ t(
31
+ p,
31
32
  {
32
33
  positioned: e,
33
- resource: t,
34
- timeZone: c,
35
- cls: n,
36
- onClick: l,
37
- renderEvent: u,
38
- eventGap: s,
34
+ resource: r,
35
+ timeZone: l,
36
+ cls: o,
37
+ onClick: s,
38
+ renderEvent: c,
39
+ eventGap: u,
39
40
  eventLayout: v,
40
41
  stackOffset: d,
41
- isSelected: o,
42
- selectedEventRef: o ? f : void 0
42
+ isSelected: n,
43
+ selectedEventRef: n ? a : void 0
43
44
  },
44
45
  e.event.id
45
46
  );
@@ -1,5 +1,5 @@
1
1
  import { jsxs as L, jsx as n } from "react/jsx-runtime";
2
- import { useCallback as v, useRef as U, useState as ft, useEffect as V, useMemo as p } from "react";
2
+ import { useCallback as T, useRef as U, useState as ft, useEffect as V, useMemo as p } from "react";
3
3
  import { cn as $ } from "../../lib/utils.js";
4
4
  import { generateTimeSlots as pt, formatDateLabel as ht, formatTimeRange as z } from "../../lib/time.js";
5
5
  import { groupByResource as gt, computePositionedEvents as yt } from "../../lib/overlap.js";
@@ -8,10 +8,10 @@ import { resourceGridViewDefaults as Ht } from "./defaults.js";
8
8
  import { GridHeader as Rt } from "./GridHeader.js";
9
9
  import { TimeGutter as St } from "./TimeGutter.js";
10
10
  import { ResourceColumn as bt } from "./ResourceColumn.js";
11
- import { SlotInteractionLayer as Ct } from "./SlotInteractionLayer.js";
12
- import { SelectionOverlay as Dt } from "./SelectionOverlay.js";
13
- import { UnavailabilityOverlay as Tt } from "./UnavailabilityOverlay.js";
14
- import { NowIndicator as vt } from "./NowIndicator.js";
11
+ import { SlotInteractionLayer as vt } from "./SlotInteractionLayer.js";
12
+ import { SelectionOverlay as Ct } from "./SelectionOverlay.js";
13
+ import { UnavailabilityOverlay as Dt } from "./UnavailabilityOverlay.js";
14
+ import { NowIndicator as Tt } from "./NowIndicator.js";
15
15
  import { AllDayRow as $t } from "./AllDayRow.js";
16
16
  import { useEffectiveHourHeight as xt } from "./useEffectiveHourHeight.js";
17
17
  import { useAnnouncer as kt } from "./useAnnouncer.js";
@@ -27,7 +27,7 @@ function qt({
27
27
  snapDuration: N,
28
28
  placeholderDuration: A,
29
29
  selectedRange: m,
30
- onSelect: u,
30
+ onSelect: s,
31
31
  onSlotClick: F,
32
32
  className: K,
33
33
  classNames: E,
@@ -44,9 +44,9 @@ function qt({
44
44
  renderCorner: _,
45
45
  eventGap: Z,
46
46
  eventLayout: tt = "columns",
47
- stackOffset: et = 8
47
+ stackOffset: rt = 8
48
48
  }) {
49
- const c = R?.startHour ?? 0, d = R?.endHour ?? 24, C = R?.intervalMinutes ?? 60, { effectiveHourHeight: s, rootRef: rt, headerRef: ot, allDayRef: it, headerHeight: B } = xt(P, d - c), i = v(
49
+ const c = R?.startHour ?? 0, d = R?.endHour ?? 24, v = R?.intervalMinutes ?? 60, { effectiveHourHeight: u, rootRef: et, headerRef: ot, allDayRef: it, headerHeight: B } = xt(P, d - c), i = T(
50
50
  (t) => $(Ht[t], E?.[t]),
51
51
  [E]
52
52
  ), H = U(null), h = U(null), [lt, M] = ft(
@@ -62,14 +62,14 @@ function qt({
62
62
  }, b);
63
63
  }
64
64
  }, [m, b]);
65
- const D = m ?? lt, T = p(
66
- () => pt({ startHour: c, endHour: d, intervalMinutes: C }),
67
- [c, d, C]
65
+ const C = m ?? lt, D = p(
66
+ () => pt({ startHour: c, endHour: d, intervalMinutes: v }),
67
+ [c, d, v]
68
68
  ), { allDayEvents: G, timedEvents: O } = p(() => {
69
- const t = [], e = [];
70
- for (const r of x)
71
- r.allDay ? t.push(r) : e.push(r);
72
- return { allDayEvents: t, timedEvents: e };
69
+ const t = [], r = [];
70
+ for (const e of x)
71
+ e.allDay ? t.push(e) : r.push(e);
72
+ return { allDayEvents: t, timedEvents: r };
73
73
  }, [x]), nt = p(
74
74
  () => gt(G),
75
75
  [G]
@@ -80,29 +80,29 @@ function qt({
80
80
  a,
81
81
  c,
82
82
  d,
83
- s
83
+ u
84
84
  ),
85
- [O, l, a, c, d, s]
85
+ [O, l, a, c, d, u]
86
86
  ), ct = p(() => {
87
87
  if (!y && !w)
88
88
  return /* @__PURE__ */ new Map();
89
89
  const t = /* @__PURE__ */ new Set([
90
90
  ...Object.keys(y ?? {}),
91
91
  ...Object.keys(w ?? {})
92
- ]), e = /* @__PURE__ */ new Map();
93
- for (const r of t) {
92
+ ]), r = /* @__PURE__ */ new Map();
93
+ for (const e of t) {
94
94
  const f = wt(
95
- y?.[r],
96
- w?.[r],
95
+ y?.[e],
96
+ w?.[e],
97
97
  l,
98
98
  a,
99
99
  c,
100
100
  d,
101
- s
101
+ u
102
102
  );
103
- f.length > 0 && e.set(r, f);
103
+ f.length > 0 && r.set(e, f);
104
104
  }
105
- return e;
105
+ return r;
106
106
  }, [
107
107
  y,
108
108
  w,
@@ -110,46 +110,46 @@ function qt({
110
110
  a,
111
111
  c,
112
112
  d,
113
- s
113
+ u
114
114
  ]), { message: dt, announce: g } = kt(), st = p(
115
115
  () => `Schedule for ${ht(a)}`,
116
116
  [a]
117
- ), W = v(
117
+ ), W = T(
118
118
  (t) => {
119
- if (u?.(null), k?.(t), t.allDay) {
120
- const e = [t.title, "all day"];
121
- t.clientName && e.push(t.clientName), g(`Selected: ${e.join(", ")}`);
119
+ if (s?.(null), k?.(t), t.allDay) {
120
+ const r = [t.title, "all day"];
121
+ t.clientName && r.push(t.clientName), g(`Selected: ${r.join(", ")}`);
122
122
  } else {
123
- const e = [
123
+ const r = [
124
124
  t.title,
125
125
  z(t.startTime, t.endTime, l)
126
126
  ];
127
- t.clientName && e.push(t.clientName);
128
- const r = o.find((f) => f.id === t.resourceId);
129
- r && e.push(r.name), g(`Selected: ${e.join(", ")}`);
127
+ t.clientName && r.push(t.clientName);
128
+ const e = o.find((f) => f.id === t.resourceId);
129
+ e && r.push(e.name), g(`Selected: ${r.join(", ")}`);
130
130
  }
131
131
  },
132
- [u, k, l, o, g]
133
- ), ut = v(
132
+ [s, k, l, o, g]
133
+ ), ut = T(
134
134
  (t) => {
135
- if (u?.(t), t) {
136
- const e = [
135
+ if (s?.(t), t) {
136
+ const r = [
137
137
  z(t.startTime, t.endTime, l)
138
- ], r = o.find((f) => f.id === t.resourceId);
139
- r && e.push(r.name), g(`Selected time: ${e.join(", ")}`);
138
+ ], e = o.find((f) => f.id === t.resourceId);
139
+ e && r.push(e.name), g(`Selected time: ${r.join(", ")}`);
140
140
  }
141
141
  },
142
- [u, l, o, g]
142
+ [s, l, o, g]
143
143
  );
144
144
  V(() => {
145
- if (!m || !u) return;
146
- const t = (e) => {
147
- e.key === "Escape" && u(null);
145
+ if (!m || !s) return;
146
+ const t = (r) => {
147
+ r.key === "Escape" && s(null);
148
148
  };
149
149
  return document.addEventListener("keydown", t), () => document.removeEventListener("keydown", t);
150
- }, [m, u]);
151
- const mt = s * C / 60;
152
- return /* @__PURE__ */ L("div", { ref: rt, className: $(i("root"), K), children: [
150
+ }, [m, s]);
151
+ const mt = u * v / 60;
152
+ return /* @__PURE__ */ L("div", { ref: et, className: $(i("root"), K), children: [
153
153
  /* @__PURE__ */ L(
154
154
  "div",
155
155
  {
@@ -160,7 +160,7 @@ function qt({
160
160
  style: {
161
161
  display: "grid",
162
162
  gridTemplateColumns: `max-content repeat(${o.length}, minmax(${q}px, 1fr))`,
163
- gridTemplateRows: `auto auto repeat(${T.length}, ${mt}px)`
163
+ gridTemplateRows: `auto auto repeat(${D.length}, ${mt}px)`
164
164
  },
165
165
  children: [
166
166
  /* @__PURE__ */ n(
@@ -172,11 +172,11 @@ function qt({
172
172
  children: _?.({ timeZone: l, date: a })
173
173
  }
174
174
  ),
175
- o.map((t, e) => /* @__PURE__ */ n(
175
+ o.map((t, r) => /* @__PURE__ */ n(
176
176
  Rt,
177
177
  {
178
178
  resource: t,
179
- column: e + 2,
179
+ column: r + 2,
180
180
  cls: i,
181
181
  renderHeader: J
182
182
  },
@@ -194,15 +194,15 @@ function qt({
194
194
  }
195
195
  }
196
196
  ),
197
- o.map((t, e) => /* @__PURE__ */ n(
197
+ o.map((t, r) => /* @__PURE__ */ n(
198
198
  "div",
199
199
  {
200
200
  className: i("allDayCell"),
201
201
  style: {
202
202
  gridRow: 2,
203
- gridColumn: e + 2,
203
+ gridColumn: r + 2,
204
204
  top: B,
205
- ...e === o.length - 1 ? { borderRightWidth: 0 } : {}
205
+ ...r === o.length - 1 ? { borderRightWidth: 0 } : {}
206
206
  },
207
207
  children: /* @__PURE__ */ n(
208
208
  $t,
@@ -217,7 +217,7 @@ function qt({
217
217
  },
218
218
  `allday-${t.id}`
219
219
  )),
220
- T.map((t) => /* @__PURE__ */ n(
220
+ D.map((t) => /* @__PURE__ */ n(
221
221
  St,
222
222
  {
223
223
  label: t.label,
@@ -228,86 +228,86 @@ function qt({
228
228
  },
229
229
  t.index
230
230
  )),
231
- T.map(
232
- (t) => o.map((e, r) => /* @__PURE__ */ n(
231
+ D.map(
232
+ (t) => o.map((r, e) => /* @__PURE__ */ n(
233
233
  "div",
234
234
  {
235
235
  className: i(t.isHourStart ? "bodyCell" : "bodyCellMinor"),
236
236
  style: {
237
237
  gridRow: t.index + 3,
238
- gridColumn: r + 2,
238
+ gridColumn: e + 2,
239
239
  ...t.isHourStart ? {} : { borderTopStyle: "dotted" },
240
240
  ...t.index === 0 ? { borderTopWidth: 0 } : {},
241
- ...r === o.length - 1 ? { borderRightWidth: 0 } : {}
241
+ ...e === o.length - 1 ? { borderRightWidth: 0 } : {}
242
242
  }
243
243
  },
244
- `${t.index}-${e.id}`
244
+ `${t.index}-${r.id}`
245
245
  ))
246
246
  ),
247
- o.map((t, e) => {
248
- const r = ct.get(t.id);
249
- return r ? /* @__PURE__ */ n(
250
- Tt,
247
+ o.map((t, r) => {
248
+ const e = ct.get(t.id);
249
+ return e ? /* @__PURE__ */ n(
250
+ Dt,
251
251
  {
252
- blocks: r,
253
- column: e + 2,
252
+ blocks: e,
253
+ column: r + 2,
254
254
  cls: i
255
255
  },
256
256
  `unavail-${t.id}`
257
257
  ) : null;
258
258
  }),
259
- N != null && o.map((t, e) => /* @__PURE__ */ n(
260
- Ct,
259
+ N != null && o.map((t, r) => /* @__PURE__ */ n(
260
+ vt,
261
261
  {
262
262
  resource: t,
263
- column: e + 2,
263
+ column: r + 2,
264
264
  date: a,
265
265
  timeZone: l,
266
266
  startHour: c,
267
267
  endHour: d,
268
- hourHeight: s,
268
+ hourHeight: u,
269
269
  snapDuration: N,
270
270
  placeholderDuration: A ?? 15,
271
271
  cls: i,
272
272
  onSlotClick: F,
273
- onSelect: ut,
273
+ onSelect: s ? ut : void 0,
274
274
  dragPreviewAppearance: X,
275
275
  renderEvent: S
276
276
  },
277
277
  `slot-${t.id}`
278
278
  )),
279
- o.map((t, e) => /* @__PURE__ */ n(
279
+ o.map((t, r) => /* @__PURE__ */ n(
280
280
  bt,
281
281
  {
282
282
  resource: t,
283
283
  positionedEvents: at.get(t.id) ?? [],
284
- column: e + 2,
284
+ column: r + 2,
285
285
  timeZone: l,
286
286
  cls: i,
287
287
  onEventClick: W,
288
288
  renderEvent: S,
289
289
  eventGap: Z,
290
290
  eventLayout: tt,
291
- stackOffset: et,
291
+ stackOffset: rt,
292
292
  selectedEventId: j,
293
293
  selectedEventRef: I
294
294
  },
295
295
  t.id
296
296
  )),
297
- D != null && (() => {
297
+ C != null && (() => {
298
298
  const t = o.findIndex(
299
- (e) => e.id === D.resourceId
299
+ (r) => r.id === C.resourceId
300
300
  );
301
301
  return t === -1 ? null : /* @__PURE__ */ n(
302
- Dt,
302
+ Ct,
303
303
  {
304
- selectedRange: D,
304
+ selectedRange: C,
305
305
  column: t + 2,
306
306
  resource: o[t],
307
307
  viewDate: a,
308
308
  timeZone: l,
309
309
  startHour: c,
310
- hourHeight: s,
310
+ hourHeight: u,
311
311
  cls: i,
312
312
  appearance: Q,
313
313
  selectionRef: Y,
@@ -316,13 +316,13 @@ function qt({
316
316
  );
317
317
  })(),
318
318
  /* @__PURE__ */ n(
319
- vt,
319
+ Tt,
320
320
  {
321
321
  date: a,
322
322
  timeZone: l,
323
323
  startHour: c,
324
324
  endHour: d,
325
- hourHeight: s,
325
+ hourHeight: u,
326
326
  cls: i
327
327
  }
328
328
  )
@@ -1 +1 @@
1
- {"version":3,"file":"SlotInteractionLayer.d.ts","sourceRoot":"","sources":["../../../src/components/resource-grid-view/SlotInteractionLayer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAI1B,UAAU,yBAAyB;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,0BAA0B,KAAK,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QACnB,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC;QAClC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC;KACjC,KAAK,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;IAC5C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,kBAAkB,CAAC;QAC1B,QAAQ,EAAE,eAAe,CAAC;KAC3B,KAAK,KAAK,CAAC,SAAS,CAAC;CACvB;AAmBD,eAAO,MAAM,oBAAoB,iEA2T/B,CAAC"}
1
+ {"version":3,"file":"SlotInteractionLayer.d.ts","sourceRoot":"","sources":["../../../src/components/resource-grid-view/SlotInteractionLayer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAI1B,UAAU,yBAAyB;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,0BAA0B,KAAK,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QACnB,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC;QAClC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC;KACjC,KAAK,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;IAC5C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,kBAAkB,CAAC;QAC1B,QAAQ,EAAE,eAAe,CAAC;KAC3B,KAAK,KAAK,CAAC,SAAS,CAAC;CACvB;AAyBD,eAAO,MAAM,oBAAoB,iEA2T/B,CAAC"}
@@ -1,110 +1,110 @@
1
- import { jsxs as rt, jsx as x } from "react/jsx-runtime";
2
- import { memo as ot, useState as K, useRef as o, useCallback as m, useLayoutEffect as st, useEffect as it } from "react";
3
- import { buildSyntheticEvent as ct } from "../../lib/selection.js";
4
- import { EventChip as ut } from "./EventChip.js";
5
- function E(U, u, C) {
6
- const a = Math.floor(u / 60), i = u % 60;
7
- return U.toPlainDateTime({ hour: a, minute: i }).toZonedDateTime(C);
1
+ import { jsxs as rt, jsx as C } from "react/jsx-runtime";
2
+ import { memo as ot, useState as K, useRef as i, useCallback as m, useLayoutEffect as it, useEffect as st } from "react";
3
+ import { buildSyntheticEvent as ut } from "../../lib/selection.js";
4
+ import { EventChip as ct } from "./EventChip.js";
5
+ function E(b, a, y) {
6
+ const r = Math.floor(a / 60), s = a % 60;
7
+ return r >= 24 ? b.add({ days: Math.floor(r / 24) }).toPlainDateTime({ hour: r % 24, minute: s }).toZonedDateTime(y) : b.toPlainDateTime({ hour: r, minute: s }).toZonedDateTime(y);
8
8
  }
9
9
  const mt = ot(function({
10
- resource: u,
11
- column: C,
12
- date: a,
13
- timeZone: i,
10
+ resource: a,
11
+ column: y,
12
+ date: r,
13
+ timeZone: s,
14
14
  startHour: Q,
15
15
  endHour: V,
16
16
  hourHeight: W,
17
17
  snapDuration: R,
18
18
  placeholderDuration: l,
19
- cls: y,
19
+ cls: T,
20
20
  onSlotClick: L,
21
21
  onSelect: h,
22
22
  dragPreviewAppearance: F = "highlight",
23
23
  renderEvent: X
24
24
  }) {
25
- const [b, k] = K(null), [c, H] = K(null), S = o(null), M = o(null), w = o(!1), q = o(h), z = o(u), B = o(a), O = o(i), v = Q * 60, T = V * 60, d = W / 60, f = m(
25
+ const [H, k] = K(null), [c, w] = K(null), S = i(null), M = i(null), B = i(!1), q = i(h), z = i(a), D = i(r), O = i(s), v = Q * 60, x = V * 60, d = W / 60, f = m(
26
26
  (n) => {
27
- const t = n / d, r = Math.floor(t / R) * R, e = v + r;
28
- return e + l > T || e < v ? null : e;
27
+ const t = n / d, o = Math.floor(t / R) * R, e = v + o;
28
+ return e + l > x || e < v ? null : e;
29
29
  },
30
30
  [
31
31
  d,
32
32
  R,
33
33
  l,
34
34
  v,
35
- T
35
+ x
36
36
  ]
37
- ), G = o(f), Y = o(T), _ = o(R), I = o(l), J = m((n, t) => {
38
- const r = Math.min(n, t), e = Math.min(
39
- Math.max(n, t) + I.current,
40
- Y.current
37
+ ), G = i(f), P = i(x), _ = i(R), Y = i(l), J = m((n, t) => {
38
+ const o = Math.min(n, t), e = Math.min(
39
+ Math.max(n, t) + Y.current,
40
+ P.current
41
41
  );
42
- return { startMin: r, endMin: e };
42
+ return { startMin: o, endMin: e };
43
43
  }, []), g = m(
44
44
  (n) => {
45
- const t = M.current, r = S.current;
46
- if (!t || !r) return;
47
- const e = r.getBoundingClientRect(), s = e.height, p = Math.max(
45
+ const t = M.current, o = S.current;
46
+ if (!t || !o) return;
47
+ const e = o.getBoundingClientRect(), u = e.height, p = Math.max(
48
48
  0,
49
- Math.min(n.clientY - e.top, s)
49
+ Math.min(n.clientY - e.top, u)
50
50
  );
51
51
  let j = G.current(p);
52
- j == null && (j = Y.current - I.current);
53
- const D = J(t.anchorSlotStart, j);
54
- t.currentStartMin = D.startMin, t.currentEndMin = D.endMin, t.moved = !0, H(D);
52
+ j == null && (j = P.current - Y.current);
53
+ const U = J(t.anchorSlotStart, j);
54
+ t.currentStartMin = U.startMin, t.currentEndMin = U.endMin, t.moved = !0, w(U);
55
55
  },
56
56
  [J]
57
- ), N = o(() => {
58
- }), P = m(() => {
57
+ ), I = i(() => {
58
+ }), N = m(() => {
59
59
  const n = M.current;
60
- n && (n.moved && (w.current = !0), q.current?.({
60
+ n && (n.moved && (B.current = !0), q.current?.({
61
61
  resourceId: z.current.id,
62
62
  startTime: E(
63
- B.current,
63
+ D.current,
64
64
  n.currentStartMin,
65
65
  O.current
66
66
  ),
67
67
  endTime: E(
68
- B.current,
68
+ D.current,
69
69
  n.currentEndMin,
70
70
  O.current
71
71
  )
72
- })), M.current = null, H(null), document.removeEventListener("mousemove", g), document.removeEventListener("mouseup", N.current);
72
+ })), M.current = null, w(null), document.removeEventListener("mousemove", g), document.removeEventListener("mouseup", I.current);
73
73
  }, [g]);
74
- st(() => {
75
- q.current = h, z.current = u, B.current = a, O.current = i, G.current = f, Y.current = T, _.current = R, I.current = l, N.current = P;
76
- }), it(() => () => {
77
- document.removeEventListener("mousemove", g), document.removeEventListener("mouseup", N.current);
74
+ it(() => {
75
+ q.current = h, z.current = a, D.current = r, O.current = s, G.current = f, P.current = x, _.current = R, Y.current = l, I.current = N;
76
+ }), st(() => () => {
77
+ document.removeEventListener("mousemove", g), document.removeEventListener("mouseup", I.current);
78
78
  }, [g]);
79
79
  const $ = m(
80
80
  (n) => {
81
81
  if (!h) return;
82
82
  const t = S.current;
83
83
  if (!t) return;
84
- const r = t.getBoundingClientRect(), e = n.clientY - r.top, s = f(e);
85
- if (s == null) return;
84
+ const o = t.getBoundingClientRect(), e = n.clientY - o.top, u = f(e);
85
+ if (u == null) return;
86
86
  n.preventDefault(), h(null);
87
- const p = s + l;
87
+ const p = u + l;
88
88
  M.current = {
89
- anchorSlotStart: s,
90
- currentStartMin: s,
89
+ anchorSlotStart: u,
90
+ currentStartMin: u,
91
91
  currentEndMin: p,
92
92
  moved: !1
93
- }, H({ startMin: s, endMin: p }), document.addEventListener("mousemove", g), document.addEventListener("mouseup", P);
93
+ }, w({ startMin: u, endMin: p }), document.addEventListener("mousemove", g), document.addEventListener("mouseup", N);
94
94
  },
95
95
  [
96
96
  h,
97
97
  f,
98
98
  l,
99
99
  g,
100
- P
100
+ N
101
101
  ]
102
102
  ), A = m(
103
103
  (n) => {
104
104
  if (M.current) return;
105
105
  const t = S.current;
106
106
  if (!t) return;
107
- const r = t.getBoundingClientRect(), e = n.clientY - r.top;
107
+ const o = t.getBoundingClientRect(), e = n.clientY - o.top;
108
108
  k(f(e));
109
109
  },
110
110
  [f]
@@ -112,30 +112,30 @@ const mt = ot(function({
112
112
  M.current || k(null);
113
113
  }, []), tt = m(
114
114
  (n) => {
115
- if (w.current) {
116
- w.current = !1;
115
+ if (B.current) {
116
+ B.current = !1;
117
117
  return;
118
118
  }
119
119
  const t = S.current;
120
120
  if (!t) return;
121
- const r = t.getBoundingClientRect(), e = n.clientY - r.top, s = f(e);
122
- if (s == null) return;
123
- const p = s + l;
121
+ const o = t.getBoundingClientRect(), e = n.clientY - o.top, u = f(e);
122
+ if (u == null) return;
123
+ const p = u + l;
124
124
  L && L({
125
- resource: u,
126
- startTime: E(a, s, i),
127
- endTime: E(a, p, i)
125
+ resource: a,
126
+ startTime: E(r, u, s),
127
+ endTime: E(r, p, s)
128
128
  });
129
129
  },
130
- [L, f, l, u, a, i]
131
- ), nt = b != null ? (b - v) * d : 0, et = l * d;
130
+ [L, f, l, a, r, s]
131
+ ), nt = H != null ? (H - v) * d : 0, et = l * d;
132
132
  return /* @__PURE__ */ rt(
133
133
  "div",
134
134
  {
135
135
  ref: S,
136
136
  style: {
137
137
  gridRow: "3 / -1",
138
- gridColumn: C,
138
+ gridColumn: y,
139
139
  position: "relative",
140
140
  pointerEvents: "auto",
141
141
  cursor: L || h ? "pointer" : void 0
@@ -145,11 +145,11 @@ const mt = ot(function({
145
145
  onMouseLeave: Z,
146
146
  onClick: tt,
147
147
  children: [
148
- b != null && !c && /* @__PURE__ */ x(
148
+ H != null && !c && /* @__PURE__ */ C(
149
149
  "div",
150
150
  {
151
151
  "aria-hidden": "true",
152
- className: y("slotHighlight"),
152
+ className: T("slotHighlight"),
153
153
  style: {
154
154
  position: "absolute",
155
155
  top: nt,
@@ -160,21 +160,21 @@ const mt = ot(function({
160
160
  }
161
161
  }
162
162
  ),
163
- c && (F !== "highlight" ? /* @__PURE__ */ x(
163
+ c && (F !== "highlight" ? /* @__PURE__ */ C(
164
164
  "div",
165
165
  {
166
166
  "aria-hidden": "true",
167
- className: y("eventColumn"),
167
+ className: T("eventColumn"),
168
168
  style: { pointerEvents: "none" },
169
- children: /* @__PURE__ */ x(
170
- ut,
169
+ children: /* @__PURE__ */ C(
170
+ ct,
171
171
  {
172
172
  interactive: !1,
173
173
  positioned: {
174
- event: ct(
175
- u.id,
176
- E(a, c.startMin, i),
177
- E(a, c.endMin, i),
174
+ event: ut(
175
+ a.id,
176
+ E(r, c.startMin, s),
177
+ E(r, c.endMin, s),
178
178
  F.eventData
179
179
  ),
180
180
  top: (c.startMin - v) * d,
@@ -182,18 +182,18 @@ const mt = ot(function({
182
182
  subColumn: 0,
183
183
  totalSubColumns: 1
184
184
  },
185
- resource: u,
186
- timeZone: i,
187
- cls: y,
185
+ resource: a,
186
+ timeZone: s,
187
+ cls: T,
188
188
  renderEvent: X
189
189
  }
190
190
  )
191
191
  }
192
- ) : /* @__PURE__ */ x(
192
+ ) : /* @__PURE__ */ C(
193
193
  "div",
194
194
  {
195
195
  "aria-hidden": "true",
196
- className: y("selectionHighlight"),
196
+ className: T("selectionHighlight"),
197
197
  style: {
198
198
  position: "absolute",
199
199
  top: (c.startMin - v) * d,
package/dist/index.d.ts CHANGED
@@ -4,5 +4,4 @@ export { resourceGridViewDefaults } from './components/resource-grid-view';
4
4
  export type { CalendarResource, CalendarEvent, TimedCalendarEvent, AllDayCalendarEvent, TimeSlot, AvailabilityRange, TimeAxisConfig, ResourceGridViewProps, ResourceGridViewClassNames, PositionedEvent, SelectedRange, SelectionAppearance, SelectionEventData, EventLayout, } from './types/calendar';
5
5
  export { cn } from './lib/utils';
6
6
  export { timedEvent, allDayEvent } from './lib/events';
7
- export { selectedRangeToComponents, selectedRangeToISO, groupAvailabilityByResource, } from './lib/ranges';
8
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,17 +1,13 @@
1
- import { Temporal as r } from "temporal-polyfill";
1
+ import { Temporal as o } from "temporal-polyfill";
2
2
  import { cn as m } from "./lib/utils.js";
3
- import { allDayEvent as a, timedEvent as i } from "./lib/events.js";
4
- import { groupAvailabilityByResource as f, selectedRangeToComponents as n, selectedRangeToISO as s } from "./lib/ranges.js";
5
- import { ResourceGridView as x } from "./components/resource-grid-view/ResourceGridView.js";
6
- import { resourceGridViewDefaults as u } from "./components/resource-grid-view/defaults.js";
3
+ import { allDayEvent as p, timedEvent as i } from "./lib/events.js";
4
+ import { ResourceGridView as a } from "./components/resource-grid-view/ResourceGridView.js";
5
+ import { resourceGridViewDefaults as c } from "./components/resource-grid-view/defaults.js";
7
6
  export {
8
- x as ResourceGridView,
9
- r as Temporal,
10
- a as allDayEvent,
7
+ a as ResourceGridView,
8
+ o as Temporal,
9
+ p as allDayEvent,
11
10
  m as cn,
12
- f as groupAvailabilityByResource,
13
- u as resourceGridViewDefaults,
14
- n as selectedRangeToComponents,
15
- s as selectedRangeToISO,
11
+ c as resourceGridViewDefaults,
16
12
  i as timedEvent
17
13
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@savvycal/calendar",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,34 +0,0 @@
1
- import { AvailabilityRange, SelectedRange } from '../types/calendar';
2
- /** Decompose a SelectedRange into plain date/time component objects */
3
- export declare function selectedRangeToComponents(range: SelectedRange): {
4
- startDate: {
5
- year: number;
6
- month: number;
7
- day: number;
8
- };
9
- startTime: {
10
- hour: number;
11
- minute: number;
12
- };
13
- endDate: {
14
- year: number;
15
- month: number;
16
- day: number;
17
- };
18
- endTime: {
19
- hour: number;
20
- minute: number;
21
- };
22
- resourceId: string;
23
- };
24
- /** Convert a SelectedRange to ISO string representations */
25
- export declare function selectedRangeToISO(range: SelectedRange): {
26
- startDate: string;
27
- startTime: string;
28
- endDate: string;
29
- endTime: string;
30
- resourceId: string;
31
- };
32
- /** Group items by resource ID into a Record of AvailabilityRange arrays */
33
- export declare function groupAvailabilityByResource<T>(items: T[], getResourceId: (item: T) => string, getRange: (item: T) => AvailabilityRange): Record<string, AvailabilityRange[]>;
34
- //# sourceMappingURL=ranges.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ranges.d.ts","sourceRoot":"","sources":["../../src/lib/ranges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEzE,uEAAuE;AACvE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;EAsB7D;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa;;;;;;EAUtD;AAED,2EAA2E;AAC3E,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,KAAK,EAAE,CAAC,EAAE,EACV,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAClC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,iBAAiB,GACvC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAUrC"}
@@ -1,45 +0,0 @@
1
- function r(t) {
2
- return {
3
- startDate: {
4
- year: t.startTime.year,
5
- month: t.startTime.month,
6
- day: t.startTime.day
7
- },
8
- startTime: {
9
- hour: t.startTime.hour,
10
- minute: t.startTime.minute
11
- },
12
- endDate: {
13
- year: t.endTime.year,
14
- month: t.endTime.month,
15
- day: t.endTime.day
16
- },
17
- endTime: {
18
- hour: t.endTime.hour,
19
- minute: t.endTime.minute
20
- },
21
- resourceId: t.resourceId
22
- };
23
- }
24
- function s(t) {
25
- return {
26
- startDate: t.startTime.toPlainDate().toString(),
27
- startTime: t.startTime.toPlainTime().toString({ smallestUnit: "minute" }),
28
- endDate: t.endTime.toPlainDate().toString(),
29
- endTime: t.endTime.toPlainTime().toString({ smallestUnit: "minute" }),
30
- resourceId: t.resourceId
31
- };
32
- }
33
- function u(t, m, n) {
34
- const e = {};
35
- for (const o of t) {
36
- const i = m(o);
37
- e[i] || (e[i] = []), e[i].push(n(o));
38
- }
39
- return e;
40
- }
41
- export {
42
- u as groupAvailabilityByResource,
43
- r as selectedRangeToComponents,
44
- s as selectedRangeToISO
45
- };