123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- "use strict";
- exports.__esModule = true;
- exports["default"] = fontFace;
- var _errors = _interopRequireDefault(require("../internalHelpers/_errors"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
- var dataURIRegex = /^\s*data:([a-z]+\/[a-z-]+(;[a-z-]+=[a-z-]+)?)?(;charset=[a-z0-9-]+)?(;base64)?,[a-z0-9!$&',()*+,;=\-._~:@/?%\s]*\s*$/i;
- var formatHintMap = {
- woff: 'woff',
- woff2: 'woff2',
- ttf: 'truetype',
- otf: 'opentype',
- eot: 'embedded-opentype',
- svg: 'svg',
- svgz: 'svg'
- };
- function generateFormatHint(format, formatHint) {
- if (!formatHint) return '';
- return " format(\"" + formatHintMap[format] + "\")";
- }
- function isDataURI(fontFilePath) {
- return !!fontFilePath.replace(/\s+/g, ' ').match(dataURIRegex);
- }
- function generateFileReferences(fontFilePath, fileFormats, formatHint) {
- if (isDataURI(fontFilePath)) {
- return "url(\"" + fontFilePath + "\")" + generateFormatHint(fileFormats[0], formatHint);
- }
- var fileFontReferences = fileFormats.map(function (format) {
- return "url(\"" + fontFilePath + "." + format + "\")" + generateFormatHint(format, formatHint);
- });
- return fileFontReferences.join(', ');
- }
- function generateLocalReferences(localFonts) {
- var localFontReferences = localFonts.map(function (font) {
- return "local(\"" + font + "\")";
- });
- return localFontReferences.join(', ');
- }
- function generateSources(fontFilePath, localFonts, fileFormats, formatHint) {
- var fontReferences = [];
- if (localFonts) fontReferences.push(generateLocalReferences(localFonts));
- if (fontFilePath) {
- fontReferences.push(generateFileReferences(fontFilePath, fileFormats, formatHint));
- }
- return fontReferences.join(', ');
- }
- /**
- * CSS for a @font-face declaration. Defaults to check for local copies of the font on the user's machine. You can disable this by passing `null` to localFonts.
- *
- * @example
- * // Styles as object basic usage
- * const styles = {
- * ...fontFace({
- * 'fontFamily': 'Sans-Pro',
- * 'fontFilePath': 'path/to/file'
- * })
- * }
- *
- * // styled-components basic usage
- * const GlobalStyle = createGlobalStyle`${
- * fontFace({
- * 'fontFamily': 'Sans-Pro',
- * 'fontFilePath': 'path/to/file'
- * }
- * )}`
- *
- * // CSS as JS Output
- *
- * '@font-face': {
- * 'fontFamily': 'Sans-Pro',
- * 'src': 'url("path/to/file.eot"), url("path/to/file.woff2"), url("path/to/file.woff"), url("path/to/file.ttf"), url("path/to/file.svg")',
- * }
- */
- function fontFace(_ref) {
- var fontFamily = _ref.fontFamily,
- fontFilePath = _ref.fontFilePath,
- fontStretch = _ref.fontStretch,
- fontStyle = _ref.fontStyle,
- fontVariant = _ref.fontVariant,
- fontWeight = _ref.fontWeight,
- _ref$fileFormats = _ref.fileFormats,
- fileFormats = _ref$fileFormats === void 0 ? ['eot', 'woff2', 'woff', 'ttf', 'svg'] : _ref$fileFormats,
- _ref$formatHint = _ref.formatHint,
- formatHint = _ref$formatHint === void 0 ? false : _ref$formatHint,
- _ref$localFonts = _ref.localFonts,
- localFonts = _ref$localFonts === void 0 ? [fontFamily] : _ref$localFonts,
- unicodeRange = _ref.unicodeRange,
- fontDisplay = _ref.fontDisplay,
- fontVariationSettings = _ref.fontVariationSettings,
- fontFeatureSettings = _ref.fontFeatureSettings;
- // Error Handling
- if (!fontFamily) throw new _errors["default"](55);
- if (!fontFilePath && !localFonts) {
- throw new _errors["default"](52);
- }
- if (localFonts && !Array.isArray(localFonts)) {
- throw new _errors["default"](53);
- }
- if (!Array.isArray(fileFormats)) {
- throw new _errors["default"](54);
- }
- var fontFaceDeclaration = {
- '@font-face': {
- fontFamily: fontFamily,
- src: generateSources(fontFilePath, localFonts, fileFormats, formatHint),
- unicodeRange: unicodeRange,
- fontStretch: fontStretch,
- fontStyle: fontStyle,
- fontVariant: fontVariant,
- fontWeight: fontWeight,
- fontDisplay: fontDisplay,
- fontVariationSettings: fontVariationSettings,
- fontFeatureSettings: fontFeatureSettings
- }
- };
- // Removes undefined fields for cleaner css object.
- return JSON.parse(JSON.stringify(fontFaceDeclaration));
- }
- module.exports = exports.default;
|