@sunsama/event-calendar 0.13.2 → 0.13.5

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 (86) hide show
  1. package/lib/commonjs/components/all-day-events.js +1 -1
  2. package/lib/commonjs/components/all-day-events.js.map +1 -1
  3. package/lib/commonjs/components/edit-event-container.js +9 -1
  4. package/lib/commonjs/components/edit-event-container.js.map +1 -1
  5. package/lib/commonjs/components/event-container.js +2 -1
  6. package/lib/commonjs/components/event-container.js.map +1 -1
  7. package/lib/commonjs/components/timed-event-container.js +1 -1
  8. package/lib/commonjs/components/timed-event-container.js.map +1 -1
  9. package/lib/commonjs/hooks/use-auto-scroll.js +11 -1
  10. package/lib/commonjs/hooks/use-auto-scroll.js.map +1 -1
  11. package/lib/commonjs/hooks/use-events.js +7 -6
  12. package/lib/commonjs/hooks/use-events.js.map +1 -1
  13. package/lib/commonjs/index.js +33 -32
  14. package/lib/commonjs/index.js.map +1 -1
  15. package/lib/commonjs/utils/calendar-layout.js +15 -2
  16. package/lib/commonjs/utils/calendar-layout.js.map +1 -1
  17. package/lib/commonjs/utils/compute-positioning.js +1 -1
  18. package/lib/commonjs/utils/compute-positioning.js.map +1 -1
  19. package/lib/commonjs/utils/date-utils.js +59 -12
  20. package/lib/commonjs/utils/date-utils.js.map +1 -1
  21. package/lib/commonjs/utils/generate-event-layouts.js +13 -6
  22. package/lib/commonjs/utils/generate-event-layouts.js.map +1 -1
  23. package/lib/module/components/all-day-events.js +2 -2
  24. package/lib/module/components/all-day-events.js.map +1 -1
  25. package/lib/module/components/edit-event-container.js +9 -1
  26. package/lib/module/components/edit-event-container.js.map +1 -1
  27. package/lib/module/components/event-container.js +3 -2
  28. package/lib/module/components/event-container.js.map +1 -1
  29. package/lib/module/components/timed-event-container.js +1 -1
  30. package/lib/module/components/timed-event-container.js.map +1 -1
  31. package/lib/module/hooks/use-auto-scroll.js +11 -1
  32. package/lib/module/hooks/use-auto-scroll.js.map +1 -1
  33. package/lib/module/hooks/use-events.js +8 -7
  34. package/lib/module/hooks/use-events.js.map +1 -1
  35. package/lib/module/index.js +33 -32
  36. package/lib/module/index.js.map +1 -1
  37. package/lib/module/utils/calendar-layout.js +15 -2
  38. package/lib/module/utils/calendar-layout.js.map +1 -1
  39. package/lib/module/utils/compute-positioning.js +1 -1
  40. package/lib/module/utils/compute-positioning.js.map +1 -1
  41. package/lib/module/utils/date-utils.js +57 -11
  42. package/lib/module/utils/date-utils.js.map +1 -1
  43. package/lib/module/utils/generate-event-layouts.js +14 -7
  44. package/lib/module/utils/generate-event-layouts.js.map +1 -1
  45. package/lib/typescript/commonjs/components/all-day-events.d.ts.map +1 -1
  46. package/lib/typescript/commonjs/components/edit-event-container.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/components/event-container.d.ts +2 -1
  48. package/lib/typescript/commonjs/components/event-container.d.ts.map +1 -1
  49. package/lib/typescript/commonjs/components/timed-event-container.d.ts.map +1 -1
  50. package/lib/typescript/commonjs/hooks/use-auto-scroll.d.ts.map +1 -1
  51. package/lib/typescript/commonjs/hooks/use-events.d.ts.map +1 -1
  52. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  53. package/lib/typescript/commonjs/utils/calendar-layout.d.ts +3 -1
  54. package/lib/typescript/commonjs/utils/calendar-layout.d.ts.map +1 -1
  55. package/lib/typescript/commonjs/utils/compute-positioning.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/utils/date-utils.d.ts +1 -0
  57. package/lib/typescript/commonjs/utils/date-utils.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/utils/generate-event-layouts.d.ts.map +1 -1
  59. package/lib/typescript/module/components/all-day-events.d.ts.map +1 -1
  60. package/lib/typescript/module/components/edit-event-container.d.ts.map +1 -1
  61. package/lib/typescript/module/components/event-container.d.ts +2 -1
  62. package/lib/typescript/module/components/event-container.d.ts.map +1 -1
  63. package/lib/typescript/module/components/timed-event-container.d.ts.map +1 -1
  64. package/lib/typescript/module/hooks/use-auto-scroll.d.ts.map +1 -1
  65. package/lib/typescript/module/hooks/use-events.d.ts.map +1 -1
  66. package/lib/typescript/module/index.d.ts.map +1 -1
  67. package/lib/typescript/module/utils/calendar-layout.d.ts +3 -1
  68. package/lib/typescript/module/utils/calendar-layout.d.ts.map +1 -1
  69. package/lib/typescript/module/utils/compute-positioning.d.ts.map +1 -1
  70. package/lib/typescript/module/utils/date-utils.d.ts +1 -0
  71. package/lib/typescript/module/utils/date-utils.d.ts.map +1 -1
  72. package/lib/typescript/module/utils/generate-event-layouts.d.ts.map +1 -1
  73. package/package.json +1 -1
  74. package/src/components/all-day-events.tsx +8 -4
  75. package/src/components/edit-event-container.tsx +11 -1
  76. package/src/components/event-container.tsx +14 -5
  77. package/src/components/timed-event-container.tsx +3 -0
  78. package/src/hooks/use-auto-scroll.ts +11 -1
  79. package/src/hooks/use-events.tsx +12 -8
  80. package/src/index.tsx +68 -34
  81. package/src/utils/__tests___/date-utils-extended.test.ts +34 -0
  82. package/src/utils/__tests___/generate-event-layout.test.ts +29 -0
  83. package/src/utils/calendar-layout.ts +15 -4
  84. package/src/utils/compute-positioning.ts +4 -3
  85. package/src/utils/date-utils.ts +70 -26
  86. package/src/utils/generate-event-layouts.ts +17 -19
