{
  "version": 3,
  "sources": ["../../src/box-control/utils.ts"],
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\n\nimport deprecated from '@wordpress/deprecated';\nexport const CUSTOM_VALUE_SETTINGS = {\n  px: {\n    max: 300,\n    step: 1\n  },\n  '%': {\n    max: 100,\n    step: 1\n  },\n  vw: {\n    max: 100,\n    step: 1\n  },\n  vh: {\n    max: 100,\n    step: 1\n  },\n  em: {\n    max: 10,\n    step: 0.1\n  },\n  rm: {\n    max: 10,\n    step: 0.1\n  },\n  svw: {\n    max: 100,\n    step: 1\n  },\n  lvw: {\n    max: 100,\n    step: 1\n  },\n  dvw: {\n    max: 100,\n    step: 1\n  },\n  svh: {\n    max: 100,\n    step: 1\n  },\n  lvh: {\n    max: 100,\n    step: 1\n  },\n  dvh: {\n    max: 100,\n    step: 1\n  },\n  vi: {\n    max: 100,\n    step: 1\n  },\n  svi: {\n    max: 100,\n    step: 1\n  },\n  lvi: {\n    max: 100,\n    step: 1\n  },\n  dvi: {\n    max: 100,\n    step: 1\n  },\n  vb: {\n    max: 100,\n    step: 1\n  },\n  svb: {\n    max: 100,\n    step: 1\n  },\n  lvb: {\n    max: 100,\n    step: 1\n  },\n  dvb: {\n    max: 100,\n    step: 1\n  },\n  vmin: {\n    max: 100,\n    step: 1\n  },\n  svmin: {\n    max: 100,\n    step: 1\n  },\n  lvmin: {\n    max: 100,\n    step: 1\n  },\n  dvmin: {\n    max: 100,\n    step: 1\n  },\n  vmax: {\n    max: 100,\n    step: 1\n  },\n  svmax: {\n    max: 100,\n    step: 1\n  },\n  lvmax: {\n    max: 100,\n    step: 1\n  },\n  dvmax: {\n    max: 100,\n    step: 1\n  }\n};\nexport const LABELS = {\n  all: __('All sides'),\n  top: __('Top side'),\n  bottom: __('Bottom side'),\n  left: __('Left side'),\n  right: __('Right side'),\n  vertical: __('Top and bottom sides'),\n  horizontal: __('Left and right sides')\n};\nexport const DEFAULT_VALUES = {\n  top: undefined,\n  right: undefined,\n  bottom: undefined,\n  left: undefined\n};\nexport const ALL_SIDES = ['top', 'right', 'bottom', 'left'];\n\n/**\n * Gets an items with the most occurrence within an array\n * https://stackoverflow.com/a/20762713\n *\n * @param arr Array of items to check.\n * @return The item with the most occurrences.\n */\nfunction mode(arr) {\n  return arr.sort((a, b) => arr.filter(v => v === a).length - arr.filter(v => v === b).length).pop();\n}\n\n/**\n * Gets the merged input value and unit from values data.\n *\n * @param values         Box values.\n * @param availableSides Available box sides to evaluate.\n *\n * @return A value + unit for the 'all' input.\n */\nexport function getMergedValue(values = {}, availableSides = ALL_SIDES) {\n  const sides = normalizeSides(availableSides);\n  if (sides.every(side => values[side] === values[sides[0]])) {\n    return values[sides[0]];\n  }\n  return undefined;\n}\n\n/**\n * Checks if the values are mixed.\n *\n * @param values         Box values.\n * @param availableSides Available box sides to evaluate.\n * @return Whether the values are mixed.\n */\nexport function isValueMixed(values = {}, availableSides = ALL_SIDES) {\n  const sides = normalizeSides(availableSides);\n  return sides.some(side => values[side] !== values[sides[0]]);\n}\n\n/**\n * Determine the most common unit selection to use as a fallback option.\n *\n * @param selectedUnits Current unit selections for individual sides.\n * @return  Most common unit selection.\n */\nexport function getAllUnitFallback(selectedUnits) {\n  if (!selectedUnits || typeof selectedUnits !== 'object') {\n    return undefined;\n  }\n  const filteredUnits = Object.values(selectedUnits).filter(Boolean);\n  return mode(filteredUnits);\n}\n\n/**\n * Checks to determine if values are defined.\n *\n * @param values Box values.\n *\n * @return  Whether values are mixed.\n */\nexport function isValuesDefined(values) {\n  return values && Object.values(values).filter(\n  // Switching units when input is empty causes values only\n  // containing units. This gives false positive on mixed values\n  // unless filtered.\n  value => !!value && /\\d/.test(value)).length > 0;\n}\n\n/**\n * Get initial selected side, factoring in whether the sides are linked,\n * and whether the vertical / horizontal directions are grouped via splitOnAxis.\n *\n * @param isLinked    Whether the box control's fields are linked.\n * @param splitOnAxis Whether splitting by horizontal or vertical axis.\n * @return The initial side.\n */\nexport function getInitialSide(isLinked, splitOnAxis) {\n  let initialSide = 'all';\n  if (!isLinked) {\n    initialSide = splitOnAxis ? 'vertical' : 'top';\n  }\n  return initialSide;\n}\n\n/**\n * Normalizes provided sides configuration to an array containing only top,\n * right, bottom and left. This essentially just maps `horizontal` or `vertical`\n * to their appropriate sides to facilitate correctly determining value for\n * all input control.\n *\n * @param sides Available sides for box control.\n * @return Normalized sides configuration.\n */\nexport function normalizeSides(sides) {\n  const filteredSides = [];\n  if (!sides?.length) {\n    return ALL_SIDES;\n  }\n  if (sides.includes('vertical')) {\n    filteredSides.push(...['top', 'bottom']);\n  } else if (sides.includes('horizontal')) {\n    filteredSides.push(...['left', 'right']);\n  } else {\n    const newSides = ALL_SIDES.filter(side => sides.includes(side));\n    filteredSides.push(...newSides);\n  }\n  return filteredSides;\n}\n\n/**\n * Applies a value to an object representing top, right, bottom and left sides\n * while taking into account any custom side configuration.\n *\n * @deprecated\n *\n * @param currentValues The current values for each side.\n * @param newValue      The value to apply to the sides object.\n * @param sides         Array defining valid sides.\n *\n * @return Object containing the updated values for each side.\n */\nexport function applyValueToSides(currentValues, newValue, sides) {\n  deprecated('applyValueToSides', {\n    since: '6.8',\n    version: '7.0'\n  });\n  const newValues = {\n    ...currentValues\n  };\n  if (sides?.length) {\n    sides.forEach(side => {\n      if (side === 'vertical') {\n        newValues.top = newValue;\n        newValues.bottom = newValue;\n      } else if (side === 'horizontal') {\n        newValues.left = newValue;\n        newValues.right = newValue;\n      } else {\n        newValues[side] = newValue;\n      }\n    });\n  } else {\n    ALL_SIDES.forEach(side => newValues[side] = newValue);\n  }\n  return newValues;\n}\n\n/**\n * Return the allowed sides based on the sides configuration.\n *\n * @param sides Sides configuration.\n * @return Allowed sides.\n */\nexport function getAllowedSides(sides) {\n  const allowedSides = new Set(!sides ? ALL_SIDES : []);\n  sides?.forEach(allowedSide => {\n    if (allowedSide === 'vertical') {\n      allowedSides.add('top');\n      allowedSides.add('bottom');\n    } else if (allowedSide === 'horizontal') {\n      allowedSides.add('right');\n      allowedSides.add('left');\n    } else {\n      allowedSides.add(allowedSide);\n    }\n  });\n  return allowedSides;\n}\n\n/**\n * Checks if a value is a preset value.\n *\n * @param value     The value to check.\n * @param presetKey The preset key to check against.\n * @return Whether the value is a preset value.\n */\nexport function isValuePreset(value, presetKey) {\n  return value.startsWith(`var:preset|${presetKey}|`);\n}\n\n/**\n * Returns the index of the preset value in the presets array.\n *\n * @param value     The value to check.\n * @param presetKey The preset key to check against.\n * @param presets   The array of presets to search.\n * @return The index of the preset value in the presets array.\n */\nexport function getPresetIndexFromValue(value, presetKey, presets) {\n  if (!isValuePreset(value, presetKey)) {\n    return undefined;\n  }\n  const match = value.match(new RegExp(`^var:preset\\\\|${presetKey}\\\\|(.+)$`));\n  if (!match) {\n    return undefined;\n  }\n  const slug = match[1];\n  const index = presets.findIndex(preset => {\n    return preset.slug === slug;\n  });\n  return index !== -1 ? index : undefined;\n}\n\n/**\n * Returns the preset value from the index.\n *\n * @param index     The index of the preset value in the presets array.\n * @param presetKey The preset key to check against.\n * @param presets   The array of presets to search.\n * @return The preset value from the index.\n */\nexport function getPresetValueFromIndex(index, presetKey, presets) {\n  const preset = presets[index];\n  return `var:preset|${presetKey}|${preset.slug}`;\n}"],
  "mappings": "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",
  "names": ["deprecated"]
}
