import type { Ref } from 'vue' export function useTextCount( text: Ref | string, options?: { mode?: string | boolean upperLimit?: number lowerLimit?: number }, ) { const length = computed(() => { return (unref(text) ?? '').length }) const gap = computed(() => { if ( options?.lowerLimit !== undefined && length.value < options?.lowerLimit ) { return length.value - options.lowerLimit } if (options?.upperLimit !== undefined) { return options.upperLimit - length.value } return 0 }) const formatted = computed(() => { if (options?.mode === false) { return '' } if (options?.mode === 'limit' && options?.upperLimit) { return `${length.value} / ${ options.lowerLimit ? `${options.lowerLimit}-` : '' }${options.upperLimit}` } if (options?.mode === 'countdown') { if (gap.value === 0) { return undefined } return gap.value } return length.value }) return { length, gap, formatted, } }