react-native-roster 0.0.1 → 0.2.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.
- package/README.md +209 -32
- package/dist/src/components/primitives/portal.d.ts +12 -0
- package/dist/src/components/primitives/portal.d.ts.map +1 -0
- package/dist/src/components/primitives/portal.js +41 -0
- package/dist/src/components/primitives/portal.js.map +1 -0
- package/dist/src/components/roster/body-layout.d.ts +9 -0
- package/dist/src/components/roster/body-layout.d.ts.map +1 -0
- package/dist/src/components/roster/body-layout.js +15 -0
- package/dist/src/components/roster/body-layout.js.map +1 -0
- package/dist/src/components/roster/index.d.ts +2 -1
- package/dist/src/components/roster/index.d.ts.map +1 -1
- package/dist/src/components/roster/index.js +34 -27
- package/dist/src/components/roster/index.js.map +1 -1
- package/dist/src/components/roster/lanes/lane.d.ts +2 -2
- package/dist/src/components/roster/lanes/lane.d.ts.map +1 -1
- package/dist/src/components/roster/lanes/lane.js +4 -8
- package/dist/src/components/roster/lanes/lane.js.map +1 -1
- package/dist/src/components/roster/parts/body.d.ts +3 -3
- package/dist/src/components/roster/parts/body.d.ts.map +1 -1
- package/dist/src/components/roster/parts/body.js +5 -20
- package/dist/src/components/roster/parts/body.js.map +1 -1
- package/dist/src/components/roster/parts/header-cell.d.ts +2 -4
- package/dist/src/components/roster/parts/header-cell.d.ts.map +1 -1
- package/dist/src/components/roster/parts/header-cell.js.map +1 -1
- package/dist/src/components/roster/parts/header.d.ts +1 -1
- package/dist/src/components/roster/parts/header.d.ts.map +1 -1
- package/dist/src/components/roster/parts/header.js +2 -2
- package/dist/src/components/roster/parts/header.js.map +1 -1
- package/dist/src/components/roster/parts/lane-label-column.d.ts +1 -1
- package/dist/src/components/roster/parts/lane-label-column.d.ts.map +1 -1
- package/dist/src/components/roster/parts/lane-label-column.js +2 -2
- package/dist/src/components/roster/parts/lane-label-column.js.map +1 -1
- package/dist/src/components/roster/parts/lane-list.d.ts +7 -0
- package/dist/src/components/roster/parts/lane-list.d.ts.map +1 -0
- package/dist/src/components/roster/parts/lane-list.js +26 -0
- package/dist/src/components/roster/parts/lane-list.js.map +1 -0
- package/dist/src/components/roster/roster.types.d.ts +48 -21
- package/dist/src/components/roster/roster.types.d.ts.map +1 -1
- package/dist/src/components/roster/selection/selection-layout.d.ts +4 -0
- package/dist/src/components/roster/selection/selection-layout.d.ts.map +1 -0
- package/dist/src/components/roster/selection/selection-layout.js +82 -0
- package/dist/src/components/roster/selection/selection-layout.js.map +1 -0
- package/dist/src/components/roster/selection/selection-layout.types.d.ts +25 -0
- package/dist/src/components/roster/selection/selection-layout.types.d.ts.map +1 -0
- package/dist/src/components/roster/selection/selection-layout.types.js +3 -0
- package/dist/src/components/roster/selection/selection-layout.types.js.map +1 -0
- package/dist/src/components/roster/selection/selection-layout.web.d.ts +4 -0
- package/dist/src/components/roster/selection/selection-layout.web.d.ts.map +1 -0
- package/dist/src/components/roster/selection/selection-layout.web.js +52 -0
- package/dist/src/components/roster/selection/selection-layout.web.js.map +1 -0
- package/dist/src/components/roster/use-roster-press.d.ts +6 -0
- package/dist/src/components/roster/use-roster-press.d.ts.map +1 -0
- package/dist/src/components/roster/use-roster-press.js +61 -0
- package/dist/src/components/roster/use-roster-press.js.map +1 -0
- package/dist/src/components/roster/use-roster.d.ts.map +1 -1
- package/dist/src/components/roster/use-roster.js +40 -30
- package/dist/src/components/roster/use-roster.js.map +1 -1
- package/dist/src/components/roster/utils/body-content-key.d.ts +1 -1
- package/dist/src/components/roster/utils/body-content-key.d.ts.map +1 -1
- package/dist/src/components/roster/utils/body-content-key.js +10 -10
- package/dist/src/components/roster/utils/body-content-key.js.map +1 -1
- package/dist/src/components/schedule/days/day.d.ts +2 -2
- package/dist/src/components/schedule/days/day.d.ts.map +1 -1
- package/dist/src/components/schedule/days/day.js +2 -11
- package/dist/src/components/schedule/days/day.js.map +1 -1
- package/dist/src/components/schedule/days/header-layout.d.ts +1 -1
- package/dist/src/components/schedule/days/header-layout.d.ts.map +1 -1
- package/dist/src/components/schedule/days/parts/column.d.ts +1 -1
- package/dist/src/components/schedule/days/parts/column.d.ts.map +1 -1
- package/dist/src/components/schedule/days/parts/column.js +4 -8
- package/dist/src/components/schedule/days/parts/column.js.map +1 -1
- package/dist/src/components/schedule/index.d.ts.map +1 -1
- package/dist/src/components/schedule/index.js +7 -8
- package/dist/src/components/schedule/index.js.map +1 -1
- package/dist/src/components/schedule/schedule.types.d.ts +17 -17
- package/dist/src/components/schedule/schedule.types.d.ts.map +1 -1
- package/dist/src/core/index.d.ts +1 -0
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +3 -1
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/core/source.d.ts +4 -0
- package/dist/src/core/source.d.ts.map +1 -0
- package/dist/src/core/source.js +9 -0
- package/dist/src/core/source.js.map +1 -0
- package/dist/src/index.d.ts +6 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/nativewind/index.d.ts +28 -27
- package/dist/src/nativewind/index.d.ts.map +1 -1
- package/docs/migrations.md +61 -0
- package/llms.txt +112 -30
- package/package.json +12 -5
- package/src/components/layers/README.md +7 -3
- package/src/components/primitives/README.md +13 -2
- package/src/components/primitives/portal.tsx +48 -0
- package/src/components/roster/README.md +62 -5
- package/src/components/roster/body-layout.tsx +38 -0
- package/src/components/roster/index.tsx +109 -46
- package/src/components/roster/lanes/lane.tsx +16 -13
- package/src/components/roster/parts/body.tsx +17 -84
- package/src/components/roster/parts/header-cell.tsx +2 -2
- package/src/components/roster/parts/header.tsx +7 -2
- package/src/components/roster/parts/lane-label-column.tsx +2 -2
- package/src/components/roster/parts/lane-list.tsx +76 -0
- package/src/components/roster/roster.types.ts +47 -17
- package/src/components/roster/selection/selection-layout.tsx +90 -0
- package/src/components/roster/selection/selection-layout.types.ts +20 -0
- package/src/components/roster/selection/selection-layout.web.tsx +88 -0
- package/src/components/roster/use-roster-press.ts +74 -0
- package/src/components/roster/use-roster.ts +57 -44
- package/src/components/roster/utils/body-content-key.ts +13 -13
- package/src/components/schedule/README.md +8 -3
- package/src/components/schedule/days/day.tsx +31 -18
- package/src/components/schedule/days/header-layout.tsx +1 -1
- package/src/components/schedule/days/parts/column.tsx +10 -12
- package/src/components/schedule/index.tsx +20 -21
- package/src/components/schedule/schedule.types.ts +13 -13
- package/src/core/README.md +4 -0
- package/src/core/index.ts +1 -0
- package/src/core/source.ts +9 -0
- package/src/index.ts +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/body.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/body.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,GAAG;IACjB,+FAA+F;IAC/F,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC,kDAcF"}
|
|
@@ -2,28 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RosterBody = RosterBody;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const body_content_key_1 = require("../utils/body-content-key");
|
|
10
|
-
function RosterBody({ lanes, geometryFor, projection, scroll, press, ticks, contentWidth, viewport, window, intervalZone, gapZone, gridZone, highlightSource, onIntervalHover, incompleteLabel, onRowRender, }) {
|
|
5
|
+
const body_layout_1 = require("../body-layout");
|
|
6
|
+
const lane_list_1 = require("./lane-list");
|
|
7
|
+
function RosterBody(props) {
|
|
8
|
+
const { viewport, scroll, contentWidth, ticks, gridComponent: GridComponent } = props;
|
|
11
9
|
// LegendList requires a measured viewport and does not support static rendering.
|
|
12
10
|
if (viewport.width <= 0 || viewport.height <= 0)
|
|
13
11
|
return null;
|
|
14
|
-
return ((0, jsx_runtime_1.jsx)(
|
|
15
|
-
window,
|
|
16
|
-
projection,
|
|
17
|
-
highlightSource,
|
|
18
|
-
intervalZone,
|
|
19
|
-
gapZone,
|
|
20
|
-
onIntervalHover,
|
|
21
|
-
incompleteLabel,
|
|
22
|
-
}), keyExtractor: (lane) => lane.id, estimatedListSize: { width: contentWidth, height: viewport.height }, estimatedItemSize: projection.rowHeight, getFixedItemSize: () => projection.rowHeight, drawDistance: 0, recycleItems: false, maintainVisibleContentPosition: false, onScroll: scroll.onVerticalScroll, scrollEventThrottle: 16, style: { flex: 1 }, renderItem: ({ item }) => {
|
|
23
|
-
const row = ((0, jsx_runtime_1.jsx)(lane_1.LaneRow, { lane: item, geometry: geometryFor(item), width: contentWidth, rowHeight: projection.rowHeight, press: press, intervalZone: intervalZone, gapZone: gapZone, highlightSource: highlightSource, onIntervalHover: onIntervalHover, incompleteLabel: incompleteLabel }));
|
|
24
|
-
if (onRowRender)
|
|
25
|
-
return ((0, jsx_runtime_1.jsx)(react_1.Profiler, { id: item.id, onRender: onRowRender, children: row }));
|
|
26
|
-
return row;
|
|
27
|
-
} })] }) }));
|
|
12
|
+
return ((0, jsx_runtime_1.jsx)(body_layout_1.RosterBodyLayout, { scroll: scroll, contentWidth: contentWidth, viewport: viewport, gridZone: (0, jsx_runtime_1.jsx)(GridComponent, { ticks: ticks, contentWidth: contentWidth }), listZone: (0, jsx_runtime_1.jsx)(lane_list_1.RosterLaneList, { ...props }) }));
|
|
28
13
|
}
|
|
29
14
|
//# sourceMappingURL=body.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/body.tsx"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"body.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/body.tsx"],"names":[],"mappings":";;;;AACA,gDAAkD;AAElD,2CAA6C;AAE7C,oBACE,KAGC;IAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IACtF,iFAAiF;IACjF,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,CACL,uBAAC,8BAAgB,IACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,uBAAC,aAAa,IAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,GAAI,EACrE,QAAQ,EAAE,uBAAC,0BAAc,OAAK,KAAK,GAAI,GACvC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function RosterHeaderCell({ tick }:
|
|
3
|
-
tick: RosterTick;
|
|
4
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
import type { HeaderCellInput } from '../roster.types';
|
|
2
|
+
export declare function RosterHeaderCell({ tick }: HeaderCellInput): import("react/jsx-runtime").JSX.Element;
|
|
5
3
|
//# sourceMappingURL=header-cell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header-cell.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/header-cell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"header-cell.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/header-cell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,2CAMzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header-cell.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/header-cell.tsx"],"names":[],"mappings":";;;;AAAA,+CAAoC;AAGpC,0BAAiC,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"header-cell.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/header-cell.tsx"],"names":[],"mappings":";;;;AAAA,+CAAoC;AAGpC,0BAAiC,EAAE,IAAI,EAAmB;IACxD,OAAO,CACL,uBAAC,mBAAI,IAAC,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YAC1E,IAAI,CAAC,KAAK,GACN,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { HeaderInput } from '../roster.types';
|
|
2
|
-
export declare function RosterHeader({ ticks, contentWidth, scroll,
|
|
2
|
+
export declare function RosterHeader({ ticks, contentWidth, scroll, headerCellComponent: HeaderCellComponent, }: HeaderInput): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,wBAAgB,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,YAAY,EACZ,MAAM,EACN,mBAAmB,EAAE,mBAAmB,GACzC,EAAE,WAAW,2CAab"}
|
|
@@ -7,7 +7,7 @@ exports.RosterHeader = RosterHeader;
|
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const react_native_1 = require("react-native");
|
|
9
9
|
const react_native_reanimated_1 = __importDefault(require("react-native-reanimated"));
|
|
10
|
-
function RosterHeader({ ticks, contentWidth, scroll,
|
|
11
|
-
return ((0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { testID: "roster-header", style: [{ width: contentWidth, height: 40 }, scroll.headerStyle], children: ticks.map((tick) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { position: 'absolute', left: tick.x, top: 0 }, children:
|
|
10
|
+
function RosterHeader({ ticks, contentWidth, scroll, headerCellComponent: HeaderCellComponent, }) {
|
|
11
|
+
return ((0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { testID: "roster-header", style: [{ width: contentWidth, height: 40 }, scroll.headerStyle], children: ticks.map((tick) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { position: 'absolute', left: tick.x, top: 0 }, children: (0, jsx_runtime_1.jsx)(HeaderCellComponent, { tick: tick }) }, tick.time))) }));
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/header.tsx"],"names":[],"mappings":";;;;;;;AAAA,+CAAoC;AACpC,sFAA+C;AAG/C,sBAA6B,
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/header.tsx"],"names":[],"mappings":";;;;;;;AAAA,+CAAoC;AACpC,sFAA+C;AAG/C,sBAA6B,EAC3B,KAAK,EACL,YAAY,EACZ,MAAM,EACN,mBAAmB,EAAE,mBAAmB,GAC5B;IACZ,OAAO,CACL,uBAAC,iCAAQ,CAAC,IAAI,IACZ,MAAM,EAAC,eAAe,EACtB,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,YAE/D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,uBAAC,mBAAI,IAAiB,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YACzE,uBAAC,mBAAmB,IAAC,IAAI,EAAE,IAAI,GAAI,IAD1B,IAAI,CAAC,IAAI,CAEb,CACR,CAAC,GACY,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { LabelColumnInput } from '../roster.types';
|
|
2
|
-
export declare function RosterLaneLabelColumn({ labels, projection, scroll,
|
|
2
|
+
export declare function RosterLaneLabelColumn({ labels, projection, scroll, laneLabelComponent: LaneLabelComponent, }: LabelColumnInput): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=lane-label-column.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lane-label-column.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/lane-label-column.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,UAAU,EACV,MAAM,EACN,
|
|
1
|
+
{"version":3,"file":"lane-label-column.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/lane-label-column.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,UAAU,EACV,MAAM,EACN,kBAAkB,EAAE,kBAAkB,GACvC,EAAE,gBAAgB,2CAqBlB"}
|
|
@@ -7,12 +7,12 @@ exports.RosterLaneLabelColumn = RosterLaneLabelColumn;
|
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const react_native_1 = require("react-native");
|
|
9
9
|
const react_native_reanimated_1 = __importDefault(require("react-native-reanimated"));
|
|
10
|
-
function RosterLaneLabelColumn({ labels, projection, scroll,
|
|
10
|
+
function RosterLaneLabelColumn({ labels, projection, scroll, laneLabelComponent: LaneLabelComponent, }) {
|
|
11
11
|
return ((0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { testID: "roster-labels", style: [{ height: labels.length * projection.rowHeight }, scroll.labelStyle], children: labels.map((label, index) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
12
12
|
position: 'absolute',
|
|
13
13
|
top: index * projection.rowHeight,
|
|
14
14
|
height: projection.rowHeight,
|
|
15
15
|
width: '100%',
|
|
16
|
-
}, children:
|
|
16
|
+
}, children: (0, jsx_runtime_1.jsx)(LaneLabelComponent, { ...label }) }, label.lane.id))) }));
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=lane-label-column.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lane-label-column.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/lane-label-column.tsx"],"names":[],"mappings":";;;;;;;AAAA,+CAAoC;AACpC,sFAA+C;AAG/C,+BAAsC,EACpC,MAAM,EACN,UAAU,EACV,MAAM,EACN,
|
|
1
|
+
{"version":3,"file":"lane-label-column.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/lane-label-column.tsx"],"names":[],"mappings":";;;;;;;AAAA,+CAAoC;AACpC,sFAA+C;AAG/C,+BAAsC,EACpC,MAAM,EACN,UAAU,EACV,MAAM,EACN,kBAAkB,EAAE,kBAAkB,GACrB;IACjB,OAAO,CACL,uBAAC,iCAAQ,CAAC,IAAI,IACZ,MAAM,EAAC,eAAe,EACtB,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,YAE3E,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,uBAAC,mBAAI,IAEH,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,KAAK,GAAG,UAAU,CAAC,SAAS;gBACjC,MAAM,EAAE,UAAU,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM;aACd,YAED,uBAAC,kBAAkB,OAAK,KAAK,GAAI,IAR5B,KAAK,CAAC,IAAI,CAAC,EAAE,CASb,CACR,CAAC,GACY,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ProfilerOnRenderCallback } from 'react';
|
|
2
|
+
import type { BodyInput } from '../roster.types';
|
|
3
|
+
export declare function RosterLaneList({ lanes, geometryFor, projection, scroll, press, contentWidth, viewport, window, intervalComponent, gapComponent, highlightSource, onIntervalHover, incompleteLabel, onRowRender, }: Omit<BodyInput, 'ticks' | 'gridComponent'> & {
|
|
4
|
+
/** Development-only Profiler hook used by the gallery; not a supported customization point. */
|
|
5
|
+
onRowRender?: ProfilerOnRenderCallback;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=lane-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-list.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/parts/lane-list.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,wBAAwB,EAAY,MAAM,OAAO,CAAC;AAE1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,UAAU,EACV,MAAM,EACN,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,GACZ,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,eAAe,CAAC,GAAG;IAC9C,+FAA+F;IAC/F,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC,2CAmDA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RosterLaneList = RosterLaneList;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const list_1 = require("@legendapp/list");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const lane_1 = require("../lanes/lane");
|
|
8
|
+
const body_content_key_1 = require("../utils/body-content-key");
|
|
9
|
+
function RosterLaneList({ lanes, geometryFor, projection, scroll, press, contentWidth, viewport, window, intervalComponent, gapComponent, highlightSource, onIntervalHover, incompleteLabel, onRowRender, }) {
|
|
10
|
+
const [initialScrollOffset] = (0, react_1.useState)(() => scroll.y.get());
|
|
11
|
+
return ((0, jsx_runtime_1.jsx)(list_1.LegendList, { testID: "roster-vertical-scroll", initialScrollOffset: initialScrollOffset, data: lanes, extraData: (0, body_content_key_1.bodyContentKey)({
|
|
12
|
+
window,
|
|
13
|
+
projection,
|
|
14
|
+
highlightSource,
|
|
15
|
+
intervalComponent,
|
|
16
|
+
gapComponent,
|
|
17
|
+
onIntervalHover,
|
|
18
|
+
incompleteLabel,
|
|
19
|
+
}), keyExtractor: (lane) => lane.id, estimatedListSize: { width: contentWidth, height: viewport.height }, estimatedItemSize: projection.rowHeight, getFixedItemSize: () => projection.rowHeight, drawDistance: 0, recycleItems: false, maintainVisibleContentPosition: false, onScroll: scroll.onVerticalScroll, scrollEventThrottle: 16, style: { flex: 1 }, renderItem: ({ item }) => {
|
|
20
|
+
const row = ((0, jsx_runtime_1.jsx)(lane_1.LaneRow, { lane: item, geometry: geometryFor(item), width: contentWidth, rowHeight: projection.rowHeight, press: press, intervalComponent: intervalComponent, gapComponent: gapComponent, highlightSource: highlightSource, onIntervalHover: onIntervalHover, incompleteLabel: incompleteLabel }));
|
|
21
|
+
if (onRowRender)
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)(react_1.Profiler, { id: item.id, onRender: onRowRender, children: row }));
|
|
23
|
+
return row;
|
|
24
|
+
} }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=lane-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-list.js","sourceRoot":"","sources":["../../../../../src/components/roster/parts/lane-list.tsx"],"names":[],"mappings":";;;;AAAA,0CAA6C;AAC7C,iCAA0E;AAC1E,wCAAwC;AAExC,gEAA2D;AAE3D,wBAA+B,EAC7B,KAAK,EACL,WAAW,EACX,UAAU,EACV,MAAM,EACN,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,GAIZ;IACC,MAAM,CAAC,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7D,OAAO,CACL,uBAAC,iBAAU,IACT,MAAM,EAAC,wBAAwB,EAC/B,mBAAmB,EAAE,mBAAmB,EACxC,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,IAAA,iCAAc,EAAC;YACxB,MAAM;YACN,UAAU;YACV,eAAe;YACf,iBAAiB;YACjB,YAAY;YACZ,eAAe;YACf,eAAe;SAChB,CAAC,EACF,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAC/B,iBAAiB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EACnE,iBAAiB,EAAE,UAAU,CAAC,SAAS,EACvC,gBAAgB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,EAC5C,YAAY,EAAE,CAAC,EACf,YAAY,EAAE,KAAK,EACnB,8BAA8B,EAAE,KAAK,EACrC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EACjC,mBAAmB,EAAE,EAAE,EACvB,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAClB,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,CACV,uBAAC,cAAO,IACN,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,EAC3B,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,UAAU,CAAC,SAAS,EAC/B,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,GAChC,CACH,CAAC;YACF,IAAI,WAAW;gBACb,OAAO,CACL,uBAAC,gBAAQ,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,YACzC,GAAG,GACK,CACZ,CAAC;YACJ,OAAO,GAAG,CAAC;QACb,CAAC,GACD,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import type { ReactNode, RefObject } from 'react';
|
|
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
4
|
import type { Coverage, Lane, LaneComparator, LaneFlag, LaneGeometry, Projection, Rect, Source, Window, WindowSpec } from '../../core';
|
|
5
5
|
import type { GapInput, IntervalInput } from '../layers/layers.types';
|
|
6
|
+
import type { SelectionLayoutProps } from './selection/selection-layout.types';
|
|
7
|
+
/** A selected interval: the rect input plus its absolute bounds and the view zone for formatting. */
|
|
8
|
+
export type IntervalDetailInput = IntervalInput & {
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
11
|
+
viewTimezone: string;
|
|
12
|
+
};
|
|
6
13
|
export type RosterProjection = Extract<Projection, {
|
|
7
14
|
orientation: 'horizontal';
|
|
8
15
|
}>;
|
|
@@ -23,6 +30,8 @@ export type RosterScroll = {
|
|
|
23
30
|
labelStyle: StyleProp<ViewStyle>;
|
|
24
31
|
};
|
|
25
32
|
export type RosterInput = {
|
|
33
|
+
/** Retain interval selection on press, default false. Lives on RosterInput for hook consumers. */
|
|
34
|
+
selectable?: boolean;
|
|
26
35
|
lanes: Lane[];
|
|
27
36
|
windowSpec: WindowSpec;
|
|
28
37
|
minuteStep?: number;
|
|
@@ -40,6 +49,10 @@ export type RosterInput = {
|
|
|
40
49
|
pxPerMinute?: number;
|
|
41
50
|
};
|
|
42
51
|
export type RosterModel = {
|
|
52
|
+
/** Current interval with fresh lane, layer, and rect references and its absolute bounds, or null. */
|
|
53
|
+
selection: Omit<IntervalDetailInput, 'highlighted' | 'viewTimezone'> | null;
|
|
54
|
+
/** Close the selected interval details. */
|
|
55
|
+
dismissSelection: () => void;
|
|
43
56
|
window: Window;
|
|
44
57
|
projection: RosterProjection;
|
|
45
58
|
orderedLanes: Lane[];
|
|
@@ -69,20 +82,21 @@ export type LaneLabelInput = {
|
|
|
69
82
|
incompleteLabel: string;
|
|
70
83
|
neverSetLabel: string;
|
|
71
84
|
};
|
|
85
|
+
export type HeaderCellInput = {
|
|
86
|
+
tick: RosterTick;
|
|
87
|
+
};
|
|
72
88
|
export type GridInput = {
|
|
73
89
|
ticks: RosterTick[];
|
|
74
90
|
contentWidth: number;
|
|
75
91
|
};
|
|
76
92
|
export type HeaderInput = Pick<RosterModel, 'ticks' | 'projection' | 'scroll' | 'contentWidth'> & {
|
|
77
93
|
/** Time label filler, positioned by the header. */
|
|
78
|
-
|
|
79
|
-
tick: RosterTick;
|
|
80
|
-
}) => ReactNode;
|
|
94
|
+
headerCellComponent: ComponentType<HeaderCellInput>;
|
|
81
95
|
};
|
|
82
96
|
export type LabelColumnInput = Pick<RosterModel, 'projection' | 'scroll'> & {
|
|
83
97
|
labels: LaneLabelInput[];
|
|
84
98
|
/** Lane label filler, positioned at the fixed row height. */
|
|
85
|
-
|
|
99
|
+
laneLabelComponent: ComponentType<LaneLabelInput>;
|
|
86
100
|
};
|
|
87
101
|
export type BodyInput = Pick<RosterModel, 'geometryFor' | 'projection' | 'scroll' | 'press' | 'ticks' | 'contentWidth' | 'viewport' | 'window'> & {
|
|
88
102
|
lanes: Lane[];
|
|
@@ -90,11 +104,11 @@ export type BodyInput = Pick<RosterModel, 'geometryFor' | 'projection' | 'scroll
|
|
|
90
104
|
onIntervalHover?: (rect: Rect, lane: Lane) => void;
|
|
91
105
|
incompleteLabel?: string;
|
|
92
106
|
/** Covered rect view; position it using the final rect bounds, as RosterInterval does. */
|
|
93
|
-
|
|
107
|
+
intervalComponent: ComponentType<IntervalInput>;
|
|
94
108
|
/** Removed rect filler, placed inside a pressable by LaneRow. */
|
|
95
|
-
|
|
109
|
+
gapComponent: ComponentType<GapInput>;
|
|
96
110
|
/** Noninteractive tick lines behind every lane, sized to the content width. */
|
|
97
|
-
|
|
111
|
+
gridComponent: ComponentType<GridInput>;
|
|
98
112
|
};
|
|
99
113
|
/**
|
|
100
114
|
* Chrome style props and their NativeWind class twins. Class props resolve only
|
|
@@ -117,30 +131,43 @@ export type RosterStyleProps = {
|
|
|
117
131
|
/** Width of the corner and lane label column, default 180. */
|
|
118
132
|
laneLabelWidth?: number;
|
|
119
133
|
};
|
|
120
|
-
export type RosterProps = RosterInput & RosterStyleProps & {
|
|
134
|
+
export type RosterProps = Omit<RosterInput, 'selectable'> & RosterStyleProps & {
|
|
135
|
+
/**
|
|
136
|
+
* Selected interval content; absent means interval presses retain no selection.
|
|
137
|
+
* Lives on RosterProps because the chassis mounts content and enables useRoster selection.
|
|
138
|
+
*/
|
|
139
|
+
intervalDetailComponent?: ComponentType<IntervalDetailInput>;
|
|
140
|
+
/**
|
|
141
|
+
* Presentation strategy for the body and selected details; defaults to RosterSelectionPopover.
|
|
142
|
+
* Lives on RosterProps because only the chassis mounts the layout, not useRoster.
|
|
143
|
+
*/
|
|
144
|
+
selectionLayout?: ComponentType<SelectionLayoutProps>;
|
|
145
|
+
/**
|
|
146
|
+
* Native portal host name; defaults to a unique useId name for this roster.
|
|
147
|
+
* Lives on RosterProps because only the chassis mounts the layout, not useRoster.
|
|
148
|
+
*/
|
|
149
|
+
portalHost?: string;
|
|
121
150
|
incompleteLabel?: string;
|
|
122
151
|
neverSetLabel?: string;
|
|
123
152
|
/** Label, differing lane zone, effective flag, and completeness notice. */
|
|
124
|
-
|
|
153
|
+
laneLabelComponent?: ComponentType<LaneLabelInput>;
|
|
125
154
|
/** Time label within one positioned header tick. */
|
|
126
|
-
|
|
127
|
-
tick: RosterTick;
|
|
128
|
-
}) => ReactNode;
|
|
155
|
+
headerCellComponent?: ComponentType<HeaderCellInput>;
|
|
129
156
|
/** Covered rect view; use rect bounds for absolute position, rect.z for stacking, and pointerEvents="none" for row hit testing. */
|
|
130
|
-
|
|
157
|
+
intervalComponent?: ComponentType<IntervalInput>;
|
|
131
158
|
/** Removed rect content; LaneRow supplies the invisible pressable. */
|
|
132
|
-
|
|
159
|
+
gapComponent?: ComponentType<GapInput>;
|
|
133
160
|
/** Tick lines behind the lanes; RosterGrid draws one hairline per tick. */
|
|
134
|
-
|
|
161
|
+
gridComponent?: ComponentType<GridInput>;
|
|
135
162
|
/** Empty roster content, conventionally the text No lanes. */
|
|
136
|
-
emptyZone?:
|
|
163
|
+
emptyZone?: ReactNode;
|
|
137
164
|
/** Top-left cell above the lane labels; RosterCorner renders nothing. */
|
|
138
|
-
cornerZone?:
|
|
165
|
+
cornerZone?: ReactNode;
|
|
139
166
|
/** Frozen time header, supplied with ticks, scale, and shared scrolling. */
|
|
140
|
-
|
|
167
|
+
headerComponent?: ComponentType<HeaderInput>;
|
|
141
168
|
/** Frozen labels, supplied with ordered lanes and per-lane flag and completeness. */
|
|
142
|
-
|
|
169
|
+
laneLabelColumnComponent?: ComponentType<LabelColumnInput>;
|
|
143
170
|
/** Virtualized lane body, supplied with geometry, projection, scrolling, and press resolution. */
|
|
144
|
-
|
|
171
|
+
bodyComponent?: ComponentType<BodyInput>;
|
|
145
172
|
};
|
|
146
173
|
//# sourceMappingURL=roster.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roster.types.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/roster.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"roster.types.d.ts","sourceRoot":"","sources":["../../../../src/components/roster/roster.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SelectionLayoutProps } from './selection-layout.types';
|
|
2
|
+
/** Native selection presentation with a local portal destination and shared scroll translation. */
|
|
3
|
+
export declare function RosterSelectionPopover({ anchorZone, contentZone, targetBounds, open, onDismiss, portalHost, scroll, }: SelectionLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=selection-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-layout.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/selection/selection-layout.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIrE,mGAAmG;AACnG,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,MAAM,GACP,EAAE,oBAAoB,2CAwEtB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.RosterSelectionPopover = RosterSelectionPopover;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const react_1 = require("react");
|
|
39
|
+
const react_native_1 = require("react-native");
|
|
40
|
+
const react_native_reanimated_1 = __importStar(require("react-native-reanimated"));
|
|
41
|
+
const portal_1 = require("../../primitives/portal");
|
|
42
|
+
const overlay = { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 };
|
|
43
|
+
/** Native selection presentation with a local portal destination and shared scroll translation. */
|
|
44
|
+
function RosterSelectionPopover({ anchorZone, contentZone, targetBounds, open, onDismiss, portalHost, scroll, }) {
|
|
45
|
+
const name = (0, react_1.useId)();
|
|
46
|
+
const [viewport, setViewport] = (0, react_1.useState)({ width: 0, height: 0 });
|
|
47
|
+
const [content, setContent] = (0, react_1.useState)({ width: 0, height: 0 });
|
|
48
|
+
const maxWidth = Math.max(0, viewport.width - 8);
|
|
49
|
+
const maxHeight = Math.max(0, viewport.height - 8);
|
|
50
|
+
const size = { maxWidth, maxHeight, flexShrink: 1 };
|
|
51
|
+
const { x, y } = scroll;
|
|
52
|
+
const position = (0, react_native_reanimated_1.useAnimatedStyle)(() => {
|
|
53
|
+
const below = targetBounds ? targetBounds.y + targetBounds.height + 4 - y.get() : 0;
|
|
54
|
+
const above = targetBounds ? targetBounds.y - content.height - 4 - y.get() : 0;
|
|
55
|
+
const maxTop = Math.max(0, viewport.height - content.height);
|
|
56
|
+
return {
|
|
57
|
+
left: Math.max(0, Math.min((targetBounds?.x ?? 0) - x.get(), viewport.width - content.width)),
|
|
58
|
+
top: below >= 0 && below <= maxTop ? below : above >= 0 && above <= maxTop ? above : 0,
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
(0, react_1.useEffect)(() => {
|
|
62
|
+
if (!open)
|
|
63
|
+
return;
|
|
64
|
+
const subscription = react_native_1.BackHandler.addEventListener('hardwareBackPress', () => {
|
|
65
|
+
onDismiss();
|
|
66
|
+
return true;
|
|
67
|
+
});
|
|
68
|
+
return () => subscription.remove();
|
|
69
|
+
}, [open, onDismiss]);
|
|
70
|
+
let detailZone = null;
|
|
71
|
+
if (open && targetBounds && maxWidth > 0 && maxHeight > 0) {
|
|
72
|
+
detailZone = ((0, jsx_runtime_1.jsx)(portal_1.Portal, { hostName: portalHost, name: name, children: (0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { style: [{ position: 'absolute', maxWidth, maxHeight }, position], children: (0, jsx_runtime_1.jsx)(react_native_1.View, { accessibilityRole: "summary", onStartShouldSetResponder: () => true, style: size, onLayout: ({ nativeEvent }) => setContent({
|
|
73
|
+
width: nativeEvent.layout.width,
|
|
74
|
+
height: nativeEvent.layout.height,
|
|
75
|
+
}), children: (0, jsx_runtime_1.jsx)(react_native_1.ScrollView, { style: size, nestedScrollEnabled: true, children: (0, jsx_runtime_1.jsx)(react_native_1.ScrollView, { horizontal: true, style: { maxWidth, flexGrow: 0, flexShrink: 0 }, nestedScrollEnabled: true, children: contentZone }) }) }) }) }));
|
|
76
|
+
}
|
|
77
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flex: 1, minHeight: 0 }, onLayout: ({ nativeEvent }) => setViewport({
|
|
78
|
+
width: nativeEvent.layout.width,
|
|
79
|
+
height: nativeEvent.layout.height,
|
|
80
|
+
}), children: [anchorZone, (0, jsx_runtime_1.jsx)(react_native_1.View, { pointerEvents: "box-none", style: overlay, children: (0, jsx_runtime_1.jsx)(portal_1.PortalHost, { name: portalHost }) }), detailZone] }));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=selection-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-layout.js","sourceRoot":"","sources":["../../../../../src/components/roster/selection/selection-layout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { RosterScroll } from '../roster.types';
|
|
3
|
+
/** Presentation-only contract shared by native, web, and consumer strategies. */
|
|
4
|
+
export type SelectionLayoutProps = {
|
|
5
|
+
/** Mounted body node, rendered once beneath or beside the details. */
|
|
6
|
+
anchorZone: ReactNode;
|
|
7
|
+
/** Mounted detail node, or null when closed. */
|
|
8
|
+
contentZone: ReactNode;
|
|
9
|
+
/** Interval bounds in body-content coordinates, before scroll translation. */
|
|
10
|
+
targetBounds: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
} | null;
|
|
16
|
+
/** Whether the detail presentation is open. */
|
|
17
|
+
open: boolean;
|
|
18
|
+
/** Report outside press, hardware back, Escape, or a presentation close action. */
|
|
19
|
+
onDismiss: () => void;
|
|
20
|
+
/** Unique native destination name owned by this selection layout. */
|
|
21
|
+
portalHost: string;
|
|
22
|
+
/** Shared offsets follow body scrolling without updating React state. */
|
|
23
|
+
scroll: Pick<RosterScroll, 'x' | 'y' | 'headerStyle' | 'labelStyle'>;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=selection-layout.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-layout.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/selection/selection-layout.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,iFAAiF;AACjF,MAAM,MAAM,oBAAoB,GAAG;IACjC,sEAAsE;IACtE,UAAU,EAAE,SAAS,CAAC;IACtB,gDAAgD;IAChD,WAAW,EAAE,SAAS,CAAC;IACvB,8EAA8E;IAC9E,YAAY,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7E,+CAA+C;IAC/C,IAAI,EAAE,OAAO,CAAC;IACd,mFAAmF;IACnF,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;CACtE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-layout.types.js","sourceRoot":"","sources":["../../../../../src/components/roster/selection/selection-layout.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SelectionLayoutProps } from './selection-layout.types';
|
|
2
|
+
/** Web selection presentation; Radix owns outside press, Escape, and collisions. */
|
|
3
|
+
export declare function RosterSelectionPopover({ anchorZone, contentZone, targetBounds, open, onDismiss, scroll, }: SelectionLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=selection-layout.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-layout.web.d.ts","sourceRoot":"","sources":["../../../../../src/components/roster/selection/selection-layout.web.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,MAAM,GACP,EAAE,oBAAoB,2CA0EtB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RosterSelectionPopover = RosterSelectionPopover;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_popover_1 = require("@radix-ui/react-popover");
|
|
9
|
+
const react_1 = require("react");
|
|
10
|
+
const react_native_reanimated_1 = __importDefault(require("react-native-reanimated"));
|
|
11
|
+
/** Web selection presentation; Radix owns outside press, Escape, and collisions. */
|
|
12
|
+
function RosterSelectionPopover({ anchorZone, contentZone, targetBounds, open, onDismiss, scroll, }) {
|
|
13
|
+
const bodyRef = (0, react_1.useRef)(null);
|
|
14
|
+
const returnFocusRef = (0, react_1.useRef)(null);
|
|
15
|
+
const keyboardDismissRef = (0, react_1.useRef)(false);
|
|
16
|
+
(0, react_1.useEffect)(() => {
|
|
17
|
+
if (open && targetBounds && bodyRef.current?.contains(document.activeElement)) {
|
|
18
|
+
returnFocusRef.current = document.activeElement;
|
|
19
|
+
}
|
|
20
|
+
}, [open, targetBounds]);
|
|
21
|
+
return ((0, jsx_runtime_1.jsxs)(react_popover_1.Root, { open: open, onOpenChange: (next) => {
|
|
22
|
+
if (!next)
|
|
23
|
+
onDismiss();
|
|
24
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { ref: bodyRef, style: {
|
|
25
|
+
position: 'relative',
|
|
26
|
+
display: 'flex',
|
|
27
|
+
flexDirection: 'column',
|
|
28
|
+
flex: 1,
|
|
29
|
+
minHeight: 0,
|
|
30
|
+
}, children: [anchorZone, (0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { style: [{ position: 'absolute', top: 0, left: 0 }, scroll.headerStyle], children: (0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { style: scroll.labelStyle, children: (0, jsx_runtime_1.jsx)(react_popover_1.Anchor, { asChild: true, children: (0, jsx_runtime_1.jsx)("div", { "data-testid": "roster-selection-target", style: {
|
|
31
|
+
position: 'absolute',
|
|
32
|
+
left: targetBounds?.x ?? 0,
|
|
33
|
+
top: targetBounds ? targetBounds.y + targetBounds.height : 0,
|
|
34
|
+
width: 0,
|
|
35
|
+
height: 0,
|
|
36
|
+
pointerEvents: 'none',
|
|
37
|
+
} }) }) }) })] }), (0, jsx_runtime_1.jsx)(react_popover_1.Portal, { children: (0, jsx_runtime_1.jsx)(react_popover_1.Content, { onOpenAutoFocus: () => {
|
|
38
|
+
returnFocusRef.current = document.activeElement;
|
|
39
|
+
keyboardDismissRef.current = false;
|
|
40
|
+
}, onEscapeKeyDown: () => {
|
|
41
|
+
keyboardDismissRef.current = true;
|
|
42
|
+
}, onCloseAutoFocus: (event) => {
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
if (keyboardDismissRef.current && returnFocusRef.current instanceof HTMLElement) {
|
|
45
|
+
returnFocusRef.current.focus({ preventScroll: true });
|
|
46
|
+
}
|
|
47
|
+
}, onInteractOutside: (event) => {
|
|
48
|
+
if (bodyRef.current?.contains(event.target))
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
}, sideOffset: 4, align: "start", updatePositionStrategy: "always", "aria-label": "Interval details", style: { zIndex: 1000 }, children: contentZone }) })] }));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=selection-layout.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-layout.web.js","sourceRoot":"","sources":["../../../../../src/components/roster/selection/selection-layout.web.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Dispatch, SetStateAction } from 'react';
|
|
2
|
+
import type { Lane, Window } from '../../core';
|
|
3
|
+
import type { RosterInput, RosterModel, RosterProjection } from './roster.types';
|
|
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;
|
|
6
|
+
//# sourceMappingURL=use-roster-press.d.ts.map
|
|
@@ -0,0 +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"}
|