react-native-roster 0.4.7 → 0.4.9

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 (29) hide show
  1. package/README.md +4 -0
  2. package/dist/src/components/roster/roster.types.d.ts +3 -1
  3. package/dist/src/components/roster/roster.types.d.ts.map +1 -1
  4. package/dist/src/components/roster/use-roster-press.d.ts +2 -2
  5. package/dist/src/components/roster/use-roster-press.d.ts.map +1 -1
  6. package/dist/src/components/roster/use-roster-press.js +4 -4
  7. package/dist/src/components/roster/use-roster-press.js.map +1 -1
  8. package/dist/src/components/roster/use-roster.d.ts.map +1 -1
  9. package/dist/src/components/roster/use-roster.js +8 -6
  10. package/dist/src/components/roster/use-roster.js.map +1 -1
  11. package/dist/src/components/schedule/schedule.types.d.ts +3 -1
  12. package/dist/src/components/schedule/schedule.types.d.ts.map +1 -1
  13. package/dist/src/components/schedule/use-schedule.d.ts.map +1 -1
  14. package/dist/src/components/schedule/use-schedule.js +3 -1
  15. package/dist/src/components/schedule/use-schedule.js.map +1 -1
  16. package/dist/src/core/lru.d.ts +3 -0
  17. package/dist/src/core/lru.d.ts.map +1 -0
  18. package/dist/src/core/lru.js +18 -0
  19. package/dist/src/core/lru.js.map +1 -0
  20. package/llms.txt +9 -2
  21. package/package.json +1 -1
  22. package/src/components/roster/README.md +6 -0
  23. package/src/components/roster/roster.types.ts +3 -0
  24. package/src/components/roster/use-roster-press.ts +10 -4
  25. package/src/components/roster/use-roster.ts +19 -5
  26. package/src/components/schedule/README.md +4 -0
  27. package/src/components/schedule/schedule.types.ts +3 -0
  28. package/src/components/schedule/use-schedule.ts +4 -1
  29. package/src/core/lru.ts +13 -0
package/README.md CHANGED
@@ -262,6 +262,10 @@ datasets then cannot collide when they reuse lane IDs and versions. Omitting the
262
262
  core-owned default, while deliberately reusing one identity shares target-warm coverage across
263
263
  projections.
264
264
 
265
+ Every mounted `Roster`, `Schedule`, `useRoster`, and `useSchedule` surface owns an isolated
266
+ identity by default. Pass a stable `cacheIdentity` only when several surfaces render the same
267
+ dataset and should deliberately share target-warm geometry and coverage.
268
+
265
269
  Minified, with peers external: `/core` is 13.6 kB and the root entry is 51.2 kB.
266
270
  `/rrule` adds 12.9 kB of its own code plus its two dependencies, `rrule-temporal`
267
271
  and `@js-temporal/polyfill`, which install with the package. Web runs in CI on
@@ -1,7 +1,7 @@
1
1
  import type { ComponentType, ReactNode, RefObject } from 'react';
2
2
  import type { LayoutChangeEvent, NativeScrollEvent, NativeSyntheticEvent, ScrollView, StyleProp, ViewStyle } from 'react-native';
3
3
  import type { SharedValue } from 'react-native-reanimated';
4
- import type { Coverage, Lane, LaneComparator, LaneFlag, LaneGeometry, Projection, Rect, Source, Window, WindowSpec } from '../../core';
4
+ import type { Coverage, Lane, LaneComparator, LaneFlag, LaneGeometry, Projection, Rect, ScopedCacheIdentity, Source, Window, WindowSpec } from '../../core';
5
5
  import type { GapInput, IntervalInput } from '../layers/layers.types';
6
6
  import type { SelectionLayoutProps } from './selection/selection-layout.types';
7
7
  /** A selected interval: the rect input plus its absolute bounds and the view zone for formatting. */
