reka-ui
Version:
Vue port for Radix UI Primitives.
78 lines (74 loc) • 2.7 kB
JavaScript
;
const number = require('@internationalized/number');
const core = require('@vueuse/core');
const shared = require('@vueuse/shared');
const vue = require('vue');
function usePressedHold(options) {
const { disabled } = options;
const timeout = vue.ref();
const triggerHook = shared.createEventHook();
const resetTimeout = () => window.clearTimeout(timeout.value);
const onIncrementPressStart = (delay) => {
resetTimeout();
if (disabled.value)
return;
triggerHook.trigger();
timeout.value = window.setTimeout(() => {
onIncrementPressStart(60);
}, delay);
};
const handlePressStart = () => {
onIncrementPressStart(400);
};
const handlePressEnd = () => {
resetTimeout();
};
const isPressed = vue.ref(false);
const target = vue.computed(() => core.unrefElement(options.target));
const onPressStart = (event) => {
if (event.button !== 0 || isPressed.value)
return;
event.preventDefault();
isPressed.value = true;
handlePressStart();
};
const onPressRelease = () => {
isPressed.value = false;
handlePressEnd();
};
if (shared.isClient) {
core.useEventListener(target || window, "pointerdown", onPressStart);
core.useEventListener(window, "pointerup", onPressRelease);
core.useEventListener(window, "pointercancel", onPressRelease);
}
return {
isPressed,
onTrigger: triggerHook.on
};
}
function useNumberFormatter(locale, options = vue.ref({})) {
return shared.reactiveComputed(() => new number.NumberFormatter(locale.value, options.value));
}
function useNumberParser(locale, options = vue.ref({})) {
return shared.reactiveComputed(() => new number.NumberParser(locale.value, options.value));
}
function handleDecimalOperation(operator, value1, value2) {
let result = operator === "+" ? value1 + value2 : value1 - value2;
if (value1 % 1 !== 0 || value2 % 1 !== 0) {
const value1Decimal = value1.toString().split(".");
const value2Decimal = value2.toString().split(".");
const value1DecimalLength = value1Decimal[1] && value1Decimal[1].length || 0;
const value2DecimalLength = value2Decimal[1] && value2Decimal[1].length || 0;
const multiplier = 10 ** Math.max(value1DecimalLength, value2DecimalLength);
value1 = Math.round(value1 * multiplier);
value2 = Math.round(value2 * multiplier);
result = operator === "+" ? value1 + value2 : value1 - value2;
result /= multiplier;
}
return result;
}
exports.handleDecimalOperation = handleDecimalOperation;
exports.useNumberFormatter = useNumberFormatter;
exports.useNumberParser = useNumberParser;
exports.usePressedHold = usePressedHold;
//# sourceMappingURL=utils.cjs.map