You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
12 KiB
1 line
12 KiB
{"ast":null,"code":"import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport { CodedError, Platform } from 'expo-modules-core';\nimport FontObserver from 'fontfaceobserver';\nimport { FontDisplay } from \"./Font.types\";\nfunction getFontFaceStyleSheet() {\n if (!Platform.isDOMAvailable) {\n return null;\n }\n var styleSheet = getStyleElement();\n return styleSheet.sheet ? styleSheet.sheet : null;\n}\nfunction getFontFaceRules() {\n var sheet = getFontFaceStyleSheet();\n if (sheet) {\n var rules = _toConsumableArray(sheet.cssRules);\n var items = [];\n for (var i = 0; i < rules.length; i++) {\n var rule = rules[i];\n if (rule instanceof CSSFontFaceRule) {\n items.push({\n rule: rule,\n index: i\n });\n }\n }\n return items;\n }\n return [];\n}\nfunction getFontFaceRulesMatchingResource(fontFamilyName, options) {\n var rules = getFontFaceRules();\n return rules.filter(function (_ref) {\n var rule = _ref.rule;\n return rule.style.fontFamily === fontFamilyName && (options && options.display ? options.display === rule.style.fontDisplay : true);\n });\n}\nexport default {\n get name() {\n return 'ExpoFontLoader';\n },\n unloadAllAsync: function () {\n var _unloadAllAsync = _asyncToGenerator(function* () {\n if (!Platform.isDOMAvailable) return;\n var element = document.getElementById(ID);\n if (element && element instanceof HTMLStyleElement) {\n document.removeChild(element);\n }\n });\n function unloadAllAsync() {\n return _unloadAllAsync.apply(this, arguments);\n }\n return unloadAllAsync;\n }(),\n unloadAsync: function () {\n var _unloadAsync = _asyncToGenerator(function* (fontFamilyName, options) {\n var sheet = getFontFaceStyleSheet();\n if (!sheet) return;\n var items = getFontFaceRulesMatchingResource(fontFamilyName, options);\n for (var item of items) {\n sheet.deleteRule(item.index);\n }\n });\n function unloadAsync(_x, _x2) {\n return _unloadAsync.apply(this, arguments);\n }\n return unloadAsync;\n }(),\n loadAsync: function () {\n var _loadAsync = _asyncToGenerator(function* (fontFamilyName, resource) {\n if (!Platform.isDOMAvailable) {\n return;\n }\n var canInjectStyle = document.head && typeof document.head.appendChild === 'function';\n if (!canInjectStyle) {\n throw new CodedError('ERR_WEB_ENVIRONMENT', \"The browser's `document.head` element doesn't support injecting fonts.\");\n }\n var style = _createWebStyle(fontFamilyName, resource);\n document.head.appendChild(style);\n if (!isFontLoadingListenerSupported()) {\n return;\n }\n return new FontObserver(fontFamilyName, {\n display: resource.display\n }).load();\n });\n function loadAsync(_x3, _x4) {\n return _loadAsync.apply(this, arguments);\n }\n return loadAsync;\n }()\n};\nvar ID = 'expo-generated-fonts';\nfunction getStyleElement() {\n var element = document.getElementById(ID);\n if (element && element instanceof HTMLStyleElement) {\n return element;\n }\n var styleElement = document.createElement('style');\n styleElement.id = ID;\n styleElement.type = 'text/css';\n return styleElement;\n}\nfunction _createWebStyle(fontFamily, resource) {\n var fontStyle = \"@font-face {\\n font-family: \" + fontFamily + \";\\n src: url(\" + resource.uri + \");\\n font-display: \" + (resource.display || FontDisplay.AUTO) + \";\\n }\";\n var styleElement = getStyleElement();\n if (styleElement.styleSheet) {\n var styleElementIE = styleElement;\n styleElementIE.styleSheet.cssText = styleElementIE.styleSheet.cssText ? styleElementIE.styleSheet.cssText + fontStyle : fontStyle;\n } else {\n var textNode = document.createTextNode(fontStyle);\n styleElement.appendChild(textNode);\n }\n return styleElement;\n}\nfunction isFontLoadingListenerSupported() {\n var userAgent = window.navigator.userAgent;\n var isIOS = !!userAgent.match(/iPad|iPhone/i);\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var isEdge = userAgent.includes('Edge');\n var isIE = userAgent.includes('Trident');\n var isFirefox = userAgent.includes('Firefox');\n return !isSafari && !isIOS && !isEdge && !isIE && !isFirefox;\n}","map":{"version":3,"sources":["../src/ExpoFontLoader.web.ts"],"names":[],"mappings":"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","sourcesContent":["import { CodedError, Platform } from 'expo-modules-core';\nimport FontObserver from 'fontfaceobserver';\n\nimport { UnloadFontOptions } from './Font';\nimport { FontDisplay, FontResource } from './Font.types';\n\nfunction getFontFaceStyleSheet(): CSSStyleSheet | null {\n if (!Platform.isDOMAvailable) {\n return null;\n }\n const styleSheet = getStyleElement();\n return styleSheet.sheet ? (styleSheet.sheet as CSSStyleSheet) : null;\n}\n\ntype RuleItem = { rule: CSSFontFaceRule; index: number };\n\nfunction getFontFaceRules(): RuleItem[] {\n const sheet = getFontFaceStyleSheet();\n if (sheet) {\n // @ts-ignore: rule iterator\n const rules = [...sheet.cssRules];\n\n const items: RuleItem[] = [];\n\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSFontFaceRule) {\n items.push({ rule, index: i });\n }\n }\n return items;\n }\n return [];\n}\n\nfunction getFontFaceRulesMatchingResource(\n fontFamilyName: string,\n options?: UnloadFontOptions\n): RuleItem[] {\n const rules = getFontFaceRules();\n return rules.filter(({ rule }) => {\n return (\n rule.style.fontFamily === fontFamilyName &&\n (options && options.display ? options.display === (rule.style as any).fontDisplay : true)\n );\n });\n}\n\nexport default {\n get name(): string {\n return 'ExpoFontLoader';\n },\n\n async unloadAllAsync(): Promise<void> {\n if (!Platform.isDOMAvailable) return;\n\n const element = document.getElementById(ID);\n if (element && element instanceof HTMLStyleElement) {\n document.removeChild(element);\n }\n },\n\n async unloadAsync(fontFamilyName: string, options?: UnloadFontOptions): Promise<void> {\n const sheet = getFontFaceStyleSheet();\n if (!sheet) return;\n const items = getFontFaceRulesMatchingResource(fontFamilyName, options);\n for (const item of items) {\n sheet.deleteRule(item.index);\n }\n },\n\n async loadAsync(fontFamilyName: string, resource: FontResource): Promise<void> {\n if (!Platform.isDOMAvailable) {\n return;\n }\n\n const canInjectStyle = document.head && typeof document.head.appendChild === 'function';\n if (!canInjectStyle) {\n throw new CodedError(\n 'ERR_WEB_ENVIRONMENT',\n `The browser's \\`document.head\\` element doesn't support injecting fonts.`\n );\n }\n\n const style = _createWebStyle(fontFamilyName, resource);\n document.head!.appendChild(style);\n\n if (!isFontLoadingListenerSupported()) {\n return;\n }\n\n return new FontObserver(fontFamilyName, { display: resource.display }).load();\n },\n};\n\nconst ID = 'expo-generated-fonts';\n\nfunction getStyleElement(): HTMLStyleElement {\n const element = document.getElementById(ID);\n if (element && element instanceof HTMLStyleElement) {\n return element;\n }\n const styleElement = document.createElement('style');\n styleElement.id = ID;\n styleElement.type = 'text/css';\n return styleElement;\n}\n\nfunction _createWebStyle(fontFamily: string, resource: FontResource): HTMLStyleElement {\n const fontStyle = `@font-face {\n font-family: ${fontFamily};\n src: url(${resource.uri});\n font-display: ${resource.display || FontDisplay.AUTO};\n }`;\n\n const styleElement = getStyleElement();\n // @ts-ignore: TypeScript does not define HTMLStyleElement::styleSheet. This is just for IE and\n // possibly can be removed if it's unnecessary on IE 11.\n if (styleElement.styleSheet) {\n const styleElementIE = styleElement as any;\n styleElementIE.styleSheet.cssText = styleElementIE.styleSheet.cssText\n ? styleElementIE.styleSheet.cssText + fontStyle\n : fontStyle;\n } else {\n const textNode = document.createTextNode(fontStyle);\n styleElement.appendChild(textNode);\n }\n return styleElement;\n}\n\nfunction isFontLoadingListenerSupported(): boolean {\n const { userAgent } = window.navigator;\n // WebKit is broken https://github.com/bramstein/fontfaceobserver/issues/95\n const isIOS = !!userAgent.match(/iPad|iPhone/i);\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n // Edge is broken https://github.com/bramstein/fontfaceobserver/issues/109#issuecomment-333356795\n const isEdge = userAgent.includes('Edge');\n // Internet Explorer\n const isIE = userAgent.includes('Trident');\n // Firefox\n const isFirefox = userAgent.includes('Firefox');\n return !isSafari && !isIOS && !isEdge && !isIE && !isFirefox;\n}\n"],"sourceRoot":""},"metadata":{},"sourceType":"module"} |