react-native-roster 0.0.0 → 0.1.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.
Files changed (373) hide show
  1. package/NOTICE.md +29 -0
  2. package/README.md +455 -2
  3. package/dist/src/adapters/rrule/cache.d.ts +15 -0
  4. package/dist/src/adapters/rrule/cache.d.ts.map +1 -0
  5. package/dist/src/adapters/rrule/cache.js +53 -0
  6. package/dist/src/adapters/rrule/cache.js.map +1 -0
  7. package/dist/src/adapters/rrule/envelope.d.ts +3 -0
  8. package/dist/src/adapters/rrule/envelope.d.ts.map +1 -0
  9. package/dist/src/adapters/rrule/envelope.js +9 -0
  10. package/dist/src/adapters/rrule/envelope.js.map +1 -0
  11. package/dist/src/adapters/rrule/expand.d.ts +4 -0
  12. package/dist/src/adapters/rrule/expand.d.ts.map +1 -0
  13. package/dist/src/adapters/rrule/expand.js +92 -0
  14. package/dist/src/adapters/rrule/expand.js.map +1 -0
  15. package/dist/src/adapters/rrule/hash.d.ts +3 -0
  16. package/dist/src/adapters/rrule/hash.d.ts.map +1 -0
  17. package/dist/src/adapters/rrule/hash.js +15 -0
  18. package/dist/src/adapters/rrule/hash.js.map +1 -0
  19. package/dist/src/adapters/rrule/index.d.ts +5 -0
  20. package/dist/src/adapters/rrule/index.d.ts.map +1 -0
  21. package/dist/src/adapters/rrule/index.js +12 -0
  22. package/dist/src/adapters/rrule/index.js.map +1 -0
  23. package/dist/src/adapters/rrule/net.d.ts +6 -0
  24. package/dist/src/adapters/rrule/net.d.ts.map +1 -0
  25. package/dist/src/adapters/rrule/net.js +31 -0
  26. package/dist/src/adapters/rrule/net.js.map +1 -0
  27. package/dist/src/adapters/rrule/occurrences.d.ts +6 -0
  28. package/dist/src/adapters/rrule/occurrences.d.ts.map +1 -0
  29. package/dist/src/adapters/rrule/occurrences.js +252 -0
  30. package/dist/src/adapters/rrule/occurrences.js.map +1 -0
  31. package/dist/src/adapters/rrule/types.d.ts +62 -0
  32. package/dist/src/adapters/rrule/types.d.ts.map +1 -0
  33. package/dist/src/adapters/rrule/types.js +3 -0
  34. package/dist/src/adapters/rrule/types.js.map +1 -0
  35. package/dist/src/adapters/rrule/validate.d.ts +6 -0
  36. package/dist/src/adapters/rrule/validate.d.ts.map +1 -0
  37. package/dist/src/adapters/rrule/validate.js +64 -0
  38. package/dist/src/adapters/rrule/validate.js.map +1 -0
  39. package/dist/src/components/layers/layers.types.d.ts +15 -0
  40. package/dist/src/components/layers/layers.types.d.ts.map +1 -0
  41. package/dist/src/components/layers/layers.types.js +3 -0
  42. package/dist/src/components/layers/layers.types.js.map +1 -0
  43. package/dist/src/components/layers/parts/gap.d.ts +3 -0
  44. package/dist/src/components/layers/parts/gap.d.ts.map +1 -0
  45. package/dist/src/components/layers/parts/gap.js +7 -0
  46. package/dist/src/components/layers/parts/gap.js.map +1 -0
  47. package/dist/src/components/layers/parts/interval.d.ts +3 -0
  48. package/dist/src/components/layers/parts/interval.d.ts.map +1 -0
  49. package/dist/src/components/layers/parts/interval.js +22 -0
  50. package/dist/src/components/layers/parts/interval.js.map +1 -0
  51. package/dist/src/components/layers/utils/styles.d.ts +7 -0
  52. package/dist/src/components/layers/utils/styles.d.ts.map +1 -0
  53. package/dist/src/components/layers/utils/styles.js +24 -0
  54. package/dist/src/components/layers/utils/styles.js.map +1 -0
  55. package/dist/src/components/primitives/press-point.d.ts +3 -0
  56. package/dist/src/components/primitives/press-point.d.ts.map +1 -0
  57. package/dist/src/components/primitives/press-point.js +7 -0
  58. package/dist/src/components/primitives/press-point.js.map +1 -0
  59. package/dist/src/components/primitives/press-point.types.d.ts +14 -0
  60. package/dist/src/components/primitives/press-point.types.d.ts.map +1 -0
  61. package/dist/src/components/primitives/press-point.types.js +3 -0
  62. package/dist/src/components/primitives/press-point.types.js.map +1 -0
  63. package/dist/src/components/primitives/press-point.web.d.ts +3 -0
  64. package/dist/src/components/primitives/press-point.web.d.ts.map +1 -0
  65. package/dist/src/components/primitives/press-point.web.js +17 -0
  66. package/dist/src/components/primitives/press-point.web.js.map +1 -0
  67. package/dist/src/components/primitives/region-style.d.ts +9 -0
  68. package/dist/src/components/primitives/region-style.d.ts.map +1 -0
  69. package/dist/src/components/primitives/region-style.js +20 -0
  70. package/dist/src/components/primitives/region-style.js.map +1 -0
  71. package/dist/src/components/roster/body-layout.d.ts +9 -0
  72. package/dist/src/components/roster/body-layout.d.ts.map +1 -0
  73. package/dist/src/components/roster/body-layout.js +9 -0
  74. package/dist/src/components/roster/body-layout.js.map +1 -0
  75. package/dist/src/components/roster/index.d.ts +3 -0
  76. package/dist/src/components/roster/index.d.ts.map +1 -0
  77. package/dist/src/components/roster/index.js +40 -0
  78. package/dist/src/components/roster/index.js.map +1 -0
  79. package/dist/src/components/roster/lanes/interval-hover.d.ts +3 -0
  80. package/dist/src/components/roster/lanes/interval-hover.d.ts.map +1 -0
  81. package/dist/src/components/roster/lanes/interval-hover.js +7 -0
  82. package/dist/src/components/roster/lanes/interval-hover.js.map +1 -0
  83. package/dist/src/components/roster/lanes/interval-hover.types.d.ts +15 -0
  84. package/dist/src/components/roster/lanes/interval-hover.types.d.ts.map +1 -0
  85. package/dist/src/components/roster/lanes/interval-hover.types.js +3 -0
  86. package/dist/src/components/roster/lanes/interval-hover.types.js.map +1 -0
  87. package/dist/src/components/roster/lanes/interval-hover.web.d.ts +3 -0
  88. package/dist/src/components/roster/lanes/interval-hover.web.d.ts.map +1 -0
  89. package/dist/src/components/roster/lanes/interval-hover.web.js +20 -0
  90. package/dist/src/components/roster/lanes/interval-hover.web.js.map +1 -0
  91. package/dist/src/components/roster/lanes/lane.d.ts +10 -0
  92. package/dist/src/components/roster/lanes/lane.d.ts.map +1 -0
  93. package/dist/src/components/roster/lanes/lane.js +32 -0
  94. package/dist/src/components/roster/lanes/lane.js.map +1 -0
  95. package/dist/src/components/roster/lanes/parts/incomplete.d.ts +8 -0
  96. package/dist/src/components/roster/lanes/parts/incomplete.d.ts.map +1 -0
  97. package/dist/src/components/roster/lanes/parts/incomplete.js +30 -0
  98. package/dist/src/components/roster/lanes/parts/incomplete.js.map +1 -0
  99. package/dist/src/components/roster/lanes/parts/lane-label.d.ts +3 -0
  100. package/dist/src/components/roster/lanes/parts/lane-label.d.ts.map +1 -0
  101. package/dist/src/components/roster/lanes/parts/lane-label.js +18 -0
  102. package/dist/src/components/roster/lanes/parts/lane-label.js.map +1 -0
  103. package/dist/src/components/roster/layout.d.ts +17 -0
  104. package/dist/src/components/roster/layout.d.ts.map +1 -0
  105. package/dist/src/components/roster/layout.js +24 -0
  106. package/dist/src/components/roster/layout.js.map +1 -0
  107. package/dist/src/components/roster/parts/body.d.ts +7 -0
  108. package/dist/src/components/roster/parts/body.d.ts.map +1 -0
  109. package/dist/src/components/roster/parts/body.js +14 -0
  110. package/dist/src/components/roster/parts/body.js.map +1 -0
  111. package/dist/src/components/roster/parts/corner.d.ts +2 -0
  112. package/dist/src/components/roster/parts/corner.d.ts.map +1 -0
  113. package/dist/src/components/roster/parts/corner.js +7 -0
  114. package/dist/src/components/roster/parts/corner.js.map +1 -0
  115. package/dist/src/components/roster/parts/empty.d.ts +2 -0
  116. package/dist/src/components/roster/parts/empty.d.ts.map +1 -0
  117. package/dist/src/components/roster/parts/empty.js +9 -0
  118. package/dist/src/components/roster/parts/empty.js.map +1 -0
  119. package/dist/src/components/roster/parts/grid.d.ts +3 -0
  120. package/dist/src/components/roster/parts/grid.d.ts.map +1 -0
  121. package/dist/src/components/roster/parts/grid.js +16 -0
  122. package/dist/src/components/roster/parts/grid.js.map +1 -0
  123. package/dist/src/components/roster/parts/header-cell.d.ts +3 -0
  124. package/dist/src/components/roster/parts/header-cell.d.ts.map +1 -0
  125. package/dist/src/components/roster/parts/header-cell.js +9 -0
  126. package/dist/src/components/roster/parts/header-cell.js.map +1 -0
  127. package/dist/src/components/roster/parts/header.d.ts +3 -0
  128. package/dist/src/components/roster/parts/header.d.ts.map +1 -0
  129. package/dist/src/components/roster/parts/header.js +13 -0
  130. package/dist/src/components/roster/parts/header.js.map +1 -0
  131. package/dist/src/components/roster/parts/lane-label-column.d.ts +3 -0
  132. package/dist/src/components/roster/parts/lane-label-column.d.ts.map +1 -0
  133. package/dist/src/components/roster/parts/lane-label-column.js +18 -0
  134. package/dist/src/components/roster/parts/lane-label-column.js.map +1 -0
  135. package/dist/src/components/roster/parts/lane-list.d.ts +7 -0
  136. package/dist/src/components/roster/parts/lane-list.d.ts.map +1 -0
  137. package/dist/src/components/roster/parts/lane-list.js +25 -0
  138. package/dist/src/components/roster/parts/lane-list.js.map +1 -0
  139. package/dist/src/components/roster/roster.types.d.ts +145 -0
  140. package/dist/src/components/roster/roster.types.d.ts.map +1 -0
  141. package/dist/src/components/roster/roster.types.js +3 -0
  142. package/dist/src/components/roster/roster.types.js.map +1 -0
  143. package/dist/src/components/roster/use-roster.d.ts +3 -0
  144. package/dist/src/components/roster/use-roster.d.ts.map +1 -0
  145. package/dist/src/components/roster/use-roster.js +106 -0
  146. package/dist/src/components/roster/use-roster.js.map +1 -0
  147. package/dist/src/components/roster/utils/body-content-key.d.ts +3 -0
  148. package/dist/src/components/roster/utils/body-content-key.d.ts.map +1 -0
  149. package/dist/src/components/roster/utils/body-content-key.js +29 -0
  150. package/dist/src/components/roster/utils/body-content-key.js.map +1 -0
  151. package/dist/src/components/roster/utils/ticks.d.ts +4 -0
  152. package/dist/src/components/roster/utils/ticks.d.ts.map +1 -0
  153. package/dist/src/components/roster/utils/ticks.js +60 -0
  154. package/dist/src/components/roster/utils/ticks.js.map +1 -0
  155. package/dist/src/components/schedule/days/day.d.ts +20 -0
  156. package/dist/src/components/schedule/days/day.d.ts.map +1 -0
  157. package/dist/src/components/schedule/days/day.js +17 -0
  158. package/dist/src/components/schedule/days/day.js.map +1 -0
  159. package/dist/src/components/schedule/days/header-layout.d.ts +9 -0
  160. package/dist/src/components/schedule/days/header-layout.d.ts.map +1 -0
  161. package/dist/src/components/schedule/days/header-layout.js +9 -0
  162. package/dist/src/components/schedule/days/header-layout.js.map +1 -0
  163. package/dist/src/components/schedule/days/layout.d.ts +18 -0
  164. package/dist/src/components/schedule/days/layout.d.ts.map +1 -0
  165. package/dist/src/components/schedule/days/layout.js +9 -0
  166. package/dist/src/components/schedule/days/layout.js.map +1 -0
  167. package/dist/src/components/schedule/days/parts/column.d.ts +3 -0
  168. package/dist/src/components/schedule/days/parts/column.d.ts.map +1 -0
  169. package/dist/src/components/schedule/days/parts/column.js +28 -0
  170. package/dist/src/components/schedule/days/parts/column.js.map +1 -0
  171. package/dist/src/components/schedule/days/parts/day-header.d.ts +5 -0
  172. package/dist/src/components/schedule/days/parts/day-header.d.ts.map +1 -0
  173. package/dist/src/components/schedule/days/parts/day-header.js +10 -0
  174. package/dist/src/components/schedule/days/parts/day-header.js.map +1 -0
  175. package/dist/src/components/schedule/days/parts/grid.d.ts +3 -0
  176. package/dist/src/components/schedule/days/parts/grid.d.ts.map +1 -0
  177. package/dist/src/components/schedule/days/parts/grid.js +14 -0
  178. package/dist/src/components/schedule/days/parts/grid.js.map +1 -0
  179. package/dist/src/components/schedule/days/parts/now-line.d.ts +5 -0
  180. package/dist/src/components/schedule/days/parts/now-line.d.ts.map +1 -0
  181. package/dist/src/components/schedule/days/parts/now-line.js +9 -0
  182. package/dist/src/components/schedule/days/parts/now-line.js.map +1 -0
  183. package/dist/src/components/schedule/days/parts/skipped-date.d.ts +4 -0
  184. package/dist/src/components/schedule/days/parts/skipped-date.d.ts.map +1 -0
  185. package/dist/src/components/schedule/days/parts/skipped-date.js +17 -0
  186. package/dist/src/components/schedule/days/parts/skipped-date.js.map +1 -0
  187. package/dist/src/components/schedule/days/parts/transition.d.ts +3 -0
  188. package/dist/src/components/schedule/days/parts/transition.d.ts.map +1 -0
  189. package/dist/src/components/schedule/days/parts/transition.js +42 -0
  190. package/dist/src/components/schedule/days/parts/transition.js.map +1 -0
  191. package/dist/src/components/schedule/index.d.ts +3 -0
  192. package/dist/src/components/schedule/index.d.ts.map +1 -0
  193. package/dist/src/components/schedule/index.js +44 -0
  194. package/dist/src/components/schedule/index.js.map +1 -0
  195. package/dist/src/components/schedule/layout.d.ts +15 -0
  196. package/dist/src/components/schedule/layout.d.ts.map +1 -0
  197. package/dist/src/components/schedule/layout.js +10 -0
  198. package/dist/src/components/schedule/layout.js.map +1 -0
  199. package/dist/src/components/schedule/parts/gutter.d.ts +3 -0
  200. package/dist/src/components/schedule/parts/gutter.d.ts.map +1 -0
  201. package/dist/src/components/schedule/parts/gutter.js +9 -0
  202. package/dist/src/components/schedule/parts/gutter.js.map +1 -0
  203. package/dist/src/components/schedule/parts/incomplete.d.ts +6 -0
  204. package/dist/src/components/schedule/parts/incomplete.d.ts.map +1 -0
  205. package/dist/src/components/schedule/parts/incomplete.js +9 -0
  206. package/dist/src/components/schedule/parts/incomplete.js.map +1 -0
  207. package/dist/src/components/schedule/schedule.types.d.ts +109 -0
  208. package/dist/src/components/schedule/schedule.types.d.ts.map +1 -0
  209. package/dist/src/components/schedule/schedule.types.js +3 -0
  210. package/dist/src/components/schedule/schedule.types.js.map +1 -0
  211. package/dist/src/components/schedule/use-schedule-viewport.d.ts +7 -0
  212. package/dist/src/components/schedule/use-schedule-viewport.d.ts.map +1 -0
  213. package/dist/src/components/schedule/use-schedule-viewport.js +15 -0
  214. package/dist/src/components/schedule/use-schedule-viewport.js.map +1 -0
  215. package/dist/src/components/schedule/use-schedule.d.ts +3 -0
  216. package/dist/src/components/schedule/use-schedule.d.ts.map +1 -0
  217. package/dist/src/components/schedule/use-schedule.js +71 -0
  218. package/dist/src/components/schedule/use-schedule.js.map +1 -0
  219. package/dist/src/components/schedule/utils/days.d.ts +17 -0
  220. package/dist/src/components/schedule/utils/days.d.ts.map +1 -0
  221. package/dist/src/components/schedule/utils/days.js +49 -0
  222. package/dist/src/components/schedule/utils/days.js.map +1 -0
  223. package/dist/src/core/axis.d.ts +18 -0
  224. package/dist/src/core/axis.d.ts.map +1 -0
  225. package/dist/src/core/axis.js +58 -0
  226. package/dist/src/core/axis.js.map +1 -0
  227. package/dist/src/core/cache.d.ts +29 -0
  228. package/dist/src/core/cache.d.ts.map +1 -0
  229. package/dist/src/core/cache.js +33 -0
  230. package/dist/src/core/cache.js.map +1 -0
  231. package/dist/src/core/columns.d.ts +3 -0
  232. package/dist/src/core/columns.d.ts.map +1 -0
  233. package/dist/src/core/columns.js +45 -0
  234. package/dist/src/core/columns.js.map +1 -0
  235. package/dist/src/core/coverage.d.ts +3 -0
  236. package/dist/src/core/coverage.d.ts.map +1 -0
  237. package/dist/src/core/coverage.js +60 -0
  238. package/dist/src/core/coverage.js.map +1 -0
  239. package/dist/src/core/flag.d.ts +3 -0
  240. package/dist/src/core/flag.d.ts.map +1 -0
  241. package/dist/src/core/flag.js +17 -0
  242. package/dist/src/core/flag.js.map +1 -0
  243. package/dist/src/core/hash.d.ts +5 -0
  244. package/dist/src/core/hash.d.ts.map +1 -0
  245. package/dist/src/core/hash.js +29 -0
  246. package/dist/src/core/hash.js.map +1 -0
  247. package/dist/src/core/hit-test.d.ts +6 -0
  248. package/dist/src/core/hit-test.d.ts.map +1 -0
  249. package/dist/src/core/hit-test.js +23 -0
  250. package/dist/src/core/hit-test.js.map +1 -0
  251. package/dist/src/core/index.d.ts +12 -0
  252. package/dist/src/core/index.d.ts.map +1 -0
  253. package/dist/src/core/index.js +30 -0
  254. package/dist/src/core/index.js.map +1 -0
  255. package/dist/src/core/layout.d.ts +3 -0
  256. package/dist/src/core/layout.d.ts.map +1 -0
  257. package/dist/src/core/layout.js +96 -0
  258. package/dist/src/core/layout.js.map +1 -0
  259. package/dist/src/core/order.d.ts +7 -0
  260. package/dist/src/core/order.d.ts.map +1 -0
  261. package/dist/src/core/order.js +12 -0
  262. package/dist/src/core/order.js.map +1 -0
  263. package/dist/src/core/scale.d.ts +9 -0
  264. package/dist/src/core/scale.d.ts.map +1 -0
  265. package/dist/src/core/scale.js +41 -0
  266. package/dist/src/core/scale.js.map +1 -0
  267. package/dist/src/core/snap.d.ts +10 -0
  268. package/dist/src/core/snap.d.ts.map +1 -0
  269. package/dist/src/core/snap.js +43 -0
  270. package/dist/src/core/snap.js.map +1 -0
  271. package/dist/src/core/spans.d.ts +3 -0
  272. package/dist/src/core/spans.d.ts.map +1 -0
  273. package/dist/src/core/spans.js +60 -0
  274. package/dist/src/core/spans.js.map +1 -0
  275. package/dist/src/core/types.d.ts +104 -0
  276. package/dist/src/core/types.d.ts.map +1 -0
  277. package/dist/src/core/types.js +3 -0
  278. package/dist/src/core/types.js.map +1 -0
  279. package/dist/src/core/zone.d.ts +10 -0
  280. package/dist/src/core/zone.d.ts.map +1 -0
  281. package/dist/src/core/zone.js +103 -0
  282. package/dist/src/core/zone.js.map +1 -0
  283. package/dist/src/index.d.ts +29 -0
  284. package/dist/src/index.d.ts.map +1 -0
  285. package/dist/src/index.js +67 -0
  286. package/dist/src/index.js.map +1 -0
  287. package/dist/src/nativewind/index.d.ts +59 -0
  288. package/dist/src/nativewind/index.d.ts.map +1 -0
  289. package/dist/src/nativewind/index.js +24 -0
  290. package/dist/src/nativewind/index.js.map +1 -0
  291. package/docs/migrations.md +61 -0
  292. package/llms.txt +498 -0
  293. package/package.json +155 -8
  294. package/src/adapters/rrule/README.md +41 -0
  295. package/src/adapters/rrule/cache.ts +50 -0
  296. package/src/adapters/rrule/envelope.ts +7 -0
  297. package/src/adapters/rrule/expand.ts +105 -0
  298. package/src/adapters/rrule/hash.ts +13 -0
  299. package/src/adapters/rrule/index.ts +11 -0
  300. package/src/adapters/rrule/net.ts +30 -0
  301. package/src/adapters/rrule/occurrences.ts +288 -0
  302. package/src/adapters/rrule/types.ts +52 -0
  303. package/src/adapters/rrule/validate.ts +78 -0
  304. package/src/components/layers/README.md +15 -0
  305. package/src/components/layers/layers.types.ts +6 -0
  306. package/src/components/layers/parts/gap.tsx +5 -0
  307. package/src/components/layers/parts/interval.tsx +24 -0
  308. package/src/components/layers/utils/styles.ts +24 -0
  309. package/src/components/primitives/README.md +12 -0
  310. package/src/components/primitives/press-point.tsx +5 -0
  311. package/src/components/primitives/press-point.types.ts +5 -0
  312. package/src/components/primitives/press-point.web.tsx +19 -0
  313. package/src/components/primitives/region-style.ts +21 -0
  314. package/src/components/roster/README.md +29 -0
  315. package/src/components/roster/body-layout.tsx +32 -0
  316. package/src/components/roster/index.tsx +108 -0
  317. package/src/components/roster/lanes/interval-hover.tsx +5 -0
  318. package/src/components/roster/lanes/interval-hover.types.ts +11 -0
  319. package/src/components/roster/lanes/interval-hover.web.tsx +19 -0
  320. package/src/components/roster/lanes/lane.tsx +93 -0
  321. package/src/components/roster/lanes/parts/incomplete.tsx +44 -0
  322. package/src/components/roster/lanes/parts/lane-label.tsx +41 -0
  323. package/src/components/roster/layout.tsx +68 -0
  324. package/src/components/roster/parts/body.tsx +24 -0
  325. package/src/components/roster/parts/corner.tsx +3 -0
  326. package/src/components/roster/parts/empty.tsx +5 -0
  327. package/src/components/roster/parts/grid.tsx +26 -0
  328. package/src/components/roster/parts/header-cell.tsx +10 -0
  329. package/src/components/roster/parts/header.tsx +23 -0
  330. package/src/components/roster/parts/lane-label-column.tsx +31 -0
  331. package/src/components/roster/parts/lane-list.tsx +74 -0
  332. package/src/components/roster/roster.types.ts +156 -0
  333. package/src/components/roster/use-roster.ts +133 -0
  334. package/src/components/roster/utils/body-content-key.ts +46 -0
  335. package/src/components/roster/utils/ticks.ts +62 -0
  336. package/src/components/schedule/README.md +23 -0
  337. package/src/components/schedule/days/day.tsx +89 -0
  338. package/src/components/schedule/days/header-layout.tsx +12 -0
  339. package/src/components/schedule/days/layout.tsx +38 -0
  340. package/src/components/schedule/days/parts/column.tsx +59 -0
  341. package/src/components/schedule/days/parts/day-header.tsx +18 -0
  342. package/src/components/schedule/days/parts/grid.tsx +21 -0
  343. package/src/components/schedule/days/parts/now-line.tsx +11 -0
  344. package/src/components/schedule/days/parts/skipped-date.tsx +22 -0
  345. package/src/components/schedule/days/parts/transition.tsx +70 -0
  346. package/src/components/schedule/index.tsx +108 -0
  347. package/src/components/schedule/layout.tsx +42 -0
  348. package/src/components/schedule/parts/gutter.tsx +16 -0
  349. package/src/components/schedule/parts/incomplete.tsx +13 -0
  350. package/src/components/schedule/schedule.types.ts +103 -0
  351. package/src/components/schedule/use-schedule-viewport.ts +13 -0
  352. package/src/components/schedule/use-schedule.ts +75 -0
  353. package/src/components/schedule/utils/days.ts +54 -0
  354. package/src/core/README.md +25 -0
  355. package/src/core/axis.ts +58 -0
  356. package/src/core/cache.ts +38 -0
  357. package/src/core/columns.ts +49 -0
  358. package/src/core/coverage.ts +56 -0
  359. package/src/core/flag.ts +14 -0
  360. package/src/core/hash.ts +28 -0
  361. package/src/core/hit-test.ts +27 -0
  362. package/src/core/index.ts +34 -0
  363. package/src/core/layout.ts +101 -0
  364. package/src/core/order.ts +18 -0
  365. package/src/core/scale.ts +45 -0
  366. package/src/core/snap.ts +52 -0
  367. package/src/core/spans.ts +58 -0
  368. package/src/core/types.ts +92 -0
  369. package/src/core/zone.ts +100 -0
  370. package/src/index.ts +52 -0
  371. package/src/nativewind/README.md +14 -0
  372. package/src/nativewind/index.ts +30 -0
  373. package/index.js +0 -4
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expandRuleSet = expandRuleSet;
4
+ const cache_1 = require("./cache");
5
+ const envelope_1 = require("./envelope");
6
+ const hash_1 = require("./hash");
7
+ const net_1 = require("./net");
8
+ const occurrences_1 = require("./occurrences");
9
+ const validate_1 = require("./validate");
10
+ function expandRuleSet(set, window, options = {}) {
11
+ (0, validate_1.validateWindow)(window);
12
+ const maxEntries = (0, validate_1.nonnegativeInteger)(options.cache?.maxEntries ?? 2000, 'cache.maxEntries');
13
+ const maxEnvelopes = (0, validate_1.nonnegativeInteger)(options.cache?.maxEnvelopes ?? 4, 'cache.maxEnvelopes');
14
+ const cap = (0, validate_1.nonnegativeInteger)(options.caps?.perRuleOccurrences ?? 400, 'caps.perRuleOccurrences');
15
+ let remaining = (0, validate_1.nonnegativeInteger)(options.caps?.totalOccurrences ?? 10000, 'caps.totalOccurrences');
16
+ const rules = [...set.rules].sort(byId);
17
+ const dates = [...set.dates].sort(byId);
18
+ const ordered = [...rules, ...dates];
19
+ for (const input of ordered) {
20
+ (0, validate_1.validateInput)(input);
21
+ (0, occurrences_1.validateDates)(input);
22
+ }
23
+ const stats = {
24
+ rules: set.rules.length,
25
+ dates: set.dates.length,
26
+ expanded: 0,
27
+ cacheHits: 0,
28
+ cacheMisses: 0,
29
+ };
30
+ if (window.start === window.end) {
31
+ (0, cache_1.recordStats)(stats);
32
+ return {
33
+ intervals: [],
34
+ gaps: [],
35
+ envelope: (0, envelope_1.envelopeFor)(window),
36
+ complete: true,
37
+ truncated: [],
38
+ stats,
39
+ };
40
+ }
41
+ const envelope = (0, cache_1.retainedEnvelope)(window, maxEnvelopes);
42
+ (0, cache_1.trim)(cache_1.occurrences, maxEntries);
43
+ const includes = [];
44
+ const excludes = [];
45
+ const truncated = [];
46
+ let dropped = false;
47
+ for (const input of ordered) {
48
+ const key = JSON.stringify([(0, hash_1.bodyKey)(input), envelope.start, envelope.end, cap]);
49
+ let list = cache_1.occurrences.get(key);
50
+ if (list) {
51
+ (0, cache_1.touch)(cache_1.occurrences, key, list);
52
+ stats.cacheHits++;
53
+ }
54
+ else {
55
+ list = (0, occurrences_1.enumerate)(input, envelope, cap);
56
+ (0, cache_1.touch)(cache_1.occurrences, key, list);
57
+ (0, cache_1.trim)(cache_1.occurrences, maxEntries);
58
+ stats.expanded++;
59
+ stats.cacheMisses++;
60
+ }
61
+ // No partial admission: the first list that cannot fit ends the admitted
62
+ // prefix. Fetch all later lists anyway to report their exact retained counts.
63
+ dropped ||= list.spans.length > remaining;
64
+ if (dropped || list.capped) {
65
+ truncated.push({
66
+ id: input.id,
67
+ droppedAtLeast: list.capped ? 1 : list.spans.length,
68
+ });
69
+ }
70
+ if (dropped)
71
+ continue;
72
+ remaining -= list.spans.length;
73
+ const source = { kind: 'date' in input ? 'date' : 'rule', id: input.id };
74
+ if ('date' in input && input.note !== undefined)
75
+ source.label = input.note;
76
+ const target = input.kind === 'include' ? includes : excludes;
77
+ for (const span of list.spans)
78
+ target.push({ ...span, sources: [source] });
79
+ }
80
+ (0, cache_1.recordStats)(stats);
81
+ return {
82
+ ...(0, net_1.net)(includes, excludes, window),
83
+ envelope: { ...envelope },
84
+ complete: truncated.length === 0,
85
+ truncated,
86
+ stats,
87
+ };
88
+ }
89
+ function byId(a, b) {
90
+ return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
91
+ }
92
+ //# sourceMappingURL=expand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expand.js","sourceRoot":"","sources":["../../../../src/adapters/rrule/expand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RosterDate, RosterRule } from './types';
2
+ export declare function bodyKey(input: RosterRule | RosterDate): string;
3
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../src/adapters/rrule/hash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAItD,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAO9D"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bodyKey = bodyKey;
4
+ const hash_1 = require("../../core/hash");
5
+ // Use the core's collision-free canonical encoding as the content hash.
6
+ // Identity and display notes are attached fresh, never cached in occurrence lists.
7
+ function bodyKey(input) {
8
+ const { id: _id, ...body } = input;
9
+ if ('date' in body) {
10
+ const { note: _note, ...date } = body;
11
+ return (0, hash_1.structuralKey)(date);
12
+ }
13
+ return (0, hash_1.structuralKey)(body);
14
+ }
15
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../../src/adapters/rrule/hash.ts"],"names":[],"mappings":";;;AAAA,0CAAgD;AAGhD,wEAAwE;AACxE,mFAAmF;AACnF,iBAAwB,KAA8B;IACpD,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACnC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACtC,OAAO,IAAA,oBAAa,EAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAA,oBAAa,EAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { clearExpandCache, expandStats, resetExpandStats } from './cache';
2
+ export { envelopeFor } from './envelope';
3
+ export { expandRuleSet } from './expand';
4
+ export type { ExpandOptions, ExpandResult, ExpandStats, RosterDate, RosterRule, RuleSet, } from './types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/rrule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,GACR,MAAM,SAAS,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expandRuleSet = exports.envelopeFor = exports.resetExpandStats = exports.expandStats = exports.clearExpandCache = void 0;
4
+ var cache_1 = require("./cache");
5
+ Object.defineProperty(exports, "clearExpandCache", { enumerable: true, get: function () { return cache_1.clearExpandCache; } });
6
+ Object.defineProperty(exports, "expandStats", { enumerable: true, get: function () { return cache_1.expandStats; } });
7
+ Object.defineProperty(exports, "resetExpandStats", { enumerable: true, get: function () { return cache_1.resetExpandStats; } });
8
+ var envelope_1 = require("./envelope");
9
+ Object.defineProperty(exports, "envelopeFor", { enumerable: true, get: function () { return envelope_1.envelopeFor; } });
10
+ var expand_1 = require("./expand");
11
+ Object.defineProperty(exports, "expandRuleSet", { enumerable: true, get: function () { return expand_1.expandRuleSet; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/rrule/index.ts"],"names":[],"mappings":";;;AAAA,iCAA0E;AAAjE,yGAAA,gBAAgB,OAAA;AAAE,oGAAA,WAAW,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AACxD,uCAAyC;AAAhC,uGAAA,WAAW,OAAA;AACpB,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
@@ -0,0 +1,6 @@
1
+ import type { Gap, Interval, Window } from '../../core';
2
+ export declare function net(includes: Interval[], excludes: Interval[], window: Window): {
3
+ intervals: Interval[];
4
+ gaps: Gap[];
5
+ };
6
+ //# sourceMappingURL=net.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../../../src/adapters/rrule/net.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGxD,wBAAgB,GAAG,CACjB,QAAQ,EAAE,QAAQ,EAAE,EACpB,QAAQ,EAAE,QAAQ,EAAE,EACpB,MAAM,EAAE,MAAM,GACb;IAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAsBxC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.net = net;
4
+ const spans_1 = require("../../core/spans");
5
+ function net(includes, excludes, window) {
6
+ const covered = (0, spans_1.sourceSpans)(includes, window);
7
+ const removed = (0, spans_1.sourceSpans)(excludes, window);
8
+ const intervals = [];
9
+ const gaps = [];
10
+ let first = 0;
11
+ for (const include of covered) {
12
+ let start = include.start;
13
+ while (first < removed.length && removed[first].end <= start)
14
+ first++;
15
+ for (let i = first; i < removed.length; i++) {
16
+ const exclude = removed[i];
17
+ if (exclude.start >= include.end)
18
+ break;
19
+ if (start < exclude.start)
20
+ intervals.push({ start, end: exclude.start, sources: include.sources });
21
+ const end = Math.min(include.end, exclude.end);
22
+ gaps.push({ start: Math.max(start, exclude.start), end, sources: exclude.sources });
23
+ start = end;
24
+ }
25
+ if (start < include.end)
26
+ intervals.push({ start, end: include.end, sources: include.sources });
27
+ }
28
+ // Include source changes cannot split an otherwise identical removed span.
29
+ return { intervals, gaps: (0, spans_1.sourceSpans)(gaps, window) };
30
+ }
31
+ //# sourceMappingURL=net.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.js","sourceRoot":"","sources":["../../../../src/adapters/rrule/net.ts"],"names":[],"mappings":";;;AACA,4CAA+C;AAE/C,aACE,QAAoB,EACpB,QAAoB,EACpB,MAAc;IAEd,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC1B,OAAO,KAAK,GAAG,OAAO,CAAC,MAAM,IAAK,OAAO,CAAC,KAAK,CAAS,CAAC,GAAG,IAAI,KAAK;YAAE,KAAK,EAAE,CAAC;QAC/E,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAQ,CAAC;YAClC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG;gBAAE,MAAM;YACxC,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK;gBACvB,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACpF,KAAK,GAAG,GAAG,CAAC;QACd,CAAC;QACD,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG;YAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,2EAA2E;IAC3E,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAA,mBAAW,EAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;AACxD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Window } from '../../core';
2
+ import type { Occurrences } from './cache';
3
+ import type { RosterDate, RosterRule } from './types';
4
+ export declare function enumerate(input: RosterRule | RosterDate, envelope: Window, cap: number, advanceAnchor?: boolean): Occurrences;
5
+ export declare function validateDates(input: RosterRule | RosterDate): void;
6
+ //# sourceMappingURL=occurrences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occurrences.d.ts","sourceRoot":"","sources":["../../../../src/adapters/rrule/occurrences.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,MAAM,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAYtD,wBAAgB,SAAS,CACvB,KAAK,EAAE,UAAU,GAAG,UAAU,EAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EAEX,aAAa,UAAO,GACnB,WAAW,CA2Kb;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAQlE"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enumerate = enumerate;
4
+ exports.validateDates = validateDates;
5
+ // 1.6.0 is an ES module package with a CommonJS build under its require condition
6
+ // and declarations resolved under import. Keep its actual types while selecting
7
+ // the require export for our CJS build and Metro source entry.
8
+ const { allowedWeekdays, RRuleTemporal } = require('rrule-temporal');
9
+ // Both engines must use the same polyfill export; mixed import/require copies
10
+ // fail the recurrence engine's ZonedDateTime instanceof check.
11
+ const { Temporal } = require('@js-temporal/polyfill');
12
+ function enumerate(input, envelope, cap,
13
+ // Internal reference path for testing against original-anchor enumeration.
14
+ advanceAnchor = true) {
15
+ const result = { spans: [], capped: false };
16
+ const admit = (date) => {
17
+ const span = hoursFor(date, input);
18
+ if (span.start >= envelope.end || span.end <= envelope.start || span.start >= span.end)
19
+ return true;
20
+ if (result.spans.length === cap) {
21
+ result.capped = true;
22
+ return false;
23
+ }
24
+ result.spans.push(span);
25
+ return true;
26
+ };
27
+ if ('date' in input) {
28
+ admit(Temporal.PlainDate.from(input.date));
29
+ return result;
30
+ }
31
+ const original = dateTime(input.dtstart, input.timezone);
32
+ const originalWall = plain(original);
33
+ // A cross-date rollback can leave the end on the preceding wall date.
34
+ // Include the following date completely; envelope clipping discards extra candidates.
35
+ const upper = Temporal.Instant.fromEpochMilliseconds(envelope.end)
36
+ .toZonedDateTimeISO(input.timezone)
37
+ .add({ days: 2 })
38
+ .startOfDay();
39
+ const until = input.until === undefined
40
+ ? upper.toPlainDateTime()
41
+ : dateTime(input.until, input.timezone, true);
42
+ const untilDate = input.until !== undefined && /^\d{4}-\d{2}-\d{2}$/.test(input.until)
43
+ ? Temporal.PlainDate.from(input.until)
44
+ : undefined;
45
+ if (!untilDate &&
46
+ (until instanceof Temporal.ZonedDateTime
47
+ ? Temporal.ZonedDateTime.compare(until, anchorFor(original.toPlainDate(), original, input.timezone)) < 0
48
+ : Temporal.PlainDateTime.compare(until, originalWall) < 0))
49
+ return result;
50
+ const anchorWallTime = original.toPlainTime();
51
+ // Iterate wall dates in UTC so zone skips cannot normalize a candidate date.
52
+ // The callback applies the original date cutoff or the exact datetime UNTIL.
53
+ const untilDateEnd = (untilDate ?? until.toPlainDate())
54
+ // An instant after a midnight rollback can have the preceding local date.
55
+ // Keep the later wall date available for the callback's exact-instant filter.
56
+ .add({ days: until instanceof Temporal.ZonedDateTime ? 1 : 0 })
57
+ .toPlainDateTime('23:59:59.999')
58
+ .toZonedDateTime('UTC');
59
+ const upperDate = upper.toPlainDateTime().toZonedDateTime('UTC');
60
+ // Only midnight anchors with interval 1 and no COUNT may skip periods.
61
+ const anchor = advanceAnchor &&
62
+ (input.interval === undefined || input.interval === 1) &&
63
+ input.count === undefined &&
64
+ anchorWallTime.equals('00:00')
65
+ ? advance(originalWall, envelope, input)
66
+ : originalWall;
67
+ const positional = !!input.bysetpos?.length;
68
+ const unit = periodUnit(input);
69
+ const firstPeriod = periodStart(anchor.toPlainDate(), input);
70
+ const bound = Temporal.ZonedDateTime.compare(untilDateEnd, upperDate) < 0 ? untilDateEnd : upperDate;
71
+ const lastPeriod = periodStart(bound.toPlainDate(), input);
72
+ if (Temporal.PlainDate.compare(firstPeriod, lastPeriod) > 0)
73
+ return result;
74
+ // 1.5.2 tests UNTIL only while visiting candidates in its monthly loop.
75
+ // Every supported loop advances at least one authored period per iteration.
76
+ // Exhaustion after the final query period is complete, even with no candidates.
77
+ const maxIterations = Math.floor(firstPeriod.until(lastPeriod, { largestUnit: unit })[unit] / (input.interval ?? 1)) +
78
+ 1;
79
+ const engine = new RRuleTemporal({
80
+ freq: input.frequency,
81
+ dtstart: firstPeriod.toPlainDateTime(anchorWallTime).toZonedDateTime('UTC'),
82
+ // Positions must see the entire final period before UNTIL and envelope admission.
83
+ until: positional
84
+ ? lastPeriod
85
+ .add({ [unit]: 1 })
86
+ .toZonedDateTime('UTC')
87
+ .subtract({ milliseconds: 1 })
88
+ : bound,
89
+ interval: input.interval,
90
+ wkst: allowedWeekdays[input.wkst ?? 0],
91
+ byDay: input.frequency !== 'DAILY' && input.byweekday?.length
92
+ ? input.byweekday.map((day) => allowedWeekdays[day])
93
+ : input.frequency === 'WEEKLY' && !input.bymonthday?.length
94
+ ? [allowedWeekdays[(original.dayOfWeek - 1)]]
95
+ : undefined,
96
+ byMonth: input.bymonth,
97
+ // Explicitly preserve the implicit monthly day; 1.5.2's fallback otherwise
98
+ // constrains a 31st through February and drifts subsequent months.
99
+ byMonthDay: input.bymonthday?.length
100
+ ? input.bymonthday
101
+ : input.frequency === 'MONTHLY' && !input.byweekday?.length
102
+ ? [original.day]
103
+ : undefined,
104
+ tzid: 'UTC',
105
+ includeDtstart: false,
106
+ maxIterations,
107
+ });
108
+ // Version 1.5.2 can replay the iterator when applying its final count filter.
109
+ // Admit each local date once so replay cannot consume COUNT or the cap twice.
110
+ const visited = new Set();
111
+ let admitted = 0;
112
+ const visit = (date) => {
113
+ if (result.capped || admitted === input.count)
114
+ return false;
115
+ if (Temporal.PlainDate.compare(date, original.toPlainDate()) < 0)
116
+ return true;
117
+ const key = date.toString();
118
+ if (visited.has(key))
119
+ return true;
120
+ visited.add(key);
121
+ if (untilDate) {
122
+ if (Temporal.PlainDate.compare(date, untilDate) > 0)
123
+ return true;
124
+ }
125
+ else if (until instanceof Temporal.ZonedDateTime
126
+ ? Temporal.ZonedDateTime.compare(anchorFor(date, original, input.timezone), until) > 0
127
+ : Temporal.PlainDateTime.compare(date.toPlainDateTime(anchorWallTime), until) > 0)
128
+ return true;
129
+ if (!date.toZonedDateTime(input.timezone).toPlainDate().equals(date))
130
+ return true;
131
+ // Lifetime COUNT includes existing dates before the envelope, but never skipped dates.
132
+ admitted++;
133
+ return admit(date);
134
+ };
135
+ let candidateCount = 0;
136
+ let period = '';
137
+ let candidates = [];
138
+ const flush = () => {
139
+ const selected = candidates.filter((_, index) => input.bysetpos?.some((position) => position > 0 ? index === position - 1 : index === candidates.length + position));
140
+ candidates = [];
141
+ return selected.every(visit);
142
+ };
143
+ try {
144
+ engine.all((occurrence, index) => {
145
+ const date = occurrence.toPlainDate();
146
+ // Replayed callback indices restart at zero. They must not enlarge a
147
+ // buffered period, especially when the whole query has only one candidate.
148
+ if (positional && index < candidateCount)
149
+ return false;
150
+ candidateCount++;
151
+ // DAILY BYDAY re-anchors the engine; filter the authored sequence here.
152
+ if (input.frequency === 'DAILY' &&
153
+ input.byweekday?.length &&
154
+ !input.byweekday.includes((date.dayOfWeek - 1)))
155
+ return true;
156
+ if (!positional)
157
+ return visit(date);
158
+ const key = periodStart(date, input).toString();
159
+ if (key !== period) {
160
+ if (!flush())
161
+ return false;
162
+ period = key;
163
+ }
164
+ candidates.push(date);
165
+ return true;
166
+ });
167
+ }
168
+ catch (error) {
169
+ if (!(error instanceof Error) ||
170
+ error.message !== `Maximum iterations (${maxIterations}) exceeded in all()`)
171
+ throw error;
172
+ }
173
+ flush();
174
+ return result;
175
+ }
176
+ // Validate temporal fields even when the display window has no elapsed time.
177
+ function validateDates(input) {
178
+ if ('date' in input) {
179
+ Temporal.PlainDate.from(input.date).toZonedDateTime(input.timezone);
180
+ return;
181
+ }
182
+ plain(dateTime(input.dtstart, input.timezone)).toZonedDateTime(input.timezone);
183
+ if (input.until !== undefined)
184
+ plain(dateTime(input.until, input.timezone, true)).toZonedDateTime(input.timezone);
185
+ }
186
+ function hoursFor(date, input) {
187
+ const midnight = date.toPlainDateTime();
188
+ const dayStart = date.toZonedDateTime(input.timezone);
189
+ if (!dayStart.toPlainDate().equals(date)) {
190
+ return { start: dayStart.epochMilliseconds, end: dayStart.epochMilliseconds };
191
+ }
192
+ const wholeDay = input.hourstart === undefined && input.hourend === undefined;
193
+ // Whole-day bounds resolve PlainDates to first instants. Explicit hours use
194
+ // compatible wall time, choosing the earlier repeat and advancing skips.
195
+ const at = (hour) => {
196
+ const wall = midnight.add({ milliseconds: Math.round(hour * 3_600_000) });
197
+ return (wholeDay ? wall.toPlainDate() : wall).toZonedDateTime(input.timezone).epochMilliseconds;
198
+ };
199
+ return { start: at(input.hourstart ?? 0), end: at(input.hourend ?? 24) };
200
+ }
201
+ function dateTime(value, timezone, endOfDate = false) {
202
+ if (/^\d{4}-\d{2}-\d{2}$/.test(value)) {
203
+ const date = Temporal.PlainDate.from(value);
204
+ return date.toPlainDateTime(endOfDate ? '23:59:59.999' : '00:00');
205
+ }
206
+ if (/(?:Z|[+-]\d{2}:?\d{2})(?:\[[^\]]*\])?$/i.test(value)) {
207
+ return Temporal.Instant.from(value).toZonedDateTimeISO(timezone);
208
+ }
209
+ return Temporal.PlainDateTime.from(value);
210
+ }
211
+ function plain(value) {
212
+ return value instanceof Temporal.ZonedDateTime ? value.toPlainDateTime() : value;
213
+ }
214
+ // Keep the original wall time and back up one period so WKST/BYDAY cannot lose
215
+ // an earlier candidate. A monthly jump must never constrain the 31st to the 28th.
216
+ function advance(original, envelope, input) {
217
+ // Include the local date crossing the left edge, regardless of anchor wall time.
218
+ const lower = Temporal.Instant.fromEpochMilliseconds(envelope.start)
219
+ .toZonedDateTimeISO(input.timezone)
220
+ .startOfDay();
221
+ const unit = input.frequency === 'MONTHLY' ? 'months' : input.frequency === 'WEEKLY' ? 'weeks' : 'days';
222
+ const originalDate = original.toPlainDate();
223
+ const interval = input.interval ?? 1;
224
+ const distance = originalDate.until(lower.toPlainDate(), { largestUnit: unit })[unit];
225
+ let steps = Math.max(0, Math.floor(distance / interval) - 1);
226
+ while (steps > 0) {
227
+ const candidate = originalDate.add({ [unit]: steps * interval });
228
+ if ((unit !== 'weeks' || candidate.dayOfWeek === originalDate.dayOfWeek) &&
229
+ (unit !== 'months' || candidate.day === originalDate.day) &&
230
+ candidate.toZonedDateTime(input.timezone).toPlainDate().equals(candidate))
231
+ return candidate.toPlainDateTime(original.toPlainTime());
232
+ steps--;
233
+ }
234
+ return original;
235
+ }
236
+ // Prefer the original offset in repeated time; otherwise resolve skips compatibly.
237
+ function anchorFor(date, original, timezone) {
238
+ return original instanceof Temporal.ZonedDateTime
239
+ ? original.with({ year: date.year, month: date.month, day: date.day }, { offset: 'prefer' })
240
+ : date.toPlainDateTime(original.toPlainTime()).toZonedDateTime(timezone);
241
+ }
242
+ function periodUnit(input) {
243
+ return input.frequency === 'MONTHLY' ? 'months' : input.frequency === 'WEEKLY' ? 'weeks' : 'days';
244
+ }
245
+ function periodStart(date, input) {
246
+ if (input.frequency === 'MONTHLY')
247
+ return date.with({ day: 1 });
248
+ if (input.frequency === 'WEEKLY')
249
+ return date.subtract({ days: (date.dayOfWeek - 1 - (input.wkst ?? 0) + 7) % 7 });
250
+ return date;
251
+ }
252
+ //# sourceMappingURL=occurrences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occurrences.js","sourceRoot":"","sources":["../../../../src/adapters/rrule/occurrences.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { Gap, Interval, Weekday, Window } from '../../core';
2
+ export type RosterRule = {
3
+ id: string;
4
+ kind: 'include' | 'exclude';
5
+ frequency: 'DAILY' | 'WEEKLY' | 'MONTHLY';
6
+ dtstart: string;
7
+ until?: string;
8
+ count?: number;
9
+ interval?: number;
10
+ wkst?: Weekday;
11
+ byweekday?: Weekday[];
12
+ bymonth?: number[];
13
+ bymonthday?: number[];
14
+ bysetpos?: number[];
15
+ /** Local hours in timezone, end-exclusive; 24 means next local midnight. */
16
+ hourstart: number;
17
+ hourend: number;
18
+ timezone: string;
19
+ };
20
+ export type RosterDate = {
21
+ id: string;
22
+ kind: 'include' | 'exclude';
23
+ date: string;
24
+ timezone: string;
25
+ note?: string;
26
+ /** Both hours present for a partial day, or both absent for the whole day. */
27
+ hourstart?: number;
28
+ hourend?: number;
29
+ };
30
+ export type RuleSet = {
31
+ rules: RosterRule[];
32
+ dates: RosterDate[];
33
+ };
34
+ export type ExpandOptions = {
35
+ cache?: {
36
+ maxEntries?: number;
37
+ maxEnvelopes?: number;
38
+ };
39
+ caps?: {
40
+ perRuleOccurrences?: number;
41
+ totalOccurrences?: number;
42
+ };
43
+ };
44
+ export type ExpandStats = {
45
+ rules: number;
46
+ dates: number;
47
+ expanded: number;
48
+ cacheHits: number;
49
+ cacheMisses: number;
50
+ };
51
+ export type ExpandResult = {
52
+ intervals: Interval[];
53
+ gaps: Gap[];
54
+ envelope: Window;
55
+ complete: boolean;
56
+ truncated: Array<{
57
+ id: string;
58
+ droppedAtLeast: number;
59
+ }>;
60
+ stats: ExpandStats;
61
+ };
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/rrule/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AACnE,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,IAAI,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE,CAAC;AACF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/adapters/rrule/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { Window } from '../../core';
2
+ import type { RosterDate, RosterRule } from './types';
3
+ export declare function validateWindow(window: Window): void;
4
+ export declare function nonnegativeInteger(value: number, name: string): number;
5
+ export declare function validateInput(input: RosterRule | RosterDate): void;
6
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/adapters/rrule/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQnD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAItE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CA0ClE"}