{"version":3,"file":"legacyLogicalProperties.cjs","sources":["../../../../../../packages/theme/cssinjs/transformers/legacyLogicalProperties.ts"],"sourcesContent":["import type { CSSObject } from '..';\nimport type { Transformer } from './interface';\n\nfunction splitValues(value: string | number) {\n  if (typeof value === 'number')\n    return [value];\n\n  const splitStyle = String(value).split(/\\s+/);\n\n  // Combine styles split in brackets, like `calc(1px + 2px)`\n  let temp = '';\n  let brackets = 0;\n  return splitStyle.reduce<string[]>((list, item) => {\n    if (item.includes('(')) {\n      temp += item;\n      brackets += item.split('(').length - 1;\n    } else if (item.includes(')')) {\n      temp += ` ${item}`;\n      brackets -= item.split(')').length - 1;\n      if (brackets === 0) {\n        list.push(temp);\n        temp = '';\n      }\n    } else if (brackets > 0) {\n      temp += ` ${item}`;\n    } else {\n      list.push(item);\n    }\n    return list;\n  }, []);\n}\n\ntype MatchValue = string[] & {\n  notSplit?: boolean\n};\n\nfunction noSplit(list: MatchValue): MatchValue {\n  list.notSplit = true;\n  return list;\n}\n\nconst keyMap: Record<string, MatchValue> = {\n  // Inset\n  inset: ['top', 'right', 'bottom', 'left'],\n  insetBlock: ['top', 'bottom'],\n  insetBlockStart: ['top'],\n  insetBlockEnd: ['bottom'],\n  insetInline: ['left', 'right'],\n  insetInlineStart: ['left'],\n  insetInlineEnd: ['right'],\n\n  // Margin\n  marginBlock: ['marginTop', 'marginBottom'],\n  marginBlockStart: ['marginTop'],\n  marginBlockEnd: ['marginBottom'],\n  marginInline: ['marginLeft', 'marginRight'],\n  marginInlineStart: ['marginLeft'],\n  marginInlineEnd: ['marginRight'],\n\n  // Padding\n  paddingBlock: ['paddingTop', 'paddingBottom'],\n  paddingBlockStart: ['paddingTop'],\n  paddingBlockEnd: ['paddingBottom'],\n  paddingInline: ['paddingLeft', 'paddingRight'],\n  paddingInlineStart: ['paddingLeft'],\n  paddingInlineEnd: ['paddingRight'],\n\n  // Border\n  borderBlock: noSplit(['borderTop', 'borderBottom']),\n  borderBlockStart: noSplit(['borderTop']),\n  borderBlockEnd: noSplit(['borderBottom']),\n  borderInline: noSplit(['borderLeft', 'borderRight']),\n  borderInlineStart: noSplit(['borderLeft']),\n  borderInlineEnd: noSplit(['borderRight']),\n\n  // Border width\n  borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n  borderBlockStartWidth: ['borderTopWidth'],\n  borderBlockEndWidth: ['borderBottomWidth'],\n  borderInlineWidth: ['borderLeftWidth', 'borderRightWidth'],\n  borderInlineStartWidth: ['borderLeftWidth'],\n  borderInlineEndWidth: ['borderRightWidth'],\n\n  // Border style\n  borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n  borderBlockStartStyle: ['borderTopStyle'],\n  borderBlockEndStyle: ['borderBottomStyle'],\n  borderInlineStyle: ['borderLeftStyle', 'borderRightStyle'],\n  borderInlineStartStyle: ['borderLeftStyle'],\n  borderInlineEndStyle: ['borderRightStyle'],\n\n  // Border color\n  borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n  borderBlockStartColor: ['borderTopColor'],\n  borderBlockEndColor: ['borderBottomColor'],\n  borderInlineColor: ['borderLeftColor', 'borderRightColor'],\n  borderInlineStartColor: ['borderLeftColor'],\n  borderInlineEndColor: ['borderRightColor'],\n\n  // Border radius\n  borderStartStartRadius: ['borderTopLeftRadius'],\n  borderStartEndRadius: ['borderTopRightRadius'],\n  borderEndStartRadius: ['borderBottomLeftRadius'],\n  borderEndEndRadius: ['borderBottomRightRadius'],\n};\n\nfunction skipCheck(value: string | number) {\n  return { _skip_check_: true, value };\n}\n\n/**\n * Convert css logical properties to legacy properties.\n * Such as: `margin-block-start` to `margin-top`.\n * Transform list:\n * - inset\n * - margin\n * - padding\n * - border\n */\nconst transform: Transformer = {\n  visit: (cssObj) => {\n    const clone: CSSObject = {};\n\n    Object.keys(cssObj).forEach((key) => {\n      const value = cssObj[key];\n      const matchValue = keyMap[key];\n\n      if (matchValue && (typeof value === 'number' || typeof value === 'string')) {\n        const values = splitValues(value);\n\n        if (matchValue.length && matchValue.notSplit) {\n          // not split means always give same value like border\n          matchValue.forEach((matchKey) => {\n            clone[matchKey] = skipCheck(value);\n          });\n        } else if (matchValue.length === 1) {\n          // Handle like `marginBlockStart` => `marginTop`\n          clone[matchValue[0]] = skipCheck(value);\n        } else if (matchValue.length === 2) {\n          // Handle like `marginBlock` => `marginTop` & `marginBottom`\n          matchValue.forEach((matchKey, index) => {\n            clone[matchKey] = skipCheck(values[index] ?? values[0]);\n          });\n        } else if (matchValue.length === 4) {\n          // Handle like `inset` => `top` & `right` & `bottom` & `left`\n          matchValue.forEach((matchKey, index) => {\n            clone[matchKey] = skipCheck(values[index] ?? values[index - 2] ?? values[0]);\n          });\n        } else {\n          clone[key] = value;\n        }\n      } else {\n        clone[key] = value;\n      }\n    });\n\n    return clone;\n  },\n};\n\nexport default transform;\n"],"names":[],"mappings":";;;;AAGA,SAAS,YAAY,KAAwB,EAAA;AAC3C,EAAA,IAAI,OAAO,KAAU,KAAA,QAAA;AACnB,IAAA,OAAO,CAAC,KAAK,CAAA,CAAA;AAEf,EAAA,MAAM,UAAa,GAAA,MAAA,CAAO,KAAK,CAAA,CAAE,MAAM,KAAK,CAAA,CAAA;AAG5C,EAAA,IAAI,IAAO,GAAA,EAAA,CAAA;AACX,EAAA,IAAI,QAAW,GAAA,CAAA,CAAA;AACf,EAAA,OAAO,UAAW,CAAA,MAAA,CAAiB,CAAC,IAAA,EAAM,IAAS,KAAA;AACjD,IAAI,IAAA,IAAA,CAAK,QAAS,CAAA,GAAG,CAAG,EAAA;AACtB,MAAQ,IAAA,IAAA,IAAA,CAAA;AACR,MAAA,QAAA,IAAY,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,MAAS,GAAA,CAAA,CAAA;AAAA,KAC5B,MAAA,IAAA,IAAA,CAAK,QAAS,CAAA,GAAG,CAAG,EAAA;AAC7B,MAAA,IAAA,IAAQ,IAAI,IAAI,CAAA,CAAA,CAAA;AAChB,MAAA,QAAA,IAAY,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,MAAS,GAAA,CAAA,CAAA;AACrC,MAAA,IAAI,aAAa,CAAG,EAAA;AAClB,QAAA,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA;AACd,QAAO,IAAA,GAAA,EAAA,CAAA;AAAA,OACT;AAAA,KACF,MAAA,IAAW,WAAW,CAAG,EAAA;AACvB,MAAA,IAAA,IAAQ,IAAI,IAAI,CAAA,CAAA,CAAA;AAAA,KACX,MAAA;AACL,MAAA,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA;AAAA,KAChB;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT,EAAG,EAAE,CAAA,CAAA;AACP,CAAA;AAMA,SAAS,QAAQ,IAA8B,EAAA;AAC7C,EAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAChB,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEA,MAAM,MAAqC,GAAA;AAAA;AAAA,EAEzC,KAAO,EAAA,CAAC,KAAO,EAAA,OAAA,EAAS,UAAU,MAAM,CAAA;AAAA,EACxC,UAAA,EAAY,CAAC,KAAA,EAAO,QAAQ,CAAA;AAAA,EAC5B,eAAA,EAAiB,CAAC,KAAK,CAAA;AAAA,EACvB,aAAA,EAAe,CAAC,QAAQ,CAAA;AAAA,EACxB,WAAA,EAAa,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC7B,gBAAA,EAAkB,CAAC,MAAM,CAAA;AAAA,EACzB,cAAA,EAAgB,CAAC,OAAO,CAAA;AAAA;AAAA,EAGxB,WAAA,EAAa,CAAC,WAAA,EAAa,cAAc,CAAA;AAAA,EACzC,gBAAA,EAAkB,CAAC,WAAW,CAAA;AAAA,EAC9B,cAAA,EAAgB,CAAC,cAAc,CAAA;AAAA,EAC/B,YAAA,EAAc,CAAC,YAAA,EAAc,aAAa,CAAA;AAAA,EAC1C,iBAAA,EAAmB,CAAC,YAAY,CAAA;AAAA,EAChC,eAAA,EAAiB,CAAC,aAAa,CAAA;AAAA;AAAA,EAG/B,YAAA,EAAc,CAAC,YAAA,EAAc,eAAe,CAAA;AAAA,EAC5C,iBAAA,EAAmB,CAAC,YAAY,CAAA;AAAA,EAChC,eAAA,EAAiB,CAAC,eAAe,CAAA;AAAA,EACjC,aAAA,EAAe,CAAC,aAAA,EAAe,cAAc,CAAA;AAAA,EAC7C,kBAAA,EAAoB,CAAC,aAAa,CAAA;AAAA,EAClC,gBAAA,EAAkB,CAAC,cAAc,CAAA;AAAA;AAAA,EAGjC,WAAa,EAAA,OAAA,CAAQ,CAAC,WAAA,EAAa,cAAc,CAAC,CAAA;AAAA,EAClD,gBAAkB,EAAA,OAAA,CAAQ,CAAC,WAAW,CAAC,CAAA;AAAA,EACvC,cAAgB,EAAA,OAAA,CAAQ,CAAC,cAAc,CAAC,CAAA;AAAA,EACxC,YAAc,EAAA,OAAA,CAAQ,CAAC,YAAA,EAAc,aAAa,CAAC,CAAA;AAAA,EACnD,iBAAmB,EAAA,OAAA,CAAQ,CAAC,YAAY,CAAC,CAAA;AAAA,EACzC,eAAiB,EAAA,OAAA,CAAQ,CAAC,aAAa,CAAC,CAAA;AAAA;AAAA,EAGxC,gBAAA,EAAkB,CAAC,gBAAA,EAAkB,mBAAmB,CAAA;AAAA,EACxD,qBAAA,EAAuB,CAAC,gBAAgB,CAAA;AAAA,EACxC,mBAAA,EAAqB,CAAC,mBAAmB,CAAA;AAAA,EACzC,iBAAA,EAAmB,CAAC,iBAAA,EAAmB,kBAAkB,CAAA;AAAA,EACzD,sBAAA,EAAwB,CAAC,iBAAiB,CAAA;AAAA,EAC1C,oBAAA,EAAsB,CAAC,kBAAkB,CAAA;AAAA;AAAA,EAGzC,gBAAA,EAAkB,CAAC,gBAAA,EAAkB,mBAAmB,CAAA;AAAA,EACxD,qBAAA,EAAuB,CAAC,gBAAgB,CAAA;AAAA,EACxC,mBAAA,EAAqB,CAAC,mBAAmB,CAAA;AAAA,EACzC,iBAAA,EAAmB,CAAC,iBAAA,EAAmB,kBAAkB,CAAA;AAAA,EACzD,sBAAA,EAAwB,CAAC,iBAAiB,CAAA;AAAA,EAC1C,oBAAA,EAAsB,CAAC,kBAAkB,CAAA;AAAA;AAAA,EAGzC,gBAAA,EAAkB,CAAC,gBAAA,EAAkB,mBAAmB,CAAA;AAAA,EACxD,qBAAA,EAAuB,CAAC,gBAAgB,CAAA;AAAA,EACxC,mBAAA,EAAqB,CAAC,mBAAmB,CAAA;AAAA,EACzC,iBAAA,EAAmB,CAAC,iBAAA,EAAmB,kBAAkB,CAAA;AAAA,EACzD,sBAAA,EAAwB,CAAC,iBAAiB,CAAA;AAAA,EAC1C,oBAAA,EAAsB,CAAC,kBAAkB,CAAA;AAAA;AAAA,EAGzC,sBAAA,EAAwB,CAAC,qBAAqB,CAAA;AAAA,EAC9C,oBAAA,EAAsB,CAAC,sBAAsB,CAAA;AAAA,EAC7C,oBAAA,EAAsB,CAAC,wBAAwB,CAAA;AAAA,EAC/C,kBAAA,EAAoB,CAAC,yBAAyB,CAAA;AAChD,CAAA,CAAA;AAEA,SAAS,UAAU,KAAwB,EAAA;AACzC,EAAO,OAAA,EAAE,YAAc,EAAA,IAAA,EAAM,KAAM,EAAA,CAAA;AACrC,CAAA;AAWA,MAAM,SAAyB,GAAA;AAAA,EAC7B,KAAA,EAAO,CAAC,MAAW,KAAA;AACjB,IAAA,MAAM,QAAmB,EAAC,CAAA;AAE1B,IAAA,MAAA,CAAO,IAAK,CAAA,MAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACnC,MAAM,MAAA,KAAA,GAAQ,OAAO,GAAG,CAAA,CAAA;AACxB,MAAM,MAAA,UAAA,GAAa,OAAO,GAAG,CAAA,CAAA;AAE7B,MAAA,IAAI,eAAe,OAAO,KAAA,KAAU,QAAY,IAAA,OAAO,UAAU,QAAW,CAAA,EAAA;AAC1E,QAAM,MAAA,MAAA,GAAS,YAAY,KAAK,CAAA,CAAA;AAEhC,QAAI,IAAA,UAAA,CAAW,MAAU,IAAA,UAAA,CAAW,QAAU,EAAA;AAE5C,UAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,QAAa,KAAA;AAC/B,YAAM,KAAA,CAAA,QAAQ,CAAI,GAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA,WAClC,CAAA,CAAA;AAAA,SACH,MAAA,IAAW,UAAW,CAAA,MAAA,KAAW,CAAG,EAAA;AAElC,UAAA,KAAA,CAAM,UAAW,CAAA,CAAC,CAAC,CAAA,GAAI,UAAU,KAAK,CAAA,CAAA;AAAA,SACxC,MAAA,IAAW,UAAW,CAAA,MAAA,KAAW,CAAG,EAAA;AAElC,UAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAU,KAAA;AA5IlD,YAAA,IAAA,EAAA,CAAA;AA6IY,YAAM,KAAA,CAAA,QAAQ,IAAI,SAAU,CAAA,CAAA,EAAA,GAAA,MAAA,CAAO,KAAK,CAAZ,KAAA,IAAA,GAAA,EAAA,GAAiB,MAAO,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,WACvD,CAAA,CAAA;AAAA,SACH,MAAA,IAAW,UAAW,CAAA,MAAA,KAAW,CAAG,EAAA;AAElC,UAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAU,KAAA;AAjJlD,YAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAkJY,YAAA,KAAA,CAAM,QAAQ,CAAA,GAAI,SAAU,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,KAAK,CAAZ,KAAA,IAAA,GAAA,EAAA,GAAiB,MAAO,CAAA,KAAA,GAAQ,CAAC,CAAA,KAAjC,IAAsC,GAAA,EAAA,GAAA,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAAA,WAC5E,CAAA,CAAA;AAAA,SACI,MAAA;AACL,UAAA,KAAA,CAAM,GAAG,CAAI,GAAA,KAAA,CAAA;AAAA,SACf;AAAA,OACK,MAAA;AACL,QAAA,KAAA,CAAM,GAAG,CAAI,GAAA,KAAA,CAAA;AAAA,OACf;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF;;;;"}