{"version":3,"file":"CheckboxRoot.cjs","sources":["../../src/Checkbox/CheckboxRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Ref } from 'vue'\nimport { createContext, isNullish, isValueEqualOrExist, useFormControl, useForwardExpose } from '@/shared'\nimport type { CheckedState } from './utils'\nimport type { AcceptableValue, FormFieldProps } from '@/shared/types'\nimport { useVModel } from '@vueuse/core'\nimport { injectCheckboxGroupRootContext } from './CheckboxGroupRoot.vue'\n\nexport interface CheckboxRootProps extends PrimitiveProps, FormFieldProps {\n  /** The value of the checkbox when it is initially rendered. Use when you do not need to control its value. */\n  defaultValue?: boolean | 'indeterminate'\n  /** The controlled value of the checkbox. Can be binded with v-model. */\n  modelValue?: boolean | 'indeterminate' | null\n  /** When `true`, prevents the user from interacting with the checkbox */\n  disabled?: boolean\n  /**\n   * The value given as data when submitted with a `name`.\n   *  @defaultValue \"on\"\n   */\n  value?: AcceptableValue\n  /** Id of the element */\n  id?: string\n}\n\nexport type CheckboxRootEmits = {\n  /** Event handler called when the value of the checkbox changes. */\n  'update:modelValue': [value: boolean | 'indeterminate']\n}\n\ninterface CheckboxRootContext {\n  disabled: Ref<boolean>\n  state: Ref<CheckedState>\n}\n\nexport const [injectCheckboxRootContext, provideCheckboxRootContext]\n  = createContext<CheckboxRootContext>('CheckboxRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { RovingFocusItem } from '@/RovingFocus'\nimport { getState, isIndeterminate } from './utils'\nimport { VisuallyHiddenInput } from '@/VisuallyHidden'\nimport { isEqual } from 'ohash'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<CheckboxRootProps>(), {\n  modelValue: undefined,\n  value: 'on',\n  as: 'button',\n})\nconst emits = defineEmits<CheckboxRootEmits>()\n\ndefineSlots<{\n  default: (props: {\n    /** Current value */\n    modelValue: typeof modelValue.value\n    /** Current state */\n    state: typeof checkboxState.value\n  }) => any\n}>()\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nconst checkboxGroupContext = injectCheckboxGroupRootContext(null)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n  defaultValue: props.defaultValue,\n  passive: (props.modelValue === undefined) as false,\n}) as Ref<CheckedState>\n\nconst disabled = computed(() => checkboxGroupContext?.disabled.value || props.disabled)\n\nconst checkboxState = computed<CheckedState>(() => {\n  if (!isNullish(checkboxGroupContext?.modelValue.value)) {\n    return isValueEqualOrExist(checkboxGroupContext.modelValue.value, props.value)\n  }\n  else {\n    return modelValue.value === 'indeterminate' ? 'indeterminate' : modelValue.value\n  }\n})\n\nfunction handleClick() {\n  if (!isNullish(checkboxGroupContext?.modelValue.value)) {\n    const modelValueArray = [...(checkboxGroupContext.modelValue.value || [])]\n    if (isValueEqualOrExist(modelValueArray, props.value)) {\n      const index = modelValueArray.findIndex(i => isEqual(i, props.value))\n      modelValueArray.splice(index, 1)\n    }\n    else {\n      modelValueArray.push(props.value)\n    }\n    checkboxGroupContext.modelValue.value = modelValueArray\n  }\n  else {\n    modelValue.value = isIndeterminate(modelValue.value) ? true : !modelValue.value\n  }\n}\n\nconst isFormControl = useFormControl(currentElement)\nconst ariaLabel = computed(() => props.id && currentElement.value\n  ? (document.querySelector(`[for=\"${props.id}\"]`) as HTMLLabelElement)?.innerText\n  : undefined)\n\nprovideCheckboxRootContext({\n  disabled,\n  state: checkboxState,\n})\n</script>\n\n<template>\n  <component\n    v-bind=\"$attrs\"\n    :is=\"checkboxGroupContext?.rovingFocus.value ? RovingFocusItem : Primitive\"\n    :id=\"id\"\n    :ref=\"forwardRef\"\n    role=\"checkbox\"\n    :as-child=\"asChild\"\n    :as=\"as\"\n    :type=\"as === 'button' ? 'button' : undefined\"\n    :aria-checked=\"isIndeterminate(checkboxState) ? 'mixed' : checkboxState\"\n    :aria-required=\"required\"\n    :aria-label=\"$attrs['aria-label'] || ariaLabel\"\n    :data-state=\"getState(checkboxState)\"\n    :data-disabled=\"disabled ? '' : undefined\"\n    :disabled=\"disabled\"\n    :focusable=\"checkboxGroupContext?.rovingFocus.value ? !disabled : undefined\"\n    @keydown.enter.prevent=\"() => {\n      // According to WAI ARIA, Checkboxes don't activate on enter keypress\n    }\"\n    @click=\"handleClick\"\n  >\n    <slot\n      :model-value=\"modelValue\"\n      :state=\"checkboxState\"\n    />\n\n    <VisuallyHiddenInput\n      v-if=\"isFormControl && name && !checkboxGroupContext\"\n      type=\"checkbox\"\n      :checked=\"!!checkboxState\"\n      :name=\"name\"\n      :value=\"value\"\n      :disabled=\"disabled\"\n      :required=\"required\"\n    />\n  </component>\n</template>\n"],"names":["createContext","useForwardExpose","injectCheckboxGroupRootContext","useVModel","computed","isNullish","isValueEqualOrExist","isEqual","isIndeterminate","useFormControl"],"mappings":";;;;;;;;;;;;;;;;AAmCO,MAAM,CAAC,yBAAA,EAA2B,0BAA0B,CAAA,GAC/DA,mCAAmC,cAAc;;;;;;;;;;;;;;;;;;;AAerD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAWd,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAIC,wCAAiB,EAAA;AAExD,IAAM,MAAA,oBAAA,GAAuBC,0DAA+B,IAAI,CAAA;AAEhE,IAAA,MAAM,UAAa,GAAAC,cAAA,CAAU,KAAO,EAAA,YAAA,EAAc,KAAO,EAAA;AAAA,MACvD,cAAc,KAAM,CAAA,YAAA;AAAA,MACpB,OAAA,EAAU,MAAM,UAAe,KAAA;AAAA,KAChC,CAAA;AAED,IAAA,MAAM,WAAWC,YAAS,CAAA,MAAM,sBAAsB,QAAS,CAAA,KAAA,IAAS,MAAM,QAAQ,CAAA;AAEtF,IAAM,MAAA,aAAA,GAAgBA,aAAuB,MAAM;AACjD,MAAA,IAAI,CAACC,wBAAA,CAAU,oBAAsB,EAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AACtD,QAAA,OAAOC,8CAAoB,CAAA,oBAAA,CAAqB,UAAW,CAAA,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,OAE1E,MAAA;AACH,QAAA,OAAO,UAAW,CAAA,KAAA,KAAU,eAAkB,GAAA,eAAA,GAAkB,UAAW,CAAA,KAAA;AAAA;AAC7E,KACD,CAAA;AAED,IAAA,SAAS,WAAc,GAAA;AACrB,MAAA,IAAI,CAACD,wBAAA,CAAU,oBAAsB,EAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AACtD,QAAA,MAAM,kBAAkB,CAAC,GAAI,qBAAqB,UAAW,CAAA,KAAA,IAAS,EAAG,CAAA;AACzE,QAAA,IAAIC,8CAAoB,CAAA,eAAA,EAAiB,KAAM,CAAA,KAAK,CAAG,EAAA;AACrD,UAAM,MAAA,KAAA,GAAQ,gBAAgB,SAAU,CAAA,CAAA,CAAA,KAAKC,cAAQ,CAAG,EAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AACpE,UAAgB,eAAA,CAAA,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,SAE5B,MAAA;AACH,UAAgB,eAAA,CAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA;AAElC,QAAA,oBAAA,CAAqB,WAAW,KAAQ,GAAA,eAAA;AAAA,OAErC,MAAA;AACH,QAAA,UAAA,CAAW,QAAQC,8BAAgB,CAAA,UAAA,CAAW,KAAK,CAAI,GAAA,IAAA,GAAO,CAAC,UAAW,CAAA,KAAA;AAAA;AAC5E;AAGF,IAAM,MAAA,aAAA,GAAgBC,qCAAe,cAAc,CAAA;AACnD,IAAA,MAAM,SAAY,GAAAL,YAAA,CAAS,MAAM,KAAA,CAAM,MAAM,cAAe,CAAA,KAAA,GACvD,QAAS,CAAA,aAAA,CAAc,SAAS,KAAM,CAAA,EAAE,CAAI,EAAA,CAAA,CAAA,EAAwB,YACrE,MAAS,CAAA;AAEb,IAA2B,0BAAA,CAAA;AAAA,MACzB,QAAA;AAAA,MACA,KAAO,EAAA;AAAA,KACR,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}