UNPKG

@wordpress/block-editor

Version:
8 lines (7 loc) 8.52 kB
{ "version": 3, "sources": ["../../src/utils/get-font-styles-and-weights.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { _x, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { formatFontStyle } from './format-font-style';\nimport { formatFontWeight } from './format-font-weight';\n\nconst FONT_STYLES = [\n\t{\n\t\tname: _x( 'Regular', 'font style' ),\n\t\tvalue: 'normal',\n\t},\n\t{\n\t\tname: _x( 'Italic', 'font style' ),\n\t\tvalue: 'italic',\n\t},\n];\n\nconst FONT_WEIGHTS = [\n\t{\n\t\tname: _x( 'Thin', 'font weight' ),\n\t\tvalue: '100',\n\t},\n\t{\n\t\tname: _x( 'Extra Light', 'font weight' ),\n\t\tvalue: '200',\n\t},\n\t{\n\t\tname: _x( 'Light', 'font weight' ),\n\t\tvalue: '300',\n\t},\n\t{\n\t\tname: _x( 'Regular', 'font weight' ),\n\t\tvalue: '400',\n\t},\n\t{\n\t\tname: _x( 'Medium', 'font weight' ),\n\t\tvalue: '500',\n\t},\n\t{\n\t\tname: _x( 'Semi Bold', 'font weight' ),\n\t\tvalue: '600',\n\t},\n\t{\n\t\tname: _x( 'Bold', 'font weight' ),\n\t\tvalue: '700',\n\t},\n\t{\n\t\tname: _x( 'Extra Bold', 'font weight' ),\n\t\tvalue: '800',\n\t},\n\t{\n\t\tname: _x( 'Black', 'font weight' ),\n\t\tvalue: '900',\n\t},\n\t{\n\t\tname: _x( 'Extra Black', 'font weight' ),\n\t\tvalue: '1000',\n\t},\n];\n\n/**\n * Builds a list of font style and weight options based on font family faces.\n * Defaults to the standard font styles and weights if no font family faces are provided.\n *\n * @param {Array} fontFamilyFaces font family faces array\n * @return {Object} new object with combined and separated font style and weight properties\n */\nexport function getFontStylesAndWeights( fontFamilyFaces ) {\n\tlet fontStyles = [];\n\tlet fontWeights = [];\n\tconst combinedStyleAndWeightOptions = [];\n\tconst isSystemFont = ! fontFamilyFaces || fontFamilyFaces?.length === 0;\n\tlet isVariableFont = false;\n\n\tfontFamilyFaces?.forEach( ( face ) => {\n\t\t// Check for variable font by looking for a space in the font weight value. e.g. \"100 900\"\n\t\tif (\n\t\t\t'string' === typeof face.fontWeight &&\n\t\t\t/\\s/.test( face.fontWeight.trim() )\n\t\t) {\n\t\t\tisVariableFont = true;\n\n\t\t\t// Find font weight start and end values.\n\t\t\tlet [ startValue, endValue ] = face.fontWeight.split( ' ' );\n\t\t\tstartValue = parseInt( startValue.slice( 0, 1 ) );\n\t\t\tif ( endValue === '1000' ) {\n\t\t\t\tendValue = 10;\n\t\t\t} else {\n\t\t\t\tendValue = parseInt( endValue.slice( 0, 1 ) );\n\t\t\t}\n\n\t\t\t// Create font weight options for available variable weights.\n\t\t\tfor ( let i = startValue; i <= endValue; i++ ) {\n\t\t\t\tconst fontWeightValue = `${ i.toString() }00`;\n\t\t\t\tif (\n\t\t\t\t\t! fontWeights.some(\n\t\t\t\t\t\t( weight ) => weight.value === fontWeightValue\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tfontWeights.push( formatFontWeight( fontWeightValue ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Format font style and weight values.\n\t\tconst fontWeight = formatFontWeight(\n\t\t\t'number' === typeof face.fontWeight\n\t\t\t\t? face.fontWeight.toString()\n\t\t\t\t: face.fontWeight\n\t\t);\n\t\tconst fontStyle = formatFontStyle( face.fontStyle );\n\n\t\t// Create font style and font weight lists without duplicates.\n\t\tif ( fontStyle && Object.keys( fontStyle ).length ) {\n\t\t\tif (\n\t\t\t\t! fontStyles.some(\n\t\t\t\t\t( style ) => style.value === fontStyle.value\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tfontStyles.push( fontStyle );\n\t\t\t}\n\t\t}\n\n\t\tif ( fontWeight && Object.keys( fontWeight ).length ) {\n\t\t\tif (\n\t\t\t\t! fontWeights.some(\n\t\t\t\t\t( weight ) => weight.value === fontWeight.value\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif ( ! isVariableFont ) {\n\t\t\t\t\tfontWeights.push( fontWeight );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\t// If there is no font weight of 600 or above, then include faux bold as an option.\n\tif ( ! fontWeights.some( ( weight ) => weight.value >= '600' ) ) {\n\t\tfontWeights.push( {\n\t\t\tname: _x( 'Bold', 'font weight' ),\n\t\t\tvalue: '700',\n\t\t} );\n\t}\n\n\t// If there is no italic font style, then include faux italic as an option.\n\tif ( ! fontStyles.some( ( style ) => style.value === 'italic' ) ) {\n\t\tfontStyles.push( {\n\t\t\tname: _x( 'Italic', 'font style' ),\n\t\t\tvalue: 'italic',\n\t\t} );\n\t}\n\n\t// Use default font styles and weights for system fonts.\n\tif ( isSystemFont ) {\n\t\tfontStyles = FONT_STYLES;\n\t\tfontWeights = FONT_WEIGHTS;\n\t}\n\n\t// Use default styles and weights if there are no available styles or weights from the provided font faces.\n\tfontStyles = fontStyles.length === 0 ? FONT_STYLES : fontStyles;\n\tfontWeights = fontWeights.length === 0 ? FONT_WEIGHTS : fontWeights;\n\n\t// Generate combined font style and weight options for available fonts.\n\tfontStyles.forEach( ( { name: styleName, value: styleValue } ) => {\n\t\tfontWeights.forEach( ( { name: weightName, value: weightValue } ) => {\n\t\t\tconst optionName =\n\t\t\t\tstyleValue === 'normal'\n\t\t\t\t\t? weightName\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t/* translators: 1: Font weight name. 2: Font style name. */\n\t\t\t\t\t\t\t_x( '%1$s %2$s', 'font' ),\n\t\t\t\t\t\t\tweightName,\n\t\t\t\t\t\t\tstyleName\n\t\t\t\t\t );\n\n\t\t\tcombinedStyleAndWeightOptions.push( {\n\t\t\t\tkey: `${ styleValue }-${ weightValue }`,\n\t\t\t\tname: optionName,\n\t\t\t\tstyle: {\n\t\t\t\t\tfontStyle: styleValue,\n\t\t\t\t\tfontWeight: weightValue,\n\t\t\t\t},\n\t\t\t} );\n\t\t} );\n\t} );\n\n\treturn {\n\t\tfontStyles,\n\t\tfontWeights,\n\t\tcombinedStyleAndWeightOptions,\n\t\tisSystemFont,\n\t\tisVariableFont,\n\t};\n}\n"], "mappings": "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", "names": [] }