@@ -1,5 +1,6 @@
1
1
  import moment, { type Moment } from "moment-timezone";
2
2
  import { CalendarEvent, PrefabHour } from "../types";
3
+ export declare const normalizeEventDates: <T extends CalendarEvent>(event: T) => T;
3
4
  export declare const generatePrefabHours: (timeFormat?: string) => PrefabHour[];
4
5
  export declare const startOfUserWeek: (startDayOfWeekOffset: number, dateOrMoment: Date | Moment | string, timezone: string) => moment.Moment;
5
6
  export declare const isAllDayOrSpansMidnight: <T extends CalendarEvent>(calendarEvent: T, timezone: string) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"date-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/date-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,mBAAmB,gBAClB,MAAM,KACjB,UAAU,EAwBZ,CAAC;AAIF,eAAO,MAAM,eAAe,yBACJ,MAAM,gBACd,IAAI,GAAG,MAAM,GAAG,MAAM,YAC1B,MAAM,kBAejB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,aAAa,iBAC9C,CAAC,YACN,MAAM,YAiBjB,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,aAAa,iBACxC,CAAC,YACN,MAAM,WAcjB,CAAC;AAGF,eAAO,MAAM,WAAW,sCAIrB;IACD,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,aAqBA,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,aAAa,iBAClC,CAAC,iBACD,OAAO,WAWvB,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,MAAM,GAAG,IAAI,GAAG,MAAM,MACxB,MAAM,YACA,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,wBACnC,MAAM;;;;;;;;;CAiE7B,CAAC;AAGF,eAAO,MAAM,kBAAkB,yCACS;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,wCAClC;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,YAgBzE,CAAC"}
