{"version":3,"file":"form-control.umd.cjs","sources":["../src/FormControlErrors.vue","../src/FormControlFeedback.vue","../src/useFormControl.ts"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { type FormControlErrorProp, type FormControlErrorPropArray, type FormControlErrorPropRecord } from './useFormControl.js';\n\nconst props = defineProps<{\n    error?: FormControlErrorProp,\n    errors?: FormControlErrorPropArray | FormControlErrorPropRecord,\n    name?: string,\n    id?: string\n}>();\n\nconst key = String(props?.id || props?.name);\n\nconst map = computed(() => {\n    // First check if an `error` prop was passed. This is a single error.\n    if(props.error) {\n        return new Map<string, (string|Error)[]>(\n            [[key, [props.error]]]\n        );\n    }\n\n    // Next check to see if an error of errors was passed.\n    if(Array.isArray(props.errors)) {\n        return new Map<string, (string | Error)[]>(\n            [[key, props.errors]]\n        );\n    }\n\n    // Finally check if props.errors is a plain object. \n    if(typeof props.errors === 'object') {\n        return new Map<string, (string | Error)[]>(\n            Object.entries(props.errors)\n        );\n    }\n\n    return new Map();\n});\n</script>\n\n<template>\n    <slot\n        v-for=\"item of map.get(key)\"\n        v-bind=\"{ key, error: item }\" />\n</template>","<script lang=\"ts\" setup>\n\ndefineProps<{\n    feedback?: string|string[]\n}>();\n</script>\n\n<template>\n    <slot\n        v-for=\"item of (Array.isArray(feedback) ? feedback : [feedback])\"\n        :feedback=\"item\" />\n</template>","import { ActivityIndicatorSize } from '@vue-interface/activity-indicator';\nimport { computed, nextTick, onBeforeMount, ref, useAttrs, useSlots, watch, type Component, type ComputedRef, type EmitFn, type HTMLAttributes, type ModelRef, type Ref, type SetupContext } from 'vue';\n\nexport type FormControlEvents = {\n    blur: [event: FocusEvent];\n    focus: [event: FocusEvent];\n    focusin: [event: FocusEvent];\n    focusout: [event: FocusEvent];\n    click: [event: MouseEvent];\n    doubleclick: [event: MouseEvent];\n    contextmenu: [event: MouseEvent];\n    mousedown: [event: MouseEvent];\n    mouseup: [event: MouseEvent];\n    mouseover: [event: MouseEvent];\n    mouseout: [event: MouseEvent];\n    mouseenter: [event: MouseEvent];\n    mouseleave: [event: MouseEvent];\n    mousemove: [event: MouseEvent];\n    keydown: [event: KeyboardEvent];\n    keyup: [event: KeyboardEvent];\n    keypress: [event: KeyboardEvent];\n    select: [event: Event];\n    selectionchange: [event: Event];\n    invalid: [event: Event];\n    submit: [event: Event];\n    reset: [event: Event];\n    scroll: [event: Event];\n    wheel: [event: WheelEvent];\n    copy: [event: ClipboardEvent];\n    cut: [event: ClipboardEvent];\n    paste: [event: ClipboardEvent];\n    touchstart: [event: TouchEvent];\n    touchend: [event: TouchEvent];\n    touchmove: [event: TouchEvent];\n    touchcancel: [event: TouchEvent];\n    change: [event: Event];\n    input: [event: Event];\n    beforeinput: [event: Event];\n};\n\nexport type FormControlListeners<T> = {\n  [K in keyof T as `on${Capitalize<string & K>}`]: T[K] extends [infer Arg1, infer Arg2]\n    ? (arg1: Arg1, arg2: Arg2) => void\n    : T[K] extends [infer Arg1]\n    ? (arg1: Arg1) => void\n    : () => void;\n};\n\nexport type FormControlFeedbackPropSlot = (\n    props: {\n        feedback?: FormControlFeedbackProp\n    }\n) => unknown;\n\nexport type FormControlActivitySlot = () => unknown;\nexport type FormControlHelpSlot = (helpText?: string) => unknown;\nexport type FormControlIconSlot = () => unknown;\nexport type FormControlLabelSlot = () => unknown;\n\nexport type FormControlSlots<Prefix extends string, ModelValue> = {\n    control?: FormControlSlot<Prefix, ModelValue>;\n    activity?: FormControlActivitySlot;\n    errors?: FormControlErrorSlot;\n    feedback?: FormControlFeedbackPropSlot;\n    icon?: FormControlIconSlot;\n    label?: FormControlLabelSlot;\n    help?: FormControlHelpSlot;\n};\n\nexport type FormControlSlot<Prefix extends string, ModelValue> = (\n    props: {\n        controlAttributes: FormControlAttributes<Prefix, ModelValue>;\n        listeners: FormControlListeners<FormControlEvents>;\n    }\n) => unknown;\n\nexport type FormControlErrorSlot = (props: {\n    name?: unknown;\n    id?: unknown;\n    error?: FormControlErrorProp;\n    errors?: FormControlErrorPropArray | FormControlErrorPropRecord;\n}) => unknown;\n\nexport type FormControlErrorProp = string | Error;\nexport type FormControlErrorPropArray = FormControlErrorProp[];\nexport type FormControlErrorPropRecord = Record<string,FormControlErrorProp[]>\nexport type FormControlFeedbackProp = string | string[];\n\nexport type PredeterminedSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl';\n\ntype Unit = 'px' | 'rem' | 'em' | 'vw' | 'vh' | '%' | 'ch' | 'ex' | 'cm' | 'mm' | 'in' | 'pt' | 'pc';\ntype NumericWithUnit = `${number}${Unit}`;\ntype CalcExpressionChar = number | '.' | '+' | '-' | '*' | '/' | '(' | ')' | '_'\ntype NonEmptyCalcContentString = `${CalcExpressionChar}${string}` | CalcExpressionChar;\ntype ValidCalc = `calc(${NonEmptyCalcContentString})`;\ntype ValidBracketContent =  NumericWithUnit | ValidCalc;\n\nexport type FormControlSizeValue<\n    Prefix extends string,\n    Value extends PredeterminedSize = PredeterminedSize\n> = `${Prefix}-${Value}` | `${Prefix}-${number}` | `${Prefix}-[${ValidBracketContent}]`;\n\nexport type FormControlSize<\n    Prefix extends string,\n    Value extends PredeterminedSize = PredeterminedSize\n> = FormControlSizeValue<Prefix,Value> | Partial<Record<FormControlSizeValue<Prefix,Value>,boolean>>;\n\nexport type FormControlProps<\n    Attributes extends HTMLAttributes,\n    Size extends string,\n    ModelValue,\n    Value\n> = {\n    activity?: boolean;\n    disabled?: boolean;\n    error?: FormControlErrorProp;\n    errors?: FormControlErrorPropArray | FormControlErrorPropRecord;\n    feedback?: FormControlFeedbackProp;\n    formControlClass?: string;\n    helpText?: string;\n    id?: string;\n    indicator?: Component;\n    indicatorSize?: ActivityIndicatorSize;\n    invalid?: boolean;\n    label?: string;\n    labelClass?: string;\n    modelValue?: ModelValue;\n    name?: string;\n    plaintext?: boolean;\n    size?: FormControlSize<Size,PredeterminedSize>;\n    color?: string;\n    readonly?: boolean;\n    valid?: boolean;\n    value?: Value;\n} & /* @vue-ignore */ Omit<Attributes, 'size'>;\n\nexport type FormGroupClasses = {\n    'has-activity': boolean;\n    'has-changed': boolean;\n    'has-focus': boolean;\n    'has-icon': boolean;\n    'is-dirty': boolean;\n    'is-empty': boolean;\n    'is-invalid': boolean;\n    'is-valid': boolean;\n} & Record<string,boolean>\n\nexport type FormControlAttributes<Prefix extends string, ModelValue> = {\n    id: string,\n    class: FormControlClasses<Prefix>;\n    disabled?: boolean;\n    readonly?: boolean;\n    value?: ModelValue;\n} & Record<string, unknown>;\n\nexport type FormControlClasses<Prefix extends string> = {\n    'form-control-plaintext': boolean;\n    'form-control-icon': boolean;\n    'has-activity': boolean;\n    'has-changed': boolean;\n    'has-focus': boolean;\n    'is-valid': boolean;\n    'is-invalid': boolean;\n    'is-dirty': boolean;\n    'is-empty': boolean;\n    size?: FormControlSize<Prefix>\n    color?: boolean;\n} & Record<string,boolean>\n\nexport type CheckedFormControlProps<\n    Attributes extends HTMLAttributes,\n    Size extends string,\n    ModelValue,\n    Value\n> = FormControlProps<Attributes, Size, ModelValue, Value> & {\n    checked?: boolean;\n}\n\nexport type UseFormControlOptions<\n    Attributes extends HTMLAttributes,\n    Size extends string,\n    ModelValue,\n    Value,\n    Getter = ModelValue,\n    Setter = ModelValue\n> = {\n    model: ModelRef<ModelValue,string,Getter,Setter>;\n    props: FormControlProps<Attributes,Size,ModelValue,Value> | CheckedFormControlProps<Attributes,Size,ModelValue,Value>;\n    emit: EmitFn<FormControlEvents>;\n}\n\nexport type UseFormControl<Size extends string, ModelValue, Getter, Setter>  = {\n    attrs: SetupContext['attrs'];\n    controlAttributes: ComputedRef<FormControlAttributes<Size, ModelValue>>\n    controlClasses: ComputedRef<FormControlClasses<Size>>\n    formGroupClasses: ComputedRef<FormGroupClasses>;\n    hasChanged: Ref<boolean>;\n    hasFocus: Ref<boolean>;\n    hasIcon: Ref<boolean>;\n    isDirty: Ref<boolean>;\n    isEmpty: Ref<boolean>;\n    isInvalid: Ref<boolean>;\n    isValid: Ref<boolean>;\n    listeners: FormControlListeners<FormControlEvents>;\n    model: ModelRef<ModelValue,string,Getter,Setter>;\n}\n\nexport function useFormControl<\n    Attributes extends HTMLAttributes,\n    Size extends string,\n    ModelValue,\n    Value,\n    Getter = ModelValue,\n    Setter = ModelValue,\n>(options: UseFormControlOptions<Attributes,Size,ModelValue,Value,Getter,Setter>): UseFormControl<Size,ModelValue,Getter,Setter>;\n\nexport function useFormControl<\n    Attributes extends HTMLAttributes,\n    Size extends string,\n    ModelValue,\n    Value,\n    Getter = ModelValue,\n    Setter = ModelValue,\n>({ props, emit, model }: UseFormControlOptions<Attributes,Size,ModelValue,Value,Getter,Setter>): UseFormControl<Size, ModelValue, Getter, Setter> {\n    const attrs = useAttrs();\n    \n    const hasChanged = ref(false);\n    const hasFocus = ref(false);\n    const hasIcon = computed(() => {\n        return !!useSlots().icon;\n    });\n\n    const isDirty = ref(false);\n    const isEmpty = ref(false);\n\n    const unwatch = watch(model, () => {\n        hasChanged.value = true;\n        isDirty.value = true;\n        unwatch();\n    });\n\n    const id = computed<string>(() => {\n        return props.id ?? Math.random().toString(36).slice(2);\n    });\n\n    const isInvalid = computed(() => {\n        return !!(props.invalid || props.error || props.errors && (\n            Array.isArray(props.errors)\n                ? props.errors.length\n                : props.errors[(props.name || id.value) as string]\n        ));\n    });\n\n    const isValid = computed(() => {\n        return !isInvalid.value && !!(props.valid || props.feedback);\n    });\n\n    const formGroupClasses = computed<FormGroupClasses>(() => ({\n        [String(attrs.class)]: !!attrs.class,\n        'has-activity': !!props.activity,\n        'has-changed': hasChanged.value,\n        'has-focus': hasFocus.value,\n        'has-icon': hasIcon.value,\n        'is-valid': isValid.value,\n        'is-invalid': isInvalid.value,\n        'is-dirty': isDirty.value,\n        'is-empty': isEmpty.value,\n    }));\n\n    const controlClasses = computed<FormControlClasses<Size>>(() => Object.assign({        \n        [props.formControlClass ?? '']: !!props.formControlClass,\n        [props.color ?? '']: !!props.color,\n        'form-control-plaintext': !!props.plaintext,\n        'form-control-icon': hasIcon.value,\n        'has-activity': !!props.activity,\n        'has-changed': hasChanged.value,\n        'has-focus': hasFocus.value,\n        'is-valid': isValid.value,\n        'is-invalid': isInvalid.value,\n        'is-dirty': isDirty.value,\n        'is-empty': isEmpty.value,\n    }, typeof props.size === 'object' ? props.size : {\n        [props.size ?? '']: !!props.size,\n    }));\n    \n    const listeners: FormControlListeners<FormControlEvents> = {\n        onBlur: (e: FocusEvent) => {\n            hasFocus.value = false;\n            emit('blur', e);\n        },\n        onFocus: (e: FocusEvent) => {\n            // isDirty.value = true;\n            hasFocus.value = true;\n            emit('focus', e);\n        },\n        onFocusin: (e: FocusEvent) => {\n            emit('focusin', e);\n        },\n        onFocusout: (e: FocusEvent) => {\n            emit('focusout', e);\n        },\n        onClick: (e: MouseEvent) => {\n            if(props.readonly) {\n                e.preventDefault();\n            }\n            nextTick(() => {\n                emit('click', e);\n            });\n        },\n        onDoubleclick: (e: MouseEvent) => {\n            emit('doubleclick', e);\n        },\n        onContextmenu: (e: MouseEvent) => {\n            emit('contextmenu', e);\n        },\n        onMousedown: (e: MouseEvent) => {\n            emit('mousedown', e);\n        },\n        onMouseup: (e: MouseEvent) => {\n            emit('mouseup', e);\n        },\n        onMouseover: (e: MouseEvent) => {\n            emit('mouseover', e);\n        },\n        onMouseout: (e: MouseEvent) => {\n            emit('mouseup', e);\n        },\n        onMouseenter: (e: MouseEvent) => {\n            emit('mouseenter', e);\n        },\n        onMouseleave: (e: MouseEvent) => {\n            emit('mouseleave', e);\n        },\n        onMousemove: (e: MouseEvent) => {\n            emit('mousemove', e);\n        },\n        onChange: (e: Event) => {\n            emit('change', e);\n        },\n        onInput: (e: Event) => {\n            emit('input', e);\n        },\n        onBeforeinput: (e: Event) => {\n            emit('beforeinput', e);\n        },\n        onKeydown: (e: KeyboardEvent) => {\n            emit('keydown', e);\n        },\n        onKeyup: (e: KeyboardEvent) => {\n            emit('keyup', e);\n        },\n        onKeypress: (e: KeyboardEvent) => {\n            emit('keypress', e);\n        },\n        onSelect: (e: Event) => {\n            emit('select', e);\n        },\n        onSelectionchange: (e: Event) => {\n            emit('selectionchange', e);\n        },\n        onInvalid: (e: Event) => {\n            emit('invalid', e);\n        },\n        onSubmit: (e: Event) => {\n            emit('submit', e);\n        },\n        onReset: (e: Event) => {\n            emit('reset', e);\n        },\n        onScroll: (e: Event) => {\n            emit('scroll', e);\n        },\n        onWheel: (e: WheelEvent) => {\n            emit('wheel', e);\n        },\n        onCopy: (e: ClipboardEvent) => {\n            emit('copy', e);\n        },\n        onCut: (e: ClipboardEvent) => {\n            emit('cut', e);\n        },\n        onPaste: (e: ClipboardEvent) => {\n            emit('paste', e);\n        },\n        onTouchstart: (e: TouchEvent) => {\n            emit('touchstart', e);\n        },\n        onTouchend: (e: TouchEvent) => {\n            emit('touchend', e);\n        },\n        onTouchmove: (e: TouchEvent) => {\n            emit('touchmove', e);\n        },\n        onTouchcancel: (e: TouchEvent) => {\n            emit('touchcancel', e);\n        }\n    };\n\n    const controlAttributes = computed<FormControlAttributes<Size,ModelValue>>(() => ({\n        ...attrs,\n        id: id.value,\n        name: props.name,\n        class: controlClasses.value,\n        disabled: props.disabled,\n        readonly: props.readonly\n    }));\n\n    onBeforeMount(() => {\n        isDirty.value = model.value !== null && model.value !== undefined;\n    });\n\n    return {\n        attrs,\n        controlAttributes,\n        controlClasses,\n        formGroupClasses,\n        hasChanged,\n        hasFocus,\n        hasIcon,\n        isDirty,\n        isEmpty,\n        isInvalid,\n        isValid,\n        listeners,\n        model,\n    };\n}"],"names":["props","__props","key","map","computed","_openBlock","_createElementBlock","_Fragment","_unref","item","_renderSlot","_ctx","_mergeProps","_renderList","useFormControl","emit","model","attrs","useAttrs","hasChanged","ref","hasFocus","hasIcon","useSlots","isDirty","isEmpty","unwatch","watch","id","isInvalid","isValid","formGroupClasses","controlClasses","listeners","nextTick","controlAttributes","onBeforeMount"],"mappings":"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"}