@nomideusz/svelte-calendar 0.6.3 → 0.6.4

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.
Files changed (43) hide show
  1. package/README.md +183 -5
  2. package/dist/adapters/composite.d.ts +15 -0
  3. package/dist/adapters/composite.js +65 -0
  4. package/dist/adapters/index.d.ts +5 -1
  5. package/dist/adapters/index.js +2 -0
  6. package/dist/adapters/mapped.d.ts +170 -0
  7. package/dist/adapters/mapped.js +343 -0
  8. package/dist/adapters/recurring.d.ts +4 -0
  9. package/dist/adapters/recurring.js +5 -10
  10. package/dist/adapters/types.d.ts +11 -2
  11. package/dist/calendar/Calendar.svelte +147 -76
  12. package/dist/calendar/Calendar.svelte.d.ts +12 -0
  13. package/dist/core/index.d.ts +3 -1
  14. package/dist/core/index.js +2 -0
  15. package/dist/core/measure.d.ts +104 -0
  16. package/dist/core/measure.js +195 -0
  17. package/dist/core/time.js +2 -2
  18. package/dist/core/types.d.ts +32 -0
  19. package/dist/engine/event-store.svelte.js +22 -7
  20. package/dist/headless/create-agenda.svelte.d.ts +67 -0
  21. package/dist/headless/create-agenda.svelte.js +139 -0
  22. package/dist/headless/create-calendar.svelte.d.ts +2 -0
  23. package/dist/headless/create-calendar.svelte.js +380 -0
  24. package/dist/headless/index.d.ts +4 -0
  25. package/dist/headless/index.js +2 -0
  26. package/dist/headless/types.d.ts +219 -0
  27. package/dist/headless/types.js +1 -0
  28. package/dist/index.d.ts +6 -4
  29. package/dist/index.js +4 -2
  30. package/dist/primitives/EventBlock.svelte +87 -2
  31. package/dist/views/agenda/AgendaDay.svelte +183 -89
  32. package/dist/views/agenda/AgendaWeek.svelte +148 -95
  33. package/dist/views/mobile/MobileDay.svelte +43 -16
  34. package/dist/views/mobile/MobileWeek.svelte +32 -17
  35. package/dist/views/planner/PlannerDay.svelte +91 -36
  36. package/dist/views/planner/PlannerWeek.svelte +107 -132
  37. package/dist/views/shared/context.svelte.d.ts +47 -0
  38. package/dist/views/shared/context.svelte.js +47 -0
  39. package/dist/views/shared/format.d.ts +19 -0
  40. package/dist/views/shared/format.js +46 -0
  41. package/dist/views/shared/index.d.ts +4 -0
  42. package/dist/views/shared/index.js +2 -0
  43. package/package.json +76 -71
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared format helpers for agenda views.
3
+ * Extracted from duplicated code in AgendaDay and AgendaWeek.
4
+ */
5
+ import type { TimelineEvent } from '../../core/types.js';
6
+ export declare function fmtTime(d: Date, locale?: string): string;
7
+ export declare function duration(ev: TimelineEvent): string;
8
+ export declare function timeUntilMs(ms: number, now: number): string;
9
+ export declare function progress(ev: TimelineEvent, now: number): number;
10
+ /**
11
+ * Group overlapping events into time slots.
12
+ * Used by both AgendaDay and AgendaWeek.
13
+ */
14
+ export interface TimeSlot {
15
+ startMs: number;
16
+ endMs: number;
17
+ events: TimelineEvent[];
18
+ }
19
+ export declare function groupIntoSlots(evts: TimelineEvent[]): TimeSlot[];
@@ -0,0 +1,46 @@
1
+ import { fmtTime as _fmtTime, fmtDuration, getLabels } from '../../core/locale.js';
2
+ export function fmtTime(d, locale) {
3
+ return _fmtTime(d, locale);
4
+ }
5
+ export function duration(ev) {
6
+ return fmtDuration(ev.start, ev.end);
7
+ }
8
+ export function timeUntilMs(ms, now) {
9
+ const L = getLabels();
10
+ const diff = ms - now;
11
+ if (diff <= 0)
12
+ return L.now;
13
+ const tMins = Math.floor(diff / 60000);
14
+ if (tMins < 60)
15
+ return `in ${tMins}m`;
16
+ const hrs = Math.floor(tMins / 60);
17
+ const rm = tMins % 60;
18
+ if (hrs < 24)
19
+ return rm > 0 ? `in ${hrs}h ${rm}m` : `in ${hrs}h`;
20
+ const days = Math.floor(hrs / 24);
21
+ return `in ${days}d`;
22
+ }
23
+ export function progress(ev, now) {
24
+ const s = ev.start.getTime();
25
+ const e = ev.end.getTime();
26
+ return Math.min(1, Math.max(0, (now - s) / (e - s)));
27
+ }
28
+ export function groupIntoSlots(evts) {
29
+ const sorted = [...evts].sort((a, b) => a.start.getTime() - b.start.getTime());
30
+ const slots = [];
31
+ for (const ev of sorted) {
32
+ const last = slots[slots.length - 1];
33
+ if (last && ev.start.getTime() < last.endMs) {
34
+ last.events.push(ev);
35
+ last.endMs = Math.max(last.endMs, ev.end.getTime());
36
+ }
37
+ else {
38
+ slots.push({
39
+ startMs: ev.start.getTime(),
40
+ endMs: ev.end.getTime(),
41
+ events: [ev],
42
+ });
43
+ }
44
+ }
45
+ return slots;
46
+ }
@@ -0,0 +1,4 @@
1
+ export { useCalendarContext } from './context.svelte.js';
2
+ export type { CalendarContext } from './context.svelte.js';
3
+ export { fmtTime, duration, timeUntilMs, progress, groupIntoSlots } from './format.js';
4
+ export type { TimeSlot } from './format.js';
@@ -0,0 +1,2 @@
1
+ export { useCalendarContext } from './context.svelte.js';
2
+ export { fmtTime, duration, timeUntilMs, progress, groupIntoSlots } from './format.js';
package/package.json CHANGED
@@ -1,72 +1,77 @@
1
1
  {
2
- "name": "@nomideusz/svelte-calendar",
3
- "version": "0.6.3",
4
- "description": "A themeable Svelte 5 calendar with Day and Week views — Planner and Agenda.",
5
- "type": "module",
6
- "license": "MIT",
7
- "svelte": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "svelte": "./dist/index.js",
13
- "default": "./dist/index.js"
14
- },
15
- "./widget": "./widget/widget.js"
16
- },
17
- "files": [
18
- "dist",
19
- "widget",
20
- "!dist/**/*.test.*",
21
- "!dist/**/*.spec.*"
22
- ],
23
- "scripts": {
24
- "dev": "vite dev",
25
- "build": "vite build",
26
- "package": "svelte-kit sync && svelte-package",
27
- "build:widget": "vite build --config vite.config.widget.ts",
28
- "prepublishOnly": "npm run package",
29
- "preview": "vite preview",
30
- "prepare": "svelte-kit sync || echo ''",
31
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
32
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
33
- "test": "vitest run",
34
- "test:watch": "vitest"
35
- },
36
- "peerDependencies": {
37
- "svelte": "^5.0.0"
38
- },
39
- "devDependencies": {
40
- "@sveltejs/adapter-auto": "^7.0.0",
41
- "@sveltejs/kit": "^2.50.2",
42
- "@sveltejs/package": "^2.5.7",
43
- "@sveltejs/vite-plugin-svelte": "^6.2.4",
44
- "@types/node": "^22.0.0",
45
- "@vercel/analytics": "^1.6.1",
46
- "jsdom": "^28.1.0",
47
- "marked": "^17.0.3",
48
- "svelte": "^5.51.0",
49
- "svelte-check": "^4.3.6",
50
- "typescript": "^5.9.3",
51
- "vite": "^7.3.1",
52
- "vitest": "^4.0.18"
53
- },
54
- "dependencies": {
55
- "date-fns": "^4.1.0",
56
- "date-fns-tz": "^3.2.0"
57
- },
58
- "keywords": [
59
- "svelte",
60
- "calendar",
61
- "scheduler",
62
- "timeline",
63
- "week",
64
- "day",
65
- "booking",
66
- "svelte5"
67
- ],
68
- "repository": {
69
- "type": "git",
70
- "url": "https://github.com/nomideusz/svelte-calendar"
71
- }
72
- }
2
+ "name": "@nomideusz/svelte-calendar",
3
+ "version": "0.6.4",
4
+ "description": "A themeable Svelte 5 calendar with Day and Week views — Planner and Agenda.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "svelte": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "svelte": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./widget": "./widget/widget.js"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "widget",
20
+ "!dist/**/*.test.*",
21
+ "!dist/**/*.spec.*"
22
+ ],
23
+ "peerDependencies": {
24
+ "svelte": "^5.0.0",
25
+ "@chenglou/pretext": "^0.0.4"
26
+ },
27
+ "peerDependenciesMeta": {
28
+ "@chenglou/pretext": {
29
+ "optional": true
30
+ }
31
+ },
32
+ "devDependencies": {
33
+ "@chenglou/pretext": "^0.0.4",
34
+ "@sveltejs/adapter-auto": "^7.0.0",
35
+ "@sveltejs/kit": "^2.50.2",
36
+ "@sveltejs/package": "^2.5.7",
37
+ "@sveltejs/vite-plugin-svelte": "^6.2.4",
38
+ "@types/node": "^22.0.0",
39
+ "@vercel/analytics": "^1.6.1",
40
+ "jsdom": "^28.1.0",
41
+ "marked": "^17.0.3",
42
+ "svelte": "^5.51.0",
43
+ "svelte-check": "^4.3.6",
44
+ "typescript": "^5.9.3",
45
+ "vite": "^7.3.1",
46
+ "vitest": "^4.0.18"
47
+ },
48
+ "dependencies": {
49
+ "date-fns": "^4.1.0",
50
+ "date-fns-tz": "^3.2.0"
51
+ },
52
+ "keywords": [
53
+ "svelte",
54
+ "calendar",
55
+ "scheduler",
56
+ "timeline",
57
+ "week",
58
+ "day",
59
+ "booking",
60
+ "svelte5"
61
+ ],
62
+ "repository": {
63
+ "type": "git",
64
+ "url": "https://github.com/nomideusz/svelte-calendar"
65
+ },
66
+ "scripts": {
67
+ "dev": "vite dev",
68
+ "build": "vite build",
69
+ "package": "svelte-kit sync && svelte-package",
70
+ "build:widget": "vite build --config vite.config.widget.ts",
71
+ "preview": "vite preview",
72
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
73
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
74
+ "test": "vitest run",
75
+ "test:watch": "vitest"
76
+ }
77
+ }