{"version":3,"file":"style.mjs","sources":["../../../../../../packages/utils/dom/style.ts"],"sourcesContent":["import { windowHeight, windowWidth } from '@xzx-design/utils'\nimport { isNumber, isObject, isString, isStringNumber } from '../types'\nimport { inBrowser, isClient } from '../browser'\nimport { camelize } from '../strings'\nimport { entriesOf, keysOf } from '../objects'\nimport { debugWarn } from '../error'\nimport type { CSSProperties } from 'vue'\nimport type { Numeric } from '../browser'\n\nconst SCOPE = 'utils/dom/style'\n\nexport const classNameToArray = (cls = '') =>\n  cls.split(' ').filter((item) => !!item.trim())\n\nexport const hasClass = (el: Element, cls: string): boolean => {\n  if (!el || !cls) return false\n  if (cls.includes(' ')) throw new Error('className should not contain space.')\n  return el.classList.contains(cls)\n}\n\nexport const addClass = (el: Element, cls: string) => {\n  if (!el || !cls.trim()) return\n  el.classList.add(...classNameToArray(cls))\n}\n\nexport const removeClass = (el: Element, cls: string) => {\n  if (!el || !cls.trim()) return\n  el.classList.remove(...classNameToArray(cls))\n}\n\nexport const getStyle = (\n  element: HTMLElement,\n  styleName: keyof CSSProperties\n): string => {\n  if (!isClient || !element || !styleName) return ''\n\n  let key = camelize(styleName)\n  if (key === 'float') key = 'cssFloat'\n  try {\n    const style = (element.style as any)[key]\n    if (style) return style\n    const computed: any = document.defaultView?.getComputedStyle(element, '')\n    return computed ? computed[key] : ''\n  } catch {\n    return (element.style as any)[key]\n  }\n}\n\nexport const setStyle = (\n  element: HTMLElement,\n  styleName: CSSProperties | keyof CSSProperties,\n  value?: string | number\n) => {\n  if (!element || !styleName) return\n\n  if (isObject(styleName)) {\n    entriesOf(styleName).forEach(([prop, value]) =>\n      setStyle(element, prop, value)\n    )\n  } else {\n    const key: any = camelize(styleName)\n    element.style[key] = value as any\n  }\n}\n\nexport const removeStyle = (\n  element: HTMLElement,\n  style: CSSProperties | keyof CSSProperties\n) => {\n  if (!element || !style) return\n\n  if (isObject(style)) {\n    keysOf(style).forEach((prop) => removeStyle(element, prop))\n  } else {\n    setStyle(element, style, '')\n  }\n}\n\nexport function addUnit(value?: string | number, defaultUnit = 'px') {\n  if (!value) return ''\n  if (isNumber(value) || isStringNumber(value)) {\n    return `${value}${defaultUnit}`\n  } else if (isString(value)) {\n    return value\n  }\n  debugWarn(SCOPE, 'binding value must be a string or number')\n}\n\nexport function addNumber(num1: number, num2: number) {\n  const cardinal = 10 ** 10\n  return Math.round((num1 + num2) * cardinal) / cardinal\n}\n\nexport function unitToPx(value: Numeric): number {\n  if (typeof value === 'number') {\n    return value\n  }\n\n  if (inBrowser) {\n    if (value.includes('rem')) {\n      return convertRem(value)\n    }\n    if (value.includes('vw')) {\n      return convertVw(value)\n    }\n    if (value.includes('vh')) {\n      return convertVh(value)\n    }\n  }\n\n  return Number.parseFloat(value)\n}\n\nfunction convertRem(value: string) {\n  value = value.replace(/rem/g, '')\n  return +value * getRootFontSize()\n}\n\nfunction convertVw(value: string) {\n  value = value.replace(/vw/g, '')\n  return (+value * windowWidth.value) / 100\n}\n\nfunction convertVh(value: string) {\n  value = value.replace(/vh/g, '')\n  return (+value * windowHeight.value) / 100\n}\n\n// cache\nlet rootFontSize: number\n\nfunction getRootFontSize() {\n  if (!rootFontSize) {\n    const doc = document.documentElement\n    const fontSize = doc.style.fontSize || window.getComputedStyle(doc).fontSize\n\n    rootFontSize = Number.parseFloat(fontSize)\n  }\n\n  return rootFontSize\n}\n"],"names":["value"],"mappings":"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"}