{"version":3,"file":"index.cjs","sources":["../src/composables/useLiquidGlass.ts","../src/composables/useMouseTracking.ts","../src/utils/shader.ts","../src/utils/animation.ts","../src/components/LgButton/LgButton.vue","../src/components/LgCard/LgCard.vue","../src/components/LgContainer/LgContainer.vue","../src/components/LgInput/LgInput.vue","../src/components/LgSelect/LgSelect.vue","../src/components/LgTextarea/LgTextarea.vue","../src/components/LgForm/LgForm.vue","../src/components/LgLoading/LgLoading.vue","../src/components/LgMenu/context.ts","../src/components/LgMenu/MenuItem.vue","../src/components/LgMenu/LgMenu.vue","../src/components/LgModal/LgModal.vue","../src/components/LgProgress/LgProgress.vue","../src/components/LgSelectButton/LgSelectButton.vue","../src/components/LgSwitch/LgSwitch.vue","../src/components/LgTable/LgTable.vue","../src/components/LgTag/LgTag.vue","../src/index.ts"],"sourcesContent":["import { ref, computed, watchEffect, type Ref } from 'vue'\nimport type { LiquidGlassConfig, Vec2 } from '../types'\n\nexport interface UseLiquidGlassOptions extends LiquidGlassConfig {\n  container?: Ref<HTMLElement | undefined>\n  mouseContainer?: Ref<HTMLElement | undefined>\n  globalMousePos?: Ref<Vec2>\n  mouseOffset?: Ref<Vec2>\n}\n\nexport function useLiquidGlass(options: UseLiquidGlassOptions = {}) {\n  const {\n    displacementScale = 70,\n    blurAmount = 0.0625,\n    saturation = 140,\n    aberrationIntensity = 2,\n    elasticity = 0.15,\n    cornerRadius = 999,\n    overLight = false,\n    mode = 'standard',\n    effect = 'liquidGlass',\n    container,\n    mouseContainer,\n    globalMousePos: externalGlobalMousePos,\n    mouseOffset: externalMouseOffset\n  } = options\n\n  const glassRef = ref<HTMLElement>()\n  const isHovered = ref(false)\n  const isActive = ref(false)\n  const glassSize = ref({ width: 270, height: 69 })\n  const internalGlobalMousePos = ref<Vec2>({ x: 0, y: 0 })\n  const internalMouseOffset = ref<Vec2>({ x: 0, y: 0 })\n\n  // Use external mouse position if provided, otherwise use internal\n  const globalMousePos = computed(() =>\n    externalGlobalMousePos?.value || internalGlobalMousePos.value\n  )\n  const mouseOffset = computed(() =>\n    externalMouseOffset?.value || internalMouseOffset.value\n  )\n\n  const handleMouseMove = (e: MouseEvent) => {\n    const targetContainer = mouseContainer?.value || container?.value || glassRef.value\n    if (!targetContainer) return\n\n    const rect = targetContainer.getBoundingClientRect()\n    const centerX = rect.left + rect.width / 2\n    const centerY = rect.top + rect.height / 2\n\n    Object.assign(internalMouseOffset.value, {\n      x: ((e.clientX - centerX) / rect.width) * 100,\n      y: ((e.clientY - centerY) / rect.height) * 100,\n    })\n\n    Object.assign(internalGlobalMousePos.value, {\n      x: e.clientX,\n      y: e.clientY,\n    })\n  }\n\n  // Set up mouse tracking if no external mouse position is provided\n  watchEffect((onCleanup) => {\n    if (externalGlobalMousePos?.value && externalMouseOffset?.value) {\n      return\n    }\n\n    const targetContainer = mouseContainer?.value || container?.value || glassRef.value\n    if (!targetContainer) return\n\n    targetContainer.addEventListener('mousemove', handleMouseMove, { passive: true })\n\n    onCleanup(() => {\n      targetContainer.removeEventListener('mousemove', handleMouseMove)\n    })\n  })\n\n  const calculateDirectionalScale = computed(() => {\n    if (!globalMousePos.value.x || !globalMousePos.value.y || !glassRef.value) {\n      return 'scale(1)'\n    }\n\n    const rect = glassRef.value.getBoundingClientRect()\n    const pillCenterX = rect.left + rect.width / 2\n    const pillCenterY = rect.top + rect.height / 2\n    const pillWidth = glassSize.value.width\n    const pillHeight = glassSize.value.height\n\n    const deltaX = globalMousePos.value.x - pillCenterX\n    const deltaY = globalMousePos.value.y - pillCenterY\n\n    // Calculate distance from mouse to pill edges (not center)\n    const edgeDistanceX = Math.max(0, Math.abs(deltaX) - pillWidth / 2)\n    const edgeDistanceY = Math.max(0, Math.abs(deltaY) - pillHeight / 2)\n    const edgeDistance = Math.sqrt(edgeDistanceX * edgeDistanceX + edgeDistanceY * edgeDistanceY)\n\n    // Activation zone: 200px from edges\n    const activationZone = 200\n\n    // If outside activation zone, no effect\n    if (edgeDistance > activationZone) {\n      return 'scale(1)'\n    }\n\n    // Calculate fade-in factor (1 at edge, 0 at activation zone boundary)\n    const fadeInFactor = 1 - edgeDistance / activationZone\n\n    // Normalize the deltas for direction\n    const centerDistance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n    if (centerDistance === 0) {\n      return 'scale(1)'\n    }\n\n    const normalizedX = deltaX / centerDistance\n    const normalizedY = deltaY / centerDistance\n\n    // Calculate stretch factors with fade-in\n    const stretchIntensity = Math.min(centerDistance / 300, 1) * elasticity * fadeInFactor\n\n    // X-axis scaling: stretch horizontally when moving left/right, compress when moving up/down\n    const scaleX = 1 + Math.abs(normalizedX) * stretchIntensity * 0.3 - Math.abs(normalizedY) * stretchIntensity * 0.15\n\n    // Y-axis scaling: stretch vertically when moving up/down, compress when moving left/right\n    const scaleY = 1 + Math.abs(normalizedY) * stretchIntensity * 0.3 - Math.abs(normalizedX) * stretchIntensity * 0.15\n\n    return `scaleX(${Math.max(0.8, scaleX)}) scaleY(${Math.max(0.8, scaleY)})`\n  })\n\n  const calculateFadeInFactor = computed(() => {\n    if (!globalMousePos.value.x || !globalMousePos.value.y || !glassRef.value) {\n      return 0\n    }\n\n    const rect = glassRef.value.getBoundingClientRect()\n    const pillCenterX = rect.left + rect.width / 2\n    const pillCenterY = rect.top + rect.height / 2\n    const pillWidth = glassSize.value.width\n    const pillHeight = glassSize.value.height\n\n    const edgeDistanceX = Math.max(0, Math.abs(globalMousePos.value.x - pillCenterX) - pillWidth / 2)\n    const edgeDistanceY = Math.max(0, Math.abs(globalMousePos.value.y - pillCenterY) - pillHeight / 2)\n    const edgeDistance = Math.sqrt(edgeDistanceX * edgeDistanceX + edgeDistanceY * edgeDistanceY)\n\n    const activationZone = 200\n    return edgeDistance > activationZone ? 0 : 1 - edgeDistance / activationZone\n  })\n\n  const calculateElasticTranslation = computed(() => {\n    if (!glassRef.value) {\n      return { x: 0, y: 0 }\n    }\n\n    const fadeInFactor = calculateFadeInFactor.value\n    const rect = glassRef.value.getBoundingClientRect()\n    const pillCenterX = rect.left + rect.width / 2\n    const pillCenterY = rect.top + rect.height / 2\n\n    return {\n      x: (globalMousePos.value.x - pillCenterX) * elasticity * 0.1 * fadeInFactor,\n      y: (globalMousePos.value.y - pillCenterY) * elasticity * 0.1 * fadeInFactor,\n    }\n  })\n\n  // Update glass size whenever component mounts or window resizes\n  watchEffect((onCleanup) => {\n    const updateGlassSize = () => {\n      if (glassRef.value) {\n        const rect = glassRef.value.getBoundingClientRect()\n        Object.assign(glassSize.value, { width: rect.width, height: rect.height })\n      }\n    }\n\n    updateGlassSize()\n    window.addEventListener('resize', updateGlassSize, { passive: true })\n\n    onCleanup(() => {\n      window.removeEventListener('resize', updateGlassSize)\n    })\n  })\n\n  const transformStyle = computed(() => {\n    return `translate(calc(-50% + ${calculateElasticTranslation.value.x}px), calc(-50% + ${calculateElasticTranslation.value.y}px)) ${isActive.value ? 'scale(0.96)' : calculateDirectionalScale.value}`\n  })\n\n  const baseStyle = computed(() => {\n    return {\n      transform: transformStyle.value,\n      transition: 'all ease-out 0.2s',\n    }\n  })\n\n  const positionStyles = computed(() => {\n    return {\n      position: 'relative' as const,\n      top: '50%',\n      left: '50%',\n    }\n  })\n\n  const backdropStyle = computed(() => {\n    const isFirefox = window.navigator.userAgent.toLowerCase().includes('firefox')\n    return {\n      filter: isFirefox ? undefined : `url(#liquid-glass-filter-${Date.now()})`,\n      backdropFilter: `blur(${(overLight ? 12 : 4) + blurAmount * 32}px) saturate(${saturation}%)`,\n    }\n  })\n\n  return {\n    // Refs\n    glassRef,\n    isHovered,\n    isActive,\n    glassSize,\n    globalMousePos,\n    mouseOffset,\n\n    // Computed styles\n    calculateDirectionalScale,\n    calculateFadeInFactor,\n    calculateElasticTranslation,\n    transformStyle,\n    baseStyle,\n    positionStyles,\n    backdropStyle,\n\n    // Methods\n    handleMouseMove,\n\n    // Config\n    config: {\n      displacementScale,\n      blurAmount,\n      saturation,\n      aberrationIntensity,\n      elasticity,\n      cornerRadius,\n      overLight,\n      mode,\n      effect\n    }\n  }\n}","import { ref, computed, onMounted, onUnmounted, type Ref } from 'vue'\nimport type { Vec2, MouseTrackingOptions } from '../types'\n\nexport function useMouseTracking(options: MouseTrackingOptions = {}) {\n  const { container, throttle = 16 } = options\n\n  const mousePosition = ref<Vec2>({ x: 0, y: 0 })\n  const isMouseOver = ref(false)\n  const lastUpdateTime = ref(0)\n\n  const throttledUpdate = (callback: () => void) => {\n    const now = Date.now()\n    if (now - lastUpdateTime.value >= throttle) {\n      callback()\n      lastUpdateTime.value = now\n    }\n  }\n\n  const handleMouseMove = (event: MouseEvent) => {\n    throttledUpdate(() => {\n      mousePosition.value = {\n        x: event.clientX,\n        y: event.clientY\n      }\n    })\n  }\n\n  const handleMouseEnter = () => {\n    isMouseOver.value = true\n  }\n\n  const handleMouseLeave = () => {\n    isMouseOver.value = false\n  }\n\n  const getRelativePosition = computed(() => {\n    if (!container?.value) {\n      return { x: 0, y: 0 }\n    }\n\n    const rect = container.value.getBoundingClientRect()\n    const centerX = rect.left + rect.width / 2\n    const centerY = rect.top + rect.height / 2\n\n    return {\n      x: ((mousePosition.value.x - centerX) / rect.width) * 100,\n      y: ((mousePosition.value.y - centerY) / rect.height) * 100\n    }\n  })\n\n  const getDistance = computed(() => {\n    if (!container?.value) {\n      return 0\n    }\n\n    const rect = container.value.getBoundingClientRect()\n    const centerX = rect.left + rect.width / 2\n    const centerY = rect.top + rect.height / 2\n\n    const deltaX = mousePosition.value.x - centerX\n    const deltaY = mousePosition.value.y - centerY\n\n    return Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n  })\n\n  onMounted(() => {\n    const targetElement = container?.value || document.body\n\n    targetElement.addEventListener('mousemove', handleMouseMove, { passive: true })\n    targetElement.addEventListener('mouseenter', handleMouseEnter, { passive: true })\n    targetElement.addEventListener('mouseleave', handleMouseLeave, { passive: true })\n  })\n\n  onUnmounted(() => {\n    const targetElement = container?.value || document.body\n\n    targetElement.removeEventListener('mousemove', handleMouseMove)\n    targetElement.removeEventListener('mouseenter', handleMouseEnter)\n    targetElement.removeEventListener('mouseleave', handleMouseLeave)\n  })\n\n  return {\n    mousePosition,\n    isMouseOver,\n    getRelativePosition,\n    getDistance\n  }\n}","export interface Vec2 {\n  x: number\n  y: number\n}\n\nexport interface ShaderOptions {\n  width: number\n  height: number\n  effect: FragmentShaderType\n  mousePosition?: Vec2\n  time?: number\n}\n\nexport type FragmentShaderType = keyof typeof fragmentShaders\n\nexport const fragmentShaders = {\n  liquidGlass: `\n    precision mediump float;\n    uniform vec2 u_resolution;\n    uniform vec2 u_mouse;\n    uniform float u_time;\n\n    float noise(vec2 p) {\n      return sin(p.x * 10.0) * sin(p.y * 10.0);\n    }\n\n    void main() {\n      vec2 st = gl_FragCoord.xy / u_resolution;\n      vec2 mouse = u_mouse / u_resolution;\n\n      float dist = distance(st, mouse);\n      float effect = 1.0 / (dist * 10.0 + 1.0);\n\n      vec2 distortion = vec2(\n        sin(st.y * 20.0 + u_time) * 0.01,\n        cos(st.x * 20.0 + u_time) * 0.01\n      ) * effect;\n\n      gl_FragColor = vec4(distortion, 0.0, 1.0);\n    }\n  `,\n\n  flowingLiquid: `\n    precision mediump float;\n    uniform vec2 u_resolution;\n    uniform vec2 u_mouse;\n    uniform float u_time;\n\n    void main() {\n      vec2 st = gl_FragCoord.xy / u_resolution;\n      vec2 mouse = u_mouse / u_resolution;\n\n      float wave1 = sin(st.x * 10.0 + u_time * 2.0) * 0.01;\n      float wave2 = cos(st.y * 8.0 + u_time * 1.5) * 0.01;\n\n      vec2 flow = vec2(wave1, wave2);\n      float dist = distance(st, mouse);\n      flow *= (1.0 / (dist * 5.0 + 1.0));\n\n      gl_FragColor = vec4(flow, 0.0, 1.0);\n    }\n  `,\n\n  transparentIce: `\n    precision mediump float;\n    uniform vec2 u_resolution;\n    uniform vec2 u_mouse;\n    uniform float u_time;\n\n    float random(vec2 st) {\n      return fract(sin(dot(st.xy, vec2(12.9898,78.233))) * 43758.5453123);\n    }\n\n    void main() {\n      vec2 st = gl_FragCoord.xy / u_resolution;\n      vec2 mouse = u_mouse / u_resolution;\n\n      vec2 grid = floor(st * 20.0);\n      float noise = random(grid);\n\n      vec2 ice = vec2(noise - 0.5) * 0.02;\n      float dist = distance(st, mouse);\n      ice *= (1.0 / (dist * 3.0 + 1.0));\n\n      gl_FragColor = vec4(ice, 0.0, 1.0);\n    }\n  `,\n\n  unevenGlass: `\n    precision mediump float;\n    uniform vec2 u_resolution;\n    uniform vec2 u_mouse;\n    uniform float u_time;\n\n    void main() {\n      vec2 st = gl_FragCoord.xy / u_resolution;\n      vec2 mouse = u_mouse / u_resolution;\n\n      float bump1 = sin(st.x * 15.0) * cos(st.y * 15.0) * 0.015;\n      float bump2 = sin(distance(st, vec2(0.5, 0.5)) * 20.0 - u_time) * 0.01;\n\n      vec2 uneven = vec2(bump1 + bump2, bump1 - bump2);\n      float dist = distance(st, mouse);\n      uneven *= (1.0 / (dist * 8.0 + 1.0));\n\n      gl_FragColor = vec4(uneven, 0.0, 1.0);\n    }\n  `,\n\n  mosaicGlass: `\n    precision mediump float;\n    uniform vec2 u_resolution;\n    uniform vec2 u_mouse;\n    uniform float u_time;\n\n    void main() {\n      vec2 st = gl_FragCoord.xy / u_resolution;\n      vec2 mouse = u_mouse / u_resolution;\n\n      vec2 mosaic = floor(st * 10.0) / 10.0;\n      vec2 distortion = mosaic - st;\n\n      float dist = distance(mosaic, mouse);\n      distortion *= (1.0 / (dist * 5.0 + 1.0)) * 0.1;\n\n      gl_FragColor = vec4(distortion, 0.0, 1.0);\n    }\n  `\n} as const\n\nexport class ShaderDisplacementGenerator {\n  private canvas: HTMLCanvasElement\n  private gl: WebGLRenderingContext | null\n  private program: WebGLProgram | null = null\n  private startTime = Date.now()\n\n  constructor(private options: ShaderOptions) {\n    this.canvas = document.createElement('canvas')\n    this.canvas.width = options.width\n    this.canvas.height = options.height\n\n    this.gl = (this.canvas.getContext('webgl') || this.canvas.getContext('experimental-webgl')) as WebGLRenderingContext | null\n\n    if (!this.gl) {\n      throw new Error('WebGL not supported')\n    }\n\n    this.initShaders()\n  }\n\n  private initShaders() {\n    if (!this.gl) return\n\n    const vertexShaderSource = `\n      attribute vec2 a_position;\n      void main() {\n        gl_Position = vec4(a_position, 0.0, 1.0);\n      }\n    `\n\n    const fragmentShaderSource = fragmentShaders[this.options.effect]\n\n    const vertexShader = this.createShader(this.gl.VERTEX_SHADER, vertexShaderSource)\n    const fragmentShader = this.createShader(this.gl.FRAGMENT_SHADER, fragmentShaderSource)\n\n    if (!vertexShader || !fragmentShader) {\n      throw new Error('Failed to create shaders')\n    }\n\n    this.program = this.gl.createProgram()\n    if (!this.program) {\n      throw new Error('Failed to create program')\n    }\n\n    this.gl.attachShader(this.program, vertexShader)\n    this.gl.attachShader(this.program, fragmentShader)\n    this.gl.linkProgram(this.program)\n\n    if (!this.gl.getProgramParameter(this.program, this.gl.LINK_STATUS)) {\n      throw new Error('Failed to link program')\n    }\n\n    // Set up geometry\n    const positions = new Float32Array([\n      -1, -1,\n       1, -1,\n      -1,  1,\n       1,  1,\n    ])\n\n    const positionBuffer = this.gl.createBuffer()\n    this.gl.bindBuffer(this.gl.ARRAY_BUFFER, positionBuffer)\n    this.gl.bufferData(this.gl.ARRAY_BUFFER, positions, this.gl.STATIC_DRAW)\n\n    const positionLocation = this.gl.getAttribLocation(this.program, 'a_position')\n    this.gl.enableVertexAttribArray(positionLocation)\n    this.gl.vertexAttribPointer(positionLocation, 2, this.gl.FLOAT, false, 0, 0)\n  }\n\n  private createShader(type: number, source: string): WebGLShader | null {\n    if (!this.gl) return null\n\n    const shader = this.gl.createShader(type)\n    if (!shader) return null\n\n    this.gl.shaderSource(shader, source)\n    this.gl.compileShader(shader)\n\n    if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n      console.error('Shader compilation error:', this.gl.getShaderInfoLog(shader))\n      this.gl.deleteShader(shader)\n      return null\n    }\n\n    return shader\n  }\n\n  updateShader(mousePosition?: Vec2): Promise<string> {\n    return new Promise((resolve, reject) => {\n      if (!this.gl || !this.program) {\n        reject(new Error('WebGL not initialized'))\n        return\n      }\n\n      this.gl.useProgram(this.program)\n\n      // Set uniforms\n      const resolutionLocation = this.gl.getUniformLocation(this.program, 'u_resolution')\n      this.gl.uniform2f(resolutionLocation, this.options.width, this.options.height)\n\n      const mouseLocation = this.gl.getUniformLocation(this.program, 'u_mouse')\n      const mouse = mousePosition || { x: this.options.width / 2, y: this.options.height / 2 }\n      this.gl.uniform2f(mouseLocation, mouse.x, mouse.y)\n\n      const timeLocation = this.gl.getUniformLocation(this.program, 'u_time')\n      const currentTime = (Date.now() - this.startTime) / 1000\n      this.gl.uniform1f(timeLocation, currentTime)\n\n      // Draw\n      this.gl.viewport(0, 0, this.options.width, this.options.height)\n      this.gl.drawArrays(this.gl.TRIANGLE_STRIP, 0, 4)\n\n      // Get image data\n      const imageData = new Uint8Array(this.options.width * this.options.height * 4)\n      this.gl.readPixels(0, 0, this.options.width, this.options.height, this.gl.RGBA, this.gl.UNSIGNED_BYTE, imageData)\n\n      // Create canvas and put image data\n      const canvas = document.createElement('canvas')\n      canvas.width = this.options.width\n      canvas.height = this.options.height\n      const ctx = canvas.getContext('2d')\n\n      if (ctx) {\n        const clampedArray = new Uint8ClampedArray(imageData)\n        const imgData = new ImageData(clampedArray, this.options.width, this.options.height)\n        ctx.putImageData(imgData, 0, 0)\n        resolve(canvas.toDataURL())\n      } else {\n        reject(new Error('Failed to get canvas context'))\n      }\n    })\n  }\n\n  destroy(): void {\n    if (this.gl && this.program) {\n      this.gl.deleteProgram(this.program)\n    }\n  }\n\n  getCurrentTime(): number {\n    return (Date.now() - this.startTime) / 1000\n  }\n}","export interface AnimationOptions {\n  duration?: number\n  easing?: (t: number) => number\n  delay?: number\n}\n\nexport interface SpringOptions {\n  tension?: number\n  friction?: number\n  mass?: number\n}\n\n// Easing functions\nexport const easings = {\n  linear: (t: number): number => t,\n\n  easeInQuad: (t: number): number => t * t,\n  easeOutQuad: (t: number): number => t * (2 - t),\n  easeInOutQuad: (t: number): number => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t,\n\n  easeInCubic: (t: number): number => t * t * t,\n  easeOutCubic: (t: number): number => (--t) * t * t + 1,\n  easeInOutCubic: (t: number): number => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n\n  easeInExpo: (t: number): number => t === 0 ? 0 : Math.pow(2, 10 * t - 10),\n  easeOutExpo: (t: number): number => t === 1 ? 1 : 1 - Math.pow(2, -10 * t),\n  easeInOutExpo: (t: number): number => {\n    if (t === 0) return 0\n    if (t === 1) return 1\n    if (t < 0.5) return Math.pow(2, 20 * t - 10) / 2\n    return (2 - Math.pow(2, -20 * t + 10)) / 2\n  },\n\n  easeInBack: (t: number): number => {\n    const c1 = 1.70158\n    const c3 = c1 + 1\n    return c3 * t * t * t - c1 * t * t\n  },\n  easeOutBack: (t: number): number => {\n    const c1 = 1.70158\n    const c3 = c1 + 1\n    return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2)\n  },\n  easeInOutBack: (t: number): number => {\n    const c1 = 1.70158\n    const c2 = c1 * 1.525\n    return t < 0.5\n      ? (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2\n      : (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2\n  },\n\n  easeOutElastic: (t: number): number => {\n    const c4 = (2 * Math.PI) / 3\n    return t === 0\n      ? 0\n      : t === 1\n      ? 1\n      : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1\n  },\n\n  easeOutBounce: (t: number): number => {\n    const n1 = 7.5625\n    const d1 = 2.75\n\n    if (t < 1 / d1) {\n      return n1 * t * t\n    } else if (t < 2 / d1) {\n      return n1 * (t -= 1.5 / d1) * t + 0.75\n    } else if (t < 2.5 / d1) {\n      return n1 * (t -= 2.25 / d1) * t + 0.9375\n    } else {\n      return n1 * (t -= 2.625 / d1) * t + 0.984375\n    }\n  }\n}\n\n// Tween animation function\nexport function tween<T extends Record<string, number>>(\n  from: T,\n  to: T,\n  onUpdate: (values: T) => void,\n  options: AnimationOptions = {}\n): Promise<void> {\n  return new Promise((resolve) => {\n    const {\n      duration = 300,\n      easing = easings.easeOutQuad,\n      delay = 0\n    } = options\n\n    const startTime = performance.now() + delay\n    const initialValues = { ...from }\n\n    function animate(currentTime: number) {\n      if (currentTime < startTime) {\n        requestAnimationFrame(animate)\n        return\n      }\n\n      const elapsed = currentTime - startTime\n      const progress = Math.min(elapsed / duration, 1)\n      const easedProgress = easing(progress)\n\n      const values = {} as T\n      for (const key in to) {\n        if (key in from) {\n          values[key] = (from[key] + (to[key] - from[key]) * easedProgress) as T[Extract<keyof T, string>]\n        }\n      }\n\n      onUpdate(values)\n\n      if (progress < 1) {\n        requestAnimationFrame(animate)\n      } else {\n        resolve()\n      }\n    }\n\n    requestAnimationFrame(animate)\n  })\n}\n\n// Spring animation function\nexport function spring<T extends Record<string, number>>(\n  from: T,\n  to: T,\n  onUpdate: (values: T) => void,\n  options: SpringOptions = {}\n): Promise<void> {\n  return new Promise((resolve) => {\n    const {\n      tension = 170,\n      friction = 26,\n      mass = 1\n    } = options\n\n    const initialValues = { ...from }\n    const velocities = {} as T\n    const accelerations = {} as T\n\n    for (const key in to) {\n      if (key in from) {\n        velocities[key] = 0 as T[Extract<keyof T, string>]\n        accelerations[key] = 0 as T[Extract<keyof T, string>]\n      }\n    }\n\n    let lastTime = performance.now()\n\n    function animate(currentTime: number) {\n      const deltaTime = Math.min((currentTime - lastTime) / 1000, 0.1) // Cap delta time\n      lastTime = currentTime\n\n      let allSettled = true\n\n      const values = {} as T\n\n      for (const key in to) {\n        if (key in from) {\n          // Spring physics: F = -kx - cv\n          const displacement = initialValues[key] - to[key]\n          const springForce = -tension * displacement\n          const dampingForce = -friction * velocities[key]\n          const totalForce = springForce + dampingForce\n\n          // F = ma, so a = F/m\n          accelerations[key] = (totalForce / mass) as T[Extract<keyof T, string>]\n\n          // Update velocity and position\n          velocities[key] = (velocities[key] + accelerations[key] * deltaTime) as T[Extract<keyof T, string>]\n          initialValues[key] = (initialValues[key] + velocities[key] * deltaTime) as T[Extract<keyof T, string>]\n\n          values[key] = initialValues[key]\n\n          // Check if settled\n          const isSettled = Math.abs(velocities[key]) < 0.01 && Math.abs(displacement) < 0.01\n          if (!isSettled) {\n            allSettled = false\n          }\n        }\n      }\n\n      onUpdate(values)\n\n      if (!allSettled) {\n        requestAnimationFrame(animate)\n      } else {\n        onUpdate(to)\n        resolve()\n      }\n    }\n\n    requestAnimationFrame(animate)\n  })\n}\n\n// Throttle function\nexport function throttle<T extends (...args: any[]) => any>(\n  func: T,\n  delay: number\n): (...args: Parameters<T>) => void {\n  let timeoutId: number | null = null\n  let lastExecTime = 0\n\n  return (...args: Parameters<T>) => {\n    const currentTime = Date.now()\n\n    if (currentTime - lastExecTime > delay) {\n      func(...args)\n      lastExecTime = currentTime\n    } else {\n      if (timeoutId) {\n        clearTimeout(timeoutId)\n      }\n      timeoutId = window.setTimeout(() => {\n        func(...args)\n        lastExecTime = Date.now()\n        timeoutId = null\n      }, delay - (currentTime - lastExecTime))\n    }\n  }\n}\n\n// Debounce function\nexport function debounce<T extends (...args: any[]) => any>(\n  func: T,\n  delay: number\n): (...args: Parameters<T>) => void {\n  let timeoutId: number | null = null\n\n  return (...args: Parameters<T>) => {\n    if (timeoutId) {\n      clearTimeout(timeoutId)\n    }\n    timeoutId = window.setTimeout(() => {\n      func(...args)\n      timeoutId = null\n    }, delay)\n  }\n}\n\n// Lerp function\nexport function lerp(start: number, end: number, factor: number): number {\n  return start + (end - start) * factor\n}\n\n// Clamp function\nexport function clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max)\n}\n\n// Map function\nexport function map(\n  value: number,\n  inMin: number,\n  inMax: number,\n  outMin: number,\n  outMax: number\n): number {\n  return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}","<template>\n  <component\n    :is=\"tag\"\n    ref=\"glassRef\"\n    :class=\"buttonClasses\"\n    :style=\"buttonStyle\"\n    :type=\"type\"\n    :disabled=\"disabled\"\n    @click=\"handleClick\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @mousedown=\"handleMouseDown\"\n    @mouseup=\"handleMouseUp\"\n  >\n    <!-- Button content -->\n    <div class=\"lg-button__content\">\n      <slot v-if=\"!loading\" name=\"icon\" />\n      <span v-if=\"$slots.default && !loading\" class=\"lg-button__text\">\n        <slot />\n      </span>\n      <div v-if=\"loading\" class=\"lg-button__spinner\"></div>\n    </div>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type CSSProperties, onMounted } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { ButtonProps } from '../../types'\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n  tag: 'button',\n  type: 'button',\n  displacementScale: 70,\n  blurAmount: 0.0625,\n  saturation: 140,\n  aberrationIntensity: 2,\n  elasticity: 0.15,\n  cornerRadius: 16,\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  loading: false,\n  overLight: false,\n  mode: 'standard',\n  effect: 'liquidGlass',\n  width: undefined,\n  height: undefined,\n  style: undefined,\n  class: undefined\n})\n\nconst emit = defineEmits<{\n  click: [event: MouseEvent]\n}>()\n\nconst glassRef = ref<HTMLElement>()\n\ninterface ButtonVariantTokens {\n  surface: string\n  surfaceAlt: string\n  border: string\n  borderSoft: string\n  text: string\n  textSoft: string\n  textMuted: string\n  highlight: string\n  glow: string\n  sheen: string\n  subtle: string\n  shadow: string\n  shadowHover?: string\n}\n\n// Base colors used to derive liquid glass palettes for button variants\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    deep: '#1d4ed8',\n    text: '#e2e8f0'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    deep: '#475569',\n    text: '#e2e8f0'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    deep: '#047857',\n    text: '#ecfdf5'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    deep: '#b45309',\n    text: '#fffbeb'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    deep: '#b91c1c',\n    text: '#fee2e2'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    deep: '#0e7490',\n    text: '#cffafe'\n  }\n} as const\n\nconst NEUTRAL_TEXT_BASE = '#0f172a'\n\nfunction hexToRgb(hex: string) {\n  let normalized = hex.replace('#', '')\n\n  if (normalized.length === 3) {\n    normalized = normalized\n      .split('')\n      .map((char) => char + char)\n      .join('')\n  }\n\n  const bigint = parseInt(normalized, 16)\n\n  return {\n    r: (bigint >> 16) & 255,\n    g: (bigint >> 8) & 255,\n    b: bigint & 255\n  }\n}\n\nfunction rgba(hex: string, alpha: number) {\n  const { r, g, b } = hexToRgb(hex)\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nfunction getVariantTokens(variant: ButtonProps['variant'], overLight: boolean): ButtonVariantTokens {\n  // Derive a cohesive palette for the button based on variant & lighting\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  if (overLight) {\n    return {\n      surface: 'rgba(255, 255, 255, 0.88)',\n      surfaceAlt: rgba(palette.base, 0.16),\n      border: rgba(palette.base, 0.38),\n      borderSoft: 'rgba(255, 255, 255, 0.65)',\n      text: palette.deep,\n      textSoft: rgba(palette.deep, 0.82),\n      textMuted: rgba(palette.deep, 0.72),\n      highlight: rgba(palette.accent, 0.24),\n      glow: rgba(palette.base, 0.26),\n      sheen: `linear-gradient(135deg,\n        rgba(255, 255, 255, 0.65) 0%,\n        rgba(255, 255, 255, 0.35) 38%,\n        transparent 65%,\n        rgba(255, 255, 255, 0.45) 100%)`,\n      subtle: rgba(palette.base, 0.08),\n      shadow: `0 12px 32px ${rgba('#0f172a', 0.15)}, 0 6px 16px ${rgba('#0f172a', 0.1)}, inset 0 1px 0 rgba(255, 255, 255, 0.6)`,\n      shadowHover: `0 20px 48px ${rgba('#0f172a', 0.22)}, 0 10px 28px ${rgba('#0f172a', 0.14)}, inset 0 1px 0 rgba(255, 255, 255, 0.7)`\n    }\n  }\n\n  return {\n    surface: rgba(palette.base, 0.38),\n    surfaceAlt: rgba(palette.accent, 0.46),\n    border: rgba(palette.accent, 0.58),\n    borderSoft: 'rgba(255, 255, 255, 0.35)',\n    text: rgba(NEUTRAL_TEXT_BASE, 0.94),\n    textSoft: rgba(NEUTRAL_TEXT_BASE, 0.78),\n    textMuted: rgba(NEUTRAL_TEXT_BASE, 0.62),\n    highlight: rgba(palette.accent, 0.55),\n    glow: rgba(palette.base, 0.48),\n    sheen: `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.5) 0%,\n      rgba(255, 255, 255, 0.28) 40%,\n      transparent 60%,\n      rgba(255, 255, 255, 0.35) 100%)`,\n    subtle: 'rgba(255, 255, 255, 0.08)',\n    shadow: `0 16px 38px ${rgba('#0f172a', 0.22)}, 0 8px 20px ${rgba('#0f172a', 0.14)}, inset 0 1px 0 rgba(255, 255, 255, 0.4)`,\n    shadowHover: `0 28px 56px ${rgba('#0f172a', 0.32)}, 0 14px 34px ${rgba('#0f172a', 0.2)}, inset 0 1px 0 rgba(255, 255, 255, 0.5)`\n  }\n}\n\nconst variantTokens = computed(() => getVariantTokens(props.variant ?? 'primary', props.overLight))\n\nconst {\n  isHovered,\n  isActive,\n  calculateElasticTranslation\n} = useLiquidGlass({\n  container: glassRef,\n  displacementScale: props.displacementScale,\n  blurAmount: props.blurAmount,\n  saturation: props.saturation,\n  aberrationIntensity: props.aberrationIntensity,\n  elasticity: props.elasticity,\n  cornerRadius: props.cornerRadius,\n  overLight: props.overLight,\n  mode: props.mode,\n  effect: props.effect\n})\n\nconst buttonClasses = computed(() => [\n  'lg-button',\n  'lg-component',\n  'lg-glass',\n  'lg-liquid',\n  `lg-button--${props.variant}`,\n  `lg-size-${props.size}`,\n  props.class,\n  {\n    'lg-disabled': props.disabled,\n    'lg-loading': props.loading,\n    'lg-focus-visible': !props.disabled\n  }\n])\n\nconst buttonStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n  const tokens = variantTokens.value\n\n  const translation = calculateElasticTranslation.value\n  const hoverLift = isHovered.value && !props.disabled ? -2 : 0\n  const translateY = translation.y + hoverLift\n  const scale = isHovered.value && !props.disabled ? 1.02 : 1\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    '--lg-button-text': tokens.text,\n    '--lg-button-text-soft': tokens.textSoft,\n    background: `linear-gradient(135deg, ${tokens.surface} 0%, ${tokens.surfaceAlt} 100%)`,\n    border: '1px solid rgba(0, 0, 0, 0.1)',\n    color: tokens.text,\n    boxShadow: isHovered.value && !props.disabled ? '0 8px 25px rgba(0, 0, 0, 0.15)' : '0 4px 15px rgba(0, 0, 0, 0.1)',\n    backdropFilter: 'blur(10px) saturate(120%)',\n    WebkitBackdropFilter: 'blur(10px) saturate(120%)',\n    position: 'relative',\n    zIndex: 1,\n    transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n    transform: `translate3d(${translation.x}px, ${translateY}px, 0) scale(${scale})`,\n    cursor: props.disabled ? 'not-allowed' : 'pointer',\n    opacity: props.disabled ? 0.6 : 1\n  } as CSSProperties\n})\n\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      borderRadius: '6px',\n      padding: '0.5rem 0.75rem',\n      fontSize: '0.8rem',\n      minHeight: '32px'\n    },\n    medium: {\n      borderRadius: '8px',\n      padding: '0.625rem 1rem',\n      fontSize: '0.875rem',\n      minHeight: '40px'\n    },\n    large: {\n      borderRadius: '10px',\n      padding: '0.75rem 1.25rem',\n      fontSize: '0.95rem',\n      minHeight: '48px'\n    }\n  }\n\n  const baseSize: CSSProperties = {\n    ...(sizes[props.size as keyof typeof sizes] || sizes.medium),\n    minWidth: '80px',\n    display: 'inline-flex',\n    alignItems: 'center',\n    justifyContent: 'center'\n  }\n\n  if (typeof props.width === 'number') {\n    baseSize.width = `${props.width}px`\n  } else if (typeof props.width === 'string') {\n    baseSize.width = props.width\n  }\n\n  if (typeof props.height === 'number') {\n    baseSize.height = `${props.height}px`\n  } else if (typeof props.height === 'string') {\n    baseSize.height = props.height\n  }\n\n  // Override border radius if explicitly set\n  if (props.cornerRadius !== undefined) {\n    baseSize.borderRadius = `${props.cornerRadius}px`\n  }\n\n  return baseSize\n}\n\nfunction handleClick(event: MouseEvent) {\n  if (!props.disabled && !props.loading) {\n    emit('click', event)\n    props.onClick?.(event)\n  }\n}\n\nfunction handleMouseEnter() {\n  if (!props.disabled && !props.loading) {\n    isHovered.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  isHovered.value = false\n  isActive.value = false\n}\n\nfunction handleMouseDown() {\n  if (!props.disabled && !props.loading) {\n    isActive.value = true\n  }\n}\n\nfunction handleMouseUp() {\n  isActive.value = false\n}\n\nonMounted(() => {\n  console.log('LgButton mounted with props:', props)\n  console.log('Glass ref:', glassRef.value)\n  console.log('Button classes:', buttonClasses.value)\n  console.log('Button style:', buttonStyle.value)\n})\n</script>\n\n<style>\n.lg-button {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.5rem;\n  font-weight: 500;\n  text-align: center;\n  text-decoration: none;\n  cursor: pointer;\n  user-select: none;\n  border-radius: var(--lg-border-radius, 8px);\n  padding: 0.5rem 1rem;\n  color: var(--lg-button-text, #0f172a);\n  outline: none;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  overflow: hidden;\n  background: rgba(255, 255, 255, 0.8);\n  backdrop-filter: blur(10px);\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  min-height: 40px;\n  min-width: 80px;\n}\n\n.lg-button::-moz-focus-inner {\n  border: none;\n  padding: 0;\n  margin: 0;\n}\n\n.lg-button:focus {\n  outline: none;\n}\n\n.lg-button.lg-liquid {\n  overflow: hidden;\n}\n\n.lg-button:focus-visible {\n  outline: none;\n  box-shadow: 0 0 0 2px var(--lg-button-highlight, var(--lg-primary, #3b82f6));\n}\n\n\n.lg-button:disabled,\n.lg-button.lg-disabled {\n  opacity: 0.55;\n  pointer-events: none;\n  filter: saturate(0.75);\n}\n\n.lg-button__content {\n  position: relative;\n  z-index: 1;\n  color: inherit;\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.5rem;\n}\n\n.lg-button__text {\n  white-space: nowrap;\n  color: var(--lg-button-text-soft, rgba(15, 23, 42, 0.78));\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  font-weight: 500;\n}\n\n.lg-button:hover .lg-button__text {\n  color: var(--lg-button-text, #0f172a);\n  font-weight: 600;\n}\n\n.lg-button__spinner {\n  width: 1rem;\n  height: 1rem;\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.lg-button__spinner::before {\n  content: '';\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  border: 2px solid currentColor;\n  border-top: 2px solid transparent;\n  border-radius: 50%;\n  animation: lg-button-spin 0.8s linear infinite;\n  opacity: 0.7;\n}\n\n.lg-button__spinner::after {\n  content: '';\n  position: absolute;\n  width: 60%;\n  height: 60%;\n  background: radial-gradient(circle, currentColor 0%, rgba(255,255,255,0.3) 70%, transparent 100%);\n  border-radius: 50%;\n  animation: lg-button-pulse 0.6s ease-in-out infinite;\n  box-shadow: 0 0 10px currentColor;\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  --lg-blur-amount: 6px;\n}\n\n.lg-size-small .lg-button__content {\n  padding: 0.3rem 0.6rem;\n  font-size: 0.8rem;\n}\n\n.lg-size-medium {\n  --lg-blur-amount: 8px;\n}\n\n.lg-size-medium .lg-button__content {\n  padding: 0.4rem 0.8rem;\n  font-size: 0.875rem;\n}\n\n.lg-size-large {\n  --lg-blur-amount: 10px;\n}\n\n.lg-size-large .lg-button__content {\n  padding: 0.5rem 1rem;\n  font-size: 0.95rem;\n}\n\n/* Variant-specific styles */\n.lg-button--primary {\n  --lg-primary: #3b82f6;\n}\n\n.lg-button--secondary {\n  --lg-primary: #64748b;\n}\n\n.lg-button--success {\n  --lg-primary: #10b981;\n}\n\n.lg-button--warning {\n  --lg-primary: #f59e0b;\n}\n\n.lg-button--error {\n  --lg-primary: #ef4444;\n}\n\n.lg-button--info {\n  --lg-primary: #06b6d4;\n}\n\n/* Animations */\n@keyframes lg-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes lg-button-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes lg-button-pulse {\n  0%, 100% {\n    transform: scale(0.6);\n    opacity: 0.5;\n    filter: blur(1px);\n  }\n  50% {\n    transform: scale(1.2);\n    opacity: 1;\n    filter: blur(0px);\n  }\n}\n\n@keyframes lg-button-liquid-flow {\n  0%, 100% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n}\n\n@keyframes lg-button-glow-pulse {\n  0%, 100% {\n    opacity: 0.6;\n    transform: scale(1);\n  }\n  50% {\n    opacity: 0.9;\n    transform: scale(1.08);\n  }\n}\n\n/* Dark theme support */\n[data-theme=\"dark\"] .lg-button {\n  --lg-button-text: rgba(248, 250, 252, 0.96);\n  --lg-button-text-soft: rgba(226, 232, 240, 0.82);\n  --lg-button-text-muted: rgba(148, 163, 184, 0.72);\n  color: var(--lg-button-text, rgba(248, 250, 252, 0.96));\n}\n</style>\n","<template>\n  <div\n    ref=\"glassRef\"\n    :class=\"cardClasses\"\n    :style=\"cardStyle\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n  >\n    <!-- Liquid glass effect background -->\n    <div class=\"lg-card__liquid\" :style=\"liquidStyle\"></div>\n\n    <!-- Card border glow -->\n    <div class=\"lg-card__border\" :style=\"borderStyle\"></div>\n\n    <!-- Dynamic light flow effect -->\n    <div class=\"lg-card__light-flow\" :style=\"lightFlowStyle\"></div>\n\n    <!-- Card content -->\n    <div class=\"lg-card__content\">\n      <header v-if=\"title || $slots.header\" class=\"lg-card__header\">\n        <slot name=\"header\">\n          <h3 v-if=\"title\" class=\"lg-card__title\">{{ title }}</h3>\n          <p v-if=\"subtitle\" class=\"lg-card__subtitle\">{{ subtitle }}</p>\n        </slot>\n      </header>\n\n      <main class=\"lg-card__body\">\n        <slot />\n      </main>\n\n      <footer v-if=\"$slots.footer\" class=\"lg-card__footer\">\n        <slot name=\"footer\" />\n      </footer>\n    </div>\n\n    <!-- Hover effect overlay -->\n    <div v-if=\"clickable\" class=\"lg-card__hover-overlay\" :style=\"hoverOverlayStyle\"></div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type CSSProperties } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { CardProps } from '../../types'\n\nconst props = withDefaults(defineProps<CardProps>(), {\n  displacementScale: 70,\n  blurAmount: 0.0625,\n  saturation: 140,\n  aberrationIntensity: 2,\n  elasticity: 0.15,\n  cornerRadius: 16,\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  loading: false,\n  overLight: false,\n  padding: '1.5rem',\n  shadow: true,\n  mode: 'standard',\n  effect: 'liquidGlass',\n  title: undefined,\n  subtitle: undefined,\n  width: undefined,\n  height: undefined,\n  style: undefined,\n  class: undefined,\n  onClick: undefined\n})\n\nconst emit = defineEmits<{\n  click: [event: MouseEvent]\n}>()\n\nconst glassRef = ref<HTMLElement>()\n\ninterface CardVariantTokens {\n  surface: string\n  surfaceAlt: string\n  border: string\n  borderSoft: string\n  text: string\n  textSoft: string\n  textMuted: string\n  highlight: string\n  glow: string\n  sheen: string\n  subtle: string\n  shadow: string\n  shadowHover?: string\n}\n\n// Base colors used to derive liquid glass palettes for card variants\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    deep: '#1d4ed8',\n    text: '#e2e8f0'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    deep: '#475569',\n    text: '#e2e8f0'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    deep: '#047857',\n    text: '#ecfdf5'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    deep: '#b45309',\n    text: '#fffbeb'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    deep: '#b91c1c',\n    text: '#fee2e2'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    deep: '#0e7490',\n    text: '#cffafe'\n  }\n} as const\n\nconst NEUTRAL_TEXT_BASE = '#0f172a'\n\nfunction hexToRgb(hex: string) {\n  let normalized = hex.replace('#', '')\n\n  if (normalized.length === 3) {\n    normalized = normalized\n      .split('')\n      .map((char) => char + char)\n      .join('')\n  }\n\n  const bigint = parseInt(normalized, 16)\n\n  return {\n    r: (bigint >> 16) & 255,\n    g: (bigint >> 8) & 255,\n    b: bigint & 255\n  }\n}\n\nfunction rgba(hex: string, alpha: number) {\n  const { r, g, b } = hexToRgb(hex)\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nfunction getVariantTokens(variant: CardProps['variant'], overLight: boolean): CardVariantTokens {\n  // Derive a cohesive palette for the card based on variant & lighting\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  if (overLight) {\n    return {\n      surface: 'rgba(255, 255, 255, 0.92)',\n      surfaceAlt: rgba(palette.base, 0.12),\n      border: rgba(palette.base, 0.32),\n      borderSoft: 'rgba(255, 255, 255, 0.7)',\n      text: palette.deep,\n      textSoft: rgba(palette.deep, 0.82),\n      textMuted: rgba(palette.deep, 0.72),\n      highlight: rgba(palette.accent, 0.22),\n      glow: rgba(palette.base, 0.24),\n      sheen: `linear-gradient(135deg,\n        rgba(255, 255, 255, 0.7) 0%,\n        rgba(255, 255, 255, 0.4) 38%,\n        transparent 65%,\n        rgba(255, 255, 255, 0.5) 100%)`,\n      subtle: rgba(palette.base, 0.06),\n      shadow: `0 16px 40px ${rgba('#0f172a', 0.12)}, 0 8px 20px ${rgba('#0f172a', 0.08)}, inset 0 1px 0 rgba(255, 255, 255, 0.7)`,\n      shadowHover: `0 24px 56px ${rgba('#0f172a', 0.18)}, 0 12px 32px ${rgba('#0f172a', 0.12)}, inset 0 1px 0 rgba(255, 255, 255, 0.8)`\n    }\n  }\n\n  return {\n    surface: rgba(palette.base, 0.32),\n    surfaceAlt: rgba(palette.accent, 0.40),\n    border: rgba(palette.accent, 0.52),\n    borderSoft: 'rgba(255, 255, 255, 0.38)',\n    text: rgba(NEUTRAL_TEXT_BASE, 0.94),\n    textSoft: rgba(NEUTRAL_TEXT_BASE, 0.78),\n    textMuted: rgba(NEUTRAL_TEXT_BASE, 0.62),\n    highlight: rgba(palette.accent, 0.48),\n    glow: rgba(palette.base, 0.42),\n    sheen: `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.52) 0%,\n      rgba(255, 255, 255, 0.30) 40%,\n      transparent 60%,\n      rgba(255, 255, 255, 0.38) 100%)`,\n    subtle: 'rgba(255, 255, 255, 0.10)',\n    shadow: `0 20px 48px ${rgba('#0f172a', 0.18)}, 0 10px 24px ${rgba('#0f172a', 0.12)}, inset 0 1px 0 rgba(255, 255, 255, 0.5)`,\n    shadowHover: `0 32px 64px ${rgba('#0f172a', 0.26)}, 0 16px 40px ${rgba('#0f172a', 0.16)}, inset 0 1px 0 rgba(255, 255, 255, 0.6)`\n  }\n}\n\nconst variantTokens = computed(() => getVariantTokens(props.variant ?? 'primary', props.overLight))\n\nconst {\n  isHovered,\n  isActive,\n  backdropStyle,\n  transformStyle,\n  calculateElasticTranslation,\n  mouseOffset\n} = useLiquidGlass({\n  container: glassRef,\n  displacementScale: props.displacementScale,\n  blurAmount: props.blurAmount,\n  saturation: props.saturation,\n  aberrationIntensity: props.aberrationIntensity,\n  elasticity: props.elasticity,\n  cornerRadius: props.cornerRadius,\n  overLight: props.overLight,\n  mode: props.mode,\n  effect: props.effect\n})\n\nconst clickable = computed(() => !props.disabled && !props.loading && !!props.onClick)\n\nconst cardClasses = computed(() => [\n  'lg-card',\n  'lg-component',\n  'lg-glass',\n  'lg-liquid',\n  `lg-card--${props.variant}`,\n  `lg-size-${props.size}`,\n  props.class,\n  {\n    'lg-disabled': props.disabled,\n    'lg-loading': props.loading,\n    'lg-card--clickable': clickable.value,\n    'lg-card--shadow': props.shadow\n  }\n])\n\nconst cardStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n  const tokens = variantTokens.value\n\n  const translation = calculateElasticTranslation.value\n  const hoverLift = 0 // 移除悬停上移效果\n  const translateY = translation.y + hoverLift\n  const scale = 1 // 移除悬停缩放效果\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    '--lg-card-text': tokens.text,\n    '--lg-card-text-soft': tokens.textSoft,\n    '--lg-card-text-muted': tokens.textMuted,\n    '--lg-card-highlight': tokens.highlight,\n    '--lg-card-glow': tokens.glow,\n    '--lg-card-sheen': tokens.sheen,\n    '--lg-card-subtle': tokens.subtle,\n    '--lg-card-border-soft': tokens.borderSoft,\n    background: `linear-gradient(135deg, ${tokens.surface} 0%, ${tokens.surfaceAlt} 100%)`,\n    border: `1px solid ${tokens.border}`,\n    color: tokens.text,\n    padding: props.padding,\n    boxShadow: props.shadow ? tokens.shadow : 'none', // 移除悬停时的阴影变化\n    backdropFilter: 'blur(18px) saturate(160%)',\n    WebkitBackdropFilter: 'blur(18px) saturate(160%)',\n    position: 'relative',\n    zIndex: 5,\n    transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n    transform: `translate3d(${translation.x}px, ${translateY}px, 0) scale(${scale})`,\n    cursor: clickable.value ? 'pointer' : 'default',\n    willChange: 'transform'\n  } as CSSProperties\n})\n\nconst liquidStyle = computed(() => ({\n  background: variantTokens.value.sheen,\n  opacity: 0.25, // 移除悬停时的透明度变化\n  transform: `translate3d(${calculateElasticTranslation.value.x * 0.4}px, ${calculateElasticTranslation.value.y * 0.2}px, 0)`,\n  transition: 'opacity 0.35s ease, transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)'\n}))\n\nconst borderStyle = computed(() => ({\n  background: `radial-gradient(circle at 50% 0%,\n    ${variantTokens.value.borderSoft} 0%,\n    ${variantTokens.value.border} 50%,\n    transparent 100%)`,\n  opacity: 0.3 // 移除悬停时的透明度变化\n}))\n\nconst lightFlowStyle = computed(() => {\n  const tokens = variantTokens.value\n  const angle = 135 + calculateElasticTranslation.value.x * 0.2\n  return {\n    background: `radial-gradient(ellipse at center,\n      ${tokens.highlight} 0%,\n      ${tokens.glow} 40%,\n      transparent 70%)`,\n    opacity: 0, // 移除悬停时的光流效果\n    transform: `translate3d(${calculateElasticTranslation.value.x * 0.2}px, ${calculateElasticTranslation.value.y * 0.1}px, 0) scale(1.05)`\n  }\n})\n\nconst hoverOverlayStyle = computed(() => ({\n  opacity: 0 // 移除悬停遮罩效果\n}))\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      borderRadius: '8px'\n    },\n    medium: {\n      borderRadius: '12px'\n    },\n    large: {\n      borderRadius: '16px'\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n\n  if (typeof props.width === 'number') {\n    baseSize.width = `${props.width}px`\n  } else if (typeof props.width === 'string') {\n    baseSize.width = props.width\n  }\n\n  if (typeof props.height === 'number') {\n    baseSize.height = `${props.height}px`\n  } else if (typeof props.height === 'string') {\n    baseSize.height = props.height\n  }\n\n  // Override border radius if explicitly set\n  if (props.cornerRadius !== undefined) {\n    baseSize.borderRadius = `${props.cornerRadius}px`\n  }\n\n  return baseSize\n}\n\n\nfunction handleClick(event: MouseEvent) {\n  if (!props.disabled && !props.loading && clickable.value) {\n    emit('click', event)\n    props.onClick?.(event)\n  }\n}\n\nfunction handleMouseEnter() {\n  if (!props.disabled && !props.loading) {\n    isHovered.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  isHovered.value = false\n  isActive.value = false\n}\n</script>\n\n<style scoped>\n.lg-card {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  border-radius: var(--lg-border-radius);\n  outline: none;\n  transition: var(--lg-transition);\n  overflow: hidden;\n}\n\n.lg-card.lg-card--clickable {\n  cursor: pointer;\n}\n\n.lg-card.lg-card--shadow {\n  box-shadow:\n    0 20px 25px -5px rgba(0, 0, 0, 0.1),\n    0 10px 10px -5px rgba(0, 0, 0, 0.04),\n    inset 0 1px 2px rgba(255, 255, 255, 0.6);\n}\n\n.lg-card:focus-visible {\n  outline: 2px solid var(--lg-primary, #3b82f6);\n  outline-offset: 2px;\n}\n\n.lg-card:disabled,\n.lg-card.lg-disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.lg-card__liquid {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  mix-blend-mode: soft-light;\n  filter: blur(10px);\n  border-radius: inherit;\n  overflow: hidden;\n  will-change: opacity, transform;\n}\n\n.lg-card__border {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  pointer-events: none;\n  z-index: 1;\n  mix-blend-mode: overlay;\n  opacity: 0.4;\n  overflow: hidden;\n}\n\n.lg-card__light-flow {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 0;\n  transition: opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1), transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n  mix-blend-mode: screen;\n  filter: blur(14px);\n  overflow: hidden;\n  will-change: opacity, transform;\n}\n\n.lg-card__content {\n  position: relative;\n  z-index: 10;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n}\n\n.lg-card__header {\n  margin-bottom: 1rem;\n}\n\n.lg-card__title {\n  margin: 0 0 0.5rem 0;\n  font-size: 1.25rem;\n  font-weight: 600;\n  line-height: 1.4;\n  color: var(--lg-card-text, #0f172a);\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.lg-card__subtitle {\n  margin: 0;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: var(--lg-card-text-soft, rgba(15, 23, 42, 0.78));\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.lg-card__title {\n  margin: 0 0 0.5rem 0;\n  font-size: 1.25rem;\n  font-weight: 600; /* 保持固定字体粗细，不再变化 */\n  line-height: 1.4;\n  color: var(--lg-card-text, #0f172a);\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.lg-card__subtitle {\n  margin: 0;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: var(--lg-card-text-soft, rgba(15, 23, 42, 0.78));\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.lg-card__body {\n  flex: 1;\n  color: var(--lg-card-text, #0f172a); /* 直接使用主文字颜色 */\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.lg-card__footer {\n  margin-top: 1rem;\n  padding-top: 1rem;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.lg-card__hover-overlay {\n  position: absolute;\n  inset: 0;\n  background: radial-gradient(\n    circle at 50% 0%,\n    rgba(255, 255, 255, 0.2) 0%,\n    rgba(255, 255, 255, 0) 50%\n  );\n  mix-blend-mode: overlay;\n  transition: opacity 0.2s ease;\n  pointer-events: none;\n  z-index: 3;\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  --lg-blur-amount: 8px;\n}\n\n.lg-size-medium {\n  --lg-blur-amount: 12px;\n}\n\n.lg-size-large {\n  --lg-blur-amount: 16px;\n}\n\n/* Variant-specific styles */\n.lg-card--primary {\n  --lg-primary: #3b82f6;\n}\n\n.lg-card--secondary {\n  --lg-primary: #64748b;\n}\n\n.lg-card--success {\n  --lg-primary: #10b981;\n}\n\n.lg-card--warning {\n  --lg-primary: #f59e0b;\n}\n\n.lg-card--error {\n  --lg-primary: #ef4444;\n}\n\n.lg-card--info {\n  --lg-primary: #06b6d4;\n}\n\n/* Dark theme support */\n[data-theme=\"dark\"] .lg-card {\n  --lg-card-text: rgba(248, 250, 252, 0.96);\n  --lg-card-text-soft: rgba(226, 232, 240, 0.82);\n  --lg-card-text-muted: rgba(148, 163, 184, 0.72);\n  color: var(--lg-card-text, rgba(248, 250, 252, 0.96));\n}\n</style>\n","<template>\n  <div\n    ref=\"glassRef\"\n    :class=\"containerClasses\"\n    :style=\"containerStyle\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <!-- Liquid glass effect background -->\n    <div class=\"lg-container__liquid\" :style=\"liquidStyle\"></div>\n\n    <!-- Container border glow -->\n    <div class=\"lg-container__border\" :style=\"borderStyle\"></div>\n\n    <!-- Dynamic light flow effect -->\n    <div class=\"lg-container__light-flow\" :style=\"lightFlowStyle\"></div>\n\n    <!-- Container content -->\n    <div class=\"lg-container__content\">\n      <slot />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type CSSProperties } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { ContainerProps } from '../../types'\n\nconst props = withDefaults(defineProps<ContainerProps>(), {\n  displacementScale: 70,\n  blurAmount: 0.0625,\n  saturation: 140,\n  aberrationIntensity: 2,\n  elasticity: 0.15,\n  cornerRadius: 16,\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  loading: false,\n  overLight: false,\n  fluid: false,\n  mode: 'standard',\n  effect: 'liquidGlass',\n  width: undefined,\n  height: undefined,\n  padding: undefined,\n  margin: undefined,\n  style: undefined,\n  class: undefined\n})\n\nconst glassRef = ref<HTMLElement>()\n\ninterface ContainerVariantTokens {\n  surface: string\n  surfaceAlt: string\n  border: string\n  borderSoft: string\n  text: string\n  textSoft: string\n  textMuted: string\n  highlight: string\n  glow: string\n  sheen: string\n  subtle: string\n  shadow: string\n  shadowHover?: string\n}\n\n// Base colors used to derive liquid glass palettes for container variants\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    deep: '#1d4ed8',\n    text: '#e2e8f0'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    deep: '#475569',\n    text: '#e2e8f0'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    deep: '#047857',\n    text: '#ecfdf5'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    deep: '#b45309',\n    text: '#fffbeb'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    deep: '#b91c1c',\n    text: '#fee2e2'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    deep: '#0e7490',\n    text: '#cffafe'\n  }\n} as const\n\nconst NEUTRAL_TEXT_BASE = '#0f172a'\n\nfunction hexToRgb(hex: string) {\n  let normalized = hex.replace('#', '')\n\n  if (normalized.length === 3) {\n    normalized = normalized\n      .split('')\n      .map((char) => char + char)\n      .join('')\n  }\n\n  const bigint = parseInt(normalized, 16)\n\n  return {\n    r: (bigint >> 16) & 255,\n    g: (bigint >> 8) & 255,\n    b: bigint & 255\n  }\n}\n\nfunction rgba(hex: string, alpha: number) {\n  const { r, g, b } = hexToRgb(hex)\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nfunction getVariantTokens(variant: ContainerProps['variant'], overLight: boolean): ContainerVariantTokens {\n  // Derive a cohesive palette for the container based on variant & lighting\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  if (overLight) {\n    return {\n      surface: 'rgba(255, 255, 255, 0.88)',\n      surfaceAlt: rgba(palette.base, 0.16),\n      border: rgba(palette.base, 0.38),\n      borderSoft: 'rgba(255, 255, 255, 0.65)',\n      text: palette.deep,\n      textSoft: rgba(palette.deep, 0.82),\n      textMuted: rgba(palette.deep, 0.72),\n      highlight: rgba(palette.accent, 0.24),\n      glow: rgba(palette.base, 0.26),\n      sheen: `linear-gradient(135deg,\n        rgba(255, 255, 255, 0.65) 0%,\n        rgba(255, 255, 255, 0.35) 38%,\n        transparent 65%,\n        rgba(255, 255, 255, 0.45) 100%)`,\n      subtle: rgba(palette.base, 0.08),\n      shadow: `0 12px 32px ${rgba('#0f172a', 0.15)}, 0 6px 16px ${rgba('#0f172a', 0.1)}, inset 0 1px 0 rgba(255, 255, 255, 0.6)`,\n      shadowHover: `0 20px 48px ${rgba('#0f172a', 0.22)}, 0 10px 28px ${rgba('#0f172a', 0.14)}, inset 0 1px 0 rgba(255, 255, 255, 0.7)`\n    }\n  }\n\n  return {\n    surface: rgba(palette.base, 0.38),\n    surfaceAlt: rgba(palette.accent, 0.46),\n    border: rgba(palette.accent, 0.58),\n    borderSoft: 'rgba(255, 255, 255, 0.35)',\n    text: rgba(NEUTRAL_TEXT_BASE, 0.94),\n    textSoft: rgba(NEUTRAL_TEXT_BASE, 0.78),\n    textMuted: rgba(NEUTRAL_TEXT_BASE, 0.62),\n    highlight: rgba(palette.accent, 0.55),\n    glow: rgba(palette.base, 0.48),\n    sheen: `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.5) 0%,\n      rgba(255, 255, 255, 0.28) 40%,\n      transparent 60%,\n      rgba(255, 255, 255, 0.35) 100%)`,\n    subtle: 'rgba(255, 255, 255, 0.08)',\n    shadow: `0 16px 38px ${rgba('#0f172a', 0.22)}, 0 8px 20px ${rgba('#0f172a', 0.14)}, inset 0 1px 0 rgba(255, 255, 255, 0.4)`,\n    shadowHover: `0 28px 56px ${rgba('#0f172a', 0.32)}, 0 14px 34px ${rgba('#0f172a', 0.2)}, inset 0 1px 0 rgba(255, 255, 255, 0.5)`\n  }\n}\n\nconst variantTokens = computed(() => getVariantTokens(props.variant ?? 'primary', props.overLight))\n\nconst {\n  isHovered,\n  isActive,\n  backdropStyle,\n  transformStyle,\n  calculateElasticTranslation,\n  mouseOffset\n} = useLiquidGlass({\n  container: glassRef,\n  displacementScale: props.displacementScale,\n  blurAmount: props.blurAmount,\n  saturation: props.saturation,\n  aberrationIntensity: props.aberrationIntensity,\n  elasticity: props.elasticity,\n  cornerRadius: props.cornerRadius,\n  overLight: props.overLight,\n  mode: props.mode,\n  effect: props.effect\n})\n\nconst containerClasses = computed(() => [\n  'lg-container',\n  'lg-component',\n  'lg-glass',\n  'lg-liquid',\n  `lg-container--${props.variant}`,\n  `lg-size-${props.size}`,\n  props.class,\n  {\n    'lg-disabled': props.disabled,\n    'lg-loading': props.loading,\n    'lg-container--fluid': props.fluid\n  }\n])\n\nconst containerStyle = computed(() => {\n  const layoutStyles = getLayoutStyles()\n  const tokens = variantTokens.value\n\n  const translation = calculateElasticTranslation.value\n  const hoverLift = 0\n  const translateY = translation.y + hoverLift\n  const scale = 1\n\n  return {\n    ...props.style,\n    ...layoutStyles,\n    '--lg-container-text': tokens.text,\n    '--lg-container-text-soft': tokens.textSoft,\n    '--lg-container-text-muted': tokens.textMuted,\n    '--lg-container-highlight': tokens.highlight,\n    '--lg-container-glow': tokens.glow,\n    '--lg-container-sheen': tokens.sheen,\n    '--lg-container-subtle': tokens.subtle,\n    '--lg-container-border-soft': tokens.borderSoft,\n    background: `linear-gradient(135deg, ${tokens.surface} 0%, ${tokens.surfaceAlt} 100%)`,\n    border: `1px solid ${tokens.border}`,\n    color: tokens.text,\n    boxShadow: tokens.shadow,\n    backdropFilter: 'blur(18px) saturate(160%)',\n    WebkitBackdropFilter: 'blur(18px) saturate(160%)',\n    position: 'relative',\n    zIndex: 3,\n    transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n    transform: `translate3d(${translation.x}px, ${translateY}px, 0) scale(${scale})`,\n    willChange: 'transform'\n  } as CSSProperties\n})\n\nconst liquidStyle = computed(() => ({\n  background: variantTokens.value.sheen,\n  opacity: isHovered.value && !props.disabled ? 0.7 : 0.35,\n  transform: `translate3d(${calculateElasticTranslation.value.x * 0.5}px, ${calculateElasticTranslation.value.y * 0.3}px, 0)`,\n  transition: 'opacity 0.35s ease, transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)'\n}))\n\nconst borderStyle = computed(() => ({\n  background: `radial-gradient(circle at 50% 0%,\n    ${variantTokens.value.borderSoft} 0%,\n    ${variantTokens.value.border} 50%,\n    transparent 100%)`,\n  opacity: isHovered.value && !props.disabled ? 0.7 : 0.4\n}))\n\nconst lightFlowStyle = computed(() => {\n  const tokens = variantTokens.value\n  const angle = 135 + calculateElasticTranslation.value.x * 0.3\n  return {\n    background: `radial-gradient(ellipse at center,\n      ${tokens.highlight} 0%,\n      ${tokens.glow} 40%,\n      transparent 70%)`,\n    opacity: isHovered.value && !props.disabled ? 0.8 : 0,\n    transform: `translate3d(${calculateElasticTranslation.value.x * 0.3}px, ${calculateElasticTranslation.value.y * 0.2}px, 0) scale(1.1)`\n  }\n})\n\nfunction getLayoutStyles(): CSSProperties {\n  const styles: CSSProperties = {}\n\n  // Width\n  if (props.fluid) {\n    styles.width = '100%'\n  } else if (typeof props.width === 'number') {\n    styles.width = `${props.width}px`\n  } else if (typeof props.width === 'string') {\n    styles.width = props.width\n  }\n\n  // Height\n  if (typeof props.height === 'number') {\n    styles.height = `${props.height}px`\n  } else if (typeof props.height === 'string') {\n    styles.height = props.height\n  }\n\n  // Padding\n  if (typeof props.padding === 'number') {\n    styles.padding = `${props.padding}px`\n  } else if (typeof props.padding === 'string') {\n    styles.padding = props.padding\n  }\n\n  // Margin\n  if (typeof props.margin === 'number') {\n    styles.margin = `${props.margin}px`\n  } else if (typeof props.margin === 'string') {\n    styles.margin = props.margin\n  }\n\n  // Border radius\n  if (props.cornerRadius !== undefined) {\n    styles.borderRadius = `${props.cornerRadius}px`\n  }\n\n  // Size-specific styles\n  const sizeStyles = getSizeStyles()\n  Object.assign(styles, sizeStyles)\n\n  return styles\n}\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      borderRadius: '8px',\n      padding: '1rem'\n    },\n    medium: {\n      borderRadius: '12px',\n      padding: '1.5rem'\n    },\n    large: {\n      borderRadius: '16px',\n      padding: '2rem'\n    }\n  }\n\n  return sizes[props.size as keyof typeof sizes] || sizes.medium\n}\n\n\nfunction handleMouseEnter() {\n  if (!props.disabled && !props.loading) {\n    isHovered.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  isHovered.value = false\n}\n</script>\n\n<style scoped>\n.lg-container {\n  position: relative;\n  display: block;\n  border-radius: var(--lg-border-radius);\n  outline: none;\n  transition: var(--lg-transition);\n  overflow: hidden;\n}\n\n.lg-container:focus-visible {\n  outline: 2px solid var(--lg-primary, #3b82f6);\n  outline-offset: 2px;\n}\n\n.lg-container:disabled,\n.lg-container.lg-disabled {\n  opacity: 0.6;\n  pointer-events: none;\n}\n\n.lg-container__liquid {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  mix-blend-mode: soft-light;\n  filter: blur(10px);\n  border-radius: inherit;\n  overflow: hidden;\n  will-change: opacity, transform;\n}\n\n.lg-container__border {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  pointer-events: none;\n  z-index: 1;\n  mix-blend-mode: overlay;\n  opacity: 0.5;\n  overflow: hidden;\n}\n\n.lg-container__light-flow {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 0;\n  transition: opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1), transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n  mix-blend-mode: screen;\n  filter: blur(14px);\n  overflow: hidden;\n  will-change: opacity, transform;\n}\n\n.lg-container__content {\n  position: relative;\n  z-index: 10;\n  color: var(--lg-container-text, #0f172a);\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.lg-container:hover .lg-container__content {\n  color: var(--lg-container-text, #0f172a);\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  --lg-blur-amount: 8px;\n}\n\n.lg-size-medium {\n  --lg-blur-amount: 12px;\n}\n\n.lg-size-large {\n  --lg-blur-amount: 16px;\n}\n\n/* Variant-specific styles */\n.lg-container--primary {\n  --lg-primary: #3b82f6;\n}\n\n.lg-container--secondary {\n  --lg-primary: #64748b;\n}\n\n.lg-container--success {\n  --lg-primary: #10b981;\n}\n\n.lg-container--warning {\n  --lg-primary: #f59e0b;\n}\n\n.lg-container--error {\n  --lg-primary: #ef4444;\n}\n\n.lg-container--info {\n  --lg-primary: #06b6d4;\n}\n\n/* Fluid container */\n.lg-container--fluid {\n  max-width: none;\n  width: 100%;\n}\n\n/* Dark theme support */\n[data-theme=\"dark\"] .lg-container {\n  --lg-container-text: rgba(248, 250, 252, 0.96);\n  --lg-container-text-soft: rgba(226, 232, 240, 0.82);\n  --lg-container-text-muted: rgba(148, 163, 184, 0.72);\n  color: var(--lg-container-text, rgba(248, 250, 252, 0.96));\n}\n</style>\n","<template>\n  <div\n    ref=\"inputRef\"\n    :class=\"componentClasses\"\n    :style=\"componentStyle\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <input\n      ref=\"inputFieldRef\"\n      :class=\"['lg-input__field', { 'lg-input__field--has-value': modelValue }]\"\n      :type=\"inputType\"\n      :placeholder=\"placeholder\"\n      :disabled=\"disabled\"\n      :readonly=\"readonly\"\n      :maxlength=\"maxlength\"\n      :value=\"modelValue\"\n      :aria-label=\"ariaLabel\"\n      :aria-disabled=\"disabled\"\n      :aria-readonly=\"readonly\"\n      :aria-invalid=\"ariaInvalid\"\n      @input=\"handleInput\"\n      @change=\"handleChange\"\n      @focus=\"handleFocus\"\n      @blur=\"handleBlur\"\n      @keydown=\"handleKeyDown\"\n    />\n\n    <!-- Clear button -->\n    <button\n      v-if=\"clearable && modelValue && !disabled && !readonly\"\n      class=\"lg-input__clear\"\n      :aria-label=\"clearAriaLabel\"\n      @click=\"handleClear\"\n      type=\"button\"\n      tabindex=\"-1\"\n    >\n      <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n        <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n      </svg>\n    </button>\n\n    <!-- Password toggle button -->\n    <button\n      v-if=\"type === 'password' && !disabled && !readonly\"\n      class=\"lg-input__password-toggle\"\n      :aria-label=\"showPassword ? '隐藏密码' : '显示密码'\"\n      @click=\"togglePasswordVisibility\"\n      type=\"button\"\n      tabindex=\"-1\"\n    >\n      <svg v-if=\"showPassword\" viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n        <path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"/>\n      </svg>\n      <svg v-else viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n        <path d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"/>\n      </svg>\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, type CSSProperties } from 'vue'\nimport type { InputProps } from '../../types'\n\n// 1. 属性定义\nconst props = withDefaults(defineProps<InputProps>(), {\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  type: 'text',\n  placeholder: '',\n  readonly: false,\n  clearable: false,\n  maxlength: undefined,\n  width: undefined,\n  height: undefined,\n  style: undefined,\n  class: undefined,\n  ariaLabel: undefined,\n  ariaInvalid: undefined,\n  clearAriaLabel: '清除输入'\n})\n\n// 2. 事件定义\nconst emit = defineEmits<{\n  'update:modelValue': [value: string | number]\n  input: [value: string | number]\n  change: [value: string | number]\n  focus: [event: FocusEvent]\n  blur: [event: FocusEvent]\n  clear: []\n}>()\n\n// 3. 引用\nconst inputRef = ref<HTMLElement>()\nconst inputFieldRef = ref<HTMLInputElement>()\nconst isFocused = ref(false)\nconst isHovered = ref(false)\nconst showPassword = ref(false)\n\n// 4. 颜色定义 - 简洁的无边框设计\nconst COLORS = {\n  text: '#1e293b',\n  placeholder: '#64748b',\n  clear: '#64748b',\n  border: 'rgba(0, 0, 0, 0.08)'\n} as const\n\n// 5. 计算属性\n\nconst componentClasses = computed(() => [\n  'lg-input',\n  `lg-input--${props.variant}`,\n  `lg-size-${props.size}`,\n  props.class,\n  {\n    'lg-disabled': props.disabled,\n    'lg-input--focused': isFocused.value,\n    'lg-input--has-value': props.modelValue,\n    'lg-input--has-clear': props.clearable && props.modelValue && !props.disabled && !props.readonly,\n    'lg-input--has-password-toggle': props.type === 'password' && !props.disabled && !props.readonly\n  }\n])\n\nconst inputType = computed(() => {\n  if (props.type === 'password') {\n    return showPassword.value ? 'text' : 'password'\n  }\n  return props.type\n})\n\nconst componentStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n  const isHoveredOrFocused = isHovered.value || isFocused.value\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    background: isHoveredOrFocused ? 'rgba(255, 255, 255, 0.95)' : 'rgba(255, 255, 255, 0.9)',\n    backdropFilter: 'blur(16px) saturate(120%)',\n    WebkitBackdropFilter: 'blur(16px) saturate(120%)',\n    border: '1px solid rgba(0, 0, 0, 0.08)',\n    borderRadius: '12px',\n    boxShadow: isFocused.value\n      ? `0 0 0 1px rgba(0, 0, 0, 0.12), 0 8px 24px rgba(0, 0, 0, 0.12)`\n      : (isHovered.value ? `0 6px 20px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.9)` : `0 4px 16px rgba(0, 0, 0, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.8)`),\n    transition: 'all 0.2s ease-in-out',\n    position: 'relative',\n    display: 'flex',\n    alignItems: 'center',\n    overflow: 'hidden',\n    transform: isHovered.value && !isFocused.value ? 'translateY(-1px)' : 'translateY(0)'\n  } as CSSProperties\n})\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      borderRadius: '8px',\n      height: '2.5rem',\n      fontSize: '0.875rem'\n    },\n    medium: {\n      borderRadius: '12px',\n      height: '3rem',\n      fontSize: '1rem'\n    },\n    large: {\n      borderRadius: '16px',\n      height: '3.5rem',\n      fontSize: '1.125rem'\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n\n  if (typeof props.width === 'number') {\n    baseSize.width = `${props.width}px`\n  } else if (typeof props.width === 'string') {\n    baseSize.width = props.width\n  }\n\n  if (typeof props.height === 'number') {\n    baseSize.height = `${props.height}px`\n  } else if (typeof props.height === 'string') {\n    baseSize.height = props.height\n  }\n\n  // Override border radius if explicitly set\n  if (props.cornerRadius !== undefined) {\n    baseSize.borderRadius = `${props.cornerRadius}px`\n  }\n\n  return baseSize\n}\n\n// 8. 事件处理函数\nfunction handleInput(event: Event) {\n  const target = event.target as HTMLInputElement\n  const value = props.type === 'number' ? Number(target.value) : target.value\n  \n  emit('update:modelValue', value)\n  emit('input', value)\n  props.onInput?.(value)\n}\n\nfunction handleChange(event: Event) {\n  const target = event.target as HTMLInputElement\n  const value = props.type === 'number' ? Number(target.value) : target.value\n  \n  emit('change', value)\n  props.onChange?.(value)\n}\n\nfunction handleFocus(event: FocusEvent) {\n  isFocused.value = true\n  emit('focus', event)\n  props.onFocus?.(event)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  isFocused.value = false\n  emit('blur', event)\n  props.onBlur?.(event)\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (event.key === 'Escape') {\n    inputRef.value?.blur()\n  }\n}\n\nfunction handleClear() {\n  emit('update:modelValue', '')\n  emit('input', '')\n  emit('change', '')\n  emit('clear')\n\n  // Focus back to input after clearing\n  nextTick(() => {\n    inputFieldRef.value?.focus()\n  })\n}\n\nfunction handleMouseEnter() {\n  if (!props.disabled) {\n    isHovered.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  isHovered.value = false\n}\n\nfunction togglePasswordVisibility() {\n  showPassword.value = !showPassword.value\n  // Focus back to input after toggling\n  nextTick(() => {\n    inputFieldRef.value?.focus()\n  })\n}\n\n// Expose methods for parent components\ndefineExpose({\n  focus: () => inputFieldRef.value?.focus(),\n  blur: () => inputFieldRef.value?.blur(),\n  select: () => inputFieldRef.value?.select(),\n  inputFieldRef\n})\n</script>\n\n<style scoped>\n.lg-input {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  width: 100%;\n  font-family: inherit;\n  box-sizing: border-box;\n}\n\n.lg-input:disabled,\n.lg-input.lg-disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.lg-input__field {\n  background: transparent;\n  border: none;\n  outline: none;\n  color: v-bind('COLORS.text');\n  font-size: inherit;\n  font-family: inherit;\n  width: 100%;\n  height: 100%;\n  padding: 0 1rem;\n  border-radius: inherit;\n  flex: 1;\n  box-sizing: border-box;\n}\n\n.lg-input__field::placeholder {\n  color: v-bind('COLORS.placeholder');\n  opacity: 0.8;\n}\n\n.lg-input__field:focus {\n  outline: none;\n}\n\n.lg-input__clear {\n  position: absolute;\n  right: 0.75rem;\n  background: none;\n  border: none;\n  color: v-bind('COLORS.clear');\n  opacity: 0.6;\n  cursor: pointer;\n  border-radius: 50%;\n  width: 1.25rem;\n  height: 1.25rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 0.75rem;\n  transition: all 0.2s ease;\n  padding: 0;\n  margin: 0;\n}\n\n.lg-input__clear:hover {\n  opacity: 1;\n  background-color: rgba(0, 0, 0, 0.05);\n  transform: scale(1.1);\n}\n\n.lg-input__clear:focus-visible {\n  outline: 2px solid v-bind('COLORS.clear');\n  outline-offset: 1px;\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  height: 2.5rem;\n  font-size: 0.875rem;\n  border-radius: 8px;\n}\n\n.lg-size-medium {\n  height: 3rem;\n  font-size: 1rem;\n  border-radius: 12px;\n}\n\n.lg-size-large {\n  height: 3.5rem;\n  font-size: 1.125rem;\n  border-radius: 16px;\n}\n\n/* 确保有清除按钮时输入框右侧有足够空间 */\n.lg-input.lg-input--has-clear .lg-input__field {\n  padding-right: 2.5rem;\n}\n\n/* 密码切换按钮样式 */\n.lg-input__password-toggle {\n  position: absolute;\n  right: 0.75rem;\n  background: none;\n  border: none;\n  color: v-bind('COLORS.clear');\n  opacity: 0.6;\n  cursor: pointer;\n  border-radius: 50%;\n  width: 1.25rem;\n  height: 1.25rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 0.75rem;\n  transition: all 0.2s ease;\n  padding: 0;\n  margin: 0;\n}\n\n.lg-input__password-toggle:hover {\n  opacity: 1;\n  background-color: rgba(0, 0, 0, 0.05);\n  transform: scale(1.1);\n}\n\n.lg-input__password-toggle:focus-visible {\n  outline: 2px solid v-bind('COLORS.clear');\n  outline-offset: 1px;\n}\n\n/* 确保有密码切换按钮时输入框右侧有足够空间 */\n.lg-input.lg-input--has-password-toggle .lg-input__field {\n  padding-right: 2.5rem;\n}\n\n/* 同时有清除按钮和密码切换按钮时的样式 */\n.lg-input.lg-input--has-clear.lg-input--has-password-toggle .lg-input__field {\n  padding-right: 4rem;\n}\n\n.lg-input.lg-input--has-clear.lg-input--has-password-toggle .lg-input__clear {\n  right: 2.5rem;\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n  .lg-input,\n  .lg-input__clear {\n    transition-duration: 0.01ms !important;\n  }\n}\n</style>\n","<template>\n  <div\n    ref=\"selectRef\"\n    :class=\"componentClasses\"\n    :style=\"componentStyle\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <!-- Select trigger -->\n    <div\n      ref=\"triggerRef\"\n      :class=\"['lg-select__trigger', { 'lg-select__trigger--focused': isOpen }]\"\n      @click=\"handleTriggerClick\"\n      @keydown=\"handleTriggerKeydown\"\n      tabindex=\"0\"\n      :aria-expanded=\"isOpen\"\n      :aria-haspopup=\"true\"\n      :aria-label=\"ariaLabel\"\n      :aria-disabled=\"disabled\"\n    >\n      <!-- Selected values display -->\n      <div class=\"lg-select__display\">\n        <div v-if=\"selectedLabels.length === 0\" class=\"lg-select__placeholder\">\n          {{ placeholder || '请选择' }}\n        </div>\n        <div v-else-if=\"multiple\" class=\"lg-select__tags\">\n          <span\n            v-for=\"(label, index) in selectedLabels\"\n            :key=\"index\"\n            class=\"lg-select__tag\"\n          >\n            {{ label }}\n            <button\n              v-if=\"!disabled && !readonly\"\n              type=\"button\"\n              class=\"lg-select__tag-remove\"\n              @click.stop=\"handleTagRemove(index)\"\n              :aria-label=\"`移除 ${label}`\"\n            >\n              <svg viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" fill=\"currentColor\">\n                <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n              </svg>\n            </button>\n          </span>\n        </div>\n        <div v-else class=\"lg-select__single\">\n          {{ selectedLabels[0] }}\n        </div>\n      </div>\n\n      <!-- Dropdown arrow -->\n      <div class=\"lg-select__arrow\" :class=\"{ 'lg-select__arrow--open': isOpen }\">\n        <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n          <path d=\"M7 14l5-5 5 5z\" class=\"arrow-up\"/>\n          <path d=\"M7 10l5 5 5-5z\" class=\"arrow-down\"/>\n        </svg>\n      </div>\n\n      <!-- Clear button -->\n      <button\n        v-if=\"clearable && hasValue && !disabled && !readonly\"\n        class=\"lg-select__clear\"\n        :aria-label=\"clearAriaLabel\"\n        @click.stop=\"handleClear\"\n        type=\"button\"\n        tabindex=\"-1\"\n      >\n        <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n          <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n        </svg>\n      </button>\n    </div>\n\n    <!-- Dropdown -->\n    <Teleport to=\"body\">\n      <div\n        v-if=\"isOpen\"\n        ref=\"dropdownRef\"\n        :class=\"['lg-select__dropdown', `lg-select__dropdown--${size}`]\"\n        :style=\"dropdownStyle\"\n        @click.stop\n      >\n        <!-- Search input -->\n        <div v-if=\"searchable\" class=\"lg-select__search\">\n          <div class=\"lg-select__search-wrapper\">\n            <svg class=\"lg-select__search-icon\" viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n              <path d=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/>\n            </svg>\n            <input\n              ref=\"searchInputRef\"\n              v-model=\"searchQuery\"\n              type=\"text\"\n              class=\"lg-select__search-input\"\n              :placeholder=\"searchPlaceholder\"\n              @input=\"handleSearch\"\n              @keydown=\"handleSearchKeydown\"\n            />\n            <button\n              v-if=\"searchQuery\"\n              class=\"lg-select__search-clear\"\n              @click=\"clearSearch\"\n              type=\"button\"\n              aria-label=\"清除搜索\"\n            >\n              <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\">\n                <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n              </svg>\n            </button>\n          </div>\n        </div>\n\n        <!-- Options list -->\n        <div class=\"lg-select__options\" :style=\"{ maxHeight: dropdownMaxHeight }\">\n          <div\n            v-for=\"(option, index) in filteredOptions\"\n            :key=\"option.value\"\n            :class=\"[\n              'lg-select__option',\n              {\n                'lg-select__option--selected': isSelected(option.value),\n                'lg-select__option--disabled': option.disabled,\n                'lg-select__option--group': option.group\n              }\n            ]\"\n            @click=\"handleOptionClick(option, index)\"\n            :data-value=\"option.value\"\n            :aria-selected=\"isSelected(option.value)\"\n            :aria-disabled=\"option.disabled\"\n          >\n              <!-- Checkbox - only show in multiple mode -->\n            <div v-if=\"multiple\" class=\"lg-select__checkbox\">\n              <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/>\n                <path v-if=\"isSelected(option.value)\" d=\"M9 12l2 2 4-4\"/>\n              </svg>\n            </div>\n            <div class=\"lg-select__option-label\">\n              {{ option.label }}\n            </div>\n          </div>\n\n          <!-- No results -->\n          <div v-if=\"filteredOptions.length === 0\" class=\"lg-select__no-results\">\n            <div class=\"lg-select__no-results-text\">{{ noResultsText }}</div>\n            <div class=\"lg-select__no-results-hint\">尝试修改搜索关键词</div>\n          </div>\n        </div>\n      </div>\n    </Teleport>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, watch, onMounted, onUnmounted, type CSSProperties } from 'vue'\nimport type { BaseProps } from '../../types'\n\n// 定义本地接口以避免类型引用问题\ninterface SelectOption {\n  label: string\n  value: string | number\n  disabled?: boolean\n  group?: string\n}\n\ninterface SelectProps extends BaseProps {\n  modelValue?: string | number | (string | number)[]\n  options: SelectOption[]\n  placeholder?: string\n  multiple?: boolean\n  clearable?: boolean\n  searchable?: boolean\n  size?: 'small' | 'medium' | 'large'\n  maxHeight?: string | number\n  readonly?: boolean\n  filter?: (query: string, option: SelectOption) => boolean\n  ariaLabel?: string\n  clearAriaLabel?: string\n  searchPlaceholder?: string\n  noResultsText?: string\n  onSearch?: (query: string) => void\n  onChange?: (value: string | number | (string | number)[]) => void\n  onFocus?: (event: FocusEvent) => void\n  onBlur?: (event: FocusEvent) => void\n}\n\n// 1. 属性定义\nconst props = withDefaults(defineProps<SelectProps>(), {\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  multiple: false,\n  clearable: false,\n  searchable: false,\n  placeholder: '',\n  maxHeight: 200,\n  ariaLabel: undefined,\n  clearAriaLabel: '清除选择',\n  searchPlaceholder: '搜索...',\n  noResultsText: '无匹配结果'\n})\n\n// 2. 事件定义\nconst emit = defineEmits<{\n  'update:modelValue': [value: string | number | (string | number)[]]\n  change: [value: string | number | (string | number)[]]\n  focus: [event: FocusEvent]\n  blur: [event: FocusEvent]\n  clear: []\n  search: [query: string]\n}>()\n\n// 3. 引用\nconst selectRef = ref<HTMLElement>()\nconst triggerRef = ref<HTMLElement>()\nconst dropdownRef = ref<HTMLElement>()\nconst searchInputRef = ref<HTMLInputElement>()\n\n// 4. 状态\nconst isOpen = ref(false)\nconst searchQuery = ref('')\nconst dropdownPosition = ref({ top: 0, left: 0, width: 0 })\n\n// 5. 颜色定义\nconst COLORS = {\n  text: '#1e293b',\n  placeholder: '#64748b',\n  border: 'rgba(0, 0, 0, 0.08)',\n  background: 'rgba(255, 255, 255, 0.9)'\n} as const\n\n// 6. 计算属性\nconst componentClasses = computed(() => [\n  'lg-select',\n  `lg-select--${props.variant}`,\n  `lg-size-${props.size}`,\n  props.class,\n  {\n    'lg-disabled': props.disabled,\n    'lg-select--open': isOpen.value,\n    'lg-select--has-value': hasValue.value,\n    'lg-select--multiple': props.multiple\n  }\n])\n\nconst componentStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n  const isHoveredOrFocused = isOpen.value\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    background: isHoveredOrFocused ? 'rgba(255, 255, 255, 0.95)' : COLORS.background,\n    backdropFilter: 'blur(16px) saturate(120%)',\n    WebkitBackdropFilter: 'blur(16px) saturate(120%)',\n    border: '1px solid rgba(0, 0, 0, 0.08)',\n    borderRadius: '12px',\n    boxShadow: isOpen.value\n      ? `0 0 0 1px rgba(0, 0, 0, 0.12), 0 8px 24px rgba(0, 0, 0, 0.12)`\n      : `0 4px 16px rgba(0, 0, 0, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.8)`,\n    transition: 'all 0.2s ease-in-out',\n    position: 'relative',\n    display: 'flex',\n    alignItems: 'center',\n    overflow: 'hidden'\n  } as CSSProperties\n})\n\nconst dropdownStyle = computed(() => ({\n  position: 'fixed' as const,\n  top: `${dropdownPosition.value.top}px`,\n  left: `${dropdownPosition.value.left}px`,\n  width: `${dropdownPosition.value.width}px`,\n  zIndex: 1000,\n  background: 'rgba(255, 255, 255, 0.95)',\n  backdropFilter: 'blur(16px) saturate(120%)',\n  WebkitBackdropFilter: 'blur(16px) saturate(120%)',\n  border: '1px solid rgba(0, 0, 0, 0.08)',\n  borderRadius: '12px',\n  boxShadow: '0 8px 24px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.06)'\n}))\n\nconst dropdownMaxHeight = computed(() => {\n  if (typeof props.maxHeight === 'number') {\n    return `${props.maxHeight}px`\n  }\n  return props.maxHeight\n})\n\nconst selectedLabels = computed(() => {\n  if (props.multiple) {\n    const values = Array.isArray(props.modelValue) ? props.modelValue : []\n    return values.map(value => {\n      const option = props.options.find(opt => opt.value === value)\n      return option?.label || String(value)\n    })\n  } else {\n    const option = props.options.find(opt => opt.value === props.modelValue)\n    return option ? [option.label] : []\n  }\n})\n\nconst hasValue = computed(() => {\n  if (props.multiple) {\n    return Array.isArray(props.modelValue) && props.modelValue.length > 0\n  }\n  return props.modelValue !== undefined && props.modelValue !== ''\n})\n\nconst filteredOptions = computed(() => {\n  if (!searchQuery.value) {\n    return props.options\n  }\n\n  return props.options.filter(option => {\n    if (props.filter) {\n      return props.filter(searchQuery.value, option)\n    }\n    return option.label.toLowerCase().includes(searchQuery.value.toLowerCase())\n  })\n})\n\n// 7. 方法\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      borderRadius: '8px',\n      minHeight: '2.5rem',\n      fontSize: '0.875rem'\n    },\n    medium: {\n      borderRadius: '12px',\n      minHeight: '3rem',\n      fontSize: '1rem'\n    },\n    large: {\n      borderRadius: '16px',\n      minHeight: '3.5rem',\n      fontSize: '1.125rem'\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n\n  if (typeof props.width === 'number') {\n    baseSize.width = `${props.width}px`\n  } else if (typeof props.width === 'string') {\n    baseSize.width = props.width\n  }\n\n  if (typeof props.height === 'number') {\n    baseSize.height = `${props.height}px`\n  } else if (typeof props.height === 'string') {\n    baseSize.height = props.height\n  }\n\n  if (props.cornerRadius !== undefined) {\n    baseSize.borderRadius = `${props.cornerRadius}px`\n  }\n\n  return baseSize\n}\n\nfunction isSelected(value: string | number): boolean {\n  if (props.multiple) {\n    const values = Array.isArray(props.modelValue) ? props.modelValue : []\n    return values.includes(value)\n  }\n  return props.modelValue === value\n}\n\nfunction handleTriggerClick() {\n  if (!props.disabled && !props.readonly) {\n    isOpen.value = !isOpen.value\n    if (isOpen.value) {\n      nextTick(() => {\n        updateDropdownPosition()\n        if (props.searchable) {\n          searchInputRef.value?.focus()\n        }\n      })\n    }\n  }\n}\n\nfunction handleTriggerKeydown(event: KeyboardEvent) {\n  if (props.disabled || props.readonly) return\n\n  switch (event.key) {\n    case 'Enter':\n    case ' ':\n      event.preventDefault()\n      handleTriggerClick()\n      break\n    case 'Escape':\n      isOpen.value = false\n      selectRef.value?.focus()\n      break\n    case 'ArrowDown':\n      event.preventDefault()\n      if (!isOpen.value) {\n        isOpen.value = true\n      }\n      break\n  }\n}\n\nfunction handleOptionClick(option: SelectOption, index: number) {\n  if (option.disabled) return\n\n  if (props.multiple) {\n    const values = Array.isArray(props.modelValue) ? [...props.modelValue] : []\n    const optionIndex = values.indexOf(option.value)\n\n    if (optionIndex > -1) {\n      values.splice(optionIndex, 1)\n    } else {\n      values.push(option.value)\n    }\n\n    emit('update:modelValue', values)\n    emit('change', values)\n  } else {\n    emit('update:modelValue', option.value)\n    emit('change', option.value)\n    isOpen.value = false\n  }\n}\n\nfunction handleTagRemove(index: number) {\n  if (props.multiple) {\n    const values = Array.isArray(props.modelValue) ? [...props.modelValue] : []\n    values.splice(index, 1)\n    emit('update:modelValue', values)\n    emit('change', values)\n  }\n}\n\nfunction handleClear() {\n  if (props.multiple) {\n    emit('update:modelValue', [])\n    emit('change', [])\n  } else {\n    emit('update:modelValue', '')\n    emit('change', '')\n  }\n  emit('clear')\n}\n\nfunction handleSearch(event: Event) {\n  const target = event.target as HTMLInputElement\n  emit('search', target.value)\n}\n\nfunction handleSearchKeydown(event: KeyboardEvent) {\n  if (event.key === 'Escape') {\n    isOpen.value = false\n    triggerRef.value?.focus()\n  }\n}\n\nfunction clearSearch() {\n  searchQuery.value = ''\n  searchInputRef.value?.focus()\n}\n\nfunction updateDropdownPosition() {\n  if (!triggerRef.value || !dropdownRef.value) return\n\n  const triggerRect = triggerRef.value.getBoundingClientRect()\n  const dropdownHeight = dropdownRef.value.offsetHeight\n  const viewportHeight = window.innerHeight\n  const spaceBelow = viewportHeight - triggerRect.bottom\n  const spaceAbove = triggerRect.top\n\n  let top = triggerRect.bottom + 4 // 4px gap\n\n  // If not enough space below, position above\n  if (spaceBelow < dropdownHeight && spaceAbove > dropdownHeight) {\n    top = triggerRect.top - dropdownHeight - 4\n  }\n\n  dropdownPosition.value = {\n    top,\n    left: triggerRect.left,\n    width: triggerRect.width\n  }\n}\n\nfunction handleMouseEnter() {\n  if (!props.disabled) {\n    // Add hover effects if needed\n  }\n}\n\nfunction handleMouseLeave() {\n  // Remove hover effects if needed\n}\n\n// 8. 生命周期\nonMounted(() => {\n  document.addEventListener('click', handleClickOutside)\n  window.addEventListener('resize', updateDropdownPosition)\n  window.addEventListener('scroll', updateDropdownPosition)\n})\n\nonUnmounted(() => {\n  document.removeEventListener('click', handleClickOutside)\n  window.removeEventListener('resize', updateDropdownPosition)\n  window.removeEventListener('scroll', updateDropdownPosition)\n})\n\nfunction handleClickOutside(event: Event) {\n  if (selectRef.value && !selectRef.value.contains(event.target as Node)) {\n    isOpen.value = false\n  }\n}\n\n// 9. 监听器\nwatch(isOpen, (newValue) => {\n  if (newValue) {\n    nextTick(() => {\n      updateDropdownPosition()\n    })\n  }\n})\n\n// Expose methods\ndefineExpose({\n  focus: () => triggerRef.value?.focus(),\n  blur: () => {\n    isOpen.value = false\n    triggerRef.value?.blur()\n  },\n  open: () => {\n    if (!props.disabled && !props.readonly) {\n      isOpen.value = true\n      nextTick(updateDropdownPosition)\n    }\n  },\n  close: () => {\n    isOpen.value = false\n  }\n})\n</script>\n\n<style scoped>\n.lg-select {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  width: 100%;\n  font-family: inherit;\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.lg-select:disabled,\n.lg-select.lg-disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.lg-select__trigger {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  height: 100%;\n  padding: 0 1rem;\n  border-radius: inherit;\n  cursor: inherit;\n  user-select: none;\n}\n\n.lg-select__trigger:focus {\n  outline: none;\n}\n\n.lg-select__display {\n  flex: 1;\n  min-width: 0;\n  overflow: hidden;\n}\n\n.lg-select__placeholder {\n  color: v-bind('COLORS.placeholder');\n  opacity: 0.8;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.lg-select__single {\n  color: v-bind('COLORS.text');\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.lg-select__tags {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.25rem;\n  align-items: center;\n}\n\n.lg-select__tag {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.25rem;\n  padding: 0.125rem 0.375rem;\n  background: rgba(59, 130, 246, 0.1);\n  color: #1d4ed8;\n  border-radius: 4px;\n  font-size: 0.75rem;\n  font-weight: 500;\n}\n\n.lg-select__tag-remove {\n  background: none;\n  border: none;\n  color: inherit;\n  opacity: 0.7;\n  cursor: pointer;\n  padding: 0;\n  display: flex;\n  align-items: center;\n  border-radius: 50%;\n  width: 1rem;\n  height: 1rem;\n}\n\n.lg-select__tag-remove:hover {\n  opacity: 1;\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.lg-select__arrow {\n  color: v-bind('COLORS.placeholder');\n  transition: all 0.2s ease;\n  margin-left: 0.5rem;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: 1px;\n}\n\n.lg-select__arrow svg {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n\n.arrow-up {\n  opacity: 0.4;\n  transition: opacity 0.2s ease;\n}\n\n.arrow-down {\n  opacity: 1;\n  transition: opacity 0.2s ease;\n}\n\n.lg-select__arrow--open .arrow-up {\n  opacity: 1;\n}\n\n.lg-select__arrow--open .arrow-down {\n  opacity: 0.4;\n}\n\n.lg-select__clear {\n  position: absolute;\n  right: 2.5rem;\n  background: none;\n  border: none;\n  color: v-bind('COLORS.placeholder');\n  opacity: 0.6;\n  cursor: pointer;\n  border-radius: 50%;\n  width: 1.25rem;\n  height: 1.25rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 0.75rem;\n  transition: all 0.2s ease;\n  padding: 0;\n  margin: 0;\n}\n\n.lg-select__clear:hover {\n  opacity: 1;\n  background-color: rgba(0, 0, 0, 0.05);\n  transform: scale(1.1);\n}\n\n.lg-select__clear:focus-visible {\n  outline: 2px solid v-bind('COLORS.placeholder');\n  outline-offset: 1px;\n}\n\n/* Dropdown styles */\n.lg-select__dropdown {\n  max-width: 100vw;\n  overflow: hidden;\n  animation: lg-dropdown-appear 0.2s ease-out;\n}\n\n.lg-select__search {\n  padding: 0.75rem;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n  background: rgba(255, 255, 255, 0.95);\n  backdrop-filter: blur(8px) saturate(120%);\n  WebkitBackdropFilter: blur(8px) saturate(120%);\n}\n\n.lg-select__search-wrapper {\n  position: relative;\n  display: flex;\n  align-items: center;\n  background: rgba(255, 255, 255, 0.8);\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 8px;\n  transition: all 0.2s ease;\n  overflow: hidden;\n}\n\n.lg-select__search-wrapper:hover {\n  border-color: rgba(59, 130, 246, 0.3);\n  background: rgba(255, 255, 255, 0.9);\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.lg-select__search-wrapper:focus-within {\n  border-color: #3b82f6;\n  background: rgba(255, 255, 255, 0.95);\n  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n}\n\n.lg-select__search-icon {\n  position: absolute;\n  left: 0.75rem;\n  color: v-bind('COLORS.placeholder');\n  opacity: 0.7;\n  pointer-events: none;\n  z-index: 1;\n}\n\n.lg-select__search-input {\n  width: 100%;\n  padding: 0.5rem 2.5rem 0.5rem 2.5rem;\n  border: none;\n  background: transparent;\n  color: v-bind('COLORS.text');\n  font-size: 0.875rem;\n  font-family: inherit;\n  outline: none;\n  box-sizing: border-box;\n}\n\n.lg-select__search-input::placeholder {\n  color: v-bind('COLORS.placeholder');\n  opacity: 0.8;\n}\n\n.lg-select__search-clear {\n  position: absolute;\n  right: 0.5rem;\n  background: none;\n  border: none;\n  color: v-bind('COLORS.placeholder');\n  opacity: 0.6;\n  cursor: pointer;\n  border-radius: 50%;\n  width: 1.25rem;\n  height: 1.25rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 0.75rem;\n  transition: all 0.2s ease;\n  padding: 0;\n  margin: 0;\n  z-index: 2;\n}\n\n.lg-select__search-clear:hover {\n  opacity: 1;\n  background-color: rgba(0, 0, 0, 0.05);\n  transform: scale(1.1);\n}\n\n.lg-select__search-clear:focus-visible {\n  outline: 2px solid v-bind('COLORS.placeholder');\n  outline-offset: 1px;\n}\n\n.lg-select__search-wrapper:has(.lg-select__search-clear) .lg-select__search-input {\n  padding-right: 2.5rem;\n}\n\n.lg-select__options {\n  overflow-y: auto;\n  max-height: v-bind('dropdownMaxHeight');\n}\n\n.lg-select__option {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 0.625rem 1rem;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  color: v-bind('COLORS.text');\n  border-radius: 6px;\n  margin: 0.125rem 0.5rem;\n  position: relative;\n  background: transparent;\n}\n\n.lg-select__option:hover:not(.lg-select__option--disabled) {\n  background-color: rgba(59, 130, 246, 0.08);\n  transform: translateX(2px);\n  box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);\n}\n\n.lg-select__option--selected {\n  background: linear-gradient(135deg, rgba(59, 130, 246, 0.12) 0%, rgba(59, 130, 246, 0.06) 100%);\n  color: #1d4ed8;\n  font-weight: 500;\n  box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15);\n  border: 1px solid rgba(59, 130, 246, 0.2);\n}\n\n.lg-select__option--selected:hover {\n  background: linear-gradient(135deg, rgba(59, 130, 246, 0.15) 0%, rgba(59, 130, 246, 0.08) 100%);\n  transform: translateX(4px);\n  box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);\n}\n\n.lg-select__option--disabled {\n  opacity: 0.4;\n  cursor: not-allowed;\n  pointer-events: none;\n  background: transparent;\n}\n\n.lg-select__option-label {\n  flex: 1;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  font-size: 0.875rem;\n  line-height: 1.4;\n}\n\n.lg-select__checkbox {\n  flex-shrink: 0;\n  margin-right: 0.75rem;\n  width: 16px;\n  height: 16px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #64748b;\n  transition: all 0.2s ease;\n}\n\n.lg-select__option--selected .lg-select__checkbox {\n  color: #1d4ed8;\n  background: rgba(29, 78, 216, 0.1);\n  border-radius: 3px;\n  animation: check-appear 0.2s ease;\n}\n\n@keyframes check-appear {\n  from {\n    transform: scale(0);\n    opacity: 0;\n  }\n  to {\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n.lg-select__no-results {\n  padding: 2rem 1rem;\n  text-align: center;\n  color: v-bind('COLORS.placeholder');\n  font-size: 0.875rem;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 0.5rem;\n}\n\n.lg-select__no-results::before {\n  content: '';\n  width: 48px;\n  height: 48px;\n  background: rgba(100, 116, 139, 0.1);\n  border-radius: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 0.5rem;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cpath d='m21 21-4.35-4.35'%3E%3C/path%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: center;\n  opacity: 0.5;\n}\n\n.lg-select__no-results-text {\n  font-weight: 500;\n  color: rgba(100, 116, 139, 0.8);\n}\n\n.lg-select__no-results-hint {\n  font-size: 0.75rem;\n  color: rgba(100, 116, 139, 0.6);\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  height: 2.5rem;\n  font-size: 0.875rem;\n  border-radius: 8px;\n}\n\n.lg-size-medium {\n  height: 3rem;\n  font-size: 1rem;\n  border-radius: 12px;\n}\n\n.lg-size-large {\n  height: 3.5rem;\n  font-size: 1.125rem;\n  border-radius: 16px;\n}\n\n/* Ensure clear button doesn't overlap with arrow */\n.lg-select.lg-select--has-clear .lg-select__arrow {\n  margin-right: 2rem;\n}\n\n/* Animations */\n@keyframes lg-dropdown-appear {\n  from {\n    opacity: 0;\n    transform: translateY(-8px) scale(0.95);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0) scale(1);\n  }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n  .lg-select,\n  .lg-select__arrow,\n  .lg-select__clear,\n  .lg-select__dropdown {\n    transition-duration: 0.01ms !important;\n  }\n\n  @keyframes lg-dropdown-appear {\n    from { opacity: 0; }\n    to { opacity: 1; }\n  }\n}\n</style>","<template>\n  <div\n    ref=\"textareaRef\"\n    :class=\"textareaClasses\"\n    :style=\"textareaStyle\"\n  >\n    <div class=\"lg-textarea__container\">\n      <label v-if=\"overlabel && label\" :for=\"id\" :class=\"labelClasses\" :style=\"labelStyle\">\n        {{ label }}\n      </label>\n      <textarea\n        ref=\"inputRef\"\n        :id=\"id\"\n        v-model=\"internalValue\"\n        :placeholder=\"overlabel ? '' : placeholder\"\n        :disabled=\"disabled\"\n        :readonly=\"readonly\"\n        :class=\"inputClasses\"\n        :style=\"inputStyle\"\n        :rows=\"rows\"\n        @input=\"handleInput\"\n        @change=\"handleChange\"\n        @blur=\"handleBlur\"\n        @focus=\"handleFocus\"\n      ></textarea>\n      <div v-if=\"clearable && modelValue && !disabled && !readonly\" class=\"lg-textarea__clear\" @click=\"handleClear\">\n        <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n          <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n        </svg>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, type CSSProperties } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { BaseProps } from '../../types'\n\n// Define TextareaProps inline to avoid import resolution issues\ninterface TextareaProps extends BaseProps {\n  id?: string\n  modelValue?: string | number\n  placeholder?: string\n  label?: string\n  rows?: number\n  resize?: 'none' | 'vertical' | 'horizontal' | 'both'\n  readonly?: boolean\n  clearable?: boolean\n  size?: 'small' | 'medium' | 'large'\n  overlabel?: boolean\n  clearAriaLabel?: string\n  onInput?: (value: string | number) => void\n  onChange?: (value: string | number) => void\n  onFocus?: (event: FocusEvent) => void\n  onBlur?: (event: FocusEvent) => void\n}\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  readonly: false,\n  clearable: false,\n  overlabel: false,\n  rows: 3,\n  resize: 'vertical'\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: string | number]\n  input: [value: string | number]\n  change: [value: string | number]\n  focus: [event: FocusEvent]\n  blur: [event: FocusEvent]\n}>()\n\nconst textareaRef = ref<HTMLElement>()\nconst inputRef = ref<HTMLTextAreaElement>()\nconst isFocused = ref(false)\n\n// Create a local ref for the textarea value\nconst internalValue = ref<string | number>(props.modelValue || '')\n\n// Color variants\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    text: '#ffffff'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    text: '#ffffff'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    text: '#ffffff'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    text: '#ffffff'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    text: '#ffffff'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    text: '#ffffff'\n  }\n} as const\n\nfunction hexToRgb(hex: string) {\n  const normalized = hex.replace('#', '')\n  const bigint = parseInt(normalized, 16)\n  return {\n    r: (bigint >> 16) & 255,\n    g: (bigint >> 8) & 255,\n    b: bigint & 255\n  }\n}\n\nfunction rgba(hex: string, alpha: number) {\n  const { r, g, b } = hexToRgb(hex)\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nfunction getVariantTokens(variant: TextareaProps['variant']) {\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  return {\n    background: 'rgba(255, 255, 255, 0.95)',\n    border: rgba(palette.base, 0.3),\n    text: '#1e293b',\n    placeholder: '#64748b',\n    focus: {\n      border: palette.base,\n      shadow: rgba(palette.base, 0.2)\n    }\n  }\n}\n\nconst variantTokens = computed(() => getVariantTokens(props.variant))\n\nconst {\n  isHovered,\n  calculateElasticTranslation\n} = useLiquidGlass({\n  container: textareaRef,\n  displacementScale: 15,\n  blurAmount: 0.02,\n  saturation: 120,\n  aberrationIntensity: 1,\n  elasticity: 0.2,\n  cornerRadius: 8,\n  overLight: false,\n  mode: 'standard',\n  effect: 'liquidGlass'\n})\n\nconst textareaClasses = computed(() => [\n  'lg-textarea',\n  `lg-textarea--${props.variant}`,\n  `lg-textarea--${props.size}`,\n  props.class,\n  {\n    'lg-textarea--disabled': props.disabled,\n    'lg-textarea--readonly': props.readonly,\n    'lg-textarea--overlabel': props.overlabel,\n    'lg-textarea--focused': isFocused.value,\n    'lg-textarea--has-value': internalValue.value\n  }\n])\n\nconst textareaStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n  const tokens = variantTokens.value\n  const translation = calculateElasticTranslation.value\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    backgroundColor: tokens.background,\n    border: `1px solid ${tokens.border}`,\n    borderRadius: '8px',\n    transform: `translate3d(${translation.x}px, ${translation.y}px, 0) scale(${isHovered.value ? 1.01 : 1})`,\n    transition: 'all 0.2s ease-in-out',\n    cursor: props.disabled ? 'not-allowed' : 'text',\n    willChange: 'transform'\n  } as CSSProperties\n})\n\nconst inputClasses = computed(() => [\n  'lg-textarea__input',\n  `lg-textarea__input--${props.size}`\n])\n\nconst inputStyle = computed(() => ({\n  width: '100%',\n  height: '100%',\n  backgroundColor: 'transparent',\n  border: 'none',\n  outline: 'none',\n  color: variantTokens.value.text,\n  fontSize: 'inherit',\n  fontFamily: 'inherit',\n  resize: props.resize,\n  padding: props.overlabel ? '1.25rem 0.75rem 0.25rem 0.75rem' : '0.75rem',\n  lineHeight: '1.5'\n}))\n\nconst labelClasses = computed(() => [\n  'lg-textarea__label',\n  `lg-textarea__label--${props.size}`,\n  {\n    'lg-textarea__label--focused': isFocused.value,\n    'lg-textarea__label--has-value': internalValue.value\n  }\n])\n\nconst labelStyle = computed(() => ({\n  position: 'absolute',\n  left: '0.75rem',\n  top: '0.75rem',\n  color: variantTokens.value.placeholder,\n  fontSize: 'inherit',\n  fontFamily: 'inherit',\n  pointerEvents: 'none',\n  transition: 'all 0.2s ease-in-out',\n  transform: isFocused.value || internalValue.value ? 'translateY(-0.5rem) scale(0.85)' : 'translateY(0) scale(1)',\n  transformOrigin: 'left top',\n  backgroundColor: variantTokens.value.background,\n  padding: isFocused.value || internalValue.value ? '0 0.25rem' : '0',\n  borderRadius: '2px',\n  zIndex: 1\n}))\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      fontSize: '0.875rem'\n    },\n    medium: {\n      fontSize: '1rem'\n    },\n    large: {\n      fontSize: '1.125rem'\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n\n  if (typeof props.width === 'number') {\n    baseSize.width = `${props.width}px`\n  } else if (typeof props.width === 'string') {\n    baseSize.width = props.width\n  }\n\n  if (typeof props.height === 'number') {\n    baseSize.height = `${props.height}px`\n  } else if (typeof props.height === 'string') {\n    baseSize.height = props.height\n  }\n\n  return baseSize\n}\n\nfunction handleInput(event: Event) {\n  const value = (event.target as HTMLTextAreaElement).value\n  internalValue.value = value\n  emit('update:modelValue', value)\n  emit('input', value)\n}\n\nfunction handleChange(event: Event) {\n  const value = (event.target as HTMLTextAreaElement).value\n  emit('change', value)\n}\n\nfunction handleFocus(event: FocusEvent) {\n  isFocused.value = true\n  emit('focus', event)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  isFocused.value = false\n  emit('blur', event)\n}\n\nfunction handleClear() {\n  internalValue.value = ''\n  emit('update:modelValue', '')\n  emit('change', '')\n  nextTick(() => {\n    inputRef.value?.focus()\n  })\n}\n</script>\n\n<style scoped>\n.lg-textarea {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.lg-textarea__container {\n  position: relative;\n  display: flex;\n  align-items: flex-end;\n  width: 100%;\n  height: 100%;\n}\n\n.lg-textarea__input {\n  width: 100%;\n  min-height: 80px;\n  background: transparent;\n  border: none;\n  outline: none;\n  font-family: inherit;\n  resize: vertical;\n  line-height: 1.5;\n  color: inherit;\n}\n\n.lg-textarea__input::placeholder {\n  color: #64748b;\n  opacity: 0.8;\n}\n\n.lg-textarea__clear {\n  position: absolute;\n  right: 0.75rem;\n  bottom: 0.75rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 20px;\n  height: 20px;\n  background: transparent;\n  border: none;\n  border-radius: 4px;\n  color: #64748b;\n  cursor: pointer;\n  transition: all 0.2s ease;\n  padding: 0;\n}\n\n.lg-textarea__clear:hover {\n  background: rgba(107, 114, 128, 0.1);\n  color: #374151;\n}\n\n.lg-textarea:focus-within {\n  border-color: var(--lg-primary, #3b82f6);\n  box-shadow: 0 0 0 2px var(--lg-hover, rgba(59, 130, 246, 0.1));\n}\n\n.lg-textarea--disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.lg-textarea--readonly {\n  background: rgba(249, 250, 251, 0.5);\n}\n\n/* Size variations */\n.lg-textarea--small .lg-textarea__input {\n  font-size: 0.875rem;\n  padding: 0.625rem;\n  min-height: 60px;\n}\n\n.lg-textarea--large .lg-textarea__input {\n  font-size: 1.125rem;\n  padding: 0.875rem;\n  min-height: 100px;\n}\n\n/* Overlabel styles */\n.lg-textarea--overlabel {\n  position: relative;\n}\n\n.lg-textarea--overlabel .lg-textarea__label {\n  position: absolute;\n  left: 0.75rem;\n  top: 0.75rem;\n  color: #64748b;\n  font-size: inherit;\n  font-family: inherit;\n  pointer-events: none;\n  transition: all 0.2s ease-in-out;\n  transform-origin: left top;\n  z-index: 1;\n}\n\n.lg-textarea--overlabel .lg-textarea__label--focused,\n.lg-textarea--overlabel .lg-textarea__label--has-value {\n  transform: translateY(-0.5rem) scale(0.85);\n}\n\n.lg-textarea--overlabel .lg-textarea__label--small {\n  font-size: 0.875rem;\n}\n\n.lg-textarea--overlabel .lg-textarea__label--large {\n  font-size: 1.125rem;\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n  .lg-textarea {\n    transition-duration: 0.01ms !important;\n  }\n}\n</style>","<template>\n  <form\n    ref=\"glassRef\"\n    :class=\"componentClasses\"\n    :style=\"componentStyle\"\n    @submit=\"handleSubmit\"\n    @reset=\"handleReset\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <!-- Liquid glass effect background -->\n    <div class=\"lg-form__liquid\" :style=\"liquidStyle\"></div>\n\n    <!-- Form border glow -->\n    <div class=\"lg-form__border\" :style=\"borderStyle\"></div>\n\n    <!-- Dynamic light flow effect -->\n    <div class=\"lg-form__light-flow\" :style=\"lightFlowStyle\"></div>\n\n    <!-- Form content -->\n    <div class=\"lg-form__content\">\n      <div class=\"lg-form__fields\" :class=\"`lg-form__fields--${layout}`\">\n        <div\n          v-for=\"field in fields\"\n          :key=\"field.name\"\n          class=\"lg-form__field\"\n          :class=\"[\n            `lg-form__field--${field.type || 'text'}`,\n            `lg-form__field--${layout}`,\n            { 'lg-form__field--has-error': getFieldError(field.name) }\n          ]\"\n        >\n          <!-- Field Label -->\n          <label\n            v-if=\"field.label\"\n            :for=\"field.name\"\n            class=\"lg-form__label\"\n            :class=\"[\n              `lg-form__label--${labelPosition}`,\n              { 'lg-form__label--required': field.required }\n            ]\"\n            :style=\"labelStyle\"\n          >\n            {{ field.label }}\n            <span v-if=\"field.required\" class=\"lg-form__required\">*</span>\n          </label>\n\n          <!-- Field Input Container -->\n          <div class=\"lg-form__input-container\">\n            <!-- Text/Email/Password/Number/Tel Input -->\n            <LgInput\n              v-if=\"isTextInput(field.type)\"\n              :id=\"field.name\"\n              v-model=\"formData[field.name]\"\n              :type=\"field.type as any\"\n              :placeholder=\"field.placeholder\"\n              :disabled=\"field.disabled || disabled\"\n              :readonly=\"field.readonly || readonly\"\n              :variant=\"field.variant || variant\"\n              :size=\"(field.size || props.size) as any\"\n              :class=\"field.class\"\n              :style=\"field.style\"\n              @input=\"handleFieldInput(field.name, $event)\"\n              @change=\"handleFieldChange(field.name, $event)\"\n              @blur=\"handleFieldBlur(field.name)\"\n            />\n\n            <!-- Textarea -->\n            <LgTextarea\n              v-else-if=\"field.type === 'textarea'\"\n              :id=\"field.name\"\n              v-model=\"formData[field.name]\"\n              :placeholder=\"field.placeholder\"\n              :disabled=\"field.disabled || disabled\"\n              :readonly=\"field.readonly || readonly\"\n              :variant=\"field.variant || variant\"\n              :size=\"(field.size || props.size) as any\"\n              :rows=\"field.rows || 3\"\n              :class=\"field.class\"\n              :style=\"field.style\"\n              @input=\"handleFieldInput(field.name, $event)\"\n              @change=\"handleFieldChange(field.name, $event)\"\n              @blur=\"handleFieldBlur(field.name)\"\n            />\n\n            <!-- Select -->\n            <LgSelect\n              v-else-if=\"field.type === 'select'\"\n              :id=\"field.name\"\n              v-model=\"formData[field.name]\"\n              :placeholder=\"field.placeholder\"\n              :disabled=\"field.disabled || disabled\"\n              :variant=\"field.variant || variant\"\n              :size=\"(field.size || props.size) as any\"\n              :options=\"field.options || []\"\n              :class=\"field.class\"\n              :style=\"field.style\"\n              @change=\"handleFieldChange(field.name, $event)\"\n              @blur=\"handleFieldBlur(field.name)\"\n            />\n\n            <!-- Checkbox -->\n            <div\n              v-else-if=\"field.type === 'checkbox'\"\n              class=\"lg-form__checkbox-group\"\n            >\n              <label\n                v-for=\"option in field.options\"\n                :key=\"option.value\"\n                class=\"lg-form__checkbox-label\"\n                :class=\"field.class\"\n              >\n                <input\n                  type=\"checkbox\"\n                  :name=\"field.name\"\n                  :value=\"option.value\"\n                  :checked=\"Array.isArray(formData[field.name])\n                    ? formData[field.name].includes(option.value)\n                    : formData[field.name] === option.value\"\n                  :disabled=\"field.disabled || disabled\"\n                  @change=\"handleCheckboxChange(field.name, option.value, ($event.target as HTMLInputElement).checked)\"\n                  @blur=\"handleFieldBlur(field.name)\"\n                />\n                <span class=\"lg-form__checkbox-text\">{{ option.label }}</span>\n              </label>\n            </div>\n\n            <!-- Radio -->\n            <div\n              v-else-if=\"field.type === 'radio'\"\n              class=\"lg-form__radio-group\"\n            >\n              <label\n                v-for=\"option in field.options\"\n                :key=\"option.value\"\n                class=\"lg-form__radio-label\"\n                :class=\"field.class\"\n              >\n                <input\n                  type=\"radio\"\n                  :name=\"field.name\"\n                  :value=\"option.value\"\n                  :checked=\"formData[field.name] === option.value\"\n                  :disabled=\"field.disabled || disabled\"\n                  @change=\"handleFieldChange(field.name, option.value)\"\n                  @blur=\"handleFieldBlur(field.name)\"\n                />\n                <span class=\"lg-form__radio-text\">{{ option.label }}</span>\n              </label>\n            </div>\n\n            <!-- Validation Message -->\n            <div\n              v-if=\"showValidationMessage && getFieldError(field.name)\"\n              class=\"lg-form__error\"\n            >\n              {{ getFieldError(field.name) }}\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Form Actions -->\n      <div v-if=\"$slots.actions\" class=\"lg-form__actions\">\n        <slot name=\"actions\" :formData=\"formData\" :validate=\"validate\" :reset=\"reset\"></slot>\n      </div>\n      <div v-else class=\"lg-form__default-actions\">\n        <LgButton\n          type=\"submit\"\n          :variant=\"variant\"\n          :size=\"(props.size) as any\"\n          :disabled=\"disabled || loading\"\n          :loading=\"loading\"\n        >\n          提交\n        </LgButton>\n        <LgButton\n          type=\"reset\"\n          variant=\"secondary\"\n          :size=\"(props.size) as any\"\n          :disabled=\"disabled || loading\"\n        >\n          重置\n        </LgButton>\n      </div>\n    </div>\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, type CSSProperties } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { FormProps, FormField, FormValidationResult } from '../../types'\nimport LgInput from '../LgInput/LgInput.vue'\nimport LgSelect from '../LgSelect/LgSelect.vue'\nimport LgTextarea from '../LgTextarea/LgTextarea.vue'\nimport LgButton from '../LgButton/LgButton.vue'\n\n// 1. 属性定义\nconst props = withDefaults(defineProps<FormProps>(), {\n  displacementScale: 70,\n  blurAmount: 0.0625,\n  saturation: 140,\n  aberrationIntensity: 2,\n  elasticity: 0.15,\n  cornerRadius: 16,\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  loading: false,\n  overLight: false,\n  layout: 'vertical',\n  labelWidth: '120px',\n  labelPosition: 'left',\n  validateOnChange: true,\n  showValidationMessage: true,\n  fields: () => [],\n  modelValue: () => ({}),\n  style: undefined,\n  class: undefined\n})\n\n// 2. 事件定义\nconst emit = defineEmits<{\n  'update:modelValue': [value: Record<string, any>]\n  'submit': [values: Record<string, any>]\n  'reset': []\n  'change': [field: string, value: any]\n  'validation-change': [field: string, isValid: boolean, message?: string]\n}>()\n\n// 3. 引用\nconst glassRef = ref<HTMLElement>()\nconst isSubmitting = ref(false)\nconst errors = ref<Record<string, string>>({})\n\n// 4. 初始化表单数据\nconst formData = ref<Record<string, any>>({})\n\n// 初始化表单数据\nconst initializeFormData = () => {\n  const initialData: Record<string, any> = { ...props.modelValue }\n  \n  props.fields.forEach(field => {\n    if (initialData[field.name] === undefined) {\n      if (field.type === 'checkbox' && field.options) {\n        initialData[field.name] = field.defaultValue || []\n      } else {\n        initialData[field.name] = field.defaultValue || ''\n      }\n    }\n  })\n  \n  formData.value = initialData\n}\n\n// 监听外部数据变化\nwatch(() => props.modelValue, (newValue) => {\n  formData.value = { ...newValue }\n}, { deep: true })\n\n// 监听字段配置变化\nwatch(() => props.fields, () => {\n  initializeFormData()\n}, { deep: true, immediate: true })\n\n// 5. 变体令牌接口\ninterface ComponentVariantTokens {\n  surface: string\n  surfaceAlt: string\n  border: string\n  borderSoft: string\n  text: string\n  textSoft: string\n  textMuted: string\n  highlight: string\n  glow: string\n  sheen: string\n  subtle: string\n  shadow: string\n  shadowHover?: string\n}\n\n// 6. 基础颜色定义\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    deep: '#1d4ed8',\n    text: '#e2e8f0'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    deep: '#475569',\n    text: '#e2e8f0'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    deep: '#047857',\n    text: '#ecfdf5'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    deep: '#b45309',\n    text: '#fffbeb'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    deep: '#b91c1c',\n    text: '#fee2e2'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    deep: '#0e7490',\n    text: '#cffafe'\n  }\n} as const\n\nconst NEUTRAL_TEXT_BASE = '#0f172a'\n\n// 7. 工具函数\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n  return result ? {\n    r: parseInt(result[1], 16),\n    g: parseInt(result[2], 16),\n    b: parseInt(result[3], 16)\n  } : null\n}\n\nfunction rgba(hex: string, alpha: number): string {\n  const rgb = hexToRgb(hex)\n  return rgb ? `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})` : hex\n}\n\nfunction getVariantTokens(variant: FormProps['variant'], overLight: boolean): ComponentVariantTokens {\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  if (overLight) {\n    return {\n      surface: 'rgba(255, 255, 255, 0.88)',\n      surfaceAlt: rgba(palette.base, 0.16),\n      border: rgba(palette.base, 0.38),\n      borderSoft: 'rgba(255, 255, 255, 0.65)',\n      text: palette.deep,\n      textSoft: rgba(palette.deep, 0.82),\n      textMuted: rgba(palette.deep, 0.72),\n      highlight: rgba(palette.accent, 0.24),\n      glow: rgba(palette.base, 0.26),\n      sheen: `linear-gradient(135deg,\n        rgba(255, 255, 255, 0.65) 0%,\n        rgba(255, 255, 255, 0.35) 38%,\n        transparent 65%,\n        rgba(255, 255, 255, 0.45) 100%)`,\n      subtle: rgba(palette.base, 0.08),\n      shadow: `0 12px 32px ${rgba('#0f172a', 0.15)}, 0 6px 16px ${rgba('#0f172a', 0.1)}, inset 0 1px 0 rgba(255, 255, 255, 0.6)`,\n      shadowHover: `0 20px 48px ${rgba('#0f172a', 0.22)}, 0 10px 28px ${rgba('#0f172a', 0.14)}, inset 0 1px 0 rgba(255, 255, 255, 0.7)`\n    }\n  }\n\n  return {\n    surface: rgba(palette.base, 0.18),\n    surfaceAlt: rgba(palette.accent, 0.26),\n    border: rgba(palette.accent, 0.48),\n    borderSoft: 'rgba(255, 255, 255, 0.25)',\n    text: rgba(NEUTRAL_TEXT_BASE, 0.94),\n    textSoft: rgba(NEUTRAL_TEXT_BASE, 0.78),\n    textMuted: rgba(NEUTRAL_TEXT_BASE, 0.62),\n    highlight: rgba(palette.accent, 0.45),\n    glow: rgba(palette.base, 0.38),\n    sheen: `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.4) 0%,\n      rgba(255, 255, 255, 0.18) 40%,\n      transparent 60%,\n      rgba(255, 255, 255, 0.25) 100%)`,\n    subtle: 'rgba(255, 255, 255, 0.06)',\n    shadow: `0 16px 38px ${rgba('#0f172a', 0.22)}, 0 8px 20px ${rgba('#0f172a', 0.14)}, inset 0 1px 0 rgba(255, 255, 255, 0.4)`,\n    shadowHover: `0 28px 56px ${rgba('#0f172a', 0.32)}, 0 14px 34px ${rgba('#0f172a', 0.2)}, inset 0 1px 0 rgba(255, 255, 255, 0.5)`\n  }\n}\n\n// 8. 计算属性\nconst variantTokens = computed(() => getVariantTokens(props.variant, props.overLight))\n\nconst {\n  isHovered,\n  isActive,\n  backdropStyle,\n  transformStyle,\n  calculateElasticTranslation\n} = useLiquidGlass({\n  container: glassRef,\n  displacementScale: props.displacementScale,\n  blurAmount: props.blurAmount,\n  saturation: props.saturation,\n  aberrationIntensity: props.aberrationIntensity,\n  elasticity: props.elasticity,\n  cornerRadius: props.cornerRadius,\n  overLight: props.overLight,\n  mode: 'standard',\n  effect: 'liquidGlass'\n})\n\nconst componentClasses = computed(() => [\n  'lg-form',\n  'lg-component',\n  `lg-form--${props.variant}`,\n  `lg-form--${props.layout}`,\n  props.class,\n  {\n    'lg-disabled': props.disabled,\n    'lg-loading': props.loading\n  }\n])\n\nconst componentStyle = computed(() => {\n  const tokens = variantTokens.value\n  const hoverLift = isHovered.value && !props.disabled ? -3 : 0\n  const scale = isHovered.value && !props.disabled ? 1.01 : 1\n  \n  return {\n    ...props.style,\n    backdropFilter: `blur(${12 + props.blurAmount * 32}px) saturate(${props.saturation}%)`,\n    WebkitBackdropFilter: `blur(${12 + props.blurAmount * 32}px) saturate(${props.saturation}%)`,\n    background: tokens.surface,\n    border: `1px solid ${tokens.border}`,\n    boxShadow: isHovered.value ? tokens.shadowHover : tokens.shadow,\n    transform: `translateY(${hoverLift}px) scale(${scale})`,\n    transition: `transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1)`\n  } as CSSProperties\n})\n\nconst labelStyle = computed(() => {\n  if (props.layout === 'horizontal') {\n    return {\n      width: typeof props.labelWidth === 'number' ? `${props.labelWidth}px` : props.labelWidth\n    }\n  }\n  return {}\n})\n\nconst liquidStyle = computed(() => {\n  const tokens = variantTokens.value\n  return {\n    background: tokens.sheen,\n    opacity: isHovered.value && !props.disabled ? 0.7 : 0.35,\n    transform: `translate3d(${calculateElasticTranslation.value.x * 0.5}px, ${calculateElasticTranslation.value.y * 0.3}px, 0)`,\n    transition: 'opacity 0.35s ease, transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)'\n  }\n})\n\nconst borderStyle = computed(() => {\n  const tokens = variantTokens.value\n  return {\n    background: `radial-gradient(circle at 50% 0%,\n      ${tokens.borderSoft} 0%,\n      ${tokens.border} 50%,\n      transparent 100%)`,\n    opacity: isHovered.value && !props.disabled ? 0.7 : 0.4\n  }\n})\n\nconst lightFlowStyle = computed(() => {\n  const tokens = variantTokens.value\n  const angle = 135 + calculateElasticTranslation.value.x * 0.3\n  return {\n    background: `radial-gradient(ellipse at center,\n      ${tokens.highlight} 0%,\n      ${tokens.glow} 40%,\n      transparent 70%)`,\n    opacity: isHovered.value && !props.disabled ? 0.8 : 0,\n    transform: `translate3d(${calculateElasticTranslation.value.x * 0.3}px, ${calculateElasticTranslation.value.y * 0.2}px, 0) scale(1.1)`,\n    transition: 'opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1), transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)'\n  }\n})\n\n// 9. 工具函数\nfunction isTextInput(type?: string): boolean {\n  return !type || ['text', 'password', 'email', 'number', 'tel'].includes(type)\n}\n\n// 10. 事件处理函数\nfunction handleFieldInput(fieldName: string, value: any) {\n  formData.value[fieldName] = value\n  emit('update:modelValue', { ...formData.value })\n  emit('change', fieldName, value)\n  \n  if (props.validateOnChange) {\n    validateField(fieldName)\n  }\n}\n\nfunction handleFieldChange(fieldName: string, value: any) {\n  formData.value[fieldName] = value\n  emit('update:modelValue', { ...formData.value })\n  emit('change', fieldName, value)\n  \n  if (props.validateOnChange) {\n    validateField(fieldName)\n  }\n}\n\nfunction handleFieldBlur(fieldName: string) {\n  if (props.validateOnChange) {\n    validateField(fieldName)\n  }\n}\n\nfunction handleCheckboxChange(fieldName: string, value: any, checked: boolean) {\n  if (Array.isArray(formData.value[fieldName])) {\n    if (checked) {\n      formData.value[fieldName].push(value)\n    } else {\n      const index = formData.value[fieldName].indexOf(value)\n      if (index > -1) {\n        formData.value[fieldName].splice(index, 1)\n      }\n    }\n  } else {\n    formData.value[fieldName] = checked ? value : undefined\n  }\n  \n  emit('update:modelValue', { ...formData.value })\n  emit('change', fieldName, formData.value[fieldName])\n  \n  if (props.validateOnChange) {\n    validateField(fieldName)\n  }\n}\n\nfunction validateField(fieldName: string): boolean {\n  const field = props.fields.find(f => f.name === fieldName)\n  if (!field || !field.validation) {\n    delete errors.value[fieldName]\n    emit('validation-change', fieldName, true)\n    return true\n  }\n  \n  const value = formData.value[fieldName]\n  const validation = field.validation\n  \n  // Required validation\n  if (field.required && (!value || (Array.isArray(value) && value.length === 0))) {\n    errors.value[fieldName] = `${field.label || fieldName}是必填项`\n    emit('validation-change', fieldName, false, errors.value[fieldName])\n    return false\n  }\n  \n  // Pattern validation\n  if (validation.pattern && value && !validation.pattern.test(String(value))) {\n    errors.value[fieldName] = `${field.label || fieldName}格式不正确`\n    emit('validation-change', fieldName, false, errors.value[fieldName])\n    return false\n  }\n  \n  // Min/Max validation for numbers\n  if (typeof value === 'number') {\n    if (validation.min !== undefined && value < validation.min) {\n      errors.value[fieldName] = `${field.label || fieldName}不能小于${validation.min}`\n      emit('validation-change', fieldName, false, errors.value[fieldName])\n      return false\n    }\n    if (validation.max !== undefined && value > validation.max) {\n      errors.value[fieldName] = `${field.label || fieldName}不能大于${validation.max}`\n      emit('validation-change', fieldName, false, errors.value[fieldName])\n      return false\n    }\n  }\n  \n  // MinLength/MaxLength validation for strings\n  if (typeof value === 'string') {\n    if (validation.minLength !== undefined && value.length < validation.minLength) {\n      errors.value[fieldName] = `${field.label || fieldName}长度不能少于${validation.minLength}个字符`\n      emit('validation-change', fieldName, false, errors.value[fieldName])\n      return false\n    }\n    if (validation.maxLength !== undefined && value.length > validation.maxLength) {\n      errors.value[fieldName] = `${field.label || fieldName}长度不能超过${validation.maxLength}个字符`\n      emit('validation-change', fieldName, false, errors.value[fieldName])\n      return false\n    }\n  }\n  \n  // Custom validation\n  if (validation.custom) {\n    const result = validation.custom(value)\n    if (result !== true) {\n      errors.value[fieldName] = typeof result === 'string' ? result : `${field.label || fieldName}验证失败`\n      emit('validation-change', fieldName, false, errors.value[fieldName])\n      return false\n    }\n  }\n  \n  // Clear error if validation passes\n  delete errors.value[fieldName]\n  emit('validation-change', fieldName, true)\n  return true\n}\n\nfunction validate(): FormValidationResult {\n  let isValid = true\n  const newErrors: Record<string, string> = {}\n  \n  props.fields.forEach(field => {\n    const fieldValid = validateField(field.name)\n    if (!fieldValid) {\n      isValid = false\n      newErrors[field.name] = errors.value[field.name]\n    }\n  })\n  \n  errors.value = newErrors\n  return {\n    isValid,\n    errors: newErrors\n  }\n}\n\nfunction getFieldError(fieldName: string): string | undefined {\n  return errors.value[fieldName]\n}\n\nasync function handleSubmit(event: Event) {\n  event.preventDefault()\n  \n  if (props.disabled || isSubmitting.value) {\n    return\n  }\n  \n  const validationResult = validate()\n  \n  if (!validationResult.isValid) {\n    return\n  }\n  \n  isSubmitting.value = true\n  \n  try {\n    await props.onSubmit?.(formData.value)\n    emit('submit', formData.value)\n  } catch (error) {\n    console.error('Form submission error:', error)\n  } finally {\n    isSubmitting.value = false\n  }\n}\n\nfunction handleReset(event: Event) {\n  event.preventDefault()\n  \n  initializeFormData()\n  errors.value = {}\n  \n  props.onReset?.()\n  emit('reset')\n}\n\nfunction reset() {\n  initializeFormData()\n  errors.value = {}\n}\n\nfunction handleMouseEnter() {\n  if (!props.disabled && !props.loading) {\n    isHovered.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  isHovered.value = false\n  isActive.value = false\n}\n\n// Expose methods for parent components\ndefineExpose({\n  validate,\n  reset,\n  formData,\n  errors,\n  getFieldError\n})\n</script>\n\n<style scoped>\n.lg-form {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  border-radius: var(--lg-border-radius);\n  outline: none;\n  transition: var(--lg-transition);\n  overflow: hidden;\n  width: 100%;\n}\n\n.lg-form:focus-within {\n  outline: 2px solid var(--lg-primary, #3b82f6);\n  outline-offset: 2px;\n}\n\n.lg-form:disabled,\n.lg-form.lg-disabled {\n  opacity: 0.6;\n  pointer-events: none;\n}\n\n.lg-form__liquid {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  mix-blend-mode: soft-light;\n  filter: blur(10px);\n  border-radius: inherit;\n  overflow: hidden;\n  will-change: opacity, transform;\n}\n\n.lg-form__border {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  pointer-events: none;\n  z-index: 1;\n  mix-blend-mode: overlay;\n  opacity: 0.5;\n  overflow: hidden;\n}\n\n.lg-form__light-flow {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 0;\n  transition: opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1), transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n  mix-blend-mode: screen;\n  filter: blur(14px);\n  overflow: hidden;\n  will-change: opacity, transform;\n}\n\n.lg-form__content {\n  position: relative;\n  z-index: 10;\n  color: inherit;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  padding: 1.5rem;\n  width: 100%;\n  box-sizing: border-box;\n  overflow: visible;\n}\n\n.lg-form__fields {\n  display: flex;\n  flex-direction: column;\n  gap: 1.5rem;\n  margin-bottom: 1.5rem;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.lg-form__fields--horizontal {\n  gap: 1rem;\n}\n\n.lg-form__fields--inline {\n  flex-direction: row;\n  flex-wrap: wrap;\n  gap: 1rem;\n  align-items: flex-end;\n}\n\n.lg-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.lg-form__field--horizontal {\n  flex-direction: row;\n  align-items: center;\n  gap: 1rem;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.lg-form__field--inline {\n  flex-direction: row;\n  align-items: center;\n  gap: 0.75rem;\n  flex: 1;\n  min-width: 0;\n}\n\n.lg-form__field--has-error {\n  --lg-primary: #ef4444;\n}\n\n.lg-form__label {\n  font-weight: 500;\n  color: inherit;\n  display: flex;\n  align-items: center;\n  gap: 0.25rem;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.lg-form__label--required .lg-form__required {\n  color: #ef4444;\n}\n\n.lg-form__required {\n  color: #ef4444;\n  font-weight: bold;\n}\n\n.lg-form__input-container {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  gap: 0.25rem;\n  flex: 1;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.lg-form__textarea,\n.lg-form__select {\n  background: rgba(255, 255, 255, 0.1);\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  border-radius: 8px;\n  padding: 0.75rem;\n  color: inherit;\n  font-family: inherit;\n  font-size: inherit;\n  transition: all 0.3s ease;\n  backdrop-filter: blur(10px);\n  width: 100%;\n  box-sizing: border-box;\n  max-width: 100%;\n}\n\n.lg-form__textarea:focus,\n.lg-form__select:focus {\n  outline: none;\n  border-color: var(--lg-primary, #3b82f6);\n  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);\n}\n\n.lg-form__textarea {\n  resize: vertical;\n  min-height: 100px;\n}\n\n.lg-form__checkbox-group,\n.lg-form__radio-group {\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n}\n\n.lg-form__checkbox-label,\n.lg-form__radio-label {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  cursor: pointer;\n  color: inherit;\n}\n\n.lg-form__checkbox-label input,\n.lg-form__radio-label input {\n  accent-color: var(--lg-primary, #3b82f6);\n}\n\n.lg-form__error {\n  color: #ef4444;\n  font-size: 0.875rem;\n  margin-top: 0.25rem;\n}\n\n.lg-form__actions {\n  display: flex;\n  gap: 1rem;\n  justify-content: flex-end;\n  padding-top: 1rem;\n  border-top: 1px solid rgba(255, 255, 255, 0.1);\n  flex-wrap: wrap;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.lg-form__default-actions {\n  display: flex;\n  gap: 1rem;\n  justify-content: flex-end;\n  padding-top: 1rem;\n  border-top: 1px solid rgba(255, 255, 255, 0.1);\n  flex-wrap: wrap;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  --lg-blur-amount: 8px;\n}\n\n.lg-size-medium {\n  --lg-blur-amount: 12px;\n}\n\n.lg-size-large {\n  --lg-blur-amount: 16px;\n}\n\n/* Variant-specific styles */\n.lg-form--primary {\n  --lg-primary: #3b82f6;\n}\n\n.lg-form--secondary {\n  --lg-primary: #64748b;\n}\n\n.lg-form--success {\n  --lg-primary: #10b981;\n}\n\n.lg-form--warning {\n  --lg-primary: #f59e0b;\n}\n\n.lg-form--error {\n  --lg-primary: #ef4444;\n}\n\n.lg-form--info {\n  --lg-primary: #06b6d4;\n}\n\n/* Dark theme support */\n[data-theme=\"dark\"] .lg-form__textarea,\n[data-theme=\"dark\"] .lg-form__select {\n  background: rgba(0, 0, 0, 0.2);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n  .lg-form,\n  .lg-form__liquid,\n  .lg-form__border,\n  .lg-form__light-flow {\n    transition-duration: 0.01ms !important;\n  }\n}\n\n/* Responsive design */\n@media (max-width: 768px) {\n  .lg-form__content {\n    padding: 1rem;\n  }\n  \n  .lg-form__fields--horizontal {\n    flex-direction: column;\n    gap: 1.5rem;\n  }\n  \n  .lg-form__field--horizontal {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 0.5rem;\n  }\n  \n  .lg-form__fields--inline {\n    flex-direction: column;\n    align-items: stretch;\n  }\n  \n  .lg-form__field--inline {\n    flex-direction: column;\n    align-items: flex-start;\n    width: 100%;\n  }\n  \n  .lg-form__actions,\n  .lg-form__default-actions {\n    flex-direction: column;\n    gap: 0.75rem;\n  }\n  \n  .lg-form__actions > *,\n  .lg-form__default-actions > * {\n    width: 100%;\n  }\n}\n\n@media (max-width: 480px) {\n  .lg-form__content {\n    padding: 0.75rem;\n  }\n  \n  .lg-form__fields {\n    gap: 1rem;\n  }\n  \n  .lg-form__textarea,\n  .lg-form__select {\n    padding: 0.625rem;\n    font-size: 0.875rem;\n  }\n}\n</style>\n","<template>\n  <div\n    :class=\"loadingClasses\"\n    :style=\"loadingStyle\"\n    class=\"lg-loading\"\n  >\n    <!-- Liquid Glass Spinner -->\n    <div v-if=\"type === 'liquid'\" class=\"lg-loading__liquid-spinner\">\n      <div class=\"lg-loading__liquid-drop\"></div>\n      <div class=\"lg-loading__liquid-ripple\"></div>\n      <div class=\"lg-loading__liquid-core\"></div>\n    </div>\n\n    <!-- Modern Ring Spinner -->\n    <div v-else-if=\"type === 'ring'\" class=\"lg-loading__ring\">\n      <div class=\"lg-loading__ring-segment\"></div>\n      <div class=\"lg-loading__ring-segment\"></div>\n      <div class=\"lg-loading__ring-segment\"></div>\n      <div class=\"lg-loading__ring-segment\"></div>\n    </div>\n\n    <!-- Morphing Blob Animation -->\n    <div v-else-if=\"type === 'morph'\" class=\"lg-loading__morph\">\n      <div class=\"lg-loading__morph-blob\"></div>\n      <div class=\"lg-loading__morph-blob\"></div>\n      <div class=\"lg-loading__morph-blob\"></div>\n    </div>\n\n    <!-- Quantum Pulse Animation -->\n    <div v-else-if=\"type === 'quantum'\" class=\"lg-loading__quantum\">\n      <div class=\"lg-loading__quantum-core\"></div>\n      <div class=\"lg-loading__quantum-ring\"></div>\n      <div class=\"lg-loading__quantum-particles\">\n        <div class=\"lg-loading__quantum-particle\"></div>\n        <div class=\"lg-loading__quantum-particle\"></div>\n        <div class=\"lg-loading__quantum-particle\"></div>\n        <div class=\"lg-loading__quantum-particle\"></div>\n      </div>\n    </div>\n\n    <!-- Wave Dots Animation -->\n    <div v-else-if=\"type === 'wave'\" class=\"lg-loading__wave\">\n      <div class=\"lg-loading__wave-dot\"></div>\n      <div class=\"lg-loading__wave-dot\"></div>\n      <div class=\"lg-loading__wave-dot\"></div>\n      <div class=\"lg-loading__wave-dot\"></div>\n      <div class=\"lg-loading__wave-dot\"></div>\n    </div>\n\n    <!-- Classic spinner with modern twist -->\n    <div v-else class=\"lg-loading__classic\">\n      <div class=\"lg-loading__classic-ring\"></div>\n      <div class=\"lg-loading__classic-core\"></div>\n    </div>\n\n    <!-- Loading text -->\n    <div v-if=\"text\" class=\"lg-loading__text\" :style=\"textStyle\">\n      {{ text }}\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type CSSProperties } from 'vue'\n\n// 定义 Loading 接口以避免类型解析问题\ninterface LoadingProps {\n  type?: 'liquid' | 'ring' | 'morph' | 'quantum' | 'wave' | 'classic'\n  size?: 'tiny' | 'small' | 'medium' | 'large' | 'huge'\n  color?: string\n  text?: string\n  overlay?: boolean\n  transparent?: boolean\n  style?: CSSProperties\n}\n\nconst props = withDefaults(defineProps<LoadingProps>(), {\n  type: 'liquid',\n  size: 'medium',\n  color: '#3b82f6',\n  text: '',\n  overlay: false,\n  transparent: false\n})\n\nconst loadingClasses = computed(() => [\n  `lg-loading--${props.type}`,\n  `lg-loading--${props.size}`,\n  {\n    'lg-loading--overlay': props.overlay,\n    'lg-loading--transparent': props.transparent\n  }\n])\n\nconst loadingStyle = computed(() => ({\n  '--loading-color': props.color,\n  '--loading-size': getSizeValue(props.size),\n  ...props.style\n} as CSSProperties))\n\nconst textStyle = computed(() => ({\n  color: props.color,\n  fontSize: getTextSize(props.size)\n}))\n\nfunction getSizeValue(size: LoadingProps['size']): string {\n  const sizes = {\n    tiny: '16px',\n    small: '24px',\n    medium: '32px',\n    large: '48px',\n    huge: '64px'\n  }\n  return sizes[size as keyof typeof sizes] || sizes.medium\n}\n\nfunction getTextSize(size: LoadingProps['size']): string {\n  const sizes = {\n    tiny: '10px',\n    small: '12px',\n    medium: '14px',\n    large: '16px',\n    huge: '18px'\n  }\n  return sizes[size as keyof typeof sizes] || sizes.medium\n}\n</script>\n\n<style scoped>\n.lg-loading {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 0.75rem;\n  position: relative;\n}\n\n.lg-loading--overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(255, 255, 255, 0.9);\n  backdrop-filter: blur(4px);\n  -webkit-backdrop-filter: blur(4px);\n  z-index: 1000;\n  border-radius: inherit;\n}\n\n.lg-loading--transparent {\n  background: transparent;\n}\n\n/* Liquid Glass Animation */\n.lg-loading__liquid-spinner {\n  position: relative;\n  width: var(--loading-size, 32px);\n  height: var(--loading-size, 32px);\n}\n\n.lg-loading__liquid-drop {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 60%;\n  height: 60%;\n  background: linear-gradient(135deg, var(--loading-color, #3b82f6), rgba(59, 130, 246, 0.6));\n  border-radius: 50% 40% 50% 40%;\n  transform: translate(-50%, -50%) scale(1);\n  animation: liquid-drop 2s ease-in-out infinite;\n  box-shadow: 0 4px 20px rgba(59, 130, 246, 0.3);\n}\n\n.lg-loading__liquid-ripple {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  border: 2px solid var(--loading-color, #3b82f6);\n  border-radius: 50%;\n  transform: translate(-50%, -50%) scale(0.8);\n  animation: liquid-ripple 2s ease-in-out infinite;\n  opacity: 0.6;\n}\n\n.lg-loading__liquid-core {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 30%;\n  height: 30%;\n  background: radial-gradient(circle, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.3) 100%);\n  border-radius: 50%;\n  transform: translate(-50%, -50%);\n  animation: liquid-core 2s ease-in-out infinite;\n}\n\n/* Modern Ring Animation */\n.lg-loading__ring {\n  position: relative;\n  width: var(--loading-size, 32px);\n  height: var(--loading-size, 32px);\n}\n\n.lg-loading__ring-segment {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  width: 3px;\n  height: 40%;\n  background: linear-gradient(to bottom, transparent, var(--loading-color, #3b82f6), transparent);\n  transform-origin: 50% 100%;\n  border-radius: 2px;\n  animation: ring-rotate 1.5s ease-in-out infinite;\n}\n\n.lg-loading__ring-segment:nth-child(1) {\n  transform: translateX(-50%) rotate(0deg);\n  animation-delay: 0s;\n}\n\n.lg-loading__ring-segment:nth-child(2) {\n  transform: translateX(-50%) rotate(90deg);\n  animation-delay: 0.375s;\n}\n\n.lg-loading__ring-segment:nth-child(3) {\n  transform: translateX(-50%) rotate(180deg);\n  animation-delay: 0.75s;\n}\n\n.lg-loading__ring-segment:nth-child(4) {\n  transform: translateX(-50%) rotate(270deg);\n  animation-delay: 1.125s;\n}\n\n/* Morphing Blob Animation */\n.lg-loading__morph {\n  position: relative;\n  width: var(--loading-size, 32px);\n  height: var(--loading-size, 32px);\n}\n\n.lg-loading__morph-blob {\n  position: absolute;\n  width: 40%;\n  height: 40%;\n  background: var(--loading-color, #3b82f6);\n  border-radius: 50%;\n  animation: morph-blob 3s ease-in-out infinite;\n}\n\n.lg-loading__morph-blob:nth-child(1) {\n  top: 10%;\n  left: 10%;\n  animation-delay: 0s;\n}\n\n.lg-loading__morph-blob:nth-child(2) {\n  top: 50%;\n  right: 10%;\n  animation-delay: 1s;\n}\n\n.lg-loading__morph-blob:nth-child(3) {\n  bottom: 10%;\n  left: 30%;\n  animation-delay: 2s;\n}\n\n/* Quantum Pulse Animation */\n.lg-loading__quantum {\n  position: relative;\n  width: var(--loading-size, 32px);\n  height: var(--loading-size, 32px);\n}\n\n.lg-loading__quantum-core {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 25%;\n  height: 25%;\n  background: radial-gradient(circle, var(--loading-color, #3b82f6), rgba(59, 130, 246, 0.3));\n  border-radius: 50%;\n  transform: translate(-50%, -50%);\n  animation: quantum-core 2s ease-in-out infinite;\n  box-shadow: 0 0 20px var(--loading-color, #3b82f6);\n}\n\n.lg-loading__quantum-ring {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 60%;\n  height: 60%;\n  border: 2px solid var(--loading-color, #3b82f6);\n  border-radius: 50%;\n  transform: translate(-50%, -50%);\n  animation: quantum-ring 2s ease-in-out infinite;\n  opacity: 0.6;\n}\n\n.lg-loading__quantum-particles {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  transform: translate(-50%, -50%);\n}\n\n.lg-loading__quantum-particle {\n  position: absolute;\n  width: 3px;\n  height: 3px;\n  background: var(--loading-color, #3b82f6);\n  border-radius: 50%;\n  animation: quantum-particle 2s linear infinite;\n}\n\n.lg-loading__quantum-particle:nth-child(1) {\n  top: 0;\n  left: 50%;\n  animation-delay: 0s;\n}\n\n.lg-loading__quantum-particle:nth-child(2) {\n  top: 50%;\n  right: 0;\n  animation-delay: 0.5s;\n}\n\n.lg-loading__quantum-particle:nth-child(3) {\n  bottom: 0;\n  left: 50%;\n  animation-delay: 1s;\n}\n\n.lg-loading__quantum-particle:nth-child(4) {\n  top: 50%;\n  left: 0;\n  animation-delay: 1.5s;\n}\n\n/* Wave Dots Animation */\n.lg-loading__wave {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n}\n\n.lg-loading__wave-dot {\n  width: calc(var(--loading-size, 32px) * 0.2);\n  height: calc(var(--loading-size, 32px) * 0.2);\n  background: var(--loading-color, #3b82f6);\n  border-radius: 50%;\n  animation: wave-dot 1.5s ease-in-out infinite;\n}\n\n.lg-loading__wave-dot:nth-child(1) { animation-delay: 0s; }\n.lg-loading__wave-dot:nth-child(2) { animation-delay: 0.1s; }\n.lg-loading__wave-dot:nth-child(3) { animation-delay: 0.2s; }\n.lg-loading__wave-dot:nth-child(4) { animation-delay: 0.3s; }\n.lg-loading__wave-dot:nth-child(5) { animation-delay: 0.4s; }\n\n/* Classic Animation */\n.lg-loading__classic {\n  position: relative;\n  width: var(--loading-size, 32px);\n  height: var(--loading-size, 32px);\n}\n\n.lg-loading__classic-ring {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 3px solid transparent;\n  border-top: 3px solid var(--loading-color, #3b82f6);\n  border-radius: 50%;\n  animation: classic-spin 1s linear infinite;\n  box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2);\n}\n\n.lg-loading__classic-core {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 20%;\n  height: 20%;\n  background: var(--loading-color, #3b82f6);\n  border-radius: 50%;\n  transform: translate(-50%, -50%);\n  animation: classic-core 1s ease-in-out infinite;\n}\n\n.lg-loading__text {\n  font-weight: 500;\n  text-align: center;\n  white-space: nowrap;\n  opacity: 0.8;\n  letter-spacing: 0.025em;\n}\n\n/* Size variations */\n.lg-loading--tiny {\n  gap: 0.25rem;\n}\n\n.lg-loading--small {\n  gap: 0.5rem;\n}\n\n.lg-loading--medium {\n  gap: 0.75rem;\n}\n\n.lg-loading--large {\n  gap: 1rem;\n}\n\n.lg-loading--huge {\n  gap: 1.25rem;\n}\n\n/* Animations */\n@keyframes liquid-drop {\n  0%, 100% {\n    border-radius: 50% 40% 50% 40%;\n    transform: translate(-50%, -50%) scale(1);\n  }\n  50% {\n    border-radius: 40% 50% 40% 50%;\n    transform: translate(-50%, -50%) scale(1.1);\n  }\n}\n\n@keyframes liquid-ripple {\n  0%, 100% {\n    transform: translate(-50%, -50%) scale(0.8);\n    opacity: 0.6;\n  }\n  50% {\n    transform: translate(-50%, -50%) scale(1.3);\n    opacity: 0.2;\n  }\n}\n\n@keyframes liquid-core {\n  0%, 100% {\n    transform: translate(-50%, -50%) scale(1);\n    opacity: 0.9;\n  }\n  50% {\n    transform: translate(-50%, -50%) scale(0.8);\n    opacity: 1;\n  }\n}\n\n@keyframes ring-rotate {\n  0%, 100% {\n    transform: translateX(-50%) rotate(0deg) scaleY(1);\n    opacity: 0.3;\n  }\n  50% {\n    transform: translateX(-50%) rotate(180deg) scaleY(1.5);\n    opacity: 1;\n  }\n}\n\n@keyframes morph-blob {\n  0%, 100% {\n    border-radius: 50% 50% 50% 50%;\n    transform: scale(1) rotate(0deg);\n  }\n  33% {\n    border-radius: 30% 70% 70% 30%;\n    transform: scale(1.2) rotate(120deg);\n  }\n  66% {\n    border-radius: 70% 30% 30% 70%;\n    transform: scale(0.8) rotate(240deg);\n  }\n}\n\n@keyframes quantum-core {\n  0%, 100% {\n    transform: translate(-50%, -50%) scale(1);\n    box-shadow: 0 0 20px var(--loading-color, #3b82f6);\n  }\n  50% {\n    transform: translate(-50%, -50%) scale(1.3);\n    box-shadow: 0 0 40px var(--loading-color, #3b82f6);\n  }\n}\n\n@keyframes quantum-ring {\n  0%, 100% {\n    transform: translate(-50%, -50%) scale(1) rotate(0deg);\n    opacity: 0.6;\n  }\n  50% {\n    transform: translate(-50%, -50%) scale(1.5) rotate(180deg);\n    opacity: 0.2;\n  }\n}\n\n@keyframes quantum-particle {\n  0% {\n    transform: rotate(0deg) translateX(20px) rotate(0deg);\n    opacity: 1;\n  }\n  100% {\n    transform: rotate(360deg) translateX(20px) rotate(-360deg);\n    opacity: 0;\n  }\n}\n\n@keyframes wave-dot {\n  0%, 60%, 100% {\n    transform: scale(0.8);\n    opacity: 0.4;\n  }\n  30% {\n    transform: scale(1.2);\n    opacity: 1;\n  }\n}\n\n@keyframes classic-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes classic-core {\n  0%, 100% {\n    transform: translate(-50%, -50%) scale(1);\n    opacity: 0.8;\n  }\n  50% {\n    transform: translate(-50%, -50%) scale(0.6);\n    opacity: 1;\n  }\n}\n\n/* Dark theme support */\n[data-theme=\"dark\"] .lg-loading--overlay {\n  background: rgba(0, 0, 0, 0.8);\n}\n\n[data-theme=\"dark\"] .lg-loading__text {\n  opacity: 0.9;\n}\n</style>\n","import type { ComputedRef } from 'vue'\nimport type { MenuItem } from '../../types'\n\nexport interface MenuContext {\n  orientation: ComputedRef<'horizontal' | 'vertical'>\n  type: ComputedRef<'menu' | 'menubar'>\n  showDelay: ComputedRef<number>\n  hideDelay: ComputedRef<number>\n  indent: ComputedRef<number>\n  disabled: ComputedRef<boolean>\n  isSubmenuOpen: (id: string) => boolean\n  isItemSelected: (id: string) => boolean\n  openSubmenu: (item: MenuItem, parentId: string | null) => void\n  closeSubmenu: (item: MenuItem, parentId: string | null, options?: { deep?: boolean }) => void\n  selectItem: (item: MenuItem, event?: MouseEvent) => void\n  handleItemHover: (item: MenuItem) => void\n  handleItemLeave: (item: MenuItem) => void\n}\n\nexport const menuInjectionKey = Symbol('LgMenuContext')\n","<template>\n  <li v-if=\"item.type === 'separator'\" class=\"lg-menu__separator\" role=\"separator\"></li>\n\n  <li v-else-if=\"item.type === 'text'\" class=\"lg-menu__text\" role=\"presentation\">\n    <span class=\"lg-menu__text-label\">{{ item.label }}</span>\n  </li>\n\n  <li\n    v-else\n    :class=\"itemClasses\"\n    role=\"none\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <button\n      class=\"lg-menu__trigger\"\n      :class=\"triggerClasses\"\n      type=\"button\"\n      :role=\"buttonRole\"\n      :disabled=\"isDisabled\"\n      :aria-haspopup=\"hasChildren ? 'menu' : undefined\"\n      :aria-expanded=\"hasChildren ? (isOpen ? 'true' : 'false') : undefined\"\n      :aria-checked=\"isCheckable ? ((item.checked ?? false) ? 'true' : 'false') : undefined\"\n      :data-menu-level=\"level\"\n      :style=\"triggerStyle\"\n      @focus=\"handleFocus\"\n      @blur=\"handleBlur\"\n      @click=\"handleClick\"\n    >\n      <span v-if=\"hasIcon && item.icon\" class=\"lg-menu__icon\">\n        <span>{{ iconContent }}</span>\n      </span>\n\n      <span v-if=\"isCheckable\" class=\"lg-menu__check\">\n        <span v-if=\"item.type === 'check' && item.checked\">✓</span>\n        <span v-else-if=\"item.type === 'radio' && item.checked\">●</span>\n        <span v-else class=\"lg-menu__check-placeholder\"></span>\n      </span>\n\n      <span class=\"lg-menu__label\">{{ item.label }}</span>\n\n      <span v-if=\"item.badge\" class=\"lg-menu__badge\">{{ item.badge }}</span>\n      <span v-if=\"item.shortcut\" class=\"lg-menu__shortcut\">{{ item.shortcut }}</span>\n\n      <span v-if=\"hasChildren\" class=\"lg-menu__arrow\">\n        {{ arrowSymbol }}\n      </span>\n    </button>\n\n    <Transition name=\"lg-menu-submenu\" appear>\n      <ul\n        v-if=\"hasChildren && isOpen\"\n        class=\"lg-menu__submenu\"\n        :class=\"submenuClasses\"\n        role=\"menu\"\n        @mouseenter=\"handleSubmenuMouseEnter\"\n        @mouseleave=\"handleSubmenuMouseLeave\"\n      >\n        <LgMenuItem\n          v-for=\"child in visibleChildren\"\n          :key=\"child.id\"\n          :item=\"child\"\n          :level=\"level + 1\"\n          :parent-id=\"item.id\"\n        />\n      </ul>\n    </Transition>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, ref } from 'vue'\nimport type { MenuItem as MenuItemType } from '../../types'\nimport { menuInjectionKey, type MenuContext } from './context'\n\ndefineOptions({ name: 'LgMenuItem' })\n\nconst props = defineProps<{\n  item: MenuItemType\n  level: number\n  parentId: string | null\n}>()\n\nconst injectedMenu = inject<MenuContext>(menuInjectionKey)\n\nif (!injectedMenu) {\n  throw new Error('LgMenuItem must be used inside LgMenu')\n}\n\nconst menu = injectedMenu\n\nconst isHovered = ref(false)\nlet openTimer: number | null = null\nlet closeTimer: number | null = null\n\nconst hasChildren = computed(() => Array.isArray(props.item.children) && props.item.children.length > 0)\nconst visibleChildren = computed(() => (props.item.children ?? []).filter(child => !child.hidden))\nconst isOpen = computed(() => menu.isSubmenuOpen(props.item.id))\nconst isSelected = computed(() => menu.isItemSelected(props.item.id))\nconst isCheckable = computed(() => props.item.type === 'check' || props.item.type === 'radio')\nconst isDisabled = computed(() => menu.disabled.value || Boolean(props.item.disabled))\nconst hasIcon = computed(() => Boolean(props.item.icon))\n\nconst iconContent = computed(() => props.item.icon ?? '')\n\nconst submenuPlacement = computed<'below' | 'side' | 'inline'>(() => {\n  if (menu.orientation.value === 'horizontal') {\n    return props.level === 0 ? 'below' : 'side'\n  }\n  return 'inline'\n})\n\nconst isInlineSubmenu = computed(() => submenuPlacement.value === 'inline')\n\nconst submenuClasses = computed(() => [\n  `lg-menu__submenu--${submenuPlacement.value}`\n])\n\nconst arrowSymbol = computed(() => {\n  if (!hasChildren.value) return ''\n  if (submenuPlacement.value === 'inline') {\n    return isOpen.value ? '⌄' : '›'\n  }\n  if (submenuPlacement.value === 'below') {\n    return '⌄'\n  }\n  return isOpen.value ? '⌄' : '›'\n})\n\nconst itemClasses = computed(() => [\n  'lg-menu__item',\n  {\n    'lg-menu__item--open': isOpen.value,\n    'lg-menu__item--selected': isSelected.value,\n    'lg-menu__item--hovered': isHovered.value,\n    'lg-menu__item--disabled': isDisabled.value\n  }\n])\n\nconst triggerClasses = computed(() => ({\n  'lg-menu__trigger--checkable': isCheckable.value,\n  'lg-menu__trigger--inline-parent': hasChildren.value && isInlineSubmenu.value,\n  'lg-menu__trigger--inline-open': hasChildren.value && isInlineSubmenu.value && isOpen.value\n}))\n\nconst buttonRole = computed(() => {\n  if (isCheckable.value) {\n    return props.item.type === 'radio' ? 'menuitemradio' : 'menuitemcheckbox'\n  }\n  return 'menuitem'\n})\n\nconst triggerStyle = computed(() => {\n  if (submenuPlacement.value === 'below' && props.level === 0) {\n    return {}\n  }\n\n  const indent = Math.max(0, props.level) * menu.indent.value\n  if (indent === 0) {\n    return {}\n  }\n\n  return {\n    paddingLeft: `calc(var(--lg-menu-padding-inline) + ${indent}px)`\n  }\n})\n\nfunction clearOpenTimer(): void {\n  if (openTimer !== null) {\n    window.clearTimeout(openTimer)\n    openTimer = null\n  }\n}\n\nfunction clearCloseTimer(): void {\n  if (closeTimer !== null) {\n    window.clearTimeout(closeTimer)\n    closeTimer = null\n  }\n}\n\nfunction clearTimers(): void {\n  clearOpenTimer()\n  clearCloseTimer()\n}\n\nfunction scheduleOpen(): void {\n  if (isInlineSubmenu.value) return\n\n  clearOpenTimer()\n  openTimer = window.setTimeout(() => {\n    menu.openSubmenu(props.item, props.parentId)\n  }, menu.showDelay.value)\n}\n\nfunction scheduleClose(): void {\n  if (isInlineSubmenu.value) return\n\n  clearCloseTimer()\n  closeTimer = window.setTimeout(() => {\n    menu.closeSubmenu(props.item, props.parentId, { deep: true })\n  }, menu.hideDelay.value)\n}\n\nfunction handleSubmenuMouseEnter(): void {\n  if (isInlineSubmenu.value) return\n  clearTimers()\n}\n\nfunction handleSubmenuMouseLeave(): void {\n  if (isInlineSubmenu.value) return\n  scheduleClose()\n}\n\nfunction handleMouseEnter(): void {\n  if (isDisabled.value) return\n\n  isHovered.value = true\n  menu.handleItemHover(props.item)\n\n  if (hasChildren.value) {\n    if (isInlineSubmenu.value) return\n\n    clearCloseTimer()\n    scheduleOpen()\n  }\n}\n\nfunction handleMouseLeave(): void {\n  if (isDisabled.value) return\n\n  isHovered.value = false\n  menu.handleItemLeave(props.item)\n\n  if (hasChildren.value) {\n    if (isInlineSubmenu.value) return\n\n    clearOpenTimer()\n    scheduleClose()\n  }\n}\n\nfunction handleFocus(): void {\n  if (isDisabled.value) return\n  menu.handleItemHover(props.item)\n}\n\nfunction handleBlur(): void {\n  menu.handleItemLeave(props.item)\n}\n\nfunction handleClick(event: MouseEvent): void {\n  if (isDisabled.value) return\n\n  if (hasChildren.value) {\n    clearTimers()\n    if (isInlineSubmenu.value) {\n      if (isOpen.value) {\n        menu.closeSubmenu(props.item, props.parentId, { deep: true })\n      } else {\n        menu.openSubmenu(props.item, props.parentId)\n      }\n      return\n    }\n\n    if (submenuPlacement.value === 'below' && props.level === 0) {\n      menu.openSubmenu(props.item, props.parentId)\n    } else if (isOpen.value) {\n      menu.closeSubmenu(props.item, props.parentId)\n    } else {\n      menu.openSubmenu(props.item, props.parentId)\n    }\n    return\n  }\n\n  menu.selectItem(props.item, event)\n}\n\nonBeforeUnmount(() => {\n  clearTimers()\n})\n</script>\n","<template>\n  <nav\n    ref=\"rootRef\"\n    :class=\"menuClasses\"\n    :style=\"menuStyle\"\n    role=\"navigation\"\n    :aria-orientation=\"menuOrientation\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <ul :class=\"listClasses\" :role=\"menuRole\">\n      <LgMenuItem\n        v-for=\"item in visibleItems\"\n        :key=\"item.id\"\n        :item=\"item\"\n        :level=\"0\"\n        :parent-id=\"null\"\n      />\n    </ul>\n  </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, watch } from 'vue'\nimport type { MenuProps, MenuItem as MenuItemType } from '../../types'\nimport LgMenuItem from './MenuItem.vue'\nimport { menuInjectionKey, type MenuContext } from './context'\nimport './styles.css'\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n  items: () => [],\n  mode: 'vertical',\n  orientation: 'vertical',\n  type: 'menu',\n  size: 'medium',\n  showDelay: 150,\n  hideDelay: 180,\n  defaultActiveKeys: () => [],\n  defaultSelectedKeys: () => [],\n  itemSpacing: 0,\n  maxHeight: 320,\n  minWidth: 180\n})\n\nconst emit = defineEmits<{\n  select: [item: MenuItemType, event?: MouseEvent]\n  click: [item: MenuItemType, event?: MouseEvent]\n  show: []\n  hide: []\n  'item-hover': [item: MenuItemType]\n  'item-leave': [item: MenuItemType]\n  'submenu-show': [item: MenuItemType]\n  'submenu-hide': [item: MenuItemType]\n  'update:selectedKeys': [keys: string[]]\n  'update:activeKeys': [keys: string[]]\n}>()\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst openKeys = ref<Set<string>>(new Set(props.defaultActiveKeys))\nconst selectedKeys = ref<string[]>([...props.defaultSelectedKeys])\nconst hoveredKey = ref<string | null>(null)\n\nconst menuOrientation = computed<'horizontal' | 'vertical'>(() => {\n  if (props.mode === 'horizontal' || props.orientation === 'horizontal' || props.type === 'menubar') {\n    return 'horizontal'\n  }\n  return 'vertical'\n})\n\nconst menuType = computed<'menu' | 'menubar'>(() => {\n  if (props.type === 'menubar' || menuOrientation.value === 'horizontal') {\n    return 'menubar'\n  }\n  return 'menu'\n})\n\nconst showDelayRef = computed(() => props.showDelay ?? 150)\nconst hideDelayRef = computed(() => props.hideDelay ?? 180)\nconst disabledRef = computed(() => Boolean(props.disabled))\n\nconst sizePaddingPreset: Record<string, { block: string; inline: string }> = {\n  small: { block: '6px', inline: '12px' },\n  medium: { block: '8px', inline: '14px' },\n  large: { block: '10px', inline: '18px' }\n}\n\nconst paddingValue = computed(() => {\n  const sizePreset = sizePaddingPreset[props.size] ?? sizePaddingPreset.medium\n\n  if (typeof props.itemPadding === 'number') {\n    const px = `${props.itemPadding}px`\n    return { block: px, inline: px }\n  }\n\n  if (typeof props.itemPadding === 'string' && props.itemPadding.trim().length > 0) {\n    const parts = props.itemPadding.trim().split(/\\s+/)\n    if (parts.length === 1) {\n      return { block: parts[0], inline: parts[0] }\n    }\n    if (parts.length >= 2) {\n      return { block: parts[0], inline: parts[1] }\n    }\n  }\n\n  return sizePreset\n})\n\nconst gapValue = computed(() => {\n  if (typeof props.itemSpacing === 'number') {\n    return `${props.itemSpacing}px`\n  }\n\n  if (typeof props.itemSpacing === 'string' && props.itemSpacing.trim().length > 0) {\n    return props.itemSpacing\n  }\n\n  return menuOrientation.value === 'horizontal' ? '6px' : '0px'\n})\n\nconst indentPreset: Record<string, number> = {\n  small: 14,\n  medium: 18,\n  large: 22\n}\n\nconst indentSize = computed(() => {\n  if (typeof props.itemPadding === 'number') {\n    return Math.max(12, props.itemPadding)\n  }\n\n  return indentPreset[props.size] ?? indentPreset.medium\n})\n\nconst visibleItems = computed(() => props.items.filter(item => !item.hidden))\n\nconst menuStyle = computed(() => ({\n  ...props.style,\n  '--lg-menu-item-gap': gapValue.value,\n  '--lg-menu-item-padding': `${paddingValue.value.block} ${paddingValue.value.inline}`,\n  '--lg-menu-padding-block': paddingValue.value.block,\n  '--lg-menu-padding-inline': paddingValue.value.inline,\n  '--lg-menu-indent': `${indentSize.value}px`,\n  '--lg-menu-min-width': `${props.minWidth}px`,\n  '--lg-menu-max-height': `${props.maxHeight}px`\n}))\n\nconst menuClasses = computed(() => [\n  'lg-menu',\n  `lg-menu--${menuOrientation.value}`,\n  `lg-menu--${menuType.value}`,\n  `lg-menu--${props.size}`,\n  props.variant ? `lg-menu--variant-${props.variant}` : null,\n  props.class,\n  {\n    'lg-menu--floating': props.floating,\n    'lg-menu--disabled': disabledRef.value,\n    'lg-menu--loading': props.loading\n  }\n])\n\nconst listClasses = computed(() => [\n  'lg-menu__list',\n  `lg-menu__list--${menuOrientation.value}`\n])\n\nconst menuRole = computed(() => (menuType.value === 'menubar' ? 'menubar' : 'menu'))\n\nwatch(\n  () => props.activeKeys,\n  newKeys => {\n    if (Array.isArray(newKeys)) {\n      openKeys.value = new Set(newKeys)\n    }\n  },\n  { deep: true }\n)\n\nwatch(\n  () => props.selectedKeys,\n  newKeys => {\n    if (Array.isArray(newKeys)) {\n      selectedKeys.value = [...newKeys]\n    }\n  },\n  { deep: true }\n)\n\nwatch(\n  () => props.items,\n  () => {\n    pruneKeys()\n  },\n  { deep: true }\n)\n\nfunction handleMouseEnter(): void {\n  emit('show')\n  props.onShow?.()\n}\n\nfunction handleMouseLeave(): void {\n  hoveredKey.value = null\n  if (props.autoHide) {\n    closeAllSubmenus()\n  }\n  emit('hide')\n  props.onHide?.()\n}\n\nfunction handleItemHover(item: MenuItemType): void {\n  hoveredKey.value = item.id\n  emit('item-hover', item)\n  props.onItemHover?.(item)\n  item.onHover?.(item)\n}\n\nfunction handleItemLeave(item: MenuItemType): void {\n  if (hoveredKey.value === item.id) {\n    hoveredKey.value = null\n  }\n  emit('item-leave', item)\n  props.onItemLeave?.(item)\n}\n\nfunction flattenItems(items: MenuItemType[]): MenuItemType[] {\n  const stack = [...items]\n  const result: MenuItemType[] = []\n\n  while (stack.length) {\n    const current = stack.pop() as MenuItemType\n    result.push(current)\n\n    if (current.children && current.children.length) {\n      for (let i = current.children.length - 1; i >= 0; i -= 1) {\n        stack.push(current.children[i])\n      }\n    }\n  }\n\n  return result\n}\n\nfunction findItemMeta(\n  targetId: string,\n  items: MenuItemType[] = props.items,\n  parentId: string | null = null\n): { item: MenuItemType; parentId: string | null } | null {\n  for (const item of items) {\n    if (item.id === targetId) {\n      return { item, parentId }\n    }\n\n    if (item.children && item.children.length > 0) {\n      const found = findItemMeta(targetId, item.children, item.id)\n      if (found) {\n        return found\n      }\n    }\n  }\n\n  return null\n}\n\nfunction setsEqual(a: Set<string>, b: Set<string>): boolean {\n  if (a.size !== b.size) return false\n  for (const value of a) {\n    if (!b.has(value)) return false\n  }\n  return true\n}\n\nfunction emitUpdateActive(source: Set<string>): void {\n  emit('update:activeKeys', Array.from(source))\n}\n\nfunction openSubmenu(item: MenuItemType, parentId: string | null): void {\n  if (!item.children || item.children.length === 0 || disabledRef.value || item.disabled) {\n    return\n  }\n\n  const next = new Set(openKeys.value)\n\n  if (parentId) {\n    const parentMeta = findItemMeta(parentId)\n    const siblings = parentMeta?.item.children ?? []\n    siblings.forEach(sibling => {\n      if (!sibling.hidden && sibling.id !== item.id) {\n        next.delete(sibling.id)\n      }\n    })\n  } else if (menuOrientation.value === 'horizontal') {\n    visibleItems.value.forEach(rootItem => {\n      if (rootItem.id !== item.id) {\n        next.delete(rootItem.id)\n      }\n    })\n  }\n\n  const wasOpen = next.has(item.id)\n  next.add(item.id)\n\n  if (wasOpen && setsEqual(openKeys.value, next)) {\n    return\n  }\n\n  const previous = openKeys.value\n  openKeys.value = next\n\n  if (!previous.has(item.id) && next.has(item.id)) {\n    emit('submenu-show', item)\n    item.onShow?.(item)\n  }\n\n  emitUpdateActive(next)\n}\n\nfunction closeSubmenu(item: MenuItemType, _parentId: string | null, options: { deep?: boolean } = {}): void {\n  const deep = options.deep ?? false\n  const next = new Set(openKeys.value)\n  const closedItems: MenuItemType[] = []\n\n  if (next.delete(item.id)) {\n    closedItems.push(item)\n  }\n\n  if (deep && item.children && item.children.length > 0) {\n    const stack = [...item.children]\n    while (stack.length) {\n      const current = stack.pop() as MenuItemType\n      if (next.delete(current.id)) {\n        closedItems.push(current)\n      }\n      if (current.children && current.children.length > 0) {\n        stack.push(...current.children)\n      }\n    }\n  }\n\n  if (!closedItems.length) {\n    return\n  }\n\n  openKeys.value = next\n\n  closedItems.forEach(closedItem => {\n    emit('submenu-hide', closedItem)\n    closedItem.onHide?.(closedItem)\n  })\n\n  emitUpdateActive(next)\n}\n\nfunction closeAllSubmenus(): void {\n  if (openKeys.value.size === 0) return\n\n  const toClose = Array.from(openKeys.value)\n    .map(id => findItemMeta(id))\n    .filter((meta): meta is { item: MenuItemType; parentId: string | null } => Boolean(meta))\n    .map(meta => meta.item)\n\n  if (toClose.length) {\n    toClose.forEach(target => {\n      emit('submenu-hide', target)\n      target.onHide?.(target)\n    })\n  }\n\n  openKeys.value = new Set()\n  emit('update:activeKeys', [])\n}\n\nfunction updateRadioGroup(item: MenuItemType): void {\n  if (!item.group) return\n\n  const items = flattenItems(props.items)\n  items.forEach(candidate => {\n    if (candidate.group === item.group && candidate.id !== item.id) {\n      candidate.checked = false\n    }\n  })\n}\n\nfunction selectItem(item: MenuItemType, event?: MouseEvent): void {\n  if (disabledRef.value || item.disabled) return\n  if (item.type === 'separator' || item.type === 'text') return\n  if (item.children && item.children.length > 0) return\n\n  if (item.type === 'check') {\n    item.checked = !item.checked\n  } else if (item.type === 'radio') {\n    if (!item.checked) {\n      updateRadioGroup(item)\n      item.checked = true\n    }\n  }\n\n  let nextSelected: string[]\n\n  if (menuOrientation.value === 'horizontal' || menuType.value === 'menubar') {\n    nextSelected = [item.id]\n  } else {\n    const current = new Set(selectedKeys.value)\n    if (current.has(item.id)) {\n      current.delete(item.id)\n    } else {\n      current.add(item.id)\n    }\n    nextSelected = Array.from(current)\n  }\n\n  selectedKeys.value = nextSelected\n\n  emit('update:selectedKeys', nextSelected)\n  emit('select', item, event)\n  emit('click', item, event)\n  props.onSelect?.(item, event)\n  props.onClick?.(item, event)\n  item.onClick?.(item, event)\n\n  if (item.href) {\n    if (item.target === '_blank') {\n      window.open(item.href, '_blank')\n    } else {\n      window.location.href = item.href\n    }\n  }\n\n  if (props.autoHide) {\n    closeAllSubmenus()\n    if (props.floating) {\n      setTimeout(() => emit('hide'), props.hideDelay)\n    }\n  }\n}\n\nfunction pruneKeys(): void {\n  const allowedIds = new Set(flattenItems(props.items).map(item => item.id))\n\n  const removedActive = Array.from(openKeys.value).filter(id => !allowedIds.has(id))\n  if (removedActive.length) {\n    const next = new Set(openKeys.value)\n    removedActive.forEach(id => next.delete(id))\n\n    removedActive.forEach(id => {\n      const meta = findItemMeta(id)\n      if (meta) {\n        emit('submenu-hide', meta.item)\n        meta.item.onHide?.(meta.item)\n      }\n    })\n\n    openKeys.value = next\n    emitUpdateActive(next)\n  }\n\n  const nextSelected = selectedKeys.value.filter(id => allowedIds.has(id))\n  if (nextSelected.length !== selectedKeys.value.length) {\n    selectedKeys.value = nextSelected\n    emit('update:selectedKeys', nextSelected)\n  }\n}\n\nconst menuContext: MenuContext = {\n  orientation: menuOrientation,\n  type: menuType,\n  showDelay: showDelayRef,\n  hideDelay: hideDelayRef,\n  indent: indentSize,\n  disabled: disabledRef,\n  isSubmenuOpen: id => openKeys.value.has(id),\n  isItemSelected: id => selectedKeys.value.includes(id),\n  openSubmenu,\n  closeSubmenu,\n  selectItem,\n  handleItemHover,\n  handleItemLeave\n}\n\nprovide(menuInjectionKey, menuContext)\n\ndefineExpose({\n  selectItem: (itemId: string, event?: MouseEvent) => {\n    const meta = findItemMeta(itemId)\n    if (meta) {\n      selectItem(meta.item, event)\n    }\n  },\n  openSubmenu: (itemId: string) => {\n    const meta = findItemMeta(itemId)\n    if (meta) {\n      openSubmenu(meta.item, meta.parentId)\n    }\n  },\n  closeSubmenu: (itemId: string) => {\n    const meta = findItemMeta(itemId)\n    if (meta) {\n      closeSubmenu(meta.item, meta.parentId, { deep: true })\n    }\n  },\n  getSelectedItems: () => flattenItems(props.items).filter(item => selectedKeys.value.includes(item.id)),\n  getActiveItems: () => flattenItems(props.items).filter(item => openKeys.value.has(item.id))\n})\n</script>\n","<template>\n  <teleport to=\"body\">\n    <transition name=\"lg-modal\">\n      <div\n        v-if=\"isVisible\"\n        class=\"lg-modal-overlay\"\n        :class=\"{ 'lg-modal-fullscreen-overlay': fullscreen || size === 'fullscreen' }\"\n        @click=\"handleOverlayClick\"\n      >\n        <div\n          ref=\"modalRef\"\n          :class=\"modalClasses\"\n          :style=\"modalStyle\"\n          @click.stop\n          role=\"dialog\"\n          :aria-modal=\"true\"\n          :aria-labelledby=\"titleId\"\n          :aria-describedby=\"bodyId\"\n          tabindex=\"0\"\n        >\n          <!-- Modal header -->\n          <header v-if=\"title || $slots.header || closable\" class=\"lg-modal__header\">\n            <slot name=\"header\">\n              <h3 v-if=\"title\" :id=\"titleId\" class=\"lg-modal__title\">{{ title }}</h3>\n            </slot>\n\n            <button\n              v-if=\"closable\"\n              class=\"lg-modal__close\"\n              @click=\"handleClose\"\n              type=\"button\"\n              aria-label=\"关闭对话框\"\n            >\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n                <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n              </svg>\n            </button>\n          </header>\n\n          <!-- Modal body -->\n          <main :id=\"bodyId\" class=\"lg-modal__body\">\n            <slot />\n          </main>\n\n          <!-- Modal footer -->\n          <footer v-if=\"$slots.footer || showFooter\" class=\"lg-modal__footer\">\n            <slot name=\"footer\">\n              <div class=\"lg-modal__default-actions\">\n                <LgButton @click=\"handleCancel\" variant=\"secondary\" size=\"small\">\n                  取消\n                </LgButton>\n                <LgButton @click=\"handleConfirm\" variant=\"primary\" size=\"small\">\n                  确定\n                </LgButton>\n              </div>\n            </slot>\n          </footer>\n        </div>\n      </div>\n    </transition>\n  </teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, type CSSProperties } from 'vue'\nimport LgButton from '../LgButton/LgButton.vue'\nimport type { ModalProps } from '../../types'\n\n// 生成唯一ID\nconst titleId = `lg-modal-title-${Math.random().toString(36).substr(2, 9)}`\nconst bodyId = `lg-modal-body-${Math.random().toString(36).substr(2, 9)}`\n\nconst props = withDefaults(defineProps<ModalProps>(), {\n  variant: 'primary',\n  size: 'medium',\n  modelValue: false,\n  title: '',\n  width: undefined,\n  height: 'auto',\n  maxWidth: undefined,\n  maxHeight: undefined,\n  closable: true,\n  maskClosable: true,\n  showFooter: false,\n  fullscreen: false,\n  style: undefined,\n  class: undefined,\n  onOpen: undefined,\n  onClose: undefined,\n  onConfirm: undefined,\n  onCancel: undefined\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: boolean]\n  open: []\n  close: []\n  confirm: []\n  cancel: []\n}>()\n\nconst modalRef = ref<HTMLElement>()\nconst isVisible = ref(false)\n\nconst modalClasses = computed(() => [\n  'lg-modal',\n  `lg-size-${props.size}`,\n  {\n    'lg-modal-fullscreen': props.fullscreen || props.size === 'fullscreen'\n  },\n  props.class\n])\n\nconst modalStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    background: '#ffffff',\n    border: '1px solid rgba(0, 0, 0, 0.1)',\n    borderRadius: '16px',\n    boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n    position: 'relative',\n    zIndex: 1000,\n    transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n    transform: 'scale(1)',\n    opacity: 1\n  } as CSSProperties\n})\n\nfunction getSizeStyles(): CSSProperties {\n  // Check if fullscreen\n  if (props.fullscreen || props.size === 'fullscreen') {\n    return {\n      width: '100vw',\n      height: '100vh',\n      maxWidth: '100vw',\n      maxHeight: '100vh',\n      borderRadius: '0px',\n      margin: '0px'\n    }\n  }\n\n  const sizes = {\n    small: {\n      borderRadius: '12px'\n    },\n    medium: {\n      borderRadius: '16px'\n    },\n    large: {\n      borderRadius: '20px'\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n\n  // Custom width (优先级最高)\n  if (props.width !== undefined) {\n    if (typeof props.width === 'number') {\n      baseSize.width = `${props.width}px`\n    } else if (typeof props.width === 'string') {\n      baseSize.width = props.width\n    }\n  } else {\n    // 只有在没有自定义宽度时才设置默认宽度\n    baseSize.width = '90vw'\n  }\n\n  // Height\n  if (typeof props.height === 'number') {\n    baseSize.height = `${props.height}px`\n  } else if (typeof props.height === 'string') {\n    baseSize.height = props.height\n  }\n\n  // Max Width (只有在用户明确指定时才设置)\n  if (typeof props.maxWidth === 'number') {\n    baseSize.maxWidth = `${props.maxWidth}px`\n  } else if (typeof props.maxWidth === 'string') {\n    baseSize.maxWidth = props.maxWidth\n  }\n  // 注意：移除了默认的 maxWidth 设置，让用户自定义宽度生效\n\n  // Max Height\n  if (typeof props.maxHeight === 'number') {\n    baseSize.maxHeight = `${props.maxHeight}px`\n  } else if (typeof props.maxHeight === 'string') {\n    baseSize.maxHeight = props.maxHeight\n  }\n\n  // Override border radius if explicitly set\n  if (props.cornerRadius !== undefined) {\n    baseSize.borderRadius = `${props.cornerRadius}px`\n  }\n\n  return baseSize\n}\n\nfunction handleOverlayClick() {\n  if (props.maskClosable && !props.disabled) {\n    handleClose()\n  }\n}\n\nfunction handleClose() {\n  emit('update:modelValue', false)\n  emit('close')\n  props.onClose?.()\n}\n\nfunction handleConfirm() {\n  emit('confirm')\n  props.onConfirm?.()\n}\n\nfunction handleCancel() {\n  emit('cancel')\n  props.onCancel?.()\n  handleClose()\n}\n\n\n// Watch for modelValue changes\nwatch(\n  () => props.modelValue,\n  (newValue) => {\n    if (newValue) {\n      isVisible.value = true\n      nextTick(() => {\n        emit('open')\n        props.onOpen?.()\n      })\n    } else {\n      isVisible.value = false\n    }\n  },\n  { immediate: true }\n)\n\n// Handle escape key\nlet escapeCleanup: (() => void) | null = null\nwatch(isVisible, (newValue) => {\n  // Clean up previous listener\n  if (escapeCleanup) {\n    escapeCleanup()\n    escapeCleanup = null\n  }\n\n  if (newValue) {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === 'Escape' && props.closable && !props.disabled) {\n        handleClose()\n      }\n    }\n\n    document.addEventListener('keydown', handleEscape)\n\n    escapeCleanup = () => {\n      document.removeEventListener('keydown', handleEscape)\n    }\n  }\n})\n\n// Prevent body scroll when modal is open\nwatch(isVisible, (newValue) => {\n  if (newValue) {\n    document.body.style.overflow = 'hidden'\n  } else {\n    document.body.style.overflow = ''\n  }\n})\n</script>\n\n<style scoped>\n.lg-modal-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.4);\n  backdrop-filter: blur(20px) saturate(180%);\n  -webkit-backdrop-filter: blur(20px) saturate(180%);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 9999;\n  padding: 2rem;\n  overflow-y: auto;\n  -webkit-font-smoothing: antialiased;\n}\n\n.lg-modal-overlay.lg-modal-fullscreen-overlay {\n  padding: 0;\n}\n\n.lg-modal {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  max-height: 90vh;\n  background: #ffffff;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 16px;\n  outline: none;\n  overflow: hidden;\n  margin: auto;\n  box-shadow:\n    0 25px 50px -12px rgba(0, 0, 0, 0.25),\n    0 0 0 1px rgba(255, 255, 255, 0.05) inset;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n}\n\n.lg-modal:focus-visible {\n  outline: 2px solid #007aff;\n  outline-offset: 2px;\n}\n\n.lg-modal__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 1.5rem 2rem 1rem;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  background: #ffffff;\n}\n\n.lg-modal__title {\n  margin: 0;\n  font-size: 1.25rem;\n  font-weight: 600;\n  color: #1d1d1f;\n  line-height: 1.4;\n  letter-spacing: -0.022em;\n}\n\n.lg-modal__close {\n  background: none;\n  border: none;\n  color: #86868b;\n  cursor: pointer;\n  border-radius: 50%;\n  width: 2rem;\n  height: 2rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  transition: all 0.15s ease;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n.lg-modal__close:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n  color: #1d1d1f;\n}\n\n.lg-modal__close:active {\n  background-color: rgba(0, 0, 0, 0.1);\n  transform: scale(0.95);\n}\n\n.lg-modal__close:focus-visible {\n  outline: 2px solid #007aff;\n  outline-offset: 2px;\n}\n\n.lg-modal__body {\n  flex: 1;\n  padding: 1.5rem 2rem;\n  overflow-y: auto;\n  color: #1d1d1f;\n  font-size: 1rem;\n  line-height: 1.5;\n  -webkit-font-smoothing: antialiased;\n}\n\n.lg-modal__footer {\n  padding: 1rem 2rem 1.5rem;\n  border-top: 1px solid rgba(0, 0, 0, 0.05);\n  background: #fafafa;\n}\n\n.lg-modal__default-actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: 0.75rem;\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  border-radius: 12px;\n}\n\n.lg-size-medium {\n  border-radius: 16px;\n}\n\n.lg-size-large {\n  border-radius: 20px;\n}\n\n.lg-size-fullscreen {\n  border-radius: 0;\n  width: 100vw;\n  height: 100vh;\n  max-width: 100vw;\n  max-height: 100vh;\n  margin: 0;\n}\n\n.lg-modal-fullscreen {\n  border-radius: 0;\n  width: 100vw;\n  height: 100vh;\n  max-width: 100vw;\n  max-height: 100vh;\n  margin: 0;\n}\n\n.lg-size-small .lg-modal__header {\n  padding: 1rem 1.5rem 0.75rem;\n}\n\n.lg-size-small .lg-modal__title {\n  font-size: 1.125rem;\n}\n\n.lg-size-small .lg-modal__body {\n  padding: 1rem 1.5rem;\n}\n\n.lg-size-small .lg-modal__footer {\n  padding: 0.75rem 1.5rem 1rem;\n}\n\n.lg-size-large .lg-modal__header {\n  padding: 2rem 2.5rem 1.5rem;\n}\n\n.lg-size-large .lg-modal__title {\n  font-size: 1.5rem;\n}\n\n.lg-size-large .lg-modal__body {\n  padding: 2rem 2.5rem;\n  font-size: 1.125rem;\n}\n\n.lg-size-large .lg-modal__footer {\n  padding: 1.5rem 2.5rem 2rem;\n}\n\n/* Transitions */\n.lg-modal-enter-active,\n.lg-modal-leave-active {\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.lg-modal-enter-from,\n.lg-modal-leave-to {\n  opacity: 0;\n}\n\n.lg-modal-enter-from .lg-modal,\n.lg-modal-leave-to .lg-modal {\n  transform: scale(0.9) translateY(20px);\n  opacity: 0;\n}\n\n/* Responsive design */\n@media (max-width: 640px) {\n  .lg-modal-overlay {\n    padding: 1rem;\n  }\n\n  .lg-modal {\n    border-radius: 12px;\n    max-height: 95vh;\n  }\n\n  .lg-modal__header {\n    padding: 1rem 1.25rem 0.75rem;\n  }\n\n  .lg-modal__title {\n    font-size: 1.125rem;\n  }\n\n  .lg-modal__body {\n    padding: 1rem 1.25rem;\n  }\n\n  .lg-modal__footer {\n    padding: 0.75rem 1.25rem 1rem;\n  }\n\n  .lg-modal__close {\n    width: 1.75rem;\n    height: 1.75rem;\n  }\n}\n\n@media (min-width: 641px) and (max-width: 1024px) {\n  .lg-modal-overlay {\n    padding: 1.5rem;\n  }\n\n  .lg-modal {\n    border-radius: 14px;\n  }\n}\n\n/* Dark mode support */\n[data-theme=\"dark\"] .lg-modal {\n  background: #1c1c1e;\n  border-color: rgba(255, 255, 255, 0.1);\n  box-shadow:\n    0 25px 50px -12px rgba(0, 0, 0, 0.5),\n    0 0 0 1px rgba(255, 255, 255, 0.1) inset;\n}\n\n[data-theme=\"dark\"] .lg-modal__header {\n  background: #1c1c1e;\n  border-bottom-color: rgba(255, 255, 255, 0.1);\n}\n\n[data-theme=\"dark\"] .lg-modal__title {\n  color: #f2f2f7;\n}\n\n[data-theme=\"dark\"] .lg-modal__close {\n  color: #8e8e93;\n}\n\n[data-theme=\"dark\"] .lg-modal__close:hover {\n  background-color: rgba(255, 255, 255, 0.1);\n  color: #f2f2f7;\n}\n\n[data-theme=\"dark\"] .lg-modal__body {\n  color: #f2f2f7;\n}\n\n[data-theme=\"dark\"] .lg-modal__footer {\n  background: #2c2c2e;\n  border-top-color: rgba(255, 255, 255, 0.1);\n}\n</style>\n","<template>\n  <div class=\"lg-progress-wrapper\">\n    <div\n      ref=\"progressRef\"\n      :class=\"progressClasses\"\n      :style=\"progressStyle\"\n      @mouseenter=\"handleMouseEnter\"\n      @mouseleave=\"handleMouseLeave\"\n      :role=\"role\"\n      :aria-valuenow=\"normalizedValue\"\n      :aria-valuemin=\"min\"\n      :aria-valuemax=\"max\"\n      :aria-label=\"label\"\n    >\n      <!-- Liquid glass effect background for track -->\n      <div class=\"lg-progress__liquid\" :style=\"liquidStyle\"></div>\n\n      <!-- Track border glow -->\n      <div class=\"lg-progress__border\" :style=\"borderStyle\"></div>\n\n      <!-- Dynamic light flow effect -->\n      <div class=\"lg-progress__light-flow\" :style=\"lightFlowStyle\"></div>\n\n      <!-- Progress bar fill -->\n      <div class=\"lg-progress__fill\" :style=\"fillStyle\">\n        <!-- Liquid effect on fill -->\n        <div class=\"lg-progress__fill-liquid\" :style=\"fillLiquidStyle\"></div>\n\n        <!-- Animated shimmer effect -->\n        <div class=\"lg-progress__shimmer\" :style=\"shimmerStyle\"></div>\n      </div>\n\n      <!-- Progress text (optional) -->\n      <div v-if=\"showText\" class=\"lg-progress__text\" :style=\"textStyle\">\n        {{ displayText }}\n      </div>\n    </div>\n\n    <!-- Label and description (outside the progress bar) -->\n    <div v-if=\"label || description\" class=\"lg-progress__label-container\">\n      <div v-if=\"label\" class=\"lg-progress__label\">\n        {{ label }}\n      </div>\n      <div v-if=\"description\" class=\"lg-progress__description\">\n        {{ description }}\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type CSSProperties } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { LiquidGlassConfig } from '../../types'\n\ninterface ProgressProps extends LiquidGlassConfig {\n  modelValue?: number\n  min?: number\n  max?: number\n  label?: string\n  description?: string\n  variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'\n  size?: 'small' | 'medium' | 'large'\n  disabled?: boolean\n  indeterminate?: boolean\n  striped?: boolean\n  animated?: boolean\n  showText?: boolean\n  textInside?: boolean\n  format?: (value: number) => string\n  strokeWidth?: number | string\n  role?: string\n  class?: string\n  style?: CSSProperties\n  width?: string | number\n  height?: string | number\n  displacementScale?: number\n  blurAmount?: number\n  saturation?: number\n  aberrationIntensity?: number\n  elasticity?: number\n  cornerRadius?: number\n  overLight?: boolean\n  mode?: 'standard' | 'polar' | 'prominent' | 'shader'\n  effect?: 'flowingLiquid' | 'liquidGlass' | 'transparentIce' | 'unevenGlass' | 'mosaicGlass'\n}\n\nconst props = withDefaults(defineProps<ProgressProps>(), {\n  modelValue: 0,\n  min: 0,\n  max: 100,\n  displacementScale: 50,\n  blurAmount: 0.0625,\n  saturation: 140,\n  aberrationIntensity: 2,\n  elasticity: 0.15,\n  cornerRadius: 12,\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  indeterminate: false,\n  striped: false,\n  animated: true,\n  showText: false,\n  textInside: false,\n  strokeWidth: 8,\n  role: 'progressbar',\n  overLight: false,\n  mode: 'standard',\n  effect: 'liquidGlass'\n})\n\nconst progressRef = ref<HTMLElement>()\n\ninterface ProgressVariantTokens {\n  trackSurface: string\n  trackSurfaceAlt: string\n  trackBorder: string\n  trackBorderSoft: string\n  fillSurface: string\n  fillSurfaceAlt: string\n  fillBorder: string\n  fillBorderSoft: string\n  fillGlow: string\n  highlight: string\n  sheen: string\n  subtle: string\n  shadow: string\n  shadowActive?: string\n  glow: string\n}\n\n// Base colors used to derive liquid glass palettes for progress variants\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    deep: '#1d4ed8',\n    text: '#e2e8f0'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    deep: '#475569',\n    text: '#e2e8f0'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    deep: '#047857',\n    text: '#ecfdf5'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    deep: '#b45309',\n    text: '#fffbeb'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    deep: '#b91c1c',\n    text: '#fee2e2'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    deep: '#0e7490',\n    text: '#cffafe'\n  }\n} as const\n\nconst NEUTRAL_BASE = '#94a3b8'\n\nfunction hexToRgb(hex: string) {\n  let normalized = hex.replace('#', '')\n\n  if (normalized.length === 3) {\n    normalized = normalized\n      .split('')\n      .map((char) => char + char)\n      .join('')\n  }\n\n  const bigint = parseInt(normalized, 16)\n\n  return {\n    r: (bigint >> 16) & 255,\n    g: (bigint >> 8) & 255,\n    b: bigint & 255\n  }\n}\n\nfunction rgba(hex: string, alpha: number) {\n  const { r, g, b } = hexToRgb(hex)\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nfunction getVariantTokens(variant: ProgressProps['variant'], overLight: boolean): ProgressVariantTokens {\n  // Derive a cohesive palette for the progress bar based on variant & lighting\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  if (overLight) {\n    return {\n      trackSurface: 'rgba(255, 255, 255, 0.25)',\n      trackSurfaceAlt: rgba(NEUTRAL_BASE, 0.18),\n      trackBorder: rgba(NEUTRAL_BASE, 0.38),\n      trackBorderSoft: 'rgba(255, 255, 255, 0.55)',\n      fillSurface: rgba(palette.base, 0.88),\n      fillSurfaceAlt: rgba(palette.accent, 0.78),\n      fillBorder: rgba(palette.base, 0.48),\n      fillBorderSoft: rgba(palette.accent, 0.38),\n      fillGlow: rgba(palette.base, 0.42),\n      highlight: rgba(palette.accent, 0.24),\n      sheen: `linear-gradient(135deg,\n        rgba(255, 255, 255, 0.65) 0%,\n        rgba(255, 255, 255, 0.35) 38%,\n        transparent 65%,\n        rgba(255, 255, 255, 0.45) 100%)`,\n      subtle: rgba(palette.base, 0.08),\n      glow: rgba(palette.accent, 0.32),\n      shadow: `0 8px 24px ${rgba('#0f172a', 0.12)}, 0 4px 12px ${rgba('#0f172a', 0.08)}, inset 0 1px 0 rgba(255, 255, 255, 0.6)`,\n      shadowActive: `0 12px 32px ${rgba('#0f172a', 0.18)}, 0 6px 16px ${rgba('#0f172a', 0.12)}, inset 0 1px 0 rgba(255, 255, 255, 0.7)`\n    }\n  }\n\n  return {\n    trackSurface: rgba(NEUTRAL_BASE, 0.28),\n    trackSurfaceAlt: rgba(NEUTRAL_BASE, 0.38),\n    trackBorder: rgba(NEUTRAL_BASE, 0.52),\n    trackBorderSoft: 'rgba(255, 255, 255, 0.35)',\n    fillSurface: rgba(palette.base, 0.92),\n    fillSurfaceAlt: rgba(palette.accent, 0.82),\n    fillBorder: rgba(palette.base, 0.64),\n    fillBorderSoft: rgba(palette.accent, 0.54),\n    fillGlow: rgba(palette.base, 0.58),\n    highlight: rgba(palette.accent, 0.55),\n    sheen: `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.5) 0%,\n      rgba(255, 255, 255, 0.28) 40%,\n      transparent 60%,\n      rgba(255, 255, 255, 0.35) 100%)`,\n    subtle: rgba(palette.base, 0.12),\n    glow: rgba(palette.accent, 0.48),\n    shadow: `0 10px 28px ${rgba('#0f172a', 0.18)}, 0 5px 14px ${rgba('#0f172a', 0.12)}, inset 0 1px 0 rgba(255, 255, 255, 0.4)`,\n    shadowActive: `0 16px 38px ${rgba('#0f172a', 0.24)}, 0 8px 20px ${rgba('#0f172a', 0.16)}, inset 0 1px 0 rgba(255, 255, 255, 0.5)`\n  }\n}\n\nconst normalizedValue = computed(() => {\n  if (props.indeterminate) return 0\n  const value = Math.max(props.min, Math.min(props.max, props.modelValue ?? 0))\n  return ((value - props.min) / (props.max - props.min)) * 100\n})\n\nconst displayText = computed(() => {\n  if (props.indeterminate) return '...'\n  const value = Math.max(props.min, Math.min(props.max, props.modelValue ?? 0))\n  return props.format ? props.format(value) : `${Math.round(normalizedValue.value)}%`\n})\n\nconst variantTokens = computed(() => getVariantTokens(props.variant ?? 'primary', props.overLight))\n\nconst {\n  isHovered,\n  isActive,\n  backdropStyle,\n  transformStyle,\n  calculateElasticTranslation\n} = useLiquidGlass({\n  container: progressRef,\n  displacementScale: props.displacementScale,\n  blurAmount: props.blurAmount,\n  saturation: props.saturation,\n  aberrationIntensity: props.aberrationIntensity,\n  elasticity: props.elasticity,\n  cornerRadius: props.cornerRadius,\n  overLight: props.overLight,\n  mode: props.mode,\n  effect: props.effect\n})\n\nconst progressClasses = computed(() => [\n  'lg-progress',\n  'lg-component',\n  'lg-glass',\n  'lg-liquid',\n  `lg-progress--${props.variant}`,\n  `lg-size-${props.size}`,\n  props.class,\n  {\n    'lg-disabled': props.disabled,\n    'lg-indeterminate': props.indeterminate,\n    'lg-striped': props.striped,\n    'lg-animated': props.animated,\n    'lg-text-inside': props.textInside,\n    'lg-focus-visible': !props.disabled\n  }\n])\n\nconst progressStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n  const tokens = variantTokens.value\n\n  const translation = calculateElasticTranslation.value\n  const hoverLift = isHovered.value && !props.disabled ? -1 : 0\n  const translateY = translation.y + hoverLift\n  const scale = isHovered.value && !props.disabled ? 1.01 : 1\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    '--lg-progress-highlight': tokens.highlight,\n    '--lg-progress-glow': tokens.glow,\n    '--lg-progress-sheen': tokens.sheen,\n    '--lg-progress-subtle': tokens.subtle,\n    '--lg-progress-border-soft': tokens.trackBorderSoft,\n    background: `linear-gradient(135deg, ${tokens.trackSurface} 0%, ${tokens.trackSurfaceAlt} 100%)`,\n    border: 'none',\n    boxShadow: isHovered.value && !props.disabled ? (tokens.shadowActive || tokens.shadow) : tokens.shadow,\n    backdropFilter: 'blur(18px) saturate(160%)',\n    WebkitBackdropFilter: 'blur(18px) saturate(160%)',\n    position: 'relative',\n    zIndex: 10,\n    transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n    transform: `translate3d(${translation.x}px, ${translateY}px, 0) scale(${scale})`,\n    willChange: 'transform',\n    overflow: 'hidden',\n    borderRadius: `var(--lg-progress-height, 0.5rem)`\n  } as CSSProperties\n})\n\nconst liquidStyle = computed(() => ({\n  background: variantTokens.value.sheen,\n  opacity: isHovered.value && !props.disabled ? 0.6 : 0.3,\n  transform: `translate3d(${calculateElasticTranslation.value.x * 0.4}px, ${calculateElasticTranslation.value.y * 0.3}px, 0)`,\n  transition: 'opacity 0.35s ease, transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)'\n}))\n\nconst borderStyle = computed(() => ({\n  background: `radial-gradient(circle at 50% 0%,\n    ${variantTokens.value.trackBorderSoft} 0%,\n    ${variantTokens.value.trackBorder} 50%,\n    transparent 100%)`,\n  opacity: isHovered.value && !props.disabled ? 0.7 : 0.4\n}))\n\nconst lightFlowStyle = computed(() => {\n  const tokens = variantTokens.value\n  return {\n    background: `radial-gradient(ellipse at center,\n      ${tokens.highlight} 0%,\n      ${tokens.glow} 40%,\n      transparent 70%)`,\n    opacity: isHovered.value && !props.disabled ? 0.8 : 0,\n    transform: `translate3d(${calculateElasticTranslation.value.x * 0.3}px, ${calculateElasticTranslation.value.y * 0.2}px, 0) scale(1.1)`\n  }\n})\n\nconst fillStyle = computed(() => {\n  const tokens = variantTokens.value\n  const width = props.indeterminate ? '100%' : `${normalizedValue.value}%`\n\n  return {\n    background: `linear-gradient(135deg, ${tokens.fillSurface} 0%, ${tokens.fillSurfaceAlt} 100%)`,\n    borderColor: 'transparent',\n    boxShadow: `0 4px 16px ${tokens.fillGlow}, inset 0 2px 0 rgba(255, 255, 255, 0.4)`,\n    backdropFilter: 'blur(16px) saturate(140%)',\n    WebkitBackdropFilter: 'blur(16px) saturate(140%)',\n    border: `1px solid ${tokens.fillBorder}`,\n    position: 'absolute',\n    top: '0',\n    left: '0',\n    height: '100%',\n    width: width,\n    borderRadius: 'inherit',\n    transition: props.indeterminate ? 'none' : 'width 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n    overflow: 'hidden',\n    zIndex: 5\n  } as CSSProperties\n})\n\nconst fillLiquidStyle = computed(() => ({\n  background: variantTokens.value.sheen,\n  opacity: 0.6,\n  position: 'absolute' as const,\n  inset: 0,\n  mixBlendMode: 'soft-light' as const,\n  filter: 'blur(8px)',\n  borderRadius: 'inherit'\n}))\n\nconst shimmerStyle = computed(() => ({\n  background: 'linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent)',\n  position: 'absolute' as const,\n  inset: 0,\n  animation: props.animated && !props.indeterminate ? 'lg-progress-shimmer 2s infinite' : 'none',\n  borderRadius: 'inherit'\n}))\n\nconst textStyle = computed(() => ({\n  color: props.overLight ? '#1e293b' : '#ffffff',\n  fontSize: props.size === 'small' ? '0.75rem' : props.size === 'large' ? '0.875rem' : '0.8125rem',\n  fontWeight: '500',\n  textShadow: '0 1px 2px rgba(0, 0, 0, 0.3)',\n  zIndex: 15,\n  position: 'relative' as const\n}))\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      '--lg-progress-width': '100%',\n      '--lg-progress-height': '0.375rem'\n    },\n    medium: {\n      '--lg-progress-width': '100%',\n      '--lg-progress-height': '0.5rem'\n    },\n    large: {\n      '--lg-progress-width': '100%',\n      '--lg-progress-height': '0.75rem'\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n\n  // Override height if stroke width is explicitly set\n  if (props.strokeWidth !== undefined) {\n    const height = typeof props.strokeWidth === 'number' ? `${props.strokeWidth}px` : props.strokeWidth\n    baseSize['--lg-progress-height'] = height\n  }\n\n  // Override border radius if explicitly set\n  if (props.cornerRadius !== undefined) {\n    baseSize.borderRadius = `${props.cornerRadius}px`\n  }\n\n  return baseSize\n}\n\nfunction handleMouseEnter() {\n  if (!props.disabled) {\n    isHovered.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  isHovered.value = false\n  isActive.value = false\n}\n</script>\n\n<style scoped>\n.lg-progress-wrapper {\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  width: 100%;\n}\n\n.lg-progress {\n  position: relative;\n  display: inline-block;\n  width: var(--lg-progress-width, 100%);\n  height: var(--lg-progress-height, 0.5rem);\n  background-clip: padding-box;\n  isolation: isolate;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  outline: none;\n}\n\n.lg-progress.lg-liquid {\n  overflow: hidden;\n}\n\n.lg-progress:focus-visible {\n  outline: none;\n  box-shadow: 0 0 0 2px var(--lg-progress-highlight, var(--lg-primary, #3b82f6));\n}\n\n.lg-progress:disabled,\n.lg-progress.lg-disabled {\n  opacity: 0.55;\n  pointer-events: none;\n  filter: saturate(0.75);\n}\n\n.lg-progress__liquid {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  mix-blend-mode: soft-light;\n  filter: blur(10px);\n  border-radius: inherit;\n  overflow: hidden;\n  will-change: opacity, transform;\n  z-index: 1;\n}\n\n.lg-progress__border {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  pointer-events: none;\n  z-index: 2;\n  mix-blend-mode: overlay;\n  opacity: 0.5;\n  overflow: hidden;\n}\n\n.lg-progress__light-flow {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 0;\n  transition: opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1), transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n  mix-blend-mode: screen;\n  filter: blur(14px);\n  overflow: hidden;\n  will-change: opacity, transform;\n}\n\n.lg-progress__fill {\n  position: absolute;\n  z-index: 5;\n  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.lg-progress__fill-liquid {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  mix-blend-mode: soft-light;\n  filter: blur(8px);\n  border-radius: inherit;\n  z-index: 6;\n}\n\n.lg-progress__shimmer {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 7;\n}\n\n.lg-progress__text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  white-space: nowrap;\n  z-index: 15;\n}\n\n.lg-progress.lg-text-inside .lg-progress__text {\n  position: absolute;\n  top: 50%;\n  left: 1rem;\n  transform: translateY(-50%);\n}\n\n.lg-progress__label-container {\n  display: flex;\n  flex-direction: column;\n  gap: 0.25rem;\n  flex: 1;\n}\n\n.lg-progress__label {\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #1e293b;\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  line-height: 1.4;\n}\n\n.lg-progress__description {\n  font-size: 0.75rem;\n  line-height: 1.4;\n  color: #64748b;\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  --lg-progress-height: 0.375rem;\n}\n\n.lg-size-small .lg-progress__label {\n  font-size: 0.8rem;\n}\n\n.lg-size-medium {\n  --lg-progress-height: 0.5rem;\n}\n\n.lg-size-large {\n  --lg-progress-height: 0.75rem;\n}\n\n.lg-size-large .lg-progress__label {\n  font-size: 0.95rem;\n}\n\n.lg-size-large .lg-progress__description {\n  font-size: 0.8rem;\n}\n\n/* Variant-specific styles */\n.lg-progress--primary {\n  --lg-primary: #3b82f6;\n}\n\n.lg-progress--secondary {\n  --lg-primary: #64748b;\n}\n\n.lg-progress--success {\n  --lg-primary: #10b981;\n}\n\n.lg-progress--warning {\n  --lg-primary: #f59e0b;\n}\n\n.lg-progress--error {\n  --lg-primary: #ef4444;\n}\n\n.lg-progress--info {\n  --lg-primary: #06b6d4;\n}\n\n/* Striped pattern */\n.lg-progress.lg-striped .lg-progress__fill {\n  background-image: linear-gradient(\n    45deg,\n    rgba(255, 255, 255, 0.15) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.15) 50%,\n    rgba(255, 255, 255, 0.15) 75%,\n    transparent 75%,\n    transparent\n  );\n  background-size: 1rem 1rem;\n}\n\n/* Indeterminate animation */\n.lg-progress.lg-indeterminate .lg-progress__fill {\n  animation: lg-progress-indeterminate 1.5s infinite ease-in-out;\n}\n\n/* Animations */\n@keyframes lg-progress-shimmer {\n  0% {\n    transform: translateX(-100%);\n  }\n  100% {\n    transform: translateX(100%);\n  }\n}\n\n@keyframes lg-progress-indeterminate {\n  0% {\n    width: 30%;\n    left: -30%;\n  }\n  50% {\n    width: 50%;\n    left: 25%;\n  }\n  75% {\n    width: 30%;\n    left: 75%;\n  }\n  100% {\n    width: 30%;\n    left: 100%;\n  }\n}\n\n@keyframes lg-progress-liquid-flow {\n  0%, 100% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n}\n\n[data-theme=\"dark\"] .lg-progress__label {\n  color: #e2e8f0;\n}\n\n[data-theme=\"dark\"] .lg-progress__description {\n  color: #94a3b8;\n}\n</style>\n","<template>\n  <div\n    ref=\"containerRef\"\n    :class=\"selectButtonClasses\"\n    :style=\"selectButtonStyle\"\n    role=\"group\"\n    @mousemove=\"handleMouseMove\"\n    @mouseenter=\"handleContainerMouseEnter\"\n    @mouseleave=\"handleContainerMouseLeave\"\n  >\n    <!-- Sliding highlight that follows mouse during sliding -->\n    <div\n      v-if=\"isMouseOverContainer && (previewedIndex !== null || hoveredIndex !== null)\"\n      class=\"lg-select-button__slider\"\n      :style=\"sliderStyle\"\n    ></div>\n\n    <!-- Selection box -->\n    <template v-for=\"(option, index) in options\" :key=\"getOptionKey(option)\">\n      <div\n        v-if=\"isSelected(option)\"\n        class=\"lg-select-button__selection-box\"\n        :style=\"getSelectionBoxStyle()\"\n      >\n        <span class=\"lg-select-button__selection-text\">{{ getOptionLabel(option) }}</span>\n      </div>\n    </template>\n\n    <button\n      v-for=\"(option, index) in options\"\n      :key=\"getOptionKey(option)\"\n      :class=\"getButtonClasses(option, index)\"\n      :style=\"getButtonStyle(option, index)\"\n      :disabled=\"option.disabled || disabled\"\n      @click=\"handleClick(option, $event)\"\n      @mouseenter=\"handleMouseEnter(option, index)\"\n      @mouseleave=\"handleMouseLeave(option, index)\"\n      :aria-pressed=\"isSelected(option)\"\n      :aria-label=\"getOptionLabel(option)\"\n      type=\"button\"\n    >\n      <!-- Liquid glass effect background -->\n      <div class=\"lg-select-button-item__liquid\" :style=\"getLiquidStyle(option, index)\"></div>\n\n      <!-- Button border glow -->\n      <div class=\"lg-select-button-item__border\" :style=\"getBorderStyle(option, index)\"></div>\n\n      <!-- Dynamic light flow effect -->\n      <div class=\"lg-select-button-item__light-flow\" :style=\"getLightFlowStyle(option, index)\"></div>\n\n      <!-- Button content -->\n      <div class=\"lg-select-button-item__content\">\n        <slot name=\"option\" :option=\"option\" :isSelected=\"isSelected(option)\" :index=\"index\">\n          <span class=\"lg-select-button-item__text\">{{ getOptionLabel(option) }}</span>\n        </slot>\n      </div>\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, onBeforeUnmount, watch, type CSSProperties } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { LiquidGlassConfig } from '../../types'\n\nexport interface SelectOption {\n  value: any\n  label: string\n  disabled?: boolean\n  [key: string]: any\n}\n\ninterface SelectButtonProps extends LiquidGlassConfig {\n  modelValue?: any\n  options: SelectOption[]\n  disabled?: boolean\n  variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'\n  size?: 'small' | 'medium' | 'large'\n  multiple?: boolean\n  unselectable?: boolean\n  tabIndex?: number\n  onChange?: (value: any) => void\n  class?: string\n  style?: CSSProperties\n}\n\nconst props = withDefaults(defineProps<SelectButtonProps>(), {\n  disabled: false,\n  variant: 'primary',\n  size: 'medium',\n  multiple: false,\n  unselectable: false,\n  tabIndex: 0,\n  displacementScale: 70,\n  blurAmount: 0.0625,\n  saturation: 140,\n  aberrationIntensity: 2,\n  elasticity: 0.15,\n  cornerRadius: 12,\n  overLight: false,\n  mode: 'standard',\n  effect: 'liquidGlass'\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: any]\n  change: [value: any]\n}>()\n\nconst containerRef = ref<HTMLElement>()\nconst hoveredIndex = ref<number | null>(null)\nconst hoveredOption = ref<SelectOption | null>(null)\n\n// State management for mouse following\nconst isSelecting = ref(false)\nconst mousePosition = ref<{ x: number; y: number } | null>(null)\nconst isMouseOverContainer = ref(false)\nconst previewedIndex = ref<number | null>(null)\n\nconst {\n  isHovered,\n  isActive,\n  backdropStyle,\n  transformStyle,\n  calculateElasticTranslation\n} = useLiquidGlass({\n  container: containerRef,\n  displacementScale: props.displacementScale,\n  blurAmount: props.blurAmount,\n  saturation: props.saturation,\n  aberrationIntensity: props.aberrationIntensity,\n  elasticity: props.elasticity,\n  cornerRadius: props.cornerRadius,\n  overLight: props.overLight,\n  mode: props.mode,\n  effect: props.effect\n})\n\n// Enhanced slider style for mouse-following with hidden selection effect during sliding\nconst sliderStyle = computed(() => {\n  const targetIndex = previewedIndex.value ?? hoveredIndex.value\n  if (targetIndex === null || !containerRef.value) return {}\n\n  const tokens = variantTokens.value\n  const buttons = containerRef.value.querySelectorAll('.lg-select-button-item')\n  if (buttons.length === 0 || targetIndex >= buttons.length) return {}\n\n  const targetButton = buttons[targetIndex] as HTMLElement\n  const buttonRect = targetButton.getBoundingClientRect()\n  const containerRect = containerRef.value.getBoundingClientRect()\n\n  // Get the target option\n  const targetOption = props.options[targetIndex]\n  const isSelected = targetOption ?\n    (props.multiple ?\n      (Array.isArray(props.modelValue) ? props.modelValue.includes(targetOption.value) : false) :\n      props.modelValue === targetOption.value\n    ) : false\n\n  const left = buttonRect.left - containerRect.left\n  const width = buttonRect.width\n  const cornerRadius = Math.min(props.cornerRadius, 12)\n  const smoothPadding = '4px'\n\n  // Hide selection effect during mouse sliding - show only neutral following effect\n  const isSliding = isMouseOverContainer.value && !isSelected\n  const showSelectionEffect = isSelected && !isSliding\n\n  return {\n    position: 'absolute' as const,\n    top: smoothPadding,\n    bottom: smoothPadding,\n    left: `${left + parseFloat(smoothPadding)}px`,\n    width: `${width - (parseFloat(smoothPadding) * 2)}px`,\n    background: showSelectionEffect\n      ? `radial-gradient(ellipse at 30% 30%, ${tokens.glow} 0%, ${extractRgba(tokens.borderSelected, 0.4)} 50%, ${extractRgba(tokens.borderSelected, 0.2)} 100%)`\n      : `radial-gradient(ellipse at 40% 40%, ${tokens.glow} 0%, transparent 70%)`,\n    opacity: showSelectionEffect ? 0.6 : (isSliding ? 0.15 : 0.2),\n    transition: 'none', // Zero transition for instant response\n    pointerEvents: 'none' as const,\n    zIndex: showSelectionEffect ? 5 : 2,\n    borderRadius: `${cornerRadius}px`,\n    filter: showSelectionEffect\n      ? 'blur(3px) saturate(1.3) brightness(1.1)'\n      : 'blur(8px) saturate(1.1)',\n    boxShadow: showSelectionEffect\n      ? `inset 0 0 0 1.5px ${extractRgba(tokens.borderSelected, 0.6)}, 0 0 30px ${extractRgba(tokens.borderSelected, 0.3)}, 0 0 60px ${extractRgba(tokens.borderSelected, 0.15)}`\n      : `0 0 15px ${extractRgba(tokens.glow, 0.2)}`,\n    transform: showSelectionEffect ? 'scale(1.02)' : 'scale(1)',\n    mixBlendMode: 'screen' as const\n  }\n})\n\n// Color palettes for variants\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    deep: '#1d4ed8',\n    text: '#ffffff'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    deep: '#475569',\n    text: '#ffffff'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    deep: '#047857',\n    text: '#ffffff'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    deep: '#b45309',\n    text: '#ffffff'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    deep: '#b91c1c',\n    text: '#ffffff'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    deep: '#0e7490',\n    text: '#ffffff'\n  }\n} as const\n\nconst NEUTRAL_BASE = {\n  surface: '#ffffff',\n  text: '#1f2937',\n  border: '#e5e7eb'\n}\n\nfunction hexToRgb(hex: string) {\n  const normalized = hex.replace('#', '')\n  const bigint = parseInt(normalized, 16)\n  return {\n    r: (bigint >> 16) & 255,\n    g: (bigint >> 8) & 255,\n    b: bigint & 255\n  }\n}\n\nfunction rgba(hex: string, alpha: number) {\n  const { r, g, b } = hexToRgb(hex)\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\n// Helper to extract rgba values and create new ones\nfunction extractRgba(rgbaString: string, newAlpha: number): string {\n  const match = rgbaString.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/)\n  if (match) {\n    const [, r, g, b] = match\n    return `rgba(${r}, ${g}, ${b}, ${newAlpha})`\n  }\n  return rgbaString\n}\n\ninterface VariantTokens {\n  surface: string\n  surfaceHover: string\n  surfaceSelected: string\n  border: string\n  borderSelected: string\n  text: string\n  textSelected: string\n  glow: string\n  sheen: string\n  shadow: string\n  shadowSelected: string\n}\n\nfunction getVariantTokens(variant: SelectButtonProps['variant']): VariantTokens {\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  return {\n    surface: 'rgba(248, 250, 252, 0.4)',\n    surfaceHover: 'rgba(241, 245, 249, 0.6)',\n    surfaceSelected: rgba(palette.base, 0.25),\n    border: 'rgba(0, 0, 0, 0.1)',\n    borderSelected: rgba(palette.base, 0.3),\n    text: NEUTRAL_BASE.text,\n    textSelected: palette.base,\n    glow: rgba(palette.base, 0.2),\n    sheen: `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.3) 0%,\n      rgba(255, 255, 255, 0.15) 50%,\n      transparent 100%)`,\n    shadow: `0 1px 3px rgba(0, 0, 0, 0.05)`,\n    shadowSelected: `0 2px 8px ${rgba(palette.base, 0.15)}`\n  }\n}\n\nconst variantTokens = computed(() => getVariantTokens(props.variant))\n\n// Computed properties\nconst selectButtonClasses = computed(() => [\n  'lg-select-button',\n  'lg-component',\n  'lg-glass',\n  `lg-select-button--${props.variant}`,\n  `lg-select-button--${props.size}`,\n  props.class,\n  {\n    'lg-select-button--disabled': props.disabled,\n    'lg-select-button--multiple': props.multiple\n  }\n])\n\nconst selectButtonStyle = computed(() => ({\n  ...props.style,\n  display: 'flex',\n  position: 'relative',\n  borderRadius: `${props.cornerRadius}px`,\n  overflow: 'visible',\n  gap: '2px',\n  padding: '6px',\n  background: `\n    linear-gradient(135deg,\n      rgba(255, 255, 255, 0.9) 0%,\n      rgba(248, 250, 252, 0.8) 50%,\n      rgba(255, 255, 255, 0.85) 100%\n    )`,\n  backdropFilter: 'blur(16px) saturate(150%)',\n  WebkitBackdropFilter: 'blur(16px) saturate(150%)',\n  boxShadow: `\n    inset 0 1px 0 rgba(255, 255, 255, 0.8),\n    inset 0 -1px 0 rgba(0, 0, 0, 0.03),\n    0 8px 32px rgba(0, 0, 0, 0.08),\n    0 4px 16px rgba(0, 0, 0, 0.04)\n  `,\n  border: '1px solid rgba(255, 255, 255, 0.3)',\n  minHeight: '48px',\n  transition: 'none',\n  transform: 'translateZ(0)',\n  transformStyle: 'preserve-3d'\n}))\n\n// Option methods\nfunction getOptionKey(option: SelectOption): string {\n  return String(option.value)\n}\n\nfunction getOptionLabel(option: SelectOption): string {\n  return option.label\n}\n\nfunction isSelected(option: SelectOption): boolean {\n  if (props.multiple) {\n    const values = Array.isArray(props.modelValue) ? props.modelValue : []\n    return values.includes(option.value)\n  }\n  return props.modelValue === option.value\n}\n\nfunction selectOption(option: SelectOption, event?: MouseEvent) {\n  if (option.disabled || props.disabled || isSelecting.value) return\n\n  const optionIndex = props.options.findIndex(opt => opt.value === option.value)\n  if (optionIndex === -1) return\n\n  // Execute selection immediately with zero delay\n  let newValue: any\n\n  if (props.multiple) {\n    const values = Array.isArray(props.modelValue) ? [...props.modelValue] : []\n    const index = values.indexOf(option.value)\n\n    if (index > -1) {\n      if (!props.unselectable || values.length > 1) {\n        values.splice(index, 1)\n      }\n    } else {\n      values.push(option.value)\n    }\n\n    newValue = values\n  } else {\n    if (props.unselectable && props.modelValue === option.value) {\n      newValue = null\n    } else {\n      newValue = option.value\n    }\n  }\n\n  emit('update:modelValue', newValue)\n  emit('change', newValue)\n  props.onChange?.(newValue)\n\n  // Minimal debouncing to prevent rapid clicks\n  isSelecting.value = true\n  setTimeout(() => {\n    isSelecting.value = false\n  }, 16) // One frame at 60fps\n}\n\n\n\n// Enhanced mouse handlers with following effect\nfunction handleMouseEnter(option: SelectOption, index: number) {\n  hoveredIndex.value = index\n  hoveredOption.value = option\n  previewedIndex.value = index\n  isMouseOverContainer.value = true\n}\n\nfunction handleMouseLeave(option: SelectOption, index: number) {\n  if (hoveredIndex.value === index) {\n    hoveredIndex.value = null\n    hoveredOption.value = null\n  }\n  if (previewedIndex.value === index) {\n    previewedIndex.value = null\n  }\n  isMouseOverContainer.value = false\n}\n\nfunction handleClick(option: SelectOption, event: MouseEvent) {\n  selectOption(option, event)\n  // Clear preview state after selection to show full selection effect\n  previewedIndex.value = null\n  // Small delay to ensure the selection state is fully applied\n  setTimeout(() => {\n    isMouseOverContainer.value = false\n  }, 16)\n}\n\nfunction handleMouseMove(event: MouseEvent) {\n  if (!containerRef.value) return\n\n  const rect = containerRef.value.getBoundingClientRect()\n  mousePosition.value = {\n    x: event.clientX - rect.left,\n    y: event.clientY - rect.top\n  }\n\n  // Find which button the mouse is over\n  const buttons = containerRef.value.querySelectorAll('.lg-select-button-item')\n  buttons.forEach((button, index) => {\n    const buttonRect = button.getBoundingClientRect()\n    const containerRect = containerRef.value!.getBoundingClientRect()\n    const relativeRect = {\n      left: buttonRect.left - containerRect.left,\n      top: buttonRect.top - containerRect.top,\n      right: buttonRect.right - containerRect.left,\n      bottom: buttonRect.bottom - containerRect.top\n    }\n\n    if (\n      mousePosition.value!.x >= relativeRect.left &&\n      mousePosition.value!.x <= relativeRect.right &&\n      mousePosition.value!.y >= relativeRect.top &&\n      mousePosition.value!.y <= relativeRect.bottom\n    ) {\n      previewedIndex.value = index\n    }\n  })\n}\n\nfunction handleContainerMouseEnter() {\n  isMouseOverContainer.value = true\n}\n\nfunction handleContainerMouseLeave() {\n  isMouseOverContainer.value = false\n  mousePosition.value = null\n  // Clear preview state when leaving container to show proper selection state\n  previewedIndex.value = null\n}\n\n\n// Button classes and styles\nfunction getButtonClasses(option: SelectOption, index: number) {\n  return [\n    'lg-select-button-item',\n    {\n      'lg-select-button-item--selected': isSelected(option),\n      'lg-select-button-item--disabled': option.disabled || props.disabled,\n      'lg-select-button-item--hovered': hoveredIndex.value === index\n    }\n  ]\n}\n\nfunction getButtonStyle(option: SelectOption, index: number): CSSProperties {\n  const tokens = variantTokens.value\n  const isSel = isSelected(option)\n  const isHov = hoveredIndex.value === index\n  const isPrev = previewedIndex.value === index\n  const isDis = option.disabled || props.disabled\n  const isFirst = index === 0\n  const isLast = index === props.options.length - 1\n  const cornerRadius = Math.min(props.cornerRadius, 14)\n\n  let background = 'transparent'\n  let color = tokens.text\n  let border = 'none'\n  let boxShadow = 'none'\n  let filter = 'none'\n  let borderRadius = '0'\n  let backdropFilter = 'none'\n  let transform = 'translateZ(0)'\n  let transition = 'none' // No transitions for instant response\n\n  // Hide selection effect during sliding, only show neutral following\n  const isSliding = isMouseOverContainer.value && !isSel\n  const showFullSelection = isSel && !isSliding\n\n  if (showFullSelection) {\n    // Full selection effect (only shown when not sliding)\n    background = `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.95) 0%,\n      ${tokens.surfaceSelected} 50%,\n      rgba(255, 255, 255, 0.8) 100%)`\n    color = tokens.textSelected\n    boxShadow = `\n      inset 0 1px 0 rgba(255, 255, 255, 0.9),\n      inset 0 -1px 0 rgba(0, 0, 0, 0.05),\n      0 0 0 2px ${extractRgba(tokens.borderSelected, 0.5)},\n      0 6px 16px ${extractRgba(tokens.borderSelected, 0.3)},\n      0 12px 32px rgba(0, 0, 0, 0.15)\n    `\n    backdropFilter = 'blur(16px) saturate(180%)'\n    transform = 'translateZ(0) scale(1.03)'\n  } else if (isPrev && !isSel && isSliding) {\n    // Subtle preview effect during sliding\n    background = `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.6) 0%,\n      rgba(59, 130, 246, 0.05) 50%,\n      rgba(255, 255, 255, 0.4) 100%)`\n    color = tokens.text\n    boxShadow = `\n      inset 0 1px 0 rgba(255, 255, 255, 0.5),\n      0 0 0 1px rgba(59, 130, 246, 0.1),\n      0 2px 8px rgba(0, 0, 0, 0.05)\n    `\n    backdropFilter = 'blur(6px) saturate(110%)'\n    transform = 'translateZ(0) scale(1.005)'\n    filter = 'none'\n  } else if (isHov && !isDis && !isSliding) {\n    // Normal hover effect (only when not sliding)\n    background = `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.7) 0%,\n      ${tokens.surfaceHover} 100%)`\n    boxShadow = `\n      inset 0 1px 0 rgba(255, 255, 255, 0.6),\n      0 0 0 1px rgba(148, 163, 184, 0.2),\n      0 2px 8px rgba(0, 0, 0, 0.08)\n    `\n    backdropFilter = 'blur(8px) saturate(120%)'\n    transform = 'translateZ(0) scale(1.01)'\n  } else if (!isDis) {\n    // Apply subtle blur to unselected options\n    background = 'transparent'\n    filter = 'blur(0.3px) opacity(0.85)'\n    transform = 'translateZ(0)'\n  }\n\n  if (isDis) {\n    background = 'transparent'\n    color = 'rgba(107, 114, 128, 0.4)'\n    filter = 'opacity(0.4) grayscale(0.5)'\n    transform = 'translateZ(0)'\n  }\n\n  // Enhanced border radius for liquid glass design\n  if (showFullSelection) {\n    // Selected button gets full rounded corners\n    if (isFirst && isLast) {\n      borderRadius = `${cornerRadius}px`\n    } else if (isFirst) {\n      borderRadius = `${cornerRadius}px 6px 6px ${cornerRadius}px`\n    } else if (isLast) {\n      borderRadius = `6px ${cornerRadius}px ${cornerRadius}px 6px`\n    } else {\n      borderRadius = '6px'\n    }\n  } else if (isPrev && isSliding) {\n    // Preview button gets subtle rounded corners during sliding\n    if (isFirst && isLast) {\n      borderRadius = `${cornerRadius}px`\n    } else if (isFirst) {\n      borderRadius = `${cornerRadius - 1}px 4px 4px ${cornerRadius - 1}px`\n    } else if (isLast) {\n      borderRadius = `4px ${cornerRadius - 1}px ${cornerRadius - 1}px 4px`\n    } else {\n      borderRadius = '4px'\n    }\n  } else {\n    // Unselected buttons get subtle rounded corners\n    if (isFirst && isLast) {\n      borderRadius = `${cornerRadius}px`\n    } else if (isFirst) {\n      borderRadius = `${cornerRadius - 2}px 4px 4px ${cornerRadius - 2}px`\n    } else if (isLast) {\n      borderRadius = `4px ${cornerRadius - 2}px ${cornerRadius - 2}px 4px`\n    } else {\n      borderRadius = '4px'\n    }\n  }\n\n  const sizeStyles = getSizeStyles()\n\n  return {\n    ...sizeStyles,\n    background,\n    color,\n    border,\n    boxShadow,\n    filter,\n    borderRadius,\n    backdropFilter,\n    WebkitBackdropFilter: backdropFilter,\n    transform,\n    borderRight: !isLast && !showFullSelection ? '1px solid rgba(148, 163, 184, 0.08)' : 'none',\n    position: 'relative',\n    cursor: isDis ? 'not-allowed' : 'pointer',\n    transition, // No transitions for instant response\n    fontWeight: showFullSelection ? '600' : '500',\n    zIndex: showFullSelection ? 5 : (isPrev ? 2 : 1),\n    overflow: 'hidden'\n  }\n}\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      padding: '0.375rem 0.75rem',\n      fontSize: '0.875rem',\n      borderRadius: '8px',\n      minWidth: '60px'\n    },\n    medium: {\n      padding: '0.5rem 1rem',\n      fontSize: '0.875rem',\n      borderRadius: '10px',\n      minWidth: '80px'\n    },\n    large: {\n      padding: '0.625rem 1.25rem',\n      fontSize: '0.95rem',\n      borderRadius: '12px',\n      minWidth: '100px'\n    }\n  }\n\n  return sizes[props.size as keyof typeof sizes] || sizes.medium\n}\n\n// Liquid effect styles\nfunction getLiquidStyle(option: SelectOption, index: number) {\n  const tokens = variantTokens.value\n  const isHov = hoveredIndex.value === index && !option.disabled && !props.disabled\n\n  return {\n    background: tokens.sheen,\n    opacity: isHov ? 0.6 : 0,\n    transition: 'opacity 0.3s ease'\n  }\n}\n\nfunction getBorderStyle(option: SelectOption, index: number) {\n  const tokens = variantTokens.value\n  const isHov = hoveredIndex.value === index && !option.disabled && !props.disabled\n\n  return {\n    background: `radial-gradient(circle at 50% 50%, ${tokens.glow} 0%, transparent 70%)`,\n    opacity: isHov ? 0.4 : 0,\n    transition: 'opacity 0.2s ease'\n  }\n}\n\nfunction getLightFlowStyle(option: SelectOption, index: number) {\n  const tokens = variantTokens.value\n  const isSel = isSelected(option)\n  const isHov = hoveredIndex.value === index && !option.disabled && !props.disabled\n  const isPrev = previewedIndex.value === index && !option.disabled && !props.disabled\n  const isSliding = isMouseOverContainer.value && !isSel\n\n  let opacity = 0\n  if (isSel && !isSliding) {\n    opacity = 0.5 // Strong glow for selected state (only when not sliding)\n  } else if (isPrev && isSliding) {\n    opacity = 0.15 // Subtle glow for preview during sliding\n  } else if (isHov && !isSliding) {\n    opacity = 0.3 // Normal hover glow (only when not sliding)\n  }\n\n  return {\n    background: `radial-gradient(ellipse at center, ${tokens.glow} 0%, transparent 60%)`,\n    opacity,\n    transition: 'none', // No transitions for instant response\n    mixBlendMode: 'screen' as const,\n    transform: (isSel && !isSliding) ? 'scale(1.2)' : (isPrev ? 'scale(1.05)' : 'scale(1)')\n  }\n}\n\n\n// Apple-style selection box\nfunction getSelectionBoxStyle(): CSSProperties {\n  const tokens = variantTokens.value\n\n  return {\n    position: 'absolute' as const,\n    top: 'calc(100% + 12px)',\n    left: '50%',\n    transform: 'translateX(-50%)',\n    background: 'rgba(255, 255, 255, 0.9)',\n    border: '1px solid rgba(0, 0, 0, 0.1)',\n    borderRadius: '8px',\n    padding: '6px 12px',\n    color: '#1d1d1f',\n    fontSize: '13px',\n    fontWeight: '500',\n    fontFamily: '-apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"SF Pro Display\", sans-serif',\n    whiteSpace: 'nowrap',\n    boxShadow: '0 4px 24px rgba(0, 0, 0, 0.12), 0 0 0 0.5px rgba(0, 0, 0, 0.05)',\n    zIndex: 100,\n    backdropFilter: 'blur(20px) saturate(180%)',\n    WebkitBackdropFilter: 'blur(20px) saturate(180%)',\n    opacity: 0,\n    animation: 'appleFadeInUp 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards',\n    transition: 'all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n    letterSpacing: '-0.01em',\n    lineHeight: '1.2',\n    minHeight: '32px',\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center'\n  }\n}\n\n\n// Clean up on unmount\nonBeforeUnmount(() => {\n  isSelecting.value = false\n  mousePosition.value = null\n  isMouseOverContainer.value = false\n  previewedIndex.value = null\n})\n</script>\n\n<style scoped>\n.lg-select-button {\n  display: inline-flex;\n  align-items: stretch;\n}\n\n.lg-select-button-item {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.5rem;\n  font-weight: 500;\n  text-align: center;\n  user-select: none;\n  white-space: nowrap;\n  flex: 1;\n  min-width: 0;\n  outline: none;\n  overflow: hidden;\n  background-clip: padding-box;\n  isolation: isolate;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.lg-select-button-item::-moz-focus-inner {\n  border: none;\n  padding: 0;\n  margin: 0;\n}\n\n.lg-select-button-item:focus-visible {\n  outline: 2px solid var(--lg-primary, #3b82f6);\n  outline-offset: 2px;\n}\n\n.lg-select-button-item--disabled {\n  opacity: 0.6;\n  pointer-events: none;\n  filter: saturate(0.8);\n}\n\n/* Effect layers */\n.lg-select-button-item__liquid,\n.lg-select-button-item__border,\n.lg-select-button-item__light-flow {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 1;\n}\n\n.lg-select-button-item__liquid {\n  mix-blend-mode: soft-light;\n  filter: blur(8px);\n  overflow: hidden;\n}\n\n.lg-select-button-item__border {\n  mix-blend-mode: overlay;\n  overflow: hidden;\n}\n\n.lg-select-button-item__light-flow {\n  mix-blend-mode: screen;\n  filter: blur(12px);\n  overflow: hidden;\n}\n\n.lg-select-button-item__content {\n  position: relative;\n  z-index: 2;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.5rem;\n  width: 100%;\n}\n\n.lg-select-button-item__text {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  flex: 1;\n}\n\n.lg-select-button-item__selection {\n  display: flex;\n  align-items: center;\n  margin-left: 0.25rem;\n}\n\n.lg-select-button-item__selection svg {\n  width: 1em;\n  height: 1em;\n}\n\n/* Enhanced slider for ultra-smooth mouse-following effect */\n.lg-select-button__slider {\n  position: absolute;\n  top: 4px;\n  bottom: 4px;\n  width: 80px;\n  background: radial-gradient(ellipse at 30% 30%, rgba(59, 130, 246, 0.3) 0%, transparent 70%);\n  opacity: 0.2;\n  transition: all 0.4s cubic-bezier(0.25, 0.1, 0.25, 1);\n  pointer-events: none;\n  z-index: 2;\n  border-radius: 8px;\n  filter: blur(6px) saturate(1.2);\n  mix-blend-mode: screen;\n  will-change: left, width, opacity, filter;\n  transform-style: preserve-3d;\n}\n\n.lg-select-button__slider::after {\n  content: '';\n  position: absolute;\n  inset: -2px;\n  background: radial-gradient(ellipse at center, rgba(59, 130, 246, 0.1) 0%, transparent 100%);\n  border-radius: inherit;\n  filter: blur(10px);\n  z-index: -1;\n}\n\n/* Apple-style selection box */\n.lg-select-button__selection-box {\n  position: absolute;\n  top: calc(100% + 12px);\n  left: 50%;\n  transform: translateX(-50%);\n  background: rgba(255, 255, 255, 0.9);\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 8px;\n  padding: 6px 12px;\n  color: #1d1d1f;\n  font-size: 13px;\n  font-weight: 500;\n  font-family: -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"SF Pro Display\", sans-serif;\n  white-space: nowrap;\n  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12), 0 0 0 0.5px rgba(0, 0, 0, 0.05);\n  z-index: 100;\n  backdrop-filter: blur(20px) saturate(180%);\n  -webkit-backdrop-filter: blur(20px) saturate(180%);\n  animation: appleFadeInUp 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;\n  letter-spacing: -0.01em;\n  line-height: 1.2;\n  min-height: 32px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n/* Enhanced liquid glass button effects */\n.lg-select-button-item--selected {\n  background: linear-gradient(135deg,\n    rgba(255, 255, 255, 0.95) 0%,\n    rgba(255, 255, 255, 0.8) 50%,\n    rgba(255, 255, 255, 0.9) 100%);\n  backdrop-filter: blur(16px) saturate(180%);\n  -webkit-backdrop-filter: blur(16px) saturate(180%);\n  border: 1px solid rgba(255, 255, 255, 0.3);\n  box-shadow:\n    inset 0 1px 0 rgba(255, 255, 255, 0.9),\n    inset 0 -1px 0 rgba(0, 0, 0, 0.05),\n    0 8px 32px rgba(59, 130, 246, 0.15),\n    0 4px 16px rgba(0, 0, 0, 0.08);\n}\n\n.lg-select-button-item--selected::before {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(135deg,\n    rgba(255, 255, 255, 0.4) 0%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.2) 100%);\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 1;\n}\n\n.lg-select-button-item--hovered:not(.lg-select-button-item--selected) {\n  background: linear-gradient(135deg,\n    rgba(255, 255, 255, 0.8) 0%,\n    rgba(255, 255, 255, 0.6) 100%);\n  backdrop-filter: blur(10px) saturate(140%);\n  -webkit-backdrop-filter: blur(10px) saturate(140%);\n}\n\n/* Preview state for mouse following */\n.lg-select-button[data-previewed=\"true\"] {\n  background: linear-gradient(135deg,\n    rgba(255, 255, 255, 0.85) 0%,\n    rgba(59, 130, 246, 0.1) 50%,\n    rgba(255, 255, 255, 0.75) 100%);\n  backdrop-filter: blur(12px) saturate(160%);\n  -webkit-backdrop-filter: blur(12px) saturate(160%);\n  border: 1px solid rgba(59, 130, 246, 0.2);\n  box-shadow:\n    inset 0 1px 0 rgba(255, 255, 255, 0.8),\n    0 0 0 1px rgba(59, 130, 246, 0.3),\n    0 6px 20px rgba(59, 130, 246, 0.12),\n    0 3px 10px rgba(0, 0, 0, 0.06);\n}\n\n.lg-select-button[data-previewed=\"true\"]::after {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(135deg,\n    rgba(59, 130, 246, 0.05) 0%,\n    transparent 50%,\n    rgba(59, 130, 246, 0.02) 100%);\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 1;\n}\n\n/* Smooth transitions for liquid glass effect */\n.lg-select-button-item {\n  transition: none; /* Zero transition for instant response */\n  transform-style: preserve-3d;\n  will-change: transform, background, box-shadow, filter;\n}\n\n/* Performance optimizations */\n.lg-select-button-item,\n.lg-select-button__slider {\n  contain: layout style paint;\n}\n\n/* Hardware acceleration */\n.lg-select-button-item {\n  transform: translateZ(0);\n  backface-visibility: hidden;\n  perspective: 1000px;\n}\n\n.lg-select-button__selection-text {\n  font-weight: 500;\n  font-size: 13px;\n  color: #1d1d1f;\n}\n\n/* Size-specific adjustments */\n.lg-select-button--small {\n  gap: 1px;\n}\n\n.lg-select-button--medium {\n  gap: 2px;\n}\n\n.lg-select-button--large {\n  gap: 3px;\n}\n\n/* Apple-style animations */\n@keyframes appleFadeInUp {\n  0% {\n    opacity: 0;\n    transform: translateX(-50%) translateY(6px) scale(0.95);\n  }\n  50% {\n    opacity: 0.8;\n  }\n  100% {\n    opacity: 1;\n    transform: translateX(-50%) translateY(0) scale(1);\n  }\n}\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    transform: translateX(-50%) translateY(8px);\n  }\n  to {\n    opacity: 1;\n    transform: translateX(-50%) translateY(0);\n  }\n}\n\n/* Dark theme support */\n[data-theme=\"dark\"] .lg-select-button {\n  background: rgba(55, 65, 81, 0.9);\n}\n\n/* Multiple selection mode */\n.lg-select-button--multiple .lg-select-button-item {\n  flex: none;\n}\n\n\n/* Responsive design */\n@media (max-width: 640px) {\n  .lg-select-button {\n    flex-wrap: wrap;\n  }\n\n  .lg-select-button-item {\n    flex: 1 1 120px;\n  }\n\n  .lg-select-dropdown__menu {\n    max-height: 250px;\n  }\n\n  .lg-select-dropdown__options {\n    max-height: 150px;\n  }\n}\n</style>\n","<template>\n  <div class=\"lg-switch-wrapper\">\n    <div\n      ref=\"switchRef\"\n      :class=\"switchClasses\"\n      :style=\"switchStyle\"\n      @click=\"handleClick\"\n      @mouseenter=\"handleMouseEnter\"\n      @mouseleave=\"handleMouseLeave\"\n      @mousedown=\"handleMouseDown\"\n      @mouseup=\"handleMouseUp\"\n      @keydown=\"handleKeyDown\"\n      :tabindex=\"disabled ? -1 : 0\"\n      :aria-checked=\"isChecked\"\n      :aria-disabled=\"disabled\"\n    >\n      <!-- Liquid glass effect background for track -->\n      <div class=\"lg-switch__liquid\" :style=\"liquidStyle\"></div>\n\n      <!-- Track border glow -->\n      <div class=\"lg-switch__border\" :style=\"borderStyle\"></div>\n\n      <!-- Dynamic light flow effect -->\n      <div class=\"lg-switch__light-flow\" :style=\"lightFlowStyle\"></div>\n\n      <!-- Switch thumb -->\n      <div class=\"lg-switch__thumb\" :style=\"thumbStyle\">\n        <!-- Thumb content -->\n        <div class=\"lg-switch__thumb-content\"></div>\n      </div>\n    </div>\n\n    <!-- Label and description (outside the switch) -->\n    <div v-if=\"label || description\" class=\"lg-switch__label-container\">\n      <div v-if=\"label\" class=\"lg-switch__label\">\n        {{ label }}\n      </div>\n      <div v-if=\"description\" class=\"lg-switch__description\">\n        {{ description }}\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type CSSProperties } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { LiquidGlassConfig } from '../../types'\n\ninterface SwitchProps extends LiquidGlassConfig {\n  modelValue?: boolean\n  checkedValue?: boolean\n  uncheckedValue?: boolean\n  label?: string\n  description?: string\n  variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'\n  size?: 'small' | 'medium' | 'large'\n  disabled?: boolean\n  loading?: boolean\n  beforeChange?: (value: boolean) => boolean | Promise<boolean>\n  onChange?: (value: boolean) => void\n  class?: string\n  style?: CSSProperties\n  width?: string | number\n  height?: string | number\n  displacementScale?: number\n  blurAmount?: number\n  saturation?: number\n  aberrationIntensity?: number\n  elasticity?: number\n  cornerRadius?: number\n  overLight?: boolean\n  mode?: 'standard' | 'polar' | 'prominent' | 'shader'\n  effect?: 'flowingLiquid' | 'liquidGlass' | 'transparentIce' | 'unevenGlass' | 'mosaicGlass'\n}\n\nconst props = withDefaults(defineProps<SwitchProps>(), {\n  modelValue: false,\n  checkedValue: true,\n  uncheckedValue: false,\n  displacementScale: 50,\n  blurAmount: 0.0625,\n  saturation: 140,\n  aberrationIntensity: 2,\n  elasticity: 0.15,\n  cornerRadius: 12,\n  variant: 'primary',\n  size: 'medium',\n  disabled: false,\n  loading: false,\n  overLight: false,\n  mode: 'standard',\n  effect: 'liquidGlass'\n})\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: boolean]\n  change: [value: boolean]\n}>()\n\nconst switchRef = ref<HTMLElement>()\n\ninterface SwitchVariantTokens {\n  trackSurface: string\n  trackSurfaceAlt: string\n  trackBorder: string\n  trackBorderSoft: string\n  thumbSurface: string\n  thumbSurfaceAlt: string\n  thumbBorder: string\n  thumbBorderSoft: string\n  thumbGlow: string\n  highlight: string\n  sheen: string\n  subtle: string\n  shadow: string\n  shadowActive?: string\n  glow: string\n}\n\n// Base colors used to derive liquid glass palettes for switch variants\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    deep: '#1d4ed8',\n    text: '#e2e8f0'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    deep: '#475569',\n    text: '#e2e8f0'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    deep: '#047857',\n    text: '#ecfdf5'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    deep: '#b45309',\n    text: '#fffbeb'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    deep: '#b91c1c',\n    text: '#fee2e2'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    deep: '#0e7490',\n    text: '#cffafe'\n  }\n} as const\n\nconst NEUTRAL_BASE = '#94a3b8'\n\nfunction hexToRgb(hex: string) {\n  let normalized = hex.replace('#', '')\n\n  if (normalized.length === 3) {\n    normalized = normalized\n      .split('')\n      .map((char) => char + char)\n      .join('')\n  }\n\n  const bigint = parseInt(normalized, 16)\n\n  return {\n    r: (bigint >> 16) & 255,\n    g: (bigint >> 8) & 255,\n    b: bigint & 255\n  }\n}\n\nfunction rgba(hex: string, alpha: number) {\n  const { r, g, b } = hexToRgb(hex)\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nfunction getVariantTokens(variant: SwitchProps['variant'], overLight: boolean, checked: boolean): SwitchVariantTokens {\n  // Derive a cohesive palette for the switch based on variant & lighting\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  if (overLight) {\n    return {\n      trackSurface: checked ? rgba(palette.base, 0.25) : 'rgba(255, 255, 255, 0.25)',\n      trackSurfaceAlt: checked ? rgba(palette.accent, 0.32) : rgba(NEUTRAL_BASE, 0.18),\n      trackBorder: checked ? rgba(palette.base, 0.45) : rgba(NEUTRAL_BASE, 0.38),\n      trackBorderSoft: checked ? rgba(palette.base, 0.28) : 'rgba(255, 255, 255, 0.55)',\n      thumbSurface: checked ? rgba(palette.base, 0.88) : 'rgba(255, 255, 255, 0.92)',\n      thumbSurfaceAlt: checked ? rgba(palette.accent, 0.78) : 'rgba(255, 255, 255, 0.85)',\n      thumbBorder: checked ? rgba(palette.base, 0.48) : rgba(NEUTRAL_BASE, 0.32),\n      thumbBorderSoft: checked ? rgba(palette.accent, 0.38) : 'rgba(255, 255, 255, 0.75)',\n      thumbGlow: checked ? rgba(palette.base, 0.42) : rgba(NEUTRAL_BASE, 0.18),\n      highlight: checked ? rgba(palette.accent, 0.24) : rgba(NEUTRAL_BASE, 0.12),\n      sheen: `linear-gradient(135deg,\n        rgba(255, 255, 255, 0.65) 0%,\n        rgba(255, 255, 255, 0.35) 38%,\n        transparent 65%,\n        rgba(255, 255, 255, 0.45) 100%)`,\n      subtle: checked ? rgba(palette.base, 0.08) : rgba(NEUTRAL_BASE, 0.04),\n      glow: checked ? rgba(palette.accent, 0.32) : rgba(NEUTRAL_BASE, 0.16),\n      shadow: `0 8px 24px ${rgba('#0f172a', 0.12)}, 0 4px 12px ${rgba('#0f172a', 0.08)}, inset 0 1px 0 rgba(255, 255, 255, 0.6)`,\n      shadowActive: `0 12px 32px ${rgba('#0f172a', 0.18)}, 0 6px 16px ${rgba('#0f172a', 0.12)}, inset 0 1px 0 rgba(255, 255, 255, 0.7)`\n    }\n  }\n\n  return {\n    trackSurface: checked ? rgba(palette.base, 0.45) : rgba(NEUTRAL_BASE, 0.28),\n    trackSurfaceAlt: checked ? rgba(palette.accent, 0.55) : rgba(NEUTRAL_BASE, 0.38),\n    trackBorder: checked ? rgba(palette.accent, 0.68) : rgba(NEUTRAL_BASE, 0.52),\n    trackBorderSoft: checked ? rgba(palette.accent, 0.42) : 'rgba(255, 255, 255, 0.35)',\n    thumbSurface: checked ? rgba(palette.base, 0.92) : rgba(NEUTRAL_BASE, 0.85),\n    thumbSurfaceAlt: checked ? rgba(palette.accent, 0.82) : rgba(NEUTRAL_BASE, 0.75),\n    thumbBorder: checked ? rgba(palette.base, 0.64) : rgba(NEUTRAL_BASE, 0.48),\n    thumbBorderSoft: checked ? rgba(palette.accent, 0.54) : 'rgba(255, 255, 255, 0.45)',\n    thumbGlow: checked ? rgba(palette.base, 0.58) : rgba(NEUTRAL_BASE, 0.28),\n    highlight: checked ? rgba(palette.accent, 0.55) : rgba(NEUTRAL_BASE, 0.32),\n    sheen: `linear-gradient(135deg,\n      rgba(255, 255, 255, 0.5) 0%,\n      rgba(255, 255, 255, 0.28) 40%,\n      transparent 60%,\n      rgba(255, 255, 255, 0.35) 100%)`,\n    subtle: checked ? rgba(palette.base, 0.12) : rgba(NEUTRAL_BASE, 0.08),\n    glow: checked ? rgba(palette.accent, 0.48) : rgba(NEUTRAL_BASE, 0.24),\n    shadow: `0 10px 28px ${rgba('#0f172a', 0.18)}, 0 5px 14px ${rgba('#0f172a', 0.12)}, inset 0 1px 0 rgba(255, 255, 255, 0.4)`,\n    shadowActive: `0 16px 38px ${rgba('#0f172a', 0.24)}, 0 8px 20px ${rgba('#0f172a', 0.16)}, inset 0 1px 0 rgba(255, 255, 255, 0.5)`\n  }\n}\n\nconst isChecked = computed(() => props.modelValue === props.checkedValue)\n\nconst variantTokens = computed(() => getVariantTokens(props.variant ?? 'primary', props.overLight, isChecked.value))\n\nconst {\n  isHovered,\n  isActive,\n  backdropStyle,\n  transformStyle,\n  calculateElasticTranslation\n} = useLiquidGlass({\n  container: switchRef,\n  displacementScale: props.displacementScale,\n  blurAmount: props.blurAmount,\n  saturation: props.saturation,\n  aberrationIntensity: props.aberrationIntensity,\n  elasticity: props.elasticity,\n  cornerRadius: props.cornerRadius,\n  overLight: props.overLight,\n  mode: props.mode,\n  effect: props.effect\n})\n\nconst switchClasses = computed(() => [\n  'lg-switch',\n  'lg-component',\n  'lg-glass',\n  'lg-liquid',\n  `lg-switch--${props.variant}`,\n  `lg-size-${props.size}`,\n  props.class,\n  {\n    'lg-disabled': props.disabled,\n    'lg-loading': props.loading,\n    'lg-checked': isChecked.value,\n    'lg-focus-visible': !props.disabled\n  }\n])\n\nconst switchStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n  const tokens = variantTokens.value\n\n  const translation = calculateElasticTranslation.value\n  const hoverLift = isHovered.value && !props.disabled ? -2 : 0\n  const translateY = translation.y + hoverLift\n  const scale = isHovered.value && !props.disabled ? 1.02 : 1\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    '--lg-switch-highlight': tokens.highlight,\n    '--lg-switch-glow': tokens.glow,\n    '--lg-switch-sheen': tokens.sheen,\n    '--lg-switch-subtle': tokens.subtle,\n    '--lg-switch-border-soft': tokens.trackBorderSoft,\n    background: `linear-gradient(135deg, ${tokens.trackSurface} 0%, ${tokens.trackSurfaceAlt} 100%)`,\n    border: 'none',\n    boxShadow: isHovered.value && !props.disabled ? (tokens.shadowActive || tokens.shadow) : tokens.shadow,\n    backdropFilter: 'blur(18px) saturate(160%)',\n    WebkitBackdropFilter: 'blur(18px) saturate(160%)',\n    position: 'relative',\n    zIndex: 10,\n    transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n    transform: `translate3d(${translation.x}px, ${translateY}px, 0) scale(${scale})`,\n    cursor: props.disabled ? 'not-allowed' : 'pointer',\n    willChange: 'transform',\n    overflow: 'hidden',\n    borderRadius: `calc(var(--lg-switch-height, 1.5rem) / 2)`\n  } as CSSProperties\n})\n\nconst liquidStyle = computed(() => ({\n  background: variantTokens.value.sheen,\n  opacity: isHovered.value && !props.disabled ? 0.6 : 0.3,\n  transform: `translate3d(${calculateElasticTranslation.value.x * 0.4}px, ${calculateElasticTranslation.value.y * 0.3}px, 0)`,\n  transition: 'opacity 0.35s ease, transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)'\n}))\n\nconst borderStyle = computed(() => ({\n  background: `radial-gradient(circle at 50% 0%,\n    ${variantTokens.value.trackBorderSoft} 0%,\n    ${variantTokens.value.trackBorder} 50%,\n    transparent 100%)`,\n  opacity: isHovered.value && !props.disabled ? 0.7 : 0.4\n}))\n\nconst lightFlowStyle = computed(() => {\n  const tokens = variantTokens.value\n  return {\n    background: `radial-gradient(ellipse at center,\n      ${tokens.highlight} 0%,\n      ${tokens.glow} 40%,\n      transparent 70%)`,\n    opacity: isHovered.value && !props.disabled ? 0.8 : 0,\n    transform: `translate3d(${calculateElasticTranslation.value.x * 0.3}px, ${calculateElasticTranslation.value.y * 0.2}px, 0) scale(1.1)`\n  }\n})\n\nconst thumbStyle = computed(() => {\n  const tokens = variantTokens.value\n  const thumbSize = 'var(--lg-switch-thumb-size, 1.125rem)'\n  const trackHeight = 'var(--lg-switch-height, 1.5rem)'\n\n  // 计算 thumb 在关闭和开启状态时的正确位置\n  // 留出适当间距，避免 thumb 太深入 track 边缘\n  // 间距设为 thumb 直径的 10%，确保视觉平衡\n  const gap = `calc(${thumbSize} * 0.1)`\n  const leftPosition = isChecked.value\n    ? `calc(100% - ${thumbSize} - ${gap})`\n    : gap\n\n  // 计算垂直位置，确保 thumb 与 track 顶部和底部贴合\n  // thumb 高度应该等于 track 高度，实现完美贴合\n  const topPosition = `calc((${trackHeight} - ${thumbSize}) / 2)`\n\n  return {\n    background: `linear-gradient(135deg, ${tokens.thumbSurface} 0%, ${tokens.thumbSurfaceAlt} 100%)`,\n    borderColor: 'transparent',\n    boxShadow: `0 6px 20px ${rgba('#0f172a', 0.2)}, 0 4px 12px ${rgba('#0f172a', 0.15)}, inset 0 2px 0 rgba(255, 255, 255, 0.6)`,\n    backdropFilter: 'blur(16px) saturate(140%)',\n    WebkitBackdropFilter: 'blur(16px) saturate(140%)',\n    border: `1px solid ${tokens.thumbBorder}`,\n    transform: `scale(${isActive.value && !props.disabled ? 0.95 : 1})`,\n    position: 'absolute',\n    overflow: 'hidden',\n    borderRadius: '50%',\n    width: thumbSize,\n    height: thumbSize,\n    minHeight: thumbSize,\n    minWidth: thumbSize,\n    top: topPosition,\n    left: leftPosition,\n    marginTop: '0',\n    transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), left 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n    aspectRatio: '1',\n    flexShrink: '0'\n  } as CSSProperties\n})\n\nfunction getSizeStyles(): CSSProperties {\n  // 优化尺寸比例，确保 thumb 和 track 完美贴合\n  // thumb 直径应该略小于 track 高度，确保平滑滑动\n  const sizes = {\n    small: {\n      '--lg-switch-width': '2.5rem',\n      '--lg-switch-height': '1.25rem',\n      '--lg-switch-thumb-size': '1.0rem' // 增大 thumb 尺寸，更接近 track 高度\n    },\n    medium: {\n      '--lg-switch-width': '3rem',\n      '--lg-switch-height': '1.5rem',\n      '--lg-switch-thumb-size': '1.25rem' // 增大 thumb 尺寸，更接近 track 高度\n    },\n    large: {\n      '--lg-switch-width': '3.75rem',\n      '--lg-switch-height': '1.875rem',\n      '--lg-switch-thumb-size': '1.625rem' // 增大 thumb 尺寸，更接近 track 高度\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n\n  // Override border radius if explicitly set\n  if (props.cornerRadius !== undefined) {\n    baseSize.borderRadius = `${props.cornerRadius}px`\n  }\n\n  return baseSize\n}\n\nasync function handleClick() {\n  if (props.disabled || props.loading) return\n\n  const newValue = !isChecked.value\n\n  // Check beforeChange callback if provided\n  if (props.beforeChange) {\n    try {\n      const canChange = await props.beforeChange(newValue)\n      if (!canChange) return\n    } catch (error) {\n      console.error('Error in beforeChange callback:', error)\n      return\n    }\n  }\n\n  emit('update:modelValue', props.checkedValue ? newValue : props.uncheckedValue)\n  emit('change', newValue)\n  props.onChange?.(newValue)\n}\n\nfunction handleMouseEnter() {\n  if (!props.disabled && !props.loading) {\n    isHovered.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  isHovered.value = false\n  isActive.value = false\n}\n\nfunction handleMouseDown() {\n  if (!props.disabled && !props.loading) {\n    isActive.value = true\n  }\n}\n\nfunction handleMouseUp() {\n  isActive.value = false\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (props.disabled || props.loading) return\n\n  if (event.key === 'Enter' || event.key === ' ') {\n    event.preventDefault()\n    handleClick()\n  }\n}\n</script>\n\n<style scoped>\n.lg-switch-wrapper {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n}\n\n.lg-switch {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  user-select: none;\n  border-radius: var(--lg-border-radius);\n  color: var(--lg-button-text, #0f172a);\n  outline: none;\n  border: none;\n  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  overflow: hidden;\n  background-clip: padding-box;\n  isolation: isolate;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  width: var(--lg-switch-width, 3rem);\n  height: var(--lg-switch-height, 1.5rem);\n}\n\n.lg-switch::-moz-focus-inner {\n  border: none;\n  padding: 0;\n  margin: 0;\n}\n\n.lg-switch:focus {\n  outline: none;\n}\n\n.lg-switch.lg-liquid {\n  overflow: hidden;\n}\n\n.lg-switch:focus-visible {\n  outline: none;\n  box-shadow: 0 0 0 2px var(--lg-switch-highlight, var(--lg-primary, #3b82f6));\n}\n\n.lg-switch:disabled,\n.lg-switch.lg-disabled {\n  opacity: 0.55;\n  pointer-events: none;\n  filter: saturate(0.75);\n}\n\n.lg-switch__liquid {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  mix-blend-mode: soft-light;\n  filter: blur(10px);\n  border-radius: inherit;\n  overflow: hidden;\n  will-change: opacity, transform;\n  z-index: 1;\n}\n\n.lg-switch__border {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  pointer-events: none;\n  z-index: 2;\n  mix-blend-mode: overlay;\n  opacity: 0.5;\n  overflow: hidden;\n}\n\n.lg-switch__light-flow {\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  pointer-events: none;\n  z-index: 0;\n  transition: opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1), transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n  mix-blend-mode: screen;\n  filter: blur(14px);\n  overflow: hidden;\n  will-change: opacity, transform;\n}\n\n.lg-switch__thumb {\n  position: absolute;\n  z-index: 10;\n  cursor: inherit;\n  aspect-ratio: 1;\n  flex-shrink: 0;\n  /* 移除固定样式，让 JavaScript 中的 thumbStyle 完全控制 */\n}\n\n.lg-switch__thumb-content {\n  position: relative;\n  z-index: 1;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  pointer-events: none;\n}\n\n.lg-switch__label-container {\n  display: flex;\n  flex-direction: column;\n  gap: 0.25rem;\n  flex: 1;\n}\n\n.lg-switch__label {\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #1e293b;\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  line-height: 1.4;\n}\n\n.lg-switch__description {\n  font-size: 0.75rem;\n  line-height: 1.4;\n  color: #64748b;\n  transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n/* Size-specific styles */\n.lg-size-small {\n  --lg-switch-width: 2.5rem;\n  --lg-switch-height: 1.25rem;\n  --lg-switch-thumb-size: 1.0rem;\n}\n\n.lg-size-small .lg-switch__label {\n  font-size: 0.8rem;\n}\n\n.lg-size-medium {\n  --lg-switch-width: 3rem;\n  --lg-switch-height: 1.5rem;\n  --lg-switch-thumb-size: 1.25rem;\n}\n\n.lg-size-large {\n  --lg-switch-width: 3.75rem;\n  --lg-switch-height: 1.875rem;\n  --lg-switch-thumb-size: 1.625rem;\n}\n\n.lg-size-large .lg-switch__label {\n  font-size: 0.95rem;\n}\n\n.lg-size-large .lg-switch__description {\n  font-size: 0.8rem;\n}\n\n/* Variant-specific styles */\n.lg-switch--primary {\n  --lg-primary: #3b82f6;\n}\n\n.lg-switch--secondary {\n  --lg-primary: #64748b;\n}\n\n.lg-switch--success {\n  --lg-primary: #10b981;\n}\n\n.lg-switch--warning {\n  --lg-primary: #f59e0b;\n}\n\n.lg-switch--error {\n  --lg-primary: #ef4444;\n}\n\n.lg-switch--info {\n  --lg-primary: #06b6d4;\n}\n\n/* Animations */\n@keyframes lg-switch-liquid-flow {\n  0%, 100% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n}\n\n@keyframes lg-switch-glow-pulse {\n  0%, 100% {\n    opacity: 0.6;\n    transform: scale(1);\n  }\n  50% {\n    opacity: 0.9;\n    transform: scale(1.08);\n  }\n}\n\n[data-theme=\"dark\"] .lg-switch__label {\n  color: #e2e8f0;\n}\n\n[data-theme=\"dark\"] .lg-switch__description {\n  color: #94a3b8;\n}\n</style>\n","<template>\n  <div\n    ref=\"tableRef\"\n    :class=\"tableClasses\"\n    :style=\"tableStyle\"\n  >\n    <!-- Table content -->\n    <div class=\"lg-table__content\">\n      <!-- Table header -->\n      <div v-if=\"title || $slots.header\" class=\"lg-table__header\">\n        <slot name=\"header\">\n          <h3 v-if=\"title\" class=\"lg-table__title\">{{ title }}</h3>\n          <p v-if=\"subtitle\" class=\"lg-table__subtitle\">{{ subtitle }}</p>\n        </slot>\n      </div>\n\n      <div class=\"lg-table__wrapper\">\n        <!-- Modern Loading overlay -->\n        <LgLoading\n          v-if=\"loading\"\n          :type=\"getModernLoadingType()\"\n          :size=\"getLoadingSize()\"\n          :color=\"loadingColor || variantTokens.surface\"\n          :text=\"loadingText\"\n          :overlay=\"true\"\n          class=\"lg-table__loading-overlay\"\n          @click.stop\n        />\n\n        <!-- Table container -->\n        <div class=\"lg-table__container\">\n          <table class=\"lg-table__table\">\n            <!-- Table header -->\n            <thead class=\"lg-table__thead\">\n              <tr class=\"lg-table__header-row\">\n                <th\n                  v-for=\"column in visibleColumns\"\n                  :key=\"column.key\"\n                  :class=\"[\n                    'lg-table__header-cell',\n                    {\n                      'lg-table__header-cell--sortable': column.sortable,\n                      'lg-table__header-cell--filtered': hasFilter(column.key),\n                      'lg-table__header-cell--align-right': column.align === 'right',\n                      'lg-table__header-cell--align-center': column.align === 'center'\n                    }\n                  ]\"\n                  :style=\"{\n                    width: column.width,\n                    minWidth: column.minWidth,\n                    maxWidth: column.maxWidth\n                  }\"\n                  @click=\"handleSort(column)\"\n                >\n                  <div class=\"lg-table__header-cell-content\">\n                    <span class=\"lg-table__header-cell-title\">{{ column.title }}</span>\n\n                    <!-- Actions container -->\n                    <div class=\"lg-table__header-cell-actions\">\n                      <!-- Sort icon -->\n                      <div v-if=\"column.sortable\" class=\"lg-table__sort-icon\">\n                        <div class=\"lg-table__sort-indicator\">\n                          <!-- 三态排序指示器 -->\n                          <div\n                            class=\"lg-table__sort-state\"\n                            :class=\"{\n                              'lg-table__sort-state--none': !getSortOrder(column.key),\n                              'lg-table__sort-state--asc': getSortOrder(column.key) === 'asc',\n                              'lg-table__sort-state--desc': getSortOrder(column.key) === 'desc'\n                            }\"\n                            :title=\"getSortTooltip(column.key)\"\n                          >\n                            <!-- 未排序状态：三条横线 -->\n                            <div v-if=\"!getSortOrder(column.key)\" class=\"lg-table__sort-icon-none\">\n                              <div class=\"lg-table__sort-line lg-table__sort-line--1\"></div>\n                              <div class=\"lg-table__sort-line lg-table__sort-line--2\"></div>\n                              <div class=\"lg-table__sort-line lg-table__sort-line--3\"></div>\n                            </div>\n\n                            <!-- 升序状态：向上的数字1 -->\n                            <div v-else-if=\"getSortOrder(column.key) === 'asc'\" class=\"lg-table__sort-icon-asc\">\n                              <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"currentColor\">\n                                <path d=\"M8 2l4 4h-3v6h-2V6H4l4-4z\"/>\n                                <text x=\"8\" y=\"14\" text-anchor=\"middle\" font-size=\"8\" font-weight=\"bold\" fill=\"currentColor\">1</text>\n                              </svg>\n                            </div>\n\n                            <!-- 降序状态：向下的数字2 -->\n                            <div v-else class=\"lg-table__sort-icon-desc\">\n                              <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"currentColor\">\n                                <path d=\"M8 14l4-4h-3V4H7v6H4l4 4z\"/>\n                                <text x=\"8\" y=\"5\" text-anchor=\"middle\" font-size=\"8\" font-weight=\"bold\" fill=\"currentColor\">2</text>\n                              </svg>\n                            </div>\n                          </div>\n                        </div>\n                      </div>\n\n                      <!-- Filter button -->\n                      <button\n                        v-if=\"column.filterable\"\n                        class=\"lg-table__filter-btn\"\n                        :class=\"{ 'lg-table__filter-btn--active': hasFilter(column.key) }\"\n                        @click.stop=\"toggleFilterDropdown(column.key)\"\n                        :title=\"hasFilter(column.key) ? '清除过滤' : '过滤'\"\n                      >\n                        <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n                          <!-- 使用更现代的filter图标 -->\n                          <path d=\"M4 4h16v2l-7 7v5l-2 1v-6L4 6V4z\"/>\n                        </svg>\n                      </button>\n                    </div>\n                  </div>\n\n                  <!-- Filter dropdown -->\n                  <div\n                    v-if=\"column.filterable && activeFilterColumn === column.key\"\n                    class=\"lg-table__filter-dropdown\"\n                    @click.stop\n                  >\n                    <div class=\"lg-table__filter-header\">\n                      <span>过滤: {{ column.title }}</span>\n                      <button class=\"lg-table__filter-close\" @click=\"closeFilterDropdown\">\n                        <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n                          <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n                        </svg>\n                      </button>\n                    </div>\n                    <div class=\"lg-table__filter-content\">\n                      <component\n                        :is=\"getFilterComponent(column.filterType)\"\n                        :value=\"getFilterValue(column.key)\"\n                        :options=\"column.filterOptions\"\n                        :placeholder=\"column.filterPlaceholder || `搜索${column.title}...`\"\n                        @update:value=\"handleFilter(column.key, $event)\"\n                      />\n                      <div v-if=\"hasFilter(column.key)\" class=\"lg-table__filter-actions\">\n                        <button class=\"lg-table__filter-clear\" @click=\"clearFilter(column.key)\">\n                          清除过滤\n                        </button>\n                      </div>\n                    </div>\n                  </div>\n                </th>\n              </tr>\n            </thead>\n\n            <!-- Table body -->\n            <tbody class=\"lg-table__tbody\">\n              <template v-if=\"paginatedData.length === 0\">\n                <tr class=\"lg-table__empty-row\">\n                  <td :colspan=\"visibleColumns.length\" class=\"lg-table__empty-cell\">\n                    <div class=\"lg-table__empty-content\">\n                      <div class=\"lg-table__empty-icon\">📊</div>\n                      <div class=\"lg-table__empty-text\">{{ emptyText }}</div>\n                    </div>\n                  </td>\n                </tr>\n              </template>\n              <template v-else>\n                <tr\n                  v-for=\"(record, index) in paginatedData\"\n                  :key=\"getRowKey(record, index)\"\n                  :class=\"[\n                    'lg-table__row',\n                    {\n                      'lg-table__row--striped': striped && index % 2 === 1,\n                      'lg-table__row--hover': hoverable\n                    }\n                  ]\"\n                  @click=\"handleRowClick(record, index)\"\n                >\n                  <td\n                    v-for=\"column in visibleColumns\"\n                    :key=\"column.key\"\n                    :class=\"[\n                      'lg-table__cell',\n                      {\n                        'lg-table__cell--align-right': column.align === 'right',\n                        'lg-table__cell--align-center': column.align === 'center'\n                      }\n                    ]\"\n                  >\n                    <slot\n                      :name=\"`cell-${column.key}`\"\n                      :record=\"record\"\n                      :value=\"getCellValue(record, column.key)\"\n                      :index=\"index\"\n                    >\n                      {{ getCellValue(record, column.key) }}\n                    </slot>\n                  </td>\n                </tr>\n              </template>\n            </tbody>\n          </table>\n        </div>\n      </div>\n\n      <!-- Table footer with pagination -->\n      <div v-if=\"pagination && paginatedData.length > 0\" class=\"lg-table__footer\">\n        <div class=\"lg-table__pagination\">\n          <div class=\"lg-table__pagination-info\">\n            显示 {{ startIndex + 1 }}-{{ endIndex }} 条，共 {{ filteredData.length }} 条记录\n          </div>\n\n          <div class=\"lg-table__pagination-controls\">\n            <!-- Previous button -->\n            <button\n              class=\"lg-table__pagination-btn\"\n              :disabled=\"currentPage === 1\"\n              @click=\"goToPage(currentPage - 1)\"\n            >\n              <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n                <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\n              </svg>\n            </button>\n\n            <!-- Page numbers -->\n            <div class=\"lg-table__pagination-pages\">\n              <button\n                v-for=\"page in visiblePages\"\n                :key=\"page\"\n                class=\"lg-table__pagination-page\"\n                :class=\"{\n                  'lg-table__pagination-page--active': page === currentPage,\n                  'lg-table__pagination-page--ellipsis': page === '...'\n                }\"\n                :disabled=\"page === '...'\"\n                @click=\"page !== '...' && goToPage(page as number)\"\n              >\n                {{ page }}\n              </button>\n            </div>\n\n            <!-- Next button -->\n            <button\n              class=\"lg-table__pagination-btn\"\n              :disabled=\"currentPage === totalPages\"\n              @click=\"goToPage(currentPage + 1)\"\n            >\n              <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\">\n                <path d=\"M8.59 16.59L10 18l6-6-6-6-1.41 1.41L13.17 12z\"/>\n              </svg>\n            </button>\n\n            <!-- Page size selector -->\n            <select\n              v-if=\"pagination.showSizeChanger\"\n              class=\"lg-table__page-size-select\"\n              :value=\"pageSize\"\n              @change=\"handlePageSizeChange\"\n            >\n              <option\n                v-for=\"size in pagination.pageSizeOptions || [10, 20, 50, 100]\"\n                :key=\"size\"\n                :value=\"size\"\n              >\n                {{ size }} 条/页\n              </option>\n            </select>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onUnmounted, type CSSProperties } from 'vue'\nimport LgLoading from '../LgLoading/LgLoading.vue'\nimport type { TableColumn, PaginationConfig, TableProps, LoadingProps } from '../../types'\n\nconst props = withDefaults(defineProps<TableProps>(), {\n  loading: false,\n  striped: true,\n  hoverable: true,\n  bordered: false,\n  size: 'medium',\n  variant: 'primary',\n  pagination: () => ({ current: 1, pageSize: 10, showSizeChanger: true }),\n  emptyText: '暂无数据',\n  showHeader: true,\n  stickyHeader: false,\n  loadingColor: '#3b82f6',\n  loadingAnimation: 'spin',\n  loadingText: 'Loading...'\n})\n\n\nconst emit = defineEmits<{\n  sort: [{ field: string; order: 'asc' | 'desc' | null }]\n  filter: [{ field: string; value: any }]\n  rowClick: [record: any, index: number]\n  change: [pagination: { current: number; pageSize: number }]\n  pageChange: [page: number]\n  pageSizeChange: [size: number, page: number]\n}>()\n\nconst tableRef = ref<HTMLElement>()\n\n// 简洁的颜色定义\nconst COLORS = {\n  background: '#ffffff',\n  surface: 'rgba(255, 255, 255, 0.9)',\n  border: 'rgba(0, 0, 0, 0.08)',\n  text: '#1e293b',\n  textSecondary: '#64748b',\n  hover: 'rgba(59, 130, 246, 0.05)',\n  active: 'rgba(59, 130, 246, 0.1)',\n  primary: '#3b82f6'\n} as const\n\n// State\nconst currentPage = ref(props.pagination !== false ? (props.pagination?.current || 1) : 1)\nconst pageSize = ref(props.pagination !== false ? (props.pagination?.pageSize || 10) : 10)\nconst sortState = ref<Record<string, 'asc' | 'desc'>>({})\nconst filterState = ref<Record<string, any>>({})\nconst activeFilterColumn = ref<string | null>(null)\n\nconst visibleColumns = computed(() => props.columns)\n\nconst filteredData = computed(() => {\n  let result = [...props.data]\n\n  // Apply filters\n  Object.entries(filterState.value).forEach(([field, value]) => {\n    if (value !== undefined && value !== null && value !== '') {\n      result = result.filter(record => {\n        const cellValue = getCellValue(record, field)\n        if (typeof value === 'string') {\n          return String(cellValue).toLowerCase().includes(value.toLowerCase())\n        }\n        return cellValue === value\n      })\n    }\n  })\n\n  // Apply sorting\n  Object.entries(sortState.value).forEach(([field, order]) => {\n    result.sort((a, b) => {\n      const valueA = getCellValue(a, field)\n      const valueB = getCellValue(b, field)\n\n      if (valueA < valueB) return order === 'asc' ? -1 : 1\n      if (valueA > valueB) return order === 'asc' ? 1 : -1\n      return 0\n    })\n  })\n\n  return result\n})\n\nconst totalPages = computed(() => Math.ceil(filteredData.value.length / pageSize.value))\n\nconst startIndex = computed(() => (currentPage.value - 1) * pageSize.value)\n\nconst endIndex = computed(() => Math.min(startIndex.value + pageSize.value, filteredData.value.length))\n\nconst paginatedData = computed(() => {\n  if (!props.pagination) return filteredData.value\n  return filteredData.value.slice(startIndex.value, endIndex.value)\n})\n\nconst visiblePages = computed(() => {\n  const total = totalPages.value\n  const current = currentPage.value\n  const delta = 2 // Show 2 pages before and after current\n\n  let start = Math.max(1, current - delta)\n  let end = Math.min(total, current + delta)\n\n  // Add ellipsis\n  const pages = []\n  if (start > 1) {\n    pages.push(1)\n    if (start > 2) pages.push('...')\n  }\n\n  for (let i = start; i <= end; i++) {\n    pages.push(i)\n  }\n\n  if (end < total) {\n    if (end < total - 1) pages.push('...')\n    pages.push(total)\n  }\n\n  return pages\n})\n\nconst tableClasses = computed(() => [\n  'lg-table',\n  `lg-table--${props.variant}`,\n  `lg-table--${props.size}`,\n  props.class,\n  {\n    'lg-table--loading': props.loading,\n    'lg-table--striped': props.striped,\n    'lg-table--hoverable': props.hoverable,\n    'lg-table--bordered': props.bordered,\n    'lg-table--sticky-header': props.stickyHeader\n  }\n])\n\nconst tableStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    background: COLORS.background,\n    border: props.bordered ? `1px solid ${COLORS.border}` : 'none',\n    borderRadius: '12px',\n    overflow: 'hidden',\n    boxShadow: '0 4px 16px rgba(0, 0, 0, 0.08)',\n    transition: 'all 0.2s ease-in-out'\n  } as CSSProperties\n})\n\nconst loadingSpinnerStyle = computed(() => {\n  const baseColor = props.loadingColor || '#3b82f6'\n\n  if (props.loadingAnimation === 'spin') {\n    return {\n      borderColor: `${baseColor}20`,\n      borderTopColor: baseColor,\n      animation: 'lg-spin 1s linear infinite'\n    }\n  } else if (props.loadingAnimation === 'pulse') {\n    return {\n      backgroundColor: baseColor,\n      border: 'none',\n      animation: 'lg-pulse 1.5s ease-in-out infinite'\n    }\n  }\n\n  // Default styles for other animations\n  return {}\n})\n\nconst loadingText = computed(() => props.loadingText || 'Loading...')\n\n// Helper functions for loading component\nfunction getModernLoadingType(): LoadingProps['type'] {\n  const animationMap: Record<string, LoadingProps['type']> = {\n    spin: 'ring',\n    pulse: 'morph',\n    bounce: 'wave',\n    wave: 'wave'\n  }\n  return animationMap[props.loadingAnimation || 'spin'] || 'liquid'\n}\n\nfunction getLoadingSize(): LoadingProps['size'] {\n  const sizeMap: Record<string, LoadingProps['size']> = {\n    small: 'small',\n    medium: 'medium',\n    large: 'large'\n  }\n  return sizeMap[props.size || 'medium'] || 'medium'\n}\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      fontSize: '0.875rem'\n    },\n    medium: {\n      fontSize: '1rem'\n    },\n    large: {\n      fontSize: '1.125rem'\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n\n  if (typeof props.width === 'number') {\n    baseSize.width = `${props.width}px`\n  } else if (typeof props.width === 'string') {\n    baseSize.width = props.width\n  }\n\n  if (typeof props.height === 'number') {\n    baseSize.height = `${props.height}px`\n  } else if (typeof props.height === 'string') {\n    baseSize.height = props.height\n  }\n\n  return baseSize\n}\n\nfunction getCellValue(record: any, key: string) {\n  return key.split('.').reduce((obj, k) => obj?.[k], record)\n}\n\nfunction getRowKey(record: any, index: number) {\n  if (props.rowKey) {\n    if (typeof props.rowKey === 'function') {\n      return props.rowKey(record)\n    }\n    return record[props.rowKey]\n  }\n  return index\n}\n\nfunction handleSort(column: TableColumn) {\n  if (!column.sortable) return\n\n  const currentOrder = sortState.value[column.key]\n  let newOrder: 'asc' | 'desc' | null = 'asc'\n\n  // 三态循环：未排序 → 升序 → 降序 → 未排序\n  if (currentOrder === 'asc') {\n    newOrder = 'desc'\n  } else if (currentOrder === 'desc') {\n    newOrder = null\n  }\n\n  if (newOrder) {\n    sortState.value[column.key] = newOrder\n  } else {\n    delete sortState.value[column.key]\n  }\n\n  emit('sort', { field: column.key, order: newOrder })\n}\n\nfunction getSortTooltip(field: string): string {\n  const order = sortState.value[field]\n  if (order === 'asc') {\n    return '点击切换为降序'\n  } else if (order === 'desc') {\n    return '点击清除排序'\n  } else {\n    return '点击升序排序'\n  }\n}\n\nfunction handleFilter(field: string, value: any) {\n  if (value === undefined || value === null || value === '') {\n    delete filterState.value[field]\n  } else {\n    filterState.value[field] = value\n  }\n  emit('filter', { field, value })\n  // Reset to first page when filtering\n  currentPage.value = 1\n}\n\nfunction clearFilter(field: string) {\n  delete filterState.value[field]\n  emit('filter', { field, value: null })\n  currentPage.value = 1\n  closeFilterDropdown()\n}\n\nfunction toggleFilterDropdown(field: string) {\n  if (activeFilterColumn.value === field) {\n    closeFilterDropdown()\n  } else {\n    activeFilterColumn.value = field\n  }\n}\n\nfunction closeFilterDropdown() {\n  activeFilterColumn.value = null\n}\n\nfunction handleRowClick(record: any, index: number) {\n  emit('rowClick', record, index)\n}\n\nfunction goToPage(page: number) {\n  if (page >= 1 && page <= totalPages.value) {\n    currentPage.value = page\n    emit('pageChange', page)\n    emit('change', { current: page, pageSize: pageSize.value })\n  }\n}\n\nfunction handlePageSizeChange(event: Event) {\n  const newSize = Number((event.target as HTMLSelectElement).value)\n  pageSize.value = newSize\n  currentPage.value = 1 // Reset to first page\n  emit('pageSizeChange', newSize, 1)\n  emit('change', { current: 1, pageSize: newSize })\n}\n\nfunction getSortOrder(field: string) {\n  return sortState.value[field] || null\n}\n\nfunction hasFilter(field: string) {\n  return filterState.value[field] !== undefined && filterState.value[field] !== null && filterState.value[field] !== ''\n}\n\nfunction getFilterValue(field: string) {\n  return filterState.value[field]\n}\n\n\nfunction getFilterComponent(type: string = 'input') {\n  return type === 'select' ? 'select' : 'input'\n}\n\n// Watch for external pagination changes\nwatch(() => props.pagination !== false ? props.pagination?.current : undefined, (newVal) => {\n  if (newVal && newVal !== currentPage.value) {\n    currentPage.value = newVal\n  }\n})\n\nwatch(() => props.pagination !== false ? props.pagination?.pageSize : undefined, (newVal) => {\n  if (newVal && newVal !== pageSize.value) {\n    pageSize.value = newVal\n  }\n})\n\n// Close filter dropdown when clicking outside\nwatch(activeFilterColumn, () => {\n  if (activeFilterColumn.value) {\n    nextTick(() => {\n      document.addEventListener('click', handleDocumentClick)\n    })\n  } else {\n    document.removeEventListener('click', handleDocumentClick)\n  }\n})\n\n// Cleanup on unmount\nonUnmounted(() => {\n  document.removeEventListener('click', handleDocumentClick)\n})\n\n\nfunction handleDocumentClick(event: Event) {\n  const target = event.target as HTMLElement\n  if (activeFilterColumn.value && !target.closest('.lg-table__filter-dropdown') && !target.closest('.lg-table__filter-btn')) {\n    closeFilterDropdown()\n  }\n}\n</script>\n\n<style scoped>\n.lg-table {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  background: transparent;\n  overflow: hidden;\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.lg-table__content {\n  position: relative;\n  z-index: 10;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n}\n\n.lg-table__header {\n  padding: 1.5rem 1.5rem 1rem;\n  border-bottom: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  background: var(--lg-surface, rgba(255, 255, 255, 0.9));\n}\n\n.lg-table__title {\n  margin: 0 0 0.5rem 0;\n  font-size: 1.25rem;\n  font-weight: 600;\n  line-height: 1.4;\n  color: var(--lg-text, #1e293b);\n}\n\n.lg-table__subtitle {\n  margin: 0;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: var(--lg-text-secondary, #64748b);\n}\n\n.lg-table__wrapper {\n  position: relative;\n  overflow: auto;\n  flex: 1;\n  min-height: 300px; /* 增加最小高度确保loading可见 */\n}\n\n/* Modern Loading Overlay */\n.lg-table__loading-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(255, 255, 255, 0.95);\n  backdrop-filter: blur(4px);\n  -webkit-backdrop-filter: blur(4px);\n  border-radius: inherit;\n  z-index: 1000;\n}\n\n.lg-table__container {\n  overflow-x: auto;\n}\n\n.lg-table__table {\n  width: 100%;\n  border-collapse: collapse;\n  background: transparent;\n}\n\n.lg-table__thead {\n  background: linear-gradient(135deg, rgba(248, 250, 252, 0.98) 0%, rgba(241, 245, 249, 0.98) 100%);\n  position: sticky;\n  top: 0;\n  z-index: 10;\n  border-bottom: 2px solid var(--lg-border, rgba(59, 130, 246, 0.1));\n}\n\n.lg-table--sticky-header .lg-table__thead {\n  position: sticky;\n  top: 0;\n  z-index: 20;\n  backdrop-filter: blur(8px);\n}\n\n.lg-table__header-row {\n  border-bottom: none;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.lg-table__header-cell {\n  padding: 1.125rem 1rem;\n  text-align: left;\n  font-weight: 700;\n  font-size: 0.875rem;\n  color: var(--lg-text, #1e293b);\n  border-bottom: none;\n  background: transparent;\n  position: relative;\n  user-select: none;\n  transition: all 0.2s ease;\n  letter-spacing: 0.025em;\n}\n\n.lg-table__header-cell::after {\n  content: '';\n  position: absolute;\n  right: 0;\n  top: 25%;\n  bottom: 25%;\n  width: 1px;\n  background: linear-gradient(180deg, transparent 0%, rgba(148, 163, 184, 0.3) 50%, transparent 100%);\n}\n\n.lg-table__header-cell:last-child::after {\n  display: none;\n}\n\n.lg-table__header-cell--sortable {\n  cursor: pointer;\n}\n\n.lg-table__header-cell--sortable:hover {\n  background: linear-gradient(135deg, rgba(59, 130, 246, 0.04) 0%, rgba(99, 102, 241, 0.04) 100%);\n  transform: translateY(-1px);\n}\n\n.lg-table__header-cell--sortable:hover .lg-table__sort-icon {\n  opacity: 1;\n}\n\n.lg-table__header-cell--align-right {\n  text-align: right;\n}\n\n.lg-table__header-cell--align-center {\n  text-align: center;\n}\n\n.lg-table__header-cell-content {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 0.75rem;\n}\n\n.lg-table__header-cell-title {\n  flex: 1;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  font-weight: 700;\n  font-size: 0.875rem;\n  color: var(--lg-text, #1e293b);\n  letter-spacing: 0.025em;\n  line-height: 1.25;\n}\n\n.lg-table__sort-icon {\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all 0.2s ease;\n  opacity: 0.9;\n  height: 20px;\n  cursor: pointer;\n}\n\n.lg-table__sort-icon:hover {\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n.lg-table__sort-indicator {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 20px;\n  height: 20px;\n}\n\n.lg-table__sort-state {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 18px;\n  height: 18px;\n  border-radius: 0;\n  transition: all 0.2s ease;\n  position: relative;\n  background: transparent;\n  border: none;\n}\n\n/* 未排序状态样式 */\n.lg-table__sort-state--none {\n  color: #94a3b8;\n  opacity: 0.7;\n}\n\n.lg-table__sort-state--none:hover {\n  color: #64748b;\n  opacity: 1;\n}\n\n/* 升序状态样式 */\n.lg-table__sort-state--asc {\n  color: #16a34a;\n  opacity: 1;\n}\n\n.lg-table__sort-state--asc:hover {\n  color: #15803d;\n  transform: scale(1.1);\n}\n\n/* 降序状态样式 */\n.lg-table__sort-state--desc {\n  color: #dc2626;\n  opacity: 1;\n}\n\n.lg-table__sort-state--desc:hover {\n  color: #b91c1c;\n  transform: scale(1.1);\n}\n\n/* 未排序图标：三条横线 */\n.lg-table__sort-icon-none {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 2px;\n  width: 12px;\n  height: 12px;\n}\n\n.lg-table__sort-line {\n  width: 8px;\n  height: 1.5px;\n  background: currentColor;\n  border-radius: 1px;\n  transition: all 0.2s ease;\n}\n\n.lg-table__sort-line--1 {\n  width: 6px;\n}\n\n.lg-table__sort-line--2 {\n  width: 8px;\n}\n\n.lg-table__sort-line--3 {\n  width: 5px;\n}\n\n.lg-table__sort-state--none .lg-table__sort-line {\n  background: currentColor;\n}\n\n/* 升序图标样式 */\n.lg-table__sort-icon-asc {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #16a34a;\n}\n\n.lg-table__sort-icon-asc svg {\n  filter: drop-shadow(0 1px 2px rgba(34, 197, 94, 0.2));\n}\n\n/* 降序图标样式 */\n.lg-table__sort-icon-desc {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #dc2626;\n}\n\n.lg-table__sort-icon-desc svg {\n  filter: drop-shadow(0 1px 2px rgba(239, 68, 68, 0.2));\n}\n\n/* hover时显示动画效果 */\n.lg-table__header-cell:hover .lg-table__sort-icon {\n  opacity: 1;\n}\n\n.lg-table__header-cell-actions {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  flex-shrink: 0;\n  padding-left: 0.25rem;\n}\n\n.lg-table__filter-btn {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 20px;\n  height: 20px;\n  background: transparent;\n  border: none;\n  border-radius: 0;\n  color: var(--lg-text-secondary, #94a3b8);\n  cursor: pointer;\n  transition: all 0.2s ease;\n  padding: 0;\n  font-size: 12px;\n  opacity: 0.7;\n}\n\n.lg-table__filter-btn:hover {\n  color: var(--lg-primary, #3b82f6);\n  opacity: 1;\n  transform: scale(1.1);\n}\n\n.lg-table__filter-btn--active {\n  color: var(--lg-primary, #3b82f6);\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n.lg-table__filter-dropdown {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  background: var(--lg-surface, rgba(255, 255, 255, 0.98));\n  border: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  border-radius: 8px;\n  margin-top: 0.25rem;\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\n  z-index: 100;\n  min-width: 240px;\n  max-width: 320px;\n  width: max-content;\n  overflow: hidden;\n}\n\n/* 当下拉菜单可能超出右边界时，向左对齐 */\n.lg-table__header-cell:last-child .lg-table__filter-dropdown {\n  left: auto;\n  right: 0;\n}\n\n.lg-table__filter-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 0.75rem 1rem;\n  border-bottom: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  font-size: 0.875rem;\n  font-weight: 600;\n  color: var(--lg-text, #1e293b);\n  flex-shrink: 0;\n}\n\n.lg-table__filter-close {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 20px;\n  height: 20px;\n  background: transparent;\n  border: none;\n  border-radius: 4px;\n  color: var(--lg-text-secondary, #64748b);\n  cursor: pointer;\n  transition: all 0.2s ease;\n  padding: 0;\n  flex-shrink: 0;\n}\n\n.lg-table__filter-close:hover {\n  background: var(--lg-hover, rgba(59, 130, 246, 0.05));\n  color: var(--lg-primary, #3b82f6);\n}\n\n.lg-table__filter-content {\n  padding: 0.75rem 1rem;\n  min-width: 200px;\n  overflow: hidden;\n}\n\n.lg-table__filter-actions {\n  margin-top: 0.75rem;\n  padding-top: 0.75rem;\n  border-top: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  flex-shrink: 0;\n}\n\n/* 响应式调整 */\n@media (max-width: 768px) {\n  .lg-table__filter-dropdown {\n    min-width: 200px;\n    max-width: 280px;\n  }\n}\n\n.lg-table__filter-clear {\n  width: 100%;\n  padding: 0.5rem 1rem;\n  background: transparent;\n  border: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  border-radius: 6px;\n  color: var(--lg-text-secondary, #64748b);\n  font-size: 0.875rem;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.lg-table__filter-clear:hover {\n  background: var(--lg-hover, rgba(59, 130, 246, 0.05));\n  border-color: var(--lg-primary, #3b82f6);\n  color: var(--lg-primary, #3b82f6);\n}\n\n/* Custom input and select styling in filter dropdown */\n.lg-table__filter-content :deep(input),\n.lg-table__filter-content :deep(select) {\n  width: 100%;\n  max-width: 100%;\n  box-sizing: border-box;\n  padding: 0.5rem 0.75rem;\n  border: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  border-radius: 6px;\n  background: var(--lg-surface, rgba(255, 255, 255, 0.9));\n  color: var(--lg-text, #1e293b);\n  font-size: 0.875rem;\n  outline: none;\n  transition: all 0.2s ease;\n  min-height: 32px;\n  line-height: 1.4;\n}\n\n.lg-table__filter-content :deep(input):focus,\n.lg-table__filter-content :deep(select):focus {\n  border-color: var(--lg-primary, #3b82f6);\n  box-shadow: 0 0 0 2px var(--lg-hover, rgba(59, 130, 246, 0.1));\n}\n\n.lg-table__filter-content :deep(input)::placeholder,\n.lg-table__filter-content :deep(select)::placeholder {\n  color: var(--lg-text-secondary, #64748b);\n  opacity: 0.8;\n}\n\n.lg-table__filter-content :deep(select) {\n  cursor: pointer;\n  appearance: none;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n  background-position: right 0.5rem center;\n  background-repeat: no-repeat;\n  background-size: 1.5em 1.5em;\n  padding-right: 2.5rem;\n}\n\n.lg-table__tbody {\n  background: var(--lg-surface, rgba(255, 255, 255, 0.5));\n}\n\n.lg-table__row {\n  transition: all 0.2s ease;\n  border-bottom: 1px solid var(--lg-border, rgba(0, 0, 0, 0.04));\n}\n\n.lg-table__row:last-child {\n  border-bottom: none;\n}\n\n.lg-table__row--striped {\n  background: rgba(0, 0, 0, 0.02);\n}\n\n.lg-table__row--hover:hover {\n  background: var(--lg-hover, rgba(59, 130, 246, 0.05));\n}\n\n.lg-table__cell {\n  padding: 0.75rem;\n  font-size: 0.875rem;\n  color: var(--lg-text, rgba(30, 41, 59, 0.9));\n  border-bottom: 1px solid var(--lg-border, rgba(0, 0, 0, 0.04));\n}\n\n.lg-table__cell--align-right {\n  text-align: right;\n}\n\n.lg-table__cell--align-center {\n  text-align: center;\n}\n\n.lg-table__empty-row {\n  height: 120px;\n}\n\n.lg-table__empty-cell {\n  padding: 2rem;\n  text-align: center;\n}\n\n.lg-table__empty-content {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 0.75rem;\n}\n\n.lg-table__empty-icon {\n  font-size: 2rem;\n  opacity: 0.5;\n}\n\n.lg-table__empty-text {\n  font-size: 0.875rem;\n  color: var(--lg-text-secondary, rgba(30, 41, 59, 0.6));\n}\n\n.lg-table__footer {\n  padding: 1rem 1.5rem;\n  border-top: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  background: var(--lg-surface, rgba(255, 255, 255, 0.9));\n}\n\n.lg-table__pagination {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n\n.lg-table__pagination-info {\n  font-size: 0.875rem;\n  color: var(--lg-text-secondary, #64748b);\n}\n\n.lg-table__pagination-controls {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n\n.lg-table__pagination-btn {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  border: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  background: var(--lg-surface, rgba(255, 255, 255, 0.9));\n  border-radius: 6px;\n  color: var(--lg-text-secondary, #64748b);\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.lg-table__pagination-btn:hover:not(:disabled) {\n  background: var(--lg-hover, rgba(59, 130, 246, 0.05));\n  border-color: var(--lg-primary, #3b82f6);\n  color: var(--lg-primary, #3b82f6);\n}\n\n.lg-table__pagination-btn:disabled {\n  opacity: 0.4;\n  cursor: not-allowed;\n}\n\n.lg-table__pagination-pages {\n  display: flex;\n  align-items: center;\n  gap: 0.25rem;\n}\n\n.lg-table__pagination-page {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 32px;\n  height: 32px;\n  padding: 0 0.5rem;\n  border: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  background: var(--lg-surface, rgba(255, 255, 255, 0.9));\n  border-radius: 6px;\n  font-size: 0.875rem;\n  color: var(--lg-text, #1e293b);\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.lg-table__pagination-page:hover:not(:disabled):not(.lg-table__pagination-page--ellipsis) {\n  background: var(--lg-hover, rgba(59, 130, 246, 0.05));\n  border-color: var(--lg-primary, #3b82f6);\n  color: var(--lg-primary, #3b82f6);\n}\n\n.lg-table__pagination-page--active {\n  background: var(--lg-primary, #3b82f6);\n  border-color: var(--lg-primary, #3b82f6);\n  color: white;\n}\n\n.lg-table__pagination-page--ellipsis {\n  border: none;\n  background: none;\n  cursor: default;\n  color: var(--lg-text-secondary, #64748b);\n}\n\n.lg-table__page-size-select {\n  padding: 0.25rem 0.5rem;\n  border: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  border-radius: 6px;\n  background: var(--lg-surface, rgba(255, 255, 255, 0.9));\n  font-size: 0.875rem;\n  color: var(--lg-text, #1e293b);\n  cursor: pointer;\n}\n\n.lg-table__page-size-select:focus {\n  outline: none;\n  border-color: var(--lg-primary, #3b82f6);\n  box-shadow: 0 0 0 2px var(--lg-hover, rgba(59, 130, 246, 0.1));\n}\n\n/* Size variations */\n.lg-table--small .lg-table__header-cell,\n.lg-table--small .lg-table__cell {\n  padding: 0.5rem 0.625rem;\n  font-size: 0.8rem;\n}\n\n.lg-table--large .lg-table__header-cell,\n.lg-table--large .lg-table__cell {\n  padding: 1rem 1rem;\n  font-size: 0.95rem;\n}\n\n/* Bordered variation */\n.lg-table--bordered .lg-table__table {\n  border: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n  border-radius: 6px;\n  overflow: hidden;\n}\n\n.lg-table--bordered .lg-table__header-cell,\n.lg-table--bordered .lg-table__cell {\n  border-right: 1px solid var(--lg-border, rgba(0, 0, 0, 0.08));\n}\n\n.lg-table--bordered .lg-table__header-cell:last-child,\n.lg-table--bordered .lg-table__cell:last-child {\n  border-right: none;\n}\n\n/* Loading Animations */\n@keyframes lg-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes lg-pulse {\n  0%, 100% {\n    transform: scale(0.8);\n    opacity: 0.5;\n  }\n  50% {\n    transform: scale(1.2);\n    opacity: 1;\n  }\n}\n\n@keyframes lg-bounce {\n  0%, 80%, 100% {\n    transform: scale(0.8);\n    opacity: 0.5;\n  }\n  40% {\n    transform: scale(1.2);\n    opacity: 1;\n  }\n}\n\n@keyframes lg-wave {\n  0%, 60%, 100% {\n    transform: scaleY(0.3);\n    opacity: 0.3;\n  }\n  30% {\n    transform: scaleY(1);\n    opacity: 1;\n  }\n}\n\n/* Responsive design */\n@media (max-width: 768px) {\n  .lg-table__pagination {\n    flex-direction: column;\n    align-items: stretch;\n    gap: 0.75rem;\n  }\n\n  .lg-table__pagination-controls {\n    justify-content: center;\n  }\n\n  .lg-table__pagination-info {\n    text-align: center;\n  }\n}\n</style>","<template>\n  <span\n    ref=\"tagRef\"\n    :class=\"tagClasses\"\n    :style=\"tagStyle\"\n  >\n    <slot />\n  </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type CSSProperties } from 'vue'\nimport { useLiquidGlass } from '../../composables'\nimport type { TagProps } from '../../types'\n\nconst props = withDefaults(defineProps<TagProps>(), {\n  variant: 'primary',\n  size: 'medium',\n  closable: false\n})\n\nconst tagRef = ref<HTMLElement>()\n\n// Color variants\nconst VARIANT_BASE = {\n  primary: {\n    base: '#3b82f6',\n    accent: '#60a5fa',\n    text: '#ffffff'\n  },\n  secondary: {\n    base: '#64748b',\n    accent: '#94a3b8',\n    text: '#ffffff'\n  },\n  success: {\n    base: '#10b981',\n    accent: '#34d399',\n    text: '#ffffff'\n  },\n  warning: {\n    base: '#f59e0b',\n    accent: '#fbbf24',\n    text: '#ffffff'\n  },\n  error: {\n    base: '#ef4444',\n    accent: '#f87171',\n    text: '#ffffff'\n  },\n  info: {\n    base: '#06b6d4',\n    accent: '#22d3ee',\n    text: '#ffffff'\n  }\n} as const\n\nfunction hexToRgb(hex: string) {\n  const normalized = hex.replace('#', '')\n  const bigint = parseInt(normalized, 16)\n  return {\n    r: (bigint >> 16) & 255,\n    g: (bigint >> 8) & 255,\n    b: bigint & 255\n  }\n}\n\nfunction rgba(hex: string, alpha: number) {\n  const { r, g, b } = hexToRgb(hex)\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\nfunction getVariantTokens(variant: TagProps['variant']) {\n  const paletteKey = (variant ?? 'primary') as keyof typeof VARIANT_BASE\n  const palette = VARIANT_BASE[paletteKey] ?? VARIANT_BASE.primary\n\n  return {\n    background: palette.base,\n    border: rgba(palette.accent, 0.5),\n    text: palette.text\n  }\n}\n\nconst variantTokens = computed(() => getVariantTokens(props.variant))\n\nconst {\n  isHovered,\n  calculateElasticTranslation\n} = useLiquidGlass({\n  container: tagRef,\n  displacementScale: 15,\n  blurAmount: 0.02,\n  saturation: 120,\n  aberrationIntensity: 1,\n  elasticity: 0.2,\n  cornerRadius: 8,\n  overLight: false,\n  mode: 'standard',\n  effect: 'liquidGlass'\n})\n\nconst tagClasses = computed(() => [\n  'lg-tag',\n  `lg-tag--${props.variant}`,\n  `lg-tag--${props.size}`,\n  props.class,\n  {\n    'lg-tag--closable': props.closable,\n    'lg-disabled': props.disabled\n  }\n])\n\nconst tagStyle = computed(() => {\n  const sizeStyles = getSizeStyles()\n  const tokens = variantTokens.value\n  const translation = calculateElasticTranslation.value\n\n  return {\n    ...props.style,\n    ...sizeStyles,\n    backgroundColor: tokens.background,\n    border: `1px solid ${tokens.border}`,\n    color: tokens.text,\n    transform: `translate3d(${translation.x}px, ${translation.y}px, 0) scale(${isHovered.value ? 1.05 : 1})`,\n    transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\n    cursor: props.disabled ? 'not-allowed' : 'default',\n    willChange: 'transform'\n  } as CSSProperties\n})\n\nfunction getSizeStyles(): CSSProperties {\n  const sizes = {\n    small: {\n      borderRadius: '4px',\n      padding: '0.125rem 0.375rem',\n      fontSize: '0.75rem',\n      fontWeight: '500'\n    },\n    medium: {\n      borderRadius: '6px',\n      padding: '0.25rem 0.5rem',\n      fontSize: '0.875rem',\n      fontWeight: '500'\n    },\n    large: {\n      borderRadius: '8px',\n      padding: '0.375rem 0.75rem',\n      fontSize: '1rem',\n      fontWeight: '600'\n    }\n  }\n\n  const baseSize: CSSProperties = { ...(sizes[props.size as keyof typeof sizes] || sizes.medium) }\n  return baseSize\n}\n</script>\n\n<style scoped>\n.lg-tag {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  font-family: inherit;\n  line-height: 1;\n  user-select: none;\n  border-radius: var(--lg-border-radius, 6px);\n  outline: none;\n  position: relative;\n  overflow: hidden;\n}\n\n.lg-tag:disabled,\n.lg-tag.lg-disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.lg-tag:focus-visible {\n  outline: 2px solid rgba(255, 255, 255, 0.5);\n  outline-offset: 2px;\n}\n\n/* Size variations */\n.lg-tag--small {\n  min-height: 1.25rem;\n}\n\n.lg-tag--medium {\n  min-height: 1.5rem;\n}\n\n.lg-tag--large {\n  min-height: 1.75rem;\n}\n\n/* Variant variations */\n.lg-tag--primary {\n  --lg-tag-bg: #3b82f6;\n  --lg-tag-border: rgba(96, 165, 250, 0.5);\n  --lg-tag-text: #ffffff;\n}\n\n.lg-tag--secondary {\n  --lg-tag-bg: #64748b;\n  --lg-tag-border: rgba(148, 163, 184, 0.5);\n  --lg-tag-text: #ffffff;\n}\n\n.lg-tag--success {\n  --lg-tag-bg: #10b981;\n  --lg-tag-border: rgba(52, 211, 153, 0.5);\n  --lg-tag-text: #ffffff;\n}\n\n.lg-tag--warning {\n  --lg-tag-bg: #f59e0b;\n  --lg-tag-border: rgba(251, 191, 36, 0.5);\n  --lg-tag-text: #ffffff;\n}\n\n.lg-tag--error {\n  --lg-tag-bg: #ef4444;\n  --lg-tag-border: rgba(248, 113, 113, 0.5);\n  --lg-tag-text: #ffffff;\n}\n\n.lg-tag--info {\n  --lg-tag-bg: #06b6d4;\n  --lg-tag-border: rgba(34, 211, 238, 0.5);\n  --lg-tag-text: #ffffff;\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n  .lg-tag {\n    transition-duration: 0.01ms !important;\n  }\n}\n</style>","import type { App } from 'vue'\n\n// Styles\nimport './styles/index.css'\n\n// Composables\nexport { useLiquidGlass, useMouseTracking } from './composables'\n\n// Utils\nexport {\n  ShaderDisplacementGenerator,\n  fragmentShaders,\n  easings,\n  tween,\n  spring,\n  throttle,\n  debounce,\n  lerp,\n  clamp,\n  map\n} from './utils'\n\n// Types\nexport type {\n  LiquidGlassConfig,\n  MouseTrackingOptions,\n  ComponentSize,\n  ComponentVariant,\n  BaseProps,\n  ButtonProps,\n  CardProps,\n  InputProps,\n  ModalProps,\n  ContainerProps,\n  SelectProps,\n  SelectOption,\n  SwitchProps,\n  FormProps,\n  FormField,\n  FormValidationResult,\n  ThemeType,\n  ThemeConfig,\n  Vec2,\n  ShaderOptions,\n  FragmentShaderType,\n  AnimationOptions,\n  SpringOptions,\n  TableColumn,\n  PaginationConfig,\n  TableProps,\n  TagProps,\n  LoadingProps,\n  ProgressProps,\n  SelectButtonProps,\n  MenuItem,\n  MenuProps,\n  SubMenuProps,\n  MenuBarProps,\n  MenuItemType,\n  MenuItemAlignment,\n  MenuItemClickHandler,\n  MenuItemGroup,\n  MenuType,\n  MenuPosition,\n  MenuAnimation,\n  TextareaProps\n} from './types'\n\n// Components\nexport { LgButton, LgCard, LgContainer, LgForm, LgInput, LgLoading, LgMenu, LgModal, LgProgress, LgSelect, LgSelectButton, LgSwitch, LgTable, LgTag, LgTextarea } from './components'\n\n// Import components for Vue plugin\nimport LgButtonComponent from './components/LgButton'\nimport LgCardComponent from './components/LgCard'\nimport LgContainerComponent from './components/LgContainer'\nimport LgFormComponent from './components/LgForm'\nimport LgInputComponent from './components/LgInput'\nimport LgLoadingComponent from './components/LgLoading'\nimport LgMenuComponent from './components/LgMenu'\nimport LgModalComponent from './components/LgModal'\nimport LgProgressComponent from './components/LgProgress'\nimport LgSelectComponent from './components/LgSelect'\nimport LgSelectButtonComponent from './components/LgSelectButton'\nimport LgSwitchComponent from './components/LgSwitch'\nimport LgTableComponent from './components/LgTable'\nimport LgTagComponent from './components/LgTag'\nimport LgTextareaComponent from './components/LgTextarea'\n\n// Vue plugin\nconst LiquidGlassUI = {\n  install(app: App) {\n    // Register components\n    app.component('LgButton', LgButtonComponent)\n    app.component('LgCard', LgCardComponent)\n    app.component('LgContainer', LgContainerComponent)\n    app.component('LgForm', LgFormComponent)\n    app.component('LgInput', LgInputComponent)\n    app.component('LgLoading', LgLoadingComponent)\n    app.component('LgMenu', LgMenuComponent)\n    app.component('LModal', LgModalComponent)\n    app.component('LgProgress', LgProgressComponent)\n    app.component('LSelect', LgSelectComponent)\n    app.component('LgSelectButton', LgSelectButtonComponent)\n    app.component('LgSwitch', LgSwitchComponent)\n    app.component('LgTable', LgTableComponent)\n    app.component('LgTag', LgTagComponent)\n    app.component('LgTextarea', LgTextareaComponent)\n  }\n}\n\nexport default LiquidGlassUI\n\n// Version\nexport const version = '1.0.0'"],"names":["useLiquidGlass","options","displacementScale","blurAmount","saturation","aberrationIntensity","elasticity","cornerRadius","overLight","mode","effect","container","mouseContainer","externalGlobalMousePos","externalMouseOffset","glassRef","ref","isHovered","isActive","glassSize","internalGlobalMousePos","internalMouseOffset","globalMousePos","computed","mouseOffset","handleMouseMove","e","targetContainer","rect","centerX","centerY","watchEffect","onCleanup","calculateDirectionalScale","pillCenterX","pillCenterY","pillWidth","pillHeight","deltaX","deltaY","edgeDistanceX","edgeDistanceY","edgeDistance","activationZone","fadeInFactor","centerDistance","normalizedX","normalizedY","stretchIntensity","scaleX","scaleY","calculateFadeInFactor","calculateElasticTranslation","updateGlassSize","transformStyle","baseStyle","positionStyles","backdropStyle","useMouseTracking","throttle","mousePosition","isMouseOver","lastUpdateTime","throttledUpdate","callback","now","event","handleMouseEnter","handleMouseLeave","getRelativePosition","getDistance","onMounted","targetElement","onUnmounted","fragmentShaders","ShaderDisplacementGenerator","__publicField","vertexShaderSource","fragmentShaderSource","vertexShader","fragmentShader","positions","positionBuffer","positionLocation","type","source","shader","resolve","reject","resolutionLocation","mouseLocation","mouse","timeLocation","currentTime","imageData","canvas","ctx","clampedArray","imgData","easings","t","c2","c4","tween","from","to","onUpdate","duration","easing","delay","startTime","__spreadValues","animate","elapsed","progress","easedProgress","values","key","spring","tension","friction","mass","initialValues","velocities","accelerations","lastTime","deltaTime","allSettled","displacement","springForce","dampingForce","totalForce","func","timeoutId","lastExecTime","args","debounce","lerp","start","end","factor","clamp","value","min","max","map","inMin","inMax","outMin","outMax","NEUTRAL_TEXT_BASE","props","__props","emit","__emit","VARIANT_BASE","hexToRgb","hex","normalized","char","bigint","rgba","alpha","r","g","b","getVariantTokens","variant","paletteKey","palette","_a","variantTokens","buttonClasses","buttonStyle","sizeStyles","getSizeStyles","tokens","translation","hoverLift","translateY","scale","__spreadProps","sizes","baseSize","handleClick","handleMouseDown","handleMouseUp","_openBlock","_createBlock","_resolveDynamicComponent","_createElementVNode","_hoisted_1","_renderSlot","_ctx","$slots","_createElementBlock","_hoisted_2","_hoisted_3","clickable","cardClasses","cardStyle","liquidStyle","borderStyle","lightFlowStyle","hoverOverlayStyle","_toDisplayString","_hoisted_4","_hoisted_5","_hoisted_6","containerClasses","containerStyle","layoutStyles","getLayoutStyles","styles","inputRef","inputFieldRef","isFocused","showPassword","COLORS","componentClasses","inputType","componentStyle","isHoveredOrFocused","handleInput","target","handleChange","handleFocus","handleBlur","handleKeyDown","handleClear","nextTick","togglePasswordVisibility","__expose","_cache","selectRef","triggerRef","dropdownRef","searchInputRef","isOpen","searchQuery","dropdownPosition","hasValue","dropdownStyle","dropdownMaxHeight","selectedLabels","option","opt","filteredOptions","isSelected","handleTriggerClick","updateDropdownPosition","handleTriggerKeydown","handleOptionClick","index","optionIndex","handleTagRemove","handleSearch","handleSearchKeydown","clearSearch","triggerRect","dropdownHeight","spaceBelow","spaceAbove","top","handleClickOutside","watch","newValue","_Fragment","_renderList","label","_createTextVNode","_withModifiers","$event","_normalizeClass","_Teleport","_hoisted_8","_hoisted_9","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","textareaRef","internalValue","textareaClasses","textareaStyle","inputClasses","inputStyle","labelClasses","labelStyle","isSubmitting","errors","formData","initializeFormData","initialData","field","result","rgb","isTextInput","handleFieldInput","fieldName","validateField","handleFieldChange","handleFieldBlur","handleCheckboxChange","checked","f","validation","validate","isValid","newErrors","getFieldError","handleSubmit","__async","error","handleReset","reset","LgInput","_normalizeStyle","LgTextarea","LgSelect","_hoisted_7","_hoisted_10","_hoisted_11","_createVNode","LgButton","loadingClasses","loadingStyle","getSizeValue","textStyle","getTextSize","size","menuInjectionKey","injectedMenu","inject","menu","openTimer","closeTimer","hasChildren","visibleChildren","child","isCheckable","isDisabled","hasIcon","iconContent","submenuPlacement","isInlineSubmenu","submenuClasses","arrowSymbol","itemClasses","triggerClasses","buttonRole","triggerStyle","indent","clearOpenTimer","clearCloseTimer","clearTimers","scheduleOpen","scheduleClose","handleSubmenuMouseEnter","handleSubmenuMouseLeave","onBeforeUnmount","_Transition","_component_LgMenuItem","rootRef","openKeys","selectedKeys","hoveredKey","menuOrientation","menuType","showDelayRef","hideDelayRef","disabledRef","sizePaddingPreset","paddingValue","sizePreset","px","parts","gapValue","indentPreset","indentSize","visibleItems","item","menuStyle","menuClasses","listClasses","menuRole","newKeys","pruneKeys","closeAllSubmenus","handleItemHover","_b","handleItemLeave","flattenItems","items","stack","current","i","findItemMeta","targetId","parentId","found","setsEqual","a","emitUpdateActive","openSubmenu","next","parentMeta","sibling","rootItem","wasOpen","previous","closeSubmenu","_parentId","deep","closedItems","closedItem","toClose","id","meta","updateRadioGroup","candidate","selectItem","nextSelected","_c","allowedIds","removedActive","menuContext","provide","itemId","LgMenuItem","titleId","bodyId","modalRef","isVisible","modalClasses","modalStyle","handleOverlayClick","handleClose","handleConfirm","handleCancel","escapeCleanup","handleEscape","NEUTRAL_BASE","progressRef","normalizedValue","displayText","progressClasses","progressStyle","fillStyle","width","fillLiquidStyle","shimmerStyle","height","containerRef","hoveredIndex","hoveredOption","isSelecting","isMouseOverContainer","previewedIndex","sliderStyle","targetIndex","buttons","buttonRect","containerRect","targetOption","left","smoothPadding","isSliding","showSelectionEffect","extractRgba","rgbaString","newAlpha","match","selectButtonClasses","selectButtonStyle","getOptionKey","getOptionLabel","selectOption","button","relativeRect","handleContainerMouseEnter","handleContainerMouseLeave","getButtonClasses","getButtonStyle","isSel","isHov","isPrev","isDis","isFirst","isLast","background","color","border","boxShadow","filter","borderRadius","backdropFilter","transform","transition","showFullSelection","getLiquidStyle","getBorderStyle","getLightFlowStyle","opacity","getSelectionBoxStyle","switchRef","isChecked","switchClasses","switchStyle","thumbStyle","thumbSize","trackHeight","gap","leftPosition","topPosition","tableRef","currentPage","pageSize","sortState","filterState","activeFilterColumn","visibleColumns","filteredData","record","cellValue","getCellValue","order","valueA","valueB","totalPages","startIndex","endIndex","paginatedData","visiblePages","total","delta","pages","tableClasses","tableStyle","baseColor","loadingText","getModernLoadingType","getLoadingSize","obj","k","getRowKey","handleSort","column","currentOrder","newOrder","getSortTooltip","handleFilter","clearFilter","closeFilterDropdown","toggleFilterDropdown","handleRowClick","goToPage","page","handlePageSizeChange","newSize","getSortOrder","hasFilter","getFilterValue","getFilterComponent","newVal","handleDocumentClick","LgLoading","_hoisted_18","_hoisted_19","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_28","_hoisted_29","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_36","_hoisted_37","_hoisted_40","tagRef","tagClasses","tagStyle","LiquidGlassUI","app","LgButtonComponent","LgCardComponent","LgContainerComponent","LgFormComponent","LgInputComponent","LgLoadingComponent","LgMenuComponent","LgModalComponent","LgProgressComponent","LgSelectComponent","LgSelectButtonComponent","LgSwitchComponent","LgTableComponent","LgTagComponent","LgTextareaComponent","version"],"mappings":"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"}