@xcelsior/ui-spreadsheets 1.3.0 → 1.3.2
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/.omc/state/agent-replay-0cead415-b3bd-40fd-b199-47371946c4db.jsonl +2 -0
- package/.omc/state/idle-notif-cooldown.json +1 -1
- package/.omc/state/mission-state.json +31 -21
- package/.omc/state/subagent-tracking.json +12 -3
- package/dist/index.js +86 -20
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -20
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/Spreadsheet.tsx +68 -16
- package/src/components/SpreadsheetCell.tsx +9 -4
- package/src/hooks/useSpreadsheetFiltering.ts +6 -1
- package/src/hooks/useSpreadsheetKeyboardShortcuts.ts +9 -0
- package/src/hooks/useSpreadsheetSummary.ts +2 -2
|
@@ -23,3 +23,5 @@
|
|
|
23
23
|
{"t":0,"agent":"aa330fa","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":247728}
|
|
24
24
|
{"t":0,"agent":"ae7807c","agent_type":"git-manager","event":"agent_start","parent_mode":"none"}
|
|
25
25
|
{"t":0,"agent":"ae7807c","agent_type":"git-manager","event":"agent_stop","success":true,"duration_ms":20621}
|
|
26
|
+
{"t":0,"agent":"abfb64e","agent_type":"git-manager","event":"agent_start","parent_mode":"none"}
|
|
27
|
+
{"t":0,"agent":"abfb64e","agent_type":"git-manager","event":"agent_stop","success":true,"duration_ms":26949}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"updatedAt": "2026-03-
|
|
2
|
+
"updatedAt": "2026-03-30T08:45:55.715Z",
|
|
3
3
|
"missions": [
|
|
4
4
|
{
|
|
5
5
|
"id": "session:0cead415-b3bd-40fd-b199-47371946c4db:none",
|
|
@@ -7,15 +7,15 @@
|
|
|
7
7
|
"name": "none",
|
|
8
8
|
"objective": "Session mission",
|
|
9
9
|
"createdAt": "2026-03-30T03:04:00.047Z",
|
|
10
|
-
"updatedAt": "2026-03-
|
|
10
|
+
"updatedAt": "2026-03-30T08:45:55.715Z",
|
|
11
11
|
"status": "done",
|
|
12
|
-
"workerCount":
|
|
12
|
+
"workerCount": 13,
|
|
13
13
|
"taskCounts": {
|
|
14
|
-
"total":
|
|
14
|
+
"total": 13,
|
|
15
15
|
"pending": 0,
|
|
16
16
|
"blocked": 0,
|
|
17
17
|
"inProgress": 0,
|
|
18
|
-
"completed":
|
|
18
|
+
"completed": 13,
|
|
19
19
|
"failed": 0
|
|
20
20
|
},
|
|
21
21
|
"agents": [
|
|
@@ -138,25 +138,19 @@
|
|
|
138
138
|
"latestUpdate": "completed",
|
|
139
139
|
"completedSummary": null,
|
|
140
140
|
"updatedAt": "2026-03-30T05:02:01.720Z"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "git-manager:abfb64e",
|
|
144
|
+
"role": "git-manager",
|
|
145
|
+
"ownership": "abfb64eb8d129e6f9",
|
|
146
|
+
"status": "done",
|
|
147
|
+
"currentStep": null,
|
|
148
|
+
"latestUpdate": "completed",
|
|
149
|
+
"completedSummary": null,
|
|
150
|
+
"updatedAt": "2026-03-30T08:45:55.715Z"
|
|
141
151
|
}
|
|
142
152
|
],
|
|
143
153
|
"timeline": [
|
|
144
|
-
{
|
|
145
|
-
"id": "session-start:aa330fa6ae424cc92:2026-03-30T04:50:28.303Z",
|
|
146
|
-
"at": "2026-03-30T04:50:28.303Z",
|
|
147
|
-
"kind": "update",
|
|
148
|
-
"agent": "executor:aa330fa",
|
|
149
|
-
"detail": "started executor:aa330fa",
|
|
150
|
-
"sourceKey": "session-start:aa330fa6ae424cc92"
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
"id": "session-stop:aa330fa6ae424cc92:2026-03-30T04:54:36.031Z",
|
|
154
|
-
"at": "2026-03-30T04:54:36.031Z",
|
|
155
|
-
"kind": "completion",
|
|
156
|
-
"agent": "executor:aa330fa",
|
|
157
|
-
"detail": "completed",
|
|
158
|
-
"sourceKey": "session-stop:aa330fa6ae424cc92"
|
|
159
|
-
},
|
|
160
154
|
{
|
|
161
155
|
"id": "session-start:ae7807ca7e84fc31c:2026-03-30T05:01:41.099Z",
|
|
162
156
|
"at": "2026-03-30T05:01:41.099Z",
|
|
@@ -172,6 +166,22 @@
|
|
|
172
166
|
"agent": "git-manager:ae7807c",
|
|
173
167
|
"detail": "completed",
|
|
174
168
|
"sourceKey": "session-stop:ae7807ca7e84fc31c"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "session-start:abfb64eb8d129e6f9:2026-03-30T08:45:28.766Z",
|
|
172
|
+
"at": "2026-03-30T08:45:28.766Z",
|
|
173
|
+
"kind": "update",
|
|
174
|
+
"agent": "git-manager:abfb64e",
|
|
175
|
+
"detail": "started git-manager:abfb64e",
|
|
176
|
+
"sourceKey": "session-start:abfb64eb8d129e6f9"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"id": "session-stop:abfb64eb8d129e6f9:2026-03-30T08:45:55.715Z",
|
|
180
|
+
"at": "2026-03-30T08:45:55.715Z",
|
|
181
|
+
"kind": "completion",
|
|
182
|
+
"agent": "git-manager:abfb64e",
|
|
183
|
+
"detail": "completed",
|
|
184
|
+
"sourceKey": "session-stop:abfb64eb8d129e6f9"
|
|
175
185
|
}
|
|
176
186
|
]
|
|
177
187
|
}
|
|
@@ -107,10 +107,19 @@
|
|
|
107
107
|
"status": "completed",
|
|
108
108
|
"completed_at": "2026-03-30T05:02:01.720Z",
|
|
109
109
|
"duration_ms": 20621
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"agent_id": "abfb64eb8d129e6f9",
|
|
113
|
+
"agent_type": "git-manager",
|
|
114
|
+
"started_at": "2026-03-30T08:45:28.766Z",
|
|
115
|
+
"parent_mode": "none",
|
|
116
|
+
"status": "completed",
|
|
117
|
+
"completed_at": "2026-03-30T08:45:55.715Z",
|
|
118
|
+
"duration_ms": 26949
|
|
110
119
|
}
|
|
111
120
|
],
|
|
112
|
-
"total_spawned":
|
|
113
|
-
"total_completed":
|
|
121
|
+
"total_spawned": 13,
|
|
122
|
+
"total_completed": 13,
|
|
114
123
|
"total_failed": 0,
|
|
115
|
-
"last_updated": "2026-03-
|
|
124
|
+
"last_updated": "2026-03-30T08:45:55.818Z"
|
|
116
125
|
}
|
package/dist/index.js
CHANGED
|
@@ -484,9 +484,10 @@ var SpreadsheetCell = ({
|
|
|
484
484
|
return typeof value === "number" ? value.toLocaleString() : value;
|
|
485
485
|
}
|
|
486
486
|
if (column.type === "autocomplete") {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
487
|
+
const displayVal = localValue ?? value;
|
|
488
|
+
if (column.getOptionLabel) return column.getOptionLabel(displayVal, row);
|
|
489
|
+
const match = column.autocompleteOptions?.find((o) => o.value === displayVal);
|
|
490
|
+
return match ? match.label : displayVal != null && displayVal !== "" ? String(displayVal) : null;
|
|
490
491
|
}
|
|
491
492
|
return String(value);
|
|
492
493
|
};
|
|
@@ -501,7 +502,10 @@ var SpreadsheetCell = ({
|
|
|
501
502
|
value: localValue,
|
|
502
503
|
column,
|
|
503
504
|
compactMode,
|
|
504
|
-
onConfirm
|
|
505
|
+
onConfirm: (newVal) => {
|
|
506
|
+
setLocalValue(newVal);
|
|
507
|
+
onConfirm?.(newVal);
|
|
508
|
+
},
|
|
505
509
|
onCancel
|
|
506
510
|
}
|
|
507
511
|
);
|
|
@@ -3241,7 +3245,8 @@ function useSpreadsheetFiltering({
|
|
|
3241
3245
|
return false;
|
|
3242
3246
|
}
|
|
3243
3247
|
if (filter.textCondition) {
|
|
3244
|
-
|
|
3248
|
+
const filterableValue = column.type === "autocomplete" && column.getOptionLabel ? column.getOptionLabel(value, row) : value;
|
|
3249
|
+
return applyTextCondition(filterableValue, filter.textCondition);
|
|
3245
3250
|
}
|
|
3246
3251
|
if (filter.numberCondition) {
|
|
3247
3252
|
return applyNumberCondition(value, filter.numberCondition);
|
|
@@ -3855,6 +3860,11 @@ function useSpreadsheetKeyboardShortcuts({
|
|
|
3855
3860
|
(0, import_react19.useEffect)(() => {
|
|
3856
3861
|
if (!enabled) return;
|
|
3857
3862
|
const handleKeyDown = (event) => {
|
|
3863
|
+
const activeEl = document.activeElement;
|
|
3864
|
+
const isInFormElement = activeEl instanceof HTMLInputElement || activeEl instanceof HTMLTextAreaElement || activeEl instanceof HTMLSelectElement;
|
|
3865
|
+
if (isInFormElement && event.key !== "Escape") {
|
|
3866
|
+
return;
|
|
3867
|
+
}
|
|
3858
3868
|
if (event.key === "Escape") {
|
|
3859
3869
|
if (showKeyboardShortcuts) {
|
|
3860
3870
|
setShowKeyboardShortcuts(false);
|
|
@@ -4430,7 +4440,7 @@ function useSpreadsheetSummary({
|
|
|
4430
4440
|
const numericValues = [];
|
|
4431
4441
|
for (const { position, value } of selectedCellValues) {
|
|
4432
4442
|
const column = columns.find((c) => c.id === position.columnId);
|
|
4433
|
-
if (column?.type === "number"
|
|
4443
|
+
if (column?.type === "number") {
|
|
4434
4444
|
const num = typeof value === "number" ? value : parseFloat(value);
|
|
4435
4445
|
if (!isNaN(num)) {
|
|
4436
4446
|
numericValues.push(num);
|
|
@@ -4780,7 +4790,7 @@ function Spreadsheet({
|
|
|
4780
4790
|
onToggleCommentResolved
|
|
4781
4791
|
});
|
|
4782
4792
|
const [showSettingsModal, setShowSettingsModal] = (0, import_react23.useState)(false);
|
|
4783
|
-
const [showFiltersPanel, setShowFiltersPanel] = (0, import_react23.useState)(
|
|
4793
|
+
const [showFiltersPanel, setShowFiltersPanel] = (0, import_react23.useState)(true);
|
|
4784
4794
|
const {
|
|
4785
4795
|
canUndo,
|
|
4786
4796
|
canRedo,
|
|
@@ -4920,7 +4930,7 @@ function Spreadsheet({
|
|
|
4920
4930
|
}, [popRedoEntry, onCellsEdit, markAsChanged]);
|
|
4921
4931
|
const paginatedData = (0, import_react23.useMemo)(() => {
|
|
4922
4932
|
if (serverSide) {
|
|
4923
|
-
return filteredData;
|
|
4933
|
+
return filteredData.toArray();
|
|
4924
4934
|
}
|
|
4925
4935
|
const startIndex = (currentPage - 1) * pageSize;
|
|
4926
4936
|
return filteredData.slice(startIndex, startIndex + pageSize);
|
|
@@ -5133,8 +5143,14 @@ function Spreadsheet({
|
|
|
5133
5143
|
(rowId, columnId, event) => {
|
|
5134
5144
|
event.stopPropagation();
|
|
5135
5145
|
handleCellMouseDown(rowId, columnId, event);
|
|
5146
|
+
if (!event.shiftKey && !event.metaKey && !event.ctrlKey) {
|
|
5147
|
+
const column = columns.find((c) => c.id === columnId);
|
|
5148
|
+
if (column?.editable && enableCellEditing) {
|
|
5149
|
+
setEditingCell({ rowId, columnId });
|
|
5150
|
+
}
|
|
5151
|
+
}
|
|
5136
5152
|
},
|
|
5137
|
-
[handleCellMouseDown]
|
|
5153
|
+
[handleCellMouseDown, columns, enableCellEditing, setEditingCell]
|
|
5138
5154
|
);
|
|
5139
5155
|
const handleCellDoubleClick = (0, import_react23.useCallback)(
|
|
5140
5156
|
(rowId, columnId) => {
|
|
@@ -5400,17 +5416,67 @@ function Spreadsheet({
|
|
|
5400
5416
|
})
|
|
5401
5417
|
] })
|
|
5402
5418
|
] }),
|
|
5403
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tbody", { children: isLoading ?
|
|
5404
|
-
|
|
5405
|
-
|
|
5406
|
-
|
|
5407
|
-
|
|
5408
|
-
|
|
5409
|
-
|
|
5410
|
-
|
|
5411
|
-
|
|
5412
|
-
|
|
5413
|
-
|
|
5419
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tbody", { children: isLoading ? Array.from({ length: Math.min(pageSize, 10) }).map((_, rowIdx) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("tr", { children: [
|
|
5420
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
5421
|
+
"td",
|
|
5422
|
+
{
|
|
5423
|
+
className: cn(
|
|
5424
|
+
"border border-gray-200 sticky",
|
|
5425
|
+
effectiveCompactMode ? "px-1.5 py-0.5" : "px-2.5 py-1.5"
|
|
5426
|
+
),
|
|
5427
|
+
style: {
|
|
5428
|
+
minWidth: `${ROW_INDEX_COLUMN_WIDTH}px`,
|
|
5429
|
+
width: `${ROW_INDEX_COLUMN_WIDTH}px`,
|
|
5430
|
+
left: 0,
|
|
5431
|
+
zIndex: 40,
|
|
5432
|
+
backgroundColor: rowIdx % 2 !== 0 ? "#f9fafb" : "white"
|
|
5433
|
+
},
|
|
5434
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
5435
|
+
"div",
|
|
5436
|
+
{
|
|
5437
|
+
className: "h-4 bg-gray-200 rounded animate-pulse",
|
|
5438
|
+
style: { width: "60%", animationDelay: `${rowIdx * 50}ms` }
|
|
5439
|
+
}
|
|
5440
|
+
)
|
|
5441
|
+
}
|
|
5442
|
+
),
|
|
5443
|
+
columnRenderItems.map((item, colIdx) => {
|
|
5444
|
+
if (item.type === "collapsed-placeholder") {
|
|
5445
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
5446
|
+
"td",
|
|
5447
|
+
{
|
|
5448
|
+
className: "border border-gray-200",
|
|
5449
|
+
style: { backgroundColor: rowIdx % 2 !== 0 ? "#f9fafb" : "white" }
|
|
5450
|
+
},
|
|
5451
|
+
`skeleton-${rowIdx}-placeholder-${item.groupId}`
|
|
5452
|
+
);
|
|
5453
|
+
}
|
|
5454
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
5455
|
+
"td",
|
|
5456
|
+
{
|
|
5457
|
+
className: cn(
|
|
5458
|
+
"border border-gray-200",
|
|
5459
|
+
effectiveCompactMode ? "px-1.5 py-0.5" : "px-2.5 py-1.5"
|
|
5460
|
+
),
|
|
5461
|
+
style: {
|
|
5462
|
+
minWidth: item.column.width ?? 120,
|
|
5463
|
+
backgroundColor: rowIdx % 2 !== 0 ? "#f9fafb" : "white"
|
|
5464
|
+
},
|
|
5465
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
5466
|
+
"div",
|
|
5467
|
+
{
|
|
5468
|
+
className: "h-4 bg-gray-200 rounded animate-pulse",
|
|
5469
|
+
style: {
|
|
5470
|
+
width: `${55 + (rowIdx * 7 + colIdx * 13) % 35}%`,
|
|
5471
|
+
animationDelay: `${(rowIdx * columnRenderItems.length + colIdx) * 30}ms`
|
|
5472
|
+
}
|
|
5473
|
+
}
|
|
5474
|
+
)
|
|
5475
|
+
},
|
|
5476
|
+
`skeleton-${rowIdx}-${item.column.id}`
|
|
5477
|
+
);
|
|
5478
|
+
})
|
|
5479
|
+
] }, `skeleton-${rowIdx}`)) : paginatedData.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
5414
5480
|
"td",
|
|
5415
5481
|
{
|
|
5416
5482
|
colSpan: columnRenderItems.length + 1,
|