{"version":3,"file":"JLink.vue.cjs","sources":["../../../../src/components/atoms/JLink.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Button } from '@/components/shadcn'\n\ntype StyleType = 'default' | 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'sm' | 'lg'\n\nconst props = withDefaults(\n  defineProps<{\n    /** 링크 URL */\n    href?: string\n    /** 링크 텍스트 */\n    text?: string\n    /** 새 탭에서 열기 */\n    target?: '_blank' | '_self' | '_parent' | '_top'\n    /** 링크 스타일 테마 */\n    styletype?: StyleType\n    /** 비활성화 상태 */\n    disabled?: boolean\n    /** 추가 CSS 클래스 */\n    class?: string\n  }>(),\n  {\n    styletype: 'default',\n    disabled: false,\n  },\n)\n\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; size?: string; class?: string }> = {\n  default: { variant: 'link', class: 'text-primary underline-offset-4 hover:underline' },\n  primary: { variant: 'link', class: 'text-primary-foreground bg-primary hover:bg-primary/90' },\n  secondary: { variant: 'link', class: 'text-secondary-foreground bg-secondary hover:bg-secondary/80' },\n  destructive: { variant: 'link', class: 'text-destructive hover:text-destructive/90' },\n  outline: { variant: 'outline', class: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n  ghost: { variant: 'ghost', class: 'hover:bg-accent hover:text-accent-foreground' },\n  sm: { variant: 'link', size: 'sm', class: 'h-8 px-3 text-xs' },\n  lg: { variant: 'link', size: 'lg', class: 'h-12 px-8 text-base' },\n}\n\nconst mapped = computed(() => {\n  const styleKey = props.styletype || 'default'\n  const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\n  const finalClass = [preset?.class, props.class].filter(Boolean).join(' ')\n\n  return {\n    variant: (preset?.variant || 'link') as 'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost',\n    size: (preset?.size || 'sm') as 'xs' | 'sm' | 'md' | 'lg' | 'icon',\n    class: finalClass,\n    disabled: props.disabled,\n  }\n})\n\nconst linkProps = computed(() => {\n  const baseProps: Record<string, any> = {\n    as: 'a',\n  }\n\n  if (props.href) {\n    baseProps.href = props.href\n  }\n\n  if (props.target) {\n    baseProps.target = props.target\n  }\n\n  return baseProps\n})\n</script>\n\n<template>\n  <Button v-bind=\"{ ...mapped, ...linkProps }\">\n    <slot>{{ text }}</slot>\n  </Button>\n</template>\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","finalClass","linkProps","baseProps","_createBlock","_unref","Button","_normalizeProps","_guardReactiveProps","_renderSlot","_ctx"],"mappings":"uWAMA,MAAMA,EAAQC,EAqBRC,EAAwF,CAC5F,QAAS,CAAE,QAAS,OAAQ,MAAO,iDAAA,EACnC,QAAS,CAAE,QAAS,OAAQ,MAAO,wDAAA,EACnC,UAAW,CAAE,QAAS,OAAQ,MAAO,8DAAA,EACrC,YAAa,CAAE,QAAS,OAAQ,MAAO,4CAAA,EACvC,QAAS,CAAE,QAAS,UAAW,MAAO,gFAAA,EACtC,MAAO,CAAE,QAAS,QAAS,MAAO,8CAAA,EAClC,GAAI,CAAE,QAAS,OAAQ,KAAM,KAAM,MAAO,kBAAA,EAC1C,GAAI,CAAE,QAAS,OAAQ,KAAM,KAAM,MAAO,qBAAA,CAAsB,EAG5DC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWL,EAAM,WAAa,UAC9BM,EAASJ,EAAcG,CAAQ,GAAKH,EAAc,QAClDK,EAAa,CAACD,GAAQ,MAAON,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAExE,MAAO,CACL,QAAUM,GAAQ,SAAW,OAC7B,KAAOA,GAAQ,MAAQ,KACvB,MAAOC,EACP,SAAUP,EAAM,QAAA,CAEpB,CAAC,EAEKQ,EAAYJ,EAAAA,SAAS,IAAM,CAC/B,MAAMK,EAAiC,CACrC,GAAI,GAAA,EAGN,OAAIT,EAAM,OACRS,EAAU,KAAOT,EAAM,MAGrBA,EAAM,SACRS,EAAU,OAAST,EAAM,QAGpBS,CACT,CAAC,8BAICC,EAAAA,YAESC,EAAAA,MAAAC,EAAAA,OAAA,EAAAC,EAAAA,eAAAC,EAAAA,mBAAA,CAAA,GAFYX,EAAA,MAAM,GAAKK,EAAA,KAAA,CAAS,CAAA,EAAA,mBACvC,IAAuB,CAAvBO,EAAAA,WAAuBC,sBAAvB,IAAuB,qCAAdf,EAAA,IAAI,EAAA,CAAA,CAAA"}