{"version":3,"file":"toggle.mjs","sources":["../src/toggle/Toggle.ts","../src/toggle/Toggle.vue"],"sourcesContent":["import type { PrimitiveProps } from '../primitive/index.ts'\nimport { useControllableStateV2 } from '../hooks/useControllableState.ts'\nimport { type EmitsToHookProps, mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveReturns } from '../shared/index.ts'\n\nexport interface ToggleProps {\n  as?: PrimitiveProps['as']\n  /**\n   * The controlled state of the toggle.\n   */\n  pressed?: boolean\n  /**\n   * The state of the toggle when initially rendered. Use `defaultPressed`\n   * if you do not need to control the state of the toggle.\n   * @defaultValue false\n   */\n  defaultPressed?: boolean\n\n  disabled?: boolean\n}\n\nexport const DEFAULT_TOGGLE_PROPS = {\n  as: 'button',\n  pressed: undefined,\n  defaultPressed: undefined,\n  disabled: undefined,\n} satisfies PrimitiveDefaultProps<ToggleProps>\n\nexport type ToggleEmits = {\n  /**\n   * The callback that fires when the state of the toggle changes.\n   */\n  'update:pressed': [value: boolean]\n}\n\nexport interface UseToggleProps extends EmitsToHookProps<ToggleEmits> {\n  pressed?: () => boolean | undefined\n  defaultPressed?: boolean\n  disabled?: () => boolean | undefined\n}\n\nexport function useToggle(props: UseToggleProps): RadixPrimitiveReturns {\n  const { defaultPressed = false } = props\n\n  const pressed = useControllableStateV2(props.pressed, props.onUpdatePressed, defaultPressed)\n\n  function onClick(event: MouseEvent) {\n    if (event.defaultPrevented)\n      return\n    pressed.value = !pressed.value\n  }\n\n  return {\n    attrs(extraAttrs) {\n      const _disabled = props.disabled?.()\n      const _pressed = pressed.value\n      const attrs = {\n        'type': 'button',\n        'aria-pressed': _pressed,\n        'data-state': _pressed ? 'on' : 'off',\n        'disabled': _disabled,\n        'data-disabled': _disabled ? '' : undefined,\n        onClick,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, type EmitsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_TOGGLE_PROPS, type ToggleEmits, type ToggleProps, useToggle } from './Toggle.ts'\n\ndefineOptions({\n  name: 'Toggle',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ToggleProps>(), DEFAULT_TOGGLE_PROPS)\nconst emit = defineEmits<ToggleEmits>()\n\nconst toggle = useToggle(convertPropsToHookProps(\n  props,\n  ['pressed', 'disabled'],\n  (): Required<EmitsToHookProps<ToggleEmits>> => ({\n    onUpdatePressed(value) {\n      emit('update:pressed', value)\n    },\n  }),\n))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(toggle.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;AAoBO,MAAM,oBAAuB,GAAA;AAAA,EAClC,EAAI,EAAA,QAAA;AAAA,EACJ,OAAS,EAAA,KAAA,CAAA;AAAA,EACT,cAAgB,EAAA,KAAA,CAAA;AAAA,EAChB,QAAU,EAAA,KAAA;AACZ;AAeO,SAAS,UAAU,KAA8C,EAAA;AACtE,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA,EAAU,GAAA,KAAA;AAEnC,EAAA,MAAM,UAAU,sBAAuB,CAAA,KAAA,CAAM,OAAS,EAAA,KAAA,CAAM,iBAAiB,cAAc,CAAA;AAE3F,EAAA,SAAS,QAAQ,KAAmB,EAAA;AAClC,IAAA,IAAI,KAAM,CAAA,gBAAA;AACR,MAAA;AACF,IAAQ,OAAA,CAAA,KAAA,GAAQ,CAAC,OAAQ,CAAA,KAAA;AAAA;AAG3B,EAAO,OAAA;AAAA,IACL,MAAM,UAAY,EAAA;AAChB,MAAM,MAAA,SAAA,GAAY,MAAM,QAAW,IAAA;AACnC,MAAA,MAAM,WAAW,OAAQ,CAAA,KAAA;AACzB,MAAA,MAAM,KAAQ,GAAA;AAAA,QACZ,MAAQ,EAAA,QAAA;AAAA,QACR,cAAgB,EAAA,QAAA;AAAA,QAChB,YAAA,EAAc,WAAW,IAAO,GAAA,KAAA;AAAA,QAChC,UAAY,EAAA,SAAA;AAAA,QACZ,eAAA,EAAiB,YAAY,EAAK,GAAA,KAAA,CAAA;AAAA,QAClC;AAAA,OACF;AAEA,MAAI,IAAA,UAAA,IAAc,UAAW,CAAA,MAAA,GAAS,CAAG,EAAA;AACvC,QAAA,mBAAA,CAAoB,OAAO,UAAU,CAAA;AAAA;AAGvC,MAAO,OAAA,KAAA;AAAA;AACT,GACF;AACF;;;;;;;;;;;;;;;;AC7DA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,IAAO,GAAA,MAAA;AAEb,IAAA,MAAM,SAAS,SAAU,CAAA,uBAAA;AAAA,MACvB,KAAA;AAAA,MACA,CAAC,WAAW,UAAU,CAAA;AAAA,MACtB,OAAgD;AAAA,QAC9C,gBAAgB,KAAO,EAAA;AACrB,UAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA;AAC9B,OACF;AAAA,KACD,CAAA;;;;;;;;;;;;;;"}