1
+ {"version":3,"file":"date-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/date-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA8BrD,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,aAAa,SAAS,CAAC,KAAG,CAUvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,gBAClB,MAAM,KACjB,UAAU,EAwBZ,CAAC;AAIF,eAAO,MAAM,eAAe,yBACJ,MAAM,gBACd,IAAI,GAAG,MAAM,GAAG,MAAM,YAC1B,MAAM,kBAejB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,aAAa,iBAC9C,CAAC,YACN,MAAM,YAqBjB,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,aAAa,iBACxC,CAAC,YACN,MAAM,WAiBjB,CAAC;AAGF,eAAO,MAAM,WAAW,sCAIrB;IACD,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,aAkBA,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,aAAa,iBAClC,CAAC,iBACD,OAAO,WAWvB,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,MAAM,GAAG,IAAI,GAAG,MAAM,MACxB,MAAM,YACA,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,wBACnC,MAAM;;;;;;;;;CAiE7B,CAAC;AAGF,eAAO,MAAM,kBAAkB,yCACS;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,wCAClC;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,YAgBzE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-event-layouts.d.ts","sourceRoot":"","sources":["../../../../src/utils/generate-event-layouts.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,aAAa,EACb,wBAAwB,EAGxB,uBAAuB,EAExB,MAAM,UAAU,CAAC;AAElB,UAAU,oBAAoB,CAAC,CAAC,SAAS,aAAa;IACpD,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,aAAa,yHAQzD,oBAAoB,CAAC,CAAC,CAAC;;CA8JzB,CAAC;AAyIF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"generate-event-layouts.d.ts","sourceRoot":"","sources":["../../../../src/utils/generate-event-layouts.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,aAAa,EACb,wBAAwB,EAGxB,uBAAuB,EAExB,MAAM,UAAU,CAAC;AAElB,UAAU,oBAAoB,CAAC,CAAC,SAAS,aAAa;IACpD,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,aAAa,yHAQzD,oBAAoB,CAAC,CAAC,CAAC;;CA2JzB,CAAC;AAyIF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"all-day-events.d.ts","sourceRoot":"","sources":["../../../../src/components/all-day-events.tsx"],"names":[],"mappings":"AAeA,QAAA,MAAM,YAAY,wEA2HjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"all-day-events.d.ts","sourceRoot":"","sources":["../../../../src/components/all-day-events.tsx"],"names":[],"mappings":"AAeA,QAAA,MAAM,YAAY,wEA+HjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"edit-event-container.d.ts","sourceRoot":"","sources":["../../../../src/components/edit-event-container.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAMV,MAAM,OAAO,CAAC;AAkBf,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;CAC7B,CAAC;AAEF,QAAA,MAAM,kBAAkB,wDACJ,uBAAuB,wCAyO1C,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"edit-event-container.d.ts","sourceRoot":"","sources":["../../../../src/components/edit-event-container.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAMV,MAAM,OAAO,CAAC;AAkBf,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;CAC7B,CAAC;AAEF,QAAA,MAAM,kBAAkB,wDACJ,uBAAuB,wCAmP1C,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -2,6 +2,7 @@ import { AllDayEventLayoutType, type CalendarEvent } from "../types";
2
2
  type EventContainerProps<T extends CalendarEvent> = {
3
3
  layout: AllDayEventLayoutType<T>;
4
4
  };
5
- declare const EventContainer: <T extends CalendarEvent>({ layout, }: EventContainerProps<T>) => import("react").JSX.Element;
5
+ declare const EventContainerInner: <T extends CalendarEvent>({ layout, }: EventContainerProps<T>) => import("react").JSX.Element;
6
+ declare const EventContainer: typeof EventContainerInner;
6
7
  export default EventContainer;
7
8
  //# sourceMappingURL=event-container.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-container.d.ts","sourceRoot":"","sources":["../../../../src/components/event-container.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAEnB,MAAM,UAAU,CAAC;AAElB,KAAK,mBAAmB,CAAC,CAAC,SAAS,aAAa,IAAI;IAClD,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;CAClC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,CAAC,SAAS,aAAa,eAE5C,mBAAmB,CAAC,CAAC,CAAC,gCAuBxB,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"event-container.d.ts","sourceRoot":"","sources":["../../../../src/components/event-container.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAEnB,MAAM,UAAU,CAAC;AAElB,KAAK,mBAAmB,CAAC,CAAC,SAAS,aAAa,IAAI;IAClD,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;CAClC,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,CAAC,SAAS,aAAa,eAEjD,mBAAmB,CAAC,CAAC,CAAC,gCAqBxB,CAAC;AAEF,QAAA,MAAM,cAAc,EASf,OAAO,mBAAmB,CAAC;AAEhC,eAAe,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"timed-event-container.d.ts","sourceRoot":"","sources":["../../../../src/components/timed-event-container.tsx"],"names":[],"mappings":"AAOA,OAAO,EAEL,SAAS,EAMV,MAAM,OAAO,CAAC;AAMf,OAAO,EACL,KAAK,aAAa,EAElB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAElB,KAAK,wBAAwB,CAAC,CAAC,SAAS,aAAa,IAAI;IACvD,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAClC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;CAC7B,CAAC;AA2JF,QAAA,MAAM,mBAAmB,EAAoD,CAC3E,CAAC,SAAS,aAAa,EAEvB,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAEvB,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"timed-event-container.d.ts","sourceRoot":"","sources":["../../../../src/components/timed-event-container.tsx"],"names":[],"mappings":"AAOA,OAAO,EAEL,SAAS,EAMV,MAAM,OAAO,CAAC;AAMf,OAAO,EACL,KAAK,aAAa,EAElB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAElB,KAAK,wBAAwB,CAAC,CAAC,SAAS,aAAa,IAAI;IACvD,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAClC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;CAC7B,CAAC;AA8JF,QAAA,MAAM,mBAAmB,EAAoD,CAC3E,CAAC,SAAS,aAAa,EAEvB,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAEvB,eAAe,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-auto-scroll.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-auto-scroll.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAGjB,MAAM,yBAAyB,CAAC;AAMjC,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,YAAY,GACb,EAAE,gBAAgB,QAuDlB"}
1
+ {"version":3,"file":"use-auto-scroll.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-auto-scroll.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAGjB,MAAM,yBAAyB,CAAC;AAMjC,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,YAAY,GACb,EAAE,gBAAgB,QAiElB"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-events.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-events.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,cAAc,EAKpB,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,aAAa,IAAI;IACjD,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,CAAC;AAEF,KAAK,iBAAiB,CAAC,CAAC,SAAS,aAAa,IAAI;IAChD,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACzC,kBAAkB,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACrD,CAAC;AAKF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,aAAa,0DAInD;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,gCA0DA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,8BAMrB,CAAC"}
1
+ {"version":3,"file":"use-events.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-events.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,cAAc,EAMpB,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,aAAa,IAAI;IACjD,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,CAAC;AAEF,KAAK,iBAAiB,CAAC,CAAC,SAAS,aAAa,IAAI;IAChD,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACzC,kBAAkB,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACrD,CAAC;AAKF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,aAAa,0DAInD;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,gCA6DA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,8BAMrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ export declare class CalendarLayout {
4
4
  visibleX: Set<number>;
5
5
  enableWeekBreaks: boolean;
6
6
  startOfWeekXOffset: number;
7
+ private cachedHeight;
8
+ private cachedHeightDirty;
7
9
  constructor({ visibleX, enableWeekBreaks, startOfWeekXOffset, }: {
8
10
  visibleX: number[];
9
11
  enableWeekBreaks: boolean;
@@ -20,7 +22,7 @@ export declare class CalendarLayout {
20
22
  fit(x: number, y: number, duration: number): boolean;
21
23
  findFit(x: number, duration: number): number;
22
24
  findFitAndInsert(eventStartIndex: number, eventDurationDays: number, event: any): void;
23
- height(): any;
25
+ height(): number;
24
26
  getViewAt(x: number, y: number): {
25
27
  event?: undefined;
26
28
  visibleWidthDays?: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"calendar-layout.d.ts","sourceRoot":"","sources":["../../../../src/utils/calendar-layout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,qBAAa,cAAc;IAIzB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;gBAEf,EACV,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,GACnB,EAAE;QACD,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;KAC5B;IAOD,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAI1B,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE;YAAE,CAAC,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE;IASnE,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAM3D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAS1C,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAQnC,gBAAgB,CACd,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,GAAG;IAMZ,MAAM;IAMN,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;;;;;;;;;;;CA4D/B"}
1
+ {"version":3,"file":"calendar-layout.d.ts","sourceRoot":"","sources":["../../../../src/utils/calendar-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,qBAAa,cAAc;IAIzB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,iBAAiB,CAAiB;gBAE9B,EACV,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,GACnB,EAAE;QACD,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;KAC5B;IAOD,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAI1B,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE;YAAE,CAAC,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE;IAUnE,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAM3D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAS1C,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAQnC,gBAAgB,CACd,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,GAAG;IAMZ,MAAM;IAeN,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;;;;;;;;;;;CA4D/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"compute-positioning.d.ts","sourceRoot":"","sources":["../../../../src/utils/compute-positioning.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9E,KAAK,kBAAkB,CAAC,CAAC,SAAS,aAAa,IAAI;IAEjD,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,CAAC,SAAS,aAAa,oDAIhD,kBAAkB,CAAC,CAAC,CAAC,KAAG,aA2B1B,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"compute-positioning.d.ts","sourceRoot":"","sources":["../../../../src/utils/compute-positioning.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9E,KAAK,kBAAkB,CAAC,CAAC,SAAS,aAAa,IAAI;IAEjD,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,CAAC,SAAS,aAAa,oDAIhD,kBAAkB,CAAC,CAAC,CAAC,KAAG,aA4B1B,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import moment, { type Moment } from "moment-timezone";
2
2
  import { CalendarEvent, PrefabHour } from "../types";
3
+ export declare const normalizeEventDates: <T extends CalendarEvent>(event: T) => T;
3
4
  export declare const generatePrefabHours: (timeFormat?: string) => PrefabHour[];
4
5
  export declare const startOfUserWeek: (startDayOfWeekOffset: number, dateOrMoment: Date | Moment | string, timezone: string) => moment.Moment;
5
6
  export declare const isAllDayOrSpansMidnight: <T extends CalendarEvent>(calendarEvent: T, timezone: string) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"date-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/date-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,mBAAmB,gBAClB,MAAM,KACjB,UAAU,EAwBZ,CAAC;AAIF,eAAO,MAAM,eAAe,yBACJ,MAAM,gBACd,IAAI,GAAG,MAAM,GAAG,MAAM,YAC1B,MAAM,kBAejB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,aAAa,iBAC9C,CAAC,YACN,MAAM,YAiBjB,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,aAAa,iBACxC,CAAC,YACN,MAAM,WAcjB,CAAC;AAGF,eAAO,MAAM,WAAW,sCAIrB;IACD,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,aAqBA,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,aAAa,iBAClC,CAAC,iBACD,OAAO,WAWvB,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,MAAM,GAAG,IAAI,GAAG,MAAM,MACxB,MAAM,YACA,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,wBACnC,MAAM;;;;;;;;;CAiE7B,CAAC;AAGF,eAAO,MAAM,kBAAkB,yCACS;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,wCAClC;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,YAgBzE,CAAC"}
1
+ {"version":3,"file":"date-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/date-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA8BrD,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,aAAa,SAAS,CAAC,KAAG,CAUvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,gBAClB,MAAM,KACjB,UAAU,EAwBZ,CAAC;AAIF,eAAO,MAAM,eAAe,yBACJ,MAAM,gBACd,IAAI,GAAG,MAAM,GAAG,MAAM,YAC1B,MAAM,kBAejB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,aAAa,iBAC9C,CAAC,YACN,MAAM,YAqBjB,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,aAAa,iBACxC,CAAC,YACN,MAAM,WAiBjB,CAAC;AAGF,eAAO,MAAM,WAAW,sCAIrB;IACD,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,aAkBA,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,aAAa,iBAClC,CAAC,iBACD,OAAO,WAWvB,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,MAAM,GAAG,IAAI,GAAG,MAAM,MACxB,MAAM,YACA,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,wBACnC,MAAM;;;;;;;;;CAiE7B,CAAC;AAGF,eAAO,MAAM,kBAAkB,yCACS;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,wCAClC;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,YAgBzE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-event-layouts.d.ts","sourceRoot":"","sources":["../../../../src/utils/generate-event-layouts.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,aAAa,EACb,wBAAwB,EAGxB,uBAAuB,EAExB,MAAM,UAAU,CAAC;AAElB,UAAU,oBAAoB,CAAC,CAAC,SAAS,aAAa;IACpD,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,aAAa,yHAQzD,oBAAoB,CAAC,CAAC,CAAC;;CA8JzB,CAAC;AAyIF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"generate-event-layouts.d.ts","sourceRoot":"","sources":["../../../../src/utils/generate-event-layouts.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,aAAa,EACb,wBAAwB,EAGxB,uBAAuB,EAExB,MAAM,UAAU,CAAC;AAElB,UAAU,oBAAoB,CAAC,CAAC,SAAS,aAAa;IACpD,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,aAAa,yHAQzD,oBAAoB,CAAC,CAAC,CAAC;;CA2JzB,CAAC;AAyIF,eAAe,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunsama/event-calendar",
3
- "version": "0.13.2",
3
+ "version": "0.13.5",
4
4
  "description": "Event calendar.",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -1,4 +1,4 @@
1
- import { memo, useCallback, useContext, useState } from "react";
1
+ import { memo, useCallback, useContext, useMemo, useState } from "react";
2
2
  import { ConfigProvider, DEFAULT_MINUTE_HEIGHT } from "../utils/globals";
3
3
  import { LayoutChangeEvent, StyleSheet, Text, View } from "react-native";
4
4
  import EventContainer from "../components/event-container";
@@ -48,9 +48,13 @@ const AllDayEvents = memo(
48
48
  }
49
49
  }, [canCreateEvents, onCreateEvent]);
50
50
 
51
- const allDayEvents = showAllDayEvents
52
- ? layout.allDayEventsLayout
53
- : layout.allDayEventsLayout.slice(0, maxAllDayEvents);
51
+ const allDayEvents = useMemo(
52
+ () =>
53
+ showAllDayEvents
54
+ ? layout.allDayEventsLayout
55
+ : layout.allDayEventsLayout.slice(0, maxAllDayEvents),
56
+ [showAllDayEvents, layout.allDayEventsLayout, maxAllDayEvents]
57
+ );
54
58
  const restEventAmount =
55
59
  layout.allDayEventsLayout.length - allDayEvents.length;
56
60
 
@@ -53,6 +53,16 @@ const EditEventContainer = memo(
53
53
  } = useContext(ConfigProvider);
54
54
  const height = useSharedValue(0);
55
55
  const bottomEdgeY = useDerivedValue(() => currentY.value + height.value);
56
+ // isDragging flips true the instant the long-press starts, but currentY and
57
+ // height are only initialized from editingEvent.position by a JS-thread
58
+ // effect a few frames later. During that window topEdge/bottomEdge are 0, so
59
+ // the auto-scroll sees the event at the very top of the day and force-scrolls
60
+ // the viewport upward (jumping by the bottom-inset amount when the user is
61
+ // scrolled into the floating-tab-bar padding). Gate auto-scroll on the
62
+ // geometry being initialized (height > 0). (#11368)
63
+ const autoScrollActive = useDerivedValue(
64
+ () => isDragging.value && height.value > 0
65
+ );
56
66
 
57
67
  useAutoScroll({
58
68
  scrollRef,
@@ -61,7 +71,7 @@ const EditEventContainer = memo(
61
71
  maximumHour,
62
72
  topEdgeY: currentY,
63
73
  bottomEdgeY,
64
- isActive: isDragging,
74
+ isActive: autoScrollActive,
65
75
  autoScrollOffset,
66
76
  positionY: currentY,
67
77
  });
@@ -1,5 +1,5 @@
1
1
  import { ConfigProvider } from "../utils/globals";
2
- import { useCallback, useContext, useMemo } from "react";
2
+ import { memo, useCallback, useContext, useMemo } from "react";
3
3
  import { Pressable } from "react-native-gesture-handler";
4
4
  import { StyleSheet, View } from "react-native";
5
5
  import {
@@ -12,7 +12,7 @@ type EventContainerProps<T extends CalendarEvent> = {
12
12
  layout: AllDayEventLayoutType<T>;
13
13
  };
14
14
 
15
- const EventContainer = <T extends CalendarEvent>({
15
+ const EventContainerInner = <T extends CalendarEvent>({
16
16
  layout,
17
17
  }: EventContainerProps<T>) => {
18
18
  const { onPressEvent, renderEvent } = useContext(ConfigProvider);
@@ -21,9 +21,7 @@ const EventContainer = <T extends CalendarEvent>({
21
21
  () =>
22
22
  renderEvent(
23
23
  layout.event,
24
- (layout as AllDayEventLayoutType<T>).extend
25
- ? (layout as AllDayEventLayoutType<T>).extend
26
- : EventExtend.None
24
+ layout.extend ? layout.extend : EventExtend.None
27
25
  ),
28
26
  [layout, renderEvent]
29
27
  );
@@ -39,6 +37,17 @@ const EventContainer = <T extends CalendarEvent>({
39
37
  );
40
38
  };
41
39
 
40
+ const EventContainer = memo(
41
+ EventContainerInner,
42
+ (prev, next) =>
43
+ prev.layout.event.id === next.layout.event.id &&
44
+ prev.layout.event.start === next.layout.event.start &&
45
+ prev.layout.event.end === next.layout.event.end &&
46
+ prev.layout.event.title === next.layout.event.title &&
47
+ prev.layout.event.isAllDay === next.layout.event.isAllDay &&
48
+ prev.layout.extend === next.layout.extend
49
+ ) as typeof EventContainerInner;
50
+
42
51
  export default EventContainer;
43
52
 
44
53
  const styles = StyleSheet.create({
@@ -174,6 +174,9 @@ const arePropsEqual = <T extends CalendarEvent>(
174
174
  pl.event.id === nl.event.id &&
175
175
  pl.event.start === nl.event.start &&
176
176
  pl.event.end === nl.event.end &&
177
+ pl.event.title === nl.event.title &&
178
+ pl.event.calendarId === nl.event.calendarId &&
179
+ pl.event.isAllDay === nl.event.isAllDay &&
177
180
  pl.position.top === nl.position.top &&
178
181
  pl.position.height === nl.position.height &&
179
182
  pl.position.width === nl.position.width &&
@@ -69,14 +69,24 @@ export default function useAutoScroll({
69
69
  if (scrollDelta === 0) return;
70
70
 
71
71
  const maxScrollY = Math.max(0, maximumHour.value - scrollViewHeight.value);
72
+ // maxScrollY ignores the calendar's bottom content inset (padding for the
73
+ // floating tab bar), so when the user has scrolled into that inset scrollY
74
+ // can exceed it. Never clamp BELOW the current offset, otherwise the first
75
+ // qualifying frame yanks the viewport up to maxScrollY. (#11368)
76
+ const effectiveMaxScrollY = Math.max(maxScrollY, scrollY.value);
72
77
  const newScrollY = Math.min(
73
- maxScrollY,
78
+ effectiveMaxScrollY,
74
79
  Math.max(0, scrollY.value + scrollDelta)
75
80
  );
76
81
  const actualDelta = newScrollY - scrollY.value;
77
82
 
78
83
  if (Math.abs(actualDelta) < 0.5) return;
79
84
 
85
+ // Belt-and-suspenders: never move opposite to the chosen direction.
86
+ // (#11368 -- the bottom-inset yank is already prevented by
87
+ // effectiveMaxScrollY above; this guards any future clamp changes.)
88
+ if (actualDelta * scrollDelta < 0) return;
89
+
80
90
  scrollTo(scrollRef, 0, newScrollY, false);
81
91
  scrollY.value = newScrollY;
82
92
 
@@ -6,6 +6,7 @@ import {
6
6
  useCallback,
7
7
  useContext,
8
8
  useEffect,
9
+ useMemo,
9
10
  useState,
10
11
  } from "react";
11
12
  import { cloneDeep, isEqual } from "lodash";
@@ -93,15 +94,18 @@ export const EventsProvider = <T extends CalendarEvent>({
93
94
  updateEventsLayout({ ...initialProps, events: clonedEvents });
94
95
  }, [initialProps, clonedEvents, updateEventsLayout]);
95
96
 
97
+ const contextValue = useMemo(
98
+ () => ({
99
+ clonedEvents,
100
+ updateClonedEvents: setClonedEvents,
101
+ eventsLayout,
102
+ updateEventsLayout,
103
+ }),
104
+ [clonedEvents, eventsLayout, updateEventsLayout]
105
+ );
106
+
96
107
  return (
97
- <EventsContext.Provider
98
- value={{
99
- clonedEvents,
100
- updateClonedEvents: setClonedEvents,
101
- eventsLayout,
102
- updateEventsLayout,
103
- }}
104
- >
108
+ <EventsContext.Provider value={contextValue}>
105
109
  {children}
106
110
  </EventsContext.Provider>
107
111
  );
package/src/index.tsx CHANGED
@@ -210,42 +210,76 @@ function EventCalendarContentInner<T extends CalendarEvent>(
210
210
  }
211
211
  );
212
212
 
213
+ const configValue = useMemo(
214
+ () => ({
215
+ dayDate: startCalendarDate,
216
+ timeFormat,
217
+ layout: eventsLayout,
218
+ zoomLevel,
219
+ initialZoomLevel: initialZoomLevel || defaultZoomLevel,
220
+ defaultZoomLevel,
221
+ maxZoomLevel,
222
+ minZoomLevel,
223
+ createY,
224
+ onCreateEvent,
225
+ timezone,
226
+ renderEvent,
227
+ onPressEvent,
228
+ showTimeIndicator,
229
+ maxAllDayEvents,
230
+ canCreateEvents,
231
+ renderNewEventContainer,
232
+ fiveMinuteInterval,
233
+ canEditEvent,
234
+ onEventEdit,
235
+ renderDragBars,
236
+ maximumHour,
237
+ extraTimedComponents,
238
+ onZoomChange,
239
+ updateLocalStateAfterEdit,
240
+ theme,
241
+ initialEventEdit,
242
+ scrollY,
243
+ scrollRef: refScrollView,
244
+ scrollViewHeight,
245
+ }),
246
+ [
247
+ startCalendarDate,
248
+ timeFormat,
249
+ eventsLayout,
250
+ zoomLevel,
251
+ initialZoomLevel,
252
+ defaultZoomLevel,
253
+ maxZoomLevel,
254
+ minZoomLevel,
255
+ createY,
256
+ onCreateEvent,
257
+ timezone,
258
+ renderEvent,
259
+ onPressEvent,
260
+ showTimeIndicator,
261
+ maxAllDayEvents,
262
+ canCreateEvents,
263
+ renderNewEventContainer,
264
+ fiveMinuteInterval,
265
+ canEditEvent,
266
+ onEventEdit,
267
+ renderDragBars,
268
+ maximumHour,
269
+ extraTimedComponents,
270
+ onZoomChange,
271
+ updateLocalStateAfterEdit,
272
+ theme,
273
+ initialEventEdit,
274
+ scrollY,
275
+ refScrollView,
276
+ scrollViewHeight,
277
+ ]
278
+ );
279
+
213
280
  return (
214
281
  <View style={[styles.container, theme?.container]}>
215
- <ConfigProvider.Provider
216
- value={{
217
- dayDate: startCalendarDate,
218
- timeFormat,
219
- layout: eventsLayout,
220
- zoomLevel,
221
- initialZoomLevel: initialZoomLevel || defaultZoomLevel,
222
- defaultZoomLevel,
223
- maxZoomLevel,
224
- minZoomLevel,
225
- createY,
226
- onCreateEvent,
227
- timezone,
228
- renderEvent,
229
- onPressEvent,
230
- showTimeIndicator,
231
- maxAllDayEvents,
232
- canCreateEvents,
233
- renderNewEventContainer,
234
- fiveMinuteInterval,
235
- canEditEvent,
236
- onEventEdit,
237
- renderDragBars,
238
- maximumHour,
239
- extraTimedComponents,
240
- onZoomChange,
241
- updateLocalStateAfterEdit,
242
- theme,
243
- initialEventEdit,
244
- scrollY,
245
- scrollRef: refScrollView,
246
- scrollViewHeight,
247
- }}
248
- >
282
+ <ConfigProvider.Provider value={configValue}>
249
283
  <AllDayEvents />
250
284
  <AnimatedScrollView
251
285
  onLayout={onLayoutScrollView}
@@ -7,6 +7,7 @@ import {
7
7
  daysInRange,
8
8
  startOfUserWeek,
9
9
  computeCalendarDateRange,
10
+ normalizeEventDates,
10
11
  } from "../date-utils";
11
12
  import { CalendarEvent } from "../../types";
12
13
 
@@ -301,6 +302,39 @@ describe("startOfUserWeek", () => {
301
302
  });
302
303
  });
303
304
 
305
+ describe("normalizeEventDates", () => {
306
+ it("should convert Date start/end to ISO strings", () => {
307
+ const evt = {
308
+ ...event("", ""),
309
+ start: new Date("2023-01-01T08:00:00.000Z"),
310
+ end: new Date("2023-01-01T09:00:00.000Z"),
311
+ } as unknown as CalendarEvent;
312
+
313
+ const normalized = normalizeEventDates(evt);
314
+
315
+ expect(normalized.start).toBe("2023-01-01T08:00:00.000Z");
316
+ expect(normalized.end).toBe("2023-01-01T09:00:00.000Z");
317
+ });
318
+
319
+ it("should leave string start/end untouched and return the same reference", () => {
320
+ const evt = event("2023-01-01T08:00:00Z", "2023-01-01T09:00:00Z");
321
+
322
+ expect(normalizeEventDates(evt)).toBe(evt);
323
+ });
324
+
325
+ it("should normalize only the fields that are Date instances", () => {
326
+ const evt = {
327
+ ...event("2023-01-01T08:00:00.000Z", ""),
328
+ end: new Date("2023-01-01T09:00:00.000Z"),
329
+ } as unknown as CalendarEvent;
330
+
331
+ const normalized = normalizeEventDates(evt);
332
+
333
+ expect(normalized.start).toBe("2023-01-01T08:00:00.000Z");
334
+ expect(normalized.end).toBe("2023-01-01T09:00:00.000Z");
335
+ });
336
+ });
337
+
304
338
  describe("computeCalendarDateRange", () => {
305
339
  it("should return single day for 1day view", () => {
306
340
  const result = computeCalendarDateRange("2023-10-10", "UTC", "1day", 0);
@@ -38,6 +38,35 @@ describe("generateEventLayouts", () => {
38
38
  expect(dayLayout.partDayEventsLayout[0].event.id).toBe("2");
39
39
  });
40
40
 
41
+ it("should normalize Date start/end to strings in the resulting layout", () => {
42
+ // Consumers may pass native Date objects even though CalendarEvent types
43
+ // start/end as string; layouts flow into Reanimated worklet closures that
44
+ // can't clone a Date, so generateEventLayouts must normalize them first.
45
+ const events = [
46
+ {
47
+ id: "1",
48
+ calendarId: "primary-calendar",
49
+ title: "Timed Event",
50
+ start: new Date("2023-10-10T08:30:00Z"),
51
+ end: new Date("2023-10-10T09:30:00Z"),
52
+ },
53
+ ] as unknown as CalendarEvent[];
54
+
55
+ const layouts = generateEventLayouts({
56
+ startCalendarDate: "2023-10-10",
57
+ endCalendarDate: "2023-10-10",
58
+ events,
59
+ timezone: "UTC",
60
+ userCalendarId: "primary-calendar",
61
+ });
62
+
63
+ const { event } = layouts["2023-10-10"]!.partDayEventsLayout[0]!;
64
+ expect(typeof event.start).toBe("string");
65
+ expect(typeof event.end).toBe("string");
66
+ expect(event.start).toBe("2023-10-10T08:30:00.000Z");
67
+ expect(event.end).toBe("2023-10-10T09:30:00.000Z");
68
+ });
69
+
41
70
  it("should handle events with overlapping times", () => {
42
71
  const events: CalendarEvent[] = [
43
72
  {
@@ -1,4 +1,3 @@
1
- import { max } from "lodash";
2
1
  import { EventExtend } from "../types";
3
2
 
4
3
  export class CalendarLayout {
@@ -9,6 +8,8 @@ export class CalendarLayout {
9
8
  visibleX: Set<number>;
10
9
  enableWeekBreaks: boolean;
11
10
  startOfWeekXOffset: number;
11
+ private cachedHeight: number = 0;
12
+ private cachedHeightDirty: boolean = true;
12
13
 
13
14
  constructor({
14
15
  visibleX,
@@ -36,6 +37,7 @@ export class CalendarLayout {
36
37
  this.array2d[x] = column;
37
38
  }
38
39
  column[y] = value;
40
+ this.cachedHeightDirty = true;
39
41
  }
40
42
  // assign value to the line of cells from (x, y) to (x + w, y)
41
43
  setRange(x: number, y: number, duration: number, value: any) {
@@ -71,9 +73,18 @@ export class CalendarLayout {
71
73
  }
72
74
  // find the height of the 2d array
73
75
  height() {
74
- return this.array2d.length > 0
75
- ? max(this.array2d.map((col) => (col && col.length) || 0))
76
- : 0;
76
+ if (!this.cachedHeightDirty) {
77
+ return this.cachedHeight;
78
+ }
79
+ let maxHeight = 0;
80
+ for (const col of this.array2d) {
81
+ if (col && col.length > maxHeight) {
82
+ maxHeight = col.length;
83
+ }
84
+ }
85
+ this.cachedHeight = maxHeight;
86
+ this.cachedHeightDirty = false;
87
+ return this.cachedHeight;
77
88
  }
78
89
  // get the event and associated view data for the given cell
79
90
  getViewAt(x: number, y: number) {
@@ -14,9 +14,10 @@ const computePositioning = <T extends CalendarEvent>({
14
14
  timezone,
15
15
  }: ComputePositioning<T>): EventPosition => {
16
16
  const startDateMoment = moment.tz(collisionObject.event.start, timezone);
17
- const durationMinutes = moment
18
- .tz(collisionObject.event.end, timezone)
19
- .diff(startDateMoment, "minutes");
17
+ const durationMinutes =
18
+ (new Date(collisionObject.event.end).getTime() -
19
+ new Date(collisionObject.event.start).getTime()) /
20
+ 60000;
20
21
 
21
22
  let width = 100;
22
23
  let margin = 0;