tav-ui
Version:
79 lines (77 loc) • 2.73 kB
JavaScript
const DEFAULT_LABEL_MAX_WIDTH = 12 * 2 + 3 * 2;
const DEFAULT_DIVIDER_WIDTH = 16 + 1;
const DEFAULT_PADDING = 10;
const DEFAULT_CONTENT_MAX_WIDTH = DEFAULT_LABEL_MAX_WIDTH * 3 + DEFAULT_DIVIDER_WIDTH * 2;
const DEFAULT_CONTENT_MIN_WIDTH = DEFAULT_LABEL_MAX_WIDTH;
const DEFAULT_MORE_BUTTON_WIDTH = 3 * 3;
function useCanvasCalcContent() {
let canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
const DEFAULT_FONT = `normal 12px -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"`;
function calcContent(content, font = DEFAULT_FONT) {
if (ctx) {
ctx.font = font;
const { width = 0 } = ctx.measureText(content);
return Math.ceil(width) + 0.5;
}
return 0;
}
function clearCalcContentCanvas() {
canvas?.remove();
canvas = null;
}
return {
calcContent,
clearCalcContentCanvas
};
}
function isOverMaxWidth(actions, calcFn) {
if (!actions)
return false;
const getTotal = (_actions) => {
return _actions.reduce((total, action, idx) => {
if (action.label) {
total += calcFn ? calcFn(action.label) : 0;
} else {
total += 0;
}
if (idx !== _actions.length - 1) {
total += DEFAULT_DIVIDER_WIDTH;
}
return total;
}, 0);
};
return getTotal(actions) > DEFAULT_CONTENT_MAX_WIDTH;
}
function useColumnActionAutoWidth(actions, labelMaxLength, calcFn) {
if (!actions)
return void 0;
const getTotal = (_actions) => {
return _actions.reduce((total, action, idx) => {
if (action.label) {
total += calcFn ? calcFn(action.label) : 0;
} else {
total += 0;
}
if (idx !== _actions.length - 1) {
total += DEFAULT_DIVIDER_WIDTH;
} else {
total += DEFAULT_PADDING * 2;
}
return total;
}, 0);
};
const actionsDefault = actions.map((action) => ({ label: action.label }));
const handledActions = JSON.parse(JSON.stringify(actionsDefault));
if (handledActions.length <= labelMaxLength) {
const total = getTotal(handledActions);
return total < DEFAULT_CONTENT_MIN_WIDTH + DEFAULT_PADDING * 2 ? DEFAULT_CONTENT_MIN_WIDTH + DEFAULT_PADDING * 2 : total;
} else {
const contentActions = handledActions.slice(0, 2);
let total = getTotal(contentActions);
total += DEFAULT_MORE_BUTTON_WIDTH + DEFAULT_DIVIDER_WIDTH;
return total < DEFAULT_CONTENT_MIN_WIDTH + DEFAULT_PADDING * 2 ? DEFAULT_CONTENT_MIN_WIDTH + DEFAULT_PADDING * 2 : total;
}
}
export { isOverMaxWidth, useCanvasCalcContent, useColumnActionAutoWidth };
//# sourceMappingURL=useColumnAutoWidth2.mjs.map