@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.
Files changed (109) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/DATA-PRIVACY.md +20 -0
  3. package/INTEGRATION.md +178 -0
  4. package/KNOWN-LIMITATIONS.md +34 -0
  5. package/LICENSE +21 -0
  6. package/README.md +67 -5
  7. package/dist/contracts.d.ts +33 -0
  8. package/dist/contracts.d.ts.map +1 -0
  9. package/dist/contracts.js +83 -0
  10. package/dist/contracts.js.map +1 -0
  11. package/dist/data-view.d.ts +3 -0
  12. package/dist/data-view.d.ts.map +1 -0
  13. package/dist/data-view.js +822 -0
  14. package/dist/data-view.js.map +1 -0
  15. package/dist/engine.d.ts +34 -0
  16. package/dist/engine.d.ts.map +1 -0
  17. package/dist/engine.js +307 -0
  18. package/dist/engine.js.map +1 -0
  19. package/dist/gantt-bar.d.ts +17 -0
  20. package/dist/gantt-bar.d.ts.map +1 -0
  21. package/dist/gantt-bar.js +142 -0
  22. package/dist/gantt-bar.js.map +1 -0
  23. package/dist/gantt-dependencies.d.ts +27 -0
  24. package/dist/gantt-dependencies.d.ts.map +1 -0
  25. package/dist/gantt-dependencies.js +218 -0
  26. package/dist/gantt-dependencies.js.map +1 -0
  27. package/dist/gantt-dependency-ui.d.ts +37 -0
  28. package/dist/gantt-dependency-ui.d.ts.map +1 -0
  29. package/dist/gantt-dependency-ui.js +79 -0
  30. package/dist/gantt-dependency-ui.js.map +1 -0
  31. package/dist/gantt-grid.d.ts +27 -0
  32. package/dist/gantt-grid.d.ts.map +1 -0
  33. package/dist/gantt-grid.js +72 -0
  34. package/dist/gantt-grid.js.map +1 -0
  35. package/dist/gantt-operations.d.ts +14 -0
  36. package/dist/gantt-operations.d.ts.map +1 -0
  37. package/dist/gantt-operations.js +103 -0
  38. package/dist/gantt-operations.js.map +1 -0
  39. package/dist/index.d.ts +17 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +17 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/operations.d.ts +11 -0
  44. package/dist/operations.d.ts.map +1 -0
  45. package/dist/operations.js +117 -0
  46. package/dist/operations.js.map +1 -0
  47. package/dist/registry.d.ts +13 -0
  48. package/dist/registry.d.ts.map +1 -0
  49. package/dist/registry.js +465 -0
  50. package/dist/registry.js.map +1 -0
  51. package/dist/remote-data.d.ts +19 -0
  52. package/dist/remote-data.d.ts.map +1 -0
  53. package/dist/remote-data.js +67 -0
  54. package/dist/remote-data.js.map +1 -0
  55. package/dist/row-move.d.ts +7 -0
  56. package/dist/row-move.d.ts.map +1 -0
  57. package/dist/row-move.js +27 -0
  58. package/dist/row-move.js.map +1 -0
  59. package/dist/schedule-view.d.ts +27 -0
  60. package/dist/schedule-view.d.ts.map +1 -0
  61. package/dist/schedule-view.js +122 -0
  62. package/dist/schedule-view.js.map +1 -0
  63. package/dist/schedule.d.ts +28 -0
  64. package/dist/schedule.d.ts.map +1 -0
  65. package/dist/schedule.js +97 -0
  66. package/dist/schedule.js.map +1 -0
  67. package/dist/style.css +986 -0
  68. package/dist/timeline.d.ts +25 -0
  69. package/dist/timeline.d.ts.map +1 -0
  70. package/dist/timeline.js +58 -0
  71. package/dist/timeline.js.map +1 -0
  72. package/dist/toolbar.d.ts +10 -0
  73. package/dist/toolbar.d.ts.map +1 -0
  74. package/dist/toolbar.js +31 -0
  75. package/dist/toolbar.js.map +1 -0
  76. package/dist/types.d.ts +472 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +22 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/use-remote-data.d.ts +18 -0
  81. package/dist/use-remote-data.d.ts.map +1 -0
  82. package/dist/use-remote-data.js +12 -0
  83. package/dist/use-remote-data.js.map +1 -0
  84. package/dist/use-row-move.d.ts +12 -0
  85. package/dist/use-row-move.d.ts.map +1 -0
  86. package/dist/use-row-move.js +151 -0
  87. package/dist/use-row-move.js.map +1 -0
  88. package/dist/v2-panels.d.ts +37 -0
  89. package/dist/v2-panels.d.ts.map +1 -0
  90. package/dist/v2-panels.js +108 -0
  91. package/dist/v2-panels.js.map +1 -0
  92. package/dist/view-state.d.ts +30 -0
  93. package/dist/view-state.d.ts.map +1 -0
  94. package/dist/view-state.js +94 -0
  95. package/dist/view-state.js.map +1 -0
  96. package/dist/view-workspace.d.ts +3 -0
  97. package/dist/view-workspace.d.ts.map +1 -0
  98. package/dist/view-workspace.js +95 -0
  99. package/dist/view-workspace.js.map +1 -0
  100. package/dist/virtual-list.d.ts +12 -0
  101. package/dist/virtual-list.d.ts.map +1 -0
  102. package/dist/virtual-list.js +46 -0
  103. package/dist/virtual-list.js.map +1 -0
  104. package/package.json +19 -16
  105. package/index.d.ts +0 -2
  106. package/index.js +0 -5
  107. package/react.d.ts +0 -2
  108. package/react.js +0 -8
  109. package/style.css +0 -1
@@ -0,0 +1,465 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useState } from "react";
3
+ const TEXT_OPERATORS = ["contains", "notContains", "equals", "notEquals", "isEmpty", "isNotEmpty"];
4
+ const NUMBER_OPERATORS = ["equals", "notEquals", "greaterThan", "greaterThanOrEqual", "lessThan", "lessThanOrEqual", "isEmpty", "isNotEmpty"];
5
+ const DATE_OPERATORS = ["equals", "before", "after", "isEmpty", "isNotEmpty"];
6
+ const OPTION_OPERATORS = ["equals", "notEquals", "containsAny", "isEmpty", "isNotEmpty"];
7
+ export const FILTER_OPERATOR_LABELS = {
8
+ contains: "包含",
9
+ notContains: "不包含",
10
+ equals: "等於",
11
+ notEquals: "不等於",
12
+ greaterThan: "大於",
13
+ greaterThanOrEqual: "大於或等於",
14
+ lessThan: "小於",
15
+ lessThanOrEqual: "小於或等於",
16
+ before: "早於",
17
+ after: "晚於",
18
+ isEmpty: "為空白",
19
+ isNotEmpty: "不是空白",
20
+ isTrue: "已打勾",
21
+ isFalse: "未打勾",
22
+ containsAny: "包含其中一個",
23
+ };
24
+ function isEmpty(value) {
25
+ return value === null || value === undefined || value === "" || (Array.isArray(value) && value.length === 0);
26
+ }
27
+ function textOf(value) {
28
+ if (isEmpty(value))
29
+ return "";
30
+ if (Array.isArray(value))
31
+ return value.map(textOf).join("、");
32
+ if (typeof value === "object") {
33
+ const record = value;
34
+ return String(record.label ?? record.name ?? record.id ?? "");
35
+ }
36
+ return String(value);
37
+ }
38
+ function compareText(left, right) {
39
+ return textOf(left).localeCompare(textOf(right), "zh-Hant", { numeric: true });
40
+ }
41
+ function compareNumber(left, right) {
42
+ const a = Number(left);
43
+ const b = Number(right);
44
+ if (!Number.isFinite(a) && !Number.isFinite(b))
45
+ return 0;
46
+ if (!Number.isFinite(a))
47
+ return 1;
48
+ if (!Number.isFinite(b))
49
+ return -1;
50
+ return a - b;
51
+ }
52
+ function compareDate(left, right) {
53
+ const a = Date.parse(String(left ?? ""));
54
+ const b = Date.parse(String(right ?? ""));
55
+ if (Number.isNaN(a) && Number.isNaN(b))
56
+ return 0;
57
+ if (Number.isNaN(a))
58
+ return 1;
59
+ if (Number.isNaN(b))
60
+ return -1;
61
+ return a - b;
62
+ }
63
+ function commonFilter(value, rule) {
64
+ const left = textOf(value).toLocaleLowerCase("zh-Hant");
65
+ const right = textOf(rule.value).toLocaleLowerCase("zh-Hant");
66
+ if (rule.operator === "isEmpty")
67
+ return isEmpty(value);
68
+ if (rule.operator === "isNotEmpty")
69
+ return !isEmpty(value);
70
+ if (rule.operator === "contains")
71
+ return left.includes(right);
72
+ if (rule.operator === "notContains")
73
+ return !left.includes(right);
74
+ if (rule.operator === "notEquals")
75
+ return left !== right;
76
+ if (rule.operator === "containsAny") {
77
+ const values = Array.isArray(value) ? value.map((item) => textOf(item).toLocaleLowerCase("zh-Hant")) : [left];
78
+ const targets = Array.isArray(rule.value) ? rule.value.map((item) => textOf(item).toLocaleLowerCase("zh-Hant")) : [right];
79
+ return targets.some((target) => values.includes(target));
80
+ }
81
+ return left === right;
82
+ }
83
+ /** References compare permanent IDs, never translated or duplicate display names. */
84
+ function referenceFilter(value, rule) {
85
+ if (rule.operator === "isEmpty" || rule.operator === "isNotEmpty")
86
+ return commonFilter(value, rule);
87
+ const ids = (v) => [...new Set((Array.isArray(v) ? v : isEmpty(v) ? [] : [v]).map((x) => typeof x === "object" && x ? String(x.id) : String(x)))].sort();
88
+ const values = ids(value), targets = ids(rule.value);
89
+ if (rule.operator === "containsAny")
90
+ return targets.some((id) => values.includes(id));
91
+ const equal = JSON.stringify(values) === JSON.stringify(targets);
92
+ return rule.operator === "notEquals" ? !equal : equal;
93
+ }
94
+ function numberFilter(value, rule) {
95
+ if (rule.operator === "isEmpty" || rule.operator === "isNotEmpty")
96
+ return commonFilter(value, rule);
97
+ if (isEmpty(value) || isEmpty(rule.value))
98
+ return false;
99
+ const left = Number(value);
100
+ const right = Number(rule.value);
101
+ if (!Number.isFinite(left) || !Number.isFinite(right))
102
+ return false;
103
+ if (rule.operator === "notEquals")
104
+ return left !== right;
105
+ if (rule.operator === "greaterThan")
106
+ return left > right;
107
+ if (rule.operator === "greaterThanOrEqual")
108
+ return left >= right;
109
+ if (rule.operator === "lessThan")
110
+ return left < right;
111
+ if (rule.operator === "lessThanOrEqual")
112
+ return left <= right;
113
+ return left === right;
114
+ }
115
+ function dateFilter(value, rule) {
116
+ if (rule.operator === "isEmpty" || rule.operator === "isNotEmpty")
117
+ return commonFilter(value, rule);
118
+ const left = Date.parse(String(value ?? ""));
119
+ const right = Date.parse(String(rule.value ?? ""));
120
+ if (Number.isNaN(left) || Number.isNaN(right))
121
+ return false;
122
+ if (rule.operator === "before")
123
+ return left < right;
124
+ if (rule.operator === "after")
125
+ return left > right;
126
+ return new Date(left).toISOString().slice(0, 10) === new Date(right).toISOString().slice(0, 10);
127
+ }
128
+ function group(value, field) {
129
+ if (isEmpty(value))
130
+ return { key: "__empty__", label: "空白" };
131
+ const items = Array.isArray(value) ? value : [value];
132
+ const ids = items.map((v) => typeof v === "object" && v ? String(v.id ?? textOf(v)) : String(v));
133
+ const normalized = ids.length === 1 ? ids[0] : JSON.stringify([...new Set(ids)].sort());
134
+ const option = field.options?.find((item) => item.value === String(value));
135
+ return { key: encodeURIComponent(normalized), label: option?.label ?? textOf(Array.isArray(value) ? [...value].sort((a, b) => textOf(a).localeCompare(textOf(b), "zh-Hant")) : value) };
136
+ }
137
+ function optionFor(value, field) {
138
+ return field.options?.find((item) => item.value === String(value));
139
+ }
140
+ function renderOption(value, field) {
141
+ const option = optionFor(value, field);
142
+ const label = option?.label ?? textOf(value);
143
+ if (!label)
144
+ return _jsx("span", { className: "hy-dv-empty", children: "\u2014" });
145
+ return _jsx("span", { className: "hy-dv-tag", style: { backgroundColor: option?.color, color: option?.textColor }, children: label });
146
+ }
147
+ function renderMultiOptions(value, field) {
148
+ const values = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];
149
+ if (values.length === 0)
150
+ return _jsx("span", { className: "hy-dv-empty", children: "\u2014" });
151
+ return _jsx("span", { className: "hy-dv-tags", children: values.map((item, index) => _jsx("span", { children: renderOption(item, field) }, `${textOf(item)}-${index}`)) });
152
+ }
153
+ function renderPeople(value, field) {
154
+ const values = (Array.isArray(value) ? value : isEmpty(value) ? [] : [value]).map((item) => typeof item === "object" && item ? item : { id: String(item), label: String(item) });
155
+ if (!values.length)
156
+ return null;
157
+ const label = values.map((v) => v.label).join("、");
158
+ if (field.appearance?.people === "combined") {
159
+ const option = values.length === 1 ? field.options?.find((o) => o.value === values[0].id) : undefined;
160
+ return _jsx("span", { className: "hy-dv-person", title: label, style: { backgroundColor: option?.color, color: option?.textColor }, children: label });
161
+ }
162
+ return _jsx("span", { className: "hy-dv-tags", title: label, children: values.map((person) => {
163
+ const option = field.options?.find((o) => o.value === person.id);
164
+ return _jsxs("span", { className: "hy-dv-person", style: { backgroundColor: option?.color, color: option?.textColor }, children: [field.appearance?.avatar === true && _jsx("span", { className: "hy-dv-avatar", children: person.label.slice(0, 1) }), _jsx("span", { className: "hy-dv-pill-label", children: person.label })] }, person.id);
165
+ }) });
166
+ }
167
+ function renderRelations(value, field) {
168
+ if (field.appearance?.relation === "text")
169
+ return textOf(value);
170
+ const values = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];
171
+ return _jsx("span", { className: "hy-dv-tags", children: values.map((item, index) => {
172
+ const relation = typeof item === "object" ? item : { id: String(item), label: String(item) };
173
+ return _jsx("span", { className: "hy-dv-relation", children: relation.label }, `${relation.id}-${index}`);
174
+ }) });
175
+ }
176
+ function renderAttachments(value) {
177
+ const values = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];
178
+ if (values.length === 0)
179
+ return _jsx("span", { className: "hy-dv-empty", children: "\u2014" });
180
+ return _jsx("span", { className: "hy-dv-attachments", children: values.map((item, index) => {
181
+ const file = typeof item === "object" ? item : { id: String(item), name: String(item) };
182
+ return file.url && /^(https?:\/\/|\/(?!\/))/.test(file.url) ? _jsx("a", { href: file.url, target: "_blank", rel: "noreferrer", children: file.name }, `${file.id}-${index}`) : _jsx("span", { children: file.name }, `${file.id}-${index}`);
183
+ }) });
184
+ }
185
+ function formatNumber(value, field, style) {
186
+ if (isEmpty(value) || !Number.isFinite(Number(value)))
187
+ return _jsx("span", { className: "hy-dv-empty", children: "\u2014" });
188
+ const number = Number(value);
189
+ const precision = field.precision ?? (style === "currency" ? 0 : 2);
190
+ if (style === "currency")
191
+ return new Intl.NumberFormat("zh-TW", { style: "currency", currency: field.currency ?? "TWD", maximumFractionDigits: precision }).format(number);
192
+ if (style === "percent")
193
+ return new Intl.NumberFormat("zh-TW", { style: "percent", maximumFractionDigits: precision }).format(number);
194
+ return new Intl.NumberFormat("zh-TW", { maximumFractionDigits: precision }).format(number);
195
+ }
196
+ function TextEditor({ value, field, onCommit, onCancel }) {
197
+ const [draft, setDraft] = useState(textOf(value));
198
+ const done = useRef(false);
199
+ const commit = () => { if (!done.current) {
200
+ done.current = true;
201
+ onCommit(draft);
202
+ } };
203
+ const multiline = field.type === "multiLineText";
204
+ function keyDown(event) {
205
+ if (event.key === "Escape") {
206
+ done.current = true;
207
+ event.preventDefault();
208
+ onCancel();
209
+ }
210
+ if (event.key === "Enter" && (!multiline || event.metaKey || event.ctrlKey)) {
211
+ event.preventDefault();
212
+ commit();
213
+ }
214
+ }
215
+ const common = { autoFocus: true, value: draft, placeholder: field.placeholder, onChange: (event) => setDraft(event.target.value), onKeyDown: keyDown };
216
+ return multiline
217
+ ? _jsx("textarea", { className: "hy-dv-editor hy-dv-textarea", ...common, onBlur: commit })
218
+ : _jsx("input", { className: "hy-dv-editor", ...common, onBlur: commit });
219
+ }
220
+ function NumberEditor({ value, field, onCommit, onCancel }) {
221
+ const [draft, setDraft] = useState(isEmpty(value) ? "" : String(value));
222
+ const done = useRef(false);
223
+ function commit() { if (!done.current) {
224
+ done.current = true;
225
+ onCommit(draft === "" ? null : Number(draft));
226
+ } }
227
+ return _jsx("input", { autoFocus: true, className: "hy-dv-editor", type: "number", step: field.type === "percentage" ? "0.01" : "any", value: draft, onChange: (event) => setDraft(event.target.value), onBlur: commit, onKeyDown: (event) => {
228
+ if (event.key === "Escape") {
229
+ done.current = true;
230
+ event.preventDefault();
231
+ onCancel();
232
+ }
233
+ if (event.key === "Enter")
234
+ commit();
235
+ } });
236
+ }
237
+ function CheckboxEditor({ value, onCommit }) {
238
+ return _jsx("input", { autoFocus: true, className: "hy-dv-check", type: "checkbox", checked: Boolean(value), onChange: (event) => onCommit(event.target.checked) });
239
+ }
240
+ function DateEditor({ value, field, onCommit, onCancel }) {
241
+ const type = field.type === "date" ? "date" : "datetime-local";
242
+ const initial = isEmpty(value) ? "" : String(value).slice(0, type === "date" ? 10 : 16);
243
+ const [draft, setDraft] = useState(initial);
244
+ const done = useRef(false);
245
+ const commit = () => { if (!done.current) {
246
+ done.current = true;
247
+ onCommit(draft || null);
248
+ } };
249
+ return _jsx("input", { autoFocus: true, className: "hy-dv-editor", type: type, value: draft, onChange: (event) => setDraft(event.target.value), onBlur: commit, onKeyDown: (event) => {
250
+ if (event.key === "Escape") {
251
+ done.current = true;
252
+ event.preventDefault();
253
+ onCancel();
254
+ }
255
+ if (event.key === "Enter")
256
+ commit();
257
+ } });
258
+ }
259
+ function SelectEditor({ value, field, onCommit, onCancel }) {
260
+ return _jsxs("select", { autoFocus: true, className: "hy-dv-editor", value: isEmpty(value) ? "" : String(value), onChange: (event) => onCommit(event.target.value || null), onBlur: onCancel, children: [_jsx("option", { value: "", children: "\u7A7A\u767D" }), (field.options ?? []).map((option) => _jsx("option", { value: option.value, children: option.label }, option.value))] });
261
+ }
262
+ function MultiSelectEditor({ value, field, onCommit, onCancel }) {
263
+ const [draft, setDraft] = useState((Array.isArray(value) ? value : []).map(String));
264
+ return _jsx("select", { autoFocus: true, multiple: true, className: "hy-dv-editor hy-dv-multi-select", value: draft, onChange: (event) => setDraft([...event.target.selectedOptions].map((option) => option.value)), onBlur: () => onCommit(draft), onKeyDown: (event) => {
265
+ if (event.key === "Escape")
266
+ onCancel();
267
+ if (event.key === "Enter" && (event.metaKey || event.ctrlKey))
268
+ onCommit(draft);
269
+ }, children: (field.options ?? []).map((option) => _jsx("option", { value: option.value, children: option.label }, option.value)) });
270
+ }
271
+ export function ReferenceEditor({ value, field, onCommit, onCancel }) {
272
+ const multiple = field.type === "person" && field.multiple !== false;
273
+ const original = (Array.isArray(value) ? value : isEmpty(value) ? [] : [value]);
274
+ const [draft, setDraft] = useState(original.map((v) => v.id));
275
+ const [query, setQuery] = useState("");
276
+ function commit(ids) {
277
+ const values = ids.map((id) => ({ id, label: field.options?.find((o) => o.value === id)?.label ?? original.find((v) => v.id === id)?.label ?? "未命名" }));
278
+ onCommit(field.type === "person" ? values : values[0] ?? null);
279
+ }
280
+ const options = (field.options ?? []).filter((o) => o.label.toLocaleLowerCase().includes(query.toLocaleLowerCase()));
281
+ return _jsxs("div", { className: "hy-dv-reference-editor", onKeyDown: (e) => { if (e.key === "Escape") {
282
+ e.stopPropagation();
283
+ onCancel();
284
+ } }, children: [_jsx("input", { autoFocus: true, "aria-label": `搜尋${field.label}`, placeholder: "\u641C\u5C0B", value: query, onChange: (e) => setQuery(e.target.value) }), _jsx("div", { role: "group", "aria-label": field.label, children: options.map((option) => _jsxs("button", { type: "button", "aria-pressed": draft.includes(option.value), onClick: () => { const ids = multiple ? draft.includes(option.value) ? draft.filter((id) => id !== option.value) : [...draft, option.value] : [option.value]; setDraft(ids); if (!multiple)
285
+ commit(ids); }, children: [option.label, draft.includes(option.value) ? " ✓" : ""] }, option.value)) }), _jsxs("footer", { children: [_jsx("button", { type: "button", onClick: () => commit([]), children: "\u7A7A\u767D" }), _jsx("button", { type: "button", onClick: onCancel, children: "\u53D6\u6D88" }), multiple && _jsx("button", { type: "button", onClick: () => commit(draft), children: "\u78BA\u8A8D" })] })] });
286
+ }
287
+ function AttachmentEditor({ onRequestAttachment, onCancel }) {
288
+ return _jsxs("label", { className: "hy-dv-upload", children: ["\u9078\u64C7\u9644\u4EF6", _jsx("input", { autoFocus: true, type: "file", multiple: true, onChange: (event) => {
289
+ if (event.target.files?.length)
290
+ onRequestAttachment?.([...event.target.files]);
291
+ onCancel();
292
+ } })] });
293
+ }
294
+ const textSpec = (type, label, Editor = TextEditor) => ({
295
+ type, label, editable: true, deletable: true, operators: TEXT_OPERATORS, isEmpty,
296
+ validate: (value) => value === null || value === undefined || typeof value === "string" ? null : "請輸入文字",
297
+ compare: compareText, filter: commonFilter, group,
298
+ render: (value) => isEmpty(value) ? _jsx("span", { className: "hy-dv-empty", children: "\u2014" }) : _jsx("span", { className: type === "multiLineText" ? "hy-dv-prewrap" : undefined, children: textOf(value) }),
299
+ Editor,
300
+ });
301
+ const numberSpec = (type, label, style) => ({
302
+ type, label, editable: true, deletable: true, operators: NUMBER_OPERATORS, isEmpty,
303
+ validate: (value) => isEmpty(value) || (typeof value === "number" && Number.isFinite(value)) ? null : "請輸入有效數字",
304
+ compare: compareNumber, filter: numberFilter, group,
305
+ render: (value, field) => formatNumber(value, field, style), Editor: NumberEditor,
306
+ });
307
+ const dateSpec = (type, label, editable = true) => ({
308
+ type, label, editable, deletable: editable, operators: DATE_OPERATORS, isEmpty,
309
+ validate: (value) => isEmpty(value) || validDateValue(value, type === "date") ? null : "請輸入有效日期",
310
+ compare: compareDate, filter: dateFilter, group,
311
+ render: (value) => isEmpty(value) ? _jsx("span", { className: "hy-dv-empty", children: "\u2014" }) : !validDateValue(value, type === "date") ? _jsx("span", { className: "hy-dv-no-access", children: "\u65E5\u671F\u683C\u5F0F\u932F\u8AA4" }) : new Intl.DateTimeFormat("zh-TW", type === "date" ? { year: "numeric", month: "2-digit", day: "2-digit", timeZone: "UTC" } : { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }).format(new Date(String(value))),
312
+ Editor: editable ? DateEditor : undefined,
313
+ });
314
+ export const FIELD_TYPE_REGISTRY = {
315
+ singleLineText: textSpec("singleLineText", "單行文字"),
316
+ multiLineText: textSpec("multiLineText", "多行文字"),
317
+ number: numberSpec("number", "數字"),
318
+ currency: numberSpec("currency", "金額", "currency"),
319
+ percentage: numberSpec("percentage", "百分比", "percent"),
320
+ checkbox: {
321
+ type: "checkbox", label: "打勾框", editable: true, deletable: true, operators: ["isTrue", "isFalse"], isEmpty: () => false,
322
+ validate: (value) => typeof value === "boolean" ? null : "請使用打勾或取消",
323
+ compare: (left, right) => Number(Boolean(left)) - Number(Boolean(right)),
324
+ filter: (value, rule) => rule.operator === "isTrue" ? Boolean(value) : !Boolean(value),
325
+ group: (value) => ({ key: value ? "checked" : "unchecked", label: value ? "已打勾" : "未打勾" }),
326
+ render: (value) => _jsx("span", { "aria-label": value ? "已打勾" : "未打勾", className: `hy-dv-checkbox ${value ? "is-checked" : ""}`, children: value ? "✓" : "" }),
327
+ toggleValue: (value) => !Boolean(value),
328
+ Editor: CheckboxEditor,
329
+ },
330
+ date: dateSpec("date", "日期"),
331
+ dateTime: dateSpec("dateTime", "日期+時間"),
332
+ singleSelect: {
333
+ type: "singleSelect", label: "單選項", editable: true, deletable: true, operators: OPTION_OPERATORS, isEmpty,
334
+ validate: (value, field) => isEmpty(value) || field.options?.some((option) => option.value === String(value)) ? null : "選項不存在",
335
+ compare: (left, right, field) => {
336
+ const order = field.options?.map((option) => option.value) ?? [];
337
+ const a = order.indexOf(String(left));
338
+ const b = order.indexOf(String(right));
339
+ return a >= 0 && b >= 0 ? a - b : compareText(left, right);
340
+ },
341
+ filter: commonFilter, group, render: renderOption, Editor: SelectEditor,
342
+ },
343
+ multiSelect: {
344
+ type: "multiSelect", label: "多選項", editable: true, deletable: true, operators: OPTION_OPERATORS, isEmpty,
345
+ validate: (value, field) => isEmpty(value) || (Array.isArray(value) && value.every((v) => typeof v === "string" && field.options?.some((o) => o.value === v))) ? null : "多選值包含不存在的選項",
346
+ compare: compareText, filter: commonFilter, group, render: renderMultiOptions, Editor: MultiSelectEditor,
347
+ },
348
+ person: {
349
+ type: "person", label: "人員", editable: true, deletable: true, operators: OPTION_OPERATORS, isEmpty,
350
+ validate: (value, field) => isEmpty(value) || (Array.isArray(value) ? value : [value]).every((v) => validReference(v, field)) ? null : "人員格式或 ID 不正確",
351
+ compare: compareText, filter: referenceFilter, group, render: renderPeople, Editor: ReferenceEditor,
352
+ },
353
+ relation: {
354
+ type: "relation", label: "關聯資料", editable: true, deletable: true, operators: OPTION_OPERATORS, isEmpty,
355
+ validate: (value, field) => isEmpty(value) || validReference(value, field) ? null : "關聯資料格式或 ID 不正確",
356
+ compare: compareText, filter: referenceFilter, group, render: renderRelations, Editor: ReferenceEditor,
357
+ },
358
+ attachment: {
359
+ type: "attachment", label: "附件", editable: true, deletable: true, operators: ["isEmpty", "isNotEmpty"], isEmpty,
360
+ validate: (value) => isEmpty(value) || Array.isArray(value) ? null : "附件格式不正確",
361
+ compare: compareText, filter: commonFilter, group, render: renderAttachments, Editor: AttachmentEditor,
362
+ },
363
+ createdAt: dateSpec("createdAt", "建立時間", false),
364
+ updatedAt: dateSpec("updatedAt", "最後更新時間", false),
365
+ createdBy: { ...textSpec("createdBy", "建立者"), editable: false, deletable: false, Editor: undefined, filter: referenceFilter, render: renderPeople },
366
+ updatedBy: { ...textSpec("updatedBy", "最後修改者"), editable: false, deletable: false, Editor: undefined, filter: referenceFilter, render: renderPeople },
367
+ autoNumber: { ...numberSpec("autoNumber", "自動編號"), editable: false, deletable: false, Editor: undefined },
368
+ systemReadOnly: { ...textSpec("systemReadOnly", "唯讀系統欄位"), editable: false, deletable: false, Editor: undefined },
369
+ };
370
+ function validReference(value, field) {
371
+ if (!value || typeof value !== "object" || Array.isArray(value))
372
+ return false;
373
+ const record = value;
374
+ return typeof record.id === "string" && record.id.length > 0 && typeof record.label === "string" &&
375
+ (!field.options || field.options.some((o) => o.value === record.id));
376
+ }
377
+ function validDateValue(value, dateOnly) {
378
+ if (typeof value !== "string" || !(dateOnly ? /^\d{4}-\d{2}-\d{2}$/ : /^\d{4}-\d{2}-\d{2}T([01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d{1,3})?)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)?$/).test(value))
379
+ return false;
380
+ const day = value.slice(0, 10);
381
+ const date = Date.parse(`${day}T00:00:00Z`);
382
+ return Number.isFinite(date) && new Date(date).toISOString().slice(0, 10) === day && Number.isFinite(Date.parse(value));
383
+ }
384
+ export function getFieldTypeDefinition(type) {
385
+ return FIELD_TYPE_REGISTRY[type];
386
+ }
387
+ export function renderFieldValue(value, field, row) {
388
+ if (field.internal || field.canRead?.({ row, field }) === false)
389
+ return null;
390
+ if (field.render)
391
+ return field.render(value, row);
392
+ if (isEmpty(value) && field.type !== "checkbox" && field.appearance?.empty !== "dash")
393
+ return null;
394
+ if (field.appearance?.systemValue || ["createdBy", "updatedBy", "systemReadOnly"].includes(field.type))
395
+ return _jsx("span", { className: "hy-dv-system-value", title: textOf(value), children: textOf(value) });
396
+ return getFieldTypeDefinition(field.type).render(value, field);
397
+ }
398
+ /** The registry owns clipboard conversion too, so every view uses the same types. */
399
+ export function formatClipboardValue(value, field) {
400
+ if (isEmpty(value))
401
+ return "";
402
+ if (["multiSelect", "person", "relation", "attachment"].includes(field.type))
403
+ return JSON.stringify(value);
404
+ return String(value);
405
+ }
406
+ export function parseClipboardValue(text, field) {
407
+ const value = text.trim();
408
+ if (field.type === "attachment")
409
+ throw new Error("附件請使用上傳介面,不能透過貼上修改");
410
+ if (["number", "currency", "percentage"].includes(field.type)) {
411
+ if (!value)
412
+ return null;
413
+ const percent = field.type === "percentage" && value.endsWith("%");
414
+ const number = Number(percent ? value.slice(0, -1) : value);
415
+ if (!Number.isFinite(number))
416
+ throw new Error(`${field.label}需要有效數字`);
417
+ return percent ? number / 100 : number;
418
+ }
419
+ if (field.type === "checkbox") {
420
+ if (["true", "1", "是", "已打勾"].includes(value.toLowerCase()))
421
+ return true;
422
+ if (["", "false", "0", "否", "未打勾"].includes(value.toLowerCase()))
423
+ return false;
424
+ throw new Error(`${field.label}請填 true 或 false`);
425
+ }
426
+ if (["person", "relation", "multiSelect"].includes(field.type)) {
427
+ if (!value)
428
+ return field.type === "relation" ? null : [];
429
+ if (value.startsWith("[") || value.startsWith("{"))
430
+ return JSON.parse(value);
431
+ const options = value.split(/[、,]/).map((label) => {
432
+ const option = field.options?.find((o) => o.value === label.trim() || o.label === label.trim());
433
+ if (!option)
434
+ throw new Error(`${field.label}的選項不存在:${label}`);
435
+ return option;
436
+ });
437
+ if (field.type === "multiSelect")
438
+ return options.map((o) => o.value);
439
+ if (field.type === "relation") {
440
+ if (options.length !== 1)
441
+ throw new Error("關聯資料請使用單一值");
442
+ return { id: options[0].value, label: options[0].label };
443
+ }
444
+ return options.map((o) => ({ id: o.value, label: o.label }));
445
+ }
446
+ if (field.type === "singleSelect")
447
+ return value ? field.options?.find((o) => o.value === value || o.label === value)?.value ?? value : null;
448
+ if (field.type === "date" || field.type === "dateTime")
449
+ return value || null;
450
+ return text;
451
+ }
452
+ export function formatReadableValue(value, field, row) {
453
+ if (field.internal || field.renderAction || field.canRead?.({ row, field }) === false)
454
+ return "";
455
+ if (field.formatText)
456
+ return field.formatText(value, row);
457
+ if (field.type === "checkbox")
458
+ return value ? "已打勾" : "未打勾";
459
+ const items = Array.isArray(value) ? value : [value];
460
+ return items.map((v) => field.options?.find((o) => o.value === String(typeof v === "object" && v ? v.id : v))?.label ?? textOf(v)).join("、");
461
+ }
462
+ export function formatReadableRow(row, fields) {
463
+ return fields.filter((f) => !f.internal && !f.renderAction && f.canRead?.({ row, field: f }) !== false).map((f) => `${f.label}:${formatReadableValue(f.getValue ? f.getValue(row) : row[f.id], f, row)}`).join("\n");
464
+ }
465
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { DataSource, DataViewQuery } from "./types.js";
2
+ export type RemoteSnapshot<Row> = {
3
+ queryKey: string;
4
+ rows: Row[];
5
+ total?: number;
6
+ complete: boolean;
7
+ loading: boolean;
8
+ error: string | null;
9
+ groupCounts?: Record<string, number>;
10
+ };
11
+ /** Only the host's data source talks to its backend. No database or transport dependency. */
12
+ export declare function createRemoteController<Row>(source: DataSource<Row>, getRowId: (row: Row) => string, onChange: (state: RemoteSnapshot<Row>) => void): {
13
+ setQuery(next: DataViewQuery): void;
14
+ loadMore: () => Promise<void>;
15
+ retry(): void;
16
+ dispose(): void;
17
+ readonly state: RemoteSnapshot<Row>;
18
+ };
19
+ //# sourceMappingURL=remote-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-data.d.ts","sourceRoot":"","sources":["../src/remote-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAoB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,MAAM,cAAc,CAAC,GAAG,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AACrL,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI;mBA2BhI,aAAa;;;;;EAW/B"}
@@ -0,0 +1,67 @@
1
+ import { dataViewQueryKey } from "./contracts.js";
2
+ /** Only the host's data source talks to its backend. No database or transport dependency. */
3
+ export function createRemoteController(source, getRowId, onChange) {
4
+ let generation = 0, abort = null;
5
+ let query = null, cursor, snapshot;
6
+ let state = { queryKey: "", rows: [], complete: false, loading: false, error: null };
7
+ let cursors = new Set();
8
+ const publish = (patch) => { state = { ...state, ...patch }; onChange(state); };
9
+ async function load() {
10
+ if (!query || state.loading || state.complete)
11
+ return;
12
+ const n = generation;
13
+ abort = new AbortController();
14
+ publish({ loading: true, error: null });
15
+ try {
16
+ const result = await source.query({ query, cursor, snapshot, signal: abort.signal });
17
+ if (n !== generation)
18
+ return;
19
+ if (!Number.isSafeInteger(result.total) || result.total < 0 || !result.snapshot || (snapshot && snapshot !== result.snapshot))
20
+ throw new Error("查詢結果版本或總數無效,請重新查詢");
21
+ if (state.total !== undefined && result.total !== state.total)
22
+ throw new Error("載入期間資料總數改變,請重新查詢");
23
+ if (result.nextCursor && (cursors.has(result.nextCursor) || !result.rows.length))
24
+ throw new Error("資料來源未提供下一段有效結果");
25
+ const ids = new Set(state.rows.map(getRowId));
26
+ for (const row of result.rows) {
27
+ const id = getRowId(row);
28
+ if (!id || ids.has(id))
29
+ throw new Error("分批結果含重複或無效資料 ID,請重新查詢");
30
+ ids.add(id);
31
+ }
32
+ const rows = [...state.rows, ...result.rows];
33
+ if (rows.length > result.total || (!result.nextCursor && rows.length !== result.total))
34
+ throw new Error("資料尚未完整,請重新查詢");
35
+ cursor = result.nextCursor ?? undefined;
36
+ snapshot = result.snapshot;
37
+ if (cursor)
38
+ cursors.add(cursor);
39
+ publish({ rows, total: result.total, complete: !cursor, loading: false, groupCounts: result.groupCounts ?? state.groupCounts });
40
+ }
41
+ catch (error) {
42
+ if (n === generation)
43
+ publish({ loading: false, error: error instanceof Error ? error.message : "查詢失敗", complete: false });
44
+ }
45
+ }
46
+ return {
47
+ setQuery(next) {
48
+ const key = dataViewQueryKey(next);
49
+ if (query && key === state.queryKey)
50
+ return;
51
+ generation++;
52
+ abort?.abort();
53
+ query = next;
54
+ cursor = undefined;
55
+ snapshot = undefined;
56
+ cursors = new Set();
57
+ publish({ queryKey: key, rows: [], total: undefined, groupCounts: undefined, complete: false, loading: false, error: null });
58
+ void load();
59
+ },
60
+ loadMore: load,
61
+ retry() { const current = query; query = null; if (current)
62
+ this.setQuery(current); },
63
+ dispose() { generation++; abort?.abort(); },
64
+ get state() { return state; },
65
+ };
66
+ }
67
+ //# sourceMappingURL=remote-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-data.js","sourceRoot":"","sources":["../src/remote-data.ts"],"names":[],"mappings":"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"}