{"version":3,"file":"style.mjs","sources":["../../../../../packages/utils/dom/style.ts"],"sourcesContent":["import { isNumber, isObject, isString, isStringNumber } from '../types'\nimport { isClient } from '../browser'\nimport { camelize } from '../strings'\nimport { entriesOf, keysOf } from '../objects'\nimport { debugWarn } from '../error'\nimport type { CSSProperties } from 'vue'\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"],"names":["classNameToArray","r","split","filter","t","trim","hasClass","includes","Error","classList","contains","addClass","add","removeClass","remove","getStyle","o","p","e","f","s","style","i","document","defaultView","getComputedStyle","setStyle","n","u","forEach","removeStyle","S","addUnit","a","m","c","y"],"mappings":"qTAAwP,MAAuCA,EAAiB,CAACC,EAAE,KAAKA,EAAEC,MAAM,KAAKC,QAAOC,KAAKA,EAAEC,SAAQC,EAAS,CAACL,EAAEG,KAAK,IAAIH,IAAIG,EAAE,OAAM,EAAG,GAAGA,EAAEG,SAAS,KAAK,MAAM,IAAIC,MAAM,uCAAuC,OAAOP,EAAEQ,UAAUC,SAASN,IAAIO,EAAS,CAACV,EAAEG,MAAMH,IAAIG,EAAEC,QAAQJ,EAAEQ,UAAUG,OAAOZ,EAAiBI,KAAKS,EAAY,CAACZ,EAAEG,MAAMH,IAAIG,EAAEC,QAAQJ,EAAEQ,UAAUK,UAAUd,EAAiBI,KAAKW,EAAS,CAACd,EAAEG,KAAK,IAAIY,EAAE,IAAIC,IAAIhB,IAAIG,EAAE,MAAM,GAAG,IAAIc,EAAEC,EAAEf,GAAO,UAAJc,IAAcA,EAAE,YAAY,IAAI,MAAME,EAAEnB,EAAEoB,MAAMH,GAAG,GAAGE,EAAE,OAAOA,EAAE,MAAME,EAA4B,OAAzBN,EAAEO,SAASC,kBAAmB,EAAOR,EAAES,iBAAiBxB,EAAE,IAAI,OAAOqB,EAAEA,EAAEJ,GAAG,EAAE,CAAC,MAAME,GAAG,OAAOnB,EAAEoB,MAAMH,EAAE,GAAGQ,EAAS,CAACzB,EAAEG,EAAEc,KAAK,GAAMjB,GAAIG,EAAG,GAAGuB,EAAEvB,GAAGwB,EAAExB,GAAGyB,SAAQ,EAAEb,EAAEI,KAAKM,EAASzB,EAAEe,EAAEI,SAAQ,CAAC,MAAMJ,EAAEG,EAAEf,GAAGH,EAAEoB,MAAML,GAAGE,CAAC,GAAGY,EAAY,CAAC7B,EAAEG,MAAMH,IAAIG,IAAIuB,EAAEvB,GAAG2B,EAAE3B,GAAGyB,SAAQX,GAAGY,EAAY7B,EAAEiB,KAAIQ,EAASzB,EAAEG,EAAE,MAAa,SAAS4B,EAAQ/B,EAAEG,EAAE,MAAM,OAAIH,EAAcgC,EAAEhC,IAAIiC,EAAEjC,GAAS,GAAGA,IAAIG,IAAO+B,EAAElC,GAAUA,OAAEmC,EAAx5B,kBAA45B,4CAAvD,EAAkG"}