@keenaioc/data-view 0.0.0-poc.1 → 0.2.0-alpha.8
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/CHANGELOG.md +105 -0
- package/DATA-PRIVACY.md +20 -0
- package/INTEGRATION.md +178 -0
- package/KNOWN-LIMITATIONS.md +34 -0
- package/LICENSE +21 -0
- package/README.md +67 -5
- package/dist/contracts.d.ts +33 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +83 -0
- package/dist/contracts.js.map +1 -0
- package/dist/data-view.d.ts +3 -0
- package/dist/data-view.d.ts.map +1 -0
- package/dist/data-view.js +822 -0
- package/dist/data-view.js.map +1 -0
- package/dist/engine.d.ts +34 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +307 -0
- package/dist/engine.js.map +1 -0
- package/dist/gantt-bar.d.ts +17 -0
- package/dist/gantt-bar.d.ts.map +1 -0
- package/dist/gantt-bar.js +142 -0
- package/dist/gantt-bar.js.map +1 -0
- package/dist/gantt-dependencies.d.ts +27 -0
- package/dist/gantt-dependencies.d.ts.map +1 -0
- package/dist/gantt-dependencies.js +218 -0
- package/dist/gantt-dependencies.js.map +1 -0
- package/dist/gantt-dependency-ui.d.ts +37 -0
- package/dist/gantt-dependency-ui.d.ts.map +1 -0
- package/dist/gantt-dependency-ui.js +79 -0
- package/dist/gantt-dependency-ui.js.map +1 -0
- package/dist/gantt-grid.d.ts +27 -0
- package/dist/gantt-grid.d.ts.map +1 -0
- package/dist/gantt-grid.js +72 -0
- package/dist/gantt-grid.js.map +1 -0
- package/dist/gantt-operations.d.ts +14 -0
- package/dist/gantt-operations.d.ts.map +1 -0
- package/dist/gantt-operations.js +103 -0
- package/dist/gantt-operations.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/operations.d.ts +11 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +117 -0
- package/dist/operations.js.map +1 -0
- package/dist/registry.d.ts +13 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +465 -0
- package/dist/registry.js.map +1 -0
- package/dist/remote-data.d.ts +19 -0
- package/dist/remote-data.d.ts.map +1 -0
- package/dist/remote-data.js +67 -0
- package/dist/remote-data.js.map +1 -0
- package/dist/row-move.d.ts +7 -0
- package/dist/row-move.d.ts.map +1 -0
- package/dist/row-move.js +27 -0
- package/dist/row-move.js.map +1 -0
- package/dist/schedule-view.d.ts +27 -0
- package/dist/schedule-view.d.ts.map +1 -0
- package/dist/schedule-view.js +122 -0
- package/dist/schedule-view.js.map +1 -0
- package/dist/schedule.d.ts +28 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/schedule.js +97 -0
- package/dist/schedule.js.map +1 -0
- package/dist/style.css +986 -0
- package/dist/timeline.d.ts +25 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +58 -0
- package/dist/timeline.js.map +1 -0
- package/dist/toolbar.d.ts +10 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +31 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/types.d.ts +472 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/use-remote-data.d.ts +18 -0
- package/dist/use-remote-data.d.ts.map +1 -0
- package/dist/use-remote-data.js +12 -0
- package/dist/use-remote-data.js.map +1 -0
- package/dist/use-row-move.d.ts +12 -0
- package/dist/use-row-move.d.ts.map +1 -0
- package/dist/use-row-move.js +151 -0
- package/dist/use-row-move.js.map +1 -0
- package/dist/v2-panels.d.ts +37 -0
- package/dist/v2-panels.d.ts.map +1 -0
- package/dist/v2-panels.js +108 -0
- package/dist/v2-panels.js.map +1 -0
- package/dist/view-state.d.ts +30 -0
- package/dist/view-state.d.ts.map +1 -0
- package/dist/view-state.js +94 -0
- package/dist/view-state.js.map +1 -0
- package/dist/view-workspace.d.ts +3 -0
- package/dist/view-workspace.d.ts.map +1 -0
- package/dist/view-workspace.js +95 -0
- package/dist/view-workspace.js.map +1 -0
- package/dist/virtual-list.d.ts +12 -0
- package/dist/virtual-list.d.ts.map +1 -0
- package/dist/virtual-list.js +46 -0
- package/dist/virtual-list.js.map +1 -0
- package/package.json +19 -16
- package/index.d.ts +0 -2
- package/index.js +0 -5
- package/react.d.ts +0 -2
- package/react.js +0 -8
- package/style.css +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DataViewConfig, DataViewGroupNode, FieldDefinition, ViewLocation } from "./types.js";
|
|
2
|
+
export type TimelineScale = NonNullable<ViewLocation["scale"]>;
|
|
3
|
+
/** A continuous bounded window spanning adjacent periods, with exact day snapping. */
|
|
4
|
+
export declare function timelineWindow(anchor: string, scale: TimelineScale): {
|
|
5
|
+
start: number;
|
|
6
|
+
end: number;
|
|
7
|
+
dayWidth: number;
|
|
8
|
+
ticks: {
|
|
9
|
+
day: number;
|
|
10
|
+
label: string;
|
|
11
|
+
}[];
|
|
12
|
+
width: number;
|
|
13
|
+
anchorOffset: number;
|
|
14
|
+
};
|
|
15
|
+
export type ScheduleEntry<Row> = {
|
|
16
|
+
kind: "row";
|
|
17
|
+
row: Row;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "group";
|
|
20
|
+
node: DataViewGroupNode<Row>;
|
|
21
|
+
};
|
|
22
|
+
export declare function scheduleEntries<Row>(rows: Row[], fields: FieldDefinition<Row>[], view: Pick<DataViewConfig, "groups" | "collapsedGroups">): ScheduleEntry<Row>[];
|
|
23
|
+
/** Repeat group ancestors at a page boundary so a row never loses its context. */
|
|
24
|
+
export declare function scheduleEntryPage<Row>(entries: ScheduleEntry<Row>[], page: number, size?: number): ScheduleEntry<Row>[];
|
|
25
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnG,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/D,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa;;;;;aASvC,MAAM;eAAS,MAAM;;;;EAOhD;AACD,MAAM,MAAM,aAAa,CAAC,GAAG,IAAI;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC;AAC7G,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,iBAAiB,CAAC,wBAUzI;AACD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,wBAM5F"}
|
package/dist/timeline.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { buildGroupTree } from "./engine.js";
|
|
2
|
+
import { dateDay, dayString } from "./schedule.js";
|
|
3
|
+
/** A continuous bounded window spanning adjacent periods, with exact day snapping. */
|
|
4
|
+
export function timelineWindow(anchor, scale) {
|
|
5
|
+
const day = dateDay(anchor);
|
|
6
|
+
if (day === null)
|
|
7
|
+
throw new Error("時間軸日期無效");
|
|
8
|
+
const d = new Date(day * 86400000);
|
|
9
|
+
const year = d.getUTCFullYear();
|
|
10
|
+
const month = d.getUTCMonth();
|
|
11
|
+
const at = (y, m, n = 1) => (() => { const d = new Date(0); d.setUTCFullYear(y, m, n); return Math.floor(d.getTime() / 86400000); })();
|
|
12
|
+
const week = day - (d.getUTCDay() + 6) % 7;
|
|
13
|
+
const rawStart = scale === "week" ? week - 7 : scale === "year" ? at(year, 0) : scale === "quarter" ? at(year, Math.floor(month / 3) * 3 - 1) : at(year, month - 1);
|
|
14
|
+
const rawEnd = scale === "week" ? week + 20 : scale === "year" ? at(year + 2, 0) - 1 : scale === "quarter" ? at(year, Math.floor(month / 3) * 3 + 5) - 1 : at(year, month + 2) - 1;
|
|
15
|
+
const start = Math.max(dateDay("0001-01-01"), rawStart);
|
|
16
|
+
const end = Math.min(dateDay("9999-12-31"), rawEnd);
|
|
17
|
+
const dayWidth = scale === "week" ? 64 : scale === "month" ? 36 : scale === "quarter" ? 14 : 4;
|
|
18
|
+
const ticks = [];
|
|
19
|
+
for (let n = start; n <= end; n++) {
|
|
20
|
+
const date = new Date(n * 86400000);
|
|
21
|
+
if ((scale === "year" && date.getUTCDate() !== 1) || (scale === "quarter" && date.getUTCDay() !== 1))
|
|
22
|
+
continue;
|
|
23
|
+
ticks.push({ day: n, label: scale === "year" ? dayString(n).slice(0, 7) : dayString(n).slice(5) });
|
|
24
|
+
}
|
|
25
|
+
return { start, end, dayWidth, ticks, width: (end - start + 1) * dayWidth, anchorOffset: Math.max(0, (day - start) * dayWidth - 120) };
|
|
26
|
+
}
|
|
27
|
+
export function scheduleEntries(rows, fields, view) {
|
|
28
|
+
const result = [];
|
|
29
|
+
const collapsed = new Set(view.collapsedGroups);
|
|
30
|
+
function visit(nodes) {
|
|
31
|
+
for (const node of nodes) {
|
|
32
|
+
if (node.fieldId)
|
|
33
|
+
result.push({ kind: "group", node });
|
|
34
|
+
if (collapsed.has(node.key))
|
|
35
|
+
continue;
|
|
36
|
+
if (node.children.length)
|
|
37
|
+
visit(node.children);
|
|
38
|
+
else
|
|
39
|
+
result.push(...node.rows.map((row) => ({ kind: "row", row })));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
visit(buildGroupTree(rows, fields, view.groups));
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
/** Repeat group ancestors at a page boundary so a row never loses its context. */
|
|
46
|
+
export function scheduleEntryPage(entries, page, size = 40) {
|
|
47
|
+
const offset = (page - 1) * size;
|
|
48
|
+
const ancestors = [];
|
|
49
|
+
for (const entry of entries.slice(0, offset))
|
|
50
|
+
if (entry.kind === "group") {
|
|
51
|
+
ancestors.splice(entry.node.depth);
|
|
52
|
+
ancestors[entry.node.depth] = entry;
|
|
53
|
+
}
|
|
54
|
+
const chunk = entries.slice(offset, offset + size);
|
|
55
|
+
const depth = chunk[0]?.kind === "group" ? chunk[0].node.depth : 3;
|
|
56
|
+
return [...ancestors.slice(0, depth), ...chunk];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/** Keeps secondary actions available without creating duplicate controls. */
|
|
3
|
+
export declare function DataViewToolbar({ compact, start, end, secondary, children }: {
|
|
4
|
+
compact: boolean;
|
|
5
|
+
start?: ReactNode;
|
|
6
|
+
end?: ReactNode;
|
|
7
|
+
secondary: ReactNode;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../src/toolbar.tsx"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;IAC5E,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;CACjG,2CAoBA"}
|
package/dist/toolbar.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
/** Keeps secondary actions available without creating duplicate controls. */
|
|
5
|
+
export function DataViewToolbar({ compact, start, end, secondary, children }) {
|
|
6
|
+
const [open, setOpen] = useState(false);
|
|
7
|
+
const root = useRef(null), trigger = useRef(null);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (!open)
|
|
10
|
+
return;
|
|
11
|
+
const outside = (e) => { if (!root.current?.contains(e.target))
|
|
12
|
+
setOpen(false); };
|
|
13
|
+
document.addEventListener("pointerdown", outside);
|
|
14
|
+
return () => document.removeEventListener("pointerdown", outside);
|
|
15
|
+
}, [open]);
|
|
16
|
+
if (!compact)
|
|
17
|
+
return _jsxs("div", { className: "hy-dv-toolbar", children: [start, children, secondary, end] });
|
|
18
|
+
return _jsxs("div", { className: "hy-dv-toolbar is-compact", ref: root, onKeyDown: (e) => {
|
|
19
|
+
if (e.key === "Escape" && open) {
|
|
20
|
+
e.stopPropagation();
|
|
21
|
+
setOpen(false);
|
|
22
|
+
trigger.current?.focus();
|
|
23
|
+
}
|
|
24
|
+
}, children: [start && _jsx("div", { className: "hy-dv-toolbar-slot", children: start }), children, _jsx("button", { ref: trigger, type: "button", "aria-expanded": open, onClick: () => setOpen(!open), children: "\u66F4\u591A" }), open && _jsxs("div", { className: "hy-dv-toolbar-more", role: "group", "aria-label": "\u66F4\u591A\u8868\u683C\u64CD\u4F5C", onClick: (e) => {
|
|
25
|
+
if (e.target.closest("button")) {
|
|
26
|
+
setOpen(false);
|
|
27
|
+
trigger.current?.focus();
|
|
28
|
+
}
|
|
29
|
+
}, children: [secondary, end] })] });
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../src/toolbar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEpE,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAEzE;IACC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAiB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IACrF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,OAAO,GAAG,CAAC,CAAe,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,IAAI,CAAC,OAAO;QAAE,OAAO,eAAK,SAAS,EAAC,eAAe,aAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAO,CAAC;IAC5F,OAAO,eAAK,SAAS,EAAC,0BAA0B,EAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YAC3E,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,EAAE,CAAC;gBAAC,CAAC,CAAC,eAAe,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAAC,CAAC;QACpG,CAAC,aACE,KAAK,IAAI,cAAK,SAAS,EAAC,oBAAoB,YAAE,KAAK,GAAO,EAC1D,QAAQ,EACT,iBAAQ,GAAG,EAAE,OAAO,EAAE,IAAI,EAAC,QAAQ,mBAAgB,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,6BAAa,EAClG,IAAI,IAAI,eAAK,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAC,OAAO,gBAAY,sCAAQ,EAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC3F,IAAK,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;oBAAC,CAAC;gBAChG,CAAC,aAAG,SAAS,EAAE,GAAG,IAAO,IACrB,CAAC;AACT,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export declare const FIELD_TYPES: readonly ["singleLineText", "multiLineText", "number", "currency", "percentage", "checkbox", "date", "dateTime", "singleSelect", "multiSelect", "person", "relation", "attachment", "createdAt", "updatedAt", "createdBy", "updatedBy", "autoNumber", "systemReadOnly"];
|
|
3
|
+
export type FieldType = (typeof FIELD_TYPES)[number];
|
|
4
|
+
export type SortDirection = "asc" | "desc";
|
|
5
|
+
export type FilterConjunction = "and" | "or";
|
|
6
|
+
export type ColumnPin = "left" | "right" | null;
|
|
7
|
+
export type SaveState = "idle" | "saving" | "saved" | "failed" | "conflict" | "readonly";
|
|
8
|
+
export type ChoiceOption = {
|
|
9
|
+
value: string;
|
|
10
|
+
label: string;
|
|
11
|
+
color?: string;
|
|
12
|
+
textColor?: string;
|
|
13
|
+
groupColor?: string;
|
|
14
|
+
groupTextColor?: string;
|
|
15
|
+
};
|
|
16
|
+
export type PersonValue = {
|
|
17
|
+
id: string;
|
|
18
|
+
label: string;
|
|
19
|
+
avatarUrl?: string;
|
|
20
|
+
};
|
|
21
|
+
export type RelationValue = {
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
};
|
|
25
|
+
export type AttachmentValue = {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
url?: string;
|
|
29
|
+
size?: number;
|
|
30
|
+
};
|
|
31
|
+
export type FieldPermissionContext<Row> = {
|
|
32
|
+
row: Row;
|
|
33
|
+
field: FieldDefinition<Row>;
|
|
34
|
+
};
|
|
35
|
+
export type FieldDefinition<Row = Record<string, unknown>> = {
|
|
36
|
+
id: string;
|
|
37
|
+
label: string;
|
|
38
|
+
type: FieldType;
|
|
39
|
+
width?: number;
|
|
40
|
+
visible?: boolean;
|
|
41
|
+
pinned?: ColumnPin;
|
|
42
|
+
required?: boolean;
|
|
43
|
+
readOnly?: boolean;
|
|
44
|
+
system?: boolean;
|
|
45
|
+
deletable?: boolean;
|
|
46
|
+
placeholder?: string;
|
|
47
|
+
currency?: string;
|
|
48
|
+
precision?: number;
|
|
49
|
+
options?: ChoiceOption[];
|
|
50
|
+
getValue?: (row: Row) => unknown;
|
|
51
|
+
canRead?: (context: FieldPermissionContext<Row>) => boolean;
|
|
52
|
+
canEdit?: (context: FieldPermissionContext<Row>) => boolean;
|
|
53
|
+
validate?: (value: unknown, row: Row) => string | null;
|
|
54
|
+
render?: (value: unknown, row: Row) => ReactNode;
|
|
55
|
+
/** Internal authorized metadata: groupable, never exposed in cells or field menus. */
|
|
56
|
+
internal?: boolean;
|
|
57
|
+
Editor?: (props: FieldEditorProps<Row>) => ReactNode;
|
|
58
|
+
renderQuickView?: (context: CellContext<Row>) => ReactNode;
|
|
59
|
+
/** Owns its interactive shell; never nested inside the ordinary cell button. */
|
|
60
|
+
renderAction?: (context: ActionCellContext<Row>) => ReactNode;
|
|
61
|
+
canAct?: (row: Row) => boolean;
|
|
62
|
+
formatText?: (value: unknown, row: Row) => string;
|
|
63
|
+
groupValue?: (value: unknown) => {
|
|
64
|
+
key: string;
|
|
65
|
+
label: string;
|
|
66
|
+
};
|
|
67
|
+
groupOrder?: string[];
|
|
68
|
+
renderGroup?: (node: DataViewGroupNode<Row>) => ReactNode;
|
|
69
|
+
appearance?: {
|
|
70
|
+
avatar?: boolean;
|
|
71
|
+
people?: "combined" | "separate";
|
|
72
|
+
relation?: "text" | "pill";
|
|
73
|
+
arrow?: boolean;
|
|
74
|
+
empty?: "blank" | "dash";
|
|
75
|
+
systemValue?: boolean;
|
|
76
|
+
};
|
|
77
|
+
/** Person values remain arrays in both modes. */
|
|
78
|
+
multiple?: boolean;
|
|
79
|
+
};
|
|
80
|
+
export type SortRule = {
|
|
81
|
+
fieldId: string;
|
|
82
|
+
direction: SortDirection;
|
|
83
|
+
};
|
|
84
|
+
export type FilterOperator = "contains" | "notContains" | "equals" | "notEquals" | "greaterThan" | "greaterThanOrEqual" | "lessThan" | "lessThanOrEqual" | "before" | "after" | "isEmpty" | "isNotEmpty" | "isTrue" | "isFalse" | "containsAny";
|
|
85
|
+
export type FilterRule = {
|
|
86
|
+
id: string;
|
|
87
|
+
fieldId: string;
|
|
88
|
+
operator: FilterOperator;
|
|
89
|
+
value?: unknown;
|
|
90
|
+
};
|
|
91
|
+
export type FilterGroup = {
|
|
92
|
+
conjunction: FilterConjunction;
|
|
93
|
+
rules: FilterRule[];
|
|
94
|
+
};
|
|
95
|
+
export type GroupRule = {
|
|
96
|
+
fieldId: string;
|
|
97
|
+
};
|
|
98
|
+
export type ColumnViewSetting = {
|
|
99
|
+
fieldId: string;
|
|
100
|
+
visible: boolean;
|
|
101
|
+
width: number;
|
|
102
|
+
pinned: ColumnPin;
|
|
103
|
+
};
|
|
104
|
+
export type DataViewConfig = {
|
|
105
|
+
schemaVersion: 1;
|
|
106
|
+
columns: ColumnViewSetting[];
|
|
107
|
+
sorts: SortRule[];
|
|
108
|
+
filters: FilterGroup;
|
|
109
|
+
groups: GroupRule[];
|
|
110
|
+
collapsedGroups: string[];
|
|
111
|
+
/** @deprecated Ignored: all matching records use continuous scrolling. */
|
|
112
|
+
pageSize?: number;
|
|
113
|
+
/** Optional additions: old schema v1 settings remain valid. */
|
|
114
|
+
viewType?: "table" | "gantt" | "calendar";
|
|
115
|
+
gantt?: GanttMapping;
|
|
116
|
+
calendar?: CalendarMapping;
|
|
117
|
+
density?: "workbench" | "compact" | "standard" | "comfortable";
|
|
118
|
+
virtualize?: boolean;
|
|
119
|
+
colorRules?: ColorRule[];
|
|
120
|
+
location?: ViewLocation;
|
|
121
|
+
mobile?: {
|
|
122
|
+
fieldIds: string[];
|
|
123
|
+
summaryFieldId?: string;
|
|
124
|
+
presentation?: "cards" | "compact";
|
|
125
|
+
};
|
|
126
|
+
schedulePolicy?: {
|
|
127
|
+
showUnscheduled?: boolean;
|
|
128
|
+
showInvalidDates?: boolean;
|
|
129
|
+
};
|
|
130
|
+
/** JSON-only host settings preserved verbatim by normalization. */
|
|
131
|
+
extensions?: Record<string, unknown>;
|
|
132
|
+
};
|
|
133
|
+
export type ViewLocation = {
|
|
134
|
+
search?: string;
|
|
135
|
+
mobileTop?: number;
|
|
136
|
+
page?: number;
|
|
137
|
+
tableTop?: number;
|
|
138
|
+
tableLeft?: number;
|
|
139
|
+
month?: string;
|
|
140
|
+
schedulePage?: number;
|
|
141
|
+
calendarDay?: number | null;
|
|
142
|
+
showUnscheduled?: boolean;
|
|
143
|
+
anchorDate?: string;
|
|
144
|
+
scale?: "week" | "month" | "quarter" | "year";
|
|
145
|
+
ganttTop?: number;
|
|
146
|
+
ganttLeft?: number;
|
|
147
|
+
timelineLeft?: number;
|
|
148
|
+
splitWidth?: number;
|
|
149
|
+
};
|
|
150
|
+
export type NamedDataView = {
|
|
151
|
+
id: string;
|
|
152
|
+
name: string;
|
|
153
|
+
config: DataViewConfig;
|
|
154
|
+
};
|
|
155
|
+
export type DataViewCollection = {
|
|
156
|
+
schemaVersion: 1;
|
|
157
|
+
activeViewId: string;
|
|
158
|
+
views: NamedDataView[];
|
|
159
|
+
};
|
|
160
|
+
export type DataViewWorkspaceProps<Row> = Omit<DataViewProps<Row>, "view" | "initialView" | "onViewChange"> & {
|
|
161
|
+
initialViews: DataViewCollection;
|
|
162
|
+
onViewsChange?: (views: DataViewCollection) => void | Promise<void>;
|
|
163
|
+
views?: DataViewCollection;
|
|
164
|
+
onActiveViewChange?: (viewId: string) => void | Promise<void>;
|
|
165
|
+
runtimeStates?: Record<string, ViewRuntimeState>;
|
|
166
|
+
onViewRuntimeChange?: (viewId: string, runtime: ViewRuntimeState) => void | Promise<void>;
|
|
167
|
+
};
|
|
168
|
+
export type GanttMapping = {
|
|
169
|
+
titleFieldId: string;
|
|
170
|
+
startFieldId: string;
|
|
171
|
+
endFieldId: string;
|
|
172
|
+
groupFieldId?: string;
|
|
173
|
+
progressFieldId?: string;
|
|
174
|
+
colorMode?: "custom" | "field";
|
|
175
|
+
color?: string;
|
|
176
|
+
colorFieldId?: string;
|
|
177
|
+
showTitle?: boolean;
|
|
178
|
+
showDuration?: boolean;
|
|
179
|
+
/** Monday–Friday only; no public-holiday calendar is implied. */
|
|
180
|
+
workdaysOnly?: boolean;
|
|
181
|
+
};
|
|
182
|
+
export type CalendarMapping = {
|
|
183
|
+
titleFieldId: string;
|
|
184
|
+
dateFieldId: string;
|
|
185
|
+
startTimeFieldId?: string;
|
|
186
|
+
endTimeFieldId?: string;
|
|
187
|
+
colorFieldId?: string;
|
|
188
|
+
};
|
|
189
|
+
export type ColorRule = {
|
|
190
|
+
id: string;
|
|
191
|
+
condition: FilterRule;
|
|
192
|
+
target: "row" | string;
|
|
193
|
+
color: string;
|
|
194
|
+
};
|
|
195
|
+
export type DataViewPermissions<Row> = {
|
|
196
|
+
canConfigureView?: boolean;
|
|
197
|
+
canSearch?: boolean;
|
|
198
|
+
canFilter?: boolean;
|
|
199
|
+
canSort?: boolean;
|
|
200
|
+
canCollapseGroups?: boolean;
|
|
201
|
+
canSwitchView?: boolean;
|
|
202
|
+
canSelectRows?: boolean;
|
|
203
|
+
canEditRow?: (row: Row) => boolean;
|
|
204
|
+
canManageFields?: boolean;
|
|
205
|
+
canManageDependencies?: boolean;
|
|
206
|
+
canChangeField?: (field: FieldDefinition<Row>, action: "rename" | "copy" | "delete") => boolean;
|
|
207
|
+
};
|
|
208
|
+
export type CellCommit<Row> = {
|
|
209
|
+
row: Row;
|
|
210
|
+
rowId: string;
|
|
211
|
+
field: FieldDefinition<Row>;
|
|
212
|
+
previousValue: unknown;
|
|
213
|
+
nextValue: unknown;
|
|
214
|
+
};
|
|
215
|
+
/** Host must validate current permissions/previous values and apply all or none. */
|
|
216
|
+
export type BatchCommit<Row> = {
|
|
217
|
+
id: string;
|
|
218
|
+
reason: "edit" | "batch" | "paste" | "clear" | "undo" | "redo";
|
|
219
|
+
changes: CellCommit<Row>[];
|
|
220
|
+
scheduleGuard?: GanttScheduleGuard;
|
|
221
|
+
};
|
|
222
|
+
/** Finish-to-start only: successor starts after predecessor's inclusive end day. */
|
|
223
|
+
export type GanttDependency = {
|
|
224
|
+
id: string;
|
|
225
|
+
predecessorId: string;
|
|
226
|
+
successorId: string;
|
|
227
|
+
lagDays: number;
|
|
228
|
+
};
|
|
229
|
+
/** Business data, never part of a personal view. Host supplies a complete authorized graph. */
|
|
230
|
+
export type GanttDependencyState<Row> = {
|
|
231
|
+
revision: string;
|
|
232
|
+
complete: boolean;
|
|
233
|
+
links: GanttDependency[];
|
|
234
|
+
/** Confirmed meetings / crews can be protected independently of ordinary cell editing. */
|
|
235
|
+
isDateLocked?: (row: Row) => boolean;
|
|
236
|
+
};
|
|
237
|
+
export type GanttDependencyChange = {
|
|
238
|
+
revision: string;
|
|
239
|
+
} & ({
|
|
240
|
+
action: "add";
|
|
241
|
+
link: GanttDependency;
|
|
242
|
+
} | {
|
|
243
|
+
action: "delete";
|
|
244
|
+
linkId: string;
|
|
245
|
+
});
|
|
246
|
+
/** Adapter must check this read set and dependency revision in the same transaction as writes. */
|
|
247
|
+
export type GanttScheduleGuard = {
|
|
248
|
+
revision: string;
|
|
249
|
+
startFieldId: string;
|
|
250
|
+
endFieldId: string;
|
|
251
|
+
workdaysOnly: boolean;
|
|
252
|
+
checks: Array<{
|
|
253
|
+
rowId: string;
|
|
254
|
+
startValue: unknown;
|
|
255
|
+
endValue: unknown;
|
|
256
|
+
}>;
|
|
257
|
+
};
|
|
258
|
+
export type FieldChange<Row> = {
|
|
259
|
+
action: "add";
|
|
260
|
+
field: FieldDefinition<Row>;
|
|
261
|
+
} | {
|
|
262
|
+
action: "copy";
|
|
263
|
+
field: FieldDefinition<Row>;
|
|
264
|
+
sourceFieldId: string;
|
|
265
|
+
} | {
|
|
266
|
+
action: "rename";
|
|
267
|
+
fieldId: string;
|
|
268
|
+
label: string;
|
|
269
|
+
} | {
|
|
270
|
+
action: "delete";
|
|
271
|
+
fieldId: string;
|
|
272
|
+
};
|
|
273
|
+
export type AttachmentRequest<Row> = {
|
|
274
|
+
row: Row;
|
|
275
|
+
rowId: string;
|
|
276
|
+
field: FieldDefinition<Row>;
|
|
277
|
+
files: File[];
|
|
278
|
+
};
|
|
279
|
+
export type DataViewProps<Row> = {
|
|
280
|
+
fields: FieldDefinition<Row>[];
|
|
281
|
+
rows: Row[];
|
|
282
|
+
getRowId: (row: Row) => string;
|
|
283
|
+
title?: string;
|
|
284
|
+
loading?: boolean;
|
|
285
|
+
error?: string | null;
|
|
286
|
+
access?: "granted" | "denied";
|
|
287
|
+
emptyMessage?: string;
|
|
288
|
+
initialView?: Partial<DataViewConfig>;
|
|
289
|
+
view?: DataViewConfig;
|
|
290
|
+
onViewChange?: (view: DataViewConfig) => void | Promise<void>;
|
|
291
|
+
onCellCommit?: (commit: CellCommit<Row>) => void | Promise<void>;
|
|
292
|
+
onBatchCommit?: (commit: BatchCommit<Row>) => void | Promise<void>;
|
|
293
|
+
ganttDependencies?: GanttDependencyState<Row>;
|
|
294
|
+
onGanttDependencyChange?: (change: GanttDependencyChange) => void | Promise<void>;
|
|
295
|
+
/** Host owns schema persistence; pass updated fields only after a successful change. */
|
|
296
|
+
onFieldChange?: (change: FieldChange<Row>) => void | Promise<void>;
|
|
297
|
+
onRequestAttachment?: (request: AttachmentRequest<Row>) => void | Promise<void>;
|
|
298
|
+
permissions?: DataViewPermissions<Row>;
|
|
299
|
+
selectedRowIds?: string[];
|
|
300
|
+
onSelectionChange?: (rowIds: string[]) => void;
|
|
301
|
+
searchPlaceholder?: string;
|
|
302
|
+
/** Change this key on project/dataset/user/role identity changes. */
|
|
303
|
+
identityKey?: string;
|
|
304
|
+
runtimeState?: ViewRuntimeState;
|
|
305
|
+
onRuntimeChange?: (state: ViewRuntimeState) => void | Promise<void>;
|
|
306
|
+
onViewChangeDetail?: (change: ViewChange) => void | Promise<void>;
|
|
307
|
+
features?: DataViewFeatures;
|
|
308
|
+
/** Host-controlled preference; omitted keeps automatic responsive presentation. */
|
|
309
|
+
presentation?: "auto" | "table" | "cards";
|
|
310
|
+
/** Optional control. Host persists the selected preference. */
|
|
311
|
+
onPresentationChange?: (value: "auto" | "table" | "cards") => void;
|
|
312
|
+
chrome?: "standard" | "compact";
|
|
313
|
+
headerStart?: ReactNode;
|
|
314
|
+
headerEnd?: ReactNode;
|
|
315
|
+
/** Total component height including chrome and status, unlike viewportHeight. CSS percentages require a sized parent. */
|
|
316
|
+
height?: number | string;
|
|
317
|
+
toolbarStart?: ReactNode;
|
|
318
|
+
toolbarEnd?: ReactNode;
|
|
319
|
+
onRowOpen?: (row: Row) => void;
|
|
320
|
+
renderDetail?: (context: DetailContext<Row>) => ReactNode;
|
|
321
|
+
renderDetailFooter?: (context: DetailContext<Row>) => ReactNode;
|
|
322
|
+
renderMobileRow?: (context: DetailContext<Row>) => ReactNode;
|
|
323
|
+
getRowLabel?: (row: Row) => string;
|
|
324
|
+
metrics?: Partial<DataViewMetrics>;
|
|
325
|
+
viewportHeight?: number | string;
|
|
326
|
+
bottomScrollbar?: boolean;
|
|
327
|
+
remote?: RemoteDataState;
|
|
328
|
+
onQueryChange?: (query: DataViewQuery) => void;
|
|
329
|
+
rowMove?: {
|
|
330
|
+
canMove?: (row: Row) => boolean;
|
|
331
|
+
canDrop: (request: RowMoveRequest<Row>) => boolean;
|
|
332
|
+
onMove: (request: RowMoveRequest<Row>) => void | Promise<void>;
|
|
333
|
+
};
|
|
334
|
+
/** Workspace owns aggregate save status when true. */
|
|
335
|
+
hideViewSaveStatus?: boolean;
|
|
336
|
+
};
|
|
337
|
+
export type FieldEditorProps<Row> = {
|
|
338
|
+
value: unknown;
|
|
339
|
+
row: Row;
|
|
340
|
+
field: FieldDefinition<Row>;
|
|
341
|
+
disabled?: boolean;
|
|
342
|
+
onCommit: (value: unknown) => void;
|
|
343
|
+
onCancel: () => void;
|
|
344
|
+
onRequestAttachment?: (files: File[]) => void;
|
|
345
|
+
};
|
|
346
|
+
export type FieldTypeDefinition = {
|
|
347
|
+
type: FieldType;
|
|
348
|
+
label: string;
|
|
349
|
+
editable: boolean;
|
|
350
|
+
deletable: boolean;
|
|
351
|
+
operators: FilterOperator[];
|
|
352
|
+
isEmpty: (value: unknown) => boolean;
|
|
353
|
+
validate: <Row>(value: unknown, field: FieldDefinition<Row>) => string | null;
|
|
354
|
+
compare: <Row>(left: unknown, right: unknown, field: FieldDefinition<Row>) => number;
|
|
355
|
+
filter: <Row>(value: unknown, rule: FilterRule, field: FieldDefinition<Row>) => boolean;
|
|
356
|
+
group: <Row>(value: unknown, field: FieldDefinition<Row>) => {
|
|
357
|
+
key: string;
|
|
358
|
+
label: string;
|
|
359
|
+
};
|
|
360
|
+
render: <Row>(value: unknown, field: FieldDefinition<Row>) => ReactNode;
|
|
361
|
+
/** Toggle directly on activation, without opening a separate cell editor. */
|
|
362
|
+
toggleValue?: (value: unknown) => boolean;
|
|
363
|
+
Editor?: <Row>(props: FieldEditorProps<Row>) => ReactNode;
|
|
364
|
+
};
|
|
365
|
+
export type DataViewGroupNode<Row> = {
|
|
366
|
+
key: string;
|
|
367
|
+
fieldId: string | null;
|
|
368
|
+
label: string;
|
|
369
|
+
depth: number;
|
|
370
|
+
rows: Row[];
|
|
371
|
+
children: DataViewGroupNode<Row>[];
|
|
372
|
+
valueKey?: string;
|
|
373
|
+
color?: string;
|
|
374
|
+
textColor?: string;
|
|
375
|
+
};
|
|
376
|
+
export type CellContext<Row> = {
|
|
377
|
+
row: Row;
|
|
378
|
+
field: FieldDefinition<Row>;
|
|
379
|
+
value: unknown;
|
|
380
|
+
close: () => void;
|
|
381
|
+
openRow: () => void;
|
|
382
|
+
};
|
|
383
|
+
export type ActionCellContext<Row> = CellContext<Row> & {
|
|
384
|
+
disabled: boolean;
|
|
385
|
+
pending: boolean;
|
|
386
|
+
run: (action: () => void | Promise<void>) => Promise<void>;
|
|
387
|
+
};
|
|
388
|
+
export type DetailContext<Row> = {
|
|
389
|
+
row: Row;
|
|
390
|
+
fields: FieldDefinition<Row>[];
|
|
391
|
+
close: () => void;
|
|
392
|
+
renderCell: (field: FieldDefinition<Row>) => ReactNode;
|
|
393
|
+
};
|
|
394
|
+
export type ViewRuntimeState = {
|
|
395
|
+
viewType?: DataViewConfig["viewType"];
|
|
396
|
+
location?: ViewLocation;
|
|
397
|
+
collapsedGroups?: string[];
|
|
398
|
+
filters?: FilterGroup;
|
|
399
|
+
sorts?: SortRule[];
|
|
400
|
+
};
|
|
401
|
+
export type ViewChange = {
|
|
402
|
+
scope: "layout" | "query" | "navigation";
|
|
403
|
+
view: DataViewConfig;
|
|
404
|
+
runtime: ViewRuntimeState;
|
|
405
|
+
};
|
|
406
|
+
export type DataViewFeatures = Partial<Record<"search" | "filter" | "sort" | "group" | "columns" | "colors" | "viewTabs" | "viewSettings" | "viewManagement" | "batch" | "copy" | "paste" | "clear" | "undo" | "redo" | "rowOpen", boolean>>;
|
|
407
|
+
export type DataViewMetrics = {
|
|
408
|
+
rowHeight: number;
|
|
409
|
+
headerHeight: number;
|
|
410
|
+
groupHeight: number;
|
|
411
|
+
groupGap: number;
|
|
412
|
+
nestedGroupGap: number;
|
|
413
|
+
cellFontSize: number;
|
|
414
|
+
cellLineHeight: number;
|
|
415
|
+
headerFontSize: number;
|
|
416
|
+
cellPadding: number;
|
|
417
|
+
headerPaddingLeft: number;
|
|
418
|
+
headerPaddingRight: number;
|
|
419
|
+
controlHeight: number;
|
|
420
|
+
actionHeight: number;
|
|
421
|
+
badgeHeight: number;
|
|
422
|
+
badgeFontSize: number;
|
|
423
|
+
badgePadding: number;
|
|
424
|
+
scrollbarHeight: number;
|
|
425
|
+
scrollbarThumb: number;
|
|
426
|
+
};
|
|
427
|
+
export type DataViewQuery = {
|
|
428
|
+
version: 1;
|
|
429
|
+
search: string;
|
|
430
|
+
filters: FilterGroup;
|
|
431
|
+
sorts: SortRule[];
|
|
432
|
+
groups: GroupRule[];
|
|
433
|
+
};
|
|
434
|
+
export type RemoteDataState = {
|
|
435
|
+
queryKey: string;
|
|
436
|
+
total?: number;
|
|
437
|
+
complete: boolean;
|
|
438
|
+
loading?: boolean;
|
|
439
|
+
error?: string | null;
|
|
440
|
+
onLoadMore?: () => void;
|
|
441
|
+
onRetry?: () => void;
|
|
442
|
+
groupCounts?: Record<string, number>;
|
|
443
|
+
};
|
|
444
|
+
export type DataSourceResult<Row> = {
|
|
445
|
+
rows: Row[];
|
|
446
|
+
total: number;
|
|
447
|
+
nextCursor: string | null; /** Same snapshot for every batch. */
|
|
448
|
+
snapshot: string;
|
|
449
|
+
groupCounts?: Record<string, number>;
|
|
450
|
+
};
|
|
451
|
+
export type DataSource<Row> = {
|
|
452
|
+
query: (request: {
|
|
453
|
+
query: DataViewQuery;
|
|
454
|
+
cursor?: string;
|
|
455
|
+
snapshot?: string;
|
|
456
|
+
signal: AbortSignal;
|
|
457
|
+
}) => Promise<DataSourceResult<Row>>;
|
|
458
|
+
};
|
|
459
|
+
export type GroupPathPart = {
|
|
460
|
+
fieldId: string;
|
|
461
|
+
key: string;
|
|
462
|
+
valueKey: string;
|
|
463
|
+
};
|
|
464
|
+
export type RowMoveRequest<Row> = {
|
|
465
|
+
row: Row;
|
|
466
|
+
rowId: string;
|
|
467
|
+
targetRowId: string | null;
|
|
468
|
+
position: "before" | "after" | "groupEnd";
|
|
469
|
+
sourceGroupPath: GroupPathPart[];
|
|
470
|
+
targetGroupPath: GroupPathPart[];
|
|
471
|
+
};
|
|
472
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|