@expcat/tigercat-core 0.3.70 → 0.4.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/dist/index.cjs +235 -1
- package/dist/index.d.cts +270 -5
- package/dist/index.d.ts +270 -5
- package/dist/index.js +209 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -673,7 +673,8 @@ function mergeTigerLocale(base, override) {
|
|
|
673
673
|
drawer: { ...base?.drawer, ...override?.drawer },
|
|
674
674
|
upload: { ...base?.upload, ...override?.upload },
|
|
675
675
|
pagination: { ...base?.pagination, ...override?.pagination },
|
|
676
|
-
formWizard: { ...base?.formWizard, ...override?.formWizard }
|
|
676
|
+
formWizard: { ...base?.formWizard, ...override?.formWizard },
|
|
677
|
+
taskBoard: { ...base?.taskBoard, ...override?.taskBoard }
|
|
677
678
|
};
|
|
678
679
|
}
|
|
679
680
|
var DEFAULT_PAGINATION_LABELS = {
|
|
@@ -728,6 +729,29 @@ function formatPaginationTotal(template, total, range) {
|
|
|
728
729
|
function formatPageAriaLabel(template, page) {
|
|
729
730
|
return template.replace("{page}", String(page));
|
|
730
731
|
}
|
|
732
|
+
var DEFAULT_TASK_BOARD_LABELS = {
|
|
733
|
+
emptyColumnText: "No tasks",
|
|
734
|
+
addCardText: "Add task",
|
|
735
|
+
wipLimitText: "WIP limit: {limit}",
|
|
736
|
+
dragHintText: "Drag to move",
|
|
737
|
+
boardAriaLabel: "Task Board"
|
|
738
|
+
};
|
|
739
|
+
var ZH_CN_TASK_BOARD_LABELS = {
|
|
740
|
+
emptyColumnText: "\u6682\u65E0\u4EFB\u52A1",
|
|
741
|
+
addCardText: "\u6DFB\u52A0\u4EFB\u52A1",
|
|
742
|
+
wipLimitText: "WIP \u9650\u5236: {limit}",
|
|
743
|
+
dragHintText: "\u62D6\u62FD\u4EE5\u79FB\u52A8",
|
|
744
|
+
boardAriaLabel: "\u4EFB\u52A1\u770B\u677F"
|
|
745
|
+
};
|
|
746
|
+
function getTaskBoardLabels(locale) {
|
|
747
|
+
return {
|
|
748
|
+
emptyColumnText: locale?.taskBoard?.emptyColumnText ?? DEFAULT_TASK_BOARD_LABELS.emptyColumnText,
|
|
749
|
+
addCardText: locale?.taskBoard?.addCardText ?? DEFAULT_TASK_BOARD_LABELS.addCardText,
|
|
750
|
+
wipLimitText: locale?.taskBoard?.wipLimitText ?? DEFAULT_TASK_BOARD_LABELS.wipLimitText,
|
|
751
|
+
dragHintText: locale?.taskBoard?.dragHintText ?? DEFAULT_TASK_BOARD_LABELS.dragHintText,
|
|
752
|
+
boardAriaLabel: locale?.taskBoard?.boardAriaLabel ?? DEFAULT_TASK_BOARD_LABELS.boardAriaLabel
|
|
753
|
+
};
|
|
754
|
+
}
|
|
731
755
|
|
|
732
756
|
// src/utils/datepicker-i18n.ts
|
|
733
757
|
function getDatePickerLabels(locale, overrides) {
|
|
@@ -6466,6 +6490,164 @@ var formatCommentTime = (value) => {
|
|
|
6466
6490
|
return value;
|
|
6467
6491
|
};
|
|
6468
6492
|
|
|
6493
|
+
// src/utils/task-board-utils.ts
|
|
6494
|
+
var taskBoardBaseClasses = "tiger-task-board flex gap-4 overflow-x-auto p-4 min-h-[400px]";
|
|
6495
|
+
var taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-72 rounded-lg border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] shadow-sm transition-shadow";
|
|
6496
|
+
var taskBoardColumnHeaderClasses = "flex items-center justify-between px-3 py-2 border-b border-[var(--tiger-border,#e5e7eb)] text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none";
|
|
6497
|
+
var taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-2 space-y-2 min-h-[80px]";
|
|
6498
|
+
var taskBoardCardClasses = "tiger-task-board-card rounded-md border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] p-3 shadow-sm cursor-grab select-none transition-opacity";
|
|
6499
|
+
var taskBoardCardDraggingClasses = "opacity-50 shadow-lg";
|
|
6500
|
+
var taskBoardDropIndicatorClasses = "h-1 rounded-full bg-[var(--tiger-primary,#2563eb)] my-1 transition-all";
|
|
6501
|
+
var taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)] ring-opacity-50";
|
|
6502
|
+
var taskBoardColumnDraggingClasses = "opacity-50";
|
|
6503
|
+
var taskBoardEmptyClasses = "flex items-center justify-center text-[var(--tiger-text-muted,#6b7280)] text-sm py-8";
|
|
6504
|
+
var taskBoardWipExceededClasses = "text-[var(--tiger-error,#ef4444)]";
|
|
6505
|
+
var taskBoardAddCardClasses = "flex items-center justify-center gap-1 w-full py-1.5 text-sm text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface-muted,#f9fafb)] rounded transition-colors cursor-pointer";
|
|
6506
|
+
var MIME = "text/plain";
|
|
6507
|
+
function createCardDragData(cardId, columnId, index) {
|
|
6508
|
+
const data = { type: "card", cardId, columnId, index };
|
|
6509
|
+
return JSON.stringify(data);
|
|
6510
|
+
}
|
|
6511
|
+
function createColumnDragData(columnId, index) {
|
|
6512
|
+
const data = { type: "column", columnId, index };
|
|
6513
|
+
return JSON.stringify(data);
|
|
6514
|
+
}
|
|
6515
|
+
function parseDragData(dataTransfer) {
|
|
6516
|
+
try {
|
|
6517
|
+
const raw = dataTransfer.getData(MIME);
|
|
6518
|
+
if (!raw) return null;
|
|
6519
|
+
const data = JSON.parse(raw);
|
|
6520
|
+
if (data.type === "card" || data.type === "column") return data;
|
|
6521
|
+
return null;
|
|
6522
|
+
} catch {
|
|
6523
|
+
return null;
|
|
6524
|
+
}
|
|
6525
|
+
}
|
|
6526
|
+
function setDragData(dataTransfer, json) {
|
|
6527
|
+
dataTransfer.setData(MIME, json);
|
|
6528
|
+
dataTransfer.effectAllowed = "move";
|
|
6529
|
+
}
|
|
6530
|
+
function moveCard(columns, cardId, fromColumnId, toColumnId, toIndex, options) {
|
|
6531
|
+
const srcColIdx = columns.findIndex((c) => c.id === fromColumnId);
|
|
6532
|
+
const dstColIdx = columns.findIndex((c) => c.id === toColumnId);
|
|
6533
|
+
if (srcColIdx === -1 || dstColIdx === -1) return null;
|
|
6534
|
+
const srcCol = columns[srcColIdx];
|
|
6535
|
+
const cardIdx = srcCol.cards.findIndex((c) => c.id === cardId);
|
|
6536
|
+
if (cardIdx === -1) return null;
|
|
6537
|
+
const card = srcCol.cards[cardIdx];
|
|
6538
|
+
const clampedTo = Math.max(
|
|
6539
|
+
0,
|
|
6540
|
+
Math.min(
|
|
6541
|
+
toIndex,
|
|
6542
|
+
srcColIdx === dstColIdx ? srcCol.cards.length - 1 : columns[dstColIdx].cards.length
|
|
6543
|
+
)
|
|
6544
|
+
);
|
|
6545
|
+
if (srcColIdx === dstColIdx) {
|
|
6546
|
+
if (cardIdx === clampedTo) return null;
|
|
6547
|
+
const newCards = [...srcCol.cards];
|
|
6548
|
+
newCards.splice(cardIdx, 1);
|
|
6549
|
+
newCards.splice(clampedTo, 0, card);
|
|
6550
|
+
const newCols2 = columns.map((c, i) => i === srcColIdx ? { ...c, cards: newCards } : c);
|
|
6551
|
+
return {
|
|
6552
|
+
columns: newCols2,
|
|
6553
|
+
event: { cardId, fromColumnId, toColumnId, fromIndex: cardIdx, toIndex: clampedTo }
|
|
6554
|
+
};
|
|
6555
|
+
}
|
|
6556
|
+
const dstCol = columns[dstColIdx];
|
|
6557
|
+
if (options?.enforceWipLimit && dstCol.wipLimit != null && dstCol.wipLimit > 0 && dstCol.cards.length >= dstCol.wipLimit) {
|
|
6558
|
+
return null;
|
|
6559
|
+
}
|
|
6560
|
+
const newSrcCards = srcCol.cards.filter((c) => c.id !== cardId);
|
|
6561
|
+
const newDstCards = [...dstCol.cards];
|
|
6562
|
+
newDstCards.splice(clampedTo, 0, card);
|
|
6563
|
+
const newCols = columns.map((c, i) => {
|
|
6564
|
+
if (i === srcColIdx) return { ...c, cards: newSrcCards };
|
|
6565
|
+
if (i === dstColIdx) return { ...c, cards: newDstCards };
|
|
6566
|
+
return c;
|
|
6567
|
+
});
|
|
6568
|
+
return {
|
|
6569
|
+
columns: newCols,
|
|
6570
|
+
event: { cardId, fromColumnId, toColumnId, fromIndex: cardIdx, toIndex: clampedTo }
|
|
6571
|
+
};
|
|
6572
|
+
}
|
|
6573
|
+
function reorderColumns(columns, fromIndex, toIndex) {
|
|
6574
|
+
if (fromIndex === toIndex || fromIndex < 0 || fromIndex >= columns.length || toIndex < 0 || toIndex >= columns.length) {
|
|
6575
|
+
return null;
|
|
6576
|
+
}
|
|
6577
|
+
const col = columns[fromIndex];
|
|
6578
|
+
const next = [...columns];
|
|
6579
|
+
next.splice(fromIndex, 1);
|
|
6580
|
+
next.splice(toIndex, 0, col);
|
|
6581
|
+
return {
|
|
6582
|
+
columns: next,
|
|
6583
|
+
event: { columnId: col.id, fromIndex, toIndex }
|
|
6584
|
+
};
|
|
6585
|
+
}
|
|
6586
|
+
function isWipExceeded(column) {
|
|
6587
|
+
if (column.wipLimit == null || column.wipLimit <= 0) return false;
|
|
6588
|
+
return column.cards.length > column.wipLimit;
|
|
6589
|
+
}
|
|
6590
|
+
function getDropIndex(pointerY, cardRects) {
|
|
6591
|
+
for (let i = 0; i < cardRects.length; i++) {
|
|
6592
|
+
const mid = cardRects[i].top + cardRects[i].height / 2;
|
|
6593
|
+
if (pointerY < mid) return i;
|
|
6594
|
+
}
|
|
6595
|
+
return cardRects.length;
|
|
6596
|
+
}
|
|
6597
|
+
function getColumnDropIndex(pointerX, columnRects) {
|
|
6598
|
+
for (let i = 0; i < columnRects.length; i++) {
|
|
6599
|
+
const mid = columnRects[i].left + columnRects[i].width / 2;
|
|
6600
|
+
if (pointerX < mid) return i;
|
|
6601
|
+
}
|
|
6602
|
+
return columnRects.length;
|
|
6603
|
+
}
|
|
6604
|
+
function createTouchDragTracker() {
|
|
6605
|
+
let state = {
|
|
6606
|
+
startX: 0,
|
|
6607
|
+
startY: 0,
|
|
6608
|
+
currentX: 0,
|
|
6609
|
+
currentY: 0,
|
|
6610
|
+
active: false,
|
|
6611
|
+
sourceElement: null
|
|
6612
|
+
};
|
|
6613
|
+
return {
|
|
6614
|
+
onTouchStart(e, source) {
|
|
6615
|
+
const touch = e.touches[0];
|
|
6616
|
+
state = {
|
|
6617
|
+
startX: touch.clientX,
|
|
6618
|
+
startY: touch.clientY,
|
|
6619
|
+
currentX: touch.clientX,
|
|
6620
|
+
currentY: touch.clientY,
|
|
6621
|
+
active: true,
|
|
6622
|
+
sourceElement: source
|
|
6623
|
+
};
|
|
6624
|
+
},
|
|
6625
|
+
onTouchMove(e) {
|
|
6626
|
+
if (!state.active) return;
|
|
6627
|
+
const touch = e.touches[0];
|
|
6628
|
+
state.currentX = touch.clientX;
|
|
6629
|
+
state.currentY = touch.clientY;
|
|
6630
|
+
e.preventDefault();
|
|
6631
|
+
},
|
|
6632
|
+
onTouchEnd() {
|
|
6633
|
+
state = { ...state, active: false, sourceElement: null };
|
|
6634
|
+
return { ...state };
|
|
6635
|
+
},
|
|
6636
|
+
getState() {
|
|
6637
|
+
return state;
|
|
6638
|
+
},
|
|
6639
|
+
cancel() {
|
|
6640
|
+
state = { ...state, active: false, sourceElement: null };
|
|
6641
|
+
}
|
|
6642
|
+
};
|
|
6643
|
+
}
|
|
6644
|
+
function findColumnFromPoint(x, y, boardEl) {
|
|
6645
|
+
if (!boardEl) return null;
|
|
6646
|
+
const el = document.elementFromPoint(x, y);
|
|
6647
|
+
if (!el) return null;
|
|
6648
|
+
return el.closest("[data-tiger-taskboard-column]");
|
|
6649
|
+
}
|
|
6650
|
+
|
|
6469
6651
|
// src/theme/checkbox.ts
|
|
6470
6652
|
var checkboxSizeClasses = {
|
|
6471
6653
|
sm: "w-4 h-4",
|
|
@@ -6659,6 +6841,7 @@ export {
|
|
|
6659
6841
|
DEFAULT_CHART_COLORS,
|
|
6660
6842
|
DEFAULT_FORM_WIZARD_LABELS,
|
|
6661
6843
|
DEFAULT_PAGINATION_LABELS,
|
|
6844
|
+
DEFAULT_TASK_BOARD_LABELS,
|
|
6662
6845
|
DONUT_BASE_SHADOW,
|
|
6663
6846
|
DONUT_EMPHASIS_SHADOW,
|
|
6664
6847
|
DROPDOWN_CHEVRON_PATH,
|
|
@@ -6692,6 +6875,7 @@ export {
|
|
|
6692
6875
|
TimePickerCloseIconPath,
|
|
6693
6876
|
ZH_CN_FORM_WIZARD_LABELS,
|
|
6694
6877
|
ZH_CN_PAGINATION_LABELS,
|
|
6878
|
+
ZH_CN_TASK_BOARD_LABELS,
|
|
6695
6879
|
activeOpacityClasses,
|
|
6696
6880
|
activePressClasses,
|
|
6697
6881
|
alertBaseClasses,
|
|
@@ -6840,13 +7024,16 @@ export {
|
|
|
6840
7024
|
createAreaPath,
|
|
6841
7025
|
createAriaId,
|
|
6842
7026
|
createBandScale,
|
|
7027
|
+
createCardDragData,
|
|
6843
7028
|
createChartInteractionHandlers,
|
|
7029
|
+
createColumnDragData,
|
|
6844
7030
|
createFloatingIdFactory,
|
|
6845
7031
|
createLinePath,
|
|
6846
7032
|
createLinearScale,
|
|
6847
7033
|
createPieArcPath,
|
|
6848
7034
|
createPointScale,
|
|
6849
7035
|
createPolygonPath,
|
|
7036
|
+
createTouchDragTracker,
|
|
6850
7037
|
cropCanvas,
|
|
6851
7038
|
cropUploadTriggerClasses,
|
|
6852
7039
|
cropUploadTriggerDisabledClasses,
|
|
@@ -6903,6 +7090,7 @@ export {
|
|
|
6903
7090
|
filterOptions,
|
|
6904
7091
|
filterTreeNodes,
|
|
6905
7092
|
findActiveAnchor,
|
|
7093
|
+
findColumnFromPoint,
|
|
6906
7094
|
findNode,
|
|
6907
7095
|
flattenSelectOptions,
|
|
6908
7096
|
focusElement,
|
|
@@ -6977,6 +7165,7 @@ export {
|
|
|
6977
7165
|
getCollapseIconClasses,
|
|
6978
7166
|
getCollapsePanelClasses,
|
|
6979
7167
|
getCollapsePanelHeaderClasses,
|
|
7168
|
+
getColumnDropIndex,
|
|
6980
7169
|
getContainerClasses,
|
|
6981
7170
|
getContainerHeight,
|
|
6982
7171
|
getContainerScrollTop,
|
|
@@ -7005,6 +7194,7 @@ export {
|
|
|
7005
7194
|
getDrawerMaskClasses,
|
|
7006
7195
|
getDrawerPanelClasses,
|
|
7007
7196
|
getDrawerTitleClasses,
|
|
7197
|
+
getDropIndex,
|
|
7008
7198
|
getDropdownChevronClasses,
|
|
7009
7199
|
getDropdownContainerClasses,
|
|
7010
7200
|
getDropdownItemClasses,
|
|
@@ -7169,6 +7359,7 @@ export {
|
|
|
7169
7359
|
getTableWrapperClasses,
|
|
7170
7360
|
getTabsContainerClasses,
|
|
7171
7361
|
getTagVariantClasses,
|
|
7362
|
+
getTaskBoardLabels,
|
|
7172
7363
|
getTextClasses,
|
|
7173
7364
|
getThemeColor,
|
|
7174
7365
|
getTimePeriodLabels,
|
|
@@ -7260,6 +7451,7 @@ export {
|
|
|
7260
7451
|
isTabKey,
|
|
7261
7452
|
isTimeInRange,
|
|
7262
7453
|
isToday,
|
|
7454
|
+
isWipExceeded,
|
|
7263
7455
|
layoutContentClasses,
|
|
7264
7456
|
layoutFooterClasses,
|
|
7265
7457
|
layoutHeaderClasses,
|
|
@@ -7337,6 +7529,7 @@ export {
|
|
|
7337
7529
|
modalSizeClasses,
|
|
7338
7530
|
modalTitleClasses,
|
|
7339
7531
|
modalWrapperClasses,
|
|
7532
|
+
moveCard,
|
|
7340
7533
|
moveCropRect,
|
|
7341
7534
|
moveFocusInMenu,
|
|
7342
7535
|
nextIconPath,
|
|
@@ -7358,6 +7551,7 @@ export {
|
|
|
7358
7551
|
notificationTitleClasses,
|
|
7359
7552
|
paginateData,
|
|
7360
7553
|
parseDate,
|
|
7554
|
+
parseDragData,
|
|
7361
7555
|
parseInputValue,
|
|
7362
7556
|
parseTime,
|
|
7363
7557
|
parseWidthToPx,
|
|
@@ -7395,6 +7589,7 @@ export {
|
|
|
7395
7589
|
radioRootBaseClasses,
|
|
7396
7590
|
radioSizeClasses,
|
|
7397
7591
|
radioVisualBaseClasses,
|
|
7592
|
+
reorderColumns,
|
|
7398
7593
|
replaceKeys,
|
|
7399
7594
|
resetAreaGradientCounter,
|
|
7400
7595
|
resetBarGradientCounter,
|
|
@@ -7419,6 +7614,7 @@ export {
|
|
|
7419
7614
|
selectOptionDisabledClasses,
|
|
7420
7615
|
selectOptionSelectedClasses,
|
|
7421
7616
|
selectSearchInputClasses,
|
|
7617
|
+
setDragData,
|
|
7422
7618
|
setThemeColors,
|
|
7423
7619
|
shouldHideBadge,
|
|
7424
7620
|
skeletonAnimationClasses,
|
|
@@ -7492,6 +7688,18 @@ export {
|
|
|
7492
7688
|
tagCloseButtonBaseClasses,
|
|
7493
7689
|
tagCloseIconPath,
|
|
7494
7690
|
tagSizeClasses,
|
|
7691
|
+
taskBoardAddCardClasses,
|
|
7692
|
+
taskBoardBaseClasses,
|
|
7693
|
+
taskBoardCardClasses,
|
|
7694
|
+
taskBoardCardDraggingClasses,
|
|
7695
|
+
taskBoardColumnBodyClasses,
|
|
7696
|
+
taskBoardColumnClasses,
|
|
7697
|
+
taskBoardColumnDraggingClasses,
|
|
7698
|
+
taskBoardColumnDropTargetClasses,
|
|
7699
|
+
taskBoardColumnHeaderClasses,
|
|
7700
|
+
taskBoardDropIndicatorClasses,
|
|
7701
|
+
taskBoardEmptyClasses,
|
|
7702
|
+
taskBoardWipExceededClasses,
|
|
7495
7703
|
textAlignClasses,
|
|
7496
7704
|
textColorClasses,
|
|
7497
7705
|
textDecorationClasses,
|