{
  "version": 3,
  "sources": ["../../src/unit-control/utils.ts"],
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\nconst isWeb = Platform.OS === 'web';\nconst allUnits = {\n  px: {\n    value: 'px',\n    label: isWeb ? 'px' : __('Pixels (px)'),\n    a11yLabel: __('Pixels (px)'),\n    step: 1\n  },\n  '%': {\n    value: '%',\n    label: isWeb ? '%' : __('Percentage (%)'),\n    a11yLabel: __('Percent (%)'),\n    step: 0.1\n  },\n  em: {\n    value: 'em',\n    label: isWeb ? 'em' : __('Relative to parent font size (em)'),\n    a11yLabel: _x('ems', 'Relative to parent font size (em)'),\n    step: 0.01\n  },\n  rem: {\n    value: 'rem',\n    label: isWeb ? 'rem' : __('Relative to root font size (rem)'),\n    a11yLabel: _x('rems', 'Relative to root font size (rem)'),\n    step: 0.01\n  },\n  vw: {\n    value: 'vw',\n    label: isWeb ? 'vw' : __('Viewport width (vw)'),\n    a11yLabel: __('Viewport width (vw)'),\n    step: 0.1\n  },\n  vh: {\n    value: 'vh',\n    label: isWeb ? 'vh' : __('Viewport height (vh)'),\n    a11yLabel: __('Viewport height (vh)'),\n    step: 0.1\n  },\n  vmin: {\n    value: 'vmin',\n    label: isWeb ? 'vmin' : __('Viewport smallest dimension (vmin)'),\n    a11yLabel: __('Viewport smallest dimension (vmin)'),\n    step: 0.1\n  },\n  vmax: {\n    value: 'vmax',\n    label: isWeb ? 'vmax' : __('Viewport largest dimension (vmax)'),\n    a11yLabel: __('Viewport largest dimension (vmax)'),\n    step: 0.1\n  },\n  ch: {\n    value: 'ch',\n    label: isWeb ? 'ch' : __('Width of the zero (0) character (ch)'),\n    a11yLabel: __('Width of the zero (0) character (ch)'),\n    step: 0.01\n  },\n  ex: {\n    value: 'ex',\n    label: isWeb ? 'ex' : __('x-height of the font (ex)'),\n    a11yLabel: __('x-height of the font (ex)'),\n    step: 0.01\n  },\n  cm: {\n    value: 'cm',\n    label: isWeb ? 'cm' : __('Centimeters (cm)'),\n    a11yLabel: __('Centimeters (cm)'),\n    step: 0.001\n  },\n  mm: {\n    value: 'mm',\n    label: isWeb ? 'mm' : __('Millimeters (mm)'),\n    a11yLabel: __('Millimeters (mm)'),\n    step: 0.1\n  },\n  in: {\n    value: 'in',\n    label: isWeb ? 'in' : __('Inches (in)'),\n    a11yLabel: __('Inches (in)'),\n    step: 0.001\n  },\n  pc: {\n    value: 'pc',\n    label: isWeb ? 'pc' : __('Picas (pc)'),\n    a11yLabel: __('Picas (pc)'),\n    step: 1\n  },\n  pt: {\n    value: 'pt',\n    label: isWeb ? 'pt' : __('Points (pt)'),\n    a11yLabel: __('Points (pt)'),\n    step: 1\n  },\n  svw: {\n    value: 'svw',\n    label: isWeb ? 'svw' : __('Small viewport width (svw)'),\n    a11yLabel: __('Small viewport width (svw)'),\n    step: 0.1\n  },\n  svh: {\n    value: 'svh',\n    label: isWeb ? 'svh' : __('Small viewport height (svh)'),\n    a11yLabel: __('Small viewport height (svh)'),\n    step: 0.1\n  },\n  svi: {\n    value: 'svi',\n    label: isWeb ? 'svi' : __('Viewport smallest size in the inline direction (svi)'),\n    a11yLabel: __('Small viewport width or height (svi)'),\n    step: 0.1\n  },\n  svb: {\n    value: 'svb',\n    label: isWeb ? 'svb' : __('Viewport smallest size in the block direction (svb)'),\n    a11yLabel: __('Small viewport width or height (svb)'),\n    step: 0.1\n  },\n  svmin: {\n    value: 'svmin',\n    label: isWeb ? 'svmin' : __('Small viewport smallest dimension (svmin)'),\n    a11yLabel: __('Small viewport smallest dimension (svmin)'),\n    step: 0.1\n  },\n  lvw: {\n    value: 'lvw',\n    label: isWeb ? 'lvw' : __('Large viewport width (lvw)'),\n    a11yLabel: __('Large viewport width (lvw)'),\n    step: 0.1\n  },\n  lvh: {\n    value: 'lvh',\n    label: isWeb ? 'lvh' : __('Large viewport height (lvh)'),\n    a11yLabel: __('Large viewport height (lvh)'),\n    step: 0.1\n  },\n  lvi: {\n    value: 'lvi',\n    label: isWeb ? 'lvi' : __('Large viewport width or height (lvi)'),\n    a11yLabel: __('Large viewport width or height (lvi)'),\n    step: 0.1\n  },\n  lvb: {\n    value: 'lvb',\n    label: isWeb ? 'lvb' : __('Large viewport width or height (lvb)'),\n    a11yLabel: __('Large viewport width or height (lvb)'),\n    step: 0.1\n  },\n  lvmin: {\n    value: 'lvmin',\n    label: isWeb ? 'lvmin' : __('Large viewport smallest dimension (lvmin)'),\n    a11yLabel: __('Large viewport smallest dimension (lvmin)'),\n    step: 0.1\n  },\n  dvw: {\n    value: 'dvw',\n    label: isWeb ? 'dvw' : __('Dynamic viewport width (dvw)'),\n    a11yLabel: __('Dynamic viewport width (dvw)'),\n    step: 0.1\n  },\n  dvh: {\n    value: 'dvh',\n    label: isWeb ? 'dvh' : __('Dynamic viewport height (dvh)'),\n    a11yLabel: __('Dynamic viewport height (dvh)'),\n    step: 0.1\n  },\n  dvi: {\n    value: 'dvi',\n    label: isWeb ? 'dvi' : __('Dynamic viewport width or height (dvi)'),\n    a11yLabel: __('Dynamic viewport width or height (dvi)'),\n    step: 0.1\n  },\n  dvb: {\n    value: 'dvb',\n    label: isWeb ? 'dvb' : __('Dynamic viewport width or height (dvb)'),\n    a11yLabel: __('Dynamic viewport width or height (dvb)'),\n    step: 0.1\n  },\n  dvmin: {\n    value: 'dvmin',\n    label: isWeb ? 'dvmin' : __('Dynamic viewport smallest dimension (dvmin)'),\n    a11yLabel: __('Dynamic viewport smallest dimension (dvmin)'),\n    step: 0.1\n  },\n  dvmax: {\n    value: 'dvmax',\n    label: isWeb ? 'dvmax' : __('Dynamic viewport largest dimension (dvmax)'),\n    a11yLabel: __('Dynamic viewport largest dimension (dvmax)'),\n    step: 0.1\n  },\n  svmax: {\n    value: 'svmax',\n    label: isWeb ? 'svmax' : __('Small viewport largest dimension (svmax)'),\n    a11yLabel: __('Small viewport largest dimension (svmax)'),\n    step: 0.1\n  },\n  lvmax: {\n    value: 'lvmax',\n    label: isWeb ? 'lvmax' : __('Large viewport largest dimension (lvmax)'),\n    a11yLabel: __('Large viewport largest dimension (lvmax)'),\n    step: 0.1\n  }\n};\n\n/**\n * An array of all available CSS length units.\n */\nexport const ALL_CSS_UNITS = Object.values(allUnits);\n\n/**\n * Units of measurements. `a11yLabel` is used by screenreaders.\n */\nexport const CSS_UNITS = [allUnits.px, allUnits['%'], allUnits.em, allUnits.rem, allUnits.vw, allUnits.vh];\nexport const DEFAULT_UNIT = allUnits.px;\n\n/**\n * Handles legacy value + unit handling.\n * This component use to manage both incoming value and units separately.\n *\n * Moving forward, ideally the value should be a string that contains both\n * the value and unit, example: '10px'\n *\n * @param rawValue     The raw value as a string (may or may not contain the unit)\n * @param fallbackUnit The unit used as a fallback, if not unit is detected in the `value`\n * @param allowedUnits Units to derive from.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly. The unit can be `undefined` in case the unit parse\n * from the raw value could not be matched against the list of allowed units.\n */\nexport function getParsedQuantityAndUnit(rawValue, fallbackUnit, allowedUnits) {\n  const initialValue = fallbackUnit ? `${rawValue ?? ''}${fallbackUnit}` : rawValue;\n  return parseQuantityAndUnitFromRawValue(initialValue, allowedUnits);\n}\n\n/**\n * Checks if units are defined.\n *\n * @param units List of units.\n * @return Whether the list actually contains any units.\n */\nexport function hasUnits(units) {\n  // Although the `isArray` check shouldn't be necessary (given the signature of\n  // this typed function), it's better to stay on the side of caution, since\n  // this function may be called from un-typed environments.\n  return Array.isArray(units) && !!units.length;\n}\n\n/**\n * Parses a quantity and unit from a raw string value, given a list of allowed\n * units and otherwise falling back to the default unit.\n *\n * @param rawValue     The raw value as a string (may or may not contain the unit)\n * @param allowedUnits Units to derive from.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly. The unit can be `undefined` in case the unit parsed\n * from the raw value could not be matched against the list of allowed units.\n */\nexport function parseQuantityAndUnitFromRawValue(rawValue, allowedUnits = ALL_CSS_UNITS) {\n  let trimmedValue;\n  let quantityToReturn;\n  if (typeof rawValue !== 'undefined' || rawValue === null) {\n    trimmedValue = `${rawValue}`.trim();\n    const parsedQuantity = parseFloat(trimmedValue);\n    quantityToReturn = !isFinite(parsedQuantity) ? undefined : parsedQuantity;\n  }\n  const unitMatch = trimmedValue?.match(/[\\d.\\-\\+]*\\s*(.*)/);\n  const matchedUnit = unitMatch?.[1]?.toLowerCase();\n  let unitToReturn;\n  if (hasUnits(allowedUnits)) {\n    const match = allowedUnits.find(item => item.value === matchedUnit);\n    unitToReturn = match?.value;\n  } else {\n    unitToReturn = DEFAULT_UNIT.value;\n  }\n  return [quantityToReturn, unitToReturn];\n}\n\n/**\n * Parses quantity and unit from a raw value. Validates parsed value, using fallback\n * value if invalid.\n *\n * @param rawValue         The next value.\n * @param allowedUnits     Units to derive from.\n * @param fallbackQuantity The fallback quantity, used in case it's not possible to parse a valid quantity from the raw value.\n * @param fallbackUnit     The fallback unit, used in case it's not possible to parse a valid unit from the raw value.\n * @return The extracted quantity and unit. The quantity can be `undefined` in case the raw value\n * could not be parsed to a number correctly, and the `fallbackQuantity` was also `undefined`. The\n * unit can be `undefined` only if the unit parsed from the raw value could not be matched against\n * the list of allowed units, the `fallbackQuantity` is also `undefined` and the list of\n * `allowedUnits` is passed empty.\n */\nexport function getValidParsedQuantityAndUnit(rawValue, allowedUnits, fallbackQuantity, fallbackUnit) {\n  const [parsedQuantity, parsedUnit] = parseQuantityAndUnitFromRawValue(rawValue, allowedUnits);\n\n  // The parsed value from `parseQuantityAndUnitFromRawValue` should now be\n  // either a real number or undefined. If undefined, use the fallback value.\n  const quantityToReturn = parsedQuantity ?? fallbackQuantity;\n\n  // If no unit is parsed from the raw value, or if the fallback unit is not\n  // defined, use the first value from the list of allowed units as fallback.\n  let unitToReturn = parsedUnit || fallbackUnit;\n  if (!unitToReturn && hasUnits(allowedUnits)) {\n    unitToReturn = allowedUnits[0].value;\n  }\n  return [quantityToReturn, unitToReturn];\n}\n\n/**\n * Takes a unit value and finds the matching accessibility label for the\n * unit abbreviation.\n *\n * @param unit Unit value (example: `px`)\n * @return a11y label for the unit abbreviation\n */\nexport function getAccessibleLabelForUnit(unit) {\n  const match = ALL_CSS_UNITS.find(item => item.value === unit);\n  return match?.a11yLabel ? match?.a11yLabel : match?.value;\n}\n\n/**\n * Filters available units based on values defined a list of allowed unit values.\n *\n * @param allowedUnitValues Collection of allowed unit value strings.\n * @param availableUnits    Collection of available unit objects.\n * @return Filtered units.\n */\nexport function filterUnitsWithSettings(allowedUnitValues = [], availableUnits) {\n  // Although the `isArray` check shouldn't be necessary (given the signature of\n  // this typed function), it's better to stay on the side of caution, since\n  // this function may be called from un-typed environments.\n  return Array.isArray(availableUnits) ? availableUnits.filter(unit => allowedUnitValues.includes(unit.value)) : [];\n}\n\n/**\n * Custom hook to retrieve and consolidate units setting from add_theme_support().\n * TODO: ideally this hook shouldn't be needed\n * https://github.com/WordPress/gutenberg/pull/31822#discussion_r633280823\n *\n * @param args                An object containing units, settingPath & defaultUnits.\n * @param args.units          Collection of all potentially available units.\n * @param args.availableUnits Collection of unit value strings for filtering available units.\n * @param args.defaultValues  Collection of default values for defined units. Example: `{ px: 350, em: 15 }`.\n *\n * @return Filtered list of units, with their default values updated following the `defaultValues`\n * argument's property.\n */\nexport const useCustomUnits = ({\n  units = ALL_CSS_UNITS,\n  availableUnits = [],\n  defaultValues\n}) => {\n  const customUnitsToReturn = filterUnitsWithSettings(availableUnits, units);\n  if (!defaultValues) {\n    return customUnitsToReturn;\n  }\n  return customUnitsToReturn.map(unit => {\n    const [defaultValue] = defaultValues[unit.value] ? parseQuantityAndUnitFromRawValue(defaultValues[unit.value]) : [];\n    return {\n      ...unit,\n      default: defaultValue\n    };\n  });\n};\n\n/**\n * Get available units with the unit for the currently selected value\n * prepended if it is not available in the list of units.\n *\n * This is useful to ensure that the current value's unit is always\n * accurately displayed in the UI, even if the intention is to hide\n * the availability of that unit.\n *\n * @param rawValue   Selected value to parse.\n * @param legacyUnit Legacy unit value, if rawValue needs it appended.\n * @param units      List of available units.\n *\n * @return A collection of units containing the unit for the current value.\n */\nexport function getUnitsWithCurrentUnit(rawValue, legacyUnit, units = ALL_CSS_UNITS) {\n  const unitsToReturn = Array.isArray(units) ? [...units] : [];\n  const [, currentUnit] = getParsedQuantityAndUnit(rawValue, legacyUnit, ALL_CSS_UNITS);\n  if (currentUnit && !unitsToReturn.some(unit => unit.value === currentUnit)) {\n    if (allUnits[currentUnit]) {\n      unitsToReturn.unshift(allUnits[currentUnit]);\n    }\n  }\n  return unitsToReturn;\n}"],
  "mappings": "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",
  "names": []
}