@@ -32,6 +32,8 @@ export type RosterScroll = {
32
32
  export type RosterInput = {
33
33
  /** Retain interval selection on press, default false. Lives on RosterInput for hook consumers. */
34
34
  selectable?: boolean;
35
+ /** Stable dataset cache identity; omitted gives this Roster or useRoster instance isolated ownership. */
36
+ cacheIdentity?: ScopedCacheIdentity;
35
37
  lanes: Lane[];
36
38
  windowSpec: WindowSpec;
37
39
  minuteStep?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"roster.types.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/roster.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roster.types.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/roster.types.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Dispatch, SetStateAction } from 'react';
2
- import type { Lane, Window } from '../../core';
2
+ import type { Lane, ScopedCacheIdentity, Window } from '../../core';
3
3
  import type { RosterInput, RosterModel, RosterProjection } from './roster.types';
4
4
  export type SelectedInterval = NonNullable<RosterModel['selection']>;
5
- export declare function useRosterPress(input: RosterInput, window: Window, projection: RosterProjection, width: number, selection: RosterModel['selection'], setSelected: Dispatch<SetStateAction<SelectedInterval | null>>): (lane: Lane, pointX: number, pointY: number) => void;
5
+ export declare function useRosterPress(input: RosterInput, window: Window, projection: RosterProjection, cacheIdentity: ScopedCacheIdentity, width: number, selection: RosterModel['selection'], setSelected: Dispatch<SetStateAction<SelectedInterval | null>>): (lane: Lane, pointX: number, pointY: number) => void;
6
6
  //# sourceMappingURL=use-roster-press.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-roster-press.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/use-roster-press.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAGrE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,EACnC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,UAMhC,IAAI,UAAU,MAAM,UAAU,MAAM,KAAG,IAAI,CAmD1E"}
1
+ {"version":3,"file":"use-roster-press.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/use-roster-press.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAGrE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAC5B,aAAa,EAAE,mBAAmB,EAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,EACnC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,UAMhC,IAAI,UAAU,MAAM,UAAU,MAAM,KAAG,IAAI,CAwD1E"}
@@ -5,13 +5,13 @@ const react_1 = require("react");
5
5
  const core_1 = require("../../core");
6
6
  const hit_test_1 = require("../../core/hit-test");
7
7
  // Isolate the stable press ref so it does not prevent compilation of derived roster values.
8
- function useRosterPress(input, window, projection, width, selection, setSelected) {
9
- const currentPress = { input, window, projection, width, selection };
8
+ function useRosterPress(input, window, projection, cacheIdentity, width, selection, setSelected) {
9
+ const currentPress = { input, window, projection, cacheIdentity, width, selection };
10
10
  const pressInput = (0, react_1.useRef)(currentPress);
11
11
  pressInput.current = currentPress;
12
12
  const [press] = (0, react_1.useState)(() => {
13
13
  return function press(lane, pointX, pointY) {
14
- const { input, window, projection, width, selection } = pressInput.current;
14
+ const { input, window, projection, cacheIdentity, width, selection } = pressInput.current;
15
15
  const { minuteStep = 60, onIntervalPress, onGapPress, onCellPress } = input;
16
16
  const { rowHeight, viewTimezone } = projection;
17
17
  if (!Number.isFinite(pointX) ||
@@ -21,7 +21,7 @@ function useRosterPress(input, window, projection, width, selection, setSelected
21
21
  pointY < 0 ||
22
22
  pointY >= rowHeight)
23
23
  return;
24
- const hit = (0, hit_test_1.hitTest)(lane, (0, core_1.layoutLane)(lane, window, projection), pointX, pointY);
24
+ const hit = (0, hit_test_1.hitTest)(lane, (0, core_1.layoutLane)(lane, window, projection, cacheIdentity), pointX, pointY);
25
25
  if (hit?.kind === 'interval') {
26
26
  if (input.selectable) {
27
27
  const layer = lane.layers.find((layer) => layer.id === hit.rect.layerId);
@@ -1 +1 @@
1
- {"version":3,"file":"use-roster-press.js","sourceRoot":"","sources":["../../../../src/components/roster/use-roster-press.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-roster-press.js","sourceRoot":"","sources":["../../../../src/components/roster/use-roster-press.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-roster.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/use-roster.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AAIjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CA2GzD"}
1
+ {"version":3,"file":"use-roster.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/use-roster.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AAIjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAwHzD"}
@@ -8,6 +8,8 @@ const use_roster_press_1 = require("./use-roster-press");
8
8
  const ticks_1 = require("./utils/ticks");
9
9
  function useRoster(input) {
10
10
  const { lanes, windowSpec, now = null, minuteStep = 60, sortLanes = core_1.byLabel, rowHeight = 48, pxPerMinute = 0.5, onNavigate, } = input;
11
+ const [ownedCacheIdentity] = (0, react_1.useState)(() => ({}));
12
+ const cacheIdentity = input.cacheIdentity ?? ownedCacheIdentity;
11
13
  const [selected, setSelected] = (0, react_1.useState)(null);
12
14
  function dismissSelection() {
13
15
  setSelected(null);
@@ -39,20 +41,20 @@ function useRoster(input) {
39
41
  ? { x: (0, core_1.xAtTime)(projection, window, now), now }
40
42
  : null;
41
43
  const contentWidth = duration * projection.pxPerMinute;
42
- const coverage = new Map(lanes.map((lane) => [lane.id, (0, core_1.coverageFor)(lane, window)]));
44
+ const coverage = new Map(lanes.map((lane) => [lane.id, (0, core_1.coverageFor)(lane, window, cacheIdentity)]));
43
45
  const orderedLanes = [...lanes].sort((a, b) => sortLanes(a, b, coverage));
44
46
  const laneState = new Map(lanes.map((lane) => [
45
47
  lane.id,
46
48
  { flag: (0, core_1.flagFor)(lane, window), complete: lane.complete ?? true },
47
49
  ]));
48
50
  function geometryFor(lane) {
49
- return (0, core_1.layoutLane)(lane, window, projection);
51
+ return (0, core_1.layoutLane)(lane, window, projection, cacheIdentity);
50
52
  }
51
- const selection = reconcileSelection(selected, lanes, window, projection, input.selectable ?? false);
53
+ const selection = reconcileSelection(selected, lanes, window, projection, cacheIdentity, input.selectable ?? false);
52
54
  // Discard invalid selection during reconciliation, before rendering any stale detail.
53
55
  if (selected && !selection)
54
56
  setSelected(null);
55
- const press = (0, use_roster_press_1.useRosterPress)(input, window, projection, contentWidth, selection, setSelected);
57
+ const press = (0, use_roster_press_1.useRosterPress)(input, window, projection, cacheIdentity, contentWidth, selection, setSelected);
56
58
  return {
57
59
  selection,
58
60
  dismissSelection,
@@ -93,7 +95,7 @@ function useRoster(input) {
93
95
  };
94
96
  }
95
97
  // Match provenance and nearest bounds while preserving the stored display values.
96
- function reconcileSelection(selected, lanes, window, projection, enabled) {
98
+ function reconcileSelection(selected, lanes, window, projection, cacheIdentity, enabled) {
97
99
  if (selected && enabled) {
98
100
  const lane = lanes.find((lane) => lane.id === selected.lane.id);
99
101
  const layer = lane?.layers.find((layer) => layer.id === selected.layer.id);
@@ -101,7 +103,7 @@ function reconcileSelection(selected, lanes, window, projection, enabled) {
101
103
  const sources = new Set(selected.rect.sources.map((source) => JSON.stringify([source.kind, source.id])));
102
104
  let rect;
103
105
  let nearest = 1;
104
- for (const candidate of (0, core_1.layoutLane)(lane, window, projection).rects) {
106
+ for (const candidate of (0, core_1.layoutLane)(lane, window, projection, cacheIdentity).rects) {
105
107
  if (candidate.layerId !== layer.id)
106
108
  continue;
107
109
  const identities = new Set(candidate.sources.map((source) => JSON.stringify([source.kind, source.id])));
@@ -1 +1 @@
1
- {"version":3,"file":"use-roster.js","sourceRoot":"","sources":["../../../../src/components/roster/use-roster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-roster.js","sourceRoot":"","sources":["../../../../src/components/roster/use-roster.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { ComponentType } from 'react';
2
2
  import type { StyleProp, ViewStyle } from 'react-native';
3
- import type { DayColumn, Lane, LaneGeometry, Projection, Rect, Source, Transition, Window, WindowSpec } from '../../core';
3
+ import type { DayColumn, Lane, LaneGeometry, Projection, Rect, ScopedCacheIdentity, Source, Transition, Window, WindowSpec } from '../../core';
4
4
  import type { GapInput, IntervalInput } from '../layers/layers.types';
5
5
  export type ScheduleWindowSpec = WindowSpec & {
6
6
  span: 'day' | 'week';
@@ -11,6 +11,8 @@ export type ScheduleProjection = Extract<Projection, {
11
11
  export type ScheduleInput = {
12
12
  lane: Lane;
13
13
  windowSpec: ScheduleWindowSpec;
14
+ /** Stable cache identity for deliberate reuse across surfaces rendering one dataset. */
15
+ cacheIdentity?: ScopedCacheIdentity;
14
16
  minuteStep?: number;
15
17
  /** Positive finite pixels per wall-clock hour; defaults to 48. */
16
18
  pxPerHour?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.types.d.ts","sourceRoot":"","sources":["../../../../src/components/schedule/schedule.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedule.types.d.ts","sourceRoot":"","sources":["../../../../src/components/schedule/schedule.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-schedule.d.ts","sourceRoot":"","sources":["../../../../src/components/schedule/use-schedule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,kBAAkB,CAAC;AAGzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAoE/D"}
1
+ {"version":3,"file":"use-schedule.d.ts","sourceRoot":"","sources":["../../../../src/components/schedule/use-schedule.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,kBAAkB,CAAC;AAGzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAsE/D"}
@@ -8,6 +8,8 @@ const use_schedule_viewport_1 = require("./use-schedule-viewport");
8
8
  function useSchedule(input) {
9
9
  const { lane, windowSpec, minuteStep = 60, pxPerHour = 48 } = input;
10
10
  const width = (0, react_1.useContext)(use_schedule_viewport_1.ScheduleWidth);
11
+ const [ownedCacheIdentity] = (0, react_1.useState)(() => ({}));
12
+ const cacheIdentity = input.cacheIdentity ?? ownedCacheIdentity;
11
13
  const [clock, setClock] = (0, react_1.useState)(Date.now);
12
14
  // The current-time indicator follows the wall clock for the mounted surface's lifetime.
13
15
  (0, react_1.useEffect)(() => {
@@ -27,7 +29,7 @@ function useSchedule(input) {
27
29
  columnWidth: width / Math.max(1, days.length),
28
30
  days,
29
31
  };
30
- const geometry = (0, core_1.layoutLane)(lane, window, projection);
32
+ const geometry = (0, core_1.layoutLane)(lane, window, projection, cacheIdentity);
31
33
  const currentPress = { input, window, projection, geometry };
32
34
  const pressInput = (0, react_1.useRef)(currentPress);
33
35
  pressInput.current = currentPress;
@@ -1 +1 @@
1
- {"version":3,"file":"use-schedule.js","sourceRoot":"","sources":["../../../../src/components/schedule/use-schedule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-schedule.js","sourceRoot":"","sources":["../../../../src/components/schedule/use-schedule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function touch<K, V>(cache: Map<K, V>, key: K, value: V): V;
2
+ export declare function trim<K, V>(cache: Map<K, V>, limit: number): void;
3
+ //# sourceMappingURL=lru.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru.d.ts","sourceRoot":"","sources":["../../../src/core/lru.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAIjE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMhE"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.touch = touch;
4
+ exports.trim = trim;
5
+ function touch(cache, key, value) {
6
+ cache.delete(key);
7
+ cache.set(key, value);
8
+ return value;
9
+ }
10
+ function trim(cache, limit) {
11
+ while (cache.size > limit) {
12
+ const oldest = cache.keys().next();
13
+ if (oldest.done)
14
+ return;
15
+ cache.delete(oldest.value);
16
+ }
17
+ }
18
+ //# sourceMappingURL=lru.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru.js","sourceRoot":"","sources":["../../../src/core/lru.ts"],"names":[],"mappings":";;;;AAAA,eAA4B,KAAgB,EAAE,GAAM,EAAE,KAAQ;IAC5D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,cAA2B,KAAgB,EAAE,KAAa;IACxD,OAAO,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI;YAAE,OAAO;QACxB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
package/llms.txt CHANGED
@@ -189,7 +189,8 @@ Component props are ComponentType<Input>.
189
189
  Roster required props: lanes: Lane[], windowSpec: WindowSpec.
190
190
  Optional: now (epoch ms or null, default null), minuteStep (60), rowHeight (48),
191
191
  pxPerMinute (default 0.5, positive finite, grows to fit viewport),
192
- sortLanes (byLabel), highlightSource, onNavigate, onIntervalPress, onGapPress,
192
+ cacheIdentity (stable ScopedCacheIdentity for deliberate dataset sharing), sortLanes (byLabel),
193
+ highlightSource, onNavigate, onIntervalPress, onGapPress,
193
194
  onCellPress, onIntervalHover (web only), style, headerStyle, laneLabelColumnStyle,
194
195
  bodyStyle, laneLabelWidth (180), neverSetLabel, incompleteLabel, and zones below.
195
196
  Each style prop has a className twin (className, headerClassName,
@@ -208,6 +209,8 @@ geometryFor(lane), scroll, press(lane,x,y), ticks, contentWidth, viewport,
208
209
  now, nowLine, onLayout, navigate, selection, dismissSelection, and status ('empty' or 'ready'). There is no visibleRange
209
210
  field in the shipped public model. Custom layouts must wire onLayout. Custom
210
211
  bodies compute geometry only for mounted lanes, preserving virtualization.
212
+ Each Roster or useRoster instance owns an isolated cache identity when cacheIdentity is omitted.
213
+ Pass the same stable identity to surfaces that deliberately share one dataset.
211
214
  now retains the raw instant. nowLine is { x, now }, using xAtTime with the fitted
212
215
  projection.pxPerMinute scale; it is null when now is null or outside the
213
216
  end-exclusive window. The caller owns clock updates.
@@ -218,7 +221,7 @@ windows use their exact elapsed duration, including sub-minute spans. Cell times
218
221
  are clamped up to window.start and rejected at or beyond window.end.
219
222
 
220
223
  Schedule required props: lane: Lane, windowSpec: WindowSpec & {span:'day'|'week'}.
221
- Optional: minuteStep (60), pxPerHour (48, positive finite), highlightSource,
224
+ Optional: cacheIdentity (stable ScopedCacheIdentity), minuteStep (60), pxPerHour (48, positive finite), highlightSource,
222
225
  onNavigate, onIntervalPress, onGapPress, onCellPress, style, headerStyle,
223
226
  gutterStyle, daysStyle, incompleteLabel, and zones below. Class twins are
224
227
  className, headerClassName, gutterClassName, and daysClassName. No month/custom
@@ -229,6 +232,8 @@ press(columnIndex,x,y), and status:'ready'. The standalone hook uses a 280 px gr
229
232
  The chassis measures width, reserves a 48 px gutter, and fits all actual day
230
233
  columns without horizontal scrolling; the body scrolls vertically. now updates
231
234
  every minute and is null outside the selected window.
235
+ Each mounted Schedule or useSchedule surface owns an isolated cache identity by default.
236
+ Reuse one explicit cacheIdentity only across surfaces that render the same dataset.
232
237
 
233
238
  Props ending in Component accept ComponentType<Input>, mounted as React elements.
234
239
  Props ending in Zone accept ReactNode; pass null to suppress a singleton default.
@@ -412,6 +417,8 @@ projection-independent. ScopedCacheIdentity is a stable empty object whose refer
412
417
  identifies one dataset. Omitted identities use the core-owned default; pass the same
413
418
  explicit identity to share one dataset across calls and projections, and use distinct
414
419
  identities for independent datasets whose lane IDs and versions can collide.
420
+ Roster resolves one instance-owned identity by default, or its cacheIdentity input when supplied,
421
+ and uses it for coverage, visible lane geometry, press hit-testing, and selection reconciliation.
415
422
  flagFor(lane,window) is cheap and uncached. Geometry assembly reads fresh flag and
416
423
  coverage outside cached rects. Repeated complete inputs retain references; treat
417
424
  all results as read-only.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-roster",
3
- "version": "0.4.7",
3
+ "version": "0.4.9",
4
4
  "description": "Resource timeline and schedule components for React Native and web, with layered intervals, coverage, provenance, and explicit daylight-saving handling.",
5
5
  "keywords": [
6
6
  "react-native",
@@ -43,6 +43,12 @@ with a noninteractive 2 px red line; `nowLineComponent` accepts the exported
43
43
  content. Now values and component identity never enter the lane list or body
44
44
  content key. The caller owns clock updates.
45
45
 
46
+ Each `Roster` or `useRoster` instance owns a stable `ScopedCacheIdentity` by default, isolating
47
+ datasets whose lane IDs and versions collide. The optional `cacheIdentity` input replaces that
48
+ owned identity so multiple surfaces can deliberately share one dataset's target-warm entries. The
49
+ resolved identity is used consistently for coverage, `geometryFor`, press hit-testing, and
50
+ selection reconciliation.
51
+
46
52
  `selection/` holds the runtime-swappable presentation strategies (native popover, web popover) for one `SelectionLayoutProps` contract.
47
53
 
48
54
  - `selection/selection-layout.types.ts`: exported `SelectionLayoutProps`, with body
@@ -16,6 +16,7 @@ import type {
16
16
  LaneGeometry,
17
17
  Projection,
18
18
  Rect,
19
+ ScopedCacheIdentity,
19
20
  Source,
20
21
  Window,
21
22
  WindowSpec,
@@ -45,6 +46,8 @@ export type RosterScroll = {
45
46
  export type RosterInput = {
46
47
  /** Retain interval selection on press, default false. Lives on RosterInput for hook consumers. */
47
48
  selectable?: boolean;
49
+ /** Stable dataset cache identity; omitted gives this Roster or useRoster instance isolated ownership. */
50
+ cacheIdentity?: ScopedCacheIdentity;
48
51
  lanes: Lane[];
49
52
  windowSpec: WindowSpec;
50
53
  minuteStep?: number;
@@ -1,6 +1,6 @@
1
1
  import type { Dispatch, SetStateAction } from 'react';
2
2
  import { useRef, useState } from 'react';
3
- import type { Lane, Window } from '../../core';
3
+ import type { Lane, ScopedCacheIdentity, Window } from '../../core';
4
4
  import { layoutLane, snapToStep, timeAtX } from '../../core';
5
5
  import { hitTest } from '../../core/hit-test';
6
6
  import type { RosterInput, RosterModel, RosterProjection } from './roster.types';
@@ -12,16 +12,17 @@ export function useRosterPress(
12
12
  input: RosterInput,
13
13
  window: Window,
14
14
  projection: RosterProjection,
15
+ cacheIdentity: ScopedCacheIdentity,
15
16
  width: number,
16
17
  selection: RosterModel['selection'],
17
18
  setSelected: Dispatch<SetStateAction<SelectedInterval | null>>,
18
19
  ) {
19
- const currentPress = { input, window, projection, width, selection };
20
+ const currentPress = { input, window, projection, cacheIdentity, width, selection };
20
21
  const pressInput = useRef(currentPress);
21
22
  pressInput.current = currentPress;
22
23
  const [press] = useState(() => {
23
24
  return function press(lane: Lane, pointX: number, pointY: number): void {
24
- const { input, window, projection, width, selection } = pressInput.current;
25
+ const { input, window, projection, cacheIdentity, width, selection } = pressInput.current;
25
26
  const { minuteStep = 60, onIntervalPress, onGapPress, onCellPress } = input;
26
27
  const { rowHeight, viewTimezone } = projection;
27
28
  if (
@@ -33,7 +34,12 @@ export function useRosterPress(
33
34
  pointY >= rowHeight
34
35
  )
35
36
  return;
36
- const hit = hitTest(lane, layoutLane(lane, window, projection), pointX, pointY);
37
+ const hit = hitTest(
38
+ lane,
39
+ layoutLane(lane, window, projection, cacheIdentity),
40
+ pointX,
41
+ pointY,
42
+ );
37
43
  if (hit?.kind === 'interval') {
38
44
  if (input.selectable) {
39
45
  const layer = lane.layers.find((layer) => layer.id === hit.rect.layerId);
@@ -1,7 +1,7 @@
1
1
  import { useRef, useState } from 'react';
2
2
  import type { ScrollView } from 'react-native';
3
3
  import { makeMutable, useAnimatedStyle } from 'react-native-reanimated';
4
- import type { Lane, LaneGeometry, Rect, Window } from '../../core';
4
+ import type { Lane, LaneGeometry, Rect, ScopedCacheIdentity, Window } from '../../core';
5
5
  import { byLabel, coverageFor, flagFor, layoutLane, timeAtX, windowFor, xAtTime } from '../../core';
6
6
  import type { RosterInput, RosterModel, RosterProjection } from './roster.types';
7
7
  import { type SelectedInterval, useRosterPress } from './use-roster-press';
@@ -18,6 +18,8 @@ export function useRoster(input: RosterInput): RosterModel {
18
18
  pxPerMinute = 0.5,
19
19
  onNavigate,
20
20
  } = input;
21
+ const [ownedCacheIdentity] = useState<ScopedCacheIdentity>(() => ({}));
22
+ const cacheIdentity = input.cacheIdentity ?? ownedCacheIdentity;
21
23
  const [selected, setSelected] = useState<SelectedInterval | null>(null);
22
24
  function dismissSelection() {
23
25
  setSelected(null);
@@ -52,7 +54,9 @@ export function useRoster(input: RosterInput): RosterModel {
52
54
  ? { x: xAtTime(projection, window, now), now }
53
55
  : null;
54
56
  const contentWidth = duration * projection.pxPerMinute;
55
- const coverage = new Map(lanes.map((lane) => [lane.id, coverageFor(lane, window)]));
57
+ const coverage = new Map(
58
+ lanes.map((lane) => [lane.id, coverageFor(lane, window, cacheIdentity)]),
59
+ );
56
60
  const orderedLanes = [...lanes].sort((a, b) => sortLanes(a, b, coverage));
57
61
  const laneState = new Map(
58
62
  lanes.map((lane) => [
@@ -61,18 +65,27 @@ export function useRoster(input: RosterInput): RosterModel {
61
65
  ]),
62
66
  );
63
67
  function geometryFor(lane: Lane): LaneGeometry {
64
- return layoutLane(lane, window, projection);
68
+ return layoutLane(lane, window, projection, cacheIdentity);
65
69
  }
66
70
  const selection = reconcileSelection(
67
71
  selected,
68
72
  lanes,
69
73
  window,
70
74
  projection,
75
+ cacheIdentity,
71
76
  input.selectable ?? false,
72
77
  );
73
78
  // Discard invalid selection during reconciliation, before rendering any stale detail.
74
79
  if (selected && !selection) setSelected(null);
75
- const press = useRosterPress(input, window, projection, contentWidth, selection, setSelected);
80
+ const press = useRosterPress(
81
+ input,
82
+ window,
83
+ projection,
84
+ cacheIdentity,
85
+ contentWidth,
86
+ selection,
87
+ setSelected,
88
+ );
76
89
  return {
77
90
  selection,
78
91
  dismissSelection,
@@ -122,6 +135,7 @@ function reconcileSelection(
122
135
  lanes: Lane[],
123
136
  window: Window,
124
137
  projection: RosterProjection,
138
+ cacheIdentity: ScopedCacheIdentity,
125
139
  enabled: boolean,
126
140
  ): RosterModel['selection'] {
127
141
  if (selected && enabled) {
@@ -133,7 +147,7 @@ function reconcileSelection(
133
147
  );
134
148
  let rect: Rect | undefined;
135
149
  let nearest = 1;
136
- for (const candidate of layoutLane(lane, window, projection).rects) {
150
+ for (const candidate of layoutLane(lane, window, projection, cacheIdentity).rects) {
137
151
  if (candidate.layerId !== layer.id) continue;
138
152
  const identities = new Set(
139
153
  candidate.sources.map((source) => JSON.stringify([source.kind, source.id])),
@@ -21,3 +21,7 @@ The chassis binds default component types once; ScheduleDay mounts components
21
21
  with day data and passes nodes into ScheduleDayLayout. There is no black-box day
22
22
  list to split: days, transitions, and rects already map in their owning parts.
23
23
  Schedule has ten input-bearing component slots and no zero-argument singleton slots.
24
+
25
+ Each mounted `Schedule` or `useSchedule` surface owns an isolated `ScopedCacheIdentity` by default.
26
+ Pass one stable `cacheIdentity` to multiple surfaces only when they render the same dataset and
27
+ should share target-warm geometry and coverage.
@@ -6,6 +6,7 @@ import type {
6
6
  LaneGeometry,
7
7
  Projection,
8
8
  Rect,
9
+ ScopedCacheIdentity,
9
10
  Source,
10
11
  Transition,
11
12
  Window,
@@ -18,6 +19,8 @@ export type ScheduleProjection = Extract<Projection, { orientation: 'columns' }>
18
19
  export type ScheduleInput = {
19
20
  lane: Lane;
20
21
  windowSpec: ScheduleWindowSpec;
22
+ /** Stable cache identity for deliberate reuse across surfaces rendering one dataset. */
23
+ cacheIdentity?: ScopedCacheIdentity;
21
24
  minuteStep?: number;
22
25
  /** Positive finite pixels per wall-clock hour; defaults to 48. */
23
26
  pxPerHour?: number;
@@ -1,4 +1,5 @@
1
1
  import { useContext, useEffect, useRef, useState } from 'react';
2
+ import type { ScopedCacheIdentity } from '../../core';
2
3
  import { dayColumnsFor, layoutLane, snapToStep, timeAtY, windowFor } from '../../core';
3
4
  import { hitTest } from '../../core/hit-test';
4
5
  import type { ScheduleInput, ScheduleModel, ScheduleProjection } from './schedule.types';
@@ -7,6 +8,8 @@ import { ScheduleWidth } from './use-schedule-viewport';
7
8
  export function useSchedule(input: ScheduleInput): ScheduleModel {
8
9
  const { lane, windowSpec, minuteStep = 60, pxPerHour = 48 } = input;
9
10
  const width = useContext(ScheduleWidth);
11
+ const [ownedCacheIdentity] = useState<ScopedCacheIdentity>(() => ({}));
12
+ const cacheIdentity = input.cacheIdentity ?? ownedCacheIdentity;
10
13
  const [clock, setClock] = useState(Date.now);
11
14
  // The current-time indicator follows the wall clock for the mounted surface's lifetime.
12
15
  useEffect(() => {
@@ -26,7 +29,7 @@ export function useSchedule(input: ScheduleInput): ScheduleModel {
26
29
  columnWidth: width / Math.max(1, days.length),
27
30
  days,
28
31
  };
29
- const geometry = layoutLane(lane, window, projection);
32
+ const geometry = layoutLane(lane, window, projection, cacheIdentity);
30
33
  const currentPress = { input, window, projection, geometry };
31
34
  const pressInput = useRef(currentPress);
32
35
  pressInput.current = currentPress;
@@ -0,0 +1,13 @@
1
+ export function touch<K, V>(cache: Map<K, V>, key: K, value: V): V {
2
+ cache.delete(key);
3
+ cache.set(key, value);
4
+ return value;
5
+ }
6
+
7
+ export function trim<K, V>(cache: Map<K, V>, limit: number): void {
8
+ while (cache.size > limit) {
9
+ const oldest = cache.keys().next();
10
+ if (oldest.done) return;
11
+ cache.delete(oldest.value);
12
+ }
13
+ }