| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 var __create = Object.create; 2 var __defProp = Object.defineProperty; 3 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 4 var __getOwnPropNames = Object.getOwnPropertyNames; 5 var __getProtoOf = Object.getPrototypeOf; 6 var __hasOwnProp = Object.prototype.hasOwnProperty; 7 var __require = /* @__PURE__ */ ((x2) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x2, { 8 get: (a2, b2) => (typeof require !== "undefined" ? require : a2)[b2] 9 }) : x2)(function(x2) { 10 if (typeof require !== "undefined") return require.apply(this, arguments); 11 throw Error('Dynamic require of "' + x2 + '" is not supported'); 12 }); 13 var __commonJS = (cb, mod) => function __require4() { 14 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 15 }; 16 var __copyProps = (to, from, except, desc) => { 17 if (from && typeof from === "object" || typeof from === "function") { 18 for (let key of __getOwnPropNames(from)) 19 if (!__hasOwnProp.call(to, key) && key !== except) 20 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 21 } 22 return to; 23 }; 24 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 25 // If the importer is in node compatibility mode or this is not an ESM 26 // file that has been converted to a CommonJS file using a Babel- 27 // compatible transform (i.e. "__esModule" has not been set), then set 28 // "default" to the CommonJS "module.exports" for node compatibility. 29 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 30 mod 31 )); 32 33 // package-external:@wordpress/i18n 34 var require_i18n = __commonJS({ 35 "package-external:@wordpress/i18n"(exports, module) { 36 module.exports = window.wp.i18n; 37 } 38 }); 39 40 // package-external:@wordpress/components 41 var require_components = __commonJS({ 42 "package-external:@wordpress/components"(exports, module) { 43 module.exports = window.wp.components; 44 } 45 }); 46 47 // vendor-external:react/jsx-runtime 48 var require_jsx_runtime = __commonJS({ 49 "vendor-external:react/jsx-runtime"(exports, module) { 50 module.exports = window.ReactJSXRuntime; 51 } 52 }); 53 54 // package-external:@wordpress/element 55 var require_element = __commonJS({ 56 "package-external:@wordpress/element"(exports, module) { 57 module.exports = window.wp.element; 58 } 59 }); 60 61 // package-external:@wordpress/editor 62 var require_editor = __commonJS({ 63 "package-external:@wordpress/editor"(exports, module) { 64 module.exports = window.wp.editor; 65 } 66 }); 67 68 // package-external:@wordpress/core-data 69 var require_core_data = __commonJS({ 70 "package-external:@wordpress/core-data"(exports, module) { 71 module.exports = window.wp.coreData; 72 } 73 }); 74 75 // package-external:@wordpress/data 76 var require_data = __commonJS({ 77 "package-external:@wordpress/data"(exports, module) { 78 module.exports = window.wp.data; 79 } 80 }); 81 82 // package-external:@wordpress/blocks 83 var require_blocks = __commonJS({ 84 "package-external:@wordpress/blocks"(exports, module) { 85 module.exports = window.wp.blocks; 86 } 87 }); 88 89 // package-external:@wordpress/block-editor 90 var require_block_editor = __commonJS({ 91 "package-external:@wordpress/block-editor"(exports, module) { 92 module.exports = window.wp.blockEditor; 93 } 94 }); 95 96 // package-external:@wordpress/compose 97 var require_compose = __commonJS({ 98 "package-external:@wordpress/compose"(exports, module) { 99 module.exports = window.wp.compose; 100 } 101 }); 102 103 // package-external:@wordpress/style-engine 104 var require_style_engine = __commonJS({ 105 "package-external:@wordpress/style-engine"(exports, module) { 106 module.exports = window.wp.styleEngine; 107 } 108 }); 109 110 // node_modules/fast-deep-equal/es6/index.js 111 var require_es6 = __commonJS({ 112 "node_modules/fast-deep-equal/es6/index.js"(exports, module) { 113 "use strict"; 114 module.exports = function equal(a2, b2) { 115 if (a2 === b2) return true; 116 if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { 117 if (a2.constructor !== b2.constructor) return false; 118 var length, i2, keys; 119 if (Array.isArray(a2)) { 120 length = a2.length; 121 if (length != b2.length) return false; 122 for (i2 = length; i2-- !== 0; ) 123 if (!equal(a2[i2], b2[i2])) return false; 124 return true; 125 } 126 if (a2 instanceof Map && b2 instanceof Map) { 127 if (a2.size !== b2.size) return false; 128 for (i2 of a2.entries()) 129 if (!b2.has(i2[0])) return false; 130 for (i2 of a2.entries()) 131 if (!equal(i2[1], b2.get(i2[0]))) return false; 132 return true; 133 } 134 if (a2 instanceof Set && b2 instanceof Set) { 135 if (a2.size !== b2.size) return false; 136 for (i2 of a2.entries()) 137 if (!b2.has(i2[0])) return false; 138 return true; 139 } 140 if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { 141 length = a2.length; 142 if (length != b2.length) return false; 143 for (i2 = length; i2-- !== 0; ) 144 if (a2[i2] !== b2[i2]) return false; 145 return true; 146 } 147 if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; 148 if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); 149 if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); 150 keys = Object.keys(a2); 151 length = keys.length; 152 if (length !== Object.keys(b2).length) return false; 153 for (i2 = length; i2-- !== 0; ) 154 if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; 155 for (i2 = length; i2-- !== 0; ) { 156 var key = keys[i2]; 157 if (!equal(a2[key], b2[key])) return false; 158 } 159 return true; 160 } 161 return a2 !== a2 && b2 !== b2; 162 }; 163 } 164 }); 165 166 // node_modules/deepmerge/dist/cjs.js 167 var require_cjs = __commonJS({ 168 "node_modules/deepmerge/dist/cjs.js"(exports, module) { 169 "use strict"; 170 var isMergeableObject = function isMergeableObject2(value) { 171 return isNonNullObject(value) && !isSpecial(value); 172 }; 173 function isNonNullObject(value) { 174 return !!value && typeof value === "object"; 175 } 176 function isSpecial(value) { 177 var stringValue = Object.prototype.toString.call(value); 178 return stringValue === "[object RegExp]" || stringValue === "[object Date]" || isReactElement(value); 179 } 180 var canUseSymbol = typeof Symbol === "function" && Symbol.for; 181 var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for("react.element") : 60103; 182 function isReactElement(value) { 183 return value.$$typeof === REACT_ELEMENT_TYPE; 184 } 185 function emptyTarget(val) { 186 return Array.isArray(val) ? [] : {}; 187 } 188 function cloneUnlessOtherwiseSpecified(value, options) { 189 return options.clone !== false && options.isMergeableObject(value) ? deepmerge2(emptyTarget(value), value, options) : value; 190 } 191 function defaultArrayMerge(target, source, options) { 192 return target.concat(source).map(function(element) { 193 return cloneUnlessOtherwiseSpecified(element, options); 194 }); 195 } 196 function getMergeFunction(key, options) { 197 if (!options.customMerge) { 198 return deepmerge2; 199 } 200 var customMerge = options.customMerge(key); 201 return typeof customMerge === "function" ? customMerge : deepmerge2; 202 } 203 function getEnumerableOwnPropertySymbols(target) { 204 return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function(symbol) { 205 return Object.propertyIsEnumerable.call(target, symbol); 206 }) : []; 207 } 208 function getKeys(target) { 209 return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)); 210 } 211 function propertyIsOnObject(object, property) { 212 try { 213 return property in object; 214 } catch (_) { 215 return false; 216 } 217 } 218 function propertyIsUnsafe(target, key) { 219 return propertyIsOnObject(target, key) && !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key)); 220 } 221 function mergeObject(target, source, options) { 222 var destination = {}; 223 if (options.isMergeableObject(target)) { 224 getKeys(target).forEach(function(key) { 225 destination[key] = cloneUnlessOtherwiseSpecified(target[key], options); 226 }); 227 } 228 getKeys(source).forEach(function(key) { 229 if (propertyIsUnsafe(target, key)) { 230 return; 231 } 232 if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) { 233 destination[key] = getMergeFunction(key, options)(target[key], source[key], options); 234 } else { 235 destination[key] = cloneUnlessOtherwiseSpecified(source[key], options); 236 } 237 }); 238 return destination; 239 } 240 function deepmerge2(target, source, options) { 241 options = options || {}; 242 options.arrayMerge = options.arrayMerge || defaultArrayMerge; 243 options.isMergeableObject = options.isMergeableObject || isMergeableObject; 244 options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified; 245 var sourceIsArray = Array.isArray(source); 246 var targetIsArray = Array.isArray(target); 247 var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; 248 if (!sourceAndTargetTypesMatch) { 249 return cloneUnlessOtherwiseSpecified(source, options); 250 } else if (sourceIsArray) { 251 return options.arrayMerge(target, source, options); 252 } else { 253 return mergeObject(target, source, options); 254 } 255 } 256 deepmerge2.all = function deepmergeAll(array, options) { 257 if (!Array.isArray(array)) { 258 throw new Error("first argument should be an array"); 259 } 260 return array.reduce(function(prev, next) { 261 return deepmerge2(prev, next, options); 262 }, {}); 263 }; 264 var deepmerge_1 = deepmerge2; 265 module.exports = deepmerge_1; 266 } 267 }); 268 269 // package-external:@wordpress/primitives 270 var require_primitives = __commonJS({ 271 "package-external:@wordpress/primitives"(exports, module) { 272 module.exports = window.wp.primitives; 273 } 274 }); 275 276 // package-external:@wordpress/private-apis 277 var require_private_apis = __commonJS({ 278 "package-external:@wordpress/private-apis"(exports, module) { 279 module.exports = window.wp.privateApis; 280 } 281 }); 282 283 // package-external:@wordpress/keycodes 284 var require_keycodes = __commonJS({ 285 "package-external:@wordpress/keycodes"(exports, module) { 286 module.exports = window.wp.keycodes; 287 } 288 }); 289 290 // package-external:@wordpress/api-fetch 291 var require_api_fetch = __commonJS({ 292 "package-external:@wordpress/api-fetch"(exports, module) { 293 module.exports = window.wp.apiFetch; 294 } 295 }); 296 297 // package-external:@wordpress/date 298 var require_date = __commonJS({ 299 "package-external:@wordpress/date"(exports, module) { 300 module.exports = window.wp.date; 301 } 302 }); 303 304 // node_modules/clsx/dist/clsx.mjs 305 function r(e2) { 306 var t3, f2, n2 = ""; 307 if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; 308 else if ("object" == typeof e2) if (Array.isArray(e2)) { 309 var o3 = e2.length; 310 for (t3 = 0; t3 < o3; t3++) e2[t3] && (f2 = r(e2[t3])) && (n2 && (n2 += " "), n2 += f2); 311 } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); 312 return n2; 313 } 314 function clsx() { 315 for (var e2, t3, f2 = 0, n2 = "", o3 = arguments.length; f2 < o3; f2++) (e2 = arguments[f2]) && (t3 = r(e2)) && (n2 && (n2 += " "), n2 += t3); 316 return n2; 317 } 318 var clsx_default = clsx; 319 320 // packages/admin-ui/build-module/navigable-region/index.js 321 var import_element = __toESM(require_element()); 322 var import_jsx_runtime = __toESM(require_jsx_runtime()); 323 var NavigableRegion = (0, import_element.forwardRef)( 324 ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { 325 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( 326 Tag, 327 { 328 ref, 329 className: clsx_default("admin-ui-navigable-region", className), 330 "aria-label": ariaLabel, 331 role: "region", 332 tabIndex: "-1", 333 ...props, 334 children 335 } 336 ); 337 } 338 ); 339 NavigableRegion.displayName = "NavigableRegion"; 340 var navigable_region_default = NavigableRegion; 341 342 // packages/admin-ui/build-module/page/header.js 343 var import_components2 = __toESM(require_components()); 344 345 // packages/admin-ui/build-module/page/sidebar-toggle-slot.js 346 var import_components = __toESM(require_components()); 347 var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components.createSlotFill)("SidebarToggle"); 348 349 // packages/admin-ui/build-module/page/header.js 350 var import_jsx_runtime2 = __toESM(require_jsx_runtime()); 351 function Header({ 352 breadcrumbs, 353 badges, 354 title, 355 subTitle, 356 actions, 357 showSidebarToggle = true 358 }) { 359 return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [ 360 /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { justify: "space-between", spacing: 2, children: [ 361 /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_components2.__experimentalHStack, { spacing: 2, justify: "left", children: [ 362 showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( 363 SidebarToggleSlot, 364 { 365 bubblesVirtually: true, 366 className: "admin-ui-page__sidebar-toggle-slot" 367 } 368 ), 369 title && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_components2.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }), 370 breadcrumbs, 371 badges 372 ] }), 373 /* @__PURE__ */ (0, import_jsx_runtime2.jsx)( 374 import_components2.__experimentalHStack, 375 { 376 style: { width: "auto", flexShrink: 0 }, 377 spacing: 2, 378 className: "admin-ui-page__header-actions", 379 children: actions 380 } 381 ) 382 ] }), 383 subTitle && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) 384 ] }); 385 } 386 387 // packages/admin-ui/build-module/page/index.js 388 var import_jsx_runtime3 = __toESM(require_jsx_runtime()); 389 function Page({ 390 breadcrumbs, 391 badges, 392 title, 393 subTitle, 394 children, 395 className, 396 actions, 397 hasPadding = false, 398 showSidebarToggle = true 399 }) { 400 const classes = clsx_default("admin-ui-page", className); 401 return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ 402 (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)( 403 Header, 404 { 405 breadcrumbs, 406 badges, 407 title, 408 subTitle, 409 actions, 410 showSidebarToggle 411 } 412 ), 413 hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children 414 ] }); 415 } 416 Page.SidebarToggleFill = SidebarToggleFill; 417 var page_default = Page; 418 419 // routes/font-list/stage.tsx 420 var import_i18n46 = __toESM(require_i18n()); 421 var import_components63 = __toESM(require_components()); 422 var import_editor = __toESM(require_editor()); 423 var import_core_data12 = __toESM(require_core_data()); 424 var import_data13 = __toESM(require_data()); 425 var import_element34 = __toESM(require_element()); 426 427 // packages/global-styles-ui/build-module/global-styles-ui.js 428 var import_components62 = __toESM(require_components()); 429 var import_blocks5 = __toESM(require_blocks()); 430 var import_data12 = __toESM(require_data()); 431 var import_block_editor13 = __toESM(require_block_editor()); 432 var import_element33 = __toESM(require_element()); 433 var import_compose6 = __toESM(require_compose()); 434 435 // packages/global-styles-engine/build-module/utils/object.js 436 function setImmutably(object, path, value) { 437 path = Array.isArray(path) ? [...path] : [path]; 438 object = Array.isArray(object) ? [...object] : { ...object }; 439 const leaf = path.pop(); 440 let prev = object; 441 for (const key of path) { 442 const lvl = prev[key]; 443 prev = prev[key] = Array.isArray(lvl) ? [...lvl] : { ...lvl }; 444 } 445 prev[leaf] = value; 446 return object; 447 } 448 var getValueFromObjectPath = (object, path, defaultValue) => { 449 const arrayPath = Array.isArray(path) ? path : path.split("."); 450 let value = object; 451 arrayPath.forEach((fieldName) => { 452 value = value?.[fieldName]; 453 }); 454 return value ?? defaultValue; 455 }; 456 457 // packages/global-styles-engine/build-module/settings/get-setting.js 458 var VALID_SETTINGS = [ 459 "appearanceTools", 460 "useRootPaddingAwareAlignments", 461 "background.backgroundImage", 462 "background.backgroundRepeat", 463 "background.backgroundSize", 464 "background.backgroundPosition", 465 "border.color", 466 "border.radius", 467 "border.radiusSizes", 468 "border.style", 469 "border.width", 470 "shadow.presets", 471 "shadow.defaultPresets", 472 "color.background", 473 "color.button", 474 "color.caption", 475 "color.custom", 476 "color.customDuotone", 477 "color.customGradient", 478 "color.defaultDuotone", 479 "color.defaultGradients", 480 "color.defaultPalette", 481 "color.duotone", 482 "color.gradients", 483 "color.heading", 484 "color.link", 485 "color.palette", 486 "color.text", 487 "custom", 488 "dimensions.aspectRatio", 489 "dimensions.height", 490 "dimensions.minHeight", 491 "dimensions.width", 492 "dimensions.dimensionSizes", 493 "layout.contentSize", 494 "layout.definitions", 495 "layout.wideSize", 496 "lightbox.enabled", 497 "lightbox.allowEditing", 498 "position.fixed", 499 "position.sticky", 500 "spacing.customSpacingSize", 501 "spacing.defaultSpacingSizes", 502 "spacing.spacingSizes", 503 "spacing.spacingScale", 504 "spacing.blockGap", 505 "spacing.margin", 506 "spacing.padding", 507 "spacing.units", 508 "typography.fluid", 509 "typography.customFontSize", 510 "typography.defaultFontSizes", 511 "typography.dropCap", 512 "typography.fontFamilies", 513 "typography.fontSizes", 514 "typography.fontStyle", 515 "typography.fontWeight", 516 "typography.letterSpacing", 517 "typography.lineHeight", 518 "typography.textAlign", 519 "typography.textColumns", 520 "typography.textDecoration", 521 "typography.textTransform", 522 "typography.writingMode" 523 ]; 524 function getSetting(globalStyles, path, blockName) { 525 const appendedBlockPath = blockName ? ".blocks." + blockName : ""; 526 const appendedPropertyPath = path ? "." + path : ""; 527 const contextualPath = `settings$appendedBlockPath}$appendedPropertyPath}`; 528 const globalPath = `settings$appendedPropertyPath}`; 529 if (path) { 530 return getValueFromObjectPath(globalStyles, contextualPath) ?? getValueFromObjectPath(globalStyles, globalPath); 531 } 532 let result = {}; 533 VALID_SETTINGS.forEach((setting) => { 534 const value = getValueFromObjectPath( 535 globalStyles, 536 `settings$appendedBlockPath}.$setting}` 537 ) ?? getValueFromObjectPath(globalStyles, `settings.$setting}`); 538 if (value !== void 0) { 539 result = setImmutably(result, setting.split("."), value); 540 } 541 }); 542 return result; 543 } 544 545 // packages/global-styles-engine/build-module/settings/set-setting.js 546 function setSetting(globalStyles, path, newValue, blockName) { 547 const appendedBlockPath = blockName ? ".blocks." + blockName : ""; 548 const appendedPropertyPath = path ? "." + path : ""; 549 const finalPath = `settings$appendedBlockPath}$appendedPropertyPath}`; 550 return setImmutably( 551 globalStyles, 552 finalPath.split("."), 553 newValue 554 ); 555 } 556 557 // packages/global-styles-engine/build-module/utils/common.js 558 var import_style_engine = __toESM(require_style_engine()); 559 560 // packages/global-styles-engine/build-module/utils/fluid.js 561 var DEFAULT_MAXIMUM_VIEWPORT_WIDTH = "1600px"; 562 var DEFAULT_MINIMUM_VIEWPORT_WIDTH = "320px"; 563 var DEFAULT_SCALE_FACTOR = 1; 564 var DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN = 0.25; 565 var DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX = 0.75; 566 var DEFAULT_MINIMUM_FONT_SIZE_LIMIT = "14px"; 567 function getComputedFluidTypographyValue({ 568 minimumFontSize, 569 maximumFontSize, 570 fontSize, 571 minimumViewportWidth = DEFAULT_MINIMUM_VIEWPORT_WIDTH, 572 maximumViewportWidth = DEFAULT_MAXIMUM_VIEWPORT_WIDTH, 573 scaleFactor = DEFAULT_SCALE_FACTOR, 574 minimumFontSizeLimit 575 }) { 576 minimumFontSizeLimit = !!getTypographyValueAndUnit(minimumFontSizeLimit) ? minimumFontSizeLimit : DEFAULT_MINIMUM_FONT_SIZE_LIMIT; 577 if (fontSize) { 578 const fontSizeParsed = getTypographyValueAndUnit(fontSize); 579 if (!fontSizeParsed?.unit || !fontSizeParsed?.value) { 580 return null; 581 } 582 const minimumFontSizeLimitParsed = getTypographyValueAndUnit( 583 minimumFontSizeLimit, 584 { 585 coerceTo: fontSizeParsed.unit 586 } 587 ); 588 if (!!minimumFontSizeLimitParsed?.value && !minimumFontSize && !maximumFontSize) { 589 if (fontSizeParsed?.value <= minimumFontSizeLimitParsed?.value) { 590 return null; 591 } 592 } 593 if (!maximumFontSize) { 594 maximumFontSize = `$fontSizeParsed.value}$fontSizeParsed.unit}`; 595 } 596 if (!minimumFontSize) { 597 const fontSizeValueInPx = fontSizeParsed.unit === "px" ? fontSizeParsed.value : fontSizeParsed.value * 16; 598 const minimumFontSizeFactor = Math.min( 599 Math.max( 600 1 - 0.075 * Math.log2(fontSizeValueInPx), 601 DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN 602 ), 603 DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX 604 ); 605 const calculatedMinimumFontSize = roundToPrecision( 606 fontSizeParsed.value * minimumFontSizeFactor, 607 3 608 ); 609 if (!!minimumFontSizeLimitParsed?.value && calculatedMinimumFontSize < minimumFontSizeLimitParsed?.value) { 610 minimumFontSize = `$minimumFontSizeLimitParsed.value}$minimumFontSizeLimitParsed.unit}`; 611 } else { 612 minimumFontSize = `$calculatedMinimumFontSize}$fontSizeParsed.unit}`; 613 } 614 } 615 } 616 const minimumFontSizeParsed = getTypographyValueAndUnit(minimumFontSize); 617 const fontSizeUnit = minimumFontSizeParsed?.unit || "rem"; 618 const maximumFontSizeParsed = getTypographyValueAndUnit(maximumFontSize, { 619 coerceTo: fontSizeUnit 620 }); 621 if (!minimumFontSizeParsed || !maximumFontSizeParsed) { 622 return null; 623 } 624 const minimumFontSizeRem = getTypographyValueAndUnit(minimumFontSize, { 625 coerceTo: "rem" 626 }); 627 const maximumViewportWidthParsed = getTypographyValueAndUnit( 628 maximumViewportWidth, 629 { coerceTo: fontSizeUnit } 630 ); 631 const minimumViewportWidthParsed = getTypographyValueAndUnit( 632 minimumViewportWidth, 633 { coerceTo: fontSizeUnit } 634 ); 635 if (!maximumViewportWidthParsed || !minimumViewportWidthParsed || !minimumFontSizeRem) { 636 return null; 637 } 638 const linearDenominator = maximumViewportWidthParsed.value - minimumViewportWidthParsed.value; 639 if (!linearDenominator) { 640 return null; 641 } 642 const minViewportWidthOffsetValue = roundToPrecision( 643 minimumViewportWidthParsed.value / 100, 644 3 645 ); 646 const viewportWidthOffset = roundToPrecision(minViewportWidthOffsetValue, 3) + fontSizeUnit; 647 const linearFactor = 100 * ((maximumFontSizeParsed.value - minimumFontSizeParsed.value) / linearDenominator); 648 const linearFactorScaled = roundToPrecision( 649 (linearFactor || 1) * scaleFactor, 650 3 651 ); 652 const fluidTargetFontSize = `$minimumFontSizeRem.value}$minimumFontSizeRem.unit} + ((1vw - $viewportWidthOffset}) * $linearFactorScaled})`; 653 return `clamp($minimumFontSize}, $fluidTargetFontSize}, $maximumFontSize})`; 654 } 655 function getTypographyValueAndUnit(rawValue, options = {}) { 656 if (typeof rawValue !== "string" && typeof rawValue !== "number") { 657 return null; 658 } 659 if (isFinite(rawValue)) { 660 rawValue = `$rawValue}px`; 661 } 662 const { coerceTo, rootSizeValue, acceptableUnits } = { 663 coerceTo: "", 664 // Default browser font size. Later we could inject some JS to compute this `getComputedStyle( document.querySelector( "html" ) ).fontSize`. 665 rootSizeValue: 16, 666 acceptableUnits: ["rem", "px", "em"], 667 ...options 668 }; 669 const acceptableUnitsGroup = acceptableUnits?.join("|"); 670 const regexUnits = new RegExp( 671 `^(\\d*\\.?\\d+)($acceptableUnitsGroup}){1,1}$` 672 ); 673 const matches = rawValue.toString().match(regexUnits); 674 if (!matches || matches.length < 3) { 675 return null; 676 } 677 let [, value, unit] = matches; 678 let returnValue = parseFloat(value); 679 if ("px" === coerceTo && ("em" === unit || "rem" === unit)) { 680 returnValue = returnValue * rootSizeValue; 681 unit = coerceTo; 682 } 683 if ("px" === unit && ("em" === coerceTo || "rem" === coerceTo)) { 684 returnValue = returnValue / rootSizeValue; 685 unit = coerceTo; 686 } 687 if (("em" === coerceTo || "rem" === coerceTo) && ("em" === unit || "rem" === unit)) { 688 unit = coerceTo; 689 } 690 if (!unit) { 691 return null; 692 } 693 return { 694 value: roundToPrecision(returnValue, 3), 695 unit 696 }; 697 } 698 function roundToPrecision(value, digits = 3) { 699 const base = Math.pow(10, digits); 700 return Math.round(value * base) / base; 701 } 702 703 // packages/global-styles-engine/build-module/utils/typography.js 704 function isFluidTypographyEnabled(typographySettings) { 705 const fluidSettings = typographySettings?.fluid; 706 return true === fluidSettings || fluidSettings && typeof fluidSettings === "object" && Object.keys(fluidSettings).length > 0; 707 } 708 function getFluidTypographyOptionsFromSettings(settings) { 709 const typographySettings = settings?.typography ?? {}; 710 const layoutSettings = settings?.layout; 711 const defaultMaxViewportWidth = getTypographyValueAndUnit( 712 layoutSettings?.wideSize 713 ) ? layoutSettings?.wideSize : null; 714 return isFluidTypographyEnabled(typographySettings) && defaultMaxViewportWidth ? { 715 fluid: { 716 maxViewportWidth: defaultMaxViewportWidth, 717 ...typeof typographySettings.fluid === "object" ? typographySettings.fluid : {} 718 } 719 } : { 720 fluid: typographySettings?.fluid 721 }; 722 } 723 function getTypographyFontSizeValue(preset, settings) { 724 const { size: defaultSize } = preset; 725 if (!defaultSize || "0" === defaultSize || false === preset?.fluid) { 726 return defaultSize; 727 } 728 if (!isFluidTypographyEnabled(settings?.typography) && !isFluidTypographyEnabled(preset)) { 729 return defaultSize; 730 } 731 const fluidTypographySettings = getFluidTypographyOptionsFromSettings(settings)?.fluid ?? {}; 732 const fluidFontSizeValue = getComputedFluidTypographyValue({ 733 minimumFontSize: typeof preset?.fluid === "boolean" ? void 0 : preset?.fluid?.min, 734 maximumFontSize: typeof preset?.fluid === "boolean" ? void 0 : preset?.fluid?.max, 735 fontSize: defaultSize, 736 minimumFontSizeLimit: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.minFontSize : void 0, 737 maximumViewportWidth: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.maxViewportWidth : void 0, 738 minimumViewportWidth: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.minViewportWidth : void 0 739 }); 740 if (!!fluidFontSizeValue) { 741 return fluidFontSizeValue; 742 } 743 return defaultSize; 744 } 745 746 // packages/global-styles-engine/build-module/utils/common.js 747 var PRESET_METADATA = [ 748 { 749 path: ["color", "palette"], 750 valueKey: "color", 751 cssVarInfix: "color", 752 classes: [ 753 { classSuffix: "color", propertyName: "color" }, 754 { 755 classSuffix: "background-color", 756 propertyName: "background-color" 757 }, 758 { 759 classSuffix: "border-color", 760 propertyName: "border-color" 761 } 762 ] 763 }, 764 { 765 path: ["color", "gradients"], 766 valueKey: "gradient", 767 cssVarInfix: "gradient", 768 classes: [ 769 { 770 classSuffix: "gradient-background", 771 propertyName: "background" 772 } 773 ] 774 }, 775 { 776 path: ["color", "duotone"], 777 valueKey: "colors", 778 cssVarInfix: "duotone", 779 valueFunc: ({ slug }) => `url( '#wp-duotone-$slug}' )`, 780 classes: [] 781 }, 782 { 783 path: ["shadow", "presets"], 784 valueKey: "shadow", 785 cssVarInfix: "shadow", 786 classes: [] 787 }, 788 { 789 path: ["typography", "fontSizes"], 790 valueFunc: (preset, settings) => getTypographyFontSizeValue(preset, settings), 791 valueKey: "size", 792 cssVarInfix: "font-size", 793 classes: [{ classSuffix: "font-size", propertyName: "font-size" }] 794 }, 795 { 796 path: ["typography", "fontFamilies"], 797 valueKey: "fontFamily", 798 cssVarInfix: "font-family", 799 classes: [ 800 { classSuffix: "font-family", propertyName: "font-family" } 801 ] 802 }, 803 { 804 path: ["spacing", "spacingSizes"], 805 valueKey: "size", 806 cssVarInfix: "spacing", 807 valueFunc: ({ size }) => size, 808 classes: [] 809 }, 810 { 811 path: ["border", "radiusSizes"], 812 valueKey: "size", 813 cssVarInfix: "border-radius", 814 classes: [] 815 }, 816 { 817 path: ["dimensions", "dimensionSizes"], 818 valueKey: "size", 819 cssVarInfix: "dimension", 820 classes: [] 821 } 822 ]; 823 function findInPresetsBy(settings, blockName, presetPath = [], presetProperty = "slug", presetValueValue) { 824 const orderedPresetsByOrigin = [ 825 blockName ? getValueFromObjectPath(settings, [ 826 "blocks", 827 blockName, 828 ...presetPath 829 ]) : void 0, 830 getValueFromObjectPath(settings, presetPath) 831 ].filter(Boolean); 832 for (const presetByOrigin of orderedPresetsByOrigin) { 833 if (presetByOrigin) { 834 const origins = ["custom", "theme", "default"]; 835 for (const origin of origins) { 836 const presets = presetByOrigin[origin]; 837 if (presets) { 838 const presetObject = presets.find( 839 (preset) => preset[presetProperty] === presetValueValue 840 ); 841 if (presetObject) { 842 if (presetProperty === "slug") { 843 return presetObject; 844 } 845 const highestPresetObjectWithSameSlug = findInPresetsBy( 846 settings, 847 blockName, 848 presetPath, 849 "slug", 850 presetObject.slug 851 ); 852 if (highestPresetObjectWithSameSlug[presetProperty] === presetObject[presetProperty]) { 853 return presetObject; 854 } 855 return void 0; 856 } 857 } 858 } 859 } 860 } 861 } 862 function getValueFromPresetVariable(features, blockName, variable, [presetType, slug] = []) { 863 const metadata = PRESET_METADATA.find( 864 (data) => data.cssVarInfix === presetType 865 ); 866 if (!metadata || !features.settings) { 867 return variable; 868 } 869 const presetObject = findInPresetsBy( 870 features.settings, 871 blockName, 872 metadata.path, 873 "slug", 874 slug 875 ); 876 if (presetObject) { 877 const { valueKey } = metadata; 878 const result = presetObject[valueKey]; 879 return getValueFromVariable(features, blockName, result); 880 } 881 return variable; 882 } 883 function getValueFromCustomVariable(features, blockName, variable, path = []) { 884 const result = (blockName ? getValueFromObjectPath(features?.settings ?? {}, [ 885 "blocks", 886 blockName, 887 "custom", 888 ...path 889 ]) : void 0) ?? getValueFromObjectPath(features?.settings ?? {}, [ 890 "custom", 891 ...path 892 ]); 893 if (!result) { 894 return variable; 895 } 896 return getValueFromVariable(features, blockName, result); 897 } 898 function getValueFromVariable(features, blockName, variable) { 899 if (!variable || typeof variable !== "string") { 900 if (typeof variable === "object" && variable !== null && "ref" in variable && typeof variable.ref === "string") { 901 const resolvedVariable = getValueFromObjectPath( 902 features, 903 variable.ref 904 ); 905 if (!resolvedVariable || typeof resolvedVariable === "object" && "ref" in resolvedVariable) { 906 return resolvedVariable; 907 } 908 variable = resolvedVariable; 909 } else { 910 return variable; 911 } 912 } 913 const USER_VALUE_PREFIX = "var:"; 914 const THEME_VALUE_PREFIX = "var(--wp--"; 915 const THEME_VALUE_SUFFIX = ")"; 916 let parsedVar; 917 if (variable.startsWith(USER_VALUE_PREFIX)) { 918 parsedVar = variable.slice(USER_VALUE_PREFIX.length).split("|"); 919 } else if (variable.startsWith(THEME_VALUE_PREFIX) && variable.endsWith(THEME_VALUE_SUFFIX)) { 920 parsedVar = variable.slice(THEME_VALUE_PREFIX.length, -THEME_VALUE_SUFFIX.length).split("--"); 921 } else { 922 return variable; 923 } 924 const [type, ...path] = parsedVar; 925 if (type === "preset") { 926 return getValueFromPresetVariable( 927 features, 928 blockName, 929 variable, 930 path 931 ); 932 } 933 if (type === "custom") { 934 return getValueFromCustomVariable( 935 features, 936 blockName, 937 variable, 938 path 939 ); 940 } 941 return variable; 942 } 943 944 // packages/global-styles-engine/build-module/settings/get-style.js 945 function getStyle(globalStyles, path, blockName, shouldDecodeEncode = true) { 946 const appendedPath = path ? "." + path : ""; 947 const finalPath = !blockName ? `styles$appendedPath}` : `styles.blocks.$blockName}$appendedPath}`; 948 if (!globalStyles) { 949 return void 0; 950 } 951 const rawResult = getValueFromObjectPath(globalStyles, finalPath); 952 const result = shouldDecodeEncode ? getValueFromVariable(globalStyles, blockName, rawResult) : rawResult; 953 return result; 954 } 955 956 // packages/global-styles-engine/build-module/settings/set-style.js 957 function setStyle(globalStyles, path, newValue, blockName) { 958 const appendedPath = path ? "." + path : ""; 959 const finalPath = !blockName ? `styles$appendedPath}` : `styles.blocks.$blockName}$appendedPath}`; 960 return setImmutably( 961 globalStyles, 962 finalPath.split("."), 963 newValue 964 ); 965 } 966 967 // packages/global-styles-engine/build-module/core/equal.js 968 var import_es6 = __toESM(require_es6()); 969 function areGlobalStylesEqual(original, variation) { 970 if (typeof original !== "object" || typeof variation !== "object") { 971 return original === variation; 972 } 973 return (0, import_es6.default)(original?.styles, variation?.styles) && (0, import_es6.default)(original?.settings, variation?.settings); 974 } 975 976 // packages/global-styles-engine/build-module/core/merge.js 977 var import_deepmerge = __toESM(require_cjs()); 978 979 // node_modules/is-plain-object/dist/is-plain-object.mjs 980 function isObject(o3) { 981 return Object.prototype.toString.call(o3) === "[object Object]"; 982 } 983 function isPlainObject(o3) { 984 var ctor, prot; 985 if (isObject(o3) === false) return false; 986 ctor = o3.constructor; 987 if (ctor === void 0) return true; 988 prot = ctor.prototype; 989 if (isObject(prot) === false) return false; 990 if (prot.hasOwnProperty("isPrototypeOf") === false) { 991 return false; 992 } 993 return true; 994 } 995 996 // packages/global-styles-engine/build-module/core/merge.js 997 function mergeGlobalStyles(base, user) { 998 return (0, import_deepmerge.default)(base, user, { 999 /* 1000 * We only pass as arrays the presets, 1001 * in which case we want the new array of values 1002 * to override the old array (no merging). 1003 */ 1004 isMergeableObject: isPlainObject, 1005 /* 1006 * Exceptions to the above rule. 1007 * Background images should be replaced, not merged, 1008 * as they themselves are specific object definitions for the style. 1009 */ 1010 customMerge: (key) => { 1011 if (key === "backgroundImage") { 1012 return (baseConfig, userConfig) => userConfig ?? baseConfig; 1013 } 1014 return void 0; 1015 } 1016 }); 1017 } 1018 1019 // node_modules/colord/index.mjs 1020 var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; 1021 var t = function(r3) { 1022 return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; 1023 }; 1024 var n = function(r3, t3, n2) { 1025 return void 0 === t3 && (t3 = 0), void 0 === n2 && (n2 = Math.pow(10, t3)), Math.round(n2 * r3) / n2 + 0; 1026 }; 1027 var e = function(r3, t3, n2) { 1028 return void 0 === t3 && (t3 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t3 ? r3 : t3; 1029 }; 1030 var u = function(r3) { 1031 return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; 1032 }; 1033 var a = function(r3) { 1034 return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; 1035 }; 1036 var o = function(r3) { 1037 return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; 1038 }; 1039 var i = /^#([0-9a-f]{3,8})$/i; 1040 var s = function(r3) { 1041 var t3 = r3.toString(16); 1042 return t3.length < 2 ? "0" + t3 : t3; 1043 }; 1044 var h = function(r3) { 1045 var t3 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t3, n2, e2), o3 = a2 - Math.min(t3, n2, e2), i2 = o3 ? a2 === t3 ? (n2 - e2) / o3 : a2 === n2 ? 2 + (e2 - t3) / o3 : 4 + (t3 - n2) / o3 : 0; 1046 return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o3 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; 1047 }; 1048 var b = function(r3) { 1049 var t3 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; 1050 t3 = t3 / 360 * 6, n2 /= 100, e2 /= 100; 1051 var a2 = Math.floor(t3), o3 = e2 * (1 - n2), i2 = e2 * (1 - (t3 - a2) * n2), s2 = e2 * (1 - (1 - t3 + a2) * n2), h2 = a2 % 6; 1052 return { r: 255 * [e2, i2, o3, o3, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o3, o3][h2], b: 255 * [o3, o3, s2, e2, e2, i2][h2], a: u2 }; 1053 }; 1054 var g = function(r3) { 1055 return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; 1056 }; 1057 var d = function(r3) { 1058 return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; 1059 }; 1060 var f = function(r3) { 1061 return b((n2 = (t3 = r3).s, { h: t3.h, s: (n2 *= ((e2 = t3.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t3.a })); 1062 var t3, n2, e2; 1063 }; 1064 var c = function(r3) { 1065 return { h: (t3 = h(r3)).h, s: (u2 = (200 - (n2 = t3.s)) * (e2 = t3.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t3.a }; 1066 var t3, n2, e2, u2; 1067 }; 1068 var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 1069 var p2 = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 1070 var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 1071 var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 1072 var y = { string: [[function(r3) { 1073 var t3 = i.exec(r3); 1074 return t3 ? (r3 = t3[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null; 1075 }, "hex"], [function(r3) { 1076 var t3 = v.exec(r3) || m.exec(r3); 1077 return t3 ? t3[2] !== t3[4] || t3[4] !== t3[6] ? null : a({ r: Number(t3[1]) / (t3[2] ? 100 / 255 : 1), g: Number(t3[3]) / (t3[4] ? 100 / 255 : 1), b: Number(t3[5]) / (t3[6] ? 100 / 255 : 1), a: void 0 === t3[7] ? 1 : Number(t3[7]) / (t3[8] ? 100 : 1) }) : null; 1078 }, "rgb"], [function(t3) { 1079 var n2 = l.exec(t3) || p2.exec(t3); 1080 if (!n2) return null; 1081 var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) }); 1082 return f(a2); 1083 }, "hsl"]], object: [[function(r3) { 1084 var n2 = r3.r, e2 = r3.g, u2 = r3.b, o3 = r3.a, i2 = void 0 === o3 ? 1 : o3; 1085 return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; 1086 }, "rgb"], [function(r3) { 1087 var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o3 = void 0 === a2 ? 1 : a2; 1088 if (!t(n2) || !t(e2) || !t(u2)) return null; 1089 var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o3) }); 1090 return f(i2); 1091 }, "hsl"], [function(r3) { 1092 var n2 = r3.h, a2 = r3.s, o3 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; 1093 if (!t(n2) || !t(a2) || !t(o3)) return null; 1094 var h2 = (function(r4) { 1095 return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; 1096 })({ h: Number(n2), s: Number(a2), v: Number(o3), a: Number(s2) }); 1097 return b(h2); 1098 }, "hsv"]] }; 1099 var N = function(r3, t3) { 1100 for (var n2 = 0; n2 < t3.length; n2++) { 1101 var e2 = t3[n2][0](r3); 1102 if (e2) return [e2, t3[n2][1]]; 1103 } 1104 return [null, void 0]; 1105 }; 1106 var x = function(r3) { 1107 return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; 1108 }; 1109 var M = function(r3, t3) { 1110 var n2 = c(r3); 1111 return { h: n2.h, s: e(n2.s + 100 * t3, 0, 100), l: n2.l, a: n2.a }; 1112 }; 1113 var H = function(r3) { 1114 return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; 1115 }; 1116 var $ = function(r3, t3) { 1117 var n2 = c(r3); 1118 return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t3, 0, 100), a: n2.a }; 1119 }; 1120 var j = (function() { 1121 function r3(r4) { 1122 this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; 1123 } 1124 return r3.prototype.isValid = function() { 1125 return null !== this.parsed; 1126 }, r3.prototype.brightness = function() { 1127 return n(H(this.rgba), 2); 1128 }, r3.prototype.isDark = function() { 1129 return H(this.rgba) < 0.5; 1130 }, r3.prototype.isLight = function() { 1131 return H(this.rgba) >= 0.5; 1132 }, r3.prototype.toHex = function() { 1133 return r4 = o(this.rgba), t3 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t3) + s(e2) + s(u2) + i2; 1134 var r4, t3, e2, u2, a2, i2; 1135 }, r3.prototype.toRgb = function() { 1136 return o(this.rgba); 1137 }, r3.prototype.toRgbString = function() { 1138 return r4 = o(this.rgba), t3 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t3 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t3 + ", " + n2 + ", " + e2 + ")"; 1139 var r4, t3, n2, e2, u2; 1140 }, r3.prototype.toHsl = function() { 1141 return d(c(this.rgba)); 1142 }, r3.prototype.toHslString = function() { 1143 return r4 = d(c(this.rgba)), t3 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t3 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t3 + ", " + n2 + "%, " + e2 + "%)"; 1144 var r4, t3, n2, e2, u2; 1145 }, r3.prototype.toHsv = function() { 1146 return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; 1147 var r4; 1148 }, r3.prototype.invert = function() { 1149 return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); 1150 var r4; 1151 }, r3.prototype.saturate = function(r4) { 1152 return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); 1153 }, r3.prototype.desaturate = function(r4) { 1154 return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); 1155 }, r3.prototype.grayscale = function() { 1156 return w(M(this.rgba, -1)); 1157 }, r3.prototype.lighten = function(r4) { 1158 return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); 1159 }, r3.prototype.darken = function(r4) { 1160 return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); 1161 }, r3.prototype.rotate = function(r4) { 1162 return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); 1163 }, r3.prototype.alpha = function(r4) { 1164 return "number" == typeof r4 ? w({ r: (t3 = this.rgba).r, g: t3.g, b: t3.b, a: r4 }) : n(this.rgba.a, 3); 1165 var t3; 1166 }, r3.prototype.hue = function(r4) { 1167 var t3 = c(this.rgba); 1168 return "number" == typeof r4 ? w({ h: r4, s: t3.s, l: t3.l, a: t3.a }) : n(t3.h); 1169 }, r3.prototype.isEqual = function(r4) { 1170 return this.toHex() === w(r4).toHex(); 1171 }, r3; 1172 })(); 1173 var w = function(r3) { 1174 return r3 instanceof j ? r3 : new j(r3); 1175 }; 1176 var S = []; 1177 var k = function(r3) { 1178 r3.forEach(function(r4) { 1179 S.indexOf(r4) < 0 && (r4(j, y), S.push(r4)); 1180 }); 1181 }; 1182 1183 // packages/global-styles-ui/build-module/provider.js 1184 var import_element3 = __toESM(require_element()); 1185 1186 // packages/global-styles-ui/build-module/context.js 1187 var import_element2 = __toESM(require_element()); 1188 var GlobalStylesContext = (0, import_element2.createContext)({ 1189 user: { styles: {}, settings: {} }, 1190 base: { styles: {}, settings: {} }, 1191 merged: { styles: {}, settings: {} }, 1192 onChange: () => { 1193 }, 1194 fontLibraryEnabled: false 1195 }); 1196 1197 // packages/global-styles-ui/build-module/provider.js 1198 var import_jsx_runtime4 = __toESM(require_jsx_runtime()); 1199 function GlobalStylesProvider({ 1200 children, 1201 value, 1202 baseValue, 1203 onChange, 1204 fontLibraryEnabled 1205 }) { 1206 const merged = (0, import_element3.useMemo)(() => { 1207 return mergeGlobalStyles(baseValue, value); 1208 }, [baseValue, value]); 1209 const contextValue = (0, import_element3.useMemo)( 1210 () => ({ 1211 user: value, 1212 base: baseValue, 1213 merged, 1214 onChange, 1215 fontLibraryEnabled 1216 }), 1217 [value, baseValue, merged, onChange, fontLibraryEnabled] 1218 ); 1219 return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(GlobalStylesContext.Provider, { value: contextValue, children }); 1220 } 1221 1222 // packages/global-styles-ui/build-module/screen-root.js 1223 var import_components9 = __toESM(require_components()); 1224 var import_i18n4 = __toESM(require_i18n()); 1225 1226 // packages/icons/build-module/icon/index.js 1227 var import_element4 = __toESM(require_element()); 1228 var icon_default = (0, import_element4.forwardRef)( 1229 ({ icon, size = 24, ...props }, ref) => { 1230 return (0, import_element4.cloneElement)(icon, { 1231 width: size, 1232 height: size, 1233 ...props, 1234 ref 1235 }); 1236 } 1237 ); 1238 1239 // packages/icons/build-module/library/chevron-left.js 1240 var import_primitives = __toESM(require_primitives()); 1241 var import_jsx_runtime5 = __toESM(require_jsx_runtime()); 1242 var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives.Path, { d: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z" }) }); 1243 1244 // packages/icons/build-module/library/chevron-right.js 1245 var import_primitives2 = __toESM(require_primitives()); 1246 var import_jsx_runtime6 = __toESM(require_jsx_runtime()); 1247 var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives2.Path, { d: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z" }) }); 1248 1249 // packages/icons/build-module/library/more-vertical.js 1250 var import_primitives3 = __toESM(require_primitives()); 1251 var import_jsx_runtime7 = __toESM(require_jsx_runtime()); 1252 var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives3.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); 1253 1254 // packages/icons/build-module/library/next.js 1255 var import_primitives4 = __toESM(require_primitives()); 1256 var import_jsx_runtime8 = __toESM(require_jsx_runtime()); 1257 var next_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives4.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) }); 1258 1259 // packages/icons/build-module/library/previous.js 1260 var import_primitives5 = __toESM(require_primitives()); 1261 var import_jsx_runtime9 = __toESM(require_jsx_runtime()); 1262 var previous_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives5.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) }); 1263 1264 // packages/global-styles-ui/build-module/screen-root.js 1265 var import_data2 = __toESM(require_data()); 1266 var import_core_data2 = __toESM(require_core_data()); 1267 1268 // packages/global-styles-ui/build-module/icon-with-current-color.js 1269 var import_jsx_runtime10 = __toESM(require_jsx_runtime()); 1270 function IconWithCurrentColor({ 1271 className, 1272 ...props 1273 }) { 1274 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)( 1275 icon_default, 1276 { 1277 className: clsx_default( 1278 className, 1279 "global-styles-ui-icon-with-current-color" 1280 ), 1281 ...props 1282 } 1283 ); 1284 } 1285 1286 // packages/global-styles-ui/build-module/navigation-button.js 1287 var import_components3 = __toESM(require_components()); 1288 var import_jsx_runtime11 = __toESM(require_jsx_runtime()); 1289 function GenericNavigationButton({ 1290 icon, 1291 children, 1292 ...props 1293 }) { 1294 return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_components3.__experimentalItem, { ...props, children: [ 1295 icon && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_components3.__experimentalHStack, { justify: "flex-start", children: [ 1296 /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(IconWithCurrentColor, { icon, size: 24 }), 1297 /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components3.FlexItem, { children }) 1298 ] }), 1299 !icon && children 1300 ] }); 1301 } 1302 function NavigationButtonAsItem(props) { 1303 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components3.Navigator.Button, { as: GenericNavigationButton, ...props }); 1304 } 1305 1306 // packages/global-styles-ui/build-module/root-menu.js 1307 var import_components4 = __toESM(require_components()); 1308 var import_i18n2 = __toESM(require_i18n()); 1309 var import_block_editor = __toESM(require_block_editor()); 1310 1311 // node_modules/colord/plugins/a11y.mjs 1312 var o2 = function(o3) { 1313 var t3 = o3 / 255; 1314 return t3 < 0.04045 ? t3 / 12.92 : Math.pow((t3 + 0.055) / 1.055, 2.4); 1315 }; 1316 var t2 = function(t3) { 1317 return 0.2126 * o2(t3.r) + 0.7152 * o2(t3.g) + 0.0722 * o2(t3.b); 1318 }; 1319 function a11y_default(o3) { 1320 o3.prototype.luminance = function() { 1321 return o4 = t2(this.rgba), void 0 === (r3 = 2) && (r3 = 0), void 0 === n2 && (n2 = Math.pow(10, r3)), Math.round(n2 * o4) / n2 + 0; 1322 var o4, r3, n2; 1323 }, o3.prototype.contrast = function(r3) { 1324 void 0 === r3 && (r3 = "#FFF"); 1325 var n2, a2, i2, e2, v2, u2, d2, c2 = r3 instanceof o3 ? r3 : new o3(r3); 1326 return e2 = this.rgba, v2 = c2.toRgb(), u2 = t2(e2), d2 = t2(v2), n2 = u2 > d2 ? (u2 + 0.05) / (d2 + 0.05) : (d2 + 0.05) / (u2 + 0.05), void 0 === (a2 = 2) && (a2 = 0), void 0 === i2 && (i2 = Math.pow(10, a2)), Math.floor(i2 * n2) / i2 + 0; 1327 }, o3.prototype.isReadable = function(o4, t3) { 1328 return void 0 === o4 && (o4 = "#FFF"), void 0 === t3 && (t3 = {}), this.contrast(o4) >= (e2 = void 0 === (i2 = (r3 = t3).size) ? "normal" : i2, "AAA" === (a2 = void 0 === (n2 = r3.level) ? "AA" : n2) && "normal" === e2 ? 7 : "AA" === a2 && "large" === e2 ? 3 : 4.5); 1329 var r3, n2, a2, i2, e2; 1330 }; 1331 } 1332 1333 // packages/global-styles-ui/build-module/hooks.js 1334 var import_element5 = __toESM(require_element()); 1335 var import_data = __toESM(require_data()); 1336 var import_core_data = __toESM(require_core_data()); 1337 var import_i18n = __toESM(require_i18n()); 1338 1339 // packages/global-styles-ui/build-module/utils.js 1340 function removePropertiesFromObject(object, properties) { 1341 if (!properties?.length) { 1342 return object; 1343 } 1344 if (typeof object !== "object" || !object || !Object.keys(object).length) { 1345 return object; 1346 } 1347 for (const key in object) { 1348 if (properties.includes(key)) { 1349 delete object[key]; 1350 } else if (typeof object[key] === "object") { 1351 removePropertiesFromObject(object[key], properties); 1352 } 1353 } 1354 return object; 1355 } 1356 var filterObjectByProperties = (object, properties) => { 1357 if (!object || !properties?.length) { 1358 return {}; 1359 } 1360 const newObject = {}; 1361 Object.keys(object).forEach((key) => { 1362 if (properties.includes(key)) { 1363 newObject[key] = object[key]; 1364 } else if (typeof object[key] === "object") { 1365 const newFilter = filterObjectByProperties( 1366 object[key], 1367 properties 1368 ); 1369 if (Object.keys(newFilter).length) { 1370 newObject[key] = newFilter; 1371 } 1372 } 1373 }); 1374 return newObject; 1375 }; 1376 function isVariationWithProperties(variation, properties) { 1377 const variationWithProperties = filterObjectByProperties( 1378 structuredClone(variation), 1379 properties 1380 ); 1381 return areGlobalStylesEqual(variationWithProperties, variation); 1382 } 1383 function getFontFamilyFromSetting(fontFamilies, setting) { 1384 if (!Array.isArray(fontFamilies) || !setting) { 1385 return null; 1386 } 1387 const fontFamilyVariable = setting.replace("var(", "").replace(")", ""); 1388 const fontFamilySlug = fontFamilyVariable?.split("--").slice(-1)[0]; 1389 return fontFamilies.find( 1390 (fontFamily) => fontFamily.slug === fontFamilySlug 1391 ); 1392 } 1393 function getFontFamilies(themeJson) { 1394 const themeFontFamilies = themeJson?.settings?.typography?.fontFamilies?.theme; 1395 const customFontFamilies = themeJson?.settings?.typography?.fontFamilies?.custom; 1396 let fontFamilies = []; 1397 if (themeFontFamilies && customFontFamilies) { 1398 fontFamilies = [...themeFontFamilies, ...customFontFamilies]; 1399 } else if (themeFontFamilies) { 1400 fontFamilies = themeFontFamilies; 1401 } else if (customFontFamilies) { 1402 fontFamilies = customFontFamilies; 1403 } 1404 const bodyFontFamilySetting = themeJson?.styles?.typography?.fontFamily; 1405 const bodyFontFamily = getFontFamilyFromSetting( 1406 fontFamilies, 1407 bodyFontFamilySetting 1408 ); 1409 const headingFontFamilySetting = themeJson?.styles?.elements?.heading?.typography?.fontFamily; 1410 let headingFontFamily; 1411 if (!headingFontFamilySetting) { 1412 headingFontFamily = bodyFontFamily; 1413 } else { 1414 headingFontFamily = getFontFamilyFromSetting( 1415 fontFamilies, 1416 themeJson?.styles?.elements?.heading?.typography?.fontFamily 1417 ); 1418 } 1419 return [bodyFontFamily, headingFontFamily]; 1420 } 1421 1422 // packages/global-styles-ui/build-module/hooks.js 1423 k([a11y_default]); 1424 function useStyle(path, blockName, readFrom = "merged", shouldDecodeEncode = true) { 1425 const { user, base, merged, onChange } = (0, import_element5.useContext)(GlobalStylesContext); 1426 let sourceValue = merged; 1427 if (readFrom === "base") { 1428 sourceValue = base; 1429 } else if (readFrom === "user") { 1430 sourceValue = user; 1431 } 1432 const styleValue = (0, import_element5.useMemo)( 1433 () => getStyle(sourceValue, path, blockName, shouldDecodeEncode), 1434 [sourceValue, path, blockName, shouldDecodeEncode] 1435 ); 1436 const setStyleValue = (0, import_element5.useCallback)( 1437 (newValue) => { 1438 const newGlobalStyles = setStyle( 1439 user, 1440 path, 1441 newValue, 1442 blockName 1443 ); 1444 onChange(newGlobalStyles); 1445 }, 1446 [user, onChange, path, blockName] 1447 ); 1448 return [styleValue, setStyleValue]; 1449 } 1450 function useSetting(path, blockName, readFrom = "merged") { 1451 const { user, base, merged, onChange } = (0, import_element5.useContext)(GlobalStylesContext); 1452 let sourceValue = merged; 1453 if (readFrom === "base") { 1454 sourceValue = base; 1455 } else if (readFrom === "user") { 1456 sourceValue = user; 1457 } 1458 const settingValue = (0, import_element5.useMemo)( 1459 () => getSetting(sourceValue, path, blockName), 1460 [sourceValue, path, blockName] 1461 ); 1462 const setSettingValue = (0, import_element5.useCallback)( 1463 (newValue) => { 1464 const newGlobalStyles = setSetting( 1465 user, 1466 path, 1467 newValue, 1468 blockName 1469 ); 1470 onChange(newGlobalStyles); 1471 }, 1472 [user, onChange, path, blockName] 1473 ); 1474 return [settingValue, setSettingValue]; 1475 } 1476 var EMPTY_ARRAY = []; 1477 function hasThemeVariation({ 1478 title, 1479 settings, 1480 styles 1481 }) { 1482 return title === (0, import_i18n.__)("Default") || Object.keys(settings || {}).length > 0 || Object.keys(styles || {}).length > 0; 1483 } 1484 function useCurrentMergeThemeStyleVariationsWithUserConfig(properties = []) { 1485 const { variationsFromTheme } = (0, import_data.useSelect)((select) => { 1486 const _variationsFromTheme = select( 1487 import_core_data.store 1488 ).__experimentalGetCurrentThemeGlobalStylesVariations?.(); 1489 return { 1490 variationsFromTheme: _variationsFromTheme || EMPTY_ARRAY 1491 }; 1492 }, []); 1493 const { user: userVariation } = (0, import_element5.useContext)(GlobalStylesContext); 1494 return (0, import_element5.useMemo)(() => { 1495 const clonedUserVariation = structuredClone(userVariation); 1496 const userVariationWithoutProperties = removePropertiesFromObject( 1497 clonedUserVariation, 1498 properties 1499 ); 1500 userVariationWithoutProperties.title = (0, import_i18n.__)("Default"); 1501 const variationsWithPropertiesAndBase = variationsFromTheme.filter((variation) => { 1502 return isVariationWithProperties(variation, properties); 1503 }).map((variation) => { 1504 return mergeGlobalStyles( 1505 userVariationWithoutProperties, 1506 variation 1507 ); 1508 }); 1509 const variationsByProperties = [ 1510 userVariationWithoutProperties, 1511 ...variationsWithPropertiesAndBase 1512 ]; 1513 return variationsByProperties?.length ? variationsByProperties.filter(hasThemeVariation) : []; 1514 }, [properties, userVariation, variationsFromTheme]); 1515 } 1516 1517 // packages/global-styles-ui/build-module/lock-unlock.js 1518 var import_private_apis = __toESM(require_private_apis()); 1519 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 1520 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 1521 "@wordpress/global-styles-ui" 1522 ); 1523 1524 // packages/global-styles-ui/build-module/root-menu.js 1525 var import_jsx_runtime12 = __toESM(require_jsx_runtime()); 1526 var { 1527 useHasDimensionsPanel, 1528 useHasTypographyPanel, 1529 useHasColorPanel, 1530 useSettingsForBlockElement, 1531 useHasBackgroundPanel 1532 } = unlock(import_block_editor.privateApis); 1533 1534 // packages/global-styles-ui/build-module/preview-styles.js 1535 var import_components8 = __toESM(require_components()); 1536 1537 // packages/global-styles-ui/build-module/preview-hooks.js 1538 function useStylesPreviewColors() { 1539 const [textColor = "black"] = useStyle("color.text"); 1540 const [backgroundColor = "white"] = useStyle("color.background"); 1541 const [headingColor = textColor] = useStyle( 1542 "elements.h1.color.text" 1543 ); 1544 const [linkColor = headingColor] = useStyle( 1545 "elements.link.color.text" 1546 ); 1547 const [buttonBackgroundColor = linkColor] = useStyle( 1548 "elements.button.color.background" 1549 ); 1550 const [coreColors] = useSetting("color.palette.core") || []; 1551 const [themeColors] = useSetting("color.palette.theme") || []; 1552 const [customColors] = useSetting("color.palette.custom") || []; 1553 const paletteColors = (themeColors ?? []).concat(customColors ?? []).concat(coreColors ?? []); 1554 const textColorObject = paletteColors.filter( 1555 ({ color }) => color === textColor 1556 ); 1557 const buttonBackgroundColorObject = paletteColors.filter( 1558 ({ color }) => color === buttonBackgroundColor 1559 ); 1560 const highlightedColors = textColorObject.concat(buttonBackgroundColorObject).concat(paletteColors).filter( 1561 // we exclude these background color because it is already visible in the preview. 1562 ({ color }) => color !== backgroundColor 1563 ).slice(0, 2); 1564 return { 1565 paletteColors, 1566 highlightedColors 1567 }; 1568 } 1569 1570 // packages/global-styles-ui/build-module/typography-example.js 1571 var import_element6 = __toESM(require_element()); 1572 var import_components5 = __toESM(require_components()); 1573 var import_i18n3 = __toESM(require_i18n()); 1574 1575 // packages/global-styles-ui/build-module/font-library/utils/preview-styles.js 1576 function findNearest(input, numbers) { 1577 if (numbers.length === 0) { 1578 return null; 1579 } 1580 numbers.sort((a2, b2) => Math.abs(input - a2) - Math.abs(input - b2)); 1581 return numbers[0]; 1582 } 1583 function extractFontWeights(fontFaces) { 1584 const result = []; 1585 fontFaces.forEach((face) => { 1586 const weights = String(face.fontWeight).split(" "); 1587 if (weights.length === 2) { 1588 const start = parseInt(weights[0]); 1589 const end = parseInt(weights[1]); 1590 for (let i2 = start; i2 <= end; i2 += 100) { 1591 result.push(i2); 1592 } 1593 } else if (weights.length === 1) { 1594 result.push(parseInt(weights[0])); 1595 } 1596 }); 1597 return result; 1598 } 1599 function formatFontFamily(input) { 1600 const regex = /^(?!generic\([ a-zA-Z\-]+\)$)(?!^[a-zA-Z\-]+$).+/; 1601 const output = input.trim(); 1602 const formatItem = (item) => { 1603 item = item.trim(); 1604 if (item.match(regex)) { 1605 item = item.replace(/^["']|["']$/g, ""); 1606 return `"$item}"`; 1607 } 1608 return item; 1609 }; 1610 if (output.includes(",")) { 1611 return output.split(",").map(formatItem).filter((item) => item !== "").join(", "); 1612 } 1613 return formatItem(output); 1614 } 1615 function formatFontFaceName(input) { 1616 if (!input) { 1617 return ""; 1618 } 1619 let output = input.trim(); 1620 if (output.includes(",")) { 1621 output = (output.split(",").find((item) => item.trim() !== "") ?? "").trim(); 1622 } 1623 output = output.replace(/^["']|["']$/g, ""); 1624 if (window.navigator.userAgent.toLowerCase().includes("firefox")) { 1625 output = `"$output}"`; 1626 } 1627 return output; 1628 } 1629 function getFamilyPreviewStyle(family) { 1630 const style = { 1631 fontFamily: formatFontFamily(family.fontFamily) 1632 }; 1633 if (!("fontFace" in family) || !Array.isArray(family.fontFace)) { 1634 style.fontWeight = "400"; 1635 style.fontStyle = "normal"; 1636 return style; 1637 } 1638 if (family.fontFace) { 1639 const normalFaces = family.fontFace.filter( 1640 (face) => face?.fontStyle && face.fontStyle.toLowerCase() === "normal" 1641 ); 1642 if (normalFaces.length > 0) { 1643 style.fontStyle = "normal"; 1644 const normalWeights = extractFontWeights(normalFaces); 1645 const nearestWeight = findNearest(400, normalWeights); 1646 style.fontWeight = String(nearestWeight) || "400"; 1647 } else { 1648 style.fontStyle = family.fontFace.length && family.fontFace[0].fontStyle || "normal"; 1649 style.fontWeight = family.fontFace.length && String(family.fontFace[0].fontWeight) || "400"; 1650 } 1651 } 1652 return style; 1653 } 1654 function getFacePreviewStyle(face) { 1655 return { 1656 fontFamily: formatFontFamily(face.fontFamily), 1657 fontStyle: face.fontStyle || "normal", 1658 fontWeight: face.fontWeight || "400" 1659 }; 1660 } 1661 1662 // packages/global-styles-ui/build-module/typography-example.js 1663 var import_jsx_runtime13 = __toESM(require_jsx_runtime()); 1664 function PreviewTypography({ 1665 fontSize, 1666 variation 1667 }) { 1668 const { base } = (0, import_element6.useContext)(GlobalStylesContext); 1669 let config = base; 1670 if (variation) { 1671 config = { ...base, ...variation }; 1672 } 1673 const [textColor] = useStyle("color.text"); 1674 const [bodyFontFamilies, headingFontFamilies] = getFontFamilies(config); 1675 const bodyPreviewStyle = bodyFontFamilies ? getFamilyPreviewStyle(bodyFontFamilies) : {}; 1676 const headingPreviewStyle = headingFontFamilies ? getFamilyPreviewStyle(headingFontFamilies) : {}; 1677 if (textColor) { 1678 bodyPreviewStyle.color = textColor; 1679 headingPreviewStyle.color = textColor; 1680 } 1681 if (fontSize) { 1682 bodyPreviewStyle.fontSize = fontSize; 1683 headingPreviewStyle.fontSize = fontSize; 1684 } 1685 return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)( 1686 import_components5.__unstableMotion.div, 1687 { 1688 animate: { 1689 scale: 1, 1690 opacity: 1 1691 }, 1692 initial: { 1693 scale: 0.1, 1694 opacity: 0 1695 }, 1696 transition: { 1697 delay: 0.3, 1698 type: "tween" 1699 }, 1700 style: { 1701 textAlign: "center", 1702 lineHeight: 1 1703 }, 1704 children: [ 1705 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: headingPreviewStyle, children: (0, import_i18n3._x)("A", "Uppercase letter A") }), 1706 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: bodyPreviewStyle, children: (0, import_i18n3._x)("a", "Lowercase letter A") }) 1707 ] 1708 } 1709 ); 1710 } 1711 1712 // packages/global-styles-ui/build-module/highlighted-colors.js 1713 var import_components6 = __toESM(require_components()); 1714 var import_jsx_runtime14 = __toESM(require_jsx_runtime()); 1715 function HighlightedColors({ 1716 normalizedColorSwatchSize, 1717 ratio 1718 }) { 1719 const { highlightedColors } = useStylesPreviewColors(); 1720 const scaledSwatchSize = normalizedColorSwatchSize * ratio; 1721 return highlightedColors.map(({ slug, color }, index) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)( 1722 import_components6.__unstableMotion.div, 1723 { 1724 style: { 1725 height: scaledSwatchSize, 1726 width: scaledSwatchSize, 1727 background: color, 1728 borderRadius: scaledSwatchSize / 2 1729 }, 1730 animate: { 1731 scale: 1, 1732 opacity: 1 1733 }, 1734 initial: { 1735 scale: 0.1, 1736 opacity: 0 1737 }, 1738 transition: { 1739 delay: index === 1 ? 0.2 : 0.1 1740 } 1741 }, 1742 `$slug}-$index}` 1743 )); 1744 } 1745 1746 // packages/global-styles-ui/build-module/preview-wrapper.js 1747 var import_components7 = __toESM(require_components()); 1748 var import_compose = __toESM(require_compose()); 1749 var import_element7 = __toESM(require_element()); 1750 var import_jsx_runtime15 = __toESM(require_jsx_runtime()); 1751 var normalizedWidth = 248; 1752 var normalizedHeight = 152; 1753 var THROTTLE_OPTIONS = { 1754 leading: true, 1755 trailing: true 1756 }; 1757 function PreviewWrapper({ 1758 children, 1759 label, 1760 isFocused, 1761 withHoverView 1762 }) { 1763 const [backgroundColor = "white"] = useStyle("color.background"); 1764 const [gradientValue] = useStyle("color.gradient"); 1765 const disableMotion = (0, import_compose.useReducedMotion)(); 1766 const [isHovered, setIsHovered] = (0, import_element7.useState)(false); 1767 const [containerResizeListener, { width }] = (0, import_compose.useResizeObserver)(); 1768 const [throttledWidth, setThrottledWidthState] = (0, import_element7.useState)(width); 1769 const [ratioState, setRatioState] = (0, import_element7.useState)(); 1770 const setThrottledWidth = (0, import_compose.useThrottle)( 1771 setThrottledWidthState, 1772 250, 1773 THROTTLE_OPTIONS 1774 ); 1775 (0, import_element7.useLayoutEffect)(() => { 1776 if (width) { 1777 setThrottledWidth(width); 1778 } 1779 }, [width, setThrottledWidth]); 1780 (0, import_element7.useLayoutEffect)(() => { 1781 const newRatio = throttledWidth ? throttledWidth / normalizedWidth : 1; 1782 const ratioDiff = newRatio - (ratioState || 0); 1783 const isRatioDiffBigEnough = Math.abs(ratioDiff) > 0.1; 1784 if (isRatioDiffBigEnough || !ratioState) { 1785 setRatioState(newRatio); 1786 } 1787 }, [throttledWidth, ratioState]); 1788 const fallbackRatio = width ? width / normalizedWidth : 1; 1789 const ratio = ratioState ? ratioState : fallbackRatio; 1790 const isReady = !!width; 1791 return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [ 1792 /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { position: "relative" }, children: containerResizeListener }), 1793 isReady && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)( 1794 "div", 1795 { 1796 className: "global-styles-ui-preview__wrapper", 1797 style: { 1798 height: normalizedHeight * ratio 1799 }, 1800 onMouseEnter: () => setIsHovered(true), 1801 onMouseLeave: () => setIsHovered(false), 1802 tabIndex: -1, 1803 children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)( 1804 import_components7.__unstableMotion.div, 1805 { 1806 style: { 1807 height: normalizedHeight * ratio, 1808 width: "100%", 1809 background: gradientValue ?? backgroundColor, 1810 cursor: withHoverView ? "pointer" : void 0 1811 }, 1812 initial: "start", 1813 animate: (isHovered || isFocused) && !disableMotion && label ? "hover" : "start", 1814 children: [].concat(children).map( 1815 (child, key) => child({ ratio, key }) 1816 ) 1817 } 1818 ) 1819 } 1820 ) 1821 ] }); 1822 } 1823 var preview_wrapper_default = PreviewWrapper; 1824 1825 // packages/global-styles-ui/build-module/preview-styles.js 1826 var import_jsx_runtime16 = __toESM(require_jsx_runtime()); 1827 var firstFrameVariants = { 1828 start: { 1829 scale: 1, 1830 opacity: 1 1831 }, 1832 hover: { 1833 scale: 0, 1834 opacity: 0 1835 } 1836 }; 1837 var midFrameVariants = { 1838 hover: { 1839 opacity: 1 1840 }, 1841 start: { 1842 opacity: 0.5 1843 } 1844 }; 1845 var secondFrameVariants = { 1846 hover: { 1847 scale: 1, 1848 opacity: 1 1849 }, 1850 start: { 1851 scale: 0, 1852 opacity: 0 1853 } 1854 }; 1855 function PreviewStyles({ 1856 label, 1857 isFocused, 1858 withHoverView, 1859 variation 1860 }) { 1861 const [fontWeight] = useStyle("typography.fontWeight"); 1862 const [fontFamily = "serif"] = useStyle( 1863 "typography.fontFamily" 1864 ); 1865 const [headingFontFamily = fontFamily] = useStyle( 1866 "elements.h1.typography.fontFamily" 1867 ); 1868 const [headingFontWeight = fontWeight] = useStyle( 1869 "elements.h1.typography.fontWeight" 1870 ); 1871 const [textColor = "black"] = useStyle("color.text"); 1872 const [headingColor = textColor] = useStyle( 1873 "elements.h1.color.text" 1874 ); 1875 const { paletteColors } = useStylesPreviewColors(); 1876 return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)( 1877 preview_wrapper_default, 1878 { 1879 label, 1880 isFocused, 1881 withHoverView, 1882 children: [ 1883 ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1884 import_components8.__unstableMotion.div, 1885 { 1886 variants: firstFrameVariants, 1887 style: { 1888 height: "100%", 1889 overflow: "hidden" 1890 }, 1891 children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)( 1892 import_components8.__experimentalHStack, 1893 { 1894 spacing: 10 * ratio, 1895 justify: "center", 1896 style: { 1897 height: "100%", 1898 overflow: "hidden" 1899 }, 1900 children: [ 1901 /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1902 PreviewTypography, 1903 { 1904 fontSize: 65 * ratio, 1905 variation 1906 } 1907 ), 1908 /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_components8.__experimentalVStack, { spacing: 4 * ratio, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1909 HighlightedColors, 1910 { 1911 normalizedColorSwatchSize: 32, 1912 ratio 1913 } 1914 ) }) 1915 ] 1916 } 1917 ) 1918 }, 1919 key 1920 ), 1921 ({ key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1922 import_components8.__unstableMotion.div, 1923 { 1924 variants: withHoverView ? midFrameVariants : void 0, 1925 style: { 1926 height: "100%", 1927 width: "100%", 1928 position: "absolute", 1929 top: 0, 1930 overflow: "hidden", 1931 filter: "blur(60px)", 1932 opacity: 0.1 1933 }, 1934 children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1935 import_components8.__experimentalHStack, 1936 { 1937 spacing: 0, 1938 justify: "flex-start", 1939 style: { 1940 height: "100%", 1941 overflow: "hidden" 1942 }, 1943 children: paletteColors.slice(0, 4).map(({ color }, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1944 "div", 1945 { 1946 style: { 1947 height: "100%", 1948 background: color, 1949 flexGrow: 1 1950 } 1951 }, 1952 index 1953 )) 1954 } 1955 ) 1956 }, 1957 key 1958 ), 1959 ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1960 import_components8.__unstableMotion.div, 1961 { 1962 variants: secondFrameVariants, 1963 style: { 1964 height: "100%", 1965 width: "100%", 1966 overflow: "hidden", 1967 position: "absolute", 1968 top: 0 1969 }, 1970 children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1971 import_components8.__experimentalVStack, 1972 { 1973 spacing: 3 * ratio, 1974 justify: "center", 1975 style: { 1976 height: "100%", 1977 overflow: "hidden", 1978 padding: 10 * ratio, 1979 boxSizing: "border-box" 1980 }, 1981 children: label && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 1982 "div", 1983 { 1984 style: { 1985 fontSize: 40 * ratio, 1986 fontFamily: headingFontFamily, 1987 color: headingColor, 1988 fontWeight: headingFontWeight, 1989 lineHeight: "1em", 1990 textAlign: "center" 1991 }, 1992 children: label 1993 } 1994 ) 1995 } 1996 ) 1997 }, 1998 key 1999 ) 2000 ] 2001 } 2002 ); 2003 } 2004 var preview_styles_default = PreviewStyles; 2005 2006 // packages/global-styles-ui/build-module/screen-root.js 2007 var import_jsx_runtime17 = __toESM(require_jsx_runtime()); 2008 2009 // packages/global-styles-ui/build-module/screen-block-list.js 2010 var import_blocks2 = __toESM(require_blocks()); 2011 var import_i18n6 = __toESM(require_i18n()); 2012 var import_components12 = __toESM(require_components()); 2013 var import_data4 = __toESM(require_data()); 2014 var import_element8 = __toESM(require_element()); 2015 var import_block_editor2 = __toESM(require_block_editor()); 2016 var import_compose2 = __toESM(require_compose()); 2017 import { speak } from "@wordpress/a11y"; 2018 2019 // packages/global-styles-ui/build-module/variations/variations-panel.js 2020 var import_blocks = __toESM(require_blocks()); 2021 var import_data3 = __toESM(require_data()); 2022 var import_components10 = __toESM(require_components()); 2023 var import_jsx_runtime18 = __toESM(require_jsx_runtime()); 2024 function getFilteredBlockStyles(blockStyles, variations) { 2025 return blockStyles?.filter( 2026 (style) => style.source === "block" || variations.includes(style.name) 2027 ) || []; 2028 } 2029 function useBlockVariations(name2) { 2030 const blockStyles = (0, import_data3.useSelect)( 2031 (select) => { 2032 const { getBlockStyles } = select(import_blocks.store); 2033 return getBlockStyles(name2); 2034 }, 2035 [name2] 2036 ); 2037 const [variations] = useStyle("variations", name2); 2038 const variationNames = Object.keys(variations ?? {}); 2039 return getFilteredBlockStyles(blockStyles, variationNames); 2040 } 2041 2042 // packages/global-styles-ui/build-module/screen-header.js 2043 var import_components11 = __toESM(require_components()); 2044 var import_i18n5 = __toESM(require_i18n()); 2045 var import_jsx_runtime19 = __toESM(require_jsx_runtime()); 2046 2047 // packages/global-styles-ui/build-module/screen-block-list.js 2048 var import_jsx_runtime20 = __toESM(require_jsx_runtime()); 2049 var { 2050 useHasDimensionsPanel: useHasDimensionsPanel2, 2051 useHasTypographyPanel: useHasTypographyPanel2, 2052 useHasBorderPanel, 2053 useSettingsForBlockElement: useSettingsForBlockElement2, 2054 useHasColorPanel: useHasColorPanel2 2055 } = unlock(import_block_editor2.privateApis); 2056 function useSortedBlockTypes() { 2057 const blockItems = (0, import_data4.useSelect)( 2058 (select) => select(import_blocks2.store).getBlockTypes(), 2059 [] 2060 ); 2061 const groupByType = (blocks, block) => { 2062 const { core, noncore } = blocks; 2063 const type = block.name.startsWith("core/") ? core : noncore; 2064 type.push(block); 2065 return blocks; 2066 }; 2067 const { core: coreItems, noncore: nonCoreItems } = blockItems.reduce( 2068 groupByType, 2069 { core: [], noncore: [] } 2070 ); 2071 return [...coreItems, ...nonCoreItems]; 2072 } 2073 function useBlockHasGlobalStyles(blockName) { 2074 const [rawSettings] = useSetting("", blockName); 2075 const settings = useSettingsForBlockElement2(rawSettings, blockName); 2076 const hasTypographyPanel = useHasTypographyPanel2(settings); 2077 const hasColorPanel = useHasColorPanel2(settings); 2078 const hasBorderPanel = useHasBorderPanel(settings); 2079 const hasDimensionsPanel = useHasDimensionsPanel2(settings); 2080 const hasLayoutPanel = hasBorderPanel || hasDimensionsPanel; 2081 const hasVariationsPanel = !!useBlockVariations(blockName)?.length; 2082 const hasGlobalStyles = hasTypographyPanel || hasColorPanel || hasLayoutPanel || hasVariationsPanel; 2083 return hasGlobalStyles; 2084 } 2085 function BlockMenuItem({ block }) { 2086 const hasBlockMenuItem = useBlockHasGlobalStyles(block.name); 2087 if (!hasBlockMenuItem) { 2088 return null; 2089 } 2090 return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( 2091 NavigationButtonAsItem, 2092 { 2093 path: "/blocks/" + encodeURIComponent(block.name), 2094 children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_components12.__experimentalHStack, { justify: "flex-start", children: [ 2095 /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_block_editor2.BlockIcon, { icon: block.icon }), 2096 /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_components12.FlexItem, { children: block.title }) 2097 ] }) 2098 } 2099 ); 2100 } 2101 function BlockList({ filterValue }) { 2102 const sortedBlockTypes = useSortedBlockTypes(); 2103 const debouncedSpeak = (0, import_compose2.useDebounce)(speak, 500); 2104 const { isMatchingSearchTerm } = (0, import_data4.useSelect)(import_blocks2.store); 2105 const filteredBlockTypes = !filterValue ? sortedBlockTypes : sortedBlockTypes.filter( 2106 (blockType) => isMatchingSearchTerm(blockType, filterValue) 2107 ); 2108 const blockTypesListRef = (0, import_element8.useRef)(null); 2109 (0, import_element8.useEffect)(() => { 2110 if (!filterValue) { 2111 return; 2112 } 2113 const count = blockTypesListRef.current?.childElementCount || 0; 2114 const resultsFoundMessage = (0, import_i18n6.sprintf)( 2115 /* translators: %d: number of results. */ 2116 (0, import_i18n6._n)("%d result found.", "%d results found.", count), 2117 count 2118 ); 2119 debouncedSpeak(resultsFoundMessage, "polite"); 2120 }, [filterValue, debouncedSpeak]); 2121 return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( 2122 "div", 2123 { 2124 ref: blockTypesListRef, 2125 className: "global-styles-ui-block-types-item-list", 2126 role: "list", 2127 children: filteredBlockTypes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_components12.__experimentalText, { align: "center", as: "p", children: (0, import_i18n6.__)("No blocks found.") }) : filteredBlockTypes.map((block) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( 2128 BlockMenuItem, 2129 { 2130 block 2131 }, 2132 "menu-itemblock-" + block.name 2133 )) 2134 } 2135 ); 2136 } 2137 var MemoizedBlockList = (0, import_element8.memo)(BlockList); 2138 2139 // packages/global-styles-ui/build-module/screen-block.js 2140 var import_blocks4 = __toESM(require_blocks()); 2141 var import_block_editor4 = __toESM(require_block_editor()); 2142 var import_element10 = __toESM(require_element()); 2143 var import_data5 = __toESM(require_data()); 2144 var import_core_data3 = __toESM(require_core_data()); 2145 var import_components15 = __toESM(require_components()); 2146 var import_i18n7 = __toESM(require_i18n()); 2147 2148 // packages/global-styles-ui/build-module/block-preview-panel.js 2149 var import_block_editor3 = __toESM(require_block_editor()); 2150 var import_blocks3 = __toESM(require_blocks()); 2151 var import_components13 = __toESM(require_components()); 2152 var import_element9 = __toESM(require_element()); 2153 var import_jsx_runtime21 = __toESM(require_jsx_runtime()); 2154 2155 // packages/global-styles-ui/build-module/subtitle.js 2156 var import_components14 = __toESM(require_components()); 2157 var import_jsx_runtime22 = __toESM(require_jsx_runtime()); 2158 function Subtitle({ children, level = 2 }) { 2159 return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_components14.__experimentalHeading, { className: "global-styles-ui-subtitle", level, children }); 2160 } 2161 2162 // packages/global-styles-ui/build-module/screen-block.js 2163 var import_jsx_runtime23 = __toESM(require_jsx_runtime()); 2164 var { 2165 useHasDimensionsPanel: useHasDimensionsPanel3, 2166 useHasTypographyPanel: useHasTypographyPanel3, 2167 useHasBorderPanel: useHasBorderPanel2, 2168 useSettingsForBlockElement: useSettingsForBlockElement3, 2169 useHasColorPanel: useHasColorPanel3, 2170 useHasFiltersPanel, 2171 useHasImageSettingsPanel, 2172 useHasBackgroundPanel: useHasBackgroundPanel2, 2173 BackgroundPanel: StylesBackgroundPanel, 2174 BorderPanel: StylesBorderPanel, 2175 ColorPanel: StylesColorPanel, 2176 TypographyPanel: StylesTypographyPanel, 2177 DimensionsPanel: StylesDimensionsPanel, 2178 FiltersPanel: StylesFiltersPanel, 2179 ImageSettingsPanel, 2180 AdvancedPanel: StylesAdvancedPanel 2181 } = unlock(import_block_editor4.privateApis); 2182 2183 // packages/global-styles-ui/build-module/screen-typography.js 2184 var import_i18n21 = __toESM(require_i18n()); 2185 var import_components35 = __toESM(require_components()); 2186 var import_element21 = __toESM(require_element()); 2187 2188 // packages/global-styles-ui/build-module/screen-body.js 2189 var import_components16 = __toESM(require_components()); 2190 var import_jsx_runtime24 = __toESM(require_jsx_runtime()); 2191 2192 // packages/global-styles-ui/build-module/typography-elements.js 2193 var import_i18n8 = __toESM(require_i18n()); 2194 var import_components17 = __toESM(require_components()); 2195 var import_jsx_runtime25 = __toESM(require_jsx_runtime()); 2196 2197 // packages/global-styles-ui/build-module/variations/variations-typography.js 2198 var import_components20 = __toESM(require_components()); 2199 2200 // packages/global-styles-ui/build-module/preview-typography.js 2201 var import_components18 = __toESM(require_components()); 2202 var import_jsx_runtime26 = __toESM(require_jsx_runtime()); 2203 var StylesPreviewTypography = ({ 2204 variation, 2205 isFocused, 2206 withHoverView 2207 }) => { 2208 return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 2209 preview_wrapper_default, 2210 { 2211 label: variation.title, 2212 isFocused, 2213 withHoverView, 2214 children: ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 2215 import_components18.__experimentalHStack, 2216 { 2217 spacing: 10 * ratio, 2218 justify: "center", 2219 style: { 2220 height: "100%", 2221 overflow: "hidden" 2222 }, 2223 children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 2224 PreviewTypography, 2225 { 2226 variation, 2227 fontSize: 85 * ratio 2228 } 2229 ) 2230 }, 2231 key 2232 ) 2233 } 2234 ); 2235 }; 2236 var preview_typography_default = StylesPreviewTypography; 2237 2238 // packages/global-styles-ui/build-module/variations/variation.js 2239 var import_components19 = __toESM(require_components()); 2240 var import_element11 = __toESM(require_element()); 2241 var import_keycodes = __toESM(require_keycodes()); 2242 var import_i18n9 = __toESM(require_i18n()); 2243 var import_jsx_runtime27 = __toESM(require_jsx_runtime()); 2244 function Variation({ 2245 variation, 2246 children, 2247 isPill = false, 2248 properties, 2249 showTooltip = false 2250 }) { 2251 const [isFocused, setIsFocused] = (0, import_element11.useState)(false); 2252 const { 2253 base, 2254 user, 2255 onChange: setUserConfig 2256 } = (0, import_element11.useContext)(GlobalStylesContext); 2257 const context = (0, import_element11.useMemo)(() => { 2258 let merged = mergeGlobalStyles(base, variation); 2259 if (properties) { 2260 merged = filterObjectByProperties(merged, properties); 2261 } 2262 return { 2263 user: variation, 2264 base, 2265 merged, 2266 onChange: () => { 2267 } 2268 }; 2269 }, [variation, base, properties]); 2270 const selectVariation = () => setUserConfig(variation); 2271 const selectOnEnter = (event) => { 2272 if (event.keyCode === import_keycodes.ENTER) { 2273 event.preventDefault(); 2274 selectVariation(); 2275 } 2276 }; 2277 const isActive = (0, import_element11.useMemo)( 2278 () => areGlobalStylesEqual(user, variation), 2279 [user, variation] 2280 ); 2281 let label = variation?.title; 2282 if (variation?.description) { 2283 label = (0, import_i18n9.sprintf)( 2284 /* translators: 1: variation title. 2: variation description. */ 2285 (0, import_i18n9._x)("%1$s (%2$s)", "variation label"), 2286 variation?.title, 2287 variation?.description 2288 ); 2289 } 2290 const content = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 2291 "div", 2292 { 2293 className: clsx_default("global-styles-ui-variations_item", { 2294 "is-active": isActive 2295 }), 2296 role: "button", 2297 onClick: selectVariation, 2298 onKeyDown: selectOnEnter, 2299 tabIndex: 0, 2300 "aria-label": label, 2301 "aria-current": isActive, 2302 onFocus: () => setIsFocused(true), 2303 onBlur: () => setIsFocused(false), 2304 children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 2305 "div", 2306 { 2307 className: clsx_default("global-styles-ui-variations_item-preview", { 2308 "is-pill": isPill 2309 }), 2310 children: children(isFocused) 2311 } 2312 ) 2313 } 2314 ); 2315 return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(GlobalStylesContext.Provider, { value: context, children: showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components19.Tooltip, { text: variation?.title, children: content }) : content }); 2316 } 2317 2318 // packages/global-styles-ui/build-module/variations/variations-typography.js 2319 var import_jsx_runtime28 = __toESM(require_jsx_runtime()); 2320 var propertiesToFilter = ["typography"]; 2321 function TypographyVariations({ 2322 title, 2323 gap = 2 2324 }) { 2325 const typographyVariations = useCurrentMergeThemeStyleVariationsWithUserConfig(propertiesToFilter); 2326 if (typographyVariations?.length <= 1) { 2327 return null; 2328 } 2329 return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_components20.__experimentalVStack, { spacing: 3, children: [ 2330 title && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Subtitle, { level: 3, children: title }), 2331 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 2332 import_components20.__experimentalGrid, 2333 { 2334 columns: 3, 2335 gap, 2336 className: "global-styles-ui-style-variations-container", 2337 children: typographyVariations.map( 2338 (variation, index) => { 2339 return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 2340 Variation, 2341 { 2342 variation, 2343 properties: propertiesToFilter, 2344 showTooltip: true, 2345 children: () => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 2346 preview_typography_default, 2347 { 2348 variation 2349 } 2350 ) 2351 }, 2352 index 2353 ); 2354 } 2355 ) 2356 } 2357 ) 2358 ] }); 2359 } 2360 2361 // packages/global-styles-ui/build-module/font-families.js 2362 var import_i18n19 = __toESM(require_i18n()); 2363 var import_components33 = __toESM(require_components()); 2364 var import_element20 = __toESM(require_element()); 2365 2366 // packages/global-styles-ui/build-module/font-library/context.js 2367 var import_element12 = __toESM(require_element()); 2368 var import_data6 = __toESM(require_data()); 2369 var import_core_data5 = __toESM(require_core_data()); 2370 var import_i18n11 = __toESM(require_i18n()); 2371 2372 // packages/global-styles-ui/build-module/font-library/api.js 2373 var import_api_fetch = __toESM(require_api_fetch()); 2374 var import_core_data4 = __toESM(require_core_data()); 2375 var FONT_FAMILIES_URL = "/wp/v2/font-families"; 2376 function invalidateFontFamilyCache(registry) { 2377 const { receiveEntityRecords } = registry.dispatch(import_core_data4.store); 2378 receiveEntityRecords( 2379 "postType", 2380 "wp_font_family", 2381 [], 2382 void 0, 2383 true 2384 // invalidateCache 2385 ); 2386 } 2387 async function fetchInstallFontFamily(data, registry) { 2388 const config = { 2389 path: FONT_FAMILIES_URL, 2390 method: "POST", 2391 body: data 2392 }; 2393 const response = await (0, import_api_fetch.default)(config); 2394 invalidateFontFamilyCache(registry); 2395 return { 2396 id: response.id, 2397 ...response.font_family_settings, 2398 fontFace: [] 2399 }; 2400 } 2401 async function fetchInstallFontFace(fontFamilyId, data, registry) { 2402 const config = { 2403 path: `$FONT_FAMILIES_URL}/$fontFamilyId}/font-faces`, 2404 method: "POST", 2405 body: data 2406 }; 2407 const response = await (0, import_api_fetch.default)(config); 2408 invalidateFontFamilyCache(registry); 2409 return { 2410 id: response.id, 2411 ...response.font_face_settings 2412 }; 2413 } 2414 2415 // packages/global-styles-ui/build-module/font-library/utils/index.js 2416 var import_components21 = __toESM(require_components()); 2417 2418 // packages/global-styles-ui/build-module/font-library/utils/constants.js 2419 var import_i18n10 = __toESM(require_i18n()); 2420 var ALLOWED_FILE_EXTENSIONS = ["otf", "ttf", "woff", "woff2"]; 2421 var FONT_WEIGHTS = { 2422 100: (0, import_i18n10._x)("Thin", "font weight"), 2423 200: (0, import_i18n10._x)("Extra-light", "font weight"), 2424 300: (0, import_i18n10._x)("Light", "font weight"), 2425 400: (0, import_i18n10._x)("Normal", "font weight"), 2426 500: (0, import_i18n10._x)("Medium", "font weight"), 2427 600: (0, import_i18n10._x)("Semi-bold", "font weight"), 2428 700: (0, import_i18n10._x)("Bold", "font weight"), 2429 800: (0, import_i18n10._x)("Extra-bold", "font weight"), 2430 900: (0, import_i18n10._x)("Black", "font weight") 2431 }; 2432 var FONT_STYLES = { 2433 normal: (0, import_i18n10._x)("Normal", "font style"), 2434 italic: (0, import_i18n10._x)("Italic", "font style") 2435 }; 2436 2437 // packages/global-styles-ui/build-module/font-library/utils/index.js 2438 var { File } = window; 2439 var { kebabCase } = unlock(import_components21.privateApis); 2440 function setUIValuesNeeded(font2, extraValues = {}) { 2441 if (!font2.name && (font2.fontFamily || font2.slug)) { 2442 font2.name = font2.fontFamily || font2.slug; 2443 } 2444 return { 2445 ...font2, 2446 ...extraValues 2447 }; 2448 } 2449 function isUrlEncoded(url) { 2450 if (typeof url !== "string") { 2451 return false; 2452 } 2453 return url !== decodeURIComponent(url); 2454 } 2455 function getFontFaceVariantName(face) { 2456 const weightName = FONT_WEIGHTS[face.fontWeight ?? ""] || face.fontWeight; 2457 const styleName = face.fontStyle === "normal" ? "" : FONT_STYLES[face.fontStyle ?? ""] || face.fontStyle; 2458 return `$weightName} $styleName}`; 2459 } 2460 function mergeFontFaces(existing = [], incoming = []) { 2461 const map = /* @__PURE__ */ new Map(); 2462 for (const face of existing) { 2463 map.set(`$face.fontWeight}$face.fontStyle}`, face); 2464 } 2465 for (const face of incoming) { 2466 map.set(`$face.fontWeight}$face.fontStyle}`, face); 2467 } 2468 return Array.from(map.values()); 2469 } 2470 function mergeFontFamilies(existing = [], incoming = []) { 2471 const map = /* @__PURE__ */ new Map(); 2472 for (const font2 of existing) { 2473 map.set(font2.slug, { ...font2 }); 2474 } 2475 for (const font2 of incoming) { 2476 if (map.has(font2.slug)) { 2477 const { fontFace: incomingFontFaces, ...restIncoming } = font2; 2478 const existingFont = map.get(font2.slug); 2479 const mergedFontFaces = mergeFontFaces( 2480 existingFont.fontFace, 2481 incomingFontFaces 2482 ); 2483 map.set(font2.slug, { 2484 ...restIncoming, 2485 fontFace: mergedFontFaces 2486 }); 2487 } else { 2488 map.set(font2.slug, { ...font2 }); 2489 } 2490 } 2491 return Array.from(map.values()); 2492 } 2493 async function loadFontFaceInBrowser(fontFace, source, addTo = "all") { 2494 let dataSource; 2495 if (typeof source === "string") { 2496 dataSource = `url($source})`; 2497 } else if (source instanceof File) { 2498 dataSource = await source.arrayBuffer(); 2499 } else { 2500 return; 2501 } 2502 const newFont = new window.FontFace( 2503 formatFontFaceName(fontFace.fontFamily), 2504 dataSource, 2505 { 2506 style: fontFace.fontStyle, 2507 weight: String(fontFace.fontWeight) 2508 } 2509 ); 2510 const loadedFace = await newFont.load(); 2511 if (addTo === "document" || addTo === "all") { 2512 document.fonts.add(loadedFace); 2513 } 2514 if (addTo === "iframe" || addTo === "all") { 2515 const iframe = document.querySelector( 2516 'iframe[name="editor-canvas"]' 2517 ); 2518 if (iframe?.contentDocument) { 2519 iframe.contentDocument.fonts.add(loadedFace); 2520 } 2521 } 2522 } 2523 function unloadFontFaceInBrowser(fontFace, removeFrom = "all") { 2524 const unloadFontFace = (fonts) => { 2525 fonts.forEach((f2) => { 2526 if (f2.family === formatFontFaceName(fontFace?.fontFamily) && f2.weight === fontFace?.fontWeight && f2.style === fontFace?.fontStyle) { 2527 fonts.delete(f2); 2528 } 2529 }); 2530 }; 2531 if (removeFrom === "document" || removeFrom === "all") { 2532 unloadFontFace(document.fonts); 2533 } 2534 if (removeFrom === "iframe" || removeFrom === "all") { 2535 const iframe = document.querySelector( 2536 'iframe[name="editor-canvas"]' 2537 ); 2538 if (iframe?.contentDocument) { 2539 unloadFontFace(iframe.contentDocument.fonts); 2540 } 2541 } 2542 } 2543 function getDisplaySrcFromFontFace(input) { 2544 if (!input) { 2545 return; 2546 } 2547 let src; 2548 if (Array.isArray(input)) { 2549 src = input[0]; 2550 } else { 2551 src = input; 2552 } 2553 if (src.startsWith("file:.")) { 2554 return; 2555 } 2556 if (!isUrlEncoded(src)) { 2557 src = encodeURI(src); 2558 } 2559 return src; 2560 } 2561 function makeFontFamilyFormData(fontFamily) { 2562 const formData = new FormData(); 2563 const { fontFace, category, ...familyWithValidParameters } = fontFamily; 2564 const fontFamilySettings = { 2565 ...familyWithValidParameters, 2566 slug: kebabCase(fontFamily.slug) 2567 }; 2568 formData.append( 2569 "font_family_settings", 2570 JSON.stringify(fontFamilySettings) 2571 ); 2572 return formData; 2573 } 2574 function makeFontFacesFormData(font2) { 2575 const fontFacesFormData = (font2?.fontFace ?? []).map( 2576 (item, faceIndex) => { 2577 const face = { ...item }; 2578 const formData = new FormData(); 2579 if (face.file) { 2580 const files = Array.isArray(face.file) ? face.file : [face.file]; 2581 const src = []; 2582 files.forEach((file, key) => { 2583 const fileId = `file-$faceIndex}-$key}`; 2584 formData.append(fileId, file, file.name); 2585 src.push(fileId); 2586 }); 2587 face.src = src.length === 1 ? src[0] : src; 2588 delete face.file; 2589 formData.append("font_face_settings", JSON.stringify(face)); 2590 } else { 2591 formData.append("font_face_settings", JSON.stringify(face)); 2592 } 2593 return formData; 2594 } 2595 ); 2596 return fontFacesFormData; 2597 } 2598 async function batchInstallFontFaces(fontFamilyId, fontFacesData, registry) { 2599 const responses = []; 2600 for (const faceData of fontFacesData) { 2601 try { 2602 const response = await fetchInstallFontFace( 2603 fontFamilyId, 2604 faceData, 2605 registry 2606 ); 2607 responses.push({ status: "fulfilled", value: response }); 2608 } catch (error) { 2609 responses.push({ status: "rejected", reason: error }); 2610 } 2611 } 2612 const results = { 2613 errors: [], 2614 successes: [] 2615 }; 2616 responses.forEach((result, index) => { 2617 if (result.status === "fulfilled" && result.value) { 2618 const response = result.value; 2619 results.successes.push(response); 2620 } else if (result.reason) { 2621 results.errors.push({ 2622 data: fontFacesData[index], 2623 message: result.reason.message 2624 }); 2625 } 2626 }); 2627 return results; 2628 } 2629 async function downloadFontFaceAssets(src) { 2630 src = Array.isArray(src) ? src : [src]; 2631 const files = await Promise.all( 2632 src.map(async (url) => { 2633 return fetch(new Request(url)).then((response) => { 2634 if (!response.ok) { 2635 throw new Error( 2636 `Error downloading font face asset from $url}. Server responded with status: $response.status}` 2637 ); 2638 } 2639 return response.blob(); 2640 }).then((blob) => { 2641 const filename = url.split("/").pop(); 2642 const file = new File([blob], filename, { 2643 type: blob.type 2644 }); 2645 return file; 2646 }); 2647 }) 2648 ); 2649 return files.length === 1 ? files[0] : files; 2650 } 2651 function checkFontFaceInstalled(fontFace, collection) { 2652 return -1 !== collection.findIndex((collectionFontFace) => { 2653 return collectionFontFace.fontWeight === fontFace.fontWeight && collectionFontFace.fontStyle === fontFace.fontStyle; 2654 }); 2655 } 2656 2657 // packages/global-styles-ui/build-module/font-library/utils/set-immutably.js 2658 function setImmutably2(object, path, value) { 2659 path = Array.isArray(path) ? [...path] : [path]; 2660 object = Array.isArray(object) ? [...object] : { ...object }; 2661 const leaf = path.pop(); 2662 let prev = object; 2663 for (const key of path) { 2664 const lvl = prev[key]; 2665 prev = prev[key] = Array.isArray(lvl) ? [...lvl] : { ...lvl }; 2666 } 2667 prev[leaf] = value; 2668 return object; 2669 } 2670 2671 // packages/global-styles-ui/build-module/font-library/utils/toggleFont.js 2672 function toggleFont(font2, face, initialfonts = []) { 2673 const isFontActivated = (f2) => f2.slug === font2.slug; 2674 const getActivatedFont = (fonts) => fonts.find(isFontActivated); 2675 const toggleEntireFontFamily = (activatedFont2) => { 2676 if (!activatedFont2) { 2677 return [...initialfonts, font2]; 2678 } 2679 return initialfonts.filter( 2680 (f2) => !isFontActivated(f2) 2681 ); 2682 }; 2683 const toggleFontVariant = (activatedFont2) => { 2684 const isFaceActivated = (f2) => f2.fontWeight === face.fontWeight && f2.fontStyle === face.fontStyle; 2685 if (!activatedFont2) { 2686 return [...initialfonts, { ...font2, fontFace: [face] }]; 2687 } 2688 let newFontFaces = activatedFont2.fontFace || []; 2689 if (newFontFaces.find(isFaceActivated)) { 2690 newFontFaces = newFontFaces.filter( 2691 (f2) => !isFaceActivated(f2) 2692 ); 2693 } else { 2694 newFontFaces = [...newFontFaces, face]; 2695 } 2696 if (newFontFaces.length === 0) { 2697 return initialfonts.filter( 2698 (f2) => !isFontActivated(f2) 2699 ); 2700 } 2701 return initialfonts.map( 2702 (f2) => isFontActivated(f2) ? { ...f2, fontFace: newFontFaces } : f2 2703 ); 2704 }; 2705 const activatedFont = getActivatedFont(initialfonts); 2706 if (!face) { 2707 return toggleEntireFontFamily(activatedFont); 2708 } 2709 return toggleFontVariant(activatedFont); 2710 } 2711 2712 // packages/global-styles-ui/build-module/font-library/context.js 2713 var import_jsx_runtime29 = __toESM(require_jsx_runtime()); 2714 var FontLibraryContext = (0, import_element12.createContext)( 2715 {} 2716 ); 2717 FontLibraryContext.displayName = "FontLibraryContext"; 2718 function FontLibraryProvider({ children }) { 2719 const registry = (0, import_data6.useRegistry)(); 2720 const { saveEntityRecord, deleteEntityRecord } = (0, import_data6.useDispatch)(import_core_data5.store); 2721 const { globalStylesId } = (0, import_data6.useSelect)((select) => { 2722 const { __experimentalGetCurrentGlobalStylesId } = select(import_core_data5.store); 2723 return { globalStylesId: __experimentalGetCurrentGlobalStylesId() }; 2724 }, []); 2725 const globalStyles = (0, import_core_data5.useEntityRecord)( 2726 "root", 2727 "globalStyles", 2728 globalStylesId 2729 ); 2730 const [isInstalling, setIsInstalling] = (0, import_element12.useState)(false); 2731 const { records: libraryPosts = [], isResolving: isResolvingLibrary } = (0, import_core_data5.useEntityRecords)( 2732 "postType", 2733 "wp_font_family", 2734 { 2735 _embed: true 2736 } 2737 ); 2738 const libraryFonts = (libraryPosts || []).map((fontFamilyPost) => { 2739 return { 2740 id: fontFamilyPost.id, 2741 ...fontFamilyPost.font_family_settings || {}, 2742 fontFace: fontFamilyPost?._embedded?.font_faces?.map( 2743 (face) => face.font_face_settings 2744 ) || [] 2745 }; 2746 }) || []; 2747 const [fontFamilies, setFontFamilies] = useSetting("typography.fontFamilies"); 2748 const saveFontFamilies = async (fonts) => { 2749 if (!globalStyles.record) { 2750 return; 2751 } 2752 const updatedGlobalStyles = globalStyles.record; 2753 const finalGlobalStyles = setImmutably2( 2754 updatedGlobalStyles ?? {}, 2755 ["settings", "typography", "fontFamilies"], 2756 fonts 2757 ); 2758 await saveEntityRecord("root", "globalStyles", finalGlobalStyles); 2759 }; 2760 const [modalTabOpen, setModalTabOpen] = (0, import_element12.useState)(""); 2761 const [libraryFontSelected, setLibraryFontSelected] = (0, import_element12.useState)(void 0); 2762 const themeFonts = fontFamilies?.theme ? fontFamilies.theme.map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; 2763 const customFonts = fontFamilies?.custom ? fontFamilies.custom.map((f2) => setUIValuesNeeded(f2, { source: "custom" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; 2764 const baseCustomFonts = libraryFonts ? libraryFonts.map((f2) => setUIValuesNeeded(f2, { source: "custom" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; 2765 (0, import_element12.useEffect)(() => { 2766 if (!modalTabOpen) { 2767 setLibraryFontSelected(void 0); 2768 } 2769 }, [modalTabOpen]); 2770 const handleSetLibraryFontSelected = (font2) => { 2771 if (!font2) { 2772 setLibraryFontSelected(void 0); 2773 return; 2774 } 2775 const fonts = font2.source === "theme" ? themeFonts : baseCustomFonts; 2776 const fontSelected = fonts.find((f2) => f2.slug === font2.slug); 2777 setLibraryFontSelected({ 2778 ...fontSelected || font2, 2779 source: font2.source 2780 }); 2781 }; 2782 const [loadedFontUrls] = (0, import_element12.useState)(/* @__PURE__ */ new Set()); 2783 const getAvailableFontsOutline = (availableFontFamilies) => { 2784 const outline = availableFontFamilies.reduce( 2785 (acc, font2) => { 2786 const availableFontFaces = font2?.fontFace && font2.fontFace?.length > 0 ? font2?.fontFace.map( 2787 (face) => `$face.fontStyle ?? ""}$face.fontWeight ?? ""}` 2788 ) : ["normal400"]; 2789 acc[font2.slug] = availableFontFaces; 2790 return acc; 2791 }, 2792 {} 2793 ); 2794 return outline; 2795 }; 2796 const getActivatedFontsOutline = (source) => { 2797 switch (source) { 2798 case "theme": 2799 return getAvailableFontsOutline(themeFonts); 2800 case "custom": 2801 default: 2802 return getAvailableFontsOutline(customFonts); 2803 } 2804 }; 2805 const isFontActivated = (slug, style, weight, source) => { 2806 if (!style && !weight) { 2807 return !!getActivatedFontsOutline(source)[slug]; 2808 } 2809 return !!getActivatedFontsOutline(source)[slug]?.includes( 2810 (style ?? "") + (weight ?? "") 2811 ); 2812 }; 2813 const getFontFacesActivated = (slug, source) => { 2814 return getActivatedFontsOutline(source)[slug] || []; 2815 }; 2816 async function installFonts(fontFamiliesToInstall) { 2817 setIsInstalling(true); 2818 try { 2819 const fontFamiliesToActivate = []; 2820 let installationErrors = []; 2821 for (const fontFamilyToInstall of fontFamiliesToInstall) { 2822 let isANewFontFamily = false; 2823 const fontFamilyRecords = await (0, import_data6.resolveSelect)( 2824 import_core_data5.store 2825 ).getEntityRecords("postType", "wp_font_family", { 2826 slug: fontFamilyToInstall.slug, 2827 per_page: 1, 2828 _embed: true 2829 }); 2830 const fontFamilyPost = fontFamilyRecords && fontFamilyRecords.length > 0 ? fontFamilyRecords[0] : null; 2831 let installedFontFamily = fontFamilyPost ? { 2832 id: fontFamilyPost.id, 2833 ...fontFamilyPost.font_family_settings, 2834 fontFace: (fontFamilyPost?._embedded?.font_faces ?? []).map( 2835 (face) => face.font_face_settings 2836 ) || [] 2837 } : null; 2838 if (!installedFontFamily) { 2839 isANewFontFamily = true; 2840 installedFontFamily = await fetchInstallFontFamily( 2841 makeFontFamilyFormData(fontFamilyToInstall), 2842 registry 2843 ); 2844 } 2845 const alreadyInstalledFontFaces = installedFontFamily.fontFace && fontFamilyToInstall.fontFace ? installedFontFamily.fontFace.filter( 2846 (fontFaceToInstall) => fontFaceToInstall && fontFamilyToInstall.fontFace && checkFontFaceInstalled( 2847 fontFaceToInstall, 2848 fontFamilyToInstall.fontFace 2849 ) 2850 ) : []; 2851 if (installedFontFamily.fontFace && fontFamilyToInstall.fontFace) { 2852 fontFamilyToInstall.fontFace = fontFamilyToInstall.fontFace.filter( 2853 (fontFaceToInstall) => !checkFontFaceInstalled( 2854 fontFaceToInstall, 2855 installedFontFamily.fontFace 2856 ) 2857 ); 2858 } 2859 let successfullyInstalledFontFaces = []; 2860 let unsuccessfullyInstalledFontFaces = []; 2861 if (fontFamilyToInstall?.fontFace?.length ?? 0 > 0) { 2862 const response = await batchInstallFontFaces( 2863 installedFontFamily.id, 2864 makeFontFacesFormData( 2865 fontFamilyToInstall 2866 ), 2867 registry 2868 ); 2869 successfullyInstalledFontFaces = response?.successes; 2870 unsuccessfullyInstalledFontFaces = response?.errors; 2871 } 2872 if (successfullyInstalledFontFaces?.length > 0 || alreadyInstalledFontFaces?.length > 0) { 2873 installedFontFamily.fontFace = [ 2874 ...successfullyInstalledFontFaces 2875 ]; 2876 fontFamiliesToActivate.push(installedFontFamily); 2877 } 2878 if (installedFontFamily && !fontFamilyToInstall?.fontFace?.length) { 2879 fontFamiliesToActivate.push(installedFontFamily); 2880 } 2881 if (isANewFontFamily && (fontFamilyToInstall?.fontFace?.length ?? 0) > 0 && successfullyInstalledFontFaces?.length === 0) { 2882 await deleteEntityRecord( 2883 "postType", 2884 "wp_font_family", 2885 installedFontFamily.id, 2886 { force: true } 2887 ); 2888 } 2889 installationErrors = installationErrors.concat( 2890 unsuccessfullyInstalledFontFaces 2891 ); 2892 } 2893 const installationErrorMessages = installationErrors.reduce( 2894 (unique, item) => unique.includes(item.message) ? unique : [...unique, item.message], 2895 [] 2896 ); 2897 if (fontFamiliesToActivate.length > 0) { 2898 const activeFonts = activateCustomFontFamilies( 2899 fontFamiliesToActivate 2900 ); 2901 await saveFontFamilies(activeFonts); 2902 } 2903 if (installationErrorMessages.length > 0) { 2904 const installError = new Error((0, import_i18n11.__)("There was an error installing fonts.")); 2905 installError.installationErrors = installationErrorMessages; 2906 throw installError; 2907 } 2908 } finally { 2909 setIsInstalling(false); 2910 } 2911 } 2912 async function uninstallFontFamily(fontFamilyToUninstall) { 2913 if (!fontFamilyToUninstall?.id) { 2914 throw new Error((0, import_i18n11.__)("Font family to uninstall is not defined.")); 2915 } 2916 try { 2917 await deleteEntityRecord( 2918 "postType", 2919 "wp_font_family", 2920 fontFamilyToUninstall.id, 2921 { force: true } 2922 ); 2923 const activeFonts = deactivateFontFamily(fontFamilyToUninstall); 2924 await saveFontFamilies(activeFonts); 2925 return { deleted: true }; 2926 } catch (error) { 2927 console.error( 2928 `There was an error uninstalling the font family:`, 2929 error 2930 ); 2931 throw error; 2932 } 2933 } 2934 const deactivateFontFamily = (font2) => { 2935 const initialCustomFonts = fontFamilies?.[font2.source ?? ""] ?? []; 2936 const newCustomFonts = initialCustomFonts.filter( 2937 (f2) => f2.slug !== font2.slug 2938 ); 2939 const activeFonts = { 2940 ...fontFamilies, 2941 [font2.source ?? ""]: newCustomFonts 2942 }; 2943 setFontFamilies(activeFonts); 2944 if (font2.fontFace) { 2945 font2.fontFace.forEach((face) => { 2946 unloadFontFaceInBrowser(face, "all"); 2947 }); 2948 } 2949 return activeFonts; 2950 }; 2951 const activateCustomFontFamilies = (fontsToAdd) => { 2952 const fontsToActivate = cleanFontsForSave(fontsToAdd); 2953 const activeFonts = { 2954 ...fontFamilies, 2955 // Merge the existing custom fonts with the new fonts. 2956 custom: mergeFontFamilies(fontFamilies?.custom, fontsToActivate) 2957 }; 2958 setFontFamilies(activeFonts); 2959 loadFontsInBrowser(fontsToActivate); 2960 return activeFonts; 2961 }; 2962 const cleanFontsForSave = (fonts) => { 2963 return fonts.map(({ id: _familyDbId, fontFace, ...font2 }) => ({ 2964 ...font2, 2965 ...fontFace && fontFace.length > 0 ? { 2966 fontFace: fontFace.map( 2967 ({ id: _faceDbId, ...face }) => face 2968 ) 2969 } : {} 2970 })); 2971 }; 2972 const loadFontsInBrowser = (fonts) => { 2973 fonts.forEach((font2) => { 2974 if (font2.fontFace) { 2975 font2.fontFace.forEach((face) => { 2976 const displaySrc = getDisplaySrcFromFontFace( 2977 face?.src ?? "" 2978 ); 2979 if (displaySrc) { 2980 loadFontFaceInBrowser(face, displaySrc, "all"); 2981 } 2982 }); 2983 } 2984 }); 2985 }; 2986 const toggleActivateFont = (font2, face) => { 2987 const initialFonts = fontFamilies?.[font2.source ?? ""] ?? []; 2988 const newFonts = toggleFont(font2, face, initialFonts); 2989 setFontFamilies({ 2990 ...fontFamilies, 2991 [font2.source ?? ""]: newFonts 2992 }); 2993 const isFaceActivated = isFontActivated( 2994 font2.slug, 2995 face?.fontStyle ?? "", 2996 face?.fontWeight ?? "", 2997 font2.source ?? "custom" 2998 ); 2999 if (face && isFaceActivated) { 3000 unloadFontFaceInBrowser(face, "all"); 3001 } else { 3002 const displaySrc = getDisplaySrcFromFontFace(face?.src ?? ""); 3003 if (face && displaySrc) { 3004 loadFontFaceInBrowser(face, displaySrc, "all"); 3005 } 3006 } 3007 }; 3008 const loadFontFaceAsset = async (fontFace) => { 3009 if (!fontFace.src) { 3010 return; 3011 } 3012 const src = getDisplaySrcFromFontFace(fontFace.src); 3013 if (!src || loadedFontUrls.has(src)) { 3014 return; 3015 } 3016 loadFontFaceInBrowser(fontFace, src, "document"); 3017 loadedFontUrls.add(src); 3018 }; 3019 return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( 3020 FontLibraryContext.Provider, 3021 { 3022 value: { 3023 libraryFontSelected, 3024 handleSetLibraryFontSelected, 3025 fontFamilies: fontFamilies ?? {}, 3026 baseCustomFonts, 3027 isFontActivated, 3028 getFontFacesActivated, 3029 loadFontFaceAsset, 3030 installFonts, 3031 uninstallFontFamily, 3032 toggleActivateFont, 3033 getAvailableFontsOutline, 3034 modalTabOpen, 3035 setModalTabOpen, 3036 saveFontFamilies, 3037 isResolvingLibrary, 3038 isInstalling 3039 }, 3040 children 3041 } 3042 ); 3043 } 3044 var context_default = FontLibraryProvider; 3045 3046 // packages/global-styles-ui/build-module/font-library/modal.js 3047 var import_i18n17 = __toESM(require_i18n()); 3048 var import_components31 = __toESM(require_components()); 3049 var import_core_data8 = __toESM(require_core_data()); 3050 var import_data8 = __toESM(require_data()); 3051 3052 // packages/global-styles-ui/build-module/font-library/installed-fonts.js 3053 var import_components25 = __toESM(require_components()); 3054 var import_core_data6 = __toESM(require_core_data()); 3055 var import_data7 = __toESM(require_data()); 3056 var import_element15 = __toESM(require_element()); 3057 var import_i18n13 = __toESM(require_i18n()); 3058 3059 // packages/global-styles-ui/build-module/font-library/font-card.js 3060 var import_i18n12 = __toESM(require_i18n()); 3061 var import_components23 = __toESM(require_components()); 3062 3063 // packages/global-styles-ui/build-module/font-library/font-demo.js 3064 var import_components22 = __toESM(require_components()); 3065 var import_element13 = __toESM(require_element()); 3066 var import_jsx_runtime30 = __toESM(require_jsx_runtime()); 3067 function getPreviewUrl(fontFace) { 3068 if (fontFace.preview) { 3069 return fontFace.preview; 3070 } 3071 if (fontFace.src) { 3072 return Array.isArray(fontFace.src) ? fontFace.src[0] : fontFace.src; 3073 } 3074 return void 0; 3075 } 3076 function getDisplayFontFace(font2) { 3077 if ("fontStyle" in font2 && font2.fontStyle || "fontWeight" in font2 && font2.fontWeight) { 3078 return font2; 3079 } 3080 if ("fontFace" in font2 && font2.fontFace && font2.fontFace.length) { 3081 return font2.fontFace.find( 3082 (face) => face.fontStyle === "normal" && face.fontWeight === "400" 3083 ) || font2.fontFace[0]; 3084 } 3085 return { 3086 fontStyle: "normal", 3087 fontWeight: "400", 3088 fontFamily: font2.fontFamily 3089 }; 3090 } 3091 function FontDemo({ font: font2, text }) { 3092 const ref = (0, import_element13.useRef)(null); 3093 const fontFace = getDisplayFontFace(font2); 3094 const style = getFamilyPreviewStyle(font2); 3095 text = text || ("name" in font2 ? font2.name : ""); 3096 const customPreviewUrl = font2.preview; 3097 const [isIntersecting, setIsIntersecting] = (0, import_element13.useState)(false); 3098 const [isAssetLoaded, setIsAssetLoaded] = (0, import_element13.useState)(false); 3099 const { loadFontFaceAsset } = (0, import_element13.useContext)(FontLibraryContext); 3100 const previewUrl = customPreviewUrl ?? getPreviewUrl(fontFace); 3101 const isPreviewImage = previewUrl && previewUrl.match(/\.(png|jpg|jpeg|gif|svg)$/i); 3102 const faceStyles = getFacePreviewStyle(fontFace); 3103 const textDemoStyle = { 3104 fontSize: "18px", 3105 lineHeight: 1, 3106 opacity: isAssetLoaded ? "1" : "0", 3107 ...style, 3108 ...faceStyles 3109 }; 3110 (0, import_element13.useEffect)(() => { 3111 const observer = new window.IntersectionObserver(([entry]) => { 3112 setIsIntersecting(entry.isIntersecting); 3113 }, {}); 3114 if (ref.current) { 3115 observer.observe(ref.current); 3116 } 3117 return () => observer.disconnect(); 3118 }, [ref]); 3119 (0, import_element13.useEffect)(() => { 3120 const loadAsset = async () => { 3121 if (isIntersecting) { 3122 if (!isPreviewImage && fontFace.src) { 3123 await loadFontFaceAsset(fontFace); 3124 } 3125 setIsAssetLoaded(true); 3126 } 3127 }; 3128 loadAsset(); 3129 }, [fontFace, isIntersecting, loadFontFaceAsset, isPreviewImage]); 3130 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { ref, children: isPreviewImage ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( 3131 "img", 3132 { 3133 src: previewUrl, 3134 loading: "lazy", 3135 alt: text, 3136 className: "font-library__font-variant_demo-image" 3137 } 3138 ) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( 3139 import_components22.__experimentalText, 3140 { 3141 style: textDemoStyle, 3142 className: "font-library__font-variant_demo-text", 3143 children: text 3144 } 3145 ) }); 3146 } 3147 var font_demo_default = FontDemo; 3148 3149 // packages/global-styles-ui/build-module/font-library/font-card.js 3150 var import_jsx_runtime31 = __toESM(require_jsx_runtime()); 3151 function FontCard({ 3152 font: font2, 3153 onClick, 3154 variantsText, 3155 navigatorPath 3156 }) { 3157 const variantsCount = font2.fontFace?.length || 1; 3158 const style = { 3159 cursor: !!onClick ? "pointer" : "default" 3160 }; 3161 const navigator = (0, import_components23.useNavigator)(); 3162 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( 3163 import_components23.Button, 3164 { 3165 __next40pxDefaultSize: true, 3166 onClick: () => { 3167 onClick(); 3168 if (navigatorPath) { 3169 navigator.goTo(navigatorPath); 3170 } 3171 }, 3172 style, 3173 className: "font-library__font-card", 3174 children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_components23.Flex, { justify: "space-between", wrap: false, children: [ 3175 /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(font_demo_default, { font: font2 }), 3176 /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_components23.Flex, { justify: "flex-end", children: [ 3177 /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components23.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components23.__experimentalText, { className: "font-library__font-card__count", children: variantsText || (0, import_i18n12.sprintf)( 3178 /* translators: %d: Number of font variants. */ 3179 (0, import_i18n12._n)( 3180 "%d variant", 3181 "%d variants", 3182 variantsCount 3183 ), 3184 variantsCount 3185 ) }) }), 3186 /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components23.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(icon_default, { icon: (0, import_i18n12.isRTL)() ? chevron_left_default : chevron_right_default }) }) 3187 ] }) 3188 ] }) 3189 } 3190 ); 3191 } 3192 var font_card_default = FontCard; 3193 3194 // packages/global-styles-ui/build-module/font-library/library-font-variant.js 3195 var import_element14 = __toESM(require_element()); 3196 var import_components24 = __toESM(require_components()); 3197 var import_jsx_runtime32 = __toESM(require_jsx_runtime()); 3198 function LibraryFontVariant({ 3199 face, 3200 font: font2 3201 }) { 3202 const { isFontActivated, toggleActivateFont } = (0, import_element14.useContext)(FontLibraryContext); 3203 const isInstalled = (font2?.fontFace?.length ?? 0) > 0 ? isFontActivated( 3204 font2.slug, 3205 face.fontStyle, 3206 face.fontWeight, 3207 font2.source 3208 ) : isFontActivated(font2.slug, void 0, void 0, font2.source); 3209 const handleToggleActivation = () => { 3210 if ((font2?.fontFace?.length ?? 0) > 0) { 3211 toggleActivateFont(font2, face); 3212 return; 3213 } 3214 toggleActivateFont(font2); 3215 }; 3216 const displayName = font2.name + " " + getFontFaceVariantName(face); 3217 const checkboxId = (0, import_element14.useId)(); 3218 return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "font-library__font-card", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_components24.Flex, { justify: "flex-start", align: "center", gap: "1rem", children: [ 3219 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( 3220 import_components24.CheckboxControl, 3221 { 3222 checked: isInstalled, 3223 onChange: handleToggleActivation, 3224 id: checkboxId 3225 } 3226 ), 3227 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("label", { htmlFor: checkboxId, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( 3228 font_demo_default, 3229 { 3230 font: face, 3231 text: displayName, 3232 onClick: handleToggleActivation 3233 } 3234 ) }) 3235 ] }) }); 3236 } 3237 var library_font_variant_default = LibraryFontVariant; 3238 3239 // packages/global-styles-ui/build-module/font-library/utils/sort-font-faces.js 3240 function getNumericFontWeight(value) { 3241 switch (value) { 3242 case "normal": 3243 return 400; 3244 case "bold": 3245 return 700; 3246 case "bolder": 3247 return 500; 3248 case "lighter": 3249 return 300; 3250 default: 3251 return parseInt(value, 10); 3252 } 3253 } 3254 function sortFontFaces(faces) { 3255 return faces.sort((a2, b2) => { 3256 if (a2.fontStyle === "normal" && b2.fontStyle !== "normal") { 3257 return -1; 3258 } 3259 if (b2.fontStyle === "normal" && a2.fontStyle !== "normal") { 3260 return 1; 3261 } 3262 if (a2.fontStyle === b2.fontStyle) { 3263 return getNumericFontWeight(a2.fontWeight?.toString() ?? "normal") - getNumericFontWeight(b2.fontWeight?.toString() ?? "normal"); 3264 } 3265 if (!a2.fontStyle || !b2.fontStyle) { 3266 return !a2.fontStyle ? 1 : -1; 3267 } 3268 return a2.fontStyle.localeCompare(b2.fontStyle); 3269 }); 3270 } 3271 3272 // packages/global-styles-ui/build-module/font-library/installed-fonts.js 3273 var import_jsx_runtime33 = __toESM(require_jsx_runtime()); 3274 function InstalledFonts() { 3275 const { 3276 baseCustomFonts, 3277 libraryFontSelected, 3278 handleSetLibraryFontSelected, 3279 uninstallFontFamily, 3280 isResolvingLibrary, 3281 isInstalling, 3282 saveFontFamilies, 3283 getFontFacesActivated 3284 } = (0, import_element15.useContext)(FontLibraryContext); 3285 const [fontFamilies, setFontFamilies] = useSetting("typography.fontFamilies"); 3286 const [isConfirmDeleteOpen, setIsConfirmDeleteOpen] = (0, import_element15.useState)(false); 3287 const [notice, setNotice] = (0, import_element15.useState)(null); 3288 const [baseFontFamilies] = useSetting("typography.fontFamilies", void 0, "base"); 3289 const globalStylesId = (0, import_data7.useSelect)((select) => { 3290 const { __experimentalGetCurrentGlobalStylesId } = select(import_core_data6.store); 3291 return __experimentalGetCurrentGlobalStylesId(); 3292 }, []); 3293 const globalStyles = (0, import_core_data6.useEntityRecord)( 3294 "root", 3295 "globalStyles", 3296 globalStylesId 3297 ); 3298 const fontFamiliesHasChanges = !!globalStyles?.edits?.settings?.typography?.fontFamilies; 3299 const themeFonts = fontFamilies?.theme ? fontFamilies.theme.map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; 3300 const themeFontsSlugs = new Set(themeFonts.map((f2) => f2.slug)); 3301 const baseThemeFonts = baseFontFamilies?.theme ? themeFonts.concat( 3302 baseFontFamilies.theme.filter((f2) => !themeFontsSlugs.has(f2.slug)).map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) 3303 ) : []; 3304 const customFontFamilyId = libraryFontSelected?.source === "custom" && libraryFontSelected?.id; 3305 const canUserDelete = (0, import_data7.useSelect)( 3306 (select) => { 3307 const { canUser } = select(import_core_data6.store); 3308 return customFontFamilyId && canUser("delete", { 3309 kind: "postType", 3310 name: "wp_font_family", 3311 id: customFontFamilyId 3312 }); 3313 }, 3314 [customFontFamilyId] 3315 ); 3316 const shouldDisplayDeleteButton = !!libraryFontSelected && libraryFontSelected?.source !== "theme" && canUserDelete; 3317 const handleUninstallClick = () => { 3318 setIsConfirmDeleteOpen(true); 3319 }; 3320 const handleUpdate = async () => { 3321 setNotice(null); 3322 try { 3323 await saveFontFamilies(fontFamilies); 3324 setNotice({ 3325 type: "success", 3326 message: (0, import_i18n13.__)("Font family updated successfully.") 3327 }); 3328 } catch (error) { 3329 setNotice({ 3330 type: "error", 3331 message: (0, import_i18n13.sprintf)( 3332 /* translators: %s: error message */ 3333 (0, import_i18n13.__)("There was an error updating the font family. %s"), 3334 error.message 3335 ) 3336 }); 3337 } 3338 }; 3339 const getFontFacesToDisplay = (font2) => { 3340 if (!font2) { 3341 return []; 3342 } 3343 if (!font2.fontFace || !font2.fontFace.length) { 3344 return [ 3345 { 3346 fontFamily: font2.fontFamily, 3347 fontStyle: "normal", 3348 fontWeight: "400" 3349 } 3350 ]; 3351 } 3352 return sortFontFaces(font2.fontFace); 3353 }; 3354 const getFontCardVariantsText = (font2) => { 3355 const variantsInstalled = font2?.fontFace && (font2?.fontFace?.length ?? 0) > 0 ? font2.fontFace.length : 1; 3356 const variantsActive = getFontFacesActivated( 3357 font2.slug, 3358 font2.source 3359 ).length; 3360 return (0, import_i18n13.sprintf)( 3361 /* translators: 1: Active font variants, 2: Total font variants. */ 3362 (0, import_i18n13.__)("%1$d/%2$d variants active"), 3363 variantsActive, 3364 variantsInstalled 3365 ); 3366 }; 3367 (0, import_element15.useEffect)(() => { 3368 handleSetLibraryFontSelected(libraryFontSelected); 3369 }, []); 3370 const activeFontsCount = libraryFontSelected ? getFontFacesActivated( 3371 libraryFontSelected.slug, 3372 libraryFontSelected.source 3373 ).length : 0; 3374 const selectedFontsCount = libraryFontSelected?.fontFace?.length ?? (libraryFontSelected?.fontFamily ? 1 : 0); 3375 const isIndeterminate = activeFontsCount > 0 && activeFontsCount !== selectedFontsCount; 3376 const isSelectAllChecked = activeFontsCount === selectedFontsCount; 3377 const toggleSelectAll = () => { 3378 if (!libraryFontSelected || !libraryFontSelected?.source) { 3379 return; 3380 } 3381 const initialFonts = fontFamilies?.[libraryFontSelected.source]?.filter( 3382 (f2) => f2.slug !== libraryFontSelected.slug 3383 ) ?? []; 3384 const newFonts = isSelectAllChecked ? initialFonts : [...initialFonts, libraryFontSelected]; 3385 setFontFamilies({ 3386 ...fontFamilies, 3387 [libraryFontSelected.source]: newFonts 3388 }); 3389 if (libraryFontSelected.fontFace) { 3390 libraryFontSelected.fontFace.forEach((face) => { 3391 if (isSelectAllChecked) { 3392 unloadFontFaceInBrowser(face, "all"); 3393 } else { 3394 const displaySrc = getDisplaySrcFromFontFace( 3395 face?.src ?? "" 3396 ); 3397 if (displaySrc) { 3398 loadFontFaceInBrowser(face, displaySrc, "all"); 3399 } 3400 } 3401 }); 3402 } 3403 }; 3404 const hasFonts = baseThemeFonts.length > 0 || baseCustomFonts.length > 0; 3405 return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ 3406 isResolvingLibrary && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "font-library__loading", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.ProgressBar, {}) }), 3407 !isResolvingLibrary && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ 3408 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)( 3409 import_components25.Navigator, 3410 { 3411 initialPath: libraryFontSelected ? "/fontFamily" : "/", 3412 children: [ 3413 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.Navigator.Screen, { path: "/", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalVStack, { spacing: "8", children: [ 3414 notice && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3415 import_components25.Notice, 3416 { 3417 status: notice.type, 3418 onRemove: () => setNotice(null), 3419 children: notice.message 3420 } 3421 ), 3422 !hasFonts && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalText, { as: "p", children: (0, import_i18n13.__)("No fonts installed.") }), 3423 baseThemeFonts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalVStack, { children: [ 3424 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h2", { 3425 className: "font-library__fonts-title", 3426 /* translators: Heading for a list of fonts provided by the theme. */ 3427 children: (0, import_i18n13._x)("Theme", "font source") 3428 }), 3429 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3430 "ul", 3431 { 3432 role: "list", 3433 className: "font-library__fonts-list", 3434 children: baseThemeFonts.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3435 "li", 3436 { 3437 className: "font-library__fonts-list-item", 3438 children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3439 font_card_default, 3440 { 3441 font: font2, 3442 navigatorPath: "/fontFamily", 3443 variantsText: getFontCardVariantsText( 3444 font2 3445 ), 3446 onClick: () => { 3447 setNotice(null); 3448 handleSetLibraryFontSelected( 3449 font2 3450 ); 3451 } 3452 } 3453 ) 3454 }, 3455 font2.slug 3456 )) 3457 } 3458 ) 3459 ] }), 3460 baseCustomFonts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalVStack, { children: [ 3461 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h2", { 3462 className: "font-library__fonts-title", 3463 /* translators: Heading for a list of fonts installed by the user. */ 3464 children: (0, import_i18n13._x)("Custom", "font source") 3465 }), 3466 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3467 "ul", 3468 { 3469 role: "list", 3470 className: "font-library__fonts-list", 3471 children: baseCustomFonts.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3472 "li", 3473 { 3474 className: "font-library__fonts-list-item", 3475 children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3476 font_card_default, 3477 { 3478 font: font2, 3479 navigatorPath: "/fontFamily", 3480 variantsText: getFontCardVariantsText( 3481 font2 3482 ), 3483 onClick: () => { 3484 setNotice(null); 3485 handleSetLibraryFontSelected( 3486 font2 3487 ); 3488 } 3489 } 3490 ) 3491 }, 3492 font2.slug 3493 )) 3494 } 3495 ) 3496 ] }) 3497 ] }) }), 3498 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.Navigator.Screen, { path: "/fontFamily", children: [ 3499 libraryFontSelected && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3500 ConfirmDeleteDialog, 3501 { 3502 font: libraryFontSelected, 3503 isOpen: isConfirmDeleteOpen, 3504 setIsOpen: setIsConfirmDeleteOpen, 3505 setNotice, 3506 uninstallFontFamily, 3507 handleSetLibraryFontSelected 3508 } 3509 ), 3510 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.Flex, { justify: "flex-start", children: [ 3511 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3512 import_components25.Navigator.BackButton, 3513 { 3514 icon: (0, import_i18n13.isRTL)() ? chevron_right_default : chevron_left_default, 3515 size: "small", 3516 onClick: () => { 3517 handleSetLibraryFontSelected( 3518 void 0 3519 ); 3520 setNotice(null); 3521 }, 3522 label: (0, import_i18n13.__)("Back") 3523 } 3524 ), 3525 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3526 import_components25.__experimentalHeading, 3527 { 3528 level: 2, 3529 size: 13, 3530 className: "global-styles-ui-header", 3531 children: libraryFontSelected?.name 3532 } 3533 ) 3534 ] }), 3535 notice && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ 3536 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 1 }), 3537 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3538 import_components25.Notice, 3539 { 3540 status: notice.type, 3541 onRemove: () => setNotice(null), 3542 children: notice.message 3543 } 3544 ), 3545 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 1 }) 3546 ] }), 3547 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 4 }), 3548 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalText, { children: (0, import_i18n13.__)( 3549 "Choose font variants. Keep in mind that too many variants could make your site slower." 3550 ) }), 3551 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 4 }), 3552 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalVStack, { spacing: 0, children: [ 3553 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3554 import_components25.CheckboxControl, 3555 { 3556 className: "font-library__select-all", 3557 label: (0, import_i18n13.__)("Select all"), 3558 checked: isSelectAllChecked, 3559 onChange: toggleSelectAll, 3560 indeterminate: isIndeterminate 3561 } 3562 ), 3563 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.__experimentalSpacer, { margin: 8 }), 3564 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3565 "ul", 3566 { 3567 role: "list", 3568 className: "font-library__fonts-list", 3569 children: libraryFontSelected && getFontFacesToDisplay( 3570 libraryFontSelected 3571 ).map((face, i2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3572 "li", 3573 { 3574 className: "font-library__fonts-list-item", 3575 children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3576 library_font_variant_default, 3577 { 3578 font: libraryFontSelected, 3579 face 3580 }, 3581 `face$i2}` 3582 ) 3583 }, 3584 `face$i2}` 3585 )) 3586 } 3587 ) 3588 ] }) 3589 ] }) 3590 ] 3591 } 3592 ), 3593 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components25.__experimentalHStack, { justify: "flex-end", className: "font-library__footer", children: [ 3594 isInstalling && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components25.ProgressBar, {}), 3595 shouldDisplayDeleteButton && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3596 import_components25.Button, 3597 { 3598 __next40pxDefaultSize: true, 3599 isDestructive: true, 3600 variant: "tertiary", 3601 onClick: handleUninstallClick, 3602 children: (0, import_i18n13.__)("Delete") 3603 } 3604 ), 3605 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3606 import_components25.Button, 3607 { 3608 __next40pxDefaultSize: true, 3609 variant: "primary", 3610 onClick: handleUpdate, 3611 disabled: !fontFamiliesHasChanges, 3612 accessibleWhenDisabled: true, 3613 children: (0, import_i18n13.__)("Update") 3614 } 3615 ) 3616 ] }) 3617 ] }) 3618 ] }); 3619 } 3620 function ConfirmDeleteDialog({ 3621 font: font2, 3622 isOpen, 3623 setIsOpen, 3624 setNotice, 3625 uninstallFontFamily, 3626 handleSetLibraryFontSelected 3627 }) { 3628 const navigator = (0, import_components25.useNavigator)(); 3629 const handleConfirmUninstall = async () => { 3630 setNotice(null); 3631 setIsOpen(false); 3632 try { 3633 await uninstallFontFamily(font2); 3634 navigator.goBack(); 3635 handleSetLibraryFontSelected(void 0); 3636 setNotice({ 3637 type: "success", 3638 message: (0, import_i18n13.__)("Font family uninstalled successfully.") 3639 }); 3640 } catch (error) { 3641 setNotice({ 3642 type: "error", 3643 message: (0, import_i18n13.__)("There was an error uninstalling the font family.") + error.message 3644 }); 3645 } 3646 }; 3647 const handleCancelUninstall = () => { 3648 setIsOpen(false); 3649 }; 3650 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3651 import_components25.__experimentalConfirmDialog, 3652 { 3653 isOpen, 3654 cancelButtonText: (0, import_i18n13.__)("Cancel"), 3655 confirmButtonText: (0, import_i18n13.__)("Delete"), 3656 onCancel: handleCancelUninstall, 3657 onConfirm: handleConfirmUninstall, 3658 size: "medium", 3659 children: font2 && (0, import_i18n13.sprintf)( 3660 /* translators: %s: Name of the font. */ 3661 (0, import_i18n13.__)( 3662 'Are you sure you want to delete "%s" font and all its variants and assets?' 3663 ), 3664 font2.name 3665 ) 3666 } 3667 ); 3668 } 3669 var installed_fonts_default = InstalledFonts; 3670 3671 // packages/global-styles-ui/build-module/font-library/font-collection.js 3672 var import_element17 = __toESM(require_element()); 3673 var import_components28 = __toESM(require_components()); 3674 var import_compose3 = __toESM(require_compose()); 3675 var import_i18n15 = __toESM(require_i18n()); 3676 var import_core_data7 = __toESM(require_core_data()); 3677 3678 // packages/global-styles-ui/build-module/font-library/utils/filter-fonts.js 3679 function filterFonts(fonts, filters) { 3680 const { category, search } = filters; 3681 let filteredFonts = fonts || []; 3682 if (category && category !== "all") { 3683 filteredFonts = filteredFonts.filter( 3684 (font2) => font2.categories && font2.categories.indexOf(category) !== -1 3685 ); 3686 } 3687 if (search) { 3688 filteredFonts = filteredFonts.filter( 3689 (font2) => font2.font_family_settings && font2.font_family_settings.name.toLowerCase().includes(search.toLowerCase()) 3690 ); 3691 } 3692 return filteredFonts; 3693 } 3694 3695 // packages/global-styles-ui/build-module/font-library/utils/fonts-outline.js 3696 function getFontsOutline(fonts) { 3697 return fonts.reduce( 3698 (acc, font2) => ({ 3699 ...acc, 3700 [font2.slug]: (font2?.fontFace || []).reduce( 3701 (faces, face) => ({ 3702 ...faces, 3703 [`$face.fontStyle}-$face.fontWeight}`]: true 3704 }), 3705 {} 3706 ) 3707 }), 3708 {} 3709 ); 3710 } 3711 function isFontFontFaceInOutline(slug, face, outline) { 3712 if (!face) { 3713 return !!outline[slug]; 3714 } 3715 return !!outline[slug]?.[`$face.fontStyle}-$face.fontWeight}`]; 3716 } 3717 3718 // packages/global-styles-ui/build-module/font-library/google-fonts-confirm-dialog.js 3719 var import_i18n14 = __toESM(require_i18n()); 3720 var import_components26 = __toESM(require_components()); 3721 var import_jsx_runtime34 = __toESM(require_jsx_runtime()); 3722 function GoogleFontsConfirmDialog() { 3723 const handleConfirm = () => { 3724 window.localStorage.setItem( 3725 "wp-font-library-google-fonts-permission", 3726 "true" 3727 ); 3728 window.dispatchEvent(new Event("storage")); 3729 }; 3730 return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "font-library__google-fonts-confirm", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_components26.CardBody, { children: [ 3731 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalHeading, { level: 2, children: (0, import_i18n14.__)("Connect to Google Fonts") }), 3732 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalSpacer, { margin: 6 }), 3733 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalText, { as: "p", children: (0, import_i18n14.__)( 3734 "To install fonts from Google you must give permission to connect directly to Google servers. The fonts you install will be downloaded from Google and stored on your site. Your site will then use these locally-hosted fonts." 3735 ) }), 3736 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalSpacer, { margin: 3 }), 3737 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalText, { as: "p", children: (0, import_i18n14.__)( 3738 "You can alternatively upload files directly on the Upload tab." 3739 ) }), 3740 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components26.__experimentalSpacer, { margin: 6 }), 3741 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( 3742 import_components26.Button, 3743 { 3744 __next40pxDefaultSize: true, 3745 variant: "primary", 3746 onClick: handleConfirm, 3747 children: (0, import_i18n14.__)("Allow access to Google Fonts") 3748 } 3749 ) 3750 ] }) }) }); 3751 } 3752 var google_fonts_confirm_dialog_default = GoogleFontsConfirmDialog; 3753 3754 // packages/global-styles-ui/build-module/font-library/collection-font-variant.js 3755 var import_element16 = __toESM(require_element()); 3756 var import_components27 = __toESM(require_components()); 3757 var import_jsx_runtime35 = __toESM(require_jsx_runtime()); 3758 function CollectionFontVariant({ 3759 face, 3760 font: font2, 3761 handleToggleVariant, 3762 selected 3763 }) { 3764 const handleToggleActivation = () => { 3765 if (font2?.fontFace) { 3766 handleToggleVariant(font2, face); 3767 return; 3768 } 3769 handleToggleVariant(font2); 3770 }; 3771 const displayName = font2.name + " " + getFontFaceVariantName(face); 3772 const checkboxId = (0, import_element16.useId)(); 3773 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "font-library__font-card", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components27.Flex, { justify: "flex-start", align: "center", gap: "1rem", children: [ 3774 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( 3775 import_components27.CheckboxControl, 3776 { 3777 checked: selected, 3778 onChange: handleToggleActivation, 3779 id: checkboxId 3780 } 3781 ), 3782 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("label", { htmlFor: checkboxId, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( 3783 font_demo_default, 3784 { 3785 font: face, 3786 text: displayName, 3787 onClick: handleToggleActivation 3788 } 3789 ) }) 3790 ] }) }); 3791 } 3792 var collection_font_variant_default = CollectionFontVariant; 3793 3794 // packages/global-styles-ui/build-module/font-library/font-collection.js 3795 var import_jsx_runtime36 = __toESM(require_jsx_runtime()); 3796 var DEFAULT_CATEGORY = { 3797 slug: "all", 3798 name: (0, import_i18n15._x)("All", "font categories") 3799 }; 3800 var LOCAL_STORAGE_ITEM = "wp-font-library-google-fonts-permission"; 3801 var MIN_WINDOW_HEIGHT = 500; 3802 function FontCollection({ slug }) { 3803 const requiresPermission = slug === "google-fonts"; 3804 const getGoogleFontsPermissionFromStorage = () => { 3805 return window.localStorage.getItem(LOCAL_STORAGE_ITEM) === "true"; 3806 }; 3807 const [selectedFont, setSelectedFont] = (0, import_element17.useState)( 3808 null 3809 ); 3810 const [notice, setNotice] = (0, import_element17.useState)(null); 3811 const [fontsToInstall, setFontsToInstall] = (0, import_element17.useState)( 3812 [] 3813 ); 3814 const [page, setPage] = (0, import_element17.useState)(1); 3815 const [filters, setFilters] = (0, import_element17.useState)({}); 3816 const [renderConfirmDialog, setRenderConfirmDialog] = (0, import_element17.useState)( 3817 requiresPermission && !getGoogleFontsPermissionFromStorage() 3818 ); 3819 const { installFonts, isInstalling } = (0, import_element17.useContext)(FontLibraryContext); 3820 const { record: selectedCollection, isResolving: isLoading } = (0, import_core_data7.useEntityRecord)("root", "fontCollection", slug); 3821 (0, import_element17.useEffect)(() => { 3822 const handleStorage = () => { 3823 setRenderConfirmDialog( 3824 requiresPermission && !getGoogleFontsPermissionFromStorage() 3825 ); 3826 }; 3827 handleStorage(); 3828 window.addEventListener("storage", handleStorage); 3829 return () => window.removeEventListener("storage", handleStorage); 3830 }, [slug, requiresPermission]); 3831 const revokeAccess = () => { 3832 window.localStorage.setItem(LOCAL_STORAGE_ITEM, "false"); 3833 window.dispatchEvent(new Event("storage")); 3834 }; 3835 (0, import_element17.useEffect)(() => { 3836 setSelectedFont(null); 3837 }, [slug]); 3838 (0, import_element17.useEffect)(() => { 3839 setFontsToInstall([]); 3840 }, [selectedFont]); 3841 const collectionFonts = (0, import_element17.useMemo)( 3842 () => selectedCollection?.font_families ?? [], 3843 [selectedCollection] 3844 ); 3845 const collectionCategories = selectedCollection?.categories ?? []; 3846 const categories = [DEFAULT_CATEGORY, ...collectionCategories]; 3847 const fonts = (0, import_element17.useMemo)( 3848 () => filterFonts(collectionFonts, filters), 3849 [collectionFonts, filters] 3850 ); 3851 const windowHeight = Math.max(window.innerHeight, MIN_WINDOW_HEIGHT); 3852 const pageSize = Math.floor((windowHeight - 417) / 61); 3853 const totalPages = Math.ceil(fonts.length / pageSize); 3854 const itemsStart = (page - 1) * pageSize; 3855 const itemsLimit = page * pageSize; 3856 const items = fonts.slice(itemsStart, itemsLimit); 3857 const handleCategoryFilter = (category) => { 3858 setFilters({ ...filters, category }); 3859 setPage(1); 3860 }; 3861 const handleUpdateSearchInput = (value) => { 3862 setFilters({ ...filters, search: value }); 3863 setPage(1); 3864 }; 3865 const debouncedUpdateSearchInput = (0, import_compose3.debounce)(handleUpdateSearchInput, 300); 3866 const handleToggleVariant = (font2, face) => { 3867 const newFontsToInstall = toggleFont(font2, face, fontsToInstall); 3868 setFontsToInstall(newFontsToInstall); 3869 }; 3870 const fontToInstallOutline = getFontsOutline(fontsToInstall); 3871 const resetFontsToInstall = () => { 3872 setFontsToInstall([]); 3873 }; 3874 const selectFontCount = fontsToInstall.length > 0 ? fontsToInstall[0]?.fontFace?.length ?? 0 : 0; 3875 const isIndeterminate = selectFontCount > 0 && selectFontCount !== selectedFont?.fontFace?.length; 3876 const isSelectAllChecked = selectFontCount === selectedFont?.fontFace?.length; 3877 const toggleSelectAll = () => { 3878 const newFonts = []; 3879 if (!isSelectAllChecked && selectedFont) { 3880 newFonts.push(selectedFont); 3881 } 3882 setFontsToInstall(newFonts); 3883 }; 3884 const handleInstall = async () => { 3885 setNotice(null); 3886 const fontFamily = fontsToInstall[0]; 3887 try { 3888 if (fontFamily?.fontFace) { 3889 await Promise.all( 3890 fontFamily.fontFace.map(async (fontFace) => { 3891 if (fontFace.src) { 3892 fontFace.file = await downloadFontFaceAssets( 3893 fontFace.src 3894 ); 3895 } 3896 }) 3897 ); 3898 } 3899 } catch (error) { 3900 setNotice({ 3901 type: "error", 3902 message: (0, import_i18n15.__)( 3903 "Error installing the fonts, could not be downloaded." 3904 ) 3905 }); 3906 return; 3907 } 3908 try { 3909 await installFonts([fontFamily]); 3910 setNotice({ 3911 type: "success", 3912 message: (0, import_i18n15.__)("Fonts were installed successfully.") 3913 }); 3914 } catch (error) { 3915 setNotice({ 3916 type: "error", 3917 message: error.message 3918 }); 3919 } 3920 resetFontsToInstall(); 3921 }; 3922 const getSortedFontFaces = (fontFamily) => { 3923 if (!fontFamily) { 3924 return []; 3925 } 3926 if (!fontFamily.fontFace || !fontFamily.fontFace.length) { 3927 return [ 3928 { 3929 fontFamily: fontFamily.fontFamily, 3930 fontStyle: "normal", 3931 fontWeight: "400" 3932 } 3933 ]; 3934 } 3935 return sortFontFaces(fontFamily.fontFace); 3936 }; 3937 if (renderConfirmDialog) { 3938 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(google_fonts_confirm_dialog_default, {}); 3939 } 3940 const ActionsComponent = () => { 3941 if (slug !== "google-fonts" || renderConfirmDialog || selectedFont) { 3942 return null; 3943 } 3944 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 3945 import_components28.DropdownMenu, 3946 { 3947 icon: more_vertical_default, 3948 label: (0, import_i18n15.__)("Actions"), 3949 popoverProps: { 3950 position: "bottom left" 3951 }, 3952 controls: [ 3953 { 3954 title: (0, import_i18n15.__)("Revoke access to Google Fonts"), 3955 onClick: revokeAccess 3956 } 3957 ] 3958 } 3959 ); 3960 }; 3961 return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ 3962 isLoading && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "font-library__loading", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.ProgressBar, {}) }), 3963 !isLoading && selectedCollection && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 3964 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( 3965 import_components28.Navigator, 3966 { 3967 initialPath: "/", 3968 className: "font-library__tabpanel-layout", 3969 children: [ 3970 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.Navigator.Screen, { path: "/", children: [ 3971 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.__experimentalHStack, { justify: "space-between", children: [ 3972 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.__experimentalVStack, { children: [ 3973 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalHeading, { level: 2, size: 13, children: selectedCollection.name }), 3974 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalText, { children: selectedCollection.description }) 3975 ] }), 3976 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ActionsComponent, {}) 3977 ] }), 3978 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 4 }), 3979 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.__experimentalHStack, { spacing: 4, justify: "space-between", children: [ 3980 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 3981 import_components28.SearchControl, 3982 { 3983 value: filters.search, 3984 placeholder: (0, import_i18n15.__)("Font name\u2026"), 3985 label: (0, import_i18n15.__)("Search"), 3986 onChange: debouncedUpdateSearchInput, 3987 hideLabelFromVision: false 3988 } 3989 ), 3990 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 3991 import_components28.SelectControl, 3992 { 3993 __next40pxDefaultSize: true, 3994 label: (0, import_i18n15.__)("Category"), 3995 value: filters.category, 3996 onChange: handleCategoryFilter, 3997 children: categories && categories.map((category) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 3998 "option", 3999 { 4000 value: category.slug, 4001 children: category.name 4002 }, 4003 category.slug 4004 )) 4005 } 4006 ) 4007 ] }), 4008 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 4 }), 4009 !!selectedCollection?.font_families?.length && !fonts.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalText, { children: (0, import_i18n15.__)( 4010 "No fonts found. Try with a different search term." 4011 ) }), 4012 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "font-library__fonts-grid__main", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4013 "ul", 4014 { 4015 role: "list", 4016 className: "font-library__fonts-list", 4017 children: items.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4018 "li", 4019 { 4020 className: "font-library__fonts-list-item", 4021 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4022 font_card_default, 4023 { 4024 font: font2.font_family_settings, 4025 navigatorPath: "/fontFamily", 4026 onClick: () => { 4027 setSelectedFont( 4028 font2.font_family_settings 4029 ); 4030 } 4031 } 4032 ) 4033 }, 4034 font2.font_family_settings.slug 4035 )) 4036 } 4037 ) }) 4038 ] }), 4039 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.Navigator.Screen, { path: "/fontFamily", children: [ 4040 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.Flex, { justify: "flex-start", children: [ 4041 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4042 import_components28.Navigator.BackButton, 4043 { 4044 icon: (0, import_i18n15.isRTL)() ? chevron_right_default : chevron_left_default, 4045 size: "small", 4046 onClick: () => { 4047 setSelectedFont(null); 4048 setNotice(null); 4049 }, 4050 label: (0, import_i18n15.__)("Back") 4051 } 4052 ), 4053 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4054 import_components28.__experimentalHeading, 4055 { 4056 level: 2, 4057 size: 13, 4058 className: "global-styles-ui-header", 4059 children: selectedFont?.name 4060 } 4061 ) 4062 ] }), 4063 notice && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 4064 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 1 }), 4065 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4066 import_components28.Notice, 4067 { 4068 status: notice.type, 4069 onRemove: () => setNotice(null), 4070 children: notice.message 4071 } 4072 ), 4073 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 1 }) 4074 ] }), 4075 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 4 }), 4076 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalText, { children: (0, import_i18n15.__)("Select font variants to install.") }), 4077 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 4 }), 4078 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4079 import_components28.CheckboxControl, 4080 { 4081 className: "font-library__select-all", 4082 label: (0, import_i18n15.__)("Select all"), 4083 checked: isSelectAllChecked, 4084 onChange: toggleSelectAll, 4085 indeterminate: isIndeterminate 4086 } 4087 ), 4088 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalVStack, { spacing: 0, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4089 "ul", 4090 { 4091 role: "list", 4092 className: "font-library__fonts-list", 4093 children: selectedFont && getSortedFontFaces(selectedFont).map( 4094 (face, i2) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4095 "li", 4096 { 4097 className: "font-library__fonts-list-item", 4098 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4099 collection_font_variant_default, 4100 { 4101 font: selectedFont, 4102 face, 4103 handleToggleVariant, 4104 selected: isFontFontFaceInOutline( 4105 selectedFont.slug, 4106 selectedFont.fontFace ? face : null, 4107 // If the font has no fontFace, we want to check if the font is in the outline 4108 fontToInstallOutline 4109 ) 4110 } 4111 ) 4112 }, 4113 `face$i2}` 4114 ) 4115 ) 4116 } 4117 ) }), 4118 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components28.__experimentalSpacer, { margin: 16 }) 4119 ] }) 4120 ] 4121 } 4122 ), 4123 selectedFont && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4124 import_components28.Flex, 4125 { 4126 justify: "flex-end", 4127 className: "font-library__footer", 4128 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4129 import_components28.Button, 4130 { 4131 __next40pxDefaultSize: true, 4132 variant: "primary", 4133 onClick: handleInstall, 4134 isBusy: isInstalling, 4135 disabled: fontsToInstall.length === 0 || isInstalling, 4136 accessibleWhenDisabled: true, 4137 children: (0, import_i18n15.__)("Install") 4138 } 4139 ) 4140 } 4141 ), 4142 !selectedFont && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( 4143 import_components28.__experimentalHStack, 4144 { 4145 expanded: false, 4146 className: "font-library__footer", 4147 justify: "end", 4148 spacing: 6, 4149 children: [ 4150 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4151 import_components28.__experimentalHStack, 4152 { 4153 justify: "flex-start", 4154 expanded: false, 4155 spacing: 1, 4156 className: "font-library__page-selection", 4157 children: (0, import_element17.createInterpolateElement)( 4158 (0, import_i18n15.sprintf)( 4159 // translators: 1: Current page number, 2: Total number of pages. 4160 (0, import_i18n15._x)( 4161 "<div>Page</div>%1$s<div>of %2$d</div>", 4162 "paging" 4163 ), 4164 "<CurrentPage />", 4165 totalPages 4166 ), 4167 { 4168 div: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { "aria-hidden": true }), 4169 CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4170 import_components28.SelectControl, 4171 { 4172 "aria-label": (0, import_i18n15.__)( 4173 "Current page" 4174 ), 4175 value: page.toString(), 4176 options: [ 4177 ...Array(totalPages) 4178 ].map((e2, i2) => { 4179 return { 4180 label: (i2 + 1).toString(), 4181 value: (i2 + 1).toString() 4182 }; 4183 }), 4184 onChange: (newPage) => setPage( 4185 parseInt(newPage) 4186 ), 4187 size: "small", 4188 variant: "minimal" 4189 } 4190 ) 4191 } 4192 ) 4193 } 4194 ), 4195 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components28.__experimentalHStack, { expanded: false, spacing: 1, children: [ 4196 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4197 import_components28.Button, 4198 { 4199 onClick: () => setPage(page - 1), 4200 disabled: page === 1, 4201 accessibleWhenDisabled: true, 4202 label: (0, import_i18n15.__)("Previous page"), 4203 icon: (0, import_i18n15.isRTL)() ? next_default : previous_default, 4204 showTooltip: true, 4205 size: "compact", 4206 tooltipPosition: "top" 4207 } 4208 ), 4209 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4210 import_components28.Button, 4211 { 4212 onClick: () => setPage(page + 1), 4213 disabled: page === totalPages, 4214 accessibleWhenDisabled: true, 4215 label: (0, import_i18n15.__)("Next page"), 4216 icon: (0, import_i18n15.isRTL)() ? previous_default : next_default, 4217 showTooltip: true, 4218 size: "compact", 4219 tooltipPosition: "top" 4220 } 4221 ) 4222 ] }) 4223 ] 4224 } 4225 ) 4226 ] }) 4227 ] }); 4228 } 4229 var font_collection_default = FontCollection; 4230 4231 // packages/global-styles-ui/build-module/font-library/upload-fonts.js 4232 var import_i18n16 = __toESM(require_i18n()); 4233 var import_components30 = __toESM(require_components()); 4234 var import_element18 = __toESM(require_element()); 4235 4236 // packages/global-styles-ui/build-module/font-library/lib/unbrotli.js 4237 var __getOwnPropNames2 = Object.getOwnPropertyNames; 4238 var __require2 = /* @__PURE__ */ ((x2) => typeof __require !== "undefined" ? __require : typeof Proxy !== "undefined" ? new Proxy(x2, { 4239 get: (a2, b2) => (typeof __require !== "undefined" ? __require : a2)[b2] 4240 }) : x2)(function(x2) { 4241 if (typeof __require !== "undefined") return __require.apply(this, arguments); 4242 throw Error('Dynamic require of "' + x2 + '" is not supported'); 4243 }); 4244 var __commonJS2 = (cb, mod) => function __require22() { 4245 return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 4246 }; 4247 var require_unbrotli = __commonJS2({ 4248 "packages/global-styles-ui/src/font-library/lib/unbrotli.js"(exports, module) { 4249 (function(f2) { 4250 if (typeof exports === "object" && typeof module !== "undefined") { 4251 module.exports = f2(); 4252 } else if (typeof define === "function" && define.amd) { 4253 define([], f2); 4254 } else { 4255 var g2; 4256 if (typeof window !== "undefined") { 4257 g2 = window; 4258 } else if (typeof global !== "undefined") { 4259 g2 = global; 4260 } else if (typeof self !== "undefined") { 4261 g2 = self; 4262 } else { 4263 g2 = this; 4264 } 4265 g2.unbrotli = f2(); 4266 } 4267 })(function() { 4268 var define2, module2, exports2; 4269 return (/* @__PURE__ */ (function() { 4270 function r3(e2, n2, t3) { 4271 function o3(i22, f2) { 4272 if (!n2[i22]) { 4273 if (!e2[i22]) { 4274 var c2 = "function" == typeof __require2 && __require2; 4275 if (!f2 && c2) return c2(i22, true); 4276 if (u2) return u2(i22, true); 4277 var a2 = new Error("Cannot find module '" + i22 + "'"); 4278 throw a2.code = "MODULE_NOT_FOUND", a2; 4279 } 4280 var p3 = n2[i22] = { exports: {} }; 4281 e2[i22][0].call( 4282 p3.exports, 4283 function(r22) { 4284 var n22 = e2[i22][1][r22]; 4285 return o3(n22 || r22); 4286 }, 4287 p3, 4288 p3.exports, 4289 r3, 4290 e2, 4291 n2, 4292 t3 4293 ); 4294 } 4295 return n2[i22].exports; 4296 } 4297 for (var u2 = "function" == typeof __require2 && __require2, i2 = 0; i2 < t3.length; i2++) 4298 o3(t3[i2]); 4299 return o3; 4300 } 4301 return r3; 4302 })())( 4303 { 4304 1: [ 4305 function(require2, module3, exports3) { 4306 var BROTLI_READ_SIZE = 4096; 4307 var BROTLI_IBUF_SIZE = 2 * BROTLI_READ_SIZE + 32; 4308 var BROTLI_IBUF_MASK = 2 * BROTLI_READ_SIZE - 1; 4309 var kBitMask = new Uint32Array([ 4310 0, 4311 1, 4312 3, 4313 7, 4314 15, 4315 31, 4316 63, 4317 127, 4318 255, 4319 511, 4320 1023, 4321 2047, 4322 4095, 4323 8191, 4324 16383, 4325 32767, 4326 65535, 4327 131071, 4328 262143, 4329 524287, 4330 1048575, 4331 2097151, 4332 4194303, 4333 8388607, 4334 16777215 4335 ]); 4336 function BrotliBitReader(input) { 4337 this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE); 4338 this.input_ = input; 4339 this.reset(); 4340 } 4341 BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE; 4342 BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK; 4343 BrotliBitReader.prototype.reset = function() { 4344 this.buf_ptr_ = 0; 4345 this.val_ = 0; 4346 this.pos_ = 0; 4347 this.bit_pos_ = 0; 4348 this.bit_end_pos_ = 0; 4349 this.eos_ = 0; 4350 this.readMoreInput(); 4351 for (var i2 = 0; i2 < 4; i2++) { 4352 this.val_ |= this.buf_[this.pos_] << 8 * i2; 4353 ++this.pos_; 4354 } 4355 return this.bit_end_pos_ > 0; 4356 }; 4357 BrotliBitReader.prototype.readMoreInput = function() { 4358 if (this.bit_end_pos_ > 256) { 4359 return; 4360 } else if (this.eos_) { 4361 if (this.bit_pos_ > this.bit_end_pos_) 4362 throw new Error( 4363 "Unexpected end of input " + this.bit_pos_ + " " + this.bit_end_pos_ 4364 ); 4365 } else { 4366 var dst = this.buf_ptr_; 4367 var bytes_read = this.input_.read( 4368 this.buf_, 4369 dst, 4370 BROTLI_READ_SIZE 4371 ); 4372 if (bytes_read < 0) { 4373 throw new Error("Unexpected end of input"); 4374 } 4375 if (bytes_read < BROTLI_READ_SIZE) { 4376 this.eos_ = 1; 4377 for (var p3 = 0; p3 < 32; p3++) 4378 this.buf_[dst + bytes_read + p3] = 0; 4379 } 4380 if (dst === 0) { 4381 for (var p3 = 0; p3 < 32; p3++) 4382 this.buf_[(BROTLI_READ_SIZE << 1) + p3] = this.buf_[p3]; 4383 this.buf_ptr_ = BROTLI_READ_SIZE; 4384 } else { 4385 this.buf_ptr_ = 0; 4386 } 4387 this.bit_end_pos_ += bytes_read << 3; 4388 } 4389 }; 4390 BrotliBitReader.prototype.fillBitWindow = function() { 4391 while (this.bit_pos_ >= 8) { 4392 this.val_ >>>= 8; 4393 this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24; 4394 ++this.pos_; 4395 this.bit_pos_ = this.bit_pos_ - 8 >>> 0; 4396 this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0; 4397 } 4398 }; 4399 BrotliBitReader.prototype.readBits = function(n_bits) { 4400 if (32 - this.bit_pos_ < n_bits) { 4401 this.fillBitWindow(); 4402 } 4403 var val = this.val_ >>> this.bit_pos_ & kBitMask[n_bits]; 4404 this.bit_pos_ += n_bits; 4405 return val; 4406 }; 4407 module3.exports = BrotliBitReader; 4408 }, 4409 {} 4410 ], 4411 2: [ 4412 function(require2, module3, exports3) { 4413 var CONTEXT_LSB6 = 0; 4414 var CONTEXT_MSB6 = 1; 4415 var CONTEXT_UTF8 = 2; 4416 var CONTEXT_SIGNED = 3; 4417 exports3.lookup = new Uint8Array([ 4418 /* CONTEXT_UTF8, last byte. */ 4419 /* ASCII range. */ 4420 0, 4421 0, 4422 0, 4423 0, 4424 0, 4425 0, 4426 0, 4427 0, 4428 0, 4429 4, 4430 4, 4431 0, 4432 0, 4433 4, 4434 0, 4435 0, 4436 0, 4437 0, 4438 0, 4439 0, 4440 0, 4441 0, 4442 0, 4443 0, 4444 0, 4445 0, 4446 0, 4447 0, 4448 0, 4449 0, 4450 0, 4451 0, 4452 8, 4453 12, 4454 16, 4455 12, 4456 12, 4457 20, 4458 12, 4459 16, 4460 24, 4461 28, 4462 12, 4463 12, 4464 32, 4465 12, 4466 36, 4467 12, 4468 44, 4469 44, 4470 44, 4471 44, 4472 44, 4473 44, 4474 44, 4475 44, 4476 44, 4477 44, 4478 32, 4479 32, 4480 24, 4481 40, 4482 28, 4483 12, 4484 12, 4485 48, 4486 52, 4487 52, 4488 52, 4489 48, 4490 52, 4491 52, 4492 52, 4493 48, 4494 52, 4495 52, 4496 52, 4497 52, 4498 52, 4499 48, 4500 52, 4501 52, 4502 52, 4503 52, 4504 52, 4505 48, 4506 52, 4507 52, 4508 52, 4509 52, 4510 52, 4511 24, 4512 12, 4513 28, 4514 12, 4515 12, 4516 12, 4517 56, 4518 60, 4519 60, 4520 60, 4521 56, 4522 60, 4523 60, 4524 60, 4525 56, 4526 60, 4527 60, 4528 60, 4529 60, 4530 60, 4531 56, 4532 60, 4533 60, 4534 60, 4535 60, 4536 60, 4537 56, 4538 60, 4539 60, 4540 60, 4541 60, 4542 60, 4543 24, 4544 12, 4545 28, 4546 12, 4547 0, 4548 /* UTF8 continuation byte range. */ 4549 0, 4550 1, 4551 0, 4552 1, 4553 0, 4554 1, 4555 0, 4556 1, 4557 0, 4558 1, 4559 0, 4560 1, 4561 0, 4562 1, 4563 0, 4564 1, 4565 0, 4566 1, 4567 0, 4568 1, 4569 0, 4570 1, 4571 0, 4572 1, 4573 0, 4574 1, 4575 0, 4576 1, 4577 0, 4578 1, 4579 0, 4580 1, 4581 0, 4582 1, 4583 0, 4584 1, 4585 0, 4586 1, 4587 0, 4588 1, 4589 0, 4590 1, 4591 0, 4592 1, 4593 0, 4594 1, 4595 0, 4596 1, 4597 0, 4598 1, 4599 0, 4600 1, 4601 0, 4602 1, 4603 0, 4604 1, 4605 0, 4606 1, 4607 0, 4608 1, 4609 0, 4610 1, 4611 0, 4612 1, 4613 2, 4614 3, 4615 2, 4616 3, 4617 2, 4618 3, 4619 2, 4620 3, 4621 2, 4622 3, 4623 2, 4624 3, 4625 2, 4626 3, 4627 2, 4628 3, 4629 2, 4630 3, 4631 2, 4632 3, 4633 2, 4634 3, 4635 2, 4636 3, 4637 2, 4638 3, 4639 2, 4640 3, 4641 2, 4642 3, 4643 2, 4644 3, 4645 2, 4646 3, 4647 2, 4648 3, 4649 2, 4650 3, 4651 2, 4652 3, 4653 2, 4654 3, 4655 2, 4656 3, 4657 2, 4658 3, 4659 2, 4660 3, 4661 2, 4662 3, 4663 2, 4664 3, 4665 2, 4666 3, 4667 2, 4668 3, 4669 2, 4670 3, 4671 2, 4672 3, 4673 2, 4674 3, 4675 2, 4676 3, 4677 /* ASCII range. */ 4678 0, 4679 0, 4680 0, 4681 0, 4682 0, 4683 0, 4684 0, 4685 0, 4686 0, 4687 0, 4688 0, 4689 0, 4690 0, 4691 0, 4692 0, 4693 0, 4694 0, 4695 0, 4696 0, 4697 0, 4698 0, 4699 0, 4700 0, 4701 0, 4702 0, 4703 0, 4704 0, 4705 0, 4706 0, 4707 0, 4708 0, 4709 0, 4710 0, 4711 1, 4712 1, 4713 1, 4714 1, 4715 1, 4716 1, 4717 1, 4718 1, 4719 1, 4720 1, 4721 1, 4722 1, 4723 1, 4724 1, 4725 1, 4726 2, 4727 2, 4728 2, 4729 2, 4730 2, 4731 2, 4732 2, 4733 2, 4734 2, 4735 2, 4736 1, 4737 1, 4738 1, 4739 1, 4740 1, 4741 1, 4742 1, 4743 2, 4744 2, 4745 2, 4746 2, 4747 2, 4748 2, 4749 2, 4750 2, 4751 2, 4752 2, 4753 2, 4754 2, 4755 2, 4756 2, 4757 2, 4758 2, 4759 2, 4760 2, 4761 2, 4762 2, 4763 2, 4764 2, 4765 2, 4766 2, 4767 2, 4768 2, 4769 1, 4770 1, 4771 1, 4772 1, 4773 1, 4774 1, 4775 3, 4776 3, 4777 3, 4778 3, 4779 3, 4780 3, 4781 3, 4782 3, 4783 3, 4784 3, 4785 3, 4786 3, 4787 3, 4788 3, 4789 3, 4790 3, 4791 3, 4792 3, 4793 3, 4794 3, 4795 3, 4796 3, 4797 3, 4798 3, 4799 3, 4800 3, 4801 1, 4802 1, 4803 1, 4804 1, 4805 0, 4806 /* UTF8 continuation byte range. */ 4807 0, 4808 0, 4809 0, 4810 0, 4811 0, 4812 0, 4813 0, 4814 0, 4815 0, 4816 0, 4817 0, 4818 0, 4819 0, 4820 0, 4821 0, 4822 0, 4823 0, 4824 0, 4825 0, 4826 0, 4827 0, 4828 0, 4829 0, 4830 0, 4831 0, 4832 0, 4833 0, 4834 0, 4835 0, 4836 0, 4837 0, 4838 0, 4839 0, 4840 0, 4841 0, 4842 0, 4843 0, 4844 0, 4845 0, 4846 0, 4847 0, 4848 0, 4849 0, 4850 0, 4851 0, 4852 0, 4853 0, 4854 0, 4855 0, 4856 0, 4857 0, 4858 0, 4859 0, 4860 0, 4861 0, 4862 0, 4863 0, 4864 0, 4865 0, 4866 0, 4867 0, 4868 0, 4869 0, 4870 0, 4871 0, 4872 0, 4873 0, 4874 0, 4875 0, 4876 0, 4877 0, 4878 0, 4879 0, 4880 0, 4881 0, 4882 0, 4883 0, 4884 0, 4885 0, 4886 0, 4887 0, 4888 0, 4889 0, 4890 0, 4891 0, 4892 0, 4893 0, 4894 0, 4895 0, 4896 0, 4897 0, 4898 0, 4899 0, 4900 0, 4901 0, 4902 0, 4903 2, 4904 2, 4905 2, 4906 2, 4907 2, 4908 2, 4909 2, 4910 2, 4911 2, 4912 2, 4913 2, 4914 2, 4915 2, 4916 2, 4917 2, 4918 2, 4919 2, 4920 2, 4921 2, 4922 2, 4923 2, 4924 2, 4925 2, 4926 2, 4927 2, 4928 2, 4929 2, 4930 2, 4931 2, 4932 2, 4933 2, 4934 2, 4935 0, 4936 1, 4937 1, 4938 1, 4939 1, 4940 1, 4941 1, 4942 1, 4943 1, 4944 1, 4945 1, 4946 1, 4947 1, 4948 1, 4949 1, 4950 1, 4951 2, 4952 2, 4953 2, 4954 2, 4955 2, 4956 2, 4957 2, 4958 2, 4959 2, 4960 2, 4961 2, 4962 2, 4963 2, 4964 2, 4965 2, 4966 2, 4967 2, 4968 2, 4969 2, 4970 2, 4971 2, 4972 2, 4973 2, 4974 2, 4975 2, 4976 2, 4977 2, 4978 2, 4979 2, 4980 2, 4981 2, 4982 2, 4983 2, 4984 2, 4985 2, 4986 2, 4987 2, 4988 2, 4989 2, 4990 2, 4991 2, 4992 2, 4993 2, 4994 2, 4995 2, 4996 2, 4997 2, 4998 2, 4999 3, 5000 3, 5001 3, 5002 3, 5003 3, 5004 3, 5005 3, 5006 3, 5007 3, 5008 3, 5009 3, 5010 3, 5011 3, 5012 3, 5013 3, 5014 3, 5015 3, 5016 3, 5017 3, 5018 3, 5019 3, 5020 3, 5021 3, 5022 3, 5023 3, 5024 3, 5025 3, 5026 3, 5027 3, 5028 3, 5029 3, 5030 3, 5031 3, 5032 3, 5033 3, 5034 3, 5035 3, 5036 3, 5037 3, 5038 3, 5039 3, 5040 3, 5041 3, 5042 3, 5043 3, 5044 3, 5045 3, 5046 3, 5047 3, 5048 3, 5049 3, 5050 3, 5051 3, 5052 3, 5053 3, 5054 3, 5055 3, 5056 3, 5057 3, 5058 3, 5059 3, 5060 3, 5061 3, 5062 3, 5063 4, 5064 4, 5065 4, 5066 4, 5067 4, 5068 4, 5069 4, 5070 4, 5071 4, 5072 4, 5073 4, 5074 4, 5075 4, 5076 4, 5077 4, 5078 4, 5079 4, 5080 4, 5081 4, 5082 4, 5083 4, 5084 4, 5085 4, 5086 4, 5087 4, 5088 4, 5089 4, 5090 4, 5091 4, 5092 4, 5093 4, 5094 4, 5095 4, 5096 4, 5097 4, 5098 4, 5099 4, 5100 4, 5101 4, 5102 4, 5103 4, 5104 4, 5105 4, 5106 4, 5107 4, 5108 4, 5109 4, 5110 4, 5111 4, 5112 4, 5113 4, 5114 4, 5115 4, 5116 4, 5117 4, 5118 4, 5119 4, 5120 4, 5121 4, 5122 4, 5123 4, 5124 4, 5125 4, 5126 4, 5127 5, 5128 5, 5129 5, 5130 5, 5131 5, 5132 5, 5133 5, 5134 5, 5135 5, 5136 5, 5137 5, 5138 5, 5139 5, 5140 5, 5141 5, 5142 5, 5143 5, 5144 5, 5145 5, 5146 5, 5147 5, 5148 5, 5149 5, 5150 5, 5151 5, 5152 5, 5153 5, 5154 5, 5155 5, 5156 5, 5157 5, 5158 5, 5159 5, 5160 5, 5161 5, 5162 5, 5163 5, 5164 5, 5165 5, 5166 5, 5167 5, 5168 5, 5169 5, 5170 5, 5171 5, 5172 5, 5173 5, 5174 5, 5175 6, 5176 6, 5177 6, 5178 6, 5179 6, 5180 6, 5181 6, 5182 6, 5183 6, 5184 6, 5185 6, 5186 6, 5187 6, 5188 6, 5189 6, 5190 7, 5191 /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ 5192 0, 5193 8, 5194 8, 5195 8, 5196 8, 5197 8, 5198 8, 5199 8, 5200 8, 5201 8, 5202 8, 5203 8, 5204 8, 5205 8, 5206 8, 5207 8, 5208 16, 5209 16, 5210 16, 5211 16, 5212 16, 5213 16, 5214 16, 5215 16, 5216 16, 5217 16, 5218 16, 5219 16, 5220 16, 5221 16, 5222 16, 5223 16, 5224 16, 5225 16, 5226 16, 5227 16, 5228 16, 5229 16, 5230 16, 5231 16, 5232 16, 5233 16, 5234 16, 5235 16, 5236 16, 5237 16, 5238 16, 5239 16, 5240 16, 5241 16, 5242 16, 5243 16, 5244 16, 5245 16, 5246 16, 5247 16, 5248 16, 5249 16, 5250 16, 5251 16, 5252 16, 5253 16, 5254 16, 5255 16, 5256 24, 5257 24, 5258 24, 5259 24, 5260 24, 5261 24, 5262 24, 5263 24, 5264 24, 5265 24, 5266 24, 5267 24, 5268 24, 5269 24, 5270 24, 5271 24, 5272 24, 5273 24, 5274 24, 5275 24, 5276 24, 5277 24, 5278 24, 5279 24, 5280 24, 5281 24, 5282 24, 5283 24, 5284 24, 5285 24, 5286 24, 5287 24, 5288 24, 5289 24, 5290 24, 5291 24, 5292 24, 5293 24, 5294 24, 5295 24, 5296 24, 5297 24, 5298 24, 5299 24, 5300 24, 5301 24, 5302 24, 5303 24, 5304 24, 5305 24, 5306 24, 5307 24, 5308 24, 5309 24, 5310 24, 5311 24, 5312 24, 5313 24, 5314 24, 5315 24, 5316 24, 5317 24, 5318 24, 5319 24, 5320 32, 5321 32, 5322 32, 5323 32, 5324 32, 5325 32, 5326 32, 5327 32, 5328 32, 5329 32, 5330 32, 5331 32, 5332 32, 5333 32, 5334 32, 5335 32, 5336 32, 5337 32, 5338 32, 5339 32, 5340 32, 5341 32, 5342 32, 5343 32, 5344 32, 5345 32, 5346 32, 5347 32, 5348 32, 5349 32, 5350 32, 5351 32, 5352 32, 5353 32, 5354 32, 5355 32, 5356 32, 5357 32, 5358 32, 5359 32, 5360 32, 5361 32, 5362 32, 5363 32, 5364 32, 5365 32, 5366 32, 5367 32, 5368 32, 5369 32, 5370 32, 5371 32, 5372 32, 5373 32, 5374 32, 5375 32, 5376 32, 5377 32, 5378 32, 5379 32, 5380 32, 5381 32, 5382 32, 5383 32, 5384 40, 5385 40, 5386 40, 5387 40, 5388 40, 5389 40, 5390 40, 5391 40, 5392 40, 5393 40, 5394 40, 5395 40, 5396 40, 5397 40, 5398 40, 5399 40, 5400 40, 5401 40, 5402 40, 5403 40, 5404 40, 5405 40, 5406 40, 5407 40, 5408 40, 5409 40, 5410 40, 5411 40, 5412 40, 5413 40, 5414 40, 5415 40, 5416 40, 5417 40, 5418 40, 5419 40, 5420 40, 5421 40, 5422 40, 5423 40, 5424 40, 5425 40, 5426 40, 5427 40, 5428 40, 5429 40, 5430 40, 5431 40, 5432 48, 5433 48, 5434 48, 5435 48, 5436 48, 5437 48, 5438 48, 5439 48, 5440 48, 5441 48, 5442 48, 5443 48, 5444 48, 5445 48, 5446 48, 5447 56, 5448 /* CONTEXT_LSB6, last byte. */ 5449 0, 5450 1, 5451 2, 5452 3, 5453 4, 5454 5, 5455 6, 5456 7, 5457 8, 5458 9, 5459 10, 5460 11, 5461 12, 5462 13, 5463 14, 5464 15, 5465 16, 5466 17, 5467 18, 5468 19, 5469 20, 5470 21, 5471 22, 5472 23, 5473 24, 5474 25, 5475 26, 5476 27, 5477 28, 5478 29, 5479 30, 5480 31, 5481 32, 5482 33, 5483 34, 5484 35, 5485 36, 5486 37, 5487 38, 5488 39, 5489 40, 5490 41, 5491 42, 5492 43, 5493 44, 5494 45, 5495 46, 5496 47, 5497 48, 5498 49, 5499 50, 5500 51, 5501 52, 5502 53, 5503 54, 5504 55, 5505 56, 5506 57, 5507 58, 5508 59, 5509 60, 5510 61, 5511 62, 5512 63, 5513 0, 5514 1, 5515 2, 5516 3, 5517 4, 5518 5, 5519 6, 5520 7, 5521 8, 5522 9, 5523 10, 5524 11, 5525 12, 5526 13, 5527 14, 5528 15, 5529 16, 5530 17, 5531 18, 5532 19, 5533 20, 5534 21, 5535 22, 5536 23, 5537 24, 5538 25, 5539 26, 5540 27, 5541 28, 5542 29, 5543 30, 5544 31, 5545 32, 5546 33, 5547 34, 5548 35, 5549 36, 5550 37, 5551 38, 5552 39, 5553 40, 5554 41, 5555 42, 5556 43, 5557 44, 5558 45, 5559 46, 5560 47, 5561 48, 5562 49, 5563 50, 5564 51, 5565 52, 5566 53, 5567 54, 5568 55, 5569 56, 5570 57, 5571 58, 5572 59, 5573 60, 5574 61, 5575 62, 5576 63, 5577 0, 5578 1, 5579 2, 5580 3, 5581 4, 5582 5, 5583 6, 5584 7, 5585 8, 5586 9, 5587 10, 5588 11, 5589 12, 5590 13, 5591 14, 5592 15, 5593 16, 5594 17, 5595 18, 5596 19, 5597 20, 5598 21, 5599 22, 5600 23, 5601 24, 5602 25, 5603 26, 5604 27, 5605 28, 5606 29, 5607 30, 5608 31, 5609 32, 5610 33, 5611 34, 5612 35, 5613 36, 5614 37, 5615 38, 5616 39, 5617 40, 5618 41, 5619 42, 5620 43, 5621 44, 5622 45, 5623 46, 5624 47, 5625 48, 5626 49, 5627 50, 5628 51, 5629 52, 5630 53, 5631 54, 5632 55, 5633 56, 5634 57, 5635 58, 5636 59, 5637 60, 5638 61, 5639 62, 5640 63, 5641 0, 5642 1, 5643 2, 5644 3, 5645 4, 5646 5, 5647 6, 5648 7, 5649 8, 5650 9, 5651 10, 5652 11, 5653 12, 5654 13, 5655 14, 5656 15, 5657 16, 5658 17, 5659 18, 5660 19, 5661 20, 5662 21, 5663 22, 5664 23, 5665 24, 5666 25, 5667 26, 5668 27, 5669 28, 5670 29, 5671 30, 5672 31, 5673 32, 5674 33, 5675 34, 5676 35, 5677 36, 5678 37, 5679 38, 5680 39, 5681 40, 5682 41, 5683 42, 5684 43, 5685 44, 5686 45, 5687 46, 5688 47, 5689 48, 5690 49, 5691 50, 5692 51, 5693 52, 5694 53, 5695 54, 5696 55, 5697 56, 5698 57, 5699 58, 5700 59, 5701 60, 5702 61, 5703 62, 5704 63, 5705 /* CONTEXT_MSB6, last byte. */ 5706 0, 5707 0, 5708 0, 5709 0, 5710 1, 5711 1, 5712 1, 5713 1, 5714 2, 5715 2, 5716 2, 5717 2, 5718 3, 5719 3, 5720 3, 5721 3, 5722 4, 5723 4, 5724 4, 5725 4, 5726 5, 5727 5, 5728 5, 5729 5, 5730 6, 5731 6, 5732 6, 5733 6, 5734 7, 5735 7, 5736 7, 5737 7, 5738 8, 5739 8, 5740 8, 5741 8, 5742 9, 5743 9, 5744 9, 5745 9, 5746 10, 5747 10, 5748 10, 5749 10, 5750 11, 5751 11, 5752 11, 5753 11, 5754 12, 5755 12, 5756 12, 5757 12, 5758 13, 5759 13, 5760 13, 5761 13, 5762 14, 5763 14, 5764 14, 5765 14, 5766 15, 5767 15, 5768 15, 5769 15, 5770 16, 5771 16, 5772 16, 5773 16, 5774 17, 5775 17, 5776 17, 5777 17, 5778 18, 5779 18, 5780 18, 5781 18, 5782 19, 5783 19, 5784 19, 5785 19, 5786 20, 5787 20, 5788 20, 5789 20, 5790 21, 5791 21, 5792 21, 5793 21, 5794 22, 5795 22, 5796 22, 5797 22, 5798 23, 5799 23, 5800 23, 5801 23, 5802 24, 5803 24, 5804 24, 5805 24, 5806 25, 5807 25, 5808 25, 5809 25, 5810 26, 5811 26, 5812 26, 5813 26, 5814 27, 5815 27, 5816 27, 5817 27, 5818 28, 5819 28, 5820 28, 5821 28, 5822 29, 5823 29, 5824 29, 5825 29, 5826 30, 5827 30, 5828 30, 5829 30, 5830 31, 5831 31, 5832 31, 5833 31, 5834 32, 5835 32, 5836 32, 5837 32, 5838 33, 5839 33, 5840 33, 5841 33, 5842 34, 5843 34, 5844 34, 5845 34, 5846 35, 5847 35, 5848 35, 5849 35, 5850 36, 5851 36, 5852 36, 5853 36, 5854 37, 5855 37, 5856 37, 5857 37, 5858 38, 5859 38, 5860 38, 5861 38, 5862 39, 5863 39, 5864 39, 5865 39, 5866 40, 5867 40, 5868 40, 5869 40, 5870 41, 5871 41, 5872 41, 5873 41, 5874 42, 5875 42, 5876 42, 5877 42, 5878 43, 5879 43, 5880 43, 5881 43, 5882 44, 5883 44, 5884 44, 5885 44, 5886 45, 5887 45, 5888 45, 5889 45, 5890 46, 5891 46, 5892 46, 5893 46, 5894 47, 5895 47, 5896 47, 5897 47, 5898 48, 5899 48, 5900 48, 5901 48, 5902 49, 5903 49, 5904 49, 5905 49, 5906 50, 5907 50, 5908 50, 5909 50, 5910 51, 5911 51, 5912 51, 5913 51, 5914 52, 5915 52, 5916 52, 5917 52, 5918 53, 5919 53, 5920 53, 5921 53, 5922 54, 5923 54, 5924 54, 5925 54, 5926 55, 5927 55, 5928 55, 5929 55, 5930 56, 5931 56, 5932 56, 5933 56, 5934 57, 5935 57, 5936 57, 5937 57, 5938 58, 5939 58, 5940 58, 5941 58, 5942 59, 5943 59, 5944 59, 5945 59, 5946 60, 5947 60, 5948 60, 5949 60, 5950 61, 5951 61, 5952 61, 5953 61, 5954 62, 5955 62, 5956 62, 5957 62, 5958 63, 5959 63, 5960 63, 5961 63, 5962 /* CONTEXT_{M,L}SB6, second last byte, */ 5963 0, 5964 0, 5965 0, 5966 0, 5967 0, 5968 0, 5969 0, 5970 0, 5971 0, 5972 0, 5973 0, 5974 0, 5975 0, 5976 0, 5977 0, 5978 0, 5979 0, 5980 0, 5981 0, 5982 0, 5983 0, 5984 0, 5985 0, 5986 0, 5987 0, 5988 0, 5989 0, 5990 0, 5991 0, 5992 0, 5993 0, 5994 0, 5995 0, 5996 0, 5997 0, 5998 0, 5999 0, 6000 0, 6001 0, 6002 0, 6003 0, 6004 0, 6005 0, 6006 0, 6007 0, 6008 0, 6009 0, 6010 0, 6011 0, 6012 0, 6013 0, 6014 0, 6015 0, 6016 0, 6017 0, 6018 0, 6019 0, 6020 0, 6021 0, 6022 0, 6023 0, 6024 0, 6025 0, 6026 0, 6027 0, 6028 0, 6029 0, 6030 0, 6031 0, 6032 0, 6033 0, 6034 0, 6035 0, 6036 0, 6037 0, 6038 0, 6039 0, 6040 0, 6041 0, 6042 0, 6043 0, 6044 0, 6045 0, 6046 0, 6047 0, 6048 0, 6049 0, 6050 0, 6051 0, 6052 0, 6053 0, 6054 0, 6055 0, 6056 0, 6057 0, 6058 0, 6059 0, 6060 0, 6061 0, 6062 0, 6063 0, 6064 0, 6065 0, 6066 0, 6067 0, 6068 0, 6069 0, 6070 0, 6071 0, 6072 0, 6073 0, 6074 0, 6075 0, 6076 0, 6077 0, 6078 0, 6079 0, 6080 0, 6081 0, 6082 0, 6083 0, 6084 0, 6085 0, 6086 0, 6087 0, 6088 0, 6089 0, 6090 0, 6091 0, 6092 0, 6093 0, 6094 0, 6095 0, 6096 0, 6097 0, 6098 0, 6099 0, 6100 0, 6101 0, 6102 0, 6103 0, 6104 0, 6105 0, 6106 0, 6107 0, 6108 0, 6109 0, 6110 0, 6111 0, 6112 0, 6113 0, 6114 0, 6115 0, 6116 0, 6117 0, 6118 0, 6119 0, 6120 0, 6121 0, 6122 0, 6123 0, 6124 0, 6125 0, 6126 0, 6127 0, 6128 0, 6129 0, 6130 0, 6131 0, 6132 0, 6133 0, 6134 0, 6135 0, 6136 0, 6137 0, 6138 0, 6139 0, 6140 0, 6141 0, 6142 0, 6143 0, 6144 0, 6145 0, 6146 0, 6147 0, 6148 0, 6149 0, 6150 0, 6151 0, 6152 0, 6153 0, 6154 0, 6155 0, 6156 0, 6157 0, 6158 0, 6159 0, 6160 0, 6161 0, 6162 0, 6163 0, 6164 0, 6165 0, 6166 0, 6167 0, 6168 0, 6169 0, 6170 0, 6171 0, 6172 0, 6173 0, 6174 0, 6175 0, 6176 0, 6177 0, 6178 0, 6179 0, 6180 0, 6181 0, 6182 0, 6183 0, 6184 0, 6185 0, 6186 0, 6187 0, 6188 0, 6189 0, 6190 0, 6191 0, 6192 0, 6193 0, 6194 0, 6195 0, 6196 0, 6197 0, 6198 0, 6199 0, 6200 0, 6201 0, 6202 0, 6203 0, 6204 0, 6205 0, 6206 0, 6207 0, 6208 0, 6209 0, 6210 0, 6211 0, 6212 0, 6213 0, 6214 0, 6215 0, 6216 0, 6217 0, 6218 0 6219 ]); 6220 exports3.lookupOffsets = new Uint16Array([ 6221 /* CONTEXT_LSB6 */ 6222 1024, 6223 1536, 6224 1280, 6225 1536, 6226 0, 6227 256, 6228 768, 6229 512 6230 ]); 6231 }, 6232 {} 6233 ], 6234 3: [ 6235 function(require2, module3, exports3) { 6236 var BrotliInput = require2("./streams").BrotliInput; 6237 var BrotliOutput = require2("./streams").BrotliOutput; 6238 var BrotliBitReader = require2("./bit_reader"); 6239 var BrotliDictionary = require2("./dictionary"); 6240 var HuffmanCode = require2("./huffman").HuffmanCode; 6241 var BrotliBuildHuffmanTable = require2("./huffman").BrotliBuildHuffmanTable; 6242 var Context = require2("./context"); 6243 var Prefix = require2("./prefix"); 6244 var Transform = require2("./transform"); 6245 var kDefaultCodeLength = 8; 6246 var kCodeLengthRepeatCode = 16; 6247 var kNumLiteralCodes = 256; 6248 var kNumInsertAndCopyCodes = 704; 6249 var kNumBlockLengthCodes = 26; 6250 var kLiteralContextBits = 6; 6251 var kDistanceContextBits = 2; 6252 var HUFFMAN_TABLE_BITS = 8; 6253 var HUFFMAN_TABLE_MASK = 255; 6254 var HUFFMAN_MAX_TABLE_SIZE = 1080; 6255 var CODE_LENGTH_CODES = 18; 6256 var kCodeLengthCodeOrder = new Uint8Array([ 6257 1, 6258 2, 6259 3, 6260 4, 6261 0, 6262 5, 6263 17, 6264 6, 6265 16, 6266 7, 6267 8, 6268 9, 6269 10, 6270 11, 6271 12, 6272 13, 6273 14, 6274 15 6275 ]); 6276 var NUM_DISTANCE_SHORT_CODES = 16; 6277 var kDistanceShortCodeIndexOffset = new Uint8Array([ 6278 3, 6279 2, 6280 1, 6281 0, 6282 3, 6283 3, 6284 3, 6285 3, 6286 3, 6287 3, 6288 2, 6289 2, 6290 2, 6291 2, 6292 2, 6293 2 6294 ]); 6295 var kDistanceShortCodeValueOffset = new Int8Array([ 6296 0, 6297 0, 6298 0, 6299 0, 6300 -1, 6301 1, 6302 -2, 6303 2, 6304 -3, 6305 3, 6306 -1, 6307 1, 6308 -2, 6309 2, 6310 -3, 6311 3 6312 ]); 6313 var kMaxHuffmanTableSize = new Uint16Array([ 6314 256, 6315 402, 6316 436, 6317 468, 6318 500, 6319 534, 6320 566, 6321 598, 6322 630, 6323 662, 6324 694, 6325 726, 6326 758, 6327 790, 6328 822, 6329 854, 6330 886, 6331 920, 6332 952, 6333 984, 6334 1016, 6335 1048, 6336 1080 6337 ]); 6338 function DecodeWindowBits(br) { 6339 var n2; 6340 if (br.readBits(1) === 0) { 6341 return 16; 6342 } 6343 n2 = br.readBits(3); 6344 if (n2 > 0) { 6345 return 17 + n2; 6346 } 6347 n2 = br.readBits(3); 6348 if (n2 > 0) { 6349 return 8 + n2; 6350 } 6351 return 17; 6352 } 6353 function DecodeVarLenUint8(br) { 6354 if (br.readBits(1)) { 6355 var nbits = br.readBits(3); 6356 if (nbits === 0) { 6357 return 1; 6358 } else { 6359 return br.readBits(nbits) + (1 << nbits); 6360 } 6361 } 6362 return 0; 6363 } 6364 function MetaBlockLength() { 6365 this.meta_block_length = 0; 6366 this.input_end = 0; 6367 this.is_uncompressed = 0; 6368 this.is_metadata = false; 6369 } 6370 function DecodeMetaBlockLength(br) { 6371 var out = new MetaBlockLength(); 6372 var size_nibbles; 6373 var size_bytes; 6374 var i2; 6375 out.input_end = br.readBits(1); 6376 if (out.input_end && br.readBits(1)) { 6377 return out; 6378 } 6379 size_nibbles = br.readBits(2) + 4; 6380 if (size_nibbles === 7) { 6381 out.is_metadata = true; 6382 if (br.readBits(1) !== 0) 6383 throw new Error("Invalid reserved bit"); 6384 size_bytes = br.readBits(2); 6385 if (size_bytes === 0) return out; 6386 for (i2 = 0; i2 < size_bytes; i2++) { 6387 var next_byte = br.readBits(8); 6388 if (i2 + 1 === size_bytes && size_bytes > 1 && next_byte === 0) 6389 throw new Error("Invalid size byte"); 6390 out.meta_block_length |= next_byte << i2 * 8; 6391 } 6392 } else { 6393 for (i2 = 0; i2 < size_nibbles; ++i2) { 6394 var next_nibble = br.readBits(4); 6395 if (i2 + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0) 6396 throw new Error("Invalid size nibble"); 6397 out.meta_block_length |= next_nibble << i2 * 4; 6398 } 6399 } 6400 ++out.meta_block_length; 6401 if (!out.input_end && !out.is_metadata) { 6402 out.is_uncompressed = br.readBits(1); 6403 } 6404 return out; 6405 } 6406 function ReadSymbol(table, index, br) { 6407 var start_index = index; 6408 var nbits; 6409 br.fillBitWindow(); 6410 index += br.val_ >>> br.bit_pos_ & HUFFMAN_TABLE_MASK; 6411 nbits = table[index].bits - HUFFMAN_TABLE_BITS; 6412 if (nbits > 0) { 6413 br.bit_pos_ += HUFFMAN_TABLE_BITS; 6414 index += table[index].value; 6415 index += br.val_ >>> br.bit_pos_ & (1 << nbits) - 1; 6416 } 6417 br.bit_pos_ += table[index].bits; 6418 return table[index].value; 6419 } 6420 function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) { 6421 var symbol = 0; 6422 var prev_code_len = kDefaultCodeLength; 6423 var repeat = 0; 6424 var repeat_code_len = 0; 6425 var space = 32768; 6426 var table = []; 6427 for (var i2 = 0; i2 < 32; i2++) 6428 table.push(new HuffmanCode(0, 0)); 6429 BrotliBuildHuffmanTable( 6430 table, 6431 0, 6432 5, 6433 code_length_code_lengths, 6434 CODE_LENGTH_CODES 6435 ); 6436 while (symbol < num_symbols && space > 0) { 6437 var p3 = 0; 6438 var code_len; 6439 br.readMoreInput(); 6440 br.fillBitWindow(); 6441 p3 += br.val_ >>> br.bit_pos_ & 31; 6442 br.bit_pos_ += table[p3].bits; 6443 code_len = table[p3].value & 255; 6444 if (code_len < kCodeLengthRepeatCode) { 6445 repeat = 0; 6446 code_lengths[symbol++] = code_len; 6447 if (code_len !== 0) { 6448 prev_code_len = code_len; 6449 space -= 32768 >> code_len; 6450 } 6451 } else { 6452 var extra_bits = code_len - 14; 6453 var old_repeat; 6454 var repeat_delta; 6455 var new_len = 0; 6456 if (code_len === kCodeLengthRepeatCode) { 6457 new_len = prev_code_len; 6458 } 6459 if (repeat_code_len !== new_len) { 6460 repeat = 0; 6461 repeat_code_len = new_len; 6462 } 6463 old_repeat = repeat; 6464 if (repeat > 0) { 6465 repeat -= 2; 6466 repeat <<= extra_bits; 6467 } 6468 repeat += br.readBits(extra_bits) + 3; 6469 repeat_delta = repeat - old_repeat; 6470 if (symbol + repeat_delta > num_symbols) { 6471 throw new Error( 6472 "[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols" 6473 ); 6474 } 6475 for (var x2 = 0; x2 < repeat_delta; x2++) 6476 code_lengths[symbol + x2] = repeat_code_len; 6477 symbol += repeat_delta; 6478 if (repeat_code_len !== 0) { 6479 space -= repeat_delta << 15 - repeat_code_len; 6480 } 6481 } 6482 } 6483 if (space !== 0) { 6484 throw new Error( 6485 "[ReadHuffmanCodeLengths] space = " + space 6486 ); 6487 } 6488 for (; symbol < num_symbols; symbol++) 6489 code_lengths[symbol] = 0; 6490 } 6491 function ReadHuffmanCode(alphabet_size, tables, table, br) { 6492 var table_size = 0; 6493 var simple_code_or_skip; 6494 var code_lengths = new Uint8Array(alphabet_size); 6495 br.readMoreInput(); 6496 simple_code_or_skip = br.readBits(2); 6497 if (simple_code_or_skip === 1) { 6498 var i2; 6499 var max_bits_counter = alphabet_size - 1; 6500 var max_bits = 0; 6501 var symbols = new Int32Array(4); 6502 var num_symbols = br.readBits(2) + 1; 6503 while (max_bits_counter) { 6504 max_bits_counter >>= 1; 6505 ++max_bits; 6506 } 6507 for (i2 = 0; i2 < num_symbols; ++i2) { 6508 symbols[i2] = br.readBits(max_bits) % alphabet_size; 6509 code_lengths[symbols[i2]] = 2; 6510 } 6511 code_lengths[symbols[0]] = 1; 6512 switch (num_symbols) { 6513 case 1: 6514 break; 6515 case 3: 6516 if (symbols[0] === symbols[1] || symbols[0] === symbols[2] || symbols[1] === symbols[2]) { 6517 throw new Error( 6518 "[ReadHuffmanCode] invalid symbols" 6519 ); 6520 } 6521 break; 6522 case 2: 6523 if (symbols[0] === symbols[1]) { 6524 throw new Error( 6525 "[ReadHuffmanCode] invalid symbols" 6526 ); 6527 } 6528 code_lengths[symbols[1]] = 1; 6529 break; 6530 case 4: 6531 if (symbols[0] === symbols[1] || symbols[0] === symbols[2] || symbols[0] === symbols[3] || symbols[1] === symbols[2] || symbols[1] === symbols[3] || symbols[2] === symbols[3]) { 6532 throw new Error( 6533 "[ReadHuffmanCode] invalid symbols" 6534 ); 6535 } 6536 if (br.readBits(1)) { 6537 code_lengths[symbols[2]] = 3; 6538 code_lengths[symbols[3]] = 3; 6539 } else { 6540 code_lengths[symbols[0]] = 2; 6541 } 6542 break; 6543 } 6544 } else { 6545 var i2; 6546 var code_length_code_lengths = new Uint8Array( 6547 CODE_LENGTH_CODES 6548 ); 6549 var space = 32; 6550 var num_codes = 0; 6551 var huff = [ 6552 new HuffmanCode(2, 0), 6553 new HuffmanCode(2, 4), 6554 new HuffmanCode(2, 3), 6555 new HuffmanCode(3, 2), 6556 new HuffmanCode(2, 0), 6557 new HuffmanCode(2, 4), 6558 new HuffmanCode(2, 3), 6559 new HuffmanCode(4, 1), 6560 new HuffmanCode(2, 0), 6561 new HuffmanCode(2, 4), 6562 new HuffmanCode(2, 3), 6563 new HuffmanCode(3, 2), 6564 new HuffmanCode(2, 0), 6565 new HuffmanCode(2, 4), 6566 new HuffmanCode(2, 3), 6567 new HuffmanCode(4, 5) 6568 ]; 6569 for (i2 = simple_code_or_skip; i2 < CODE_LENGTH_CODES && space > 0; ++i2) { 6570 var code_len_idx = kCodeLengthCodeOrder[i2]; 6571 var p3 = 0; 6572 var v2; 6573 br.fillBitWindow(); 6574 p3 += br.val_ >>> br.bit_pos_ & 15; 6575 br.bit_pos_ += huff[p3].bits; 6576 v2 = huff[p3].value; 6577 code_length_code_lengths[code_len_idx] = v2; 6578 if (v2 !== 0) { 6579 space -= 32 >> v2; 6580 ++num_codes; 6581 } 6582 } 6583 if (!(num_codes === 1 || space === 0)) 6584 throw new Error( 6585 "[ReadHuffmanCode] invalid num_codes or space" 6586 ); 6587 ReadHuffmanCodeLengths( 6588 code_length_code_lengths, 6589 alphabet_size, 6590 code_lengths, 6591 br 6592 ); 6593 } 6594 table_size = BrotliBuildHuffmanTable( 6595 tables, 6596 table, 6597 HUFFMAN_TABLE_BITS, 6598 code_lengths, 6599 alphabet_size 6600 ); 6601 if (table_size === 0) { 6602 throw new Error( 6603 "[ReadHuffmanCode] BuildHuffmanTable failed: " 6604 ); 6605 } 6606 return table_size; 6607 } 6608 function ReadBlockLength(table, index, br) { 6609 var code; 6610 var nbits; 6611 code = ReadSymbol(table, index, br); 6612 nbits = Prefix.kBlockLengthPrefixCode[code].nbits; 6613 return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits); 6614 } 6615 function TranslateShortCodes(code, ringbuffer, index) { 6616 var val; 6617 if (code < NUM_DISTANCE_SHORT_CODES) { 6618 index += kDistanceShortCodeIndexOffset[code]; 6619 index &= 3; 6620 val = ringbuffer[index] + kDistanceShortCodeValueOffset[code]; 6621 } else { 6622 val = code - NUM_DISTANCE_SHORT_CODES + 1; 6623 } 6624 return val; 6625 } 6626 function MoveToFront(v2, index) { 6627 var value = v2[index]; 6628 var i2 = index; 6629 for (; i2; --i2) v2[i2] = v2[i2 - 1]; 6630 v2[0] = value; 6631 } 6632 function InverseMoveToFrontTransform(v2, v_len) { 6633 var mtf = new Uint8Array(256); 6634 var i2; 6635 for (i2 = 0; i2 < 256; ++i2) { 6636 mtf[i2] = i2; 6637 } 6638 for (i2 = 0; i2 < v_len; ++i2) { 6639 var index = v2[i2]; 6640 v2[i2] = mtf[index]; 6641 if (index) MoveToFront(mtf, index); 6642 } 6643 } 6644 function HuffmanTreeGroup(alphabet_size, num_htrees) { 6645 this.alphabet_size = alphabet_size; 6646 this.num_htrees = num_htrees; 6647 this.codes = new Array( 6648 num_htrees + num_htrees * kMaxHuffmanTableSize[alphabet_size + 31 >>> 5] 6649 ); 6650 this.htrees = new Uint32Array(num_htrees); 6651 } 6652 HuffmanTreeGroup.prototype.decode = function(br) { 6653 var i2; 6654 var table_size; 6655 var next = 0; 6656 for (i2 = 0; i2 < this.num_htrees; ++i2) { 6657 this.htrees[i2] = next; 6658 table_size = ReadHuffmanCode( 6659 this.alphabet_size, 6660 this.codes, 6661 next, 6662 br 6663 ); 6664 next += table_size; 6665 } 6666 }; 6667 function DecodeContextMap(context_map_size, br) { 6668 var out = { num_htrees: null, context_map: null }; 6669 var use_rle_for_zeros; 6670 var max_run_length_prefix = 0; 6671 var table; 6672 var i2; 6673 br.readMoreInput(); 6674 var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1; 6675 var context_map = out.context_map = new Uint8Array( 6676 context_map_size 6677 ); 6678 if (num_htrees <= 1) { 6679 return out; 6680 } 6681 use_rle_for_zeros = br.readBits(1); 6682 if (use_rle_for_zeros) { 6683 max_run_length_prefix = br.readBits(4) + 1; 6684 } 6685 table = []; 6686 for (i2 = 0; i2 < HUFFMAN_MAX_TABLE_SIZE; i2++) { 6687 table[i2] = new HuffmanCode(0, 0); 6688 } 6689 ReadHuffmanCode( 6690 num_htrees + max_run_length_prefix, 6691 table, 6692 0, 6693 br 6694 ); 6695 for (i2 = 0; i2 < context_map_size; ) { 6696 var code; 6697 br.readMoreInput(); 6698 code = ReadSymbol(table, 0, br); 6699 if (code === 0) { 6700 context_map[i2] = 0; 6701 ++i2; 6702 } else if (code <= max_run_length_prefix) { 6703 var reps = 1 + (1 << code) + br.readBits(code); 6704 while (--reps) { 6705 if (i2 >= context_map_size) { 6706 throw new Error( 6707 "[DecodeContextMap] i >= context_map_size" 6708 ); 6709 } 6710 context_map[i2] = 0; 6711 ++i2; 6712 } 6713 } else { 6714 context_map[i2] = code - max_run_length_prefix; 6715 ++i2; 6716 } 6717 } 6718 if (br.readBits(1)) { 6719 InverseMoveToFrontTransform( 6720 context_map, 6721 context_map_size 6722 ); 6723 } 6724 return out; 6725 } 6726 function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) { 6727 var ringbuffer = tree_type * 2; 6728 var index = tree_type; 6729 var type_code = ReadSymbol( 6730 trees, 6731 tree_type * HUFFMAN_MAX_TABLE_SIZE, 6732 br 6733 ); 6734 var block_type; 6735 if (type_code === 0) { 6736 block_type = ringbuffers[ringbuffer + (indexes[index] & 1)]; 6737 } else if (type_code === 1) { 6738 block_type = ringbuffers[ringbuffer + (indexes[index] - 1 & 1)] + 1; 6739 } else { 6740 block_type = type_code - 2; 6741 } 6742 if (block_type >= max_block_type) { 6743 block_type -= max_block_type; 6744 } 6745 block_types[tree_type] = block_type; 6746 ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type; 6747 ++indexes[index]; 6748 } 6749 function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) { 6750 var rb_size = ringbuffer_mask + 1; 6751 var rb_pos = pos & ringbuffer_mask; 6752 var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK; 6753 var nbytes; 6754 if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) { 6755 while (len-- > 0) { 6756 br.readMoreInput(); 6757 ringbuffer[rb_pos++] = br.readBits(8); 6758 if (rb_pos === rb_size) { 6759 output.write(ringbuffer, rb_size); 6760 rb_pos = 0; 6761 } 6762 } 6763 return; 6764 } 6765 if (br.bit_end_pos_ < 32) { 6766 throw new Error( 6767 "[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32" 6768 ); 6769 } 6770 while (br.bit_pos_ < 32) { 6771 ringbuffer[rb_pos] = br.val_ >>> br.bit_pos_; 6772 br.bit_pos_ += 8; 6773 ++rb_pos; 6774 --len; 6775 } 6776 nbytes = br.bit_end_pos_ - br.bit_pos_ >> 3; 6777 if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) { 6778 var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos; 6779 for (var x2 = 0; x2 < tail; x2++) 6780 ringbuffer[rb_pos + x2] = br.buf_[br_pos + x2]; 6781 nbytes -= tail; 6782 rb_pos += tail; 6783 len -= tail; 6784 br_pos = 0; 6785 } 6786 for (var x2 = 0; x2 < nbytes; x2++) 6787 ringbuffer[rb_pos + x2] = br.buf_[br_pos + x2]; 6788 rb_pos += nbytes; 6789 len -= nbytes; 6790 if (rb_pos >= rb_size) { 6791 output.write(ringbuffer, rb_size); 6792 rb_pos -= rb_size; 6793 for (var x2 = 0; x2 < rb_pos; x2++) 6794 ringbuffer[x2] = ringbuffer[rb_size + x2]; 6795 } 6796 while (rb_pos + len >= rb_size) { 6797 nbytes = rb_size - rb_pos; 6798 if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) { 6799 throw new Error( 6800 "[CopyUncompressedBlockToOutput] not enough bytes" 6801 ); 6802 } 6803 output.write(ringbuffer, rb_size); 6804 len -= nbytes; 6805 rb_pos = 0; 6806 } 6807 if (br.input_.read(ringbuffer, rb_pos, len) < len) { 6808 throw new Error( 6809 "[CopyUncompressedBlockToOutput] not enough bytes" 6810 ); 6811 } 6812 br.reset(); 6813 } 6814 function JumpToByteBoundary(br) { 6815 var new_bit_pos = br.bit_pos_ + 7 & ~7; 6816 var pad_bits = br.readBits(new_bit_pos - br.bit_pos_); 6817 return pad_bits == 0; 6818 } 6819 function BrotliDecompressedSize(buffer) { 6820 var input = new BrotliInput(buffer); 6821 var br = new BrotliBitReader(input); 6822 DecodeWindowBits(br); 6823 var out = DecodeMetaBlockLength(br); 6824 return out.meta_block_length; 6825 } 6826 exports3.BrotliDecompressedSize = BrotliDecompressedSize; 6827 function BrotliDecompressBuffer(buffer, output_size) { 6828 var input = new BrotliInput(buffer); 6829 if (output_size == null) { 6830 output_size = BrotliDecompressedSize(buffer); 6831 } 6832 var output_buffer = new Uint8Array(output_size); 6833 var output = new BrotliOutput(output_buffer); 6834 BrotliDecompress(input, output); 6835 if (output.pos < output.buffer.length) { 6836 output.buffer = output.buffer.subarray( 6837 0, 6838 output.pos 6839 ); 6840 } 6841 return output.buffer; 6842 } 6843 exports3.BrotliDecompressBuffer = BrotliDecompressBuffer; 6844 function BrotliDecompress(input, output) { 6845 var i2; 6846 var pos = 0; 6847 var input_end = 0; 6848 var window_bits = 0; 6849 var max_backward_distance; 6850 var max_distance = 0; 6851 var ringbuffer_size; 6852 var ringbuffer_mask; 6853 var ringbuffer; 6854 var ringbuffer_end; 6855 var dist_rb = [16, 15, 11, 4]; 6856 var dist_rb_idx = 0; 6857 var prev_byte1 = 0; 6858 var prev_byte2 = 0; 6859 var hgroup = [ 6860 new HuffmanTreeGroup(0, 0), 6861 new HuffmanTreeGroup(0, 0), 6862 new HuffmanTreeGroup(0, 0) 6863 ]; 6864 var block_type_trees; 6865 var block_len_trees; 6866 var br; 6867 var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE; 6868 br = new BrotliBitReader(input); 6869 window_bits = DecodeWindowBits(br); 6870 max_backward_distance = (1 << window_bits) - 16; 6871 ringbuffer_size = 1 << window_bits; 6872 ringbuffer_mask = ringbuffer_size - 1; 6873 ringbuffer = new Uint8Array( 6874 ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength 6875 ); 6876 ringbuffer_end = ringbuffer_size; 6877 block_type_trees = []; 6878 block_len_trees = []; 6879 for (var x2 = 0; x2 < 3 * HUFFMAN_MAX_TABLE_SIZE; x2++) { 6880 block_type_trees[x2] = new HuffmanCode(0, 0); 6881 block_len_trees[x2] = new HuffmanCode(0, 0); 6882 } 6883 while (!input_end) { 6884 var meta_block_remaining_len = 0; 6885 var is_uncompressed; 6886 var block_length = [1 << 28, 1 << 28, 1 << 28]; 6887 var block_type = [0]; 6888 var num_block_types = [1, 1, 1]; 6889 var block_type_rb = [0, 1, 0, 1, 0, 1]; 6890 var block_type_rb_index = [0]; 6891 var distance_postfix_bits; 6892 var num_direct_distance_codes; 6893 var distance_postfix_mask; 6894 var num_distance_codes; 6895 var context_map = null; 6896 var context_modes = null; 6897 var num_literal_htrees; 6898 var dist_context_map = null; 6899 var num_dist_htrees; 6900 var context_offset = 0; 6901 var context_map_slice = null; 6902 var literal_htree_index = 0; 6903 var dist_context_offset = 0; 6904 var dist_context_map_slice = null; 6905 var dist_htree_index = 0; 6906 var context_lookup_offset1 = 0; 6907 var context_lookup_offset2 = 0; 6908 var context_mode; 6909 var htree_command; 6910 for (i2 = 0; i2 < 3; ++i2) { 6911 hgroup[i2].codes = null; 6912 hgroup[i2].htrees = null; 6913 } 6914 br.readMoreInput(); 6915 var _out = DecodeMetaBlockLength(br); 6916 meta_block_remaining_len = _out.meta_block_length; 6917 if (pos + meta_block_remaining_len > output.buffer.length) { 6918 var tmp = new Uint8Array( 6919 pos + meta_block_remaining_len 6920 ); 6921 tmp.set(output.buffer); 6922 output.buffer = tmp; 6923 } 6924 input_end = _out.input_end; 6925 is_uncompressed = _out.is_uncompressed; 6926 if (_out.is_metadata) { 6927 JumpToByteBoundary(br); 6928 for (; meta_block_remaining_len > 0; --meta_block_remaining_len) { 6929 br.readMoreInput(); 6930 br.readBits(8); 6931 } 6932 continue; 6933 } 6934 if (meta_block_remaining_len === 0) { 6935 continue; 6936 } 6937 if (is_uncompressed) { 6938 br.bit_pos_ = br.bit_pos_ + 7 & ~7; 6939 CopyUncompressedBlockToOutput( 6940 output, 6941 meta_block_remaining_len, 6942 pos, 6943 ringbuffer, 6944 ringbuffer_mask, 6945 br 6946 ); 6947 pos += meta_block_remaining_len; 6948 continue; 6949 } 6950 for (i2 = 0; i2 < 3; ++i2) { 6951 num_block_types[i2] = DecodeVarLenUint8(br) + 1; 6952 if (num_block_types[i2] >= 2) { 6953 ReadHuffmanCode( 6954 num_block_types[i2] + 2, 6955 block_type_trees, 6956 i2 * HUFFMAN_MAX_TABLE_SIZE, 6957 br 6958 ); 6959 ReadHuffmanCode( 6960 kNumBlockLengthCodes, 6961 block_len_trees, 6962 i2 * HUFFMAN_MAX_TABLE_SIZE, 6963 br 6964 ); 6965 block_length[i2] = ReadBlockLength( 6966 block_len_trees, 6967 i2 * HUFFMAN_MAX_TABLE_SIZE, 6968 br 6969 ); 6970 block_type_rb_index[i2] = 1; 6971 } 6972 } 6973 br.readMoreInput(); 6974 distance_postfix_bits = br.readBits(2); 6975 num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits); 6976 distance_postfix_mask = (1 << distance_postfix_bits) - 1; 6977 num_distance_codes = num_direct_distance_codes + (48 << distance_postfix_bits); 6978 context_modes = new Uint8Array( 6979 num_block_types[0] 6980 ); 6981 for (i2 = 0; i2 < num_block_types[0]; ++i2) { 6982 br.readMoreInput(); 6983 context_modes[i2] = br.readBits(2) << 1; 6984 } 6985 var _o1 = DecodeContextMap( 6986 num_block_types[0] << kLiteralContextBits, 6987 br 6988 ); 6989 num_literal_htrees = _o1.num_htrees; 6990 context_map = _o1.context_map; 6991 var _o2 = DecodeContextMap( 6992 num_block_types[2] << kDistanceContextBits, 6993 br 6994 ); 6995 num_dist_htrees = _o2.num_htrees; 6996 dist_context_map = _o2.context_map; 6997 hgroup[0] = new HuffmanTreeGroup( 6998 kNumLiteralCodes, 6999 num_literal_htrees 7000 ); 7001 hgroup[1] = new HuffmanTreeGroup( 7002 kNumInsertAndCopyCodes, 7003 num_block_types[1] 7004 ); 7005 hgroup[2] = new HuffmanTreeGroup( 7006 num_distance_codes, 7007 num_dist_htrees 7008 ); 7009 for (i2 = 0; i2 < 3; ++i2) { 7010 hgroup[i2].decode(br); 7011 } 7012 context_map_slice = 0; 7013 dist_context_map_slice = 0; 7014 context_mode = context_modes[block_type[0]]; 7015 context_lookup_offset1 = Context.lookupOffsets[context_mode]; 7016 context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; 7017 htree_command = hgroup[1].htrees[0]; 7018 while (meta_block_remaining_len > 0) { 7019 var cmd_code; 7020 var range_idx; 7021 var insert_code; 7022 var copy_code; 7023 var insert_length; 7024 var copy_length; 7025 var distance_code; 7026 var distance; 7027 var context; 7028 var j2; 7029 var copy_dst; 7030 br.readMoreInput(); 7031 if (block_length[1] === 0) { 7032 DecodeBlockType( 7033 num_block_types[1], 7034 block_type_trees, 7035 1, 7036 block_type, 7037 block_type_rb, 7038 block_type_rb_index, 7039 br 7040 ); 7041 block_length[1] = ReadBlockLength( 7042 block_len_trees, 7043 HUFFMAN_MAX_TABLE_SIZE, 7044 br 7045 ); 7046 htree_command = hgroup[1].htrees[block_type[1]]; 7047 } 7048 --block_length[1]; 7049 cmd_code = ReadSymbol( 7050 hgroup[1].codes, 7051 htree_command, 7052 br 7053 ); 7054 range_idx = cmd_code >> 6; 7055 if (range_idx >= 2) { 7056 range_idx -= 2; 7057 distance_code = -1; 7058 } else { 7059 distance_code = 0; 7060 } 7061 insert_code = Prefix.kInsertRangeLut[range_idx] + (cmd_code >> 3 & 7); 7062 copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7); 7063 insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset + br.readBits( 7064 Prefix.kInsertLengthPrefixCode[insert_code].nbits 7065 ); 7066 copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset + br.readBits( 7067 Prefix.kCopyLengthPrefixCode[copy_code].nbits 7068 ); 7069 prev_byte1 = ringbuffer[pos - 1 & ringbuffer_mask]; 7070 prev_byte2 = ringbuffer[pos - 2 & ringbuffer_mask]; 7071 for (j2 = 0; j2 < insert_length; ++j2) { 7072 br.readMoreInput(); 7073 if (block_length[0] === 0) { 7074 DecodeBlockType( 7075 num_block_types[0], 7076 block_type_trees, 7077 0, 7078 block_type, 7079 block_type_rb, 7080 block_type_rb_index, 7081 br 7082 ); 7083 block_length[0] = ReadBlockLength( 7084 block_len_trees, 7085 0, 7086 br 7087 ); 7088 context_offset = block_type[0] << kLiteralContextBits; 7089 context_map_slice = context_offset; 7090 context_mode = context_modes[block_type[0]]; 7091 context_lookup_offset1 = Context.lookupOffsets[context_mode]; 7092 context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; 7093 } 7094 context = Context.lookup[context_lookup_offset1 + prev_byte1] | Context.lookup[context_lookup_offset2 + prev_byte2]; 7095 literal_htree_index = context_map[context_map_slice + context]; 7096 --block_length[0]; 7097 prev_byte2 = prev_byte1; 7098 prev_byte1 = ReadSymbol( 7099 hgroup[0].codes, 7100 hgroup[0].htrees[literal_htree_index], 7101 br 7102 ); 7103 ringbuffer[pos & ringbuffer_mask] = prev_byte1; 7104 if ((pos & ringbuffer_mask) === ringbuffer_mask) { 7105 output.write( 7106 ringbuffer, 7107 ringbuffer_size 7108 ); 7109 } 7110 ++pos; 7111 } 7112 meta_block_remaining_len -= insert_length; 7113 if (meta_block_remaining_len <= 0) break; 7114 if (distance_code < 0) { 7115 var context; 7116 br.readMoreInput(); 7117 if (block_length[2] === 0) { 7118 DecodeBlockType( 7119 num_block_types[2], 7120 block_type_trees, 7121 2, 7122 block_type, 7123 block_type_rb, 7124 block_type_rb_index, 7125 br 7126 ); 7127 block_length[2] = ReadBlockLength( 7128 block_len_trees, 7129 2 * HUFFMAN_MAX_TABLE_SIZE, 7130 br 7131 ); 7132 dist_context_offset = block_type[2] << kDistanceContextBits; 7133 dist_context_map_slice = dist_context_offset; 7134 } 7135 --block_length[2]; 7136 context = (copy_length > 4 ? 3 : copy_length - 2) & 255; 7137 dist_htree_index = dist_context_map[dist_context_map_slice + context]; 7138 distance_code = ReadSymbol( 7139 hgroup[2].codes, 7140 hgroup[2].htrees[dist_htree_index], 7141 br 7142 ); 7143 if (distance_code >= num_direct_distance_codes) { 7144 var nbits; 7145 var postfix; 7146 var offset; 7147 distance_code -= num_direct_distance_codes; 7148 postfix = distance_code & distance_postfix_mask; 7149 distance_code >>= distance_postfix_bits; 7150 nbits = (distance_code >> 1) + 1; 7151 offset = (2 + (distance_code & 1) << nbits) - 4; 7152 distance_code = num_direct_distance_codes + (offset + br.readBits(nbits) << distance_postfix_bits) + postfix; 7153 } 7154 } 7155 distance = TranslateShortCodes( 7156 distance_code, 7157 dist_rb, 7158 dist_rb_idx 7159 ); 7160 if (distance < 0) { 7161 throw new Error( 7162 "[BrotliDecompress] invalid distance" 7163 ); 7164 } 7165 if (pos < max_backward_distance && max_distance !== max_backward_distance) { 7166 max_distance = pos; 7167 } else { 7168 max_distance = max_backward_distance; 7169 } 7170 copy_dst = pos & ringbuffer_mask; 7171 if (distance > max_distance) { 7172 if (copy_length >= BrotliDictionary.minDictionaryWordLength && copy_length <= BrotliDictionary.maxDictionaryWordLength) { 7173 var offset = BrotliDictionary.offsetsByLength[copy_length]; 7174 var word_id = distance - max_distance - 1; 7175 var shift = BrotliDictionary.sizeBitsByLength[copy_length]; 7176 var mask = (1 << shift) - 1; 7177 var word_idx = word_id & mask; 7178 var transform_idx = word_id >> shift; 7179 offset += word_idx * copy_length; 7180 if (transform_idx < Transform.kNumTransforms) { 7181 var len = Transform.transformDictionaryWord( 7182 ringbuffer, 7183 copy_dst, 7184 offset, 7185 copy_length, 7186 transform_idx 7187 ); 7188 copy_dst += len; 7189 pos += len; 7190 meta_block_remaining_len -= len; 7191 if (copy_dst >= ringbuffer_end) { 7192 output.write( 7193 ringbuffer, 7194 ringbuffer_size 7195 ); 7196 for (var _x9 = 0; _x9 < copy_dst - ringbuffer_end; _x9++) 7197 ringbuffer[_x9] = ringbuffer[ringbuffer_end + _x9]; 7198 } 7199 } else { 7200 throw new Error( 7201 "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len 7202 ); 7203 } 7204 } else { 7205 throw new Error( 7206 "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len 7207 ); 7208 } 7209 } else { 7210 if (distance_code > 0) { 7211 dist_rb[dist_rb_idx & 3] = distance; 7212 ++dist_rb_idx; 7213 } 7214 if (copy_length > meta_block_remaining_len) { 7215 throw new Error( 7216 "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len 7217 ); 7218 } 7219 for (j2 = 0; j2 < copy_length; ++j2) { 7220 ringbuffer[pos & ringbuffer_mask] = ringbuffer[pos - distance & ringbuffer_mask]; 7221 if ((pos & ringbuffer_mask) === ringbuffer_mask) { 7222 output.write( 7223 ringbuffer, 7224 ringbuffer_size 7225 ); 7226 } 7227 ++pos; 7228 --meta_block_remaining_len; 7229 } 7230 } 7231 prev_byte1 = ringbuffer[pos - 1 & ringbuffer_mask]; 7232 prev_byte2 = ringbuffer[pos - 2 & ringbuffer_mask]; 7233 } 7234 pos &= 1073741823; 7235 } 7236 output.write(ringbuffer, pos & ringbuffer_mask); 7237 } 7238 exports3.BrotliDecompress = BrotliDecompress; 7239 BrotliDictionary.init(); 7240 }, 7241 { 7242 "./bit_reader": 1, 7243 "./context": 2, 7244 "./dictionary": 6, 7245 "./huffman": 7, 7246 "./prefix": 9, 7247 "./streams": 10, 7248 "./transform": 11 7249 } 7250 ], 7251 4: [ 7252 function(require2, module3, exports3) { 7253 var base64 = require2("base64-js"); 7254 exports3.init = function() { 7255 var BrotliDecompressBuffer = require2("./decode").BrotliDecompressBuffer; 7256 var compressed = base64.toByteArray( 7257 require2("./dictionary.bin.js") 7258 ); 7259 return BrotliDecompressBuffer(compressed); 7260 }; 7261 }, 7262 { "./decode": 3, "./dictionary.bin.js": 5, "base64-js": 8 } 7263 ], 7264 5: [ 7265 function(require2, module3, exports3) { 7266 module3.exports = "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"; 7267 }, 7268 {} 7269 ], 7270 6: [ 7271 function(require2, module3, exports3) { 7272 var data = require2("./dictionary-browser"); 7273 exports3.init = function() { 7274 exports3.dictionary = data.init(); 7275 }; 7276 exports3.offsetsByLength = new Uint32Array([ 7277 0, 7278 0, 7279 0, 7280 0, 7281 0, 7282 4096, 7283 9216, 7284 21504, 7285 35840, 7286 44032, 7287 53248, 7288 63488, 7289 74752, 7290 87040, 7291 93696, 7292 100864, 7293 104704, 7294 106752, 7295 108928, 7296 113536, 7297 115968, 7298 118528, 7299 119872, 7300 121280, 7301 122016 7302 ]); 7303 exports3.sizeBitsByLength = new Uint8Array([ 7304 0, 7305 0, 7306 0, 7307 0, 7308 10, 7309 10, 7310 11, 7311 11, 7312 10, 7313 10, 7314 10, 7315 10, 7316 10, 7317 9, 7318 9, 7319 8, 7320 7, 7321 7, 7322 8, 7323 7, 7324 7, 7325 6, 7326 6, 7327 5, 7328 5 7329 ]); 7330 exports3.minDictionaryWordLength = 4; 7331 exports3.maxDictionaryWordLength = 24; 7332 }, 7333 { "./dictionary-browser": 4 } 7334 ], 7335 7: [ 7336 function(require2, module3, exports3) { 7337 function HuffmanCode(bits, value) { 7338 this.bits = bits; 7339 this.value = value; 7340 } 7341 exports3.HuffmanCode = HuffmanCode; 7342 var MAX_LENGTH = 15; 7343 function GetNextKey(key, len) { 7344 var step = 1 << len - 1; 7345 while (key & step) { 7346 step >>= 1; 7347 } 7348 return (key & step - 1) + step; 7349 } 7350 function ReplicateValue(table, i2, step, end, code) { 7351 do { 7352 end -= step; 7353 table[i2 + end] = new HuffmanCode( 7354 code.bits, 7355 code.value 7356 ); 7357 } while (end > 0); 7358 } 7359 function NextTableBitSize(count, len, root_bits) { 7360 var left = 1 << len - root_bits; 7361 while (len < MAX_LENGTH) { 7362 left -= count[len]; 7363 if (left <= 0) break; 7364 ++len; 7365 left <<= 1; 7366 } 7367 return len - root_bits; 7368 } 7369 exports3.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) { 7370 var start_table = table; 7371 var code; 7372 var len; 7373 var symbol; 7374 var key; 7375 var step; 7376 var low; 7377 var mask; 7378 var table_bits; 7379 var table_size; 7380 var total_size; 7381 var sorted; 7382 var count = new Int32Array( 7383 MAX_LENGTH + 1 7384 ); 7385 var offset = new Int32Array( 7386 MAX_LENGTH + 1 7387 ); 7388 sorted = new Int32Array(code_lengths_size); 7389 for (symbol = 0; symbol < code_lengths_size; symbol++) { 7390 count[code_lengths[symbol]]++; 7391 } 7392 offset[1] = 0; 7393 for (len = 1; len < MAX_LENGTH; len++) { 7394 offset[len + 1] = offset[len] + count[len]; 7395 } 7396 for (symbol = 0; symbol < code_lengths_size; symbol++) { 7397 if (code_lengths[symbol] !== 0) { 7398 sorted[offset[code_lengths[symbol]]++] = symbol; 7399 } 7400 } 7401 table_bits = root_bits; 7402 table_size = 1 << table_bits; 7403 total_size = table_size; 7404 if (offset[MAX_LENGTH] === 1) { 7405 for (key = 0; key < total_size; ++key) { 7406 root_table[table + key] = new HuffmanCode( 7407 0, 7408 sorted[0] & 65535 7409 ); 7410 } 7411 return total_size; 7412 } 7413 key = 0; 7414 symbol = 0; 7415 for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { 7416 for (; count[len] > 0; --count[len]) { 7417 code = new HuffmanCode( 7418 len & 255, 7419 sorted[symbol++] & 65535 7420 ); 7421 ReplicateValue( 7422 root_table, 7423 table + key, 7424 step, 7425 table_size, 7426 code 7427 ); 7428 key = GetNextKey(key, len); 7429 } 7430 } 7431 mask = total_size - 1; 7432 low = -1; 7433 for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) { 7434 for (; count[len] > 0; --count[len]) { 7435 if ((key & mask) !== low) { 7436 table += table_size; 7437 table_bits = NextTableBitSize( 7438 count, 7439 len, 7440 root_bits 7441 ); 7442 table_size = 1 << table_bits; 7443 total_size += table_size; 7444 low = key & mask; 7445 root_table[start_table + low] = new HuffmanCode( 7446 table_bits + root_bits & 255, 7447 table - start_table - low & 65535 7448 ); 7449 } 7450 code = new HuffmanCode( 7451 len - root_bits & 255, 7452 sorted[symbol++] & 65535 7453 ); 7454 ReplicateValue( 7455 root_table, 7456 table + (key >> root_bits), 7457 step, 7458 table_size, 7459 code 7460 ); 7461 key = GetNextKey(key, len); 7462 } 7463 } 7464 return total_size; 7465 }; 7466 }, 7467 {} 7468 ], 7469 8: [ 7470 function(require2, module3, exports3) { 7471 "use strict"; 7472 exports3.byteLength = byteLength; 7473 exports3.toByteArray = toByteArray; 7474 exports3.fromByteArray = fromByteArray; 7475 var lookup = []; 7476 var revLookup = []; 7477 var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array; 7478 var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 7479 for (var i2 = 0, len = code.length; i2 < len; ++i2) { 7480 lookup[i2] = code[i2]; 7481 revLookup[code.charCodeAt(i2)] = i2; 7482 } 7483 revLookup["-".charCodeAt(0)] = 62; 7484 revLookup["_".charCodeAt(0)] = 63; 7485 function getLens(b64) { 7486 var len2 = b64.length; 7487 if (len2 % 4 > 0) { 7488 throw new Error( 7489 "Invalid string. Length must be a multiple of 4" 7490 ); 7491 } 7492 var validLen = b64.indexOf("="); 7493 if (validLen === -1) validLen = len2; 7494 var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4; 7495 return [validLen, placeHoldersLen]; 7496 } 7497 function byteLength(b64) { 7498 var lens = getLens(b64); 7499 var validLen = lens[0]; 7500 var placeHoldersLen = lens[1]; 7501 return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; 7502 } 7503 function _byteLength(b64, validLen, placeHoldersLen) { 7504 return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; 7505 } 7506 function toByteArray(b64) { 7507 var tmp; 7508 var lens = getLens(b64); 7509 var validLen = lens[0]; 7510 var placeHoldersLen = lens[1]; 7511 var arr = new Arr( 7512 _byteLength(b64, validLen, placeHoldersLen) 7513 ); 7514 var curByte = 0; 7515 var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen; 7516 for (var i22 = 0; i22 < len2; i22 += 4) { 7517 tmp = revLookup[b64.charCodeAt(i22)] << 18 | revLookup[b64.charCodeAt(i22 + 1)] << 12 | revLookup[b64.charCodeAt(i22 + 2)] << 6 | revLookup[b64.charCodeAt(i22 + 3)]; 7518 arr[curByte++] = tmp >> 16 & 255; 7519 arr[curByte++] = tmp >> 8 & 255; 7520 arr[curByte++] = tmp & 255; 7521 } 7522 if (placeHoldersLen === 2) { 7523 tmp = revLookup[b64.charCodeAt(i22)] << 2 | revLookup[b64.charCodeAt(i22 + 1)] >> 4; 7524 arr[curByte++] = tmp & 255; 7525 } 7526 if (placeHoldersLen === 1) { 7527 tmp = revLookup[b64.charCodeAt(i22)] << 10 | revLookup[b64.charCodeAt(i22 + 1)] << 4 | revLookup[b64.charCodeAt(i22 + 2)] >> 2; 7528 arr[curByte++] = tmp >> 8 & 255; 7529 arr[curByte++] = tmp & 255; 7530 } 7531 return arr; 7532 } 7533 function tripletToBase64(num) { 7534 return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63]; 7535 } 7536 function encodeChunk(uint8, start, end) { 7537 var tmp; 7538 var output = []; 7539 for (var i22 = start; i22 < end; i22 += 3) { 7540 tmp = (uint8[i22] << 16 & 16711680) + (uint8[i22 + 1] << 8 & 65280) + (uint8[i22 + 2] & 255); 7541 output.push(tripletToBase64(tmp)); 7542 } 7543 return output.join(""); 7544 } 7545 function fromByteArray(uint8) { 7546 var tmp; 7547 var len2 = uint8.length; 7548 var extraBytes = len2 % 3; 7549 var parts = []; 7550 var maxChunkLength = 16383; 7551 for (var i22 = 0, len22 = len2 - extraBytes; i22 < len22; i22 += maxChunkLength) { 7552 parts.push( 7553 encodeChunk( 7554 uint8, 7555 i22, 7556 i22 + maxChunkLength > len22 ? len22 : i22 + maxChunkLength 7557 ) 7558 ); 7559 } 7560 if (extraBytes === 1) { 7561 tmp = uint8[len2 - 1]; 7562 parts.push( 7563 lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "==" 7564 ); 7565 } else if (extraBytes === 2) { 7566 tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1]; 7567 parts.push( 7568 lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "=" 7569 ); 7570 } 7571 return parts.join(""); 7572 } 7573 }, 7574 {} 7575 ], 7576 9: [ 7577 function(require2, module3, exports3) { 7578 function PrefixCodeRange(offset, nbits) { 7579 this.offset = offset; 7580 this.nbits = nbits; 7581 } 7582 exports3.kBlockLengthPrefixCode = [ 7583 new PrefixCodeRange(1, 2), 7584 new PrefixCodeRange(5, 2), 7585 new PrefixCodeRange(9, 2), 7586 new PrefixCodeRange(13, 2), 7587 new PrefixCodeRange(17, 3), 7588 new PrefixCodeRange(25, 3), 7589 new PrefixCodeRange(33, 3), 7590 new PrefixCodeRange(41, 3), 7591 new PrefixCodeRange(49, 4), 7592 new PrefixCodeRange(65, 4), 7593 new PrefixCodeRange(81, 4), 7594 new PrefixCodeRange(97, 4), 7595 new PrefixCodeRange(113, 5), 7596 new PrefixCodeRange(145, 5), 7597 new PrefixCodeRange(177, 5), 7598 new PrefixCodeRange(209, 5), 7599 new PrefixCodeRange(241, 6), 7600 new PrefixCodeRange(305, 6), 7601 new PrefixCodeRange(369, 7), 7602 new PrefixCodeRange(497, 8), 7603 new PrefixCodeRange(753, 9), 7604 new PrefixCodeRange(1265, 10), 7605 new PrefixCodeRange(2289, 11), 7606 new PrefixCodeRange(4337, 12), 7607 new PrefixCodeRange(8433, 13), 7608 new PrefixCodeRange(16625, 24) 7609 ]; 7610 exports3.kInsertLengthPrefixCode = [ 7611 new PrefixCodeRange(0, 0), 7612 new PrefixCodeRange(1, 0), 7613 new PrefixCodeRange(2, 0), 7614 new PrefixCodeRange(3, 0), 7615 new PrefixCodeRange(4, 0), 7616 new PrefixCodeRange(5, 0), 7617 new PrefixCodeRange(6, 1), 7618 new PrefixCodeRange(8, 1), 7619 new PrefixCodeRange(10, 2), 7620 new PrefixCodeRange(14, 2), 7621 new PrefixCodeRange(18, 3), 7622 new PrefixCodeRange(26, 3), 7623 new PrefixCodeRange(34, 4), 7624 new PrefixCodeRange(50, 4), 7625 new PrefixCodeRange(66, 5), 7626 new PrefixCodeRange(98, 5), 7627 new PrefixCodeRange(130, 6), 7628 new PrefixCodeRange(194, 7), 7629 new PrefixCodeRange(322, 8), 7630 new PrefixCodeRange(578, 9), 7631 new PrefixCodeRange(1090, 10), 7632 new PrefixCodeRange(2114, 12), 7633 new PrefixCodeRange(6210, 14), 7634 new PrefixCodeRange(22594, 24) 7635 ]; 7636 exports3.kCopyLengthPrefixCode = [ 7637 new PrefixCodeRange(2, 0), 7638 new PrefixCodeRange(3, 0), 7639 new PrefixCodeRange(4, 0), 7640 new PrefixCodeRange(5, 0), 7641 new PrefixCodeRange(6, 0), 7642 new PrefixCodeRange(7, 0), 7643 new PrefixCodeRange(8, 0), 7644 new PrefixCodeRange(9, 0), 7645 new PrefixCodeRange(10, 1), 7646 new PrefixCodeRange(12, 1), 7647 new PrefixCodeRange(14, 2), 7648 new PrefixCodeRange(18, 2), 7649 new PrefixCodeRange(22, 3), 7650 new PrefixCodeRange(30, 3), 7651 new PrefixCodeRange(38, 4), 7652 new PrefixCodeRange(54, 4), 7653 new PrefixCodeRange(70, 5), 7654 new PrefixCodeRange(102, 5), 7655 new PrefixCodeRange(134, 6), 7656 new PrefixCodeRange(198, 7), 7657 new PrefixCodeRange(326, 8), 7658 new PrefixCodeRange(582, 9), 7659 new PrefixCodeRange(1094, 10), 7660 new PrefixCodeRange(2118, 24) 7661 ]; 7662 exports3.kInsertRangeLut = [0, 0, 8, 8, 0, 16, 8, 16, 16]; 7663 exports3.kCopyRangeLut = [0, 8, 0, 8, 16, 0, 16, 8, 16]; 7664 }, 7665 {} 7666 ], 7667 10: [ 7668 function(require2, module3, exports3) { 7669 function BrotliInput(buffer) { 7670 this.buffer = buffer; 7671 this.pos = 0; 7672 } 7673 BrotliInput.prototype.read = function(buf, i2, count) { 7674 if (this.pos + count > this.buffer.length) { 7675 count = this.buffer.length - this.pos; 7676 } 7677 for (var p3 = 0; p3 < count; p3++) 7678 buf[i2 + p3] = this.buffer[this.pos + p3]; 7679 this.pos += count; 7680 return count; 7681 }; 7682 exports3.BrotliInput = BrotliInput; 7683 function BrotliOutput(buf) { 7684 this.buffer = buf; 7685 this.pos = 0; 7686 } 7687 BrotliOutput.prototype.write = function(buf, count) { 7688 if (this.pos + count > this.buffer.length) 7689 throw new Error( 7690 "Output buffer is not large enough" 7691 ); 7692 this.buffer.set(buf.subarray(0, count), this.pos); 7693 this.pos += count; 7694 return count; 7695 }; 7696 exports3.BrotliOutput = BrotliOutput; 7697 }, 7698 {} 7699 ], 7700 11: [ 7701 function(require2, module3, exports3) { 7702 var BrotliDictionary = require2("./dictionary"); 7703 var kIdentity = 0; 7704 var kOmitLast1 = 1; 7705 var kOmitLast2 = 2; 7706 var kOmitLast3 = 3; 7707 var kOmitLast4 = 4; 7708 var kOmitLast5 = 5; 7709 var kOmitLast6 = 6; 7710 var kOmitLast7 = 7; 7711 var kOmitLast8 = 8; 7712 var kOmitLast9 = 9; 7713 var kUppercaseFirst = 10; 7714 var kUppercaseAll = 11; 7715 var kOmitFirst1 = 12; 7716 var kOmitFirst2 = 13; 7717 var kOmitFirst3 = 14; 7718 var kOmitFirst4 = 15; 7719 var kOmitFirst5 = 16; 7720 var kOmitFirst6 = 17; 7721 var kOmitFirst7 = 18; 7722 var kOmitFirst8 = 19; 7723 var kOmitFirst9 = 20; 7724 function Transform(prefix, transform, suffix) { 7725 this.prefix = new Uint8Array(prefix.length); 7726 this.transform = transform; 7727 this.suffix = new Uint8Array(suffix.length); 7728 for (var i2 = 0; i2 < prefix.length; i2++) 7729 this.prefix[i2] = prefix.charCodeAt(i2); 7730 for (var i2 = 0; i2 < suffix.length; i2++) 7731 this.suffix[i2] = suffix.charCodeAt(i2); 7732 } 7733 var kTransforms = [ 7734 new Transform("", kIdentity, ""), 7735 new Transform("", kIdentity, " "), 7736 new Transform(" ", kIdentity, " "), 7737 new Transform("", kOmitFirst1, ""), 7738 new Transform("", kUppercaseFirst, " "), 7739 new Transform("", kIdentity, " the "), 7740 new Transform(" ", kIdentity, ""), 7741 new Transform("s ", kIdentity, " "), 7742 new Transform("", kIdentity, " of "), 7743 new Transform("", kUppercaseFirst, ""), 7744 new Transform("", kIdentity, " and "), 7745 new Transform("", kOmitFirst2, ""), 7746 new Transform("", kOmitLast1, ""), 7747 new Transform(", ", kIdentity, " "), 7748 new Transform("", kIdentity, ", "), 7749 new Transform(" ", kUppercaseFirst, " "), 7750 new Transform("", kIdentity, " in "), 7751 new Transform("", kIdentity, " to "), 7752 new Transform("e ", kIdentity, " "), 7753 new Transform("", kIdentity, '"'), 7754 new Transform("", kIdentity, "."), 7755 new Transform("", kIdentity, '">'), 7756 new Transform("", kIdentity, "\n"), 7757 new Transform("", kOmitLast3, ""), 7758 new Transform("", kIdentity, "]"), 7759 new Transform("", kIdentity, " for "), 7760 new Transform("", kOmitFirst3, ""), 7761 new Transform("", kOmitLast2, ""), 7762 new Transform("", kIdentity, " a "), 7763 new Transform("", kIdentity, " that "), 7764 new Transform(" ", kUppercaseFirst, ""), 7765 new Transform("", kIdentity, ". "), 7766 new Transform(".", kIdentity, ""), 7767 new Transform(" ", kIdentity, ", "), 7768 new Transform("", kOmitFirst4, ""), 7769 new Transform("", kIdentity, " with "), 7770 new Transform("", kIdentity, "'"), 7771 new Transform("", kIdentity, " from "), 7772 new Transform("", kIdentity, " by "), 7773 new Transform("", kOmitFirst5, ""), 7774 new Transform("", kOmitFirst6, ""), 7775 new Transform(" the ", kIdentity, ""), 7776 new Transform("", kOmitLast4, ""), 7777 new Transform("", kIdentity, ". The "), 7778 new Transform("", kUppercaseAll, ""), 7779 new Transform("", kIdentity, " on "), 7780 new Transform("", kIdentity, " as "), 7781 new Transform("", kIdentity, " is "), 7782 new Transform("", kOmitLast7, ""), 7783 new Transform("", kOmitLast1, "ing "), 7784 new Transform("", kIdentity, "\n "), 7785 new Transform("", kIdentity, ":"), 7786 new Transform(" ", kIdentity, ". "), 7787 new Transform("", kIdentity, "ed "), 7788 new Transform("", kOmitFirst9, ""), 7789 new Transform("", kOmitFirst7, ""), 7790 new Transform("", kOmitLast6, ""), 7791 new Transform("", kIdentity, "("), 7792 new Transform("", kUppercaseFirst, ", "), 7793 new Transform("", kOmitLast8, ""), 7794 new Transform("", kIdentity, " at "), 7795 new Transform("", kIdentity, "ly "), 7796 new Transform(" the ", kIdentity, " of "), 7797 new Transform("", kOmitLast5, ""), 7798 new Transform("", kOmitLast9, ""), 7799 new Transform(" ", kUppercaseFirst, ", "), 7800 new Transform("", kUppercaseFirst, '"'), 7801 new Transform(".", kIdentity, "("), 7802 new Transform("", kUppercaseAll, " "), 7803 new Transform("", kUppercaseFirst, '">'), 7804 new Transform("", kIdentity, '="'), 7805 new Transform(" ", kIdentity, "."), 7806 new Transform(".com/", kIdentity, ""), 7807 new Transform(" the ", kIdentity, " of the "), 7808 new Transform("", kUppercaseFirst, "'"), 7809 new Transform("", kIdentity, ". This "), 7810 new Transform("", kIdentity, ","), 7811 new Transform(".", kIdentity, " "), 7812 new Transform("", kUppercaseFirst, "("), 7813 new Transform("", kUppercaseFirst, "."), 7814 new Transform("", kIdentity, " not "), 7815 new Transform(" ", kIdentity, '="'), 7816 new Transform("", kIdentity, "er "), 7817 new Transform(" ", kUppercaseAll, " "), 7818 new Transform("", kIdentity, "al "), 7819 new Transform(" ", kUppercaseAll, ""), 7820 new Transform("", kIdentity, "='"), 7821 new Transform("", kUppercaseAll, '"'), 7822 new Transform("", kUppercaseFirst, ". "), 7823 new Transform(" ", kIdentity, "("), 7824 new Transform("", kIdentity, "ful "), 7825 new Transform(" ", kUppercaseFirst, ". "), 7826 new Transform("", kIdentity, "ive "), 7827 new Transform("", kIdentity, "less "), 7828 new Transform("", kUppercaseAll, "'"), 7829 new Transform("", kIdentity, "est "), 7830 new Transform(" ", kUppercaseFirst, "."), 7831 new Transform("", kUppercaseAll, '">'), 7832 new Transform(" ", kIdentity, "='"), 7833 new Transform("", kUppercaseFirst, ","), 7834 new Transform("", kIdentity, "ize "), 7835 new Transform("", kUppercaseAll, "."), 7836 new Transform("\xC2\xA0", kIdentity, ""), 7837 new Transform(" ", kIdentity, ","), 7838 new Transform("", kUppercaseFirst, '="'), 7839 new Transform("", kUppercaseAll, '="'), 7840 new Transform("", kIdentity, "ous "), 7841 new Transform("", kUppercaseAll, ", "), 7842 new Transform("", kUppercaseFirst, "='"), 7843 new Transform(" ", kUppercaseFirst, ","), 7844 new Transform(" ", kUppercaseAll, '="'), 7845 new Transform(" ", kUppercaseAll, ", "), 7846 new Transform("", kUppercaseAll, ","), 7847 new Transform("", kUppercaseAll, "("), 7848 new Transform("", kUppercaseAll, ". "), 7849 new Transform(" ", kUppercaseAll, "."), 7850 new Transform("", kUppercaseAll, "='"), 7851 new Transform(" ", kUppercaseAll, ". "), 7852 new Transform(" ", kUppercaseFirst, '="'), 7853 new Transform(" ", kUppercaseAll, "='"), 7854 new Transform(" ", kUppercaseFirst, "='") 7855 ]; 7856 exports3.kTransforms = kTransforms; 7857 exports3.kNumTransforms = kTransforms.length; 7858 function ToUpperCase(p3, i2) { 7859 if (p3[i2] < 192) { 7860 if (p3[i2] >= 97 && p3[i2] <= 122) { 7861 p3[i2] ^= 32; 7862 } 7863 return 1; 7864 } 7865 if (p3[i2] < 224) { 7866 p3[i2 + 1] ^= 32; 7867 return 2; 7868 } 7869 p3[i2 + 2] ^= 5; 7870 return 3; 7871 } 7872 exports3.transformDictionaryWord = function(dst, idx, word, len, transform) { 7873 var prefix = kTransforms[transform].prefix; 7874 var suffix = kTransforms[transform].suffix; 7875 var t3 = kTransforms[transform].transform; 7876 var skip = t3 < kOmitFirst1 ? 0 : t3 - (kOmitFirst1 - 1); 7877 var i2 = 0; 7878 var start_idx = idx; 7879 var uppercase; 7880 if (skip > len) { 7881 skip = len; 7882 } 7883 var prefix_pos = 0; 7884 while (prefix_pos < prefix.length) { 7885 dst[idx++] = prefix[prefix_pos++]; 7886 } 7887 word += skip; 7888 len -= skip; 7889 if (t3 <= kOmitLast9) { 7890 len -= t3; 7891 } 7892 for (i2 = 0; i2 < len; i2++) { 7893 dst[idx++] = BrotliDictionary.dictionary[word + i2]; 7894 } 7895 uppercase = idx - len; 7896 if (t3 === kUppercaseFirst) { 7897 ToUpperCase(dst, uppercase); 7898 } else if (t3 === kUppercaseAll) { 7899 while (len > 0) { 7900 var step = ToUpperCase(dst, uppercase); 7901 uppercase += step; 7902 len -= step; 7903 } 7904 } 7905 var suffix_pos = 0; 7906 while (suffix_pos < suffix.length) { 7907 dst[idx++] = suffix[suffix_pos++]; 7908 } 7909 return idx - start_idx; 7910 }; 7911 }, 7912 { "./dictionary": 6 } 7913 ], 7914 12: [ 7915 function(require2, module3, exports3) { 7916 module3.exports = require2("./dec/decode").BrotliDecompressBuffer; 7917 }, 7918 { "./dec/decode": 3 } 7919 ] 7920 }, 7921 {}, 7922 [12] 7923 )(12); 7924 }); 7925 } 7926 }); 7927 var unbrotli_default = require_unbrotli(); 7928 7929 // packages/global-styles-ui/build-module/font-library/lib/inflate.js 7930 var __getOwnPropNames3 = Object.getOwnPropertyNames; 7931 var __require3 = /* @__PURE__ */ ((x2) => typeof __require !== "undefined" ? __require : typeof Proxy !== "undefined" ? new Proxy(x2, { 7932 get: (a2, b2) => (typeof __require !== "undefined" ? __require : a2)[b2] 7933 }) : x2)(function(x2) { 7934 if (typeof __require !== "undefined") return __require.apply(this, arguments); 7935 throw Error('Dynamic require of "' + x2 + '" is not supported'); 7936 }); 7937 var __commonJS3 = (cb, mod) => function __require22() { 7938 return mod || (0, cb[__getOwnPropNames3(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 7939 }; 7940 var require_inflate = __commonJS3({ 7941 "packages/global-styles-ui/src/font-library/lib/inflate.js"(exports, module) { 7942 (function(f2) { 7943 if (typeof exports === "object" && typeof module !== "undefined") { 7944 module.exports = f2(); 7945 } else if (typeof define === "function" && define.amd) { 7946 define([], f2); 7947 } else { 7948 var g2; 7949 if (typeof window !== "undefined") { 7950 g2 = window; 7951 } else if (typeof global !== "undefined") { 7952 g2 = global; 7953 } else if (typeof self !== "undefined") { 7954 g2 = self; 7955 } else { 7956 g2 = this; 7957 } 7958 g2.pako = f2(); 7959 } 7960 })(function() { 7961 var define2, module2, exports2; 7962 return (/* @__PURE__ */ (function() { 7963 function r3(e2, n2, t3) { 7964 function o3(i22, f2) { 7965 if (!n2[i22]) { 7966 if (!e2[i22]) { 7967 var c2 = "function" == typeof __require3 && __require3; 7968 if (!f2 && c2) return c2(i22, true); 7969 if (u2) return u2(i22, true); 7970 var a2 = new Error("Cannot find module '" + i22 + "'"); 7971 throw a2.code = "MODULE_NOT_FOUND", a2; 7972 } 7973 var p3 = n2[i22] = { exports: {} }; 7974 e2[i22][0].call( 7975 p3.exports, 7976 function(r22) { 7977 var n22 = e2[i22][1][r22]; 7978 return o3(n22 || r22); 7979 }, 7980 p3, 7981 p3.exports, 7982 r3, 7983 e2, 7984 n2, 7985 t3 7986 ); 7987 } 7988 return n2[i22].exports; 7989 } 7990 for (var u2 = "function" == typeof __require3 && __require3, i2 = 0; i2 < t3.length; i2++) 7991 o3(t3[i2]); 7992 return o3; 7993 } 7994 return r3; 7995 })())( 7996 { 7997 1: [ 7998 function(require2, module3, exports3) { 7999 "use strict"; 8000 var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined"; 8001 function _has(obj, key) { 8002 return Object.prototype.hasOwnProperty.call(obj, key); 8003 } 8004 exports3.assign = function(obj) { 8005 var sources = Array.prototype.slice.call( 8006 arguments, 8007 1 8008 ); 8009 while (sources.length) { 8010 var source = sources.shift(); 8011 if (!source) { 8012 continue; 8013 } 8014 if (typeof source !== "object") { 8015 throw new TypeError( 8016 source + "must be non-object" 8017 ); 8018 } 8019 for (var p3 in source) { 8020 if (_has(source, p3)) { 8021 obj[p3] = source[p3]; 8022 } 8023 } 8024 } 8025 return obj; 8026 }; 8027 exports3.shrinkBuf = function(buf, size) { 8028 if (buf.length === size) { 8029 return buf; 8030 } 8031 if (buf.subarray) { 8032 return buf.subarray(0, size); 8033 } 8034 buf.length = size; 8035 return buf; 8036 }; 8037 var fnTyped = { 8038 arraySet: function(dest, src, src_offs, len, dest_offs) { 8039 if (src.subarray && dest.subarray) { 8040 dest.set( 8041 src.subarray(src_offs, src_offs + len), 8042 dest_offs 8043 ); 8044 return; 8045 } 8046 for (var i2 = 0; i2 < len; i2++) { 8047 dest[dest_offs + i2] = src[src_offs + i2]; 8048 } 8049 }, 8050 // Join array of chunks to single array. 8051 flattenChunks: function(chunks) { 8052 var i2, l2, len, pos, chunk, result; 8053 len = 0; 8054 for (i2 = 0, l2 = chunks.length; i2 < l2; i2++) { 8055 len += chunks[i2].length; 8056 } 8057 result = new Uint8Array(len); 8058 pos = 0; 8059 for (i2 = 0, l2 = chunks.length; i2 < l2; i2++) { 8060 chunk = chunks[i2]; 8061 result.set(chunk, pos); 8062 pos += chunk.length; 8063 } 8064 return result; 8065 } 8066 }; 8067 var fnUntyped = { 8068 arraySet: function(dest, src, src_offs, len, dest_offs) { 8069 for (var i2 = 0; i2 < len; i2++) { 8070 dest[dest_offs + i2] = src[src_offs + i2]; 8071 } 8072 }, 8073 // Join array of chunks to single array. 8074 flattenChunks: function(chunks) { 8075 return [].concat.apply([], chunks); 8076 } 8077 }; 8078 exports3.setTyped = function(on) { 8079 if (on) { 8080 exports3.Buf8 = Uint8Array; 8081 exports3.Buf16 = Uint16Array; 8082 exports3.Buf32 = Int32Array; 8083 exports3.assign(exports3, fnTyped); 8084 } else { 8085 exports3.Buf8 = Array; 8086 exports3.Buf16 = Array; 8087 exports3.Buf32 = Array; 8088 exports3.assign(exports3, fnUntyped); 8089 } 8090 }; 8091 exports3.setTyped(TYPED_OK); 8092 }, 8093 {} 8094 ], 8095 2: [ 8096 function(require2, module3, exports3) { 8097 "use strict"; 8098 var utils = require2("./common"); 8099 var STR_APPLY_OK = true; 8100 var STR_APPLY_UIA_OK = true; 8101 try { 8102 String.fromCharCode.apply(null, [0]); 8103 } catch (__42) { 8104 STR_APPLY_OK = false; 8105 } 8106 try { 8107 String.fromCharCode.apply(null, new Uint8Array(1)); 8108 } catch (__42) { 8109 STR_APPLY_UIA_OK = false; 8110 } 8111 var _utf8len = new utils.Buf8(256); 8112 for (var q = 0; q < 256; q++) { 8113 _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1; 8114 } 8115 _utf8len[254] = _utf8len[254] = 1; 8116 exports3.string2buf = function(str) { 8117 var buf, c2, c22, m_pos, i2, str_len = str.length, buf_len = 0; 8118 for (m_pos = 0; m_pos < str_len; m_pos++) { 8119 c2 = str.charCodeAt(m_pos); 8120 if ((c2 & 64512) === 55296 && m_pos + 1 < str_len) { 8121 c22 = str.charCodeAt(m_pos + 1); 8122 if ((c22 & 64512) === 56320) { 8123 c2 = 65536 + (c2 - 55296 << 10) + (c22 - 56320); 8124 m_pos++; 8125 } 8126 } 8127 buf_len += c2 < 128 ? 1 : c2 < 2048 ? 2 : c2 < 65536 ? 3 : 4; 8128 } 8129 buf = new utils.Buf8(buf_len); 8130 for (i2 = 0, m_pos = 0; i2 < buf_len; m_pos++) { 8131 c2 = str.charCodeAt(m_pos); 8132 if ((c2 & 64512) === 55296 && m_pos + 1 < str_len) { 8133 c22 = str.charCodeAt(m_pos + 1); 8134 if ((c22 & 64512) === 56320) { 8135 c2 = 65536 + (c2 - 55296 << 10) + (c22 - 56320); 8136 m_pos++; 8137 } 8138 } 8139 if (c2 < 128) { 8140 buf[i2++] = c2; 8141 } else if (c2 < 2048) { 8142 buf[i2++] = 192 | c2 >>> 6; 8143 buf[i2++] = 128 | c2 & 63; 8144 } else if (c2 < 65536) { 8145 buf[i2++] = 224 | c2 >>> 12; 8146 buf[i2++] = 128 | c2 >>> 6 & 63; 8147 buf[i2++] = 128 | c2 & 63; 8148 } else { 8149 buf[i2++] = 240 | c2 >>> 18; 8150 buf[i2++] = 128 | c2 >>> 12 & 63; 8151 buf[i2++] = 128 | c2 >>> 6 & 63; 8152 buf[i2++] = 128 | c2 & 63; 8153 } 8154 } 8155 return buf; 8156 }; 8157 function buf2binstring(buf, len) { 8158 if (len < 65534) { 8159 if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) { 8160 return String.fromCharCode.apply( 8161 null, 8162 utils.shrinkBuf(buf, len) 8163 ); 8164 } 8165 } 8166 var result = ""; 8167 for (var i2 = 0; i2 < len; i2++) { 8168 result += String.fromCharCode(buf[i2]); 8169 } 8170 return result; 8171 } 8172 exports3.buf2binstring = function(buf) { 8173 return buf2binstring(buf, buf.length); 8174 }; 8175 exports3.binstring2buf = function(str) { 8176 var buf = new utils.Buf8(str.length); 8177 for (var i2 = 0, len = buf.length; i2 < len; i2++) { 8178 buf[i2] = str.charCodeAt(i2); 8179 } 8180 return buf; 8181 }; 8182 exports3.buf2string = function(buf, max) { 8183 var i2, out, c2, c_len; 8184 var len = max || buf.length; 8185 var utf16buf = new Array(len * 2); 8186 for (out = 0, i2 = 0; i2 < len; ) { 8187 c2 = buf[i2++]; 8188 if (c2 < 128) { 8189 utf16buf[out++] = c2; 8190 continue; 8191 } 8192 c_len = _utf8len[c2]; 8193 if (c_len > 4) { 8194 utf16buf[out++] = 65533; 8195 i2 += c_len - 1; 8196 continue; 8197 } 8198 c2 &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7; 8199 while (c_len > 1 && i2 < len) { 8200 c2 = c2 << 6 | buf[i2++] & 63; 8201 c_len--; 8202 } 8203 if (c_len > 1) { 8204 utf16buf[out++] = 65533; 8205 continue; 8206 } 8207 if (c2 < 65536) { 8208 utf16buf[out++] = c2; 8209 } else { 8210 c2 -= 65536; 8211 utf16buf[out++] = 55296 | c2 >> 10 & 1023; 8212 utf16buf[out++] = 56320 | c2 & 1023; 8213 } 8214 } 8215 return buf2binstring(utf16buf, out); 8216 }; 8217 exports3.utf8border = function(buf, max) { 8218 var pos; 8219 max = max || buf.length; 8220 if (max > buf.length) { 8221 max = buf.length; 8222 } 8223 pos = max - 1; 8224 while (pos >= 0 && (buf[pos] & 192) === 128) { 8225 pos--; 8226 } 8227 if (pos < 0) { 8228 return max; 8229 } 8230 if (pos === 0) { 8231 return max; 8232 } 8233 return pos + _utf8len[buf[pos]] > max ? pos : max; 8234 }; 8235 }, 8236 { "./common": 1 } 8237 ], 8238 3: [ 8239 function(require2, module3, exports3) { 8240 "use strict"; 8241 function adler32(adler, buf, len, pos) { 8242 var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n2 = 0; 8243 while (len !== 0) { 8244 n2 = len > 2e3 ? 2e3 : len; 8245 len -= n2; 8246 do { 8247 s1 = s1 + buf[pos++] | 0; 8248 s2 = s2 + s1 | 0; 8249 } while (--n2); 8250 s1 %= 65521; 8251 s2 %= 65521; 8252 } 8253 return s1 | s2 << 16 | 0; 8254 } 8255 module3.exports = adler32; 8256 }, 8257 {} 8258 ], 8259 4: [ 8260 function(require2, module3, exports3) { 8261 "use strict"; 8262 module3.exports = { 8263 /* Allowed flush values; see deflate() and inflate() below for details */ 8264 Z_NO_FLUSH: 0, 8265 Z_PARTIAL_FLUSH: 1, 8266 Z_SYNC_FLUSH: 2, 8267 Z_FULL_FLUSH: 3, 8268 Z_FINISH: 4, 8269 Z_BLOCK: 5, 8270 Z_TREES: 6, 8271 /* Return codes for the compression/decompression functions. Negative values 8272 * are errors, positive values are used for special but normal events. 8273 */ 8274 Z_OK: 0, 8275 Z_STREAM_END: 1, 8276 Z_NEED_DICT: 2, 8277 Z_ERRNO: -1, 8278 Z_STREAM_ERROR: -2, 8279 Z_DATA_ERROR: -3, 8280 //Z_MEM_ERROR: -4, 8281 Z_BUF_ERROR: -5, 8282 //Z_VERSION_ERROR: -6, 8283 /* compression levels */ 8284 Z_NO_COMPRESSION: 0, 8285 Z_BEST_SPEED: 1, 8286 Z_BEST_COMPRESSION: 9, 8287 Z_DEFAULT_COMPRESSION: -1, 8288 Z_FILTERED: 1, 8289 Z_HUFFMAN_ONLY: 2, 8290 Z_RLE: 3, 8291 Z_FIXED: 4, 8292 Z_DEFAULT_STRATEGY: 0, 8293 /* Possible values of the data_type field (though see inflate()) */ 8294 Z_BINARY: 0, 8295 Z_TEXT: 1, 8296 //Z_ASCII: 1, // = Z_TEXT (deprecated) 8297 Z_UNKNOWN: 2, 8298 /* The deflate compression method */ 8299 Z_DEFLATED: 8 8300 //Z_NULL: null // Use -1 or null inline, depending on var type 8301 }; 8302 }, 8303 {} 8304 ], 8305 5: [ 8306 function(require2, module3, exports3) { 8307 "use strict"; 8308 function makeTable() { 8309 var c2, table = []; 8310 for (var n2 = 0; n2 < 256; n2++) { 8311 c2 = n2; 8312 for (var k2 = 0; k2 < 8; k2++) { 8313 c2 = c2 & 1 ? 3988292384 ^ c2 >>> 1 : c2 >>> 1; 8314 } 8315 table[n2] = c2; 8316 } 8317 return table; 8318 } 8319 var crcTable = makeTable(); 8320 function crc32(crc, buf, len, pos) { 8321 var t3 = crcTable, end = pos + len; 8322 crc ^= -1; 8323 for (var i2 = pos; i2 < end; i2++) { 8324 crc = crc >>> 8 ^ t3[(crc ^ buf[i2]) & 255]; 8325 } 8326 return crc ^ -1; 8327 } 8328 module3.exports = crc32; 8329 }, 8330 {} 8331 ], 8332 6: [ 8333 function(require2, module3, exports3) { 8334 "use strict"; 8335 function GZheader() { 8336 this.text = 0; 8337 this.time = 0; 8338 this.xflags = 0; 8339 this.os = 0; 8340 this.extra = null; 8341 this.extra_len = 0; 8342 this.name = ""; 8343 this.comment = ""; 8344 this.hcrc = 0; 8345 this.done = false; 8346 } 8347 module3.exports = GZheader; 8348 }, 8349 {} 8350 ], 8351 7: [ 8352 function(require2, module3, exports3) { 8353 "use strict"; 8354 var BAD = 30; 8355 var TYPE = 12; 8356 module3.exports = function inflate_fast(strm, start) { 8357 var state; 8358 var _in; 8359 var last; 8360 var _out; 8361 var beg; 8362 var end; 8363 var dmax; 8364 var wsize; 8365 var whave; 8366 var wnext; 8367 var s_window; 8368 var hold; 8369 var bits; 8370 var lcode; 8371 var dcode; 8372 var lmask; 8373 var dmask; 8374 var here; 8375 var op; 8376 var len; 8377 var dist; 8378 var from; 8379 var from_source; 8380 var input, output; 8381 state = strm.state; 8382 _in = strm.next_in; 8383 input = strm.input; 8384 last = _in + (strm.avail_in - 5); 8385 _out = strm.next_out; 8386 output = strm.output; 8387 beg = _out - (start - strm.avail_out); 8388 end = _out + (strm.avail_out - 257); 8389 dmax = state.dmax; 8390 wsize = state.wsize; 8391 whave = state.whave; 8392 wnext = state.wnext; 8393 s_window = state.window; 8394 hold = state.hold; 8395 bits = state.bits; 8396 lcode = state.lencode; 8397 dcode = state.distcode; 8398 lmask = (1 << state.lenbits) - 1; 8399 dmask = (1 << state.distbits) - 1; 8400 top: do { 8401 if (bits < 15) { 8402 hold += input[_in++] << bits; 8403 bits += 8; 8404 hold += input[_in++] << bits; 8405 bits += 8; 8406 } 8407 here = lcode[hold & lmask]; 8408 dolen: for (; ; ) { 8409 op = here >>> 24; 8410 hold >>>= op; 8411 bits -= op; 8412 op = here >>> 16 & 255; 8413 if (op === 0) { 8414 output[_out++] = here & 65535; 8415 } else if (op & 16) { 8416 len = here & 65535; 8417 op &= 15; 8418 if (op) { 8419 if (bits < op) { 8420 hold += input[_in++] << bits; 8421 bits += 8; 8422 } 8423 len += hold & (1 << op) - 1; 8424 hold >>>= op; 8425 bits -= op; 8426 } 8427 if (bits < 15) { 8428 hold += input[_in++] << bits; 8429 bits += 8; 8430 hold += input[_in++] << bits; 8431 bits += 8; 8432 } 8433 here = dcode[hold & dmask]; 8434 dodist: for (; ; ) { 8435 op = here >>> 24; 8436 hold >>>= op; 8437 bits -= op; 8438 op = here >>> 16 & 255; 8439 if (op & 16) { 8440 dist = here & 65535; 8441 op &= 15; 8442 if (bits < op) { 8443 hold += input[_in++] << bits; 8444 bits += 8; 8445 if (bits < op) { 8446 hold += input[_in++] << bits; 8447 bits += 8; 8448 } 8449 } 8450 dist += hold & (1 << op) - 1; 8451 if (dist > dmax) { 8452 strm.msg = "invalid distance too far back"; 8453 state.mode = BAD; 8454 break top; 8455 } 8456 hold >>>= op; 8457 bits -= op; 8458 op = _out - beg; 8459 if (dist > op) { 8460 op = dist - op; 8461 if (op > whave) { 8462 if (state.sane) { 8463 strm.msg = "invalid distance too far back"; 8464 state.mode = BAD; 8465 break top; 8466 } 8467 } 8468 from = 0; 8469 from_source = s_window; 8470 if (wnext === 0) { 8471 from += wsize - op; 8472 if (op < len) { 8473 len -= op; 8474 do { 8475 output[_out++] = s_window[from++]; 8476 } while (--op); 8477 from = _out - dist; 8478 from_source = output; 8479 } 8480 } else if (wnext < op) { 8481 from += wsize + wnext - op; 8482 op -= wnext; 8483 if (op < len) { 8484 len -= op; 8485 do { 8486 output[_out++] = s_window[from++]; 8487 } while (--op); 8488 from = 0; 8489 if (wnext < len) { 8490 op = wnext; 8491 len -= op; 8492 do { 8493 output[_out++] = s_window[from++]; 8494 } while (--op); 8495 from = _out - dist; 8496 from_source = output; 8497 } 8498 } 8499 } else { 8500 from += wnext - op; 8501 if (op < len) { 8502 len -= op; 8503 do { 8504 output[_out++] = s_window[from++]; 8505 } while (--op); 8506 from = _out - dist; 8507 from_source = output; 8508 } 8509 } 8510 while (len > 2) { 8511 output[_out++] = from_source[from++]; 8512 output[_out++] = from_source[from++]; 8513 output[_out++] = from_source[from++]; 8514 len -= 3; 8515 } 8516 if (len) { 8517 output[_out++] = from_source[from++]; 8518 if (len > 1) { 8519 output[_out++] = from_source[from++]; 8520 } 8521 } 8522 } else { 8523 from = _out - dist; 8524 do { 8525 output[_out++] = output[from++]; 8526 output[_out++] = output[from++]; 8527 output[_out++] = output[from++]; 8528 len -= 3; 8529 } while (len > 2); 8530 if (len) { 8531 output[_out++] = output[from++]; 8532 if (len > 1) { 8533 output[_out++] = output[from++]; 8534 } 8535 } 8536 } 8537 } else if ((op & 64) === 0) { 8538 here = dcode[(here & 65535) + (hold & (1 << op) - 1)]; 8539 continue dodist; 8540 } else { 8541 strm.msg = "invalid distance code"; 8542 state.mode = BAD; 8543 break top; 8544 } 8545 break; 8546 } 8547 } else if ((op & 64) === 0) { 8548 here = lcode[(here & 65535) + (hold & (1 << op) - 1)]; 8549 continue dolen; 8550 } else if (op & 32) { 8551 state.mode = TYPE; 8552 break top; 8553 } else { 8554 strm.msg = "invalid literal/length code"; 8555 state.mode = BAD; 8556 break top; 8557 } 8558 break; 8559 } 8560 } while (_in < last && _out < end); 8561 len = bits >> 3; 8562 _in -= len; 8563 bits -= len << 3; 8564 hold &= (1 << bits) - 1; 8565 strm.next_in = _in; 8566 strm.next_out = _out; 8567 strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last); 8568 strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end); 8569 state.hold = hold; 8570 state.bits = bits; 8571 return; 8572 }; 8573 }, 8574 {} 8575 ], 8576 8: [ 8577 function(require2, module3, exports3) { 8578 "use strict"; 8579 var utils = require2("../utils/common"); 8580 var adler32 = require2("./adler32"); 8581 var crc32 = require2("./crc32"); 8582 var inflate_fast = require2("./inffast"); 8583 var inflate_table = require2("./inftrees"); 8584 var CODES = 0; 8585 var LENS = 1; 8586 var DISTS = 2; 8587 var Z_FINISH = 4; 8588 var Z_BLOCK = 5; 8589 var Z_TREES = 6; 8590 var Z_OK = 0; 8591 var Z_STREAM_END = 1; 8592 var Z_NEED_DICT = 2; 8593 var Z_STREAM_ERROR = -2; 8594 var Z_DATA_ERROR = -3; 8595 var Z_MEM_ERROR = -4; 8596 var Z_BUF_ERROR = -5; 8597 var Z_DEFLATED = 8; 8598 var HEAD = 1; 8599 var FLAGS = 2; 8600 var TIME = 3; 8601 var OS = 4; 8602 var EXLEN = 5; 8603 var EXTRA = 6; 8604 var NAME = 7; 8605 var COMMENT = 8; 8606 var HCRC = 9; 8607 var DICTID = 10; 8608 var DICT = 11; 8609 var TYPE = 12; 8610 var TYPEDO = 13; 8611 var STORED = 14; 8612 var COPY_ = 15; 8613 var COPY = 16; 8614 var TABLE = 17; 8615 var LENLENS = 18; 8616 var CODELENS = 19; 8617 var LEN_ = 20; 8618 var LEN = 21; 8619 var LENEXT = 22; 8620 var DIST = 23; 8621 var DISTEXT = 24; 8622 var MATCH = 25; 8623 var LIT = 26; 8624 var CHECK = 27; 8625 var LENGTH = 28; 8626 var DONE = 29; 8627 var BAD = 30; 8628 var MEM = 31; 8629 var SYNC = 32; 8630 var ENOUGH_LENS = 852; 8631 var ENOUGH_DISTS = 592; 8632 var MAX_WBITS = 15; 8633 var DEF_WBITS = MAX_WBITS; 8634 function zswap32(q) { 8635 return (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24); 8636 } 8637 function InflateState() { 8638 this.mode = 0; 8639 this.last = false; 8640 this.wrap = 0; 8641 this.havedict = false; 8642 this.flags = 0; 8643 this.dmax = 0; 8644 this.check = 0; 8645 this.total = 0; 8646 this.head = null; 8647 this.wbits = 0; 8648 this.wsize = 0; 8649 this.whave = 0; 8650 this.wnext = 0; 8651 this.window = null; 8652 this.hold = 0; 8653 this.bits = 0; 8654 this.length = 0; 8655 this.offset = 0; 8656 this.extra = 0; 8657 this.lencode = null; 8658 this.distcode = null; 8659 this.lenbits = 0; 8660 this.distbits = 0; 8661 this.ncode = 0; 8662 this.nlen = 0; 8663 this.ndist = 0; 8664 this.have = 0; 8665 this.next = null; 8666 this.lens = new utils.Buf16( 8667 320 8668 ); 8669 this.work = new utils.Buf16( 8670 288 8671 ); 8672 this.lendyn = null; 8673 this.distdyn = null; 8674 this.sane = 0; 8675 this.back = 0; 8676 this.was = 0; 8677 } 8678 function inflateResetKeep(strm) { 8679 var state; 8680 if (!strm || !strm.state) { 8681 return Z_STREAM_ERROR; 8682 } 8683 state = strm.state; 8684 strm.total_in = strm.total_out = state.total = 0; 8685 strm.msg = ""; 8686 if (state.wrap) { 8687 strm.adler = state.wrap & 1; 8688 } 8689 state.mode = HEAD; 8690 state.last = 0; 8691 state.havedict = 0; 8692 state.dmax = 32768; 8693 state.head = null; 8694 state.hold = 0; 8695 state.bits = 0; 8696 state.lencode = state.lendyn = new utils.Buf32( 8697 ENOUGH_LENS 8698 ); 8699 state.distcode = state.distdyn = new utils.Buf32( 8700 ENOUGH_DISTS 8701 ); 8702 state.sane = 1; 8703 state.back = -1; 8704 return Z_OK; 8705 } 8706 function inflateReset(strm) { 8707 var state; 8708 if (!strm || !strm.state) { 8709 return Z_STREAM_ERROR; 8710 } 8711 state = strm.state; 8712 state.wsize = 0; 8713 state.whave = 0; 8714 state.wnext = 0; 8715 return inflateResetKeep(strm); 8716 } 8717 function inflateReset2(strm, windowBits) { 8718 var wrap; 8719 var state; 8720 if (!strm || !strm.state) { 8721 return Z_STREAM_ERROR; 8722 } 8723 state = strm.state; 8724 if (windowBits < 0) { 8725 wrap = 0; 8726 windowBits = -windowBits; 8727 } else { 8728 wrap = (windowBits >> 4) + 1; 8729 if (windowBits < 48) { 8730 windowBits &= 15; 8731 } 8732 } 8733 if (windowBits && (windowBits < 8 || windowBits > 15)) { 8734 return Z_STREAM_ERROR; 8735 } 8736 if (state.window !== null && state.wbits !== windowBits) { 8737 state.window = null; 8738 } 8739 state.wrap = wrap; 8740 state.wbits = windowBits; 8741 return inflateReset(strm); 8742 } 8743 function inflateInit2(strm, windowBits) { 8744 var ret; 8745 var state; 8746 if (!strm) { 8747 return Z_STREAM_ERROR; 8748 } 8749 state = new InflateState(); 8750 strm.state = state; 8751 state.window = null; 8752 ret = inflateReset2(strm, windowBits); 8753 if (ret !== Z_OK) { 8754 strm.state = null; 8755 } 8756 return ret; 8757 } 8758 function inflateInit(strm) { 8759 return inflateInit2(strm, DEF_WBITS); 8760 } 8761 var virgin = true; 8762 var lenfix, distfix; 8763 function fixedtables(state) { 8764 if (virgin) { 8765 var sym; 8766 lenfix = new utils.Buf32(512); 8767 distfix = new utils.Buf32(32); 8768 sym = 0; 8769 while (sym < 144) { 8770 state.lens[sym++] = 8; 8771 } 8772 while (sym < 256) { 8773 state.lens[sym++] = 9; 8774 } 8775 while (sym < 280) { 8776 state.lens[sym++] = 7; 8777 } 8778 while (sym < 288) { 8779 state.lens[sym++] = 8; 8780 } 8781 inflate_table( 8782 LENS, 8783 state.lens, 8784 0, 8785 288, 8786 lenfix, 8787 0, 8788 state.work, 8789 { bits: 9 } 8790 ); 8791 sym = 0; 8792 while (sym < 32) { 8793 state.lens[sym++] = 5; 8794 } 8795 inflate_table( 8796 DISTS, 8797 state.lens, 8798 0, 8799 32, 8800 distfix, 8801 0, 8802 state.work, 8803 { bits: 5 } 8804 ); 8805 virgin = false; 8806 } 8807 state.lencode = lenfix; 8808 state.lenbits = 9; 8809 state.distcode = distfix; 8810 state.distbits = 5; 8811 } 8812 function updatewindow(strm, src, end, copy) { 8813 var dist; 8814 var state = strm.state; 8815 if (state.window === null) { 8816 state.wsize = 1 << state.wbits; 8817 state.wnext = 0; 8818 state.whave = 0; 8819 state.window = new utils.Buf8(state.wsize); 8820 } 8821 if (copy >= state.wsize) { 8822 utils.arraySet( 8823 state.window, 8824 src, 8825 end - state.wsize, 8826 state.wsize, 8827 0 8828 ); 8829 state.wnext = 0; 8830 state.whave = state.wsize; 8831 } else { 8832 dist = state.wsize - state.wnext; 8833 if (dist > copy) { 8834 dist = copy; 8835 } 8836 utils.arraySet( 8837 state.window, 8838 src, 8839 end - copy, 8840 dist, 8841 state.wnext 8842 ); 8843 copy -= dist; 8844 if (copy) { 8845 utils.arraySet( 8846 state.window, 8847 src, 8848 end - copy, 8849 copy, 8850 0 8851 ); 8852 state.wnext = copy; 8853 state.whave = state.wsize; 8854 } else { 8855 state.wnext += dist; 8856 if (state.wnext === state.wsize) { 8857 state.wnext = 0; 8858 } 8859 if (state.whave < state.wsize) { 8860 state.whave += dist; 8861 } 8862 } 8863 } 8864 return 0; 8865 } 8866 function inflate(strm, flush) { 8867 var state; 8868 var input, output; 8869 var next; 8870 var put; 8871 var have, left; 8872 var hold; 8873 var bits; 8874 var _in, _out; 8875 var copy; 8876 var from; 8877 var from_source; 8878 var here = 0; 8879 var here_bits, here_op, here_val; 8880 var last_bits, last_op, last_val; 8881 var len; 8882 var ret; 8883 var hbuf = new utils.Buf8( 8884 4 8885 ); 8886 var opts; 8887 var n2; 8888 var order = ( 8889 /* permutation of code lengths */ 8890 [ 8891 16, 8892 17, 8893 18, 8894 0, 8895 8, 8896 7, 8897 9, 8898 6, 8899 10, 8900 5, 8901 11, 8902 4, 8903 12, 8904 3, 8905 13, 8906 2, 8907 14, 8908 1, 8909 15 8910 ] 8911 ); 8912 if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) { 8913 return Z_STREAM_ERROR; 8914 } 8915 state = strm.state; 8916 if (state.mode === TYPE) { 8917 state.mode = TYPEDO; 8918 } 8919 put = strm.next_out; 8920 output = strm.output; 8921 left = strm.avail_out; 8922 next = strm.next_in; 8923 input = strm.input; 8924 have = strm.avail_in; 8925 hold = state.hold; 8926 bits = state.bits; 8927 _in = have; 8928 _out = left; 8929 ret = Z_OK; 8930 inf_leave: for (; ; ) { 8931 switch (state.mode) { 8932 case HEAD: 8933 if (state.wrap === 0) { 8934 state.mode = TYPEDO; 8935 break; 8936 } 8937 while (bits < 16) { 8938 if (have === 0) { 8939 break inf_leave; 8940 } 8941 have--; 8942 hold += input[next++] << bits; 8943 bits += 8; 8944 } 8945 if (state.wrap & 2 && hold === 35615) { 8946 state.check = 0; 8947 hbuf[0] = hold & 255; 8948 hbuf[1] = hold >>> 8 & 255; 8949 state.check = crc32( 8950 state.check, 8951 hbuf, 8952 2, 8953 0 8954 ); 8955 hold = 0; 8956 bits = 0; 8957 state.mode = FLAGS; 8958 break; 8959 } 8960 state.flags = 0; 8961 if (state.head) { 8962 state.head.done = false; 8963 } 8964 if (!(state.wrap & 1) || (((hold & 255) << 8) + (hold >> 8)) % 31) { 8965 strm.msg = "incorrect header check"; 8966 state.mode = BAD; 8967 break; 8968 } 8969 if ((hold & 15) !== Z_DEFLATED) { 8970 strm.msg = "unknown compression method"; 8971 state.mode = BAD; 8972 break; 8973 } 8974 hold >>>= 4; 8975 bits -= 4; 8976 len = (hold & 15) + 8; 8977 if (state.wbits === 0) { 8978 state.wbits = len; 8979 } else if (len > state.wbits) { 8980 strm.msg = "invalid window size"; 8981 state.mode = BAD; 8982 break; 8983 } 8984 state.dmax = 1 << len; 8985 strm.adler = state.check = 1; 8986 state.mode = hold & 512 ? DICTID : TYPE; 8987 hold = 0; 8988 bits = 0; 8989 break; 8990 case FLAGS: 8991 while (bits < 16) { 8992 if (have === 0) { 8993 break inf_leave; 8994 } 8995 have--; 8996 hold += input[next++] << bits; 8997 bits += 8; 8998 } 8999 state.flags = hold; 9000 if ((state.flags & 255) !== Z_DEFLATED) { 9001 strm.msg = "unknown compression method"; 9002 state.mode = BAD; 9003 break; 9004 } 9005 if (state.flags & 57344) { 9006 strm.msg = "unknown header flags set"; 9007 state.mode = BAD; 9008 break; 9009 } 9010 if (state.head) { 9011 state.head.text = hold >> 8 & 1; 9012 } 9013 if (state.flags & 512) { 9014 hbuf[0] = hold & 255; 9015 hbuf[1] = hold >>> 8 & 255; 9016 state.check = crc32( 9017 state.check, 9018 hbuf, 9019 2, 9020 0 9021 ); 9022 } 9023 hold = 0; 9024 bits = 0; 9025 state.mode = TIME; 9026 /* falls through */ 9027 case TIME: 9028 while (bits < 32) { 9029 if (have === 0) { 9030 break inf_leave; 9031 } 9032 have--; 9033 hold += input[next++] << bits; 9034 bits += 8; 9035 } 9036 if (state.head) { 9037 state.head.time = hold; 9038 } 9039 if (state.flags & 512) { 9040 hbuf[0] = hold & 255; 9041 hbuf[1] = hold >>> 8 & 255; 9042 hbuf[2] = hold >>> 16 & 255; 9043 hbuf[3] = hold >>> 24 & 255; 9044 state.check = crc32( 9045 state.check, 9046 hbuf, 9047 4, 9048 0 9049 ); 9050 } 9051 hold = 0; 9052 bits = 0; 9053 state.mode = OS; 9054 /* falls through */ 9055 case OS: 9056 while (bits < 16) { 9057 if (have === 0) { 9058 break inf_leave; 9059 } 9060 have--; 9061 hold += input[next++] << bits; 9062 bits += 8; 9063 } 9064 if (state.head) { 9065 state.head.xflags = hold & 255; 9066 state.head.os = hold >> 8; 9067 } 9068 if (state.flags & 512) { 9069 hbuf[0] = hold & 255; 9070 hbuf[1] = hold >>> 8 & 255; 9071 state.check = crc32( 9072 state.check, 9073 hbuf, 9074 2, 9075 0 9076 ); 9077 } 9078 hold = 0; 9079 bits = 0; 9080 state.mode = EXLEN; 9081 /* falls through */ 9082 case EXLEN: 9083 if (state.flags & 1024) { 9084 while (bits < 16) { 9085 if (have === 0) { 9086 break inf_leave; 9087 } 9088 have--; 9089 hold += input[next++] << bits; 9090 bits += 8; 9091 } 9092 state.length = hold; 9093 if (state.head) { 9094 state.head.extra_len = hold; 9095 } 9096 if (state.flags & 512) { 9097 hbuf[0] = hold & 255; 9098 hbuf[1] = hold >>> 8 & 255; 9099 state.check = crc32( 9100 state.check, 9101 hbuf, 9102 2, 9103 0 9104 ); 9105 } 9106 hold = 0; 9107 bits = 0; 9108 } else if (state.head) { 9109 state.head.extra = null; 9110 } 9111 state.mode = EXTRA; 9112 /* falls through */ 9113 case EXTRA: 9114 if (state.flags & 1024) { 9115 copy = state.length; 9116 if (copy > have) { 9117 copy = have; 9118 } 9119 if (copy) { 9120 if (state.head) { 9121 len = state.head.extra_len - state.length; 9122 if (!state.head.extra) { 9123 state.head.extra = new Array( 9124 state.head.extra_len 9125 ); 9126 } 9127 utils.arraySet( 9128 state.head.extra, 9129 input, 9130 next, 9131 // extra field is limited to 65536 bytes 9132 // - no need for additional size check 9133 copy, 9134 /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ 9135 len 9136 ); 9137 } 9138 if (state.flags & 512) { 9139 state.check = crc32( 9140 state.check, 9141 input, 9142 copy, 9143 next 9144 ); 9145 } 9146 have -= copy; 9147 next += copy; 9148 state.length -= copy; 9149 } 9150 if (state.length) { 9151 break inf_leave; 9152 } 9153 } 9154 state.length = 0; 9155 state.mode = NAME; 9156 /* falls through */ 9157 case NAME: 9158 if (state.flags & 2048) { 9159 if (have === 0) { 9160 break inf_leave; 9161 } 9162 copy = 0; 9163 do { 9164 len = input[next + copy++]; 9165 if (state.head && len && state.length < 65536) { 9166 state.head.name += String.fromCharCode(len); 9167 } 9168 } while (len && copy < have); 9169 if (state.flags & 512) { 9170 state.check = crc32( 9171 state.check, 9172 input, 9173 copy, 9174 next 9175 ); 9176 } 9177 have -= copy; 9178 next += copy; 9179 if (len) { 9180 break inf_leave; 9181 } 9182 } else if (state.head) { 9183 state.head.name = null; 9184 } 9185 state.length = 0; 9186 state.mode = COMMENT; 9187 /* falls through */ 9188 case COMMENT: 9189 if (state.flags & 4096) { 9190 if (have === 0) { 9191 break inf_leave; 9192 } 9193 copy = 0; 9194 do { 9195 len = input[next + copy++]; 9196 if (state.head && len && state.length < 65536) { 9197 state.head.comment += String.fromCharCode(len); 9198 } 9199 } while (len && copy < have); 9200 if (state.flags & 512) { 9201 state.check = crc32( 9202 state.check, 9203 input, 9204 copy, 9205 next 9206 ); 9207 } 9208 have -= copy; 9209 next += copy; 9210 if (len) { 9211 break inf_leave; 9212 } 9213 } else if (state.head) { 9214 state.head.comment = null; 9215 } 9216 state.mode = HCRC; 9217 /* falls through */ 9218 case HCRC: 9219 if (state.flags & 512) { 9220 while (bits < 16) { 9221 if (have === 0) { 9222 break inf_leave; 9223 } 9224 have--; 9225 hold += input[next++] << bits; 9226 bits += 8; 9227 } 9228 if (hold !== (state.check & 65535)) { 9229 strm.msg = "header crc mismatch"; 9230 state.mode = BAD; 9231 break; 9232 } 9233 hold = 0; 9234 bits = 0; 9235 } 9236 if (state.head) { 9237 state.head.hcrc = state.flags >> 9 & 1; 9238 state.head.done = true; 9239 } 9240 strm.adler = state.check = 0; 9241 state.mode = TYPE; 9242 break; 9243 case DICTID: 9244 while (bits < 32) { 9245 if (have === 0) { 9246 break inf_leave; 9247 } 9248 have--; 9249 hold += input[next++] << bits; 9250 bits += 8; 9251 } 9252 strm.adler = state.check = zswap32(hold); 9253 hold = 0; 9254 bits = 0; 9255 state.mode = DICT; 9256 /* falls through */ 9257 case DICT: 9258 if (state.havedict === 0) { 9259 strm.next_out = put; 9260 strm.avail_out = left; 9261 strm.next_in = next; 9262 strm.avail_in = have; 9263 state.hold = hold; 9264 state.bits = bits; 9265 return Z_NEED_DICT; 9266 } 9267 strm.adler = state.check = 1; 9268 state.mode = TYPE; 9269 /* falls through */ 9270 case TYPE: 9271 if (flush === Z_BLOCK || flush === Z_TREES) { 9272 break inf_leave; 9273 } 9274 /* falls through */ 9275 case TYPEDO: 9276 if (state.last) { 9277 hold >>>= bits & 7; 9278 bits -= bits & 7; 9279 state.mode = CHECK; 9280 break; 9281 } 9282 while (bits < 3) { 9283 if (have === 0) { 9284 break inf_leave; 9285 } 9286 have--; 9287 hold += input[next++] << bits; 9288 bits += 8; 9289 } 9290 state.last = hold & 1; 9291 hold >>>= 1; 9292 bits -= 1; 9293 switch (hold & 3) { 9294 case 0: 9295 state.mode = STORED; 9296 break; 9297 case 1: 9298 fixedtables(state); 9299 state.mode = LEN_; 9300 if (flush === Z_TREES) { 9301 hold >>>= 2; 9302 bits -= 2; 9303 break inf_leave; 9304 } 9305 break; 9306 case 2: 9307 state.mode = TABLE; 9308 break; 9309 case 3: 9310 strm.msg = "invalid block type"; 9311 state.mode = BAD; 9312 } 9313 hold >>>= 2; 9314 bits -= 2; 9315 break; 9316 case STORED: 9317 hold >>>= bits & 7; 9318 bits -= bits & 7; 9319 while (bits < 32) { 9320 if (have === 0) { 9321 break inf_leave; 9322 } 9323 have--; 9324 hold += input[next++] << bits; 9325 bits += 8; 9326 } 9327 if ((hold & 65535) !== (hold >>> 16 ^ 65535)) { 9328 strm.msg = "invalid stored block lengths"; 9329 state.mode = BAD; 9330 break; 9331 } 9332 state.length = hold & 65535; 9333 hold = 0; 9334 bits = 0; 9335 state.mode = COPY_; 9336 if (flush === Z_TREES) { 9337 break inf_leave; 9338 } 9339 /* falls through */ 9340 case COPY_: 9341 state.mode = COPY; 9342 /* falls through */ 9343 case COPY: 9344 copy = state.length; 9345 if (copy) { 9346 if (copy > have) { 9347 copy = have; 9348 } 9349 if (copy > left) { 9350 copy = left; 9351 } 9352 if (copy === 0) { 9353 break inf_leave; 9354 } 9355 utils.arraySet( 9356 output, 9357 input, 9358 next, 9359 copy, 9360 put 9361 ); 9362 have -= copy; 9363 next += copy; 9364 left -= copy; 9365 put += copy; 9366 state.length -= copy; 9367 break; 9368 } 9369 state.mode = TYPE; 9370 break; 9371 case TABLE: 9372 while (bits < 14) { 9373 if (have === 0) { 9374 break inf_leave; 9375 } 9376 have--; 9377 hold += input[next++] << bits; 9378 bits += 8; 9379 } 9380 state.nlen = (hold & 31) + 257; 9381 hold >>>= 5; 9382 bits -= 5; 9383 state.ndist = (hold & 31) + 1; 9384 hold >>>= 5; 9385 bits -= 5; 9386 state.ncode = (hold & 15) + 4; 9387 hold >>>= 4; 9388 bits -= 4; 9389 if (state.nlen > 286 || state.ndist > 30) { 9390 strm.msg = "too many length or distance symbols"; 9391 state.mode = BAD; 9392 break; 9393 } 9394 state.have = 0; 9395 state.mode = LENLENS; 9396 /* falls through */ 9397 case LENLENS: 9398 while (state.have < state.ncode) { 9399 while (bits < 3) { 9400 if (have === 0) { 9401 break inf_leave; 9402 } 9403 have--; 9404 hold += input[next++] << bits; 9405 bits += 8; 9406 } 9407 state.lens[order[state.have++]] = hold & 7; 9408 hold >>>= 3; 9409 bits -= 3; 9410 } 9411 while (state.have < 19) { 9412 state.lens[order[state.have++]] = 0; 9413 } 9414 state.lencode = state.lendyn; 9415 state.lenbits = 7; 9416 opts = { bits: state.lenbits }; 9417 ret = inflate_table( 9418 CODES, 9419 state.lens, 9420 0, 9421 19, 9422 state.lencode, 9423 0, 9424 state.work, 9425 opts 9426 ); 9427 state.lenbits = opts.bits; 9428 if (ret) { 9429 strm.msg = "invalid code lengths set"; 9430 state.mode = BAD; 9431 break; 9432 } 9433 state.have = 0; 9434 state.mode = CODELENS; 9435 /* falls through */ 9436 case CODELENS: 9437 while (state.have < state.nlen + state.ndist) { 9438 for (; ; ) { 9439 here = state.lencode[hold & (1 << state.lenbits) - 1]; 9440 here_bits = here >>> 24; 9441 here_op = here >>> 16 & 255; 9442 here_val = here & 65535; 9443 if (here_bits <= bits) { 9444 break; 9445 } 9446 if (have === 0) { 9447 break inf_leave; 9448 } 9449 have--; 9450 hold += input[next++] << bits; 9451 bits += 8; 9452 } 9453 if (here_val < 16) { 9454 hold >>>= here_bits; 9455 bits -= here_bits; 9456 state.lens[state.have++] = here_val; 9457 } else { 9458 if (here_val === 16) { 9459 n2 = here_bits + 2; 9460 while (bits < n2) { 9461 if (have === 0) { 9462 break inf_leave; 9463 } 9464 have--; 9465 hold += input[next++] << bits; 9466 bits += 8; 9467 } 9468 hold >>>= here_bits; 9469 bits -= here_bits; 9470 if (state.have === 0) { 9471 strm.msg = "invalid bit length repeat"; 9472 state.mode = BAD; 9473 break; 9474 } 9475 len = state.lens[state.have - 1]; 9476 copy = 3 + (hold & 3); 9477 hold >>>= 2; 9478 bits -= 2; 9479 } else if (here_val === 17) { 9480 n2 = here_bits + 3; 9481 while (bits < n2) { 9482 if (have === 0) { 9483 break inf_leave; 9484 } 9485 have--; 9486 hold += input[next++] << bits; 9487 bits += 8; 9488 } 9489 hold >>>= here_bits; 9490 bits -= here_bits; 9491 len = 0; 9492 copy = 3 + (hold & 7); 9493 hold >>>= 3; 9494 bits -= 3; 9495 } else { 9496 n2 = here_bits + 7; 9497 while (bits < n2) { 9498 if (have === 0) { 9499 break inf_leave; 9500 } 9501 have--; 9502 hold += input[next++] << bits; 9503 bits += 8; 9504 } 9505 hold >>>= here_bits; 9506 bits -= here_bits; 9507 len = 0; 9508 copy = 11 + (hold & 127); 9509 hold >>>= 7; 9510 bits -= 7; 9511 } 9512 if (state.have + copy > state.nlen + state.ndist) { 9513 strm.msg = "invalid bit length repeat"; 9514 state.mode = BAD; 9515 break; 9516 } 9517 while (copy--) { 9518 state.lens[state.have++] = len; 9519 } 9520 } 9521 } 9522 if (state.mode === BAD) { 9523 break; 9524 } 9525 if (state.lens[256] === 0) { 9526 strm.msg = "invalid code -- missing end-of-block"; 9527 state.mode = BAD; 9528 break; 9529 } 9530 state.lenbits = 9; 9531 opts = { bits: state.lenbits }; 9532 ret = inflate_table( 9533 LENS, 9534 state.lens, 9535 0, 9536 state.nlen, 9537 state.lencode, 9538 0, 9539 state.work, 9540 opts 9541 ); 9542 state.lenbits = opts.bits; 9543 if (ret) { 9544 strm.msg = "invalid literal/lengths set"; 9545 state.mode = BAD; 9546 break; 9547 } 9548 state.distbits = 6; 9549 state.distcode = state.distdyn; 9550 opts = { bits: state.distbits }; 9551 ret = inflate_table( 9552 DISTS, 9553 state.lens, 9554 state.nlen, 9555 state.ndist, 9556 state.distcode, 9557 0, 9558 state.work, 9559 opts 9560 ); 9561 state.distbits = opts.bits; 9562 if (ret) { 9563 strm.msg = "invalid distances set"; 9564 state.mode = BAD; 9565 break; 9566 } 9567 state.mode = LEN_; 9568 if (flush === Z_TREES) { 9569 break inf_leave; 9570 } 9571 /* falls through */ 9572 case LEN_: 9573 state.mode = LEN; 9574 /* falls through */ 9575 case LEN: 9576 if (have >= 6 && left >= 258) { 9577 strm.next_out = put; 9578 strm.avail_out = left; 9579 strm.next_in = next; 9580 strm.avail_in = have; 9581 state.hold = hold; 9582 state.bits = bits; 9583 inflate_fast(strm, _out); 9584 put = strm.next_out; 9585 output = strm.output; 9586 left = strm.avail_out; 9587 next = strm.next_in; 9588 input = strm.input; 9589 have = strm.avail_in; 9590 hold = state.hold; 9591 bits = state.bits; 9592 if (state.mode === TYPE) { 9593 state.back = -1; 9594 } 9595 break; 9596 } 9597 state.back = 0; 9598 for (; ; ) { 9599 here = state.lencode[hold & (1 << state.lenbits) - 1]; 9600 here_bits = here >>> 24; 9601 here_op = here >>> 16 & 255; 9602 here_val = here & 65535; 9603 if (here_bits <= bits) { 9604 break; 9605 } 9606 if (have === 0) { 9607 break inf_leave; 9608 } 9609 have--; 9610 hold += input[next++] << bits; 9611 bits += 8; 9612 } 9613 if (here_op && (here_op & 240) === 0) { 9614 last_bits = here_bits; 9615 last_op = here_op; 9616 last_val = here_val; 9617 for (; ; ) { 9618 here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; 9619 here_bits = here >>> 24; 9620 here_op = here >>> 16 & 255; 9621 here_val = here & 65535; 9622 if (last_bits + here_bits <= bits) { 9623 break; 9624 } 9625 if (have === 0) { 9626 break inf_leave; 9627 } 9628 have--; 9629 hold += input[next++] << bits; 9630 bits += 8; 9631 } 9632 hold >>>= last_bits; 9633 bits -= last_bits; 9634 state.back += last_bits; 9635 } 9636 hold >>>= here_bits; 9637 bits -= here_bits; 9638 state.back += here_bits; 9639 state.length = here_val; 9640 if (here_op === 0) { 9641 state.mode = LIT; 9642 break; 9643 } 9644 if (here_op & 32) { 9645 state.back = -1; 9646 state.mode = TYPE; 9647 break; 9648 } 9649 if (here_op & 64) { 9650 strm.msg = "invalid literal/length code"; 9651 state.mode = BAD; 9652 break; 9653 } 9654 state.extra = here_op & 15; 9655 state.mode = LENEXT; 9656 /* falls through */ 9657 case LENEXT: 9658 if (state.extra) { 9659 n2 = state.extra; 9660 while (bits < n2) { 9661 if (have === 0) { 9662 break inf_leave; 9663 } 9664 have--; 9665 hold += input[next++] << bits; 9666 bits += 8; 9667 } 9668 state.length += hold & (1 << state.extra) - 1; 9669 hold >>>= state.extra; 9670 bits -= state.extra; 9671 state.back += state.extra; 9672 } 9673 state.was = state.length; 9674 state.mode = DIST; 9675 /* falls through */ 9676 case DIST: 9677 for (; ; ) { 9678 here = state.distcode[hold & (1 << state.distbits) - 1]; 9679 here_bits = here >>> 24; 9680 here_op = here >>> 16 & 255; 9681 here_val = here & 65535; 9682 if (here_bits <= bits) { 9683 break; 9684 } 9685 if (have === 0) { 9686 break inf_leave; 9687 } 9688 have--; 9689 hold += input[next++] << bits; 9690 bits += 8; 9691 } 9692 if ((here_op & 240) === 0) { 9693 last_bits = here_bits; 9694 last_op = here_op; 9695 last_val = here_val; 9696 for (; ; ) { 9697 here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; 9698 here_bits = here >>> 24; 9699 here_op = here >>> 16 & 255; 9700 here_val = here & 65535; 9701 if (last_bits + here_bits <= bits) { 9702 break; 9703 } 9704 if (have === 0) { 9705 break inf_leave; 9706 } 9707 have--; 9708 hold += input[next++] << bits; 9709 bits += 8; 9710 } 9711 hold >>>= last_bits; 9712 bits -= last_bits; 9713 state.back += last_bits; 9714 } 9715 hold >>>= here_bits; 9716 bits -= here_bits; 9717 state.back += here_bits; 9718 if (here_op & 64) { 9719 strm.msg = "invalid distance code"; 9720 state.mode = BAD; 9721 break; 9722 } 9723 state.offset = here_val; 9724 state.extra = here_op & 15; 9725 state.mode = DISTEXT; 9726 /* falls through */ 9727 case DISTEXT: 9728 if (state.extra) { 9729 n2 = state.extra; 9730 while (bits < n2) { 9731 if (have === 0) { 9732 break inf_leave; 9733 } 9734 have--; 9735 hold += input[next++] << bits; 9736 bits += 8; 9737 } 9738 state.offset += hold & (1 << state.extra) - 1; 9739 hold >>>= state.extra; 9740 bits -= state.extra; 9741 state.back += state.extra; 9742 } 9743 if (state.offset > state.dmax) { 9744 strm.msg = "invalid distance too far back"; 9745 state.mode = BAD; 9746 break; 9747 } 9748 state.mode = MATCH; 9749 /* falls through */ 9750 case MATCH: 9751 if (left === 0) { 9752 break inf_leave; 9753 } 9754 copy = _out - left; 9755 if (state.offset > copy) { 9756 copy = state.offset - copy; 9757 if (copy > state.whave) { 9758 if (state.sane) { 9759 strm.msg = "invalid distance too far back"; 9760 state.mode = BAD; 9761 break; 9762 } 9763 } 9764 if (copy > state.wnext) { 9765 copy -= state.wnext; 9766 from = state.wsize - copy; 9767 } else { 9768 from = state.wnext - copy; 9769 } 9770 if (copy > state.length) { 9771 copy = state.length; 9772 } 9773 from_source = state.window; 9774 } else { 9775 from_source = output; 9776 from = put - state.offset; 9777 copy = state.length; 9778 } 9779 if (copy > left) { 9780 copy = left; 9781 } 9782 left -= copy; 9783 state.length -= copy; 9784 do { 9785 output[put++] = from_source[from++]; 9786 } while (--copy); 9787 if (state.length === 0) { 9788 state.mode = LEN; 9789 } 9790 break; 9791 case LIT: 9792 if (left === 0) { 9793 break inf_leave; 9794 } 9795 output[put++] = state.length; 9796 left--; 9797 state.mode = LEN; 9798 break; 9799 case CHECK: 9800 if (state.wrap) { 9801 while (bits < 32) { 9802 if (have === 0) { 9803 break inf_leave; 9804 } 9805 have--; 9806 hold |= input[next++] << bits; 9807 bits += 8; 9808 } 9809 _out -= left; 9810 strm.total_out += _out; 9811 state.total += _out; 9812 if (_out) { 9813 strm.adler = state.check = /*UPDATE(state.check, put - _out, _out);*/ 9814 state.flags ? crc32( 9815 state.check, 9816 output, 9817 _out, 9818 put - _out 9819 ) : adler32( 9820 state.check, 9821 output, 9822 _out, 9823 put - _out 9824 ); 9825 } 9826 _out = left; 9827 if ((state.flags ? hold : zswap32(hold)) !== state.check) { 9828 strm.msg = "incorrect data check"; 9829 state.mode = BAD; 9830 break; 9831 } 9832 hold = 0; 9833 bits = 0; 9834 } 9835 state.mode = LENGTH; 9836 /* falls through */ 9837 case LENGTH: 9838 if (state.wrap && state.flags) { 9839 while (bits < 32) { 9840 if (have === 0) { 9841 break inf_leave; 9842 } 9843 have--; 9844 hold += input[next++] << bits; 9845 bits += 8; 9846 } 9847 if (hold !== (state.total & 4294967295)) { 9848 strm.msg = "incorrect length check"; 9849 state.mode = BAD; 9850 break; 9851 } 9852 hold = 0; 9853 bits = 0; 9854 } 9855 state.mode = DONE; 9856 /* falls through */ 9857 case DONE: 9858 ret = Z_STREAM_END; 9859 break inf_leave; 9860 case BAD: 9861 ret = Z_DATA_ERROR; 9862 break inf_leave; 9863 case MEM: 9864 return Z_MEM_ERROR; 9865 case SYNC: 9866 /* falls through */ 9867 default: 9868 return Z_STREAM_ERROR; 9869 } 9870 } 9871 strm.next_out = put; 9872 strm.avail_out = left; 9873 strm.next_in = next; 9874 strm.avail_in = have; 9875 state.hold = hold; 9876 state.bits = bits; 9877 if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) { 9878 if (updatewindow( 9879 strm, 9880 strm.output, 9881 strm.next_out, 9882 _out - strm.avail_out 9883 )) { 9884 state.mode = MEM; 9885 return Z_MEM_ERROR; 9886 } 9887 } 9888 _in -= strm.avail_in; 9889 _out -= strm.avail_out; 9890 strm.total_in += _in; 9891 strm.total_out += _out; 9892 state.total += _out; 9893 if (state.wrap && _out) { 9894 strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ 9895 state.flags ? crc32( 9896 state.check, 9897 output, 9898 _out, 9899 strm.next_out - _out 9900 ) : adler32( 9901 state.check, 9902 output, 9903 _out, 9904 strm.next_out - _out 9905 ); 9906 } 9907 strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); 9908 if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) { 9909 ret = Z_BUF_ERROR; 9910 } 9911 return ret; 9912 } 9913 function inflateEnd(strm) { 9914 if (!strm || !strm.state) { 9915 return Z_STREAM_ERROR; 9916 } 9917 var state = strm.state; 9918 if (state.window) { 9919 state.window = null; 9920 } 9921 strm.state = null; 9922 return Z_OK; 9923 } 9924 function inflateGetHeader(strm, head2) { 9925 var state; 9926 if (!strm || !strm.state) { 9927 return Z_STREAM_ERROR; 9928 } 9929 state = strm.state; 9930 if ((state.wrap & 2) === 0) { 9931 return Z_STREAM_ERROR; 9932 } 9933 state.head = head2; 9934 head2.done = false; 9935 return Z_OK; 9936 } 9937 function inflateSetDictionary(strm, dictionary) { 9938 var dictLength = dictionary.length; 9939 var state; 9940 var dictid; 9941 var ret; 9942 if (!strm || !strm.state) { 9943 return Z_STREAM_ERROR; 9944 } 9945 state = strm.state; 9946 if (state.wrap !== 0 && state.mode !== DICT) { 9947 return Z_STREAM_ERROR; 9948 } 9949 if (state.mode === DICT) { 9950 dictid = 1; 9951 dictid = adler32( 9952 dictid, 9953 dictionary, 9954 dictLength, 9955 0 9956 ); 9957 if (dictid !== state.check) { 9958 return Z_DATA_ERROR; 9959 } 9960 } 9961 ret = updatewindow( 9962 strm, 9963 dictionary, 9964 dictLength, 9965 dictLength 9966 ); 9967 if (ret) { 9968 state.mode = MEM; 9969 return Z_MEM_ERROR; 9970 } 9971 state.havedict = 1; 9972 return Z_OK; 9973 } 9974 exports3.inflateReset = inflateReset; 9975 exports3.inflateReset2 = inflateReset2; 9976 exports3.inflateResetKeep = inflateResetKeep; 9977 exports3.inflateInit = inflateInit; 9978 exports3.inflateInit2 = inflateInit2; 9979 exports3.inflate = inflate; 9980 exports3.inflateEnd = inflateEnd; 9981 exports3.inflateGetHeader = inflateGetHeader; 9982 exports3.inflateSetDictionary = inflateSetDictionary; 9983 exports3.inflateInfo = "pako inflate (from Nodeca project)"; 9984 }, 9985 { 9986 "../utils/common": 1, 9987 "./adler32": 3, 9988 "./crc32": 5, 9989 "./inffast": 7, 9990 "./inftrees": 9 9991 } 9992 ], 9993 9: [ 9994 function(require2, module3, exports3) { 9995 "use strict"; 9996 var utils = require2("../utils/common"); 9997 var MAXBITS = 15; 9998 var ENOUGH_LENS = 852; 9999 var ENOUGH_DISTS = 592; 10000 var CODES = 0; 10001 var LENS = 1; 10002 var DISTS = 2; 10003 var lbase = [ 10004 /* Length codes 257..285 base */ 10005 3, 10006 4, 10007 5, 10008 6, 10009 7, 10010 8, 10011 9, 10012 10, 10013 11, 10014 13, 10015 15, 10016 17, 10017 19, 10018 23, 10019 27, 10020 31, 10021 35, 10022 43, 10023 51, 10024 59, 10025 67, 10026 83, 10027 99, 10028 115, 10029 131, 10030 163, 10031 195, 10032 227, 10033 258, 10034 0, 10035 0 10036 ]; 10037 var lext = [ 10038 /* Length codes 257..285 extra */ 10039 16, 10040 16, 10041 16, 10042 16, 10043 16, 10044 16, 10045 16, 10046 16, 10047 17, 10048 17, 10049 17, 10050 17, 10051 18, 10052 18, 10053 18, 10054 18, 10055 19, 10056 19, 10057 19, 10058 19, 10059 20, 10060 20, 10061 20, 10062 20, 10063 21, 10064 21, 10065 21, 10066 21, 10067 16, 10068 72, 10069 78 10070 ]; 10071 var dbase = [ 10072 /* Distance codes 0..29 base */ 10073 1, 10074 2, 10075 3, 10076 4, 10077 5, 10078 7, 10079 9, 10080 13, 10081 17, 10082 25, 10083 33, 10084 49, 10085 65, 10086 97, 10087 129, 10088 193, 10089 257, 10090 385, 10091 513, 10092 769, 10093 1025, 10094 1537, 10095 2049, 10096 3073, 10097 4097, 10098 6145, 10099 8193, 10100 12289, 10101 16385, 10102 24577, 10103 0, 10104 0 10105 ]; 10106 var dext = [ 10107 /* Distance codes 0..29 extra */ 10108 16, 10109 16, 10110 16, 10111 16, 10112 17, 10113 17, 10114 18, 10115 18, 10116 19, 10117 19, 10118 20, 10119 20, 10120 21, 10121 21, 10122 22, 10123 22, 10124 23, 10125 23, 10126 24, 10127 24, 10128 25, 10129 25, 10130 26, 10131 26, 10132 27, 10133 27, 10134 28, 10135 28, 10136 29, 10137 29, 10138 64, 10139 64 10140 ]; 10141 module3.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) { 10142 var bits = opts.bits; 10143 var len = 0; 10144 var sym = 0; 10145 var min = 0, max = 0; 10146 var root = 0; 10147 var curr = 0; 10148 var drop = 0; 10149 var left = 0; 10150 var used = 0; 10151 var huff = 0; 10152 var incr; 10153 var fill; 10154 var low; 10155 var mask; 10156 var next; 10157 var base = null; 10158 var base_index = 0; 10159 var end; 10160 var count = new utils.Buf16(MAXBITS + 1); 10161 var offs = new utils.Buf16(MAXBITS + 1); 10162 var extra = null; 10163 var extra_index = 0; 10164 var here_bits, here_op, here_val; 10165 for (len = 0; len <= MAXBITS; len++) { 10166 count[len] = 0; 10167 } 10168 for (sym = 0; sym < codes; sym++) { 10169 count[lens[lens_index + sym]]++; 10170 } 10171 root = bits; 10172 for (max = MAXBITS; max >= 1; max--) { 10173 if (count[max] !== 0) { 10174 break; 10175 } 10176 } 10177 if (root > max) { 10178 root = max; 10179 } 10180 if (max === 0) { 10181 table[table_index++] = 1 << 24 | 64 << 16 | 0; 10182 table[table_index++] = 1 << 24 | 64 << 16 | 0; 10183 opts.bits = 1; 10184 return 0; 10185 } 10186 for (min = 1; min < max; min++) { 10187 if (count[min] !== 0) { 10188 break; 10189 } 10190 } 10191 if (root < min) { 10192 root = min; 10193 } 10194 left = 1; 10195 for (len = 1; len <= MAXBITS; len++) { 10196 left <<= 1; 10197 left -= count[len]; 10198 if (left < 0) { 10199 return -1; 10200 } 10201 } 10202 if (left > 0 && (type === CODES || max !== 1)) { 10203 return -1; 10204 } 10205 offs[1] = 0; 10206 for (len = 1; len < MAXBITS; len++) { 10207 offs[len + 1] = offs[len] + count[len]; 10208 } 10209 for (sym = 0; sym < codes; sym++) { 10210 if (lens[lens_index + sym] !== 0) { 10211 work[offs[lens[lens_index + sym]]++] = sym; 10212 } 10213 } 10214 if (type === CODES) { 10215 base = extra = work; 10216 end = 19; 10217 } else if (type === LENS) { 10218 base = lbase; 10219 base_index -= 257; 10220 extra = lext; 10221 extra_index -= 257; 10222 end = 256; 10223 } else { 10224 base = dbase; 10225 extra = dext; 10226 end = -1; 10227 } 10228 huff = 0; 10229 sym = 0; 10230 len = min; 10231 next = table_index; 10232 curr = root; 10233 drop = 0; 10234 low = -1; 10235 used = 1 << root; 10236 mask = used - 1; 10237 if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { 10238 return 1; 10239 } 10240 for (; ; ) { 10241 here_bits = len - drop; 10242 if (work[sym] < end) { 10243 here_op = 0; 10244 here_val = work[sym]; 10245 } else if (work[sym] > end) { 10246 here_op = extra[extra_index + work[sym]]; 10247 here_val = base[base_index + work[sym]]; 10248 } else { 10249 here_op = 32 + 64; 10250 here_val = 0; 10251 } 10252 incr = 1 << len - drop; 10253 fill = 1 << curr; 10254 min = fill; 10255 do { 10256 fill -= incr; 10257 table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0; 10258 } while (fill !== 0); 10259 incr = 1 << len - 1; 10260 while (huff & incr) { 10261 incr >>= 1; 10262 } 10263 if (incr !== 0) { 10264 huff &= incr - 1; 10265 huff += incr; 10266 } else { 10267 huff = 0; 10268 } 10269 sym++; 10270 if (--count[len] === 0) { 10271 if (len === max) { 10272 break; 10273 } 10274 len = lens[lens_index + work[sym]]; 10275 } 10276 if (len > root && (huff & mask) !== low) { 10277 if (drop === 0) { 10278 drop = root; 10279 } 10280 next += min; 10281 curr = len - drop; 10282 left = 1 << curr; 10283 while (curr + drop < max) { 10284 left -= count[curr + drop]; 10285 if (left <= 0) { 10286 break; 10287 } 10288 curr++; 10289 left <<= 1; 10290 } 10291 used += 1 << curr; 10292 if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { 10293 return 1; 10294 } 10295 low = huff & mask; 10296 table[low] = root << 24 | curr << 16 | next - table_index | 0; 10297 } 10298 } 10299 if (huff !== 0) { 10300 table[next + huff] = len - drop << 24 | 64 << 16 | 0; 10301 } 10302 opts.bits = root; 10303 return 0; 10304 }; 10305 }, 10306 { "../utils/common": 1 } 10307 ], 10308 10: [ 10309 function(require2, module3, exports3) { 10310 "use strict"; 10311 module3.exports = { 10312 2: "need dictionary", 10313 1: "stream end", 10314 0: "", 10315 "-1": "file error", 10316 "-2": "stream error", 10317 "-3": "data error", 10318 "-4": "insufficient memory", 10319 "-5": "buffer error", 10320 "-6": "incompatible version" 10321 }; 10322 }, 10323 {} 10324 ], 10325 11: [ 10326 function(require2, module3, exports3) { 10327 "use strict"; 10328 function ZStream() { 10329 this.input = null; 10330 this.next_in = 0; 10331 this.avail_in = 0; 10332 this.total_in = 0; 10333 this.output = null; 10334 this.next_out = 0; 10335 this.avail_out = 0; 10336 this.total_out = 0; 10337 this.msg = ""; 10338 this.state = null; 10339 this.data_type = 2; 10340 this.adler = 0; 10341 } 10342 module3.exports = ZStream; 10343 }, 10344 {} 10345 ], 10346 "/lib/inflate.js": [ 10347 function(require2, module3, exports3) { 10348 "use strict"; 10349 var zlib_inflate = require2("./zlib/inflate"); 10350 var utils = require2("./utils/common"); 10351 var strings = require2("./utils/strings"); 10352 var c2 = require2("./zlib/constants"); 10353 var msg = require2("./zlib/messages"); 10354 var ZStream = require2("./zlib/zstream"); 10355 var GZheader = require2("./zlib/gzheader"); 10356 var toString = Object.prototype.toString; 10357 function Inflate(options) { 10358 if (!(this instanceof Inflate)) 10359 return new Inflate(options); 10360 this.options = utils.assign( 10361 { 10362 chunkSize: 16384, 10363 windowBits: 0, 10364 to: "" 10365 }, 10366 options || {} 10367 ); 10368 var opt = this.options; 10369 if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) { 10370 opt.windowBits = -opt.windowBits; 10371 if (opt.windowBits === 0) { 10372 opt.windowBits = -15; 10373 } 10374 } 10375 if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) { 10376 opt.windowBits += 32; 10377 } 10378 if (opt.windowBits > 15 && opt.windowBits < 48) { 10379 if ((opt.windowBits & 15) === 0) { 10380 opt.windowBits |= 15; 10381 } 10382 } 10383 this.err = 0; 10384 this.msg = ""; 10385 this.ended = false; 10386 this.chunks = []; 10387 this.strm = new ZStream(); 10388 this.strm.avail_out = 0; 10389 var status = zlib_inflate.inflateInit2( 10390 this.strm, 10391 opt.windowBits 10392 ); 10393 if (status !== c2.Z_OK) { 10394 throw new Error(msg[status]); 10395 } 10396 this.header = new GZheader(); 10397 zlib_inflate.inflateGetHeader(this.strm, this.header); 10398 if (opt.dictionary) { 10399 if (typeof opt.dictionary === "string") { 10400 opt.dictionary = strings.string2buf( 10401 opt.dictionary 10402 ); 10403 } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { 10404 opt.dictionary = new Uint8Array( 10405 opt.dictionary 10406 ); 10407 } 10408 if (opt.raw) { 10409 status = zlib_inflate.inflateSetDictionary( 10410 this.strm, 10411 opt.dictionary 10412 ); 10413 if (status !== c2.Z_OK) { 10414 throw new Error(msg[status]); 10415 } 10416 } 10417 } 10418 } 10419 Inflate.prototype.push = function(data, mode) { 10420 var strm = this.strm; 10421 var chunkSize = this.options.chunkSize; 10422 var dictionary = this.options.dictionary; 10423 var status, _mode; 10424 var next_out_utf8, tail, utf8str; 10425 var allowBufError = false; 10426 if (this.ended) { 10427 return false; 10428 } 10429 _mode = mode === ~~mode ? mode : mode === true ? c2.Z_FINISH : c2.Z_NO_FLUSH; 10430 if (typeof data === "string") { 10431 strm.input = strings.binstring2buf(data); 10432 } else if (toString.call(data) === "[object ArrayBuffer]") { 10433 strm.input = new Uint8Array(data); 10434 } else { 10435 strm.input = data; 10436 } 10437 strm.next_in = 0; 10438 strm.avail_in = strm.input.length; 10439 do { 10440 if (strm.avail_out === 0) { 10441 strm.output = new utils.Buf8(chunkSize); 10442 strm.next_out = 0; 10443 strm.avail_out = chunkSize; 10444 } 10445 status = zlib_inflate.inflate( 10446 strm, 10447 c2.Z_NO_FLUSH 10448 ); 10449 if (status === c2.Z_NEED_DICT && dictionary) { 10450 status = zlib_inflate.inflateSetDictionary( 10451 this.strm, 10452 dictionary 10453 ); 10454 } 10455 if (status === c2.Z_BUF_ERROR && allowBufError === true) { 10456 status = c2.Z_OK; 10457 allowBufError = false; 10458 } 10459 if (status !== c2.Z_STREAM_END && status !== c2.Z_OK) { 10460 this.onEnd(status); 10461 this.ended = true; 10462 return false; 10463 } 10464 if (strm.next_out) { 10465 if (strm.avail_out === 0 || status === c2.Z_STREAM_END || strm.avail_in === 0 && (_mode === c2.Z_FINISH || _mode === c2.Z_SYNC_FLUSH)) { 10466 if (this.options.to === "string") { 10467 next_out_utf8 = strings.utf8border( 10468 strm.output, 10469 strm.next_out 10470 ); 10471 tail = strm.next_out - next_out_utf8; 10472 utf8str = strings.buf2string( 10473 strm.output, 10474 next_out_utf8 10475 ); 10476 strm.next_out = tail; 10477 strm.avail_out = chunkSize - tail; 10478 if (tail) { 10479 utils.arraySet( 10480 strm.output, 10481 strm.output, 10482 next_out_utf8, 10483 tail, 10484 0 10485 ); 10486 } 10487 this.onData(utf8str); 10488 } else { 10489 this.onData( 10490 utils.shrinkBuf( 10491 strm.output, 10492 strm.next_out 10493 ) 10494 ); 10495 } 10496 } 10497 } 10498 if (strm.avail_in === 0 && strm.avail_out === 0) { 10499 allowBufError = true; 10500 } 10501 } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c2.Z_STREAM_END); 10502 if (status === c2.Z_STREAM_END) { 10503 _mode = c2.Z_FINISH; 10504 } 10505 if (_mode === c2.Z_FINISH) { 10506 status = zlib_inflate.inflateEnd(this.strm); 10507 this.onEnd(status); 10508 this.ended = true; 10509 return status === c2.Z_OK; 10510 } 10511 if (_mode === c2.Z_SYNC_FLUSH) { 10512 this.onEnd(c2.Z_OK); 10513 strm.avail_out = 0; 10514 return true; 10515 } 10516 return true; 10517 }; 10518 Inflate.prototype.onData = function(chunk) { 10519 this.chunks.push(chunk); 10520 }; 10521 Inflate.prototype.onEnd = function(status) { 10522 if (status === c2.Z_OK) { 10523 if (this.options.to === "string") { 10524 this.result = this.chunks.join(""); 10525 } else { 10526 this.result = utils.flattenChunks( 10527 this.chunks 10528 ); 10529 } 10530 } 10531 this.chunks = []; 10532 this.err = status; 10533 this.msg = this.strm.msg; 10534 }; 10535 function inflate(input, options) { 10536 var inflator = new Inflate(options); 10537 inflator.push(input, true); 10538 if (inflator.err) { 10539 throw inflator.msg || msg[inflator.err]; 10540 } 10541 return inflator.result; 10542 } 10543 function inflateRaw(input, options) { 10544 options = options || {}; 10545 options.raw = true; 10546 return inflate(input, options); 10547 } 10548 exports3.Inflate = Inflate; 10549 exports3.inflate = inflate; 10550 exports3.inflateRaw = inflateRaw; 10551 exports3.ungzip = inflate; 10552 }, 10553 { 10554 "./utils/common": 1, 10555 "./utils/strings": 2, 10556 "./zlib/constants": 4, 10557 "./zlib/gzheader": 6, 10558 "./zlib/inflate": 8, 10559 "./zlib/messages": 10, 10560 "./zlib/zstream": 11 10561 } 10562 ] 10563 }, 10564 {}, 10565 [] 10566 )("/lib/inflate.js"); 10567 }); 10568 } 10569 }); 10570 var inflate_default = require_inflate(); 10571 10572 // packages/global-styles-ui/build-module/font-library/lib/lib-font.browser.js 10573 var fetchFunction = globalThis.fetch; 10574 var Event2 = class { 10575 constructor(type, detail = {}, msg) { 10576 this.type = type; 10577 this.detail = detail; 10578 this.msg = msg; 10579 Object.defineProperty(this, `__mayPropagate`, { 10580 enumerable: false, 10581 writable: true 10582 }); 10583 this.__mayPropagate = true; 10584 } 10585 preventDefault() { 10586 } 10587 stopPropagation() { 10588 this.__mayPropagate = false; 10589 } 10590 valueOf() { 10591 return this; 10592 } 10593 toString() { 10594 return this.msg ? `[$this.type} event]: $this.msg}` : `[$this.type} event]`; 10595 } 10596 }; 10597 var EventManager = class { 10598 constructor() { 10599 this.listeners = {}; 10600 } 10601 addEventListener(type, listener, useCapture) { 10602 let bin = this.listeners[type] || []; 10603 if (useCapture) bin.unshift(listener); 10604 else bin.push(listener); 10605 this.listeners[type] = bin; 10606 } 10607 removeEventListener(type, listener) { 10608 let bin = this.listeners[type] || []; 10609 let pos = bin.findIndex((e2) => e2 === listener); 10610 if (pos > -1) { 10611 bin.splice(pos, 1); 10612 this.listeners[type] = bin; 10613 } 10614 } 10615 dispatch(event) { 10616 let bin = this.listeners[event.type]; 10617 if (bin) { 10618 for (let l2 = 0, e2 = bin.length; l2 < e2; l2++) { 10619 if (!event.__mayPropagate) break; 10620 bin[l2](event); 10621 } 10622 } 10623 } 10624 }; 10625 var startDate = (/* @__PURE__ */ new Date(`1904-01-01T00:00:00+0000`)).getTime(); 10626 function asText(data) { 10627 return Array.from(data).map((v2) => String.fromCharCode(v2)).join(``); 10628 } 10629 var Parser = class { 10630 constructor(dict, dataview, name2) { 10631 this.name = (name2 || dict.tag || ``).trim(); 10632 this.length = dict.length; 10633 this.start = dict.offset; 10634 this.offset = 0; 10635 this.data = dataview; 10636 [ 10637 `getInt8`, 10638 `getUint8`, 10639 `getInt16`, 10640 `getUint16`, 10641 `getInt32`, 10642 `getUint32`, 10643 `getBigInt64`, 10644 `getBigUint64` 10645 ].forEach((name3) => { 10646 let fn = name3.replace(/get(Big)?/, "").toLowerCase(); 10647 let increment = parseInt(name3.replace(/[^\d]/g, "")) / 8; 10648 Object.defineProperty(this, fn, { 10649 get: () => this.getValue(name3, increment) 10650 }); 10651 }); 10652 } 10653 get currentPosition() { 10654 return this.start + this.offset; 10655 } 10656 set currentPosition(position) { 10657 this.start = position; 10658 this.offset = 0; 10659 } 10660 skip(n2 = 0, bits = 8) { 10661 this.offset += n2 * bits / 8; 10662 } 10663 getValue(type, increment) { 10664 let pos = this.start + this.offset; 10665 this.offset += increment; 10666 try { 10667 return this.data[type](pos); 10668 } catch (e2) { 10669 console.error(`parser`, type, increment, this); 10670 console.error(`parser`, this.start, this.offset); 10671 throw e2; 10672 } 10673 } 10674 flags(n2) { 10675 if (n2 === 8 || n2 === 16 || n2 === 32 || n2 === 64) { 10676 return this[`uint$n2}`].toString(2).padStart(n2, 0).split(``).map((v2) => v2 === "1"); 10677 } 10678 console.error( 10679 `Error parsing flags: flag types can only be 1, 2, 4, or 8 bytes long` 10680 ); 10681 console.trace(); 10682 } 10683 get tag() { 10684 const t3 = this.uint32; 10685 return asText([ 10686 t3 >> 24 & 255, 10687 t3 >> 16 & 255, 10688 t3 >> 8 & 255, 10689 t3 & 255 10690 ]); 10691 } 10692 get fixed() { 10693 let major = this.int16; 10694 let minor = Math.round(1e3 * this.uint16 / 65356); 10695 return major + minor / 1e3; 10696 } 10697 get legacyFixed() { 10698 let major = this.uint16; 10699 let minor = this.uint16.toString(16).padStart(4, 0); 10700 return parseFloat(`$major}.$minor}`); 10701 } 10702 get uint24() { 10703 return (this.uint8 << 16) + (this.uint8 << 8) + this.uint8; 10704 } 10705 get uint128() { 10706 let value = 0; 10707 for (let i2 = 0; i2 < 5; i2++) { 10708 let byte = this.uint8; 10709 value = value * 128 + (byte & 127); 10710 if (byte < 128) break; 10711 } 10712 return value; 10713 } 10714 get longdatetime() { 10715 return new Date(startDate + 1e3 * parseInt(this.int64.toString())); 10716 } 10717 get fword() { 10718 return this.int16; 10719 } 10720 get ufword() { 10721 return this.uint16; 10722 } 10723 get Offset16() { 10724 return this.uint16; 10725 } 10726 get Offset32() { 10727 return this.uint32; 10728 } 10729 get F2DOT14() { 10730 const bits = p.uint16; 10731 const integer = [0, 1, -2, -1][bits >> 14]; 10732 const fraction = bits & 16383; 10733 return integer + fraction / 16384; 10734 } 10735 verifyLength() { 10736 if (this.offset != this.length) { 10737 console.error( 10738 `unexpected parsed table size ($this.offset}) for "$this.name}" (expected $this.length})` 10739 ); 10740 } 10741 } 10742 readBytes(n2 = 0, position = 0, bits = 8, signed = false) { 10743 n2 = n2 || this.length; 10744 if (n2 === 0) return []; 10745 if (position) this.currentPosition = position; 10746 const fn = `$signed ? `` : `u`}int$bits}`, slice = []; 10747 while (n2--) slice.push(this[fn]); 10748 return slice; 10749 } 10750 }; 10751 var ParsedData = class { 10752 constructor(parser) { 10753 const pGetter = { enumerable: false, get: () => parser }; 10754 Object.defineProperty(this, `parser`, pGetter); 10755 const start = parser.currentPosition; 10756 const startGetter = { enumerable: false, get: () => start }; 10757 Object.defineProperty(this, `start`, startGetter); 10758 } 10759 load(struct) { 10760 Object.keys(struct).forEach((p22) => { 10761 let props = Object.getOwnPropertyDescriptor(struct, p22); 10762 if (props.get) { 10763 this[p22] = props.get.bind(this); 10764 } else if (props.value !== void 0) { 10765 this[p22] = props.value; 10766 } 10767 }); 10768 if (this.parser.length) { 10769 this.parser.verifyLength(); 10770 } 10771 } 10772 }; 10773 var SimpleTable = class extends ParsedData { 10774 constructor(dict, dataview, name2) { 10775 const { parser, start } = super( 10776 new Parser(dict, dataview, name2) 10777 ); 10778 const pGetter = { enumerable: false, get: () => parser }; 10779 Object.defineProperty(this, `p`, pGetter); 10780 const startGetter = { enumerable: false, get: () => start }; 10781 Object.defineProperty(this, `tableStart`, startGetter); 10782 } 10783 }; 10784 function lazy$1(object, property, getter) { 10785 let val; 10786 Object.defineProperty(object, property, { 10787 get: () => { 10788 if (val) return val; 10789 val = getter(); 10790 return val; 10791 }, 10792 enumerable: true 10793 }); 10794 } 10795 var SFNT = class extends SimpleTable { 10796 constructor(font2, dataview, createTable2) { 10797 const { p: p22 } = super({ offset: 0, length: 12 }, dataview, `sfnt`); 10798 this.version = p22.uint32; 10799 this.numTables = p22.uint16; 10800 this.searchRange = p22.uint16; 10801 this.entrySelector = p22.uint16; 10802 this.rangeShift = p22.uint16; 10803 p22.verifyLength(); 10804 this.directory = [...new Array(this.numTables)].map( 10805 (_) => new TableRecord(p22) 10806 ); 10807 this.tables = {}; 10808 this.directory.forEach((entry) => { 10809 const getter = () => createTable2( 10810 this.tables, 10811 { 10812 tag: entry.tag, 10813 offset: entry.offset, 10814 length: entry.length 10815 }, 10816 dataview 10817 ); 10818 lazy$1(this.tables, entry.tag.trim(), getter); 10819 }); 10820 } 10821 }; 10822 var TableRecord = class { 10823 constructor(p22) { 10824 this.tag = p22.tag; 10825 this.checksum = p22.uint32; 10826 this.offset = p22.uint32; 10827 this.length = p22.uint32; 10828 } 10829 }; 10830 var gzipDecode = inflate_default.inflate || void 0; 10831 var nativeGzipDecode = void 0; 10832 var WOFF$1 = class extends SimpleTable { 10833 constructor(font2, dataview, createTable2) { 10834 const { p: p22 } = super({ offset: 0, length: 44 }, dataview, `woff`); 10835 this.signature = p22.tag; 10836 this.flavor = p22.uint32; 10837 this.length = p22.uint32; 10838 this.numTables = p22.uint16; 10839 p22.uint16; 10840 this.totalSfntSize = p22.uint32; 10841 this.majorVersion = p22.uint16; 10842 this.minorVersion = p22.uint16; 10843 this.metaOffset = p22.uint32; 10844 this.metaLength = p22.uint32; 10845 this.metaOrigLength = p22.uint32; 10846 this.privOffset = p22.uint32; 10847 this.privLength = p22.uint32; 10848 p22.verifyLength(); 10849 this.directory = [...new Array(this.numTables)].map( 10850 (_) => new WoffTableDirectoryEntry(p22) 10851 ); 10852 buildWoffLazyLookups(this, dataview, createTable2); 10853 } 10854 }; 10855 var WoffTableDirectoryEntry = class { 10856 constructor(p22) { 10857 this.tag = p22.tag; 10858 this.offset = p22.uint32; 10859 this.compLength = p22.uint32; 10860 this.origLength = p22.uint32; 10861 this.origChecksum = p22.uint32; 10862 } 10863 }; 10864 function buildWoffLazyLookups(woff, dataview, createTable2) { 10865 woff.tables = {}; 10866 woff.directory.forEach((entry) => { 10867 lazy$1(woff.tables, entry.tag.trim(), () => { 10868 let offset = 0; 10869 let view = dataview; 10870 if (entry.compLength !== entry.origLength) { 10871 const data = dataview.buffer.slice( 10872 entry.offset, 10873 entry.offset + entry.compLength 10874 ); 10875 let unpacked; 10876 if (gzipDecode) { 10877 unpacked = gzipDecode(new Uint8Array(data)); 10878 } else if (nativeGzipDecode) { 10879 unpacked = nativeGzipDecode(new Uint8Array(data)); 10880 } else { 10881 const msg = `no brotli decoder available to decode WOFF2 font`; 10882 if (font.onerror) font.onerror(msg); 10883 throw new Error(msg); 10884 } 10885 view = new DataView(unpacked.buffer); 10886 } else { 10887 offset = entry.offset; 10888 } 10889 return createTable2( 10890 woff.tables, 10891 { tag: entry.tag, offset, length: entry.origLength }, 10892 view 10893 ); 10894 }); 10895 }); 10896 } 10897 var brotliDecode = unbrotli_default; 10898 var nativeBrotliDecode = void 0; 10899 var WOFF2$1 = class extends SimpleTable { 10900 constructor(font2, dataview, createTable2) { 10901 const { p: p22 } = super({ offset: 0, length: 48 }, dataview, `woff2`); 10902 this.signature = p22.tag; 10903 this.flavor = p22.uint32; 10904 this.length = p22.uint32; 10905 this.numTables = p22.uint16; 10906 p22.uint16; 10907 this.totalSfntSize = p22.uint32; 10908 this.totalCompressedSize = p22.uint32; 10909 this.majorVersion = p22.uint16; 10910 this.minorVersion = p22.uint16; 10911 this.metaOffset = p22.uint32; 10912 this.metaLength = p22.uint32; 10913 this.metaOrigLength = p22.uint32; 10914 this.privOffset = p22.uint32; 10915 this.privLength = p22.uint32; 10916 p22.verifyLength(); 10917 this.directory = [...new Array(this.numTables)].map( 10918 (_) => new Woff2TableDirectoryEntry(p22) 10919 ); 10920 let dictOffset = p22.currentPosition; 10921 this.directory[0].offset = 0; 10922 this.directory.forEach((e2, i2) => { 10923 let next = this.directory[i2 + 1]; 10924 if (next) { 10925 next.offset = e2.offset + (e2.transformLength !== void 0 ? e2.transformLength : e2.origLength); 10926 } 10927 }); 10928 let decoded; 10929 let buffer = dataview.buffer.slice(dictOffset); 10930 if (brotliDecode) { 10931 decoded = brotliDecode(new Uint8Array(buffer)); 10932 } else if (nativeBrotliDecode) { 10933 decoded = new Uint8Array(nativeBrotliDecode(buffer)); 10934 } else { 10935 const msg = `no brotli decoder available to decode WOFF2 font`; 10936 if (font2.onerror) font2.onerror(msg); 10937 throw new Error(msg); 10938 } 10939 buildWoff2LazyLookups(this, decoded, createTable2); 10940 } 10941 }; 10942 var Woff2TableDirectoryEntry = class { 10943 constructor(p22) { 10944 this.flags = p22.uint8; 10945 const tagNumber = this.tagNumber = this.flags & 63; 10946 if (tagNumber === 63) { 10947 this.tag = p22.tag; 10948 } else { 10949 this.tag = getWOFF2Tag(tagNumber); 10950 } 10951 const transformVersion = this.transformVersion = (this.flags & 192) >> 6; 10952 let hasTransforms = transformVersion !== 0; 10953 if (this.tag === `glyf` || this.tag === `loca`) { 10954 hasTransforms = this.transformVersion !== 3; 10955 } 10956 this.origLength = p22.uint128; 10957 if (hasTransforms) { 10958 this.transformLength = p22.uint128; 10959 } 10960 } 10961 }; 10962 function buildWoff2LazyLookups(woff2, decoded, createTable2) { 10963 woff2.tables = {}; 10964 woff2.directory.forEach((entry) => { 10965 lazy$1(woff2.tables, entry.tag.trim(), () => { 10966 const start = entry.offset; 10967 const end = start + (entry.transformLength ? entry.transformLength : entry.origLength); 10968 const data = new DataView(decoded.slice(start, end).buffer); 10969 try { 10970 return createTable2( 10971 woff2.tables, 10972 { tag: entry.tag, offset: 0, length: entry.origLength }, 10973 data 10974 ); 10975 } catch (e2) { 10976 console.error(e2); 10977 } 10978 }); 10979 }); 10980 } 10981 function getWOFF2Tag(flag) { 10982 return [ 10983 `cmap`, 10984 `head`, 10985 `hhea`, 10986 `hmtx`, 10987 `maxp`, 10988 `name`, 10989 `OS/2`, 10990 `post`, 10991 `cvt `, 10992 `fpgm`, 10993 `glyf`, 10994 `loca`, 10995 `prep`, 10996 `CFF `, 10997 `VORG`, 10998 `EBDT`, 10999 `EBLC`, 11000 `gasp`, 11001 `hdmx`, 11002 `kern`, 11003 `LTSH`, 11004 `PCLT`, 11005 `VDMX`, 11006 `vhea`, 11007 `vmtx`, 11008 `BASE`, 11009 `GDEF`, 11010 `GPOS`, 11011 `GSUB`, 11012 `EBSC`, 11013 `JSTF`, 11014 `MATH`, 11015 `CBDT`, 11016 `CBLC`, 11017 `COLR`, 11018 `CPAL`, 11019 `SVG `, 11020 `sbix`, 11021 `acnt`, 11022 `avar`, 11023 `bdat`, 11024 `bloc`, 11025 `bsln`, 11026 `cvar`, 11027 `fdsc`, 11028 `feat`, 11029 `fmtx`, 11030 `fvar`, 11031 `gvar`, 11032 `hsty`, 11033 `just`, 11034 `lcar`, 11035 `mort`, 11036 `morx`, 11037 `opbd`, 11038 `prop`, 11039 `trak`, 11040 `Zapf`, 11041 `Silf`, 11042 `Glat`, 11043 `Gloc`, 11044 `Feat`, 11045 `Sill` 11046 ][flag & 63]; 11047 } 11048 var tableClasses = {}; 11049 var tableClassesLoaded = false; 11050 Promise.all([ 11051 Promise.resolve().then(function() { 11052 return cmap$1; 11053 }), 11054 Promise.resolve().then(function() { 11055 return head$1; 11056 }), 11057 Promise.resolve().then(function() { 11058 return hhea$1; 11059 }), 11060 Promise.resolve().then(function() { 11061 return hmtx$1; 11062 }), 11063 Promise.resolve().then(function() { 11064 return maxp$1; 11065 }), 11066 Promise.resolve().then(function() { 11067 return name$1; 11068 }), 11069 Promise.resolve().then(function() { 11070 return OS2$1; 11071 }), 11072 Promise.resolve().then(function() { 11073 return post$1; 11074 }), 11075 Promise.resolve().then(function() { 11076 return BASE$1; 11077 }), 11078 Promise.resolve().then(function() { 11079 return GDEF$1; 11080 }), 11081 Promise.resolve().then(function() { 11082 return GSUB$1; 11083 }), 11084 Promise.resolve().then(function() { 11085 return GPOS$1; 11086 }), 11087 Promise.resolve().then(function() { 11088 return SVG$1; 11089 }), 11090 Promise.resolve().then(function() { 11091 return fvar$1; 11092 }), 11093 Promise.resolve().then(function() { 11094 return cvt$1; 11095 }), 11096 Promise.resolve().then(function() { 11097 return fpgm$1; 11098 }), 11099 Promise.resolve().then(function() { 11100 return gasp$1; 11101 }), 11102 Promise.resolve().then(function() { 11103 return glyf$1; 11104 }), 11105 Promise.resolve().then(function() { 11106 return loca$1; 11107 }), 11108 Promise.resolve().then(function() { 11109 return prep$1; 11110 }), 11111 Promise.resolve().then(function() { 11112 return CFF$1; 11113 }), 11114 Promise.resolve().then(function() { 11115 return CFF2$1; 11116 }), 11117 Promise.resolve().then(function() { 11118 return VORG$1; 11119 }), 11120 Promise.resolve().then(function() { 11121 return EBLC$1; 11122 }), 11123 Promise.resolve().then(function() { 11124 return EBDT$1; 11125 }), 11126 Promise.resolve().then(function() { 11127 return EBSC$1; 11128 }), 11129 Promise.resolve().then(function() { 11130 return CBLC$1; 11131 }), 11132 Promise.resolve().then(function() { 11133 return CBDT$1; 11134 }), 11135 Promise.resolve().then(function() { 11136 return sbix$1; 11137 }), 11138 Promise.resolve().then(function() { 11139 return COLR$1; 11140 }), 11141 Promise.resolve().then(function() { 11142 return CPAL$1; 11143 }), 11144 Promise.resolve().then(function() { 11145 return DSIG$1; 11146 }), 11147 Promise.resolve().then(function() { 11148 return hdmx$1; 11149 }), 11150 Promise.resolve().then(function() { 11151 return kern$1; 11152 }), 11153 Promise.resolve().then(function() { 11154 return LTSH$1; 11155 }), 11156 Promise.resolve().then(function() { 11157 return MERG$1; 11158 }), 11159 Promise.resolve().then(function() { 11160 return meta$1; 11161 }), 11162 Promise.resolve().then(function() { 11163 return PCLT$1; 11164 }), 11165 Promise.resolve().then(function() { 11166 return VDMX$1; 11167 }), 11168 Promise.resolve().then(function() { 11169 return vhea$1; 11170 }), 11171 Promise.resolve().then(function() { 11172 return vmtx$1; 11173 }) 11174 ]).then((data) => { 11175 data.forEach((e2) => { 11176 let name2 = Object.keys(e2)[0]; 11177 tableClasses[name2] = e2[name2]; 11178 }); 11179 tableClassesLoaded = true; 11180 }); 11181 function createTable(tables, dict, dataview) { 11182 let name2 = dict.tag.replace(/[^\w\d]/g, ``); 11183 let Type = tableClasses[name2]; 11184 if (Type) return new Type(dict, dataview, tables); 11185 console.warn( 11186 `lib-font has no definition for $name2}. The table was skipped.` 11187 ); 11188 return {}; 11189 } 11190 function loadTableClasses() { 11191 let count = 0; 11192 function checkLoaded(resolve, reject) { 11193 if (!tableClassesLoaded) { 11194 if (count > 10) { 11195 return reject(new Error(`loading took too long`)); 11196 } 11197 count++; 11198 return setTimeout(() => checkLoaded(resolve), 250); 11199 } 11200 resolve(createTable); 11201 } 11202 return new Promise((resolve, reject) => checkLoaded(resolve)); 11203 } 11204 function getFontCSSFormat(path, errorOnStyle) { 11205 let pos = path.lastIndexOf(`.`); 11206 let ext = (path.substring(pos + 1) || ``).toLowerCase(); 11207 let format = { 11208 ttf: `truetype`, 11209 otf: `opentype`, 11210 woff: `woff`, 11211 woff2: `woff2` 11212 }[ext]; 11213 if (format) return format; 11214 let msg = { 11215 eot: `The .eot format is not supported: it died in January 12, 2016, when Microsoft retired all versions of IE that didn't already support WOFF.`, 11216 svg: `The .svg format is not supported: SVG fonts (not to be confused with OpenType with embedded SVG) were so bad we took the entire fonts chapter out of the SVG specification again.`, 11217 fon: `The .fon format is not supported: this is an ancient Windows bitmap font format.`, 11218 ttc: `Based on the current CSS specification, font collections are not (yet?) supported.` 11219 }[ext]; 11220 if (!msg) msg = `$path} is not a known webfont format.`; 11221 if (errorOnStyle) { 11222 throw new Error(msg); 11223 } else { 11224 console.warn(`Could not load font: $msg}`); 11225 } 11226 } 11227 async function setupFontFace(name2, url, options = {}) { 11228 if (!globalThis.document) return; 11229 let format = getFontCSSFormat(url, options.errorOnStyle); 11230 if (!format) return; 11231 let style = document.createElement(`style`); 11232 style.className = `injected-by-Font-js`; 11233 let rules = []; 11234 if (options.styleRules) { 11235 rules = Object.entries(options.styleRules).map( 11236 ([key, value]) => `$key}: $value};` 11237 ); 11238 } 11239 style.textContent = ` 11240 @font-face { 11241 font-family: "$name2}"; 11242 $rules.join( 11243 ` 11244 ` 11245 )} 11246 src: url("$url}") format("$format}"); 11247 }`; 11248 globalThis.document.head.appendChild(style); 11249 return style; 11250 } 11251 var TTF = [0, 1, 0, 0]; 11252 var OTF = [79, 84, 84, 79]; 11253 var WOFF = [119, 79, 70, 70]; 11254 var WOFF2 = [119, 79, 70, 50]; 11255 function match(ar1, ar2) { 11256 if (ar1.length !== ar2.length) return; 11257 for (let i2 = 0; i2 < ar1.length; i2++) { 11258 if (ar1[i2] !== ar2[i2]) return; 11259 } 11260 return true; 11261 } 11262 function validFontFormat(dataview) { 11263 const LEAD_BYTES = [ 11264 dataview.getUint8(0), 11265 dataview.getUint8(1), 11266 dataview.getUint8(2), 11267 dataview.getUint8(3) 11268 ]; 11269 if (match(LEAD_BYTES, TTF) || match(LEAD_BYTES, OTF)) return `SFNT`; 11270 if (match(LEAD_BYTES, WOFF)) return `WOFF`; 11271 if (match(LEAD_BYTES, WOFF2)) return `WOFF2`; 11272 } 11273 function checkFetchResponseStatus(response) { 11274 if (!response.ok) { 11275 throw new Error( 11276 `HTTP $response.status} - $response.statusText}` 11277 ); 11278 } 11279 return response; 11280 } 11281 var Font = class extends EventManager { 11282 constructor(name2, options = {}) { 11283 super(); 11284 this.name = name2; 11285 this.options = options; 11286 this.metrics = false; 11287 } 11288 get src() { 11289 return this.__src; 11290 } 11291 set src(src) { 11292 this.__src = src; 11293 (async () => { 11294 if (globalThis.document && !this.options.skipStyleSheet) { 11295 await setupFontFace(this.name, src, this.options); 11296 } 11297 this.loadFont(src); 11298 })(); 11299 } 11300 async loadFont(url, filename) { 11301 fetch(url).then( 11302 (response) => checkFetchResponseStatus(response) && response.arrayBuffer() 11303 ).then( 11304 (buffer) => this.fromDataBuffer(buffer, filename || url) 11305 ).catch((err) => { 11306 const evt = new Event2( 11307 `error`, 11308 err, 11309 `Failed to load font at $filename || url}` 11310 ); 11311 this.dispatch(evt); 11312 if (this.onerror) this.onerror(evt); 11313 }); 11314 } 11315 async fromDataBuffer(buffer, filenameOrUrL) { 11316 this.fontData = new DataView(buffer); 11317 let type = validFontFormat(this.fontData); 11318 if (!type) { 11319 throw new Error( 11320 `$filenameOrUrL} is either an unsupported font format, or not a font at all.` 11321 ); 11322 } 11323 await this.parseBasicData(type); 11324 const evt = new Event2("load", { font: this }); 11325 this.dispatch(evt); 11326 if (this.onload) this.onload(evt); 11327 } 11328 async parseBasicData(type) { 11329 return loadTableClasses().then((createTable2) => { 11330 if (type === `SFNT`) { 11331 this.opentype = new SFNT(this, this.fontData, createTable2); 11332 } 11333 if (type === `WOFF`) { 11334 this.opentype = new WOFF$1(this, this.fontData, createTable2); 11335 } 11336 if (type === `WOFF2`) { 11337 this.opentype = new WOFF2$1(this, this.fontData, createTable2); 11338 } 11339 return this.opentype; 11340 }); 11341 } 11342 getGlyphId(char) { 11343 return this.opentype.tables.cmap.getGlyphId(char); 11344 } 11345 reverse(glyphid) { 11346 return this.opentype.tables.cmap.reverse(glyphid); 11347 } 11348 supports(char) { 11349 return this.getGlyphId(char) !== 0; 11350 } 11351 supportsVariation(variation) { 11352 return this.opentype.tables.cmap.supportsVariation(variation) !== false; 11353 } 11354 measureText(text, size = 16) { 11355 if (this.__unloaded) 11356 throw new Error( 11357 "Cannot measure text: font was unloaded. Please reload before calling measureText()" 11358 ); 11359 let d2 = document.createElement("div"); 11360 d2.textContent = text; 11361 d2.style.fontFamily = this.name; 11362 d2.style.fontSize = `$size}px`; 11363 d2.style.color = `transparent`; 11364 d2.style.background = `transparent`; 11365 d2.style.top = `0`; 11366 d2.style.left = `0`; 11367 d2.style.position = `absolute`; 11368 document.body.appendChild(d2); 11369 let bbox = d2.getBoundingClientRect(); 11370 document.body.removeChild(d2); 11371 const OS22 = this.opentype.tables["OS/2"]; 11372 bbox.fontSize = size; 11373 bbox.ascender = OS22.sTypoAscender; 11374 bbox.descender = OS22.sTypoDescender; 11375 return bbox; 11376 } 11377 unload() { 11378 if (this.styleElement.parentNode) { 11379 this.styleElement.parentNode.removeElement(this.styleElement); 11380 const evt = new Event2("unload", { font: this }); 11381 this.dispatch(evt); 11382 if (this.onunload) this.onunload(evt); 11383 } 11384 this._unloaded = true; 11385 } 11386 load() { 11387 if (this.__unloaded) { 11388 delete this.__unloaded; 11389 document.head.appendChild(this.styleElement); 11390 const evt = new Event2("load", { font: this }); 11391 this.dispatch(evt); 11392 if (this.onload) this.onload(evt); 11393 } 11394 } 11395 }; 11396 globalThis.Font = Font; 11397 var Subtable = class extends ParsedData { 11398 constructor(p22, plaformID, encodingID) { 11399 super(p22); 11400 this.plaformID = plaformID; 11401 this.encodingID = encodingID; 11402 } 11403 }; 11404 var Format0 = class extends Subtable { 11405 constructor(p22, platformID, encodingID) { 11406 super(p22, platformID, encodingID); 11407 this.format = 0; 11408 this.length = p22.uint16; 11409 this.language = p22.uint16; 11410 this.glyphIdArray = [...new Array(256)].map((_) => p22.uint8); 11411 } 11412 supports(charCode) { 11413 if (charCode.charCodeAt) { 11414 charCode = -1; 11415 console.warn( 11416 `supports(character) not implemented for cmap subtable format 0. only supports(id) is implemented.` 11417 ); 11418 } 11419 return 0 <= charCode && charCode <= 255; 11420 } 11421 reverse(glyphID) { 11422 console.warn(`reverse not implemented for cmap subtable format 0`); 11423 return {}; 11424 } 11425 getSupportedCharCodes() { 11426 return [{ start: 1, end: 256 }]; 11427 } 11428 }; 11429 var Format2 = class extends Subtable { 11430 constructor(p22, platformID, encodingID) { 11431 super(p22, platformID, encodingID); 11432 this.format = 2; 11433 this.length = p22.uint16; 11434 this.language = p22.uint16; 11435 this.subHeaderKeys = [...new Array(256)].map((_) => p22.uint16); 11436 const subHeaderCount = Math.max(...this.subHeaderKeys); 11437 const subHeaderOffset = p22.currentPosition; 11438 lazy$1(this, `subHeaders`, () => { 11439 p22.currentPosition = subHeaderOffset; 11440 return [...new Array(subHeaderCount)].map( 11441 (_) => new SubHeader(p22) 11442 ); 11443 }); 11444 const glyphIndexOffset = subHeaderOffset + subHeaderCount * 8; 11445 lazy$1(this, `glyphIndexArray`, () => { 11446 p22.currentPosition = glyphIndexOffset; 11447 return [...new Array(subHeaderCount)].map((_) => p22.uint16); 11448 }); 11449 } 11450 supports(charCode) { 11451 if (charCode.charCodeAt) { 11452 charCode = -1; 11453 console.warn( 11454 `supports(character) not implemented for cmap subtable format 2. only supports(id) is implemented.` 11455 ); 11456 } 11457 const low = charCode && 255; 11458 const high = charCode && 65280; 11459 const subHeaderKey = this.subHeaders[high]; 11460 const subheader = this.subHeaders[subHeaderKey]; 11461 const first = subheader.firstCode; 11462 const last = first + subheader.entryCount; 11463 return first <= low && low <= last; 11464 } 11465 reverse(glyphID) { 11466 console.warn(`reverse not implemented for cmap subtable format 2`); 11467 return {}; 11468 } 11469 getSupportedCharCodes(preservePropNames = false) { 11470 if (preservePropNames) { 11471 return this.subHeaders.map((h2) => ({ 11472 firstCode: h2.firstCode, 11473 lastCode: h2.lastCode 11474 })); 11475 } 11476 return this.subHeaders.map((h2) => ({ 11477 start: h2.firstCode, 11478 end: h2.lastCode 11479 })); 11480 } 11481 }; 11482 var SubHeader = class { 11483 constructor(p22) { 11484 this.firstCode = p22.uint16; 11485 this.entryCount = p22.uint16; 11486 this.lastCode = this.first + this.entryCount; 11487 this.idDelta = p22.int16; 11488 this.idRangeOffset = p22.uint16; 11489 } 11490 }; 11491 var Format4 = class extends Subtable { 11492 constructor(p22, platformID, encodingID) { 11493 super(p22, platformID, encodingID); 11494 this.format = 4; 11495 this.length = p22.uint16; 11496 this.language = p22.uint16; 11497 this.segCountX2 = p22.uint16; 11498 this.segCount = this.segCountX2 / 2; 11499 this.searchRange = p22.uint16; 11500 this.entrySelector = p22.uint16; 11501 this.rangeShift = p22.uint16; 11502 const endCodePosition = p22.currentPosition; 11503 lazy$1( 11504 this, 11505 `endCode`, 11506 () => p22.readBytes(this.segCount, endCodePosition, 16) 11507 ); 11508 const startCodePosition = endCodePosition + 2 + this.segCountX2; 11509 lazy$1( 11510 this, 11511 `startCode`, 11512 () => p22.readBytes(this.segCount, startCodePosition, 16) 11513 ); 11514 const idDeltaPosition = startCodePosition + this.segCountX2; 11515 lazy$1( 11516 this, 11517 `idDelta`, 11518 () => p22.readBytes(this.segCount, idDeltaPosition, 16, true) 11519 ); 11520 const idRangePosition = idDeltaPosition + this.segCountX2; 11521 lazy$1( 11522 this, 11523 `idRangeOffset`, 11524 () => p22.readBytes(this.segCount, idRangePosition, 16) 11525 ); 11526 const glyphIdArrayPosition = idRangePosition + this.segCountX2; 11527 const glyphIdArrayLength = this.length - (glyphIdArrayPosition - this.tableStart); 11528 lazy$1( 11529 this, 11530 `glyphIdArray`, 11531 () => p22.readBytes(glyphIdArrayLength, glyphIdArrayPosition, 16) 11532 ); 11533 lazy$1( 11534 this, 11535 `segments`, 11536 () => this.buildSegments(idRangePosition, glyphIdArrayPosition, p22) 11537 ); 11538 } 11539 buildSegments(idRangePosition, glyphIdArrayPosition, p22) { 11540 const build = (_, i2) => { 11541 let startCode = this.startCode[i2], endCode = this.endCode[i2], idDelta = this.idDelta[i2], idRangeOffset = this.idRangeOffset[i2], idRangeOffsetPointer = idRangePosition + 2 * i2, glyphIDs = []; 11542 if (idRangeOffset === 0) { 11543 for (let i22 = startCode + idDelta, e2 = endCode + idDelta; i22 <= e2; i22++) { 11544 glyphIDs.push(i22); 11545 } 11546 } else { 11547 for (let i22 = 0, e2 = endCode - startCode; i22 <= e2; i22++) { 11548 p22.currentPosition = idRangeOffsetPointer + idRangeOffset + i22 * 2; 11549 glyphIDs.push(p22.uint16); 11550 } 11551 } 11552 return { 11553 startCode, 11554 endCode, 11555 idDelta, 11556 idRangeOffset, 11557 glyphIDs 11558 }; 11559 }; 11560 return [...new Array(this.segCount)].map(build); 11561 } 11562 reverse(glyphID) { 11563 let s2 = this.segments.find((v2) => v2.glyphIDs.includes(glyphID)); 11564 if (!s2) return {}; 11565 const code = s2.startCode + s2.glyphIDs.indexOf(glyphID); 11566 return { code, unicode: String.fromCodePoint(code) }; 11567 } 11568 getGlyphId(charCode) { 11569 if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); 11570 if (55296 <= charCode && charCode <= 57343) return 0; 11571 if ((charCode & 65534) === 65534 || (charCode & 65535) === 65535) 11572 return 0; 11573 let segment = this.segments.find( 11574 (s2) => s2.startCode <= charCode && charCode <= s2.endCode 11575 ); 11576 if (!segment) return 0; 11577 return segment.glyphIDs[charCode - segment.startCode]; 11578 } 11579 supports(charCode) { 11580 return this.getGlyphId(charCode) !== 0; 11581 } 11582 getSupportedCharCodes(preservePropNames = false) { 11583 if (preservePropNames) return this.segments; 11584 return this.segments.map((v2) => ({ 11585 start: v2.startCode, 11586 end: v2.endCode 11587 })); 11588 } 11589 }; 11590 var Format6 = class extends Subtable { 11591 constructor(p22, platformID, encodingID) { 11592 super(p22, platformID, encodingID); 11593 this.format = 6; 11594 this.length = p22.uint16; 11595 this.language = p22.uint16; 11596 this.firstCode = p22.uint16; 11597 this.entryCount = p22.uint16; 11598 this.lastCode = this.firstCode + this.entryCount - 1; 11599 const getter = () => [...new Array(this.entryCount)].map((_) => p22.uint16); 11600 lazy$1(this, `glyphIdArray`, getter); 11601 } 11602 supports(charCode) { 11603 if (charCode.charCodeAt) { 11604 charCode = -1; 11605 console.warn( 11606 `supports(character) not implemented for cmap subtable format 6. only supports(id) is implemented.` 11607 ); 11608 } 11609 if (charCode < this.firstCode) return {}; 11610 if (charCode > this.firstCode + this.entryCount) return {}; 11611 const code = charCode - this.firstCode; 11612 return { code, unicode: String.fromCodePoint(code) }; 11613 } 11614 reverse(glyphID) { 11615 let pos = this.glyphIdArray.indexOf(glyphID); 11616 if (pos > -1) return this.firstCode + pos; 11617 } 11618 getSupportedCharCodes(preservePropNames = false) { 11619 if (preservePropNames) { 11620 return [{ firstCode: this.firstCode, lastCode: this.lastCode }]; 11621 } 11622 return [{ start: this.firstCode, end: this.lastCode }]; 11623 } 11624 }; 11625 var Format8 = class extends Subtable { 11626 constructor(p22, platformID, encodingID) { 11627 super(p22, platformID, encodingID); 11628 this.format = 8; 11629 p22.uint16; 11630 this.length = p22.uint32; 11631 this.language = p22.uint32; 11632 this.is32 = [...new Array(8192)].map((_) => p22.uint8); 11633 this.numGroups = p22.uint32; 11634 const getter = () => [...new Array(this.numGroups)].map( 11635 (_) => new SequentialMapGroup$1(p22) 11636 ); 11637 lazy$1(this, `groups`, getter); 11638 } 11639 supports(charCode) { 11640 if (charCode.charCodeAt) { 11641 charCode = -1; 11642 console.warn( 11643 `supports(character) not implemented for cmap subtable format 8. only supports(id) is implemented.` 11644 ); 11645 } 11646 return this.groups.findIndex( 11647 (s2) => s2.startcharCode <= charCode && charCode <= s2.endcharCode 11648 ) !== -1; 11649 } 11650 reverse(glyphID) { 11651 console.warn(`reverse not implemented for cmap subtable format 8`); 11652 return {}; 11653 } 11654 getSupportedCharCodes(preservePropNames = false) { 11655 if (preservePropNames) return this.groups; 11656 return this.groups.map((v2) => ({ 11657 start: v2.startcharCode, 11658 end: v2.endcharCode 11659 })); 11660 } 11661 }; 11662 var SequentialMapGroup$1 = class { 11663 constructor(p22) { 11664 this.startcharCode = p22.uint32; 11665 this.endcharCode = p22.uint32; 11666 this.startGlyphID = p22.uint32; 11667 } 11668 }; 11669 var Format10 = class extends Subtable { 11670 constructor(p22, platformID, encodingID) { 11671 super(p22, platformID, encodingID); 11672 this.format = 10; 11673 p22.uint16; 11674 this.length = p22.uint32; 11675 this.language = p22.uint32; 11676 this.startCharCode = p22.uint32; 11677 this.numChars = p22.uint32; 11678 this.endCharCode = this.startCharCode + this.numChars; 11679 const getter = () => [...new Array(this.numChars)].map((_) => p22.uint16); 11680 lazy$1(this, `glyphs`, getter); 11681 } 11682 supports(charCode) { 11683 if (charCode.charCodeAt) { 11684 charCode = -1; 11685 console.warn( 11686 `supports(character) not implemented for cmap subtable format 10. only supports(id) is implemented.` 11687 ); 11688 } 11689 if (charCode < this.startCharCode) return false; 11690 if (charCode > this.startCharCode + this.numChars) return false; 11691 return charCode - this.startCharCode; 11692 } 11693 reverse(glyphID) { 11694 console.warn(`reverse not implemented for cmap subtable format 10`); 11695 return {}; 11696 } 11697 getSupportedCharCodes(preservePropNames = false) { 11698 if (preservePropNames) { 11699 return [ 11700 { 11701 startCharCode: this.startCharCode, 11702 endCharCode: this.endCharCode 11703 } 11704 ]; 11705 } 11706 return [{ start: this.startCharCode, end: this.endCharCode }]; 11707 } 11708 }; 11709 var Format12 = class extends Subtable { 11710 constructor(p22, platformID, encodingID) { 11711 super(p22, platformID, encodingID); 11712 this.format = 12; 11713 p22.uint16; 11714 this.length = p22.uint32; 11715 this.language = p22.uint32; 11716 this.numGroups = p22.uint32; 11717 const getter = () => [...new Array(this.numGroups)].map( 11718 (_) => new SequentialMapGroup(p22) 11719 ); 11720 lazy$1(this, `groups`, getter); 11721 } 11722 supports(charCode) { 11723 if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); 11724 if (55296 <= charCode && charCode <= 57343) return 0; 11725 if ((charCode & 65534) === 65534 || (charCode & 65535) === 65535) 11726 return 0; 11727 return this.groups.findIndex( 11728 (s2) => s2.startCharCode <= charCode && charCode <= s2.endCharCode 11729 ) !== -1; 11730 } 11731 reverse(glyphID) { 11732 for (let group of this.groups) { 11733 let start = group.startGlyphID; 11734 if (start > glyphID) continue; 11735 if (start === glyphID) return group.startCharCode; 11736 let end = start + (group.endCharCode - group.startCharCode); 11737 if (end < glyphID) continue; 11738 const code = group.startCharCode + (glyphID - start); 11739 return { code, unicode: String.fromCodePoint(code) }; 11740 } 11741 return {}; 11742 } 11743 getSupportedCharCodes(preservePropNames = false) { 11744 if (preservePropNames) return this.groups; 11745 return this.groups.map((v2) => ({ 11746 start: v2.startCharCode, 11747 end: v2.endCharCode 11748 })); 11749 } 11750 }; 11751 var SequentialMapGroup = class { 11752 constructor(p22) { 11753 this.startCharCode = p22.uint32; 11754 this.endCharCode = p22.uint32; 11755 this.startGlyphID = p22.uint32; 11756 } 11757 }; 11758 var Format13 = class extends Subtable { 11759 constructor(p22, platformID, encodingID) { 11760 super(p22, platformID, encodingID); 11761 this.format = 13; 11762 p22.uint16; 11763 this.length = p22.uint32; 11764 this.language = p22.uint32; 11765 this.numGroups = p22.uint32; 11766 const getter = [...new Array(this.numGroups)].map( 11767 (_) => new ConstantMapGroup(p22) 11768 ); 11769 lazy$1(this, `groups`, getter); 11770 } 11771 supports(charCode) { 11772 if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); 11773 return this.groups.findIndex( 11774 (s2) => s2.startCharCode <= charCode && charCode <= s2.endCharCode 11775 ) !== -1; 11776 } 11777 reverse(glyphID) { 11778 console.warn(`reverse not implemented for cmap subtable format 13`); 11779 return {}; 11780 } 11781 getSupportedCharCodes(preservePropNames = false) { 11782 if (preservePropNames) return this.groups; 11783 return this.groups.map((v2) => ({ 11784 start: v2.startCharCode, 11785 end: v2.endCharCode 11786 })); 11787 } 11788 }; 11789 var ConstantMapGroup = class { 11790 constructor(p22) { 11791 this.startCharCode = p22.uint32; 11792 this.endCharCode = p22.uint32; 11793 this.glyphID = p22.uint32; 11794 } 11795 }; 11796 var Format14 = class extends Subtable { 11797 constructor(p22, platformID, encodingID) { 11798 super(p22, platformID, encodingID); 11799 this.subTableStart = p22.currentPosition; 11800 this.format = 14; 11801 this.length = p22.uint32; 11802 this.numVarSelectorRecords = p22.uint32; 11803 lazy$1( 11804 this, 11805 `varSelectors`, 11806 () => [...new Array(this.numVarSelectorRecords)].map( 11807 (_) => new VariationSelector(p22) 11808 ) 11809 ); 11810 } 11811 supports() { 11812 console.warn(`supports not implemented for cmap subtable format 14`); 11813 return 0; 11814 } 11815 getSupportedCharCodes() { 11816 console.warn( 11817 `getSupportedCharCodes not implemented for cmap subtable format 14` 11818 ); 11819 return []; 11820 } 11821 reverse(glyphID) { 11822 console.warn(`reverse not implemented for cmap subtable format 14`); 11823 return {}; 11824 } 11825 supportsVariation(variation) { 11826 let v2 = this.varSelector.find( 11827 (uvs) => uvs.varSelector === variation 11828 ); 11829 return v2 ? v2 : false; 11830 } 11831 getSupportedVariations() { 11832 return this.varSelectors.map((v2) => v2.varSelector); 11833 } 11834 }; 11835 var VariationSelector = class { 11836 constructor(p22) { 11837 this.varSelector = p22.uint24; 11838 this.defaultUVSOffset = p22.Offset32; 11839 this.nonDefaultUVSOffset = p22.Offset32; 11840 } 11841 }; 11842 function createSubTable(parser, platformID, encodingID) { 11843 const format = parser.uint16; 11844 if (format === 0) return new Format0(parser, platformID, encodingID); 11845 if (format === 2) return new Format2(parser, platformID, encodingID); 11846 if (format === 4) return new Format4(parser, platformID, encodingID); 11847 if (format === 6) return new Format6(parser, platformID, encodingID); 11848 if (format === 8) return new Format8(parser, platformID, encodingID); 11849 if (format === 10) return new Format10(parser, platformID, encodingID); 11850 if (format === 12) return new Format12(parser, platformID, encodingID); 11851 if (format === 13) return new Format13(parser, platformID, encodingID); 11852 if (format === 14) return new Format14(parser, platformID, encodingID); 11853 return {}; 11854 } 11855 var cmap = class extends SimpleTable { 11856 constructor(dict, dataview) { 11857 const { p: p22 } = super(dict, dataview); 11858 this.version = p22.uint16; 11859 this.numTables = p22.uint16; 11860 this.encodingRecords = [...new Array(this.numTables)].map( 11861 (_) => new EncodingRecord(p22, this.tableStart) 11862 ); 11863 } 11864 getSubTable(tableID) { 11865 return this.encodingRecords[tableID].table; 11866 } 11867 getSupportedEncodings() { 11868 return this.encodingRecords.map((r3) => ({ 11869 platformID: r3.platformID, 11870 encodingId: r3.encodingID 11871 })); 11872 } 11873 getSupportedCharCodes(platformID, encodingID) { 11874 const recordID = this.encodingRecords.findIndex( 11875 (r3) => r3.platformID === platformID && r3.encodingID === encodingID 11876 ); 11877 if (recordID === -1) return false; 11878 const subtable = this.getSubTable(recordID); 11879 return subtable.getSupportedCharCodes(); 11880 } 11881 reverse(glyphid) { 11882 for (let i2 = 0; i2 < this.numTables; i2++) { 11883 let code = this.getSubTable(i2).reverse(glyphid); 11884 if (code) return code; 11885 } 11886 } 11887 getGlyphId(char) { 11888 let last = 0; 11889 this.encodingRecords.some((_, tableID) => { 11890 let t3 = this.getSubTable(tableID); 11891 if (!t3.getGlyphId) return false; 11892 last = t3.getGlyphId(char); 11893 return last !== 0; 11894 }); 11895 return last; 11896 } 11897 supports(char) { 11898 return this.encodingRecords.some((_, tableID) => { 11899 const t3 = this.getSubTable(tableID); 11900 return t3.supports && t3.supports(char) !== false; 11901 }); 11902 } 11903 supportsVariation(variation) { 11904 return this.encodingRecords.some((_, tableID) => { 11905 const t3 = this.getSubTable(tableID); 11906 return t3.supportsVariation && t3.supportsVariation(variation) !== false; 11907 }); 11908 } 11909 }; 11910 var EncodingRecord = class { 11911 constructor(p22, tableStart) { 11912 const platformID = this.platformID = p22.uint16; 11913 const encodingID = this.encodingID = p22.uint16; 11914 const offset = this.offset = p22.Offset32; 11915 lazy$1(this, `table`, () => { 11916 p22.currentPosition = tableStart + offset; 11917 return createSubTable(p22, platformID, encodingID); 11918 }); 11919 } 11920 }; 11921 var cmap$1 = Object.freeze({ __proto__: null, cmap }); 11922 var head = class extends SimpleTable { 11923 constructor(dict, dataview) { 11924 const { p: p22 } = super(dict, dataview); 11925 this.load({ 11926 majorVersion: p22.uint16, 11927 minorVersion: p22.uint16, 11928 fontRevision: p22.fixed, 11929 checkSumAdjustment: p22.uint32, 11930 magicNumber: p22.uint32, 11931 flags: p22.flags(16), 11932 unitsPerEm: p22.uint16, 11933 created: p22.longdatetime, 11934 modified: p22.longdatetime, 11935 xMin: p22.int16, 11936 yMin: p22.int16, 11937 xMax: p22.int16, 11938 yMax: p22.int16, 11939 macStyle: p22.flags(16), 11940 lowestRecPPEM: p22.uint16, 11941 fontDirectionHint: p22.uint16, 11942 indexToLocFormat: p22.uint16, 11943 glyphDataFormat: p22.uint16 11944 }); 11945 } 11946 }; 11947 var head$1 = Object.freeze({ __proto__: null, head }); 11948 var hhea = class extends SimpleTable { 11949 constructor(dict, dataview) { 11950 const { p: p22 } = super(dict, dataview); 11951 this.majorVersion = p22.uint16; 11952 this.minorVersion = p22.uint16; 11953 this.ascender = p22.fword; 11954 this.descender = p22.fword; 11955 this.lineGap = p22.fword; 11956 this.advanceWidthMax = p22.ufword; 11957 this.minLeftSideBearing = p22.fword; 11958 this.minRightSideBearing = p22.fword; 11959 this.xMaxExtent = p22.fword; 11960 this.caretSlopeRise = p22.int16; 11961 this.caretSlopeRun = p22.int16; 11962 this.caretOffset = p22.int16; 11963 p22.int16; 11964 p22.int16; 11965 p22.int16; 11966 p22.int16; 11967 this.metricDataFormat = p22.int16; 11968 this.numberOfHMetrics = p22.uint16; 11969 p22.verifyLength(); 11970 } 11971 }; 11972 var hhea$1 = Object.freeze({ __proto__: null, hhea }); 11973 var hmtx = class extends SimpleTable { 11974 constructor(dict, dataview, tables) { 11975 const { p: p22 } = super(dict, dataview); 11976 const numberOfHMetrics = tables.hhea.numberOfHMetrics; 11977 const numGlyphs = tables.maxp.numGlyphs; 11978 const metricsStart = p22.currentPosition; 11979 lazy$1(this, `hMetrics`, () => { 11980 p22.currentPosition = metricsStart; 11981 return [...new Array(numberOfHMetrics)].map( 11982 (_) => new LongHorMetric(p22.uint16, p22.int16) 11983 ); 11984 }); 11985 if (numberOfHMetrics < numGlyphs) { 11986 const lsbStart = metricsStart + numberOfHMetrics * 4; 11987 lazy$1(this, `leftSideBearings`, () => { 11988 p22.currentPosition = lsbStart; 11989 return [...new Array(numGlyphs - numberOfHMetrics)].map( 11990 (_) => p22.int16 11991 ); 11992 }); 11993 } 11994 } 11995 }; 11996 var LongHorMetric = class { 11997 constructor(w2, b2) { 11998 this.advanceWidth = w2; 11999 this.lsb = b2; 12000 } 12001 }; 12002 var hmtx$1 = Object.freeze({ __proto__: null, hmtx }); 12003 var maxp = class extends SimpleTable { 12004 constructor(dict, dataview) { 12005 const { p: p22 } = super(dict, dataview); 12006 this.version = p22.legacyFixed; 12007 this.numGlyphs = p22.uint16; 12008 if (this.version === 1) { 12009 this.maxPoints = p22.uint16; 12010 this.maxContours = p22.uint16; 12011 this.maxCompositePoints = p22.uint16; 12012 this.maxCompositeContours = p22.uint16; 12013 this.maxZones = p22.uint16; 12014 this.maxTwilightPoints = p22.uint16; 12015 this.maxStorage = p22.uint16; 12016 this.maxFunctionDefs = p22.uint16; 12017 this.maxInstructionDefs = p22.uint16; 12018 this.maxStackElements = p22.uint16; 12019 this.maxSizeOfInstructions = p22.uint16; 12020 this.maxComponentElements = p22.uint16; 12021 this.maxComponentDepth = p22.uint16; 12022 } 12023 p22.verifyLength(); 12024 } 12025 }; 12026 var maxp$1 = Object.freeze({ __proto__: null, maxp }); 12027 var name = class extends SimpleTable { 12028 constructor(dict, dataview) { 12029 const { p: p22 } = super(dict, dataview); 12030 this.format = p22.uint16; 12031 this.count = p22.uint16; 12032 this.stringOffset = p22.Offset16; 12033 this.nameRecords = [...new Array(this.count)].map( 12034 (_) => new NameRecord(p22, this) 12035 ); 12036 if (this.format === 1) { 12037 this.langTagCount = p22.uint16; 12038 this.langTagRecords = [...new Array(this.langTagCount)].map( 12039 (_) => new LangTagRecord(p22.uint16, p22.Offset16) 12040 ); 12041 } 12042 this.stringStart = this.tableStart + this.stringOffset; 12043 } 12044 get(nameID) { 12045 let record = this.nameRecords.find( 12046 (record2) => record2.nameID === nameID 12047 ); 12048 if (record) return record.string; 12049 } 12050 }; 12051 var LangTagRecord = class { 12052 constructor(length, offset) { 12053 this.length = length; 12054 this.offset = offset; 12055 } 12056 }; 12057 var NameRecord = class { 12058 constructor(p22, nameTable) { 12059 this.platformID = p22.uint16; 12060 this.encodingID = p22.uint16; 12061 this.languageID = p22.uint16; 12062 this.nameID = p22.uint16; 12063 this.length = p22.uint16; 12064 this.offset = p22.Offset16; 12065 lazy$1(this, `string`, () => { 12066 p22.currentPosition = nameTable.stringStart + this.offset; 12067 return decodeString(p22, this); 12068 }); 12069 } 12070 }; 12071 function decodeString(p22, record) { 12072 const { platformID, length } = record; 12073 if (length === 0) return ``; 12074 if (platformID === 0 || platformID === 3) { 12075 const str2 = []; 12076 for (let i2 = 0, e2 = length / 2; i2 < e2; i2++) 12077 str2[i2] = String.fromCharCode(p22.uint16); 12078 return str2.join(``); 12079 } 12080 const bytes = p22.readBytes(length); 12081 const str = []; 12082 bytes.forEach(function(b2, i2) { 12083 str[i2] = String.fromCharCode(b2); 12084 }); 12085 return str.join(``); 12086 } 12087 var name$1 = Object.freeze({ __proto__: null, name }); 12088 var OS2 = class extends SimpleTable { 12089 constructor(dict, dataview) { 12090 const { p: p22 } = super(dict, dataview); 12091 this.version = p22.uint16; 12092 this.xAvgCharWidth = p22.int16; 12093 this.usWeightClass = p22.uint16; 12094 this.usWidthClass = p22.uint16; 12095 this.fsType = p22.uint16; 12096 this.ySubscriptXSize = p22.int16; 12097 this.ySubscriptYSize = p22.int16; 12098 this.ySubscriptXOffset = p22.int16; 12099 this.ySubscriptYOffset = p22.int16; 12100 this.ySuperscriptXSize = p22.int16; 12101 this.ySuperscriptYSize = p22.int16; 12102 this.ySuperscriptXOffset = p22.int16; 12103 this.ySuperscriptYOffset = p22.int16; 12104 this.yStrikeoutSize = p22.int16; 12105 this.yStrikeoutPosition = p22.int16; 12106 this.sFamilyClass = p22.int16; 12107 this.panose = [...new Array(10)].map((_) => p22.uint8); 12108 this.ulUnicodeRange1 = p22.flags(32); 12109 this.ulUnicodeRange2 = p22.flags(32); 12110 this.ulUnicodeRange3 = p22.flags(32); 12111 this.ulUnicodeRange4 = p22.flags(32); 12112 this.achVendID = p22.tag; 12113 this.fsSelection = p22.uint16; 12114 this.usFirstCharIndex = p22.uint16; 12115 this.usLastCharIndex = p22.uint16; 12116 this.sTypoAscender = p22.int16; 12117 this.sTypoDescender = p22.int16; 12118 this.sTypoLineGap = p22.int16; 12119 this.usWinAscent = p22.uint16; 12120 this.usWinDescent = p22.uint16; 12121 if (this.version === 0) return p22.verifyLength(); 12122 this.ulCodePageRange1 = p22.flags(32); 12123 this.ulCodePageRange2 = p22.flags(32); 12124 if (this.version === 1) return p22.verifyLength(); 12125 this.sxHeight = p22.int16; 12126 this.sCapHeight = p22.int16; 12127 this.usDefaultChar = p22.uint16; 12128 this.usBreakChar = p22.uint16; 12129 this.usMaxContext = p22.uint16; 12130 if (this.version <= 4) return p22.verifyLength(); 12131 this.usLowerOpticalPointSize = p22.uint16; 12132 this.usUpperOpticalPointSize = p22.uint16; 12133 if (this.version === 5) return p22.verifyLength(); 12134 } 12135 }; 12136 var OS2$1 = Object.freeze({ __proto__: null, OS2 }); 12137 var post = class extends SimpleTable { 12138 constructor(dict, dataview) { 12139 const { p: p22 } = super(dict, dataview); 12140 this.version = p22.legacyFixed; 12141 this.italicAngle = p22.fixed; 12142 this.underlinePosition = p22.fword; 12143 this.underlineThickness = p22.fword; 12144 this.isFixedPitch = p22.uint32; 12145 this.minMemType42 = p22.uint32; 12146 this.maxMemType42 = p22.uint32; 12147 this.minMemType1 = p22.uint32; 12148 this.maxMemType1 = p22.uint32; 12149 if (this.version === 1 || this.version === 3) return p22.verifyLength(); 12150 this.numGlyphs = p22.uint16; 12151 if (this.version === 2) { 12152 this.glyphNameIndex = [...new Array(this.numGlyphs)].map( 12153 (_) => p22.uint16 12154 ); 12155 this.namesOffset = p22.currentPosition; 12156 this.glyphNameOffsets = [1]; 12157 for (let i2 = 0; i2 < this.numGlyphs; i2++) { 12158 let index = this.glyphNameIndex[i2]; 12159 if (index < macStrings.length) { 12160 this.glyphNameOffsets.push(this.glyphNameOffsets[i2]); 12161 continue; 12162 } 12163 let bytelength = p22.int8; 12164 p22.skip(bytelength); 12165 this.glyphNameOffsets.push( 12166 this.glyphNameOffsets[i2] + bytelength + 1 12167 ); 12168 } 12169 } 12170 if (this.version === 2.5) { 12171 this.offset = [...new Array(this.numGlyphs)].map( 12172 (_) => p22.int8 12173 ); 12174 } 12175 } 12176 getGlyphName(glyphid) { 12177 if (this.version !== 2) { 12178 console.warn( 12179 `post table version $this.version} does not support glyph name lookups` 12180 ); 12181 return ``; 12182 } 12183 let index = this.glyphNameIndex[glyphid]; 12184 if (index < 258) return macStrings[index]; 12185 let offset = this.glyphNameOffsets[glyphid]; 12186 let next = this.glyphNameOffsets[glyphid + 1]; 12187 let len = next - offset - 1; 12188 if (len === 0) return `.notdef.`; 12189 this.parser.currentPosition = this.namesOffset + offset; 12190 const data = this.parser.readBytes( 12191 len, 12192 this.namesOffset + offset, 12193 8, 12194 true 12195 ); 12196 return data.map((b2) => String.fromCharCode(b2)).join(``); 12197 } 12198 }; 12199 var macStrings = [ 12200 `.notdef`, 12201 `.null`, 12202 `nonmarkingreturn`, 12203 `space`, 12204 `exclam`, 12205 `quotedbl`, 12206 `numbersign`, 12207 `dollar`, 12208 `percent`, 12209 `ampersand`, 12210 `quotesingle`, 12211 `parenleft`, 12212 `parenright`, 12213 `asterisk`, 12214 `plus`, 12215 `comma`, 12216 `hyphen`, 12217 `period`, 12218 `slash`, 12219 `zero`, 12220 `one`, 12221 `two`, 12222 `three`, 12223 `four`, 12224 `five`, 12225 `six`, 12226 `seven`, 12227 `eight`, 12228 `nine`, 12229 `colon`, 12230 `semicolon`, 12231 `less`, 12232 `equal`, 12233 `greater`, 12234 `question`, 12235 `at`, 12236 `A`, 12237 `B`, 12238 `C`, 12239 `D`, 12240 `E`, 12241 `F`, 12242 `G`, 12243 `H`, 12244 `I`, 12245 `J`, 12246 `K`, 12247 `L`, 12248 `M`, 12249 `N`, 12250 `O`, 12251 `P`, 12252 `Q`, 12253 `R`, 12254 `S`, 12255 `T`, 12256 `U`, 12257 `V`, 12258 `W`, 12259 `X`, 12260 `Y`, 12261 `Z`, 12262 `bracketleft`, 12263 `backslash`, 12264 `bracketright`, 12265 `asciicircum`, 12266 `underscore`, 12267 `grave`, 12268 `a`, 12269 `b`, 12270 `c`, 12271 `d`, 12272 `e`, 12273 `f`, 12274 `g`, 12275 `h`, 12276 `i`, 12277 `j`, 12278 `k`, 12279 `l`, 12280 `m`, 12281 `n`, 12282 `o`, 12283 `p`, 12284 `q`, 12285 `r`, 12286 `s`, 12287 `t`, 12288 `u`, 12289 `v`, 12290 `w`, 12291 `x`, 12292 `y`, 12293 `z`, 12294 `braceleft`, 12295 `bar`, 12296 `braceright`, 12297 `asciitilde`, 12298 `Adieresis`, 12299 `Aring`, 12300 `Ccedilla`, 12301 `Eacute`, 12302 `Ntilde`, 12303 `Odieresis`, 12304 `Udieresis`, 12305 `aacute`, 12306 `agrave`, 12307 `acircumflex`, 12308 `adieresis`, 12309 `atilde`, 12310 `aring`, 12311 `ccedilla`, 12312 `eacute`, 12313 `egrave`, 12314 `ecircumflex`, 12315 `edieresis`, 12316 `iacute`, 12317 `igrave`, 12318 `icircumflex`, 12319 `idieresis`, 12320 `ntilde`, 12321 `oacute`, 12322 `ograve`, 12323 `ocircumflex`, 12324 `odieresis`, 12325 `otilde`, 12326 `uacute`, 12327 `ugrave`, 12328 `ucircumflex`, 12329 `udieresis`, 12330 `dagger`, 12331 `degree`, 12332 `cent`, 12333 `sterling`, 12334 `section`, 12335 `bullet`, 12336 `paragraph`, 12337 `germandbls`, 12338 `registered`, 12339 `copyright`, 12340 `trademark`, 12341 `acute`, 12342 `dieresis`, 12343 `notequal`, 12344 `AE`, 12345 `Oslash`, 12346 `infinity`, 12347 `plusminus`, 12348 `lessequal`, 12349 `greaterequal`, 12350 `yen`, 12351 `mu`, 12352 `partialdiff`, 12353 `summation`, 12354 `product`, 12355 `pi`, 12356 `integral`, 12357 `ordfeminine`, 12358 `ordmasculine`, 12359 `Omega`, 12360 `ae`, 12361 `oslash`, 12362 `questiondown`, 12363 `exclamdown`, 12364 `logicalnot`, 12365 `radical`, 12366 `florin`, 12367 `approxequal`, 12368 `Delta`, 12369 `guillemotleft`, 12370 `guillemotright`, 12371 `ellipsis`, 12372 `nonbreakingspace`, 12373 `Agrave`, 12374 `Atilde`, 12375 `Otilde`, 12376 `OE`, 12377 `oe`, 12378 `endash`, 12379 `emdash`, 12380 `quotedblleft`, 12381 `quotedblright`, 12382 `quoteleft`, 12383 `quoteright`, 12384 `divide`, 12385 `lozenge`, 12386 `ydieresis`, 12387 `Ydieresis`, 12388 `fraction`, 12389 `currency`, 12390 `guilsinglleft`, 12391 `guilsinglright`, 12392 `fi`, 12393 `fl`, 12394 `daggerdbl`, 12395 `periodcentered`, 12396 `quotesinglbase`, 12397 `quotedblbase`, 12398 `perthousand`, 12399 `Acircumflex`, 12400 `Ecircumflex`, 12401 `Aacute`, 12402 `Edieresis`, 12403 `Egrave`, 12404 `Iacute`, 12405 `Icircumflex`, 12406 `Idieresis`, 12407 `Igrave`, 12408 `Oacute`, 12409 `Ocircumflex`, 12410 `apple`, 12411 `Ograve`, 12412 `Uacute`, 12413 `Ucircumflex`, 12414 `Ugrave`, 12415 `dotlessi`, 12416 `circumflex`, 12417 `tilde`, 12418 `macron`, 12419 `breve`, 12420 `dotaccent`, 12421 `ring`, 12422 `cedilla`, 12423 `hungarumlaut`, 12424 `ogonek`, 12425 `caron`, 12426 `Lslash`, 12427 `lslash`, 12428 `Scaron`, 12429 `scaron`, 12430 `Zcaron`, 12431 `zcaron`, 12432 `brokenbar`, 12433 `Eth`, 12434 `eth`, 12435 `Yacute`, 12436 `yacute`, 12437 `Thorn`, 12438 `thorn`, 12439 `minus`, 12440 `multiply`, 12441 `onesuperior`, 12442 `twosuperior`, 12443 `threesuperior`, 12444 `onehalf`, 12445 `onequarter`, 12446 `threequarters`, 12447 `franc`, 12448 `Gbreve`, 12449 `gbreve`, 12450 `Idotaccent`, 12451 `Scedilla`, 12452 `scedilla`, 12453 `Cacute`, 12454 `cacute`, 12455 `Ccaron`, 12456 `ccaron`, 12457 `dcroat` 12458 ]; 12459 var post$1 = Object.freeze({ __proto__: null, post }); 12460 var BASE = class extends SimpleTable { 12461 constructor(dict, dataview) { 12462 const { p: p22 } = super(dict, dataview); 12463 this.majorVersion = p22.uint16; 12464 this.minorVersion = p22.uint16; 12465 this.horizAxisOffset = p22.Offset16; 12466 this.vertAxisOffset = p22.Offset16; 12467 lazy$1( 12468 this, 12469 `horizAxis`, 12470 () => new AxisTable( 12471 { offset: dict.offset + this.horizAxisOffset }, 12472 dataview 12473 ) 12474 ); 12475 lazy$1( 12476 this, 12477 `vertAxis`, 12478 () => new AxisTable( 12479 { offset: dict.offset + this.vertAxisOffset }, 12480 dataview 12481 ) 12482 ); 12483 if (this.majorVersion === 1 && this.minorVersion === 1) { 12484 this.itemVarStoreOffset = p22.Offset32; 12485 lazy$1( 12486 this, 12487 `itemVarStore`, 12488 () => new AxisTable( 12489 { offset: dict.offset + this.itemVarStoreOffset }, 12490 dataview 12491 ) 12492 ); 12493 } 12494 } 12495 }; 12496 var AxisTable = class extends SimpleTable { 12497 constructor(dict, dataview) { 12498 const { p: p22 } = super(dict, dataview, `AxisTable`); 12499 this.baseTagListOffset = p22.Offset16; 12500 this.baseScriptListOffset = p22.Offset16; 12501 lazy$1( 12502 this, 12503 `baseTagList`, 12504 () => new BaseTagListTable( 12505 { offset: dict.offset + this.baseTagListOffset }, 12506 dataview 12507 ) 12508 ); 12509 lazy$1( 12510 this, 12511 `baseScriptList`, 12512 () => new BaseScriptListTable( 12513 { offset: dict.offset + this.baseScriptListOffset }, 12514 dataview 12515 ) 12516 ); 12517 } 12518 }; 12519 var BaseTagListTable = class extends SimpleTable { 12520 constructor(dict, dataview) { 12521 const { p: p22 } = super(dict, dataview, `BaseTagListTable`); 12522 this.baseTagCount = p22.uint16; 12523 this.baselineTags = [...new Array(this.baseTagCount)].map( 12524 (_) => p22.tag 12525 ); 12526 } 12527 }; 12528 var BaseScriptListTable = class extends SimpleTable { 12529 constructor(dict, dataview) { 12530 const { p: p22 } = super(dict, dataview, `BaseScriptListTable`); 12531 this.baseScriptCount = p22.uint16; 12532 const recordStart = p22.currentPosition; 12533 lazy$1(this, `baseScriptRecords`, () => { 12534 p22.currentPosition = recordStart; 12535 return [...new Array(this.baseScriptCount)].map( 12536 (_) => new BaseScriptRecord(this.start, p22) 12537 ); 12538 }); 12539 } 12540 }; 12541 var BaseScriptRecord = class { 12542 constructor(baseScriptListTableStart, p22) { 12543 this.baseScriptTag = p22.tag; 12544 this.baseScriptOffset = p22.Offset16; 12545 lazy$1(this, `baseScriptTable`, () => { 12546 p22.currentPosition = baseScriptListTableStart + this.baseScriptOffset; 12547 return new BaseScriptTable(p22); 12548 }); 12549 } 12550 }; 12551 var BaseScriptTable = class { 12552 constructor(p22) { 12553 this.start = p22.currentPosition; 12554 this.baseValuesOffset = p22.Offset16; 12555 this.defaultMinMaxOffset = p22.Offset16; 12556 this.baseLangSysCount = p22.uint16; 12557 this.baseLangSysRecords = [...new Array(this.baseLangSysCount)].map( 12558 (_) => new BaseLangSysRecord(this.start, p22) 12559 ); 12560 lazy$1(this, `baseValues`, () => { 12561 p22.currentPosition = this.start + this.baseValuesOffset; 12562 return new BaseValuesTable(p22); 12563 }); 12564 lazy$1(this, `defaultMinMax`, () => { 12565 p22.currentPosition = this.start + this.defaultMinMaxOffset; 12566 return new MinMaxTable(p22); 12567 }); 12568 } 12569 }; 12570 var BaseLangSysRecord = class { 12571 constructor(baseScriptTableStart, p22) { 12572 this.baseLangSysTag = p22.tag; 12573 this.minMaxOffset = p22.Offset16; 12574 lazy$1(this, `minMax`, () => { 12575 p22.currentPosition = baseScriptTableStart + this.minMaxOffset; 12576 return new MinMaxTable(p22); 12577 }); 12578 } 12579 }; 12580 var BaseValuesTable = class { 12581 constructor(p22) { 12582 this.parser = p22; 12583 this.start = p22.currentPosition; 12584 this.defaultBaselineIndex = p22.uint16; 12585 this.baseCoordCount = p22.uint16; 12586 this.baseCoords = [...new Array(this.baseCoordCount)].map( 12587 (_) => p22.Offset16 12588 ); 12589 } 12590 getTable(id) { 12591 this.parser.currentPosition = this.start + this.baseCoords[id]; 12592 return new BaseCoordTable(this.parser); 12593 } 12594 }; 12595 var MinMaxTable = class { 12596 constructor(p22) { 12597 this.minCoord = p22.Offset16; 12598 this.maxCoord = p22.Offset16; 12599 this.featMinMaxCount = p22.uint16; 12600 const recordStart = p22.currentPosition; 12601 lazy$1(this, `featMinMaxRecords`, () => { 12602 p22.currentPosition = recordStart; 12603 return [...new Array(this.featMinMaxCount)].map( 12604 (_) => new FeatMinMaxRecord(p22) 12605 ); 12606 }); 12607 } 12608 }; 12609 var FeatMinMaxRecord = class { 12610 constructor(p22) { 12611 this.featureTableTag = p22.tag; 12612 this.minCoord = p22.Offset16; 12613 this.maxCoord = p22.Offset16; 12614 } 12615 }; 12616 var BaseCoordTable = class { 12617 constructor(p22) { 12618 this.baseCoordFormat = p22.uint16; 12619 this.coordinate = p22.int16; 12620 if (this.baseCoordFormat === 2) { 12621 this.referenceGlyph = p22.uint16; 12622 this.baseCoordPoint = p22.uint16; 12623 } 12624 if (this.baseCoordFormat === 3) { 12625 this.deviceTable = p22.Offset16; 12626 } 12627 } 12628 }; 12629 var BASE$1 = Object.freeze({ __proto__: null, BASE }); 12630 var ClassDefinition = class { 12631 constructor(p22) { 12632 this.classFormat = p22.uint16; 12633 if (this.classFormat === 1) { 12634 this.startGlyphID = p22.uint16; 12635 this.glyphCount = p22.uint16; 12636 this.classValueArray = [...new Array(this.glyphCount)].map( 12637 (_) => p22.uint16 12638 ); 12639 } 12640 if (this.classFormat === 2) { 12641 this.classRangeCount = p22.uint16; 12642 this.classRangeRecords = [ 12643 ...new Array(this.classRangeCount) 12644 ].map((_) => new ClassRangeRecord(p22)); 12645 } 12646 } 12647 }; 12648 var ClassRangeRecord = class { 12649 constructor(p22) { 12650 this.startGlyphID = p22.uint16; 12651 this.endGlyphID = p22.uint16; 12652 this.class = p22.uint16; 12653 } 12654 }; 12655 var CoverageTable = class extends ParsedData { 12656 constructor(p22) { 12657 super(p22); 12658 this.coverageFormat = p22.uint16; 12659 if (this.coverageFormat === 1) { 12660 this.glyphCount = p22.uint16; 12661 this.glyphArray = [...new Array(this.glyphCount)].map( 12662 (_) => p22.uint16 12663 ); 12664 } 12665 if (this.coverageFormat === 2) { 12666 this.rangeCount = p22.uint16; 12667 this.rangeRecords = [...new Array(this.rangeCount)].map( 12668 (_) => new CoverageRangeRecord(p22) 12669 ); 12670 } 12671 } 12672 }; 12673 var CoverageRangeRecord = class { 12674 constructor(p22) { 12675 this.startGlyphID = p22.uint16; 12676 this.endGlyphID = p22.uint16; 12677 this.startCoverageIndex = p22.uint16; 12678 } 12679 }; 12680 var ItemVariationStoreTable = class { 12681 constructor(table, p22) { 12682 this.table = table; 12683 this.parser = p22; 12684 this.start = p22.currentPosition; 12685 this.format = p22.uint16; 12686 this.variationRegionListOffset = p22.Offset32; 12687 this.itemVariationDataCount = p22.uint16; 12688 this.itemVariationDataOffsets = [ 12689 ...new Array(this.itemVariationDataCount) 12690 ].map((_) => p22.Offset32); 12691 } 12692 }; 12693 var GDEF = class extends SimpleTable { 12694 constructor(dict, dataview) { 12695 const { p: p22 } = super(dict, dataview); 12696 this.majorVersion = p22.uint16; 12697 this.minorVersion = p22.uint16; 12698 this.glyphClassDefOffset = p22.Offset16; 12699 lazy$1(this, `glyphClassDefs`, () => { 12700 if (this.glyphClassDefOffset === 0) return void 0; 12701 p22.currentPosition = this.tableStart + this.glyphClassDefOffset; 12702 return new ClassDefinition(p22); 12703 }); 12704 this.attachListOffset = p22.Offset16; 12705 lazy$1(this, `attachList`, () => { 12706 if (this.attachListOffset === 0) return void 0; 12707 p22.currentPosition = this.tableStart + this.attachListOffset; 12708 return new AttachList(p22); 12709 }); 12710 this.ligCaretListOffset = p22.Offset16; 12711 lazy$1(this, `ligCaretList`, () => { 12712 if (this.ligCaretListOffset === 0) return void 0; 12713 p22.currentPosition = this.tableStart + this.ligCaretListOffset; 12714 return new LigCaretList(p22); 12715 }); 12716 this.markAttachClassDefOffset = p22.Offset16; 12717 lazy$1(this, `markAttachClassDef`, () => { 12718 if (this.markAttachClassDefOffset === 0) return void 0; 12719 p22.currentPosition = this.tableStart + this.markAttachClassDefOffset; 12720 return new ClassDefinition(p22); 12721 }); 12722 if (this.minorVersion >= 2) { 12723 this.markGlyphSetsDefOffset = p22.Offset16; 12724 lazy$1(this, `markGlyphSetsDef`, () => { 12725 if (this.markGlyphSetsDefOffset === 0) return void 0; 12726 p22.currentPosition = this.tableStart + this.markGlyphSetsDefOffset; 12727 return new MarkGlyphSetsTable(p22); 12728 }); 12729 } 12730 if (this.minorVersion === 3) { 12731 this.itemVarStoreOffset = p22.Offset32; 12732 lazy$1(this, `itemVarStore`, () => { 12733 if (this.itemVarStoreOffset === 0) return void 0; 12734 p22.currentPosition = this.tableStart + this.itemVarStoreOffset; 12735 return new ItemVariationStoreTable(p22); 12736 }); 12737 } 12738 } 12739 }; 12740 var AttachList = class extends ParsedData { 12741 constructor(p22) { 12742 super(p22); 12743 this.coverageOffset = p22.Offset16; 12744 this.glyphCount = p22.uint16; 12745 this.attachPointOffsets = [...new Array(this.glyphCount)].map( 12746 (_) => p22.Offset16 12747 ); 12748 } 12749 getPoint(pointID) { 12750 this.parser.currentPosition = this.start + this.attachPointOffsets[pointID]; 12751 return new AttachPoint(this.parser); 12752 } 12753 }; 12754 var AttachPoint = class { 12755 constructor(p22) { 12756 this.pointCount = p22.uint16; 12757 this.pointIndices = [...new Array(this.pointCount)].map( 12758 (_) => p22.uint16 12759 ); 12760 } 12761 }; 12762 var LigCaretList = class extends ParsedData { 12763 constructor(p22) { 12764 super(p22); 12765 this.coverageOffset = p22.Offset16; 12766 lazy$1(this, `coverage`, () => { 12767 p22.currentPosition = this.start + this.coverageOffset; 12768 return new CoverageTable(p22); 12769 }); 12770 this.ligGlyphCount = p22.uint16; 12771 this.ligGlyphOffsets = [...new Array(this.ligGlyphCount)].map( 12772 (_) => p22.Offset16 12773 ); 12774 } 12775 getLigGlyph(ligGlyphID) { 12776 this.parser.currentPosition = this.start + this.ligGlyphOffsets[ligGlyphID]; 12777 return new LigGlyph(this.parser); 12778 } 12779 }; 12780 var LigGlyph = class extends ParsedData { 12781 constructor(p22) { 12782 super(p22); 12783 this.caretCount = p22.uint16; 12784 this.caretValueOffsets = [...new Array(this.caretCount)].map( 12785 (_) => p22.Offset16 12786 ); 12787 } 12788 getCaretValue(caretID) { 12789 this.parser.currentPosition = this.start + this.caretValueOffsets[caretID]; 12790 return new CaretValue(this.parser); 12791 } 12792 }; 12793 var CaretValue = class { 12794 constructor(p22) { 12795 this.caretValueFormat = p22.uint16; 12796 if (this.caretValueFormat === 1) { 12797 this.coordinate = p22.int16; 12798 } 12799 if (this.caretValueFormat === 2) { 12800 this.caretValuePointIndex = p22.uint16; 12801 } 12802 if (this.caretValueFormat === 3) { 12803 this.coordinate = p22.int16; 12804 this.deviceOffset = p22.Offset16; 12805 } 12806 } 12807 }; 12808 var MarkGlyphSetsTable = class extends ParsedData { 12809 constructor(p22) { 12810 super(p22); 12811 this.markGlyphSetTableFormat = p22.uint16; 12812 this.markGlyphSetCount = p22.uint16; 12813 this.coverageOffsets = [...new Array(this.markGlyphSetCount)].map( 12814 (_) => p22.Offset32 12815 ); 12816 } 12817 getMarkGlyphSet(markGlyphSetID) { 12818 this.parser.currentPosition = this.start + this.coverageOffsets[markGlyphSetID]; 12819 return new CoverageTable(this.parser); 12820 } 12821 }; 12822 var GDEF$1 = Object.freeze({ __proto__: null, GDEF }); 12823 var ScriptList = class extends ParsedData { 12824 static EMPTY = { scriptCount: 0, scriptRecords: [] }; 12825 constructor(p22) { 12826 super(p22); 12827 this.scriptCount = p22.uint16; 12828 this.scriptRecords = [...new Array(this.scriptCount)].map( 12829 (_) => new ScriptRecord(p22) 12830 ); 12831 } 12832 }; 12833 var ScriptRecord = class { 12834 constructor(p22) { 12835 this.scriptTag = p22.tag; 12836 this.scriptOffset = p22.Offset16; 12837 } 12838 }; 12839 var ScriptTable = class extends ParsedData { 12840 constructor(p22) { 12841 super(p22); 12842 this.defaultLangSys = p22.Offset16; 12843 this.langSysCount = p22.uint16; 12844 this.langSysRecords = [...new Array(this.langSysCount)].map( 12845 (_) => new LangSysRecord(p22) 12846 ); 12847 } 12848 }; 12849 var LangSysRecord = class { 12850 constructor(p22) { 12851 this.langSysTag = p22.tag; 12852 this.langSysOffset = p22.Offset16; 12853 } 12854 }; 12855 var LangSysTable = class { 12856 constructor(p22) { 12857 this.lookupOrder = p22.Offset16; 12858 this.requiredFeatureIndex = p22.uint16; 12859 this.featureIndexCount = p22.uint16; 12860 this.featureIndices = [...new Array(this.featureIndexCount)].map( 12861 (_) => p22.uint16 12862 ); 12863 } 12864 }; 12865 var FeatureList = class extends ParsedData { 12866 static EMPTY = { featureCount: 0, featureRecords: [] }; 12867 constructor(p22) { 12868 super(p22); 12869 this.featureCount = p22.uint16; 12870 this.featureRecords = [...new Array(this.featureCount)].map( 12871 (_) => new FeatureRecord(p22) 12872 ); 12873 } 12874 }; 12875 var FeatureRecord = class { 12876 constructor(p22) { 12877 this.featureTag = p22.tag; 12878 this.featureOffset = p22.Offset16; 12879 } 12880 }; 12881 var FeatureTable = class extends ParsedData { 12882 constructor(p22) { 12883 super(p22); 12884 this.featureParams = p22.Offset16; 12885 this.lookupIndexCount = p22.uint16; 12886 this.lookupListIndices = [...new Array(this.lookupIndexCount)].map( 12887 (_) => p22.uint16 12888 ); 12889 } 12890 getFeatureParams() { 12891 if (this.featureParams > 0) { 12892 const p22 = this.parser; 12893 p22.currentPosition = this.start + this.featureParams; 12894 const tag = this.featureTag; 12895 if (tag === `size`) return new Size(p22); 12896 if (tag.startsWith(`cc`)) return new CharacterVariant(p22); 12897 if (tag.startsWith(`ss`)) return new StylisticSet(p22); 12898 } 12899 } 12900 }; 12901 var CharacterVariant = class { 12902 constructor(p22) { 12903 this.format = p22.uint16; 12904 this.featUiLabelNameId = p22.uint16; 12905 this.featUiTooltipTextNameId = p22.uint16; 12906 this.sampleTextNameId = p22.uint16; 12907 this.numNamedParameters = p22.uint16; 12908 this.firstParamUiLabelNameId = p22.uint16; 12909 this.charCount = p22.uint16; 12910 this.character = [...new Array(this.charCount)].map( 12911 (_) => p22.uint24 12912 ); 12913 } 12914 }; 12915 var Size = class { 12916 constructor(p22) { 12917 this.designSize = p22.uint16; 12918 this.subfamilyIdentifier = p22.uint16; 12919 this.subfamilyNameID = p22.uint16; 12920 this.smallEnd = p22.uint16; 12921 this.largeEnd = p22.uint16; 12922 } 12923 }; 12924 var StylisticSet = class { 12925 constructor(p22) { 12926 this.version = p22.uint16; 12927 this.UINameID = p22.uint16; 12928 } 12929 }; 12930 function undoCoverageOffsetParsing(instance) { 12931 instance.parser.currentPosition -= 2; 12932 delete instance.coverageOffset; 12933 delete instance.getCoverageTable; 12934 } 12935 var LookupType$1 = class extends ParsedData { 12936 constructor(p22) { 12937 super(p22); 12938 this.substFormat = p22.uint16; 12939 this.coverageOffset = p22.Offset16; 12940 } 12941 getCoverageTable() { 12942 let p22 = this.parser; 12943 p22.currentPosition = this.start + this.coverageOffset; 12944 return new CoverageTable(p22); 12945 } 12946 }; 12947 var SubstLookupRecord = class { 12948 constructor(p22) { 12949 this.glyphSequenceIndex = p22.uint16; 12950 this.lookupListIndex = p22.uint16; 12951 } 12952 }; 12953 var LookupType1$1 = class extends LookupType$1 { 12954 constructor(p22) { 12955 super(p22); 12956 this.deltaGlyphID = p22.int16; 12957 } 12958 }; 12959 var LookupType2$1 = class extends LookupType$1 { 12960 constructor(p22) { 12961 super(p22); 12962 this.sequenceCount = p22.uint16; 12963 this.sequenceOffsets = [...new Array(this.sequenceCount)].map( 12964 (_) => p22.Offset16 12965 ); 12966 } 12967 getSequence(index) { 12968 let p22 = this.parser; 12969 p22.currentPosition = this.start + this.sequenceOffsets[index]; 12970 return new SequenceTable(p22); 12971 } 12972 }; 12973 var SequenceTable = class { 12974 constructor(p22) { 12975 this.glyphCount = p22.uint16; 12976 this.substituteGlyphIDs = [...new Array(this.glyphCount)].map( 12977 (_) => p22.uint16 12978 ); 12979 } 12980 }; 12981 var LookupType3$1 = class extends LookupType$1 { 12982 constructor(p22) { 12983 super(p22); 12984 this.alternateSetCount = p22.uint16; 12985 this.alternateSetOffsets = [ 12986 ...new Array(this.alternateSetCount) 12987 ].map((_) => p22.Offset16); 12988 } 12989 getAlternateSet(index) { 12990 let p22 = this.parser; 12991 p22.currentPosition = this.start + this.alternateSetOffsets[index]; 12992 return new AlternateSetTable(p22); 12993 } 12994 }; 12995 var AlternateSetTable = class { 12996 constructor(p22) { 12997 this.glyphCount = p22.uint16; 12998 this.alternateGlyphIDs = [...new Array(this.glyphCount)].map( 12999 (_) => p22.uint16 13000 ); 13001 } 13002 }; 13003 var LookupType4$1 = class extends LookupType$1 { 13004 constructor(p22) { 13005 super(p22); 13006 this.ligatureSetCount = p22.uint16; 13007 this.ligatureSetOffsets = [...new Array(this.ligatureSetCount)].map( 13008 (_) => p22.Offset16 13009 ); 13010 } 13011 getLigatureSet(index) { 13012 let p22 = this.parser; 13013 p22.currentPosition = this.start + this.ligatureSetOffsets[index]; 13014 return new LigatureSetTable(p22); 13015 } 13016 }; 13017 var LigatureSetTable = class extends ParsedData { 13018 constructor(p22) { 13019 super(p22); 13020 this.ligatureCount = p22.uint16; 13021 this.ligatureOffsets = [...new Array(this.ligatureCount)].map( 13022 (_) => p22.Offset16 13023 ); 13024 } 13025 getLigature(index) { 13026 let p22 = this.parser; 13027 p22.currentPosition = this.start + this.ligatureOffsets[index]; 13028 return new LigatureTable(p22); 13029 } 13030 }; 13031 var LigatureTable = class { 13032 constructor(p22) { 13033 this.ligatureGlyph = p22.uint16; 13034 this.componentCount = p22.uint16; 13035 this.componentGlyphIDs = [ 13036 ...new Array(this.componentCount - 1) 13037 ].map((_) => p22.uint16); 13038 } 13039 }; 13040 var LookupType5$1 = class extends LookupType$1 { 13041 constructor(p22) { 13042 super(p22); 13043 if (this.substFormat === 1) { 13044 this.subRuleSetCount = p22.uint16; 13045 this.subRuleSetOffsets = [ 13046 ...new Array(this.subRuleSetCount) 13047 ].map((_) => p22.Offset16); 13048 } 13049 if (this.substFormat === 2) { 13050 this.classDefOffset = p22.Offset16; 13051 this.subClassSetCount = p22.uint16; 13052 this.subClassSetOffsets = [ 13053 ...new Array(this.subClassSetCount) 13054 ].map((_) => p22.Offset16); 13055 } 13056 if (this.substFormat === 3) { 13057 undoCoverageOffsetParsing(this); 13058 this.glyphCount = p22.uint16; 13059 this.substitutionCount = p22.uint16; 13060 this.coverageOffsets = [...new Array(this.glyphCount)].map( 13061 (_) => p22.Offset16 13062 ); 13063 this.substLookupRecords = [ 13064 ...new Array(this.substitutionCount) 13065 ].map((_) => new SubstLookupRecord(p22)); 13066 } 13067 } 13068 getSubRuleSet(index) { 13069 if (this.substFormat !== 1) 13070 throw new Error( 13071 `lookup type 5.$this.substFormat} has no subrule sets.` 13072 ); 13073 let p22 = this.parser; 13074 p22.currentPosition = this.start + this.subRuleSetOffsets[index]; 13075 return new SubRuleSetTable(p22); 13076 } 13077 getSubClassSet(index) { 13078 if (this.substFormat !== 2) 13079 throw new Error( 13080 `lookup type 5.$this.substFormat} has no subclass sets.` 13081 ); 13082 let p22 = this.parser; 13083 p22.currentPosition = this.start + this.subClassSetOffsets[index]; 13084 return new SubClassSetTable(p22); 13085 } 13086 getCoverageTable(index) { 13087 if (this.substFormat !== 3 && !index) 13088 return super.getCoverageTable(); 13089 if (!index) 13090 throw new Error( 13091 `lookup type 5.$this.substFormat} requires an coverage table index.` 13092 ); 13093 let p22 = this.parser; 13094 p22.currentPosition = this.start + this.coverageOffsets[index]; 13095 return new CoverageTable(p22); 13096 } 13097 }; 13098 var SubRuleSetTable = class extends ParsedData { 13099 constructor(p22) { 13100 super(p22); 13101 this.subRuleCount = p22.uint16; 13102 this.subRuleOffsets = [...new Array(this.subRuleCount)].map( 13103 (_) => p22.Offset16 13104 ); 13105 } 13106 getSubRule(index) { 13107 let p22 = this.parser; 13108 p22.currentPosition = this.start + this.subRuleOffsets[index]; 13109 return new SubRuleTable(p22); 13110 } 13111 }; 13112 var SubRuleTable = class { 13113 constructor(p22) { 13114 this.glyphCount = p22.uint16; 13115 this.substitutionCount = p22.uint16; 13116 this.inputSequence = [...new Array(this.glyphCount - 1)].map( 13117 (_) => p22.uint16 13118 ); 13119 this.substLookupRecords = [ 13120 ...new Array(this.substitutionCount) 13121 ].map((_) => new SubstLookupRecord(p22)); 13122 } 13123 }; 13124 var SubClassSetTable = class extends ParsedData { 13125 constructor(p22) { 13126 super(p22); 13127 this.subClassRuleCount = p22.uint16; 13128 this.subClassRuleOffsets = [ 13129 ...new Array(this.subClassRuleCount) 13130 ].map((_) => p22.Offset16); 13131 } 13132 getSubClass(index) { 13133 let p22 = this.parser; 13134 p22.currentPosition = this.start + this.subClassRuleOffsets[index]; 13135 return new SubClassRuleTable(p22); 13136 } 13137 }; 13138 var SubClassRuleTable = class extends SubRuleTable { 13139 constructor(p22) { 13140 super(p22); 13141 } 13142 }; 13143 var LookupType6$1 = class extends LookupType$1 { 13144 constructor(p22) { 13145 super(p22); 13146 if (this.substFormat === 1) { 13147 this.chainSubRuleSetCount = p22.uint16; 13148 this.chainSubRuleSetOffsets = [ 13149 ...new Array(this.chainSubRuleSetCount) 13150 ].map((_) => p22.Offset16); 13151 } 13152 if (this.substFormat === 2) { 13153 this.backtrackClassDefOffset = p22.Offset16; 13154 this.inputClassDefOffset = p22.Offset16; 13155 this.lookaheadClassDefOffset = p22.Offset16; 13156 this.chainSubClassSetCount = p22.uint16; 13157 this.chainSubClassSetOffsets = [ 13158 ...new Array(this.chainSubClassSetCount) 13159 ].map((_) => p22.Offset16); 13160 } 13161 if (this.substFormat === 3) { 13162 undoCoverageOffsetParsing(this); 13163 this.backtrackGlyphCount = p22.uint16; 13164 this.backtrackCoverageOffsets = [ 13165 ...new Array(this.backtrackGlyphCount) 13166 ].map((_) => p22.Offset16); 13167 this.inputGlyphCount = p22.uint16; 13168 this.inputCoverageOffsets = [ 13169 ...new Array(this.inputGlyphCount) 13170 ].map((_) => p22.Offset16); 13171 this.lookaheadGlyphCount = p22.uint16; 13172 this.lookaheadCoverageOffsets = [ 13173 ...new Array(this.lookaheadGlyphCount) 13174 ].map((_) => p22.Offset16); 13175 this.seqLookupCount = p22.uint16; 13176 this.seqLookupRecords = [ 13177 ...new Array(this.substitutionCount) 13178 ].map((_) => new SequenceLookupRecord(p22)); 13179 } 13180 } 13181 getChainSubRuleSet(index) { 13182 if (this.substFormat !== 1) 13183 throw new Error( 13184 `lookup type 6.$this.substFormat} has no chainsubrule sets.` 13185 ); 13186 let p22 = this.parser; 13187 p22.currentPosition = this.start + this.chainSubRuleSetOffsets[index]; 13188 return new ChainSubRuleSetTable(p22); 13189 } 13190 getChainSubClassSet(index) { 13191 if (this.substFormat !== 2) 13192 throw new Error( 13193 `lookup type 6.$this.substFormat} has no chainsubclass sets.` 13194 ); 13195 let p22 = this.parser; 13196 p22.currentPosition = this.start + this.chainSubClassSetOffsets[index]; 13197 return new ChainSubClassSetTable(p22); 13198 } 13199 getCoverageFromOffset(offset) { 13200 if (this.substFormat !== 3) 13201 throw new Error( 13202 `lookup type 6.$this.substFormat} does not use contextual coverage offsets.` 13203 ); 13204 let p22 = this.parser; 13205 p22.currentPosition = this.start + offset; 13206 return new CoverageTable(p22); 13207 } 13208 }; 13209 var ChainSubRuleSetTable = class extends ParsedData { 13210 constructor(p22) { 13211 super(p22); 13212 this.chainSubRuleCount = p22.uint16; 13213 this.chainSubRuleOffsets = [ 13214 ...new Array(this.chainSubRuleCount) 13215 ].map((_) => p22.Offset16); 13216 } 13217 getSubRule(index) { 13218 let p22 = this.parser; 13219 p22.currentPosition = this.start + this.chainSubRuleOffsets[index]; 13220 return new ChainSubRuleTable(p22); 13221 } 13222 }; 13223 var ChainSubRuleTable = class { 13224 constructor(p22) { 13225 this.backtrackGlyphCount = p22.uint16; 13226 this.backtrackSequence = [ 13227 ...new Array(this.backtrackGlyphCount) 13228 ].map((_) => p22.uint16); 13229 this.inputGlyphCount = p22.uint16; 13230 this.inputSequence = [...new Array(this.inputGlyphCount - 1)].map( 13231 (_) => p22.uint16 13232 ); 13233 this.lookaheadGlyphCount = p22.uint16; 13234 this.lookAheadSequence = [ 13235 ...new Array(this.lookAheadGlyphCount) 13236 ].map((_) => p22.uint16); 13237 this.substitutionCount = p22.uint16; 13238 this.substLookupRecords = [...new Array(this.SubstCount)].map( 13239 (_) => new SubstLookupRecord(p22) 13240 ); 13241 } 13242 }; 13243 var ChainSubClassSetTable = class extends ParsedData { 13244 constructor(p22) { 13245 super(p22); 13246 this.chainSubClassRuleCount = p22.uint16; 13247 this.chainSubClassRuleOffsets = [ 13248 ...new Array(this.chainSubClassRuleCount) 13249 ].map((_) => p22.Offset16); 13250 } 13251 getSubClass(index) { 13252 let p22 = this.parser; 13253 p22.currentPosition = this.start + this.chainSubRuleOffsets[index]; 13254 return new ChainSubClassRuleTable(p22); 13255 } 13256 }; 13257 var ChainSubClassRuleTable = class { 13258 constructor(p22) { 13259 this.backtrackGlyphCount = p22.uint16; 13260 this.backtrackSequence = [ 13261 ...new Array(this.backtrackGlyphCount) 13262 ].map((_) => p22.uint16); 13263 this.inputGlyphCount = p22.uint16; 13264 this.inputSequence = [...new Array(this.inputGlyphCount - 1)].map( 13265 (_) => p22.uint16 13266 ); 13267 this.lookaheadGlyphCount = p22.uint16; 13268 this.lookAheadSequence = [ 13269 ...new Array(this.lookAheadGlyphCount) 13270 ].map((_) => p22.uint16); 13271 this.substitutionCount = p22.uint16; 13272 this.substLookupRecords = [ 13273 ...new Array(this.substitutionCount) 13274 ].map((_) => new SequenceLookupRecord(p22)); 13275 } 13276 }; 13277 var SequenceLookupRecord = class extends ParsedData { 13278 constructor(p22) { 13279 super(p22); 13280 this.sequenceIndex = p22.uint16; 13281 this.lookupListIndex = p22.uint16; 13282 } 13283 }; 13284 var LookupType7$1 = class extends ParsedData { 13285 constructor(p22) { 13286 super(p22); 13287 this.substFormat = p22.uint16; 13288 this.extensionLookupType = p22.uint16; 13289 this.extensionOffset = p22.Offset32; 13290 } 13291 }; 13292 var LookupType8$1 = class extends LookupType$1 { 13293 constructor(p22) { 13294 super(p22); 13295 this.backtrackGlyphCount = p22.uint16; 13296 this.backtrackCoverageOffsets = [ 13297 ...new Array(this.backtrackGlyphCount) 13298 ].map((_) => p22.Offset16); 13299 this.lookaheadGlyphCount = p22.uint16; 13300 this.lookaheadCoverageOffsets = [ 13301 new Array(this.lookaheadGlyphCount) 13302 ].map((_) => p22.Offset16); 13303 this.glyphCount = p22.uint16; 13304 this.substituteGlyphIDs = [...new Array(this.glyphCount)].map( 13305 (_) => p22.uint16 13306 ); 13307 } 13308 }; 13309 var GSUBtables = { 13310 buildSubtable: function(type, p22) { 13311 const subtable = new [ 13312 void 0, 13313 LookupType1$1, 13314 LookupType2$1, 13315 LookupType3$1, 13316 LookupType4$1, 13317 LookupType5$1, 13318 LookupType6$1, 13319 LookupType7$1, 13320 LookupType8$1 13321 ][type](p22); 13322 subtable.type = type; 13323 return subtable; 13324 } 13325 }; 13326 var LookupType = class extends ParsedData { 13327 constructor(p22) { 13328 super(p22); 13329 } 13330 }; 13331 var LookupType1 = class extends LookupType { 13332 constructor(p22) { 13333 super(p22); 13334 console.log(`lookup type 1`); 13335 } 13336 }; 13337 var LookupType2 = class extends LookupType { 13338 constructor(p22) { 13339 super(p22); 13340 console.log(`lookup type 2`); 13341 } 13342 }; 13343 var LookupType3 = class extends LookupType { 13344 constructor(p22) { 13345 super(p22); 13346 console.log(`lookup type 3`); 13347 } 13348 }; 13349 var LookupType4 = class extends LookupType { 13350 constructor(p22) { 13351 super(p22); 13352 console.log(`lookup type 4`); 13353 } 13354 }; 13355 var LookupType5 = class extends LookupType { 13356 constructor(p22) { 13357 super(p22); 13358 console.log(`lookup type 5`); 13359 } 13360 }; 13361 var LookupType6 = class extends LookupType { 13362 constructor(p22) { 13363 super(p22); 13364 console.log(`lookup type 6`); 13365 } 13366 }; 13367 var LookupType7 = class extends LookupType { 13368 constructor(p22) { 13369 super(p22); 13370 console.log(`lookup type 7`); 13371 } 13372 }; 13373 var LookupType8 = class extends LookupType { 13374 constructor(p22) { 13375 super(p22); 13376 console.log(`lookup type 8`); 13377 } 13378 }; 13379 var LookupType9 = class extends LookupType { 13380 constructor(p22) { 13381 super(p22); 13382 console.log(`lookup type 9`); 13383 } 13384 }; 13385 var GPOStables = { 13386 buildSubtable: function(type, p22) { 13387 const subtable = new [ 13388 void 0, 13389 LookupType1, 13390 LookupType2, 13391 LookupType3, 13392 LookupType4, 13393 LookupType5, 13394 LookupType6, 13395 LookupType7, 13396 LookupType8, 13397 LookupType9 13398 ][type](p22); 13399 subtable.type = type; 13400 return subtable; 13401 } 13402 }; 13403 var LookupList = class extends ParsedData { 13404 static EMPTY = { lookupCount: 0, lookups: [] }; 13405 constructor(p22) { 13406 super(p22); 13407 this.lookupCount = p22.uint16; 13408 this.lookups = [...new Array(this.lookupCount)].map( 13409 (_) => p22.Offset16 13410 ); 13411 } 13412 }; 13413 var LookupTable = class extends ParsedData { 13414 constructor(p22, type) { 13415 super(p22); 13416 this.ctType = type; 13417 this.lookupType = p22.uint16; 13418 this.lookupFlag = p22.uint16; 13419 this.subTableCount = p22.uint16; 13420 this.subtableOffsets = [...new Array(this.subTableCount)].map( 13421 (_) => p22.Offset16 13422 ); 13423 this.markFilteringSet = p22.uint16; 13424 } 13425 get rightToLeft() { 13426 return this.lookupFlag & true; 13427 } 13428 get ignoreBaseGlyphs() { 13429 return this.lookupFlag & true; 13430 } 13431 get ignoreLigatures() { 13432 return this.lookupFlag & true; 13433 } 13434 get ignoreMarks() { 13435 return this.lookupFlag & true; 13436 } 13437 get useMarkFilteringSet() { 13438 return this.lookupFlag & true; 13439 } 13440 get markAttachmentType() { 13441 return this.lookupFlag & true; 13442 } 13443 getSubTable(index) { 13444 const builder = this.ctType === `GSUB` ? GSUBtables : GPOStables; 13445 this.parser.currentPosition = this.start + this.subtableOffsets[index]; 13446 return builder.buildSubtable(this.lookupType, this.parser); 13447 } 13448 }; 13449 var CommonLayoutTable = class extends SimpleTable { 13450 constructor(dict, dataview, name2) { 13451 const { p: p22, tableStart } = super(dict, dataview, name2); 13452 this.majorVersion = p22.uint16; 13453 this.minorVersion = p22.uint16; 13454 this.scriptListOffset = p22.Offset16; 13455 this.featureListOffset = p22.Offset16; 13456 this.lookupListOffset = p22.Offset16; 13457 if (this.majorVersion === 1 && this.minorVersion === 1) { 13458 this.featureVariationsOffset = p22.Offset32; 13459 } 13460 const no_content = !(this.scriptListOffset || this.featureListOffset || this.lookupListOffset); 13461 lazy$1(this, `scriptList`, () => { 13462 if (no_content) return ScriptList.EMPTY; 13463 p22.currentPosition = tableStart + this.scriptListOffset; 13464 return new ScriptList(p22); 13465 }); 13466 lazy$1(this, `featureList`, () => { 13467 if (no_content) return FeatureList.EMPTY; 13468 p22.currentPosition = tableStart + this.featureListOffset; 13469 return new FeatureList(p22); 13470 }); 13471 lazy$1(this, `lookupList`, () => { 13472 if (no_content) return LookupList.EMPTY; 13473 p22.currentPosition = tableStart + this.lookupListOffset; 13474 return new LookupList(p22); 13475 }); 13476 if (this.featureVariationsOffset) { 13477 lazy$1(this, `featureVariations`, () => { 13478 if (no_content) return FeatureVariations.EMPTY; 13479 p22.currentPosition = tableStart + this.featureVariationsOffset; 13480 return new FeatureVariations(p22); 13481 }); 13482 } 13483 } 13484 getSupportedScripts() { 13485 return this.scriptList.scriptRecords.map((r3) => r3.scriptTag); 13486 } 13487 getScriptTable(scriptTag) { 13488 let record = this.scriptList.scriptRecords.find( 13489 (r3) => r3.scriptTag === scriptTag 13490 ); 13491 this.parser.currentPosition = this.scriptList.start + record.scriptOffset; 13492 let table = new ScriptTable(this.parser); 13493 table.scriptTag = scriptTag; 13494 return table; 13495 } 13496 ensureScriptTable(arg) { 13497 if (typeof arg === "string") { 13498 return this.getScriptTable(arg); 13499 } 13500 return arg; 13501 } 13502 getSupportedLangSys(scriptTable) { 13503 scriptTable = this.ensureScriptTable(scriptTable); 13504 const hasDefault = scriptTable.defaultLangSys !== 0; 13505 const supported = scriptTable.langSysRecords.map( 13506 (l2) => l2.langSysTag 13507 ); 13508 if (hasDefault) supported.unshift(`dflt`); 13509 return supported; 13510 } 13511 getDefaultLangSysTable(scriptTable) { 13512 scriptTable = this.ensureScriptTable(scriptTable); 13513 let offset = scriptTable.defaultLangSys; 13514 if (offset !== 0) { 13515 this.parser.currentPosition = scriptTable.start + offset; 13516 let table = new LangSysTable(this.parser); 13517 table.langSysTag = ``; 13518 table.defaultForScript = scriptTable.scriptTag; 13519 return table; 13520 } 13521 } 13522 getLangSysTable(scriptTable, langSysTag = `dflt`) { 13523 if (langSysTag === `dflt`) 13524 return this.getDefaultLangSysTable(scriptTable); 13525 scriptTable = this.ensureScriptTable(scriptTable); 13526 let record = scriptTable.langSysRecords.find( 13527 (l2) => l2.langSysTag === langSysTag 13528 ); 13529 this.parser.currentPosition = scriptTable.start + record.langSysOffset; 13530 let table = new LangSysTable(this.parser); 13531 table.langSysTag = langSysTag; 13532 return table; 13533 } 13534 getFeatures(langSysTable) { 13535 return langSysTable.featureIndices.map( 13536 (index) => this.getFeature(index) 13537 ); 13538 } 13539 getFeature(indexOrTag) { 13540 let record; 13541 if (parseInt(indexOrTag) == indexOrTag) { 13542 record = this.featureList.featureRecords[indexOrTag]; 13543 } else { 13544 record = this.featureList.featureRecords.find( 13545 (f2) => f2.featureTag === indexOrTag 13546 ); 13547 } 13548 if (!record) return; 13549 this.parser.currentPosition = this.featureList.start + record.featureOffset; 13550 let table = new FeatureTable(this.parser); 13551 table.featureTag = record.featureTag; 13552 return table; 13553 } 13554 getLookups(featureTable) { 13555 return featureTable.lookupListIndices.map( 13556 (index) => this.getLookup(index) 13557 ); 13558 } 13559 getLookup(lookupIndex, type) { 13560 let lookupOffset = this.lookupList.lookups[lookupIndex]; 13561 this.parser.currentPosition = this.lookupList.start + lookupOffset; 13562 return new LookupTable(this.parser, type); 13563 } 13564 }; 13565 var GSUB = class extends CommonLayoutTable { 13566 constructor(dict, dataview) { 13567 super(dict, dataview, `GSUB`); 13568 } 13569 getLookup(lookupIndex) { 13570 return super.getLookup(lookupIndex, `GSUB`); 13571 } 13572 }; 13573 var GSUB$1 = Object.freeze({ __proto__: null, GSUB }); 13574 var GPOS = class extends CommonLayoutTable { 13575 constructor(dict, dataview) { 13576 super(dict, dataview, `GPOS`); 13577 } 13578 getLookup(lookupIndex) { 13579 return super.getLookup(lookupIndex, `GPOS`); 13580 } 13581 }; 13582 var GPOS$1 = Object.freeze({ __proto__: null, GPOS }); 13583 var SVG6 = class extends SimpleTable { 13584 constructor(dict, dataview) { 13585 const { p: p22 } = super(dict, dataview); 13586 this.version = p22.uint16; 13587 this.offsetToSVGDocumentList = p22.Offset32; 13588 p22.currentPosition = this.tableStart + this.offsetToSVGDocumentList; 13589 this.documentList = new SVGDocumentList(p22); 13590 } 13591 }; 13592 var SVGDocumentList = class extends ParsedData { 13593 constructor(p22) { 13594 super(p22); 13595 this.numEntries = p22.uint16; 13596 this.documentRecords = [...new Array(this.numEntries)].map( 13597 (_) => new SVGDocumentRecord(p22) 13598 ); 13599 } 13600 getDocument(documentID) { 13601 let record = this.documentRecords[documentID]; 13602 if (!record) return ""; 13603 let offset = this.start + record.svgDocOffset; 13604 this.parser.currentPosition = offset; 13605 return this.parser.readBytes(record.svgDocLength); 13606 } 13607 getDocumentForGlyph(glyphID) { 13608 let id = this.documentRecords.findIndex( 13609 (d2) => d2.startGlyphID <= glyphID && glyphID <= d2.endGlyphID 13610 ); 13611 if (id === -1) return ""; 13612 return this.getDocument(id); 13613 } 13614 }; 13615 var SVGDocumentRecord = class { 13616 constructor(p22) { 13617 this.startGlyphID = p22.uint16; 13618 this.endGlyphID = p22.uint16; 13619 this.svgDocOffset = p22.Offset32; 13620 this.svgDocLength = p22.uint32; 13621 } 13622 }; 13623 var SVG$1 = Object.freeze({ __proto__: null, SVG: SVG6 }); 13624 var fvar = class extends SimpleTable { 13625 constructor(dict, dataview) { 13626 const { p: p22 } = super(dict, dataview); 13627 this.majorVersion = p22.uint16; 13628 this.minorVersion = p22.uint16; 13629 this.axesArrayOffset = p22.Offset16; 13630 p22.uint16; 13631 this.axisCount = p22.uint16; 13632 this.axisSize = p22.uint16; 13633 this.instanceCount = p22.uint16; 13634 this.instanceSize = p22.uint16; 13635 const axisStart = this.tableStart + this.axesArrayOffset; 13636 lazy$1(this, `axes`, () => { 13637 p22.currentPosition = axisStart; 13638 return [...new Array(this.axisCount)].map( 13639 (_) => new VariationAxisRecord(p22) 13640 ); 13641 }); 13642 const instanceStart = axisStart + this.axisCount * this.axisSize; 13643 lazy$1(this, `instances`, () => { 13644 let instances = []; 13645 for (let i2 = 0; i2 < this.instanceCount; i2++) { 13646 p22.currentPosition = instanceStart + i2 * this.instanceSize; 13647 instances.push( 13648 new InstanceRecord(p22, this.axisCount, this.instanceSize) 13649 ); 13650 } 13651 return instances; 13652 }); 13653 } 13654 getSupportedAxes() { 13655 return this.axes.map((a2) => a2.tag); 13656 } 13657 getAxis(name2) { 13658 return this.axes.find((a2) => a2.tag === name2); 13659 } 13660 }; 13661 var VariationAxisRecord = class { 13662 constructor(p22) { 13663 this.tag = p22.tag; 13664 this.minValue = p22.fixed; 13665 this.defaultValue = p22.fixed; 13666 this.maxValue = p22.fixed; 13667 this.flags = p22.flags(16); 13668 this.axisNameID = p22.uint16; 13669 } 13670 }; 13671 var InstanceRecord = class { 13672 constructor(p22, axisCount, size) { 13673 let start = p22.currentPosition; 13674 this.subfamilyNameID = p22.uint16; 13675 p22.uint16; 13676 this.coordinates = [...new Array(axisCount)].map( 13677 (_) => p22.fixed 13678 ); 13679 if (p22.currentPosition - start < size) { 13680 this.postScriptNameID = p22.uint16; 13681 } 13682 } 13683 }; 13684 var fvar$1 = Object.freeze({ __proto__: null, fvar }); 13685 var cvt = class extends SimpleTable { 13686 constructor(dict, dataview) { 13687 const { p: p22 } = super(dict, dataview); 13688 const n2 = dict.length / 2; 13689 lazy$1( 13690 this, 13691 `items`, 13692 () => [...new Array(n2)].map((_) => p22.fword) 13693 ); 13694 } 13695 }; 13696 var cvt$1 = Object.freeze({ __proto__: null, cvt }); 13697 var fpgm = class extends SimpleTable { 13698 constructor(dict, dataview) { 13699 const { p: p22 } = super(dict, dataview); 13700 lazy$1( 13701 this, 13702 `instructions`, 13703 () => [...new Array(dict.length)].map((_) => p22.uint8) 13704 ); 13705 } 13706 }; 13707 var fpgm$1 = Object.freeze({ __proto__: null, fpgm }); 13708 var gasp = class extends SimpleTable { 13709 constructor(dict, dataview) { 13710 const { p: p22 } = super(dict, dataview); 13711 this.version = p22.uint16; 13712 this.numRanges = p22.uint16; 13713 const getter = () => [...new Array(this.numRanges)].map( 13714 (_) => new GASPRange(p22) 13715 ); 13716 lazy$1(this, `gaspRanges`, getter); 13717 } 13718 }; 13719 var GASPRange = class { 13720 constructor(p22) { 13721 this.rangeMaxPPEM = p22.uint16; 13722 this.rangeGaspBehavior = p22.uint16; 13723 } 13724 }; 13725 var gasp$1 = Object.freeze({ __proto__: null, gasp }); 13726 var glyf = class extends SimpleTable { 13727 constructor(dict, dataview) { 13728 super(dict, dataview); 13729 } 13730 getGlyphData(offset, length) { 13731 this.parser.currentPosition = this.tableStart + offset; 13732 return this.parser.readBytes(length); 13733 } 13734 }; 13735 var glyf$1 = Object.freeze({ __proto__: null, glyf }); 13736 var loca = class extends SimpleTable { 13737 constructor(dict, dataview, tables) { 13738 const { p: p22 } = super(dict, dataview); 13739 const n2 = tables.maxp.numGlyphs + 1; 13740 if (tables.head.indexToLocFormat === 0) { 13741 this.x2 = true; 13742 lazy$1( 13743 this, 13744 `offsets`, 13745 () => [...new Array(n2)].map((_) => p22.Offset16) 13746 ); 13747 } else { 13748 lazy$1( 13749 this, 13750 `offsets`, 13751 () => [...new Array(n2)].map((_) => p22.Offset32) 13752 ); 13753 } 13754 } 13755 getGlyphDataOffsetAndLength(glyphID) { 13756 let offset = this.offsets[glyphID] * this.x2 ? 2 : 1; 13757 let nextOffset = this.offsets[glyphID + 1] * this.x2 ? 2 : 1; 13758 return { offset, length: nextOffset - offset }; 13759 } 13760 }; 13761 var loca$1 = Object.freeze({ __proto__: null, loca }); 13762 var prep = class extends SimpleTable { 13763 constructor(dict, dataview) { 13764 const { p: p22 } = super(dict, dataview); 13765 lazy$1( 13766 this, 13767 `instructions`, 13768 () => [...new Array(dict.length)].map((_) => p22.uint8) 13769 ); 13770 } 13771 }; 13772 var prep$1 = Object.freeze({ __proto__: null, prep }); 13773 var CFF = class extends SimpleTable { 13774 constructor(dict, dataview) { 13775 const { p: p22 } = super(dict, dataview); 13776 lazy$1(this, `data`, () => p22.readBytes()); 13777 } 13778 }; 13779 var CFF$1 = Object.freeze({ __proto__: null, CFF }); 13780 var CFF2 = class extends SimpleTable { 13781 constructor(dict, dataview) { 13782 const { p: p22 } = super(dict, dataview); 13783 lazy$1(this, `data`, () => p22.readBytes()); 13784 } 13785 }; 13786 var CFF2$1 = Object.freeze({ __proto__: null, CFF2 }); 13787 var VORG = class extends SimpleTable { 13788 constructor(dict, dataview) { 13789 const { p: p22 } = super(dict, dataview); 13790 this.majorVersion = p22.uint16; 13791 this.minorVersion = p22.uint16; 13792 this.defaultVertOriginY = p22.int16; 13793 this.numVertOriginYMetrics = p22.uint16; 13794 lazy$1( 13795 this, 13796 `vertORiginYMetrics`, 13797 () => [...new Array(this.numVertOriginYMetrics)].map( 13798 (_) => new VertOriginYMetric(p22) 13799 ) 13800 ); 13801 } 13802 }; 13803 var VertOriginYMetric = class { 13804 constructor(p22) { 13805 this.glyphIndex = p22.uint16; 13806 this.vertOriginY = p22.int16; 13807 } 13808 }; 13809 var VORG$1 = Object.freeze({ __proto__: null, VORG }); 13810 var BitmapSize = class { 13811 constructor(p22) { 13812 this.indexSubTableArrayOffset = p22.Offset32; 13813 this.indexTablesSize = p22.uint32; 13814 this.numberofIndexSubTables = p22.uint32; 13815 this.colorRef = p22.uint32; 13816 this.hori = new SbitLineMetrics(p22); 13817 this.vert = new SbitLineMetrics(p22); 13818 this.startGlyphIndex = p22.uint16; 13819 this.endGlyphIndex = p22.uint16; 13820 this.ppemX = p22.uint8; 13821 this.ppemY = p22.uint8; 13822 this.bitDepth = p22.uint8; 13823 this.flags = p22.int8; 13824 } 13825 }; 13826 var BitmapScale = class { 13827 constructor(p22) { 13828 this.hori = new SbitLineMetrics(p22); 13829 this.vert = new SbitLineMetrics(p22); 13830 this.ppemX = p22.uint8; 13831 this.ppemY = p22.uint8; 13832 this.substitutePpemX = p22.uint8; 13833 this.substitutePpemY = p22.uint8; 13834 } 13835 }; 13836 var SbitLineMetrics = class { 13837 constructor(p22) { 13838 this.ascender = p22.int8; 13839 this.descender = p22.int8; 13840 this.widthMax = p22.uint8; 13841 this.caretSlopeNumerator = p22.int8; 13842 this.caretSlopeDenominator = p22.int8; 13843 this.caretOffset = p22.int8; 13844 this.minOriginSB = p22.int8; 13845 this.minAdvanceSB = p22.int8; 13846 this.maxBeforeBL = p22.int8; 13847 this.minAfterBL = p22.int8; 13848 this.pad1 = p22.int8; 13849 this.pad2 = p22.int8; 13850 } 13851 }; 13852 var EBLC = class extends SimpleTable { 13853 constructor(dict, dataview, name2) { 13854 const { p: p22 } = super(dict, dataview, name2); 13855 this.majorVersion = p22.uint16; 13856 this.minorVersion = p22.uint16; 13857 this.numSizes = p22.uint32; 13858 lazy$1( 13859 this, 13860 `bitMapSizes`, 13861 () => [...new Array(this.numSizes)].map( 13862 (_) => new BitmapSize(p22) 13863 ) 13864 ); 13865 } 13866 }; 13867 var EBLC$1 = Object.freeze({ __proto__: null, EBLC }); 13868 var EBDT = class extends SimpleTable { 13869 constructor(dict, dataview, name2) { 13870 const { p: p22 } = super(dict, dataview, name2); 13871 this.majorVersion = p22.uint16; 13872 this.minorVersion = p22.uint16; 13873 } 13874 }; 13875 var EBDT$1 = Object.freeze({ __proto__: null, EBDT }); 13876 var EBSC = class extends SimpleTable { 13877 constructor(dict, dataview) { 13878 const { p: p22 } = super(dict, dataview); 13879 this.majorVersion = p22.uint16; 13880 this.minorVersion = p22.uint16; 13881 this.numSizes = p22.uint32; 13882 lazy$1( 13883 this, 13884 `bitmapScales`, 13885 () => [...new Array(this.numSizes)].map( 13886 (_) => new BitmapScale(p22) 13887 ) 13888 ); 13889 } 13890 }; 13891 var EBSC$1 = Object.freeze({ __proto__: null, EBSC }); 13892 var CBLC = class extends EBLC { 13893 constructor(dict, dataview) { 13894 super(dict, dataview, `CBLC`); 13895 } 13896 }; 13897 var CBLC$1 = Object.freeze({ __proto__: null, CBLC }); 13898 var CBDT = class extends EBDT { 13899 constructor(dict, dataview) { 13900 super(dict, dataview, `CBDT`); 13901 } 13902 }; 13903 var CBDT$1 = Object.freeze({ __proto__: null, CBDT }); 13904 var sbix = class extends SimpleTable { 13905 constructor(dict, dataview) { 13906 const { p: p22 } = super(dict, dataview); 13907 this.version = p22.uint16; 13908 this.flags = p22.flags(16); 13909 this.numStrikes = p22.uint32; 13910 lazy$1( 13911 this, 13912 `strikeOffsets`, 13913 () => [...new Array(this.numStrikes)].map((_) => p22.Offset32) 13914 ); 13915 } 13916 }; 13917 var sbix$1 = Object.freeze({ __proto__: null, sbix }); 13918 var COLR = class extends SimpleTable { 13919 constructor(dict, dataview) { 13920 const { p: p22 } = super(dict, dataview); 13921 this.version = p22.uint16; 13922 this.numBaseGlyphRecords = p22.uint16; 13923 this.baseGlyphRecordsOffset = p22.Offset32; 13924 this.layerRecordsOffset = p22.Offset32; 13925 this.numLayerRecords = p22.uint16; 13926 } 13927 getBaseGlyphRecord(glyphID) { 13928 let start = this.tableStart + this.baseGlyphRecordsOffset; 13929 this.parser.currentPosition = start; 13930 let first = new BaseGlyphRecord(this.parser); 13931 let firstID = first.gID; 13932 let end = this.tableStart + this.layerRecordsOffset - 6; 13933 this.parser.currentPosition = end; 13934 let last = new BaseGlyphRecord(this.parser); 13935 let lastID = last.gID; 13936 if (firstID === glyphID) return first; 13937 if (lastID === glyphID) return last; 13938 while (true) { 13939 if (start === end) break; 13940 let mid = start + (end - start) / 12; 13941 this.parser.currentPosition = mid; 13942 let middle = new BaseGlyphRecord(this.parser); 13943 let midID = middle.gID; 13944 if (midID === glyphID) return middle; 13945 else if (midID > glyphID) { 13946 end = mid; 13947 } else if (midID < glyphID) { 13948 start = mid; 13949 } 13950 } 13951 return false; 13952 } 13953 getLayers(glyphID) { 13954 let record = this.getBaseGlyphRecord(glyphID); 13955 this.parser.currentPosition = this.tableStart + this.layerRecordsOffset + 4 * record.firstLayerIndex; 13956 return [...new Array(record.numLayers)].map( 13957 (_) => new LayerRecord(p) 13958 ); 13959 } 13960 }; 13961 var BaseGlyphRecord = class { 13962 constructor(p22) { 13963 this.gID = p22.uint16; 13964 this.firstLayerIndex = p22.uint16; 13965 this.numLayers = p22.uint16; 13966 } 13967 }; 13968 var LayerRecord = class { 13969 constructor(p22) { 13970 this.gID = p22.uint16; 13971 this.paletteIndex = p22.uint16; 13972 } 13973 }; 13974 var COLR$1 = Object.freeze({ __proto__: null, COLR }); 13975 var CPAL = class extends SimpleTable { 13976 constructor(dict, dataview) { 13977 const { p: p22 } = super(dict, dataview); 13978 this.version = p22.uint16; 13979 this.numPaletteEntries = p22.uint16; 13980 const numPalettes = this.numPalettes = p22.uint16; 13981 this.numColorRecords = p22.uint16; 13982 this.offsetFirstColorRecord = p22.Offset32; 13983 this.colorRecordIndices = [...new Array(this.numPalettes)].map( 13984 (_) => p22.uint16 13985 ); 13986 lazy$1(this, `colorRecords`, () => { 13987 p22.currentPosition = this.tableStart + this.offsetFirstColorRecord; 13988 return [...new Array(this.numColorRecords)].map( 13989 (_) => new ColorRecord(p22) 13990 ); 13991 }); 13992 if (this.version === 1) { 13993 this.offsetPaletteTypeArray = p22.Offset32; 13994 this.offsetPaletteLabelArray = p22.Offset32; 13995 this.offsetPaletteEntryLabelArray = p22.Offset32; 13996 lazy$1(this, `paletteTypeArray`, () => { 13997 p22.currentPosition = this.tableStart + this.offsetPaletteTypeArray; 13998 return new PaletteTypeArray(p22, numPalettes); 13999 }); 14000 lazy$1(this, `paletteLabelArray`, () => { 14001 p22.currentPosition = this.tableStart + this.offsetPaletteLabelArray; 14002 return new PaletteLabelsArray(p22, numPalettes); 14003 }); 14004 lazy$1(this, `paletteEntryLabelArray`, () => { 14005 p22.currentPosition = this.tableStart + this.offsetPaletteEntryLabelArray; 14006 return new PaletteEntryLabelArray(p22, numPalettes); 14007 }); 14008 } 14009 } 14010 }; 14011 var ColorRecord = class { 14012 constructor(p22) { 14013 this.blue = p22.uint8; 14014 this.green = p22.uint8; 14015 this.red = p22.uint8; 14016 this.alpha = p22.uint8; 14017 } 14018 }; 14019 var PaletteTypeArray = class { 14020 constructor(p22, numPalettes) { 14021 this.paletteTypes = [...new Array(numPalettes)].map( 14022 (_) => p22.uint32 14023 ); 14024 } 14025 }; 14026 var PaletteLabelsArray = class { 14027 constructor(p22, numPalettes) { 14028 this.paletteLabels = [...new Array(numPalettes)].map( 14029 (_) => p22.uint16 14030 ); 14031 } 14032 }; 14033 var PaletteEntryLabelArray = class { 14034 constructor(p22, numPalettes) { 14035 this.paletteEntryLabels = [...new Array(numPalettes)].map( 14036 (_) => p22.uint16 14037 ); 14038 } 14039 }; 14040 var CPAL$1 = Object.freeze({ __proto__: null, CPAL }); 14041 var DSIG = class extends SimpleTable { 14042 constructor(dict, dataview) { 14043 const { p: p22 } = super(dict, dataview); 14044 this.version = p22.uint32; 14045 this.numSignatures = p22.uint16; 14046 this.flags = p22.uint16; 14047 this.signatureRecords = [...new Array(this.numSignatures)].map( 14048 (_) => new SignatureRecord(p22) 14049 ); 14050 } 14051 getData(signatureID) { 14052 const record = this.signatureRecords[signatureID]; 14053 this.parser.currentPosition = this.tableStart + record.offset; 14054 return new SignatureBlockFormat1(this.parser); 14055 } 14056 }; 14057 var SignatureRecord = class { 14058 constructor(p22) { 14059 this.format = p22.uint32; 14060 this.length = p22.uint32; 14061 this.offset = p22.Offset32; 14062 } 14063 }; 14064 var SignatureBlockFormat1 = class { 14065 constructor(p22) { 14066 p22.uint16; 14067 p22.uint16; 14068 this.signatureLength = p22.uint32; 14069 this.signature = p22.readBytes(this.signatureLength); 14070 } 14071 }; 14072 var DSIG$1 = Object.freeze({ __proto__: null, DSIG }); 14073 var hdmx = class extends SimpleTable { 14074 constructor(dict, dataview, tables) { 14075 const { p: p22 } = super(dict, dataview); 14076 const numGlyphs = tables.hmtx.numGlyphs; 14077 this.version = p22.uint16; 14078 this.numRecords = p22.int16; 14079 this.sizeDeviceRecord = p22.int32; 14080 this.records = [...new Array(numRecords)].map( 14081 (_) => new DeviceRecord(p22, numGlyphs) 14082 ); 14083 } 14084 }; 14085 var DeviceRecord = class { 14086 constructor(p22, numGlyphs) { 14087 this.pixelSize = p22.uint8; 14088 this.maxWidth = p22.uint8; 14089 this.widths = p22.readBytes(numGlyphs); 14090 } 14091 }; 14092 var hdmx$1 = Object.freeze({ __proto__: null, hdmx }); 14093 var kern = class extends SimpleTable { 14094 constructor(dict, dataview) { 14095 const { p: p22 } = super(dict, dataview); 14096 this.version = p22.uint16; 14097 this.nTables = p22.uint16; 14098 lazy$1(this, `tables`, () => { 14099 let offset = this.tableStart + 4; 14100 const tables = []; 14101 for (let i2 = 0; i2 < this.nTables; i2++) { 14102 p22.currentPosition = offset; 14103 let subtable = new KernSubTable(p22); 14104 tables.push(subtable); 14105 offset += subtable; 14106 } 14107 return tables; 14108 }); 14109 } 14110 }; 14111 var KernSubTable = class { 14112 constructor(p22) { 14113 this.version = p22.uint16; 14114 this.length = p22.uint16; 14115 this.coverage = p22.flags(8); 14116 this.format = p22.uint8; 14117 if (this.format === 0) { 14118 this.nPairs = p22.uint16; 14119 this.searchRange = p22.uint16; 14120 this.entrySelector = p22.uint16; 14121 this.rangeShift = p22.uint16; 14122 lazy$1( 14123 this, 14124 `pairs`, 14125 () => [...new Array(this.nPairs)].map((_) => new Pair(p22)) 14126 ); 14127 } 14128 if (this.format === 2) { 14129 console.warn( 14130 `Kern subtable format 2 is not supported: this parser currently only parses universal table data.` 14131 ); 14132 } 14133 } 14134 get horizontal() { 14135 return this.coverage[0]; 14136 } 14137 get minimum() { 14138 return this.coverage[1]; 14139 } 14140 get crossstream() { 14141 return this.coverage[2]; 14142 } 14143 get override() { 14144 return this.coverage[3]; 14145 } 14146 }; 14147 var Pair = class { 14148 constructor(p22) { 14149 this.left = p22.uint16; 14150 this.right = p22.uint16; 14151 this.value = p22.fword; 14152 } 14153 }; 14154 var kern$1 = Object.freeze({ __proto__: null, kern }); 14155 var LTSH = class extends SimpleTable { 14156 constructor(dict, dataview) { 14157 const { p: p22 } = super(dict, dataview); 14158 this.version = p22.uint16; 14159 this.numGlyphs = p22.uint16; 14160 this.yPels = p22.readBytes(this.numGlyphs); 14161 } 14162 }; 14163 var LTSH$1 = Object.freeze({ __proto__: null, LTSH }); 14164 var MERG = class extends SimpleTable { 14165 constructor(dict, dataview) { 14166 const { p: p22 } = super(dict, dataview); 14167 this.version = p22.uint16; 14168 this.mergeClassCount = p22.uint16; 14169 this.mergeDataOffset = p22.Offset16; 14170 this.classDefCount = p22.uint16; 14171 this.offsetToClassDefOffsets = p22.Offset16; 14172 lazy$1( 14173 this, 14174 `mergeEntryMatrix`, 14175 () => [...new Array(this.mergeClassCount)].map( 14176 (_) => p22.readBytes(this.mergeClassCount) 14177 ) 14178 ); 14179 console.warn(`Full MERG parsing is currently not supported.`); 14180 console.warn( 14181 `If you need this table parsed, please file an issue, or better yet, a PR.` 14182 ); 14183 } 14184 }; 14185 var MERG$1 = Object.freeze({ __proto__: null, MERG }); 14186 var meta = class extends SimpleTable { 14187 constructor(dict, dataview) { 14188 const { p: p22 } = super(dict, dataview); 14189 this.version = p22.uint32; 14190 this.flags = p22.uint32; 14191 p22.uint32; 14192 this.dataMapsCount = p22.uint32; 14193 this.dataMaps = [...new Array(this.dataMapsCount)].map( 14194 (_) => new DataMap(this.tableStart, p22) 14195 ); 14196 } 14197 }; 14198 var DataMap = class { 14199 constructor(tableStart, p22) { 14200 this.tableStart = tableStart; 14201 this.parser = p22; 14202 this.tag = p22.tag; 14203 this.dataOffset = p22.Offset32; 14204 this.dataLength = p22.uint32; 14205 } 14206 getData() { 14207 this.parser.currentField = this.tableStart + this.dataOffset; 14208 return this.parser.readBytes(this.dataLength); 14209 } 14210 }; 14211 var meta$1 = Object.freeze({ __proto__: null, meta }); 14212 var PCLT = class extends SimpleTable { 14213 constructor(dict, dataview) { 14214 super(dict, dataview); 14215 console.warn( 14216 `This font uses a PCLT table, which is currently not supported by this parser.` 14217 ); 14218 console.warn( 14219 `If you need this table parsed, please file an issue, or better yet, a PR.` 14220 ); 14221 } 14222 }; 14223 var PCLT$1 = Object.freeze({ __proto__: null, PCLT }); 14224 var VDMX = class extends SimpleTable { 14225 constructor(dict, dataview) { 14226 const { p: p22 } = super(dict, dataview); 14227 this.version = p22.uint16; 14228 this.numRecs = p22.uint16; 14229 this.numRatios = p22.uint16; 14230 this.ratRanges = [...new Array(this.numRatios)].map( 14231 (_) => new RatioRange(p22) 14232 ); 14233 this.offsets = [...new Array(this.numRatios)].map( 14234 (_) => p22.Offset16 14235 ); 14236 this.VDMXGroups = [...new Array(this.numRecs)].map( 14237 (_) => new VDMXGroup(p22) 14238 ); 14239 } 14240 }; 14241 var RatioRange = class { 14242 constructor(p22) { 14243 this.bCharSet = p22.uint8; 14244 this.xRatio = p22.uint8; 14245 this.yStartRatio = p22.uint8; 14246 this.yEndRatio = p22.uint8; 14247 } 14248 }; 14249 var VDMXGroup = class { 14250 constructor(p22) { 14251 this.recs = p22.uint16; 14252 this.startsz = p22.uint8; 14253 this.endsz = p22.uint8; 14254 this.records = [...new Array(this.recs)].map( 14255 (_) => new vTable(p22) 14256 ); 14257 } 14258 }; 14259 var vTable = class { 14260 constructor(p22) { 14261 this.yPelHeight = p22.uint16; 14262 this.yMax = p22.int16; 14263 this.yMin = p22.int16; 14264 } 14265 }; 14266 var VDMX$1 = Object.freeze({ __proto__: null, VDMX }); 14267 var vhea = class extends SimpleTable { 14268 constructor(dict, dataview) { 14269 const { p: p22 } = super(dict, dataview); 14270 this.version = p22.fixed; 14271 this.ascent = this.vertTypoAscender = p22.int16; 14272 this.descent = this.vertTypoDescender = p22.int16; 14273 this.lineGap = this.vertTypoLineGap = p22.int16; 14274 this.advanceHeightMax = p22.int16; 14275 this.minTopSideBearing = p22.int16; 14276 this.minBottomSideBearing = p22.int16; 14277 this.yMaxExtent = p22.int16; 14278 this.caretSlopeRise = p22.int16; 14279 this.caretSlopeRun = p22.int16; 14280 this.caretOffset = p22.int16; 14281 this.reserved = p22.int16; 14282 this.reserved = p22.int16; 14283 this.reserved = p22.int16; 14284 this.reserved = p22.int16; 14285 this.metricDataFormat = p22.int16; 14286 this.numOfLongVerMetrics = p22.uint16; 14287 p22.verifyLength(); 14288 } 14289 }; 14290 var vhea$1 = Object.freeze({ __proto__: null, vhea }); 14291 var vmtx = class extends SimpleTable { 14292 constructor(dict, dataview, tables) { 14293 super(dict, dataview); 14294 const numOfLongVerMetrics = tables.vhea.numOfLongVerMetrics; 14295 const numGlyphs = tables.maxp.numGlyphs; 14296 const metricsStart = p.currentPosition; 14297 lazy(this, `vMetrics`, () => { 14298 p.currentPosition = metricsStart; 14299 return [...new Array(numOfLongVerMetrics)].map( 14300 (_) => new LongVertMetric(p.uint16, p.int16) 14301 ); 14302 }); 14303 if (numOfLongVerMetrics < numGlyphs) { 14304 const tsbStart = metricsStart + numOfLongVerMetrics * 4; 14305 lazy(this, `topSideBearings`, () => { 14306 p.currentPosition = tsbStart; 14307 return [...new Array(numGlyphs - numOfLongVerMetrics)].map( 14308 (_) => p.int16 14309 ); 14310 }); 14311 } 14312 } 14313 }; 14314 var LongVertMetric = class { 14315 constructor(h2, b2) { 14316 this.advanceHeight = h2; 14317 this.topSideBearing = b2; 14318 } 14319 }; 14320 var vmtx$1 = Object.freeze({ __proto__: null, vmtx }); 14321 14322 // packages/global-styles-ui/build-module/font-library/utils/make-families-from-faces.js 14323 var import_components29 = __toESM(require_components()); 14324 var { kebabCase: kebabCase2 } = unlock(import_components29.privateApis); 14325 function makeFamiliesFromFaces(fontFaces) { 14326 const fontFamiliesObject = fontFaces.reduce( 14327 (acc, item) => { 14328 if (!acc[item.fontFamily]) { 14329 acc[item.fontFamily] = { 14330 name: item.fontFamily, 14331 fontFamily: item.fontFamily, 14332 slug: kebabCase2(item.fontFamily.toLowerCase()), 14333 fontFace: [] 14334 }; 14335 } 14336 acc[item.fontFamily].fontFace.push(item); 14337 return acc; 14338 }, 14339 {} 14340 ); 14341 return Object.values(fontFamiliesObject); 14342 } 14343 14344 // packages/global-styles-ui/build-module/font-library/upload-fonts.js 14345 var import_jsx_runtime37 = __toESM(require_jsx_runtime()); 14346 function UploadFonts() { 14347 const { installFonts } = (0, import_element18.useContext)(FontLibraryContext); 14348 const [isUploading, setIsUploading] = (0, import_element18.useState)(false); 14349 const [notice, setNotice] = (0, import_element18.useState)(null); 14350 const handleDropZone = (files) => { 14351 handleFilesUpload(files); 14352 }; 14353 const onFilesUpload = (event) => { 14354 handleFilesUpload(event.target.files); 14355 }; 14356 const handleFilesUpload = async (files) => { 14357 if (!files) { 14358 return; 14359 } 14360 setNotice(null); 14361 setIsUploading(true); 14362 const uniqueFilenames = /* @__PURE__ */ new Set(); 14363 const selectedFiles = [...files]; 14364 let hasInvalidFiles = false; 14365 const checkFilesPromises = selectedFiles.map(async (file) => { 14366 const isFont = await isFontFile(file); 14367 if (!isFont) { 14368 hasInvalidFiles = true; 14369 return null; 14370 } 14371 if (uniqueFilenames.has(file.name)) { 14372 return null; 14373 } 14374 const fileExtension = (((file.name ?? "").split(".") ?? []).pop() ?? "").toLowerCase(); 14375 if (ALLOWED_FILE_EXTENSIONS.includes(fileExtension)) { 14376 uniqueFilenames.add(file.name); 14377 return file; 14378 } 14379 return null; 14380 }); 14381 const allowedFiles = (await Promise.all(checkFilesPromises)).filter((file) => null !== file); 14382 if (allowedFiles.length > 0) { 14383 loadFiles(allowedFiles); 14384 } else { 14385 const message = hasInvalidFiles ? (0, import_i18n16.__)("Sorry, you are not allowed to upload this file type.") : (0, import_i18n16.__)("No fonts found to install."); 14386 setNotice({ 14387 type: "error", 14388 message 14389 }); 14390 setIsUploading(false); 14391 } 14392 }; 14393 const loadFiles = async (files) => { 14394 const fontFacesLoaded = await Promise.all( 14395 files.map(async (fontFile) => { 14396 const fontFaceData = await getFontFaceMetadata(fontFile); 14397 await loadFontFaceInBrowser( 14398 fontFaceData, 14399 fontFaceData.file, 14400 "all" 14401 ); 14402 return fontFaceData; 14403 }) 14404 ); 14405 handleInstall(fontFacesLoaded); 14406 }; 14407 async function isFontFile(file) { 14408 const font2 = new Font("Uploaded Font"); 14409 try { 14410 const buffer = await readFileAsArrayBuffer(file); 14411 await font2.fromDataBuffer(buffer, "font"); 14412 return true; 14413 } catch (error) { 14414 return false; 14415 } 14416 } 14417 async function readFileAsArrayBuffer(file) { 14418 return new Promise((resolve, reject) => { 14419 const reader = new window.FileReader(); 14420 reader.readAsArrayBuffer(file); 14421 reader.onload = () => resolve(reader.result); 14422 reader.onerror = reject; 14423 }); 14424 } 14425 const getFontFaceMetadata = async (fontFile) => { 14426 const buffer = await readFileAsArrayBuffer(fontFile); 14427 const fontObj = new Font("Uploaded Font"); 14428 fontObj.fromDataBuffer(buffer, fontFile.name); 14429 const onloadEvent = await new Promise( 14430 (resolve) => fontObj.onload = resolve 14431 ); 14432 const font2 = onloadEvent.detail.font; 14433 const { name: name2 } = font2.opentype.tables; 14434 const fontName = name2.get(16) || name2.get(1); 14435 const isItalic = name2.get(2).toLowerCase().includes("italic"); 14436 const fontWeight = font2.opentype.tables["OS/2"].usWeightClass || "normal"; 14437 const isVariable = !!font2.opentype.tables.fvar; 14438 const weightAxis = isVariable && font2.opentype.tables.fvar.axes.find( 14439 ({ tag }) => tag === "wght" 14440 ); 14441 const weightRange = weightAxis ? `$weightAxis.minValue} $weightAxis.maxValue}` : null; 14442 return { 14443 file: fontFile, 14444 fontFamily: fontName, 14445 fontStyle: isItalic ? "italic" : "normal", 14446 fontWeight: weightRange || fontWeight 14447 }; 14448 }; 14449 const handleInstall = async (fontFaces) => { 14450 const fontFamilies = makeFamiliesFromFaces(fontFaces); 14451 try { 14452 await installFonts(fontFamilies); 14453 setNotice({ 14454 type: "success", 14455 message: (0, import_i18n16.__)("Fonts were installed successfully.") 14456 }); 14457 } catch (error) { 14458 const typedError = error; 14459 setNotice({ 14460 type: "error", 14461 message: typedError.message, 14462 errors: typedError?.installationErrors 14463 }); 14464 } 14465 setIsUploading(false); 14466 }; 14467 return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ 14468 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.DropZone, { onFilesDrop: handleDropZone }), 14469 /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_components30.__experimentalVStack, { className: "font-library__local-fonts", children: [ 14470 notice && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)( 14471 import_components30.Notice, 14472 { 14473 status: notice.type, 14474 __unstableHTML: true, 14475 onRemove: () => setNotice(null), 14476 children: [ 14477 notice.message, 14478 notice.errors && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("ul", { children: notice.errors.map((error, index) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("li", { children: error }, index)) }) 14479 ] 14480 } 14481 ), 14482 isUploading && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "font-library__upload-area", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.ProgressBar, {}) }) }), 14483 !isUploading && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 14484 import_components30.FormFileUpload, 14485 { 14486 accept: ALLOWED_FILE_EXTENSIONS.map( 14487 (ext) => `.$ext}` 14488 ).join(","), 14489 multiple: true, 14490 onChange: onFilesUpload, 14491 render: ({ openFileDialog }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 14492 import_components30.Button, 14493 { 14494 __next40pxDefaultSize: true, 14495 className: "font-library__upload-area", 14496 onClick: openFileDialog, 14497 children: (0, import_i18n16.__)("Upload font") 14498 } 14499 ) 14500 } 14501 ), 14502 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.__experimentalSpacer, { margin: 2 }), 14503 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components30.__experimentalText, { className: "font-library__upload-area__text", children: (0, import_i18n16.__)( 14504 "Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2." 14505 ) }) 14506 ] }) 14507 ] }); 14508 } 14509 var upload_fonts_default = UploadFonts; 14510 14511 // packages/global-styles-ui/build-module/font-library/modal.js 14512 var import_jsx_runtime38 = __toESM(require_jsx_runtime()); 14513 var { Tabs } = unlock(import_components31.privateApis); 14514 var DEFAULT_TAB = { 14515 id: "installed-fonts", 14516 title: (0, import_i18n17._x)("Library", "Font library") 14517 }; 14518 var UPLOAD_TAB = { 14519 id: "upload-fonts", 14520 title: (0, import_i18n17._x)("Upload", "noun") 14521 }; 14522 14523 // packages/global-styles-ui/build-module/font-family-item.js 14524 var import_i18n18 = __toESM(require_i18n()); 14525 var import_components32 = __toESM(require_components()); 14526 var import_element19 = __toESM(require_element()); 14527 var import_jsx_runtime39 = __toESM(require_jsx_runtime()); 14528 14529 // packages/global-styles-ui/build-module/font-families.js 14530 var import_jsx_runtime40 = __toESM(require_jsx_runtime()); 14531 14532 // packages/global-styles-ui/build-module/font-sizes/font-sizes-count.js 14533 var import_i18n20 = __toESM(require_i18n()); 14534 var import_components34 = __toESM(require_components()); 14535 var import_jsx_runtime41 = __toESM(require_jsx_runtime()); 14536 14537 // packages/global-styles-ui/build-module/screen-typography.js 14538 var import_jsx_runtime42 = __toESM(require_jsx_runtime()); 14539 14540 // packages/global-styles-ui/build-module/screen-typography-element.js 14541 var import_i18n22 = __toESM(require_i18n()); 14542 var import_components36 = __toESM(require_components()); 14543 var import_element22 = __toESM(require_element()); 14544 14545 // packages/global-styles-ui/build-module/typography-panel.js 14546 var import_block_editor5 = __toESM(require_block_editor()); 14547 var import_jsx_runtime43 = __toESM(require_jsx_runtime()); 14548 var { useSettingsForBlockElement: useSettingsForBlockElement4, TypographyPanel: StylesTypographyPanel2 } = unlock(import_block_editor5.privateApis); 14549 14550 // packages/global-styles-ui/build-module/typography-preview.js 14551 var import_jsx_runtime44 = __toESM(require_jsx_runtime()); 14552 14553 // packages/global-styles-ui/build-module/screen-typography-element.js 14554 var import_jsx_runtime45 = __toESM(require_jsx_runtime()); 14555 var elements = { 14556 text: { 14557 description: (0, import_i18n22.__)("Manage the fonts used on the site."), 14558 title: (0, import_i18n22.__)("Text") 14559 }, 14560 link: { 14561 description: (0, import_i18n22.__)("Manage the fonts and typography used on the links."), 14562 title: (0, import_i18n22.__)("Links") 14563 }, 14564 heading: { 14565 description: (0, import_i18n22.__)("Manage the fonts and typography used on headings."), 14566 title: (0, import_i18n22.__)("Headings") 14567 }, 14568 caption: { 14569 description: (0, import_i18n22.__)("Manage the fonts and typography used on captions."), 14570 title: (0, import_i18n22.__)("Captions") 14571 }, 14572 button: { 14573 description: (0, import_i18n22.__)("Manage the fonts and typography used on buttons."), 14574 title: (0, import_i18n22.__)("Buttons") 14575 } 14576 }; 14577 14578 // packages/global-styles-ui/build-module/screen-colors.js 14579 var import_i18n24 = __toESM(require_i18n()); 14580 var import_components39 = __toESM(require_components()); 14581 var import_block_editor6 = __toESM(require_block_editor()); 14582 14583 // packages/global-styles-ui/build-module/palette.js 14584 var import_components38 = __toESM(require_components()); 14585 var import_i18n23 = __toESM(require_i18n()); 14586 var import_element23 = __toESM(require_element()); 14587 14588 // packages/global-styles-ui/build-module/color-indicator-wrapper.js 14589 var import_components37 = __toESM(require_components()); 14590 var import_jsx_runtime46 = __toESM(require_jsx_runtime()); 14591 14592 // packages/global-styles-ui/build-module/palette.js 14593 var import_jsx_runtime47 = __toESM(require_jsx_runtime()); 14594 14595 // packages/global-styles-ui/build-module/screen-colors.js 14596 var import_jsx_runtime48 = __toESM(require_jsx_runtime()); 14597 var { useSettingsForBlockElement: useSettingsForBlockElement5, ColorPanel: StylesColorPanel2 } = unlock( 14598 import_block_editor6.privateApis 14599 ); 14600 14601 // packages/global-styles-ui/build-module/screen-color-palette.js 14602 var import_i18n27 = __toESM(require_i18n()); 14603 var import_components44 = __toESM(require_components()); 14604 14605 // packages/global-styles-ui/build-module/color-palette-panel.js 14606 var import_compose4 = __toESM(require_compose()); 14607 var import_components42 = __toESM(require_components()); 14608 var import_i18n25 = __toESM(require_i18n()); 14609 14610 // packages/global-styles-ui/build-module/variations/variations-color.js 14611 var import_components41 = __toESM(require_components()); 14612 14613 // packages/global-styles-ui/build-module/preview-colors.js 14614 var import_components40 = __toESM(require_components()); 14615 14616 // packages/global-styles-ui/build-module/preset-colors.js 14617 var import_jsx_runtime49 = __toESM(require_jsx_runtime()); 14618 function PresetColors() { 14619 const { paletteColors } = useStylesPreviewColors(); 14620 return paletteColors.slice(0, 4).map(({ slug, color }, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( 14621 "div", 14622 { 14623 style: { 14624 flexGrow: 1, 14625 height: "100%", 14626 background: color 14627 } 14628 }, 14629 `$slug}-$index}` 14630 )); 14631 } 14632 14633 // packages/global-styles-ui/build-module/preview-colors.js 14634 var import_jsx_runtime50 = __toESM(require_jsx_runtime()); 14635 var firstFrameVariants2 = { 14636 start: { 14637 scale: 1, 14638 opacity: 1 14639 }, 14640 hover: { 14641 scale: 0, 14642 opacity: 0 14643 } 14644 }; 14645 var StylesPreviewColors = ({ 14646 label, 14647 isFocused, 14648 withHoverView 14649 }) => { 14650 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( 14651 preview_wrapper_default, 14652 { 14653 label, 14654 isFocused, 14655 withHoverView, 14656 children: ({ key }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( 14657 import_components40.__unstableMotion.div, 14658 { 14659 variants: firstFrameVariants2, 14660 style: { 14661 height: "100%", 14662 overflow: "hidden" 14663 }, 14664 children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( 14665 import_components40.__experimentalHStack, 14666 { 14667 spacing: 0, 14668 justify: "center", 14669 style: { 14670 height: "100%", 14671 overflow: "hidden" 14672 }, 14673 children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(PresetColors, {}) 14674 } 14675 ) 14676 }, 14677 key 14678 ) 14679 } 14680 ); 14681 }; 14682 var preview_colors_default = StylesPreviewColors; 14683 14684 // packages/global-styles-ui/build-module/variations/variations-color.js 14685 var import_jsx_runtime51 = __toESM(require_jsx_runtime()); 14686 var propertiesToFilter2 = ["color"]; 14687 function ColorVariations({ 14688 title, 14689 gap = 2 14690 }) { 14691 const colorVariations = useCurrentMergeThemeStyleVariationsWithUserConfig(propertiesToFilter2); 14692 if (colorVariations?.length <= 1) { 14693 return null; 14694 } 14695 return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_components41.__experimentalVStack, { spacing: 3, children: [ 14696 title && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Subtitle, { level: 3, children: title }), 14697 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_components41.__experimentalGrid, { gap, children: colorVariations.map((variation, index) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( 14698 Variation, 14699 { 14700 variation, 14701 isPill: true, 14702 properties: propertiesToFilter2, 14703 showTooltip: true, 14704 children: () => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(preview_colors_default, {}) 14705 }, 14706 index 14707 )) }) 14708 ] }); 14709 } 14710 14711 // packages/global-styles-ui/build-module/color-palette-panel.js 14712 var import_jsx_runtime52 = __toESM(require_jsx_runtime()); 14713 14714 // packages/global-styles-ui/build-module/gradients-palette-panel.js 14715 var import_compose5 = __toESM(require_compose()); 14716 var import_components43 = __toESM(require_components()); 14717 var import_i18n26 = __toESM(require_i18n()); 14718 var import_jsx_runtime53 = __toESM(require_jsx_runtime()); 14719 14720 // packages/global-styles-ui/build-module/screen-color-palette.js 14721 var import_jsx_runtime54 = __toESM(require_jsx_runtime()); 14722 var { Tabs: Tabs2 } = unlock(import_components44.privateApis); 14723 14724 // packages/global-styles-ui/build-module/screen-background.js 14725 var import_i18n28 = __toESM(require_i18n()); 14726 var import_block_editor8 = __toESM(require_block_editor()); 14727 var import_components45 = __toESM(require_components()); 14728 14729 // packages/global-styles-ui/build-module/background-panel.js 14730 var import_block_editor7 = __toESM(require_block_editor()); 14731 var import_jsx_runtime55 = __toESM(require_jsx_runtime()); 14732 var { BackgroundPanel: StylesBackgroundPanel2 } = unlock( 14733 import_block_editor7.privateApis 14734 ); 14735 14736 // packages/global-styles-ui/build-module/screen-background.js 14737 var import_jsx_runtime56 = __toESM(require_jsx_runtime()); 14738 var { useHasBackgroundPanel: useHasBackgroundPanel3 } = unlock(import_block_editor8.privateApis); 14739 14740 // packages/global-styles-ui/build-module/shadows-panel.js 14741 var import_components47 = __toESM(require_components()); 14742 var import_i18n30 = __toESM(require_i18n()); 14743 var import_element24 = __toESM(require_element()); 14744 14745 // packages/global-styles-ui/build-module/confirm-reset-shadow-dialog.js 14746 var import_components46 = __toESM(require_components()); 14747 var import_i18n29 = __toESM(require_i18n()); 14748 var import_jsx_runtime57 = __toESM(require_jsx_runtime()); 14749 14750 // packages/global-styles-ui/build-module/shadows-panel.js 14751 var import_jsx_runtime58 = __toESM(require_jsx_runtime()); 14752 var { Menu } = unlock(import_components47.privateApis); 14753 14754 // packages/global-styles-ui/build-module/shadows-edit-panel.js 14755 var import_components48 = __toESM(require_components()); 14756 var import_i18n31 = __toESM(require_i18n()); 14757 var import_element25 = __toESM(require_element()); 14758 var import_jsx_runtime59 = __toESM(require_jsx_runtime()); 14759 var { Menu: Menu2 } = unlock(import_components48.privateApis); 14760 var customShadowMenuItems = [ 14761 { 14762 label: (0, import_i18n31.__)("Rename"), 14763 action: "rename" 14764 }, 14765 { 14766 label: (0, import_i18n31.__)("Delete"), 14767 action: "delete" 14768 } 14769 ]; 14770 var presetShadowMenuItems = [ 14771 { 14772 label: (0, import_i18n31.__)("Reset"), 14773 action: "reset" 14774 } 14775 ]; 14776 14777 // packages/global-styles-ui/build-module/screen-shadows.js 14778 var import_jsx_runtime60 = __toESM(require_jsx_runtime()); 14779 14780 // packages/global-styles-ui/build-module/screen-layout.js 14781 var import_i18n32 = __toESM(require_i18n()); 14782 var import_block_editor10 = __toESM(require_block_editor()); 14783 14784 // packages/global-styles-ui/build-module/dimensions-panel.js 14785 var import_block_editor9 = __toESM(require_block_editor()); 14786 var import_element26 = __toESM(require_element()); 14787 var import_jsx_runtime61 = __toESM(require_jsx_runtime()); 14788 var { useSettingsForBlockElement: useSettingsForBlockElement6, DimensionsPanel: StylesDimensionsPanel2 } = unlock(import_block_editor9.privateApis); 14789 14790 // packages/global-styles-ui/build-module/screen-layout.js 14791 var import_jsx_runtime62 = __toESM(require_jsx_runtime()); 14792 var { useHasDimensionsPanel: useHasDimensionsPanel4, useSettingsForBlockElement: useSettingsForBlockElement7 } = unlock( 14793 import_block_editor10.privateApis 14794 ); 14795 14796 // packages/global-styles-ui/build-module/screen-style-variations.js 14797 var import_components51 = __toESM(require_components()); 14798 var import_i18n35 = __toESM(require_i18n()); 14799 14800 // packages/global-styles-ui/build-module/style-variations-content.js 14801 var import_i18n34 = __toESM(require_i18n()); 14802 var import_components50 = __toESM(require_components()); 14803 14804 // packages/global-styles-ui/build-module/style-variations-container.js 14805 var import_core_data9 = __toESM(require_core_data()); 14806 var import_data9 = __toESM(require_data()); 14807 var import_element27 = __toESM(require_element()); 14808 var import_components49 = __toESM(require_components()); 14809 var import_i18n33 = __toESM(require_i18n()); 14810 var import_jsx_runtime63 = __toESM(require_jsx_runtime()); 14811 function StyleVariationsContainer({ 14812 gap = 2 14813 }) { 14814 const { user } = (0, import_element27.useContext)(GlobalStylesContext); 14815 const userStyles = user?.styles; 14816 const variations = (0, import_data9.useSelect)((select) => { 14817 const result = select( 14818 import_core_data9.store 14819 ).__experimentalGetCurrentThemeGlobalStylesVariations(); 14820 return Array.isArray(result) ? result : void 0; 14821 }, []); 14822 const fullStyleVariations = variations?.filter( 14823 (variation) => { 14824 return !isVariationWithProperties(variation, ["color"]) && !isVariationWithProperties(variation, [ 14825 "typography", 14826 "spacing" 14827 ]); 14828 } 14829 ); 14830 const themeVariations = (0, import_element27.useMemo)(() => { 14831 const withEmptyVariation = [ 14832 { 14833 title: (0, import_i18n33.__)("Default"), 14834 settings: {}, 14835 styles: {} 14836 }, 14837 ...fullStyleVariations ?? [] 14838 ]; 14839 return [ 14840 ...withEmptyVariation.map((variation) => { 14841 const blockStyles = variation?.styles?.blocks ? { ...variation.styles.blocks } : {}; 14842 if (userStyles?.blocks) { 14843 Object.keys(userStyles.blocks).forEach((blockName) => { 14844 if (userStyles.blocks?.[blockName]?.css) { 14845 const variationBlockStyles = blockStyles[blockName] || {}; 14846 const customCSS = { 14847 css: `$blockStyles[blockName]?.css || ""} $userStyles.blocks?.[blockName]?.css?.trim() || ""}` 14848 }; 14849 blockStyles[blockName] = { 14850 ...variationBlockStyles, 14851 ...customCSS 14852 }; 14853 } 14854 }); 14855 } 14856 const css2 = userStyles?.css || variation.styles?.css ? { 14857 css: `$variation.styles?.css || ""} $userStyles?.css || ""}` 14858 } : {}; 14859 const blocks = Object.keys(blockStyles).length > 0 ? { blocks: blockStyles } : {}; 14860 const styles = { 14861 ...variation.styles, 14862 ...css2, 14863 ...blocks 14864 }; 14865 return { 14866 ...variation, 14867 settings: variation.settings ?? {}, 14868 styles 14869 }; 14870 }) 14871 ]; 14872 }, [fullStyleVariations, userStyles?.blocks, userStyles?.css]); 14873 if (!fullStyleVariations || fullStyleVariations.length < 1) { 14874 return null; 14875 } 14876 return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( 14877 import_components49.__experimentalGrid, 14878 { 14879 columns: 2, 14880 className: "global-styles-ui-style-variations-container", 14881 gap, 14882 children: themeVariations.map( 14883 (variation, index) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Variation, { variation, children: (isFocused) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( 14884 preview_styles_default, 14885 { 14886 label: variation?.title, 14887 withHoverView: true, 14888 isFocused, 14889 variation 14890 } 14891 ) }, index) 14892 ) 14893 } 14894 ); 14895 } 14896 var style_variations_container_default = StyleVariationsContainer; 14897 14898 // packages/global-styles-ui/build-module/style-variations-content.js 14899 var import_jsx_runtime64 = __toESM(require_jsx_runtime()); 14900 14901 // packages/global-styles-ui/build-module/screen-style-variations.js 14902 var import_jsx_runtime65 = __toESM(require_jsx_runtime()); 14903 14904 // packages/global-styles-ui/build-module/screen-css.js 14905 var import_i18n36 = __toESM(require_i18n()); 14906 var import_components52 = __toESM(require_components()); 14907 var import_block_editor11 = __toESM(require_block_editor()); 14908 var import_jsx_runtime66 = __toESM(require_jsx_runtime()); 14909 var { AdvancedPanel: StylesAdvancedPanel2 } = unlock(import_block_editor11.privateApis); 14910 14911 // packages/global-styles-ui/build-module/screen-revisions/index.js 14912 var import_i18n39 = __toESM(require_i18n()); 14913 var import_components55 = __toESM(require_components()); 14914 var import_element29 = __toESM(require_element()); 14915 14916 // packages/global-styles-ui/build-module/screen-revisions/use-global-styles-revisions.js 14917 var import_data10 = __toESM(require_data()); 14918 var import_core_data10 = __toESM(require_core_data()); 14919 var import_element28 = __toESM(require_element()); 14920 14921 // packages/global-styles-ui/build-module/screen-revisions/revisions-buttons.js 14922 var import_i18n37 = __toESM(require_i18n()); 14923 var import_components53 = __toESM(require_components()); 14924 var import_date = __toESM(require_date()); 14925 var import_core_data11 = __toESM(require_core_data()); 14926 var import_data11 = __toESM(require_data()); 14927 var import_keycodes2 = __toESM(require_keycodes()); 14928 var import_jsx_runtime67 = __toESM(require_jsx_runtime()); 14929 var DAY_IN_MILLISECONDS = 60 * 60 * 1e3 * 24; 14930 14931 // packages/global-styles-ui/build-module/pagination/index.js 14932 var import_components54 = __toESM(require_components()); 14933 var import_i18n38 = __toESM(require_i18n()); 14934 var import_jsx_runtime68 = __toESM(require_jsx_runtime()); 14935 14936 // packages/global-styles-ui/build-module/screen-revisions/index.js 14937 var import_jsx_runtime69 = __toESM(require_jsx_runtime()); 14938 14939 // packages/global-styles-ui/build-module/font-sizes/font-sizes.js 14940 var import_i18n41 = __toESM(require_i18n()); 14941 var import_components57 = __toESM(require_components()); 14942 var import_element30 = __toESM(require_element()); 14943 14944 // packages/global-styles-ui/build-module/font-sizes/confirm-reset-font-sizes-dialog.js 14945 var import_components56 = __toESM(require_components()); 14946 var import_i18n40 = __toESM(require_i18n()); 14947 var import_jsx_runtime70 = __toESM(require_jsx_runtime()); 14948 14949 // packages/global-styles-ui/build-module/font-sizes/font-sizes.js 14950 var import_jsx_runtime71 = __toESM(require_jsx_runtime()); 14951 var { Menu: Menu3 } = unlock(import_components57.privateApis); 14952 14953 // packages/global-styles-ui/build-module/font-sizes/font-size.js 14954 var import_i18n45 = __toESM(require_i18n()); 14955 var import_components61 = __toESM(require_components()); 14956 var import_element32 = __toESM(require_element()); 14957 14958 // packages/global-styles-ui/build-module/font-sizes/font-size-preview.js 14959 var import_block_editor12 = __toESM(require_block_editor()); 14960 var import_i18n42 = __toESM(require_i18n()); 14961 var import_jsx_runtime72 = __toESM(require_jsx_runtime()); 14962 14963 // packages/global-styles-ui/build-module/font-sizes/confirm-delete-font-size-dialog.js 14964 var import_components58 = __toESM(require_components()); 14965 var import_i18n43 = __toESM(require_i18n()); 14966 var import_jsx_runtime73 = __toESM(require_jsx_runtime()); 14967 14968 // packages/global-styles-ui/build-module/font-sizes/rename-font-size-dialog.js 14969 var import_components59 = __toESM(require_components()); 14970 var import_i18n44 = __toESM(require_i18n()); 14971 var import_element31 = __toESM(require_element()); 14972 var import_jsx_runtime74 = __toESM(require_jsx_runtime()); 14973 14974 // packages/global-styles-ui/build-module/size-control/index.js 14975 var import_components60 = __toESM(require_components()); 14976 var import_jsx_runtime75 = __toESM(require_jsx_runtime()); 14977 14978 // packages/global-styles-ui/build-module/font-sizes/font-size.js 14979 var import_jsx_runtime76 = __toESM(require_jsx_runtime()); 14980 var { Menu: Menu4 } = unlock(import_components61.privateApis); 14981 14982 // packages/global-styles-ui/build-module/global-styles-ui.js 14983 var import_jsx_runtime77 = __toESM(require_jsx_runtime()); 14984 14985 // packages/global-styles-ui/build-module/with-global-styles-provider.js 14986 var import_jsx_runtime78 = __toESM(require_jsx_runtime()); 14987 function withGlobalStylesProvider(Component) { 14988 return function WrappedComponent({ 14989 value, 14990 baseValue, 14991 onChange, 14992 ...props 14993 }) { 14994 return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( 14995 GlobalStylesProvider, 14996 { 14997 value, 14998 baseValue, 14999 onChange, 15000 children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Component, { ...props }) 15001 } 15002 ); 15003 }; 15004 } 15005 15006 // packages/global-styles-ui/build-module/style-variations.js 15007 var StyleVariations = withGlobalStylesProvider(style_variations_container_default); 15008 15009 // packages/global-styles-ui/build-module/color-variations.js 15010 var ColorVariations2 = withGlobalStylesProvider(ColorVariations); 15011 15012 // packages/global-styles-ui/build-module/typography-variations.js 15013 var TypographyVariations2 = withGlobalStylesProvider(TypographyVariations); 15014 15015 // packages/global-styles-ui/build-module/font-library/font-library.js 15016 var import_jsx_runtime79 = __toESM(require_jsx_runtime()); 15017 function FontLibrary({ 15018 value, 15019 baseValue, 15020 onChange, 15021 activeTab = "installed-fonts" 15022 }) { 15023 let content; 15024 switch (activeTab) { 15025 case "upload-fonts": 15026 content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(upload_fonts_default, {}); 15027 break; 15028 case "installed-fonts": 15029 content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(installed_fonts_default, {}); 15030 break; 15031 default: 15032 content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(font_collection_default, { slug: activeTab }); 15033 } 15034 return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( 15035 GlobalStylesProvider, 15036 { 15037 value, 15038 baseValue, 15039 onChange, 15040 children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(context_default, { children: content }) 15041 } 15042 ); 15043 } 15044 15045 // routes/font-list/lock-unlock.ts 15046 var import_private_apis2 = __toESM(require_private_apis()); 15047 var { unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 15048 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 15049 "@wordpress/font-list-route" 15050 ); 15051 15052 // routes/font-list/style.scss 15053 var css = `/** 15054 * SCSS Variables. 15055 * 15056 * Please use variables from this sheet to ensure consistency across the UI. 15057 * Don't add to this sheet unless you're pretty sure the value will be reused in many places. 15058 * For example, don't add rules to this sheet that affect block visuals. It's purely for UI. 15059 */ 15060 /** 15061 * Colors 15062 */ 15063 /** 15064 * Fonts & basic variables. 15065 */ 15066 /** 15067 * Typography 15068 */ 15069 /** 15070 * Grid System. 15071 * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/ 15072 */ 15073 /** 15074 * Radius scale. 15075 */ 15076 /** 15077 * Elevation scale. 15078 */ 15079 /** 15080 * Dimensions. 15081 */ 15082 /** 15083 * Mobile specific styles 15084 */ 15085 /** 15086 * Editor styles. 15087 */ 15088 /** 15089 * Block & Editor UI. 15090 */ 15091 /** 15092 * Block paddings. 15093 */ 15094 /** 15095 * React Native specific. 15096 * These variables do not appear to be used anywhere else. 15097 */ 15098 /** 15099 * SCSS Variables. 15100 * 15101 * Please use variables from this sheet to ensure consistency across the UI. 15102 * Don't add to this sheet unless you're pretty sure the value will be reused in many places. 15103 * For example, don't add rules to this sheet that affect block visuals. It's purely for UI. 15104 */ 15105 /** 15106 * Colors 15107 */ 15108 /** 15109 * Fonts & basic variables. 15110 */ 15111 /** 15112 * Typography 15113 */ 15114 /** 15115 * Grid System. 15116 * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/ 15117 */ 15118 /** 15119 * Radius scale. 15120 */ 15121 /** 15122 * Elevation scale. 15123 */ 15124 /** 15125 * Dimensions. 15126 */ 15127 /** 15128 * Mobile specific styles 15129 */ 15130 /** 15131 * Editor styles. 15132 */ 15133 /** 15134 * Block & Editor UI. 15135 */ 15136 /** 15137 * Block paddings. 15138 */ 15139 /** 15140 * React Native specific. 15141 * These variables do not appear to be used anywhere else. 15142 */ 15143 /** 15144 * Typography 15145 */ 15146 /** 15147 * Breakpoints & Media Queries 15148 */ 15149 /** 15150 * Converts a hex value into the rgb equivalent. 15151 * 15152 * @param {string} hex - the hexadecimal value to convert 15153 * @return {string} comma separated rgb values 15154 */ 15155 /** 15156 * Long content fade mixin 15157 * 15158 * Creates a fading overlay to signify that the content is longer 15159 * than the space allows. 15160 */ 15161 /** 15162 * Breakpoint mixins 15163 */ 15164 /** 15165 * Focus styles. 15166 */ 15167 /** 15168 * Applies editor left position to the selector passed as argument 15169 */ 15170 /** 15171 * Styles that are reused verbatim in a few places 15172 */ 15173 /** 15174 * Allows users to opt-out of animations via OS-level preferences. 15175 */ 15176 /** 15177 * Reset default styles for JavaScript UI based pages. 15178 * This is a WP-admin agnostic reset 15179 */ 15180 /** 15181 * Reset the WP Admin page styles for Gutenberg-like pages. 15182 */ 15183 @media (min-width: 782px) { 15184 .font-library-modal.font-library-modal { 15185 width: 65vw; 15186 } 15187 } 15188 .font-library-modal .components-modal__header { 15189 border-bottom: none; 15190 } 15191 15192 .font-library-modal .components-modal__content { 15193 padding: 0; 15194 margin-bottom: 90px; 15195 } 15196 15197 .font-library-modal .font-library__subtitle { 15198 text-transform: uppercase; 15199 font-weight: 499; 15200 font-size: 11px; 15201 } 15202 15203 .font-library-modal__tab-panel { 15204 height: calc(100% - 50px); 15205 } 15206 15207 .font-library__tabpanel-layout { 15208 height: 100%; 15209 display: flex; 15210 flex-direction: column; 15211 } 15212 15213 .font-library__tabpanel-layout > div { 15214 flex-grow: 1; 15215 } 15216 15217 .font-library__tabpanel-layout .font-library__loading { 15218 width: 100%; 15219 height: 100%; 15220 display: flex; 15221 position: absolute; 15222 left: 0; 15223 top: 0; 15224 align-items: center; 15225 justify-content: center; 15226 padding-top: 124px; 15227 box-sizing: border-box; 15228 } 15229 15230 .font-library__tabpanel-layout .components-navigator-screen { 15231 padding: 24px; 15232 width: 100%; 15233 } 15234 15235 .font-library__footer { 15236 position: absolute; 15237 width: 100%; 15238 bottom: 0; 15239 border-top: 1px solid #ddd; 15240 padding: 24px; 15241 background-color: #fff; 15242 box-sizing: border-box; 15243 flex-grow: 0 !important; 15244 flex-shrink: 0; 15245 height: 90px; 15246 } 15247 15248 .font-library__page-selection { 15249 font-size: 11px; 15250 font-weight: 499; 15251 text-transform: uppercase; 15252 } 15253 15254 @media (min-width: 600px) { 15255 .font-library__page-selection .font-library__page-selection-trigger { 15256 font-size: 11px !important; 15257 font-weight: 499; 15258 } 15259 } 15260 .font-library__fonts-title { 15261 text-transform: uppercase; 15262 font-size: 11px; 15263 font-weight: 600; 15264 margin-top: 0; 15265 margin-bottom: 0; 15266 } 15267 15268 .font-library__fonts-list { 15269 list-style: none; 15270 padding: 0; 15271 margin-top: 0; 15272 margin-bottom: 0; 15273 } 15274 15275 .font-library__fonts-list-item { 15276 margin-bottom: 0; 15277 } 15278 15279 .font-library__font-card { 15280 box-sizing: border-box; 15281 border: 1px solid #ddd; 15282 width: 100%; 15283 height: auto !important; 15284 padding: 16px; 15285 margin-top: -1px; /* To collapse the margin with the previous element */ 15286 } 15287 15288 .font-library__font-card:hover { 15289 background-color: #f0f0f0; 15290 } 15291 15292 .font-library__font-card:focus { 15293 position: relative; 15294 } 15295 15296 .font-library__font-card .font-library__font-card__name { 15297 font-weight: bold; 15298 } 15299 15300 .font-library__font-card .font-library__font-card__count { 15301 color: #757575; 15302 } 15303 15304 .font-library__font-card .font-library__font-variant_demo-image { 15305 display: block; 15306 height: 24px; 15307 width: auto; 15308 } 15309 15310 .font-library__font-card .font-library__font-variant_demo-text { 15311 white-space: nowrap; 15312 flex-shrink: 0; 15313 } 15314 15315 @media not (prefers-reduced-motion) { 15316 .font-library__font-card .font-library__font-variant_demo-text { 15317 transition: opacity 0.3s ease-in-out; 15318 } 15319 } 15320 .font-library-modal__tablist-container { 15321 position: sticky; 15322 top: 0; 15323 border-bottom: 1px solid #ddd; 15324 background: #fff; 15325 z-index: 1; 15326 } 15327 15328 .font-library__upload-area { 15329 align-items: center; 15330 display: flex; 15331 justify-content: center; 15332 height: 256px !important; 15333 width: 100%; 15334 } 15335 15336 button.font-library__upload-area { 15337 background-color: #f0f0f0; 15338 } 15339 15340 .font-library__local-fonts { 15341 margin: 24px auto; 15342 width: 80%; 15343 } 15344 15345 .font-library__local-fonts .font-library__upload-area__text { 15346 color: #757575; 15347 } 15348 15349 .font-library__google-fonts-confirm { 15350 display: flex; 15351 justify-content: center; 15352 align-items: center; 15353 margin-top: 64px; 15354 } 15355 15356 .font-library__google-fonts-confirm p { 15357 line-height: 1.4; 15358 } 15359 15360 .font-library__google-fonts-confirm h2 { 15361 font-size: 1.2rem; 15362 font-weight: 400; 15363 } 15364 15365 .font-library__google-fonts-confirm .components-card { 15366 padding: 16px; 15367 width: 400px; 15368 } 15369 15370 .font-library__google-fonts-confirm .components-button { 15371 width: 100%; 15372 justify-content: center; 15373 } 15374 15375 .font-library__select-all { 15376 padding: 16px 16px 16px 17px; 15377 } 15378 15379 .font-library__select-all .components-checkbox-control__label { 15380 padding-left: 16px; 15381 } 15382 15383 .global-styles-ui-pagination .components-button.is-tertiary { 15384 width: 32px; 15385 height: 32px; 15386 justify-content: center; 15387 } 15388 15389 .global-styles-ui-screen-revisions__revisions-list { 15390 list-style: none; 15391 margin: 0 16px 16px 16px; 15392 flex-grow: 1; 15393 } 15394 15395 .global-styles-ui-screen-revisions__revisions-list li { 15396 margin-bottom: 0; 15397 } 15398 15399 .global-styles-ui-screen-revisions__revision-item { 15400 position: relative; 15401 cursor: pointer; 15402 display: flex; 15403 flex-direction: column; 15404 } 15405 15406 .global-styles-ui-screen-revisions__revision-item[role=option]:active, .global-styles-ui-screen-revisions__revision-item[role=option]:focus { 15407 box-shadow: 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color); 15408 outline: 2px solid transparent; 15409 } 15410 15411 .global-styles-ui-screen-revisions__revision-item:hover { 15412 background: rgba(var(--wp-admin-theme-color--rgb), 0.04); 15413 } 15414 15415 .global-styles-ui-screen-revisions__revision-item:hover .global-styles-ui-screen-revisions__date { 15416 color: var(--wp-admin-theme-color); 15417 } 15418 15419 .global-styles-ui-screen-revisions__revision-item::before, .global-styles-ui-screen-revisions__revision-item::after { 15420 position: absolute; 15421 content: "\\a"; 15422 display: block; 15423 } 15424 15425 .global-styles-ui-screen-revisions__revision-item::before { 15426 background: #ddd; 15427 border-radius: 50%; 15428 height: 8px; 15429 width: 8px; 15430 top: 18px; 15431 left: 17px; 15432 transform: translate(-50%, -50%); 15433 z-index: 1; 15434 border: 4px solid transparent; 15435 } 15436 15437 .global-styles-ui-screen-revisions__revision-item[aria-selected=true] { 15438 border-radius: 2px; 15439 outline: 3px solid transparent; 15440 outline-offset: -2px; 15441 color: var(--wp-admin-theme-color); 15442 background: rgba(var(--wp-admin-theme-color--rgb), 0.04); 15443 } 15444 15445 .global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__date { 15446 color: var(--wp-admin-theme-color); 15447 } 15448 15449 .global-styles-ui-screen-revisions__revision-item[aria-selected=true]::before { 15450 background: var(--wp-admin-theme-color); 15451 } 15452 15453 .global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__changes > li, 15454 .global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__meta, 15455 .global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__applied-text { 15456 color: #1e1e1e; 15457 } 15458 15459 .global-styles-ui-screen-revisions__revision-item::after { 15460 height: 100%; 15461 left: 16px; 15462 top: 0; 15463 width: 0; 15464 border: 0.5px solid #ddd; 15465 } 15466 15467 .global-styles-ui-screen-revisions__revision-item:first-child::after { 15468 top: 18px; 15469 } 15470 15471 .global-styles-ui-screen-revisions__revision-item:last-child::after { 15472 height: 18px; 15473 } 15474 15475 .global-styles-ui-screen-revisions__revision-item-wrapper { 15476 display: block; 15477 padding: 12px 12px 4px 40px; 15478 } 15479 15480 .global-styles-ui-screen-revisions__apply-button.is-primary, 15481 .global-styles-ui-screen-revisions__applied-text { 15482 align-self: flex-start; 15483 margin: 4px 12px 12px 40px; 15484 } 15485 15486 .global-styles-ui-screen-revisions__changes, 15487 .global-styles-ui-screen-revisions__meta, 15488 .global-styles-ui-screen-revisions__applied-text { 15489 color: #757575; 15490 font-size: 12px; 15491 } 15492 15493 .global-styles-ui-screen-revisions__description { 15494 display: flex; 15495 flex-direction: column; 15496 align-items: flex-start; 15497 gap: 8px; 15498 } 15499 15500 .global-styles-ui-screen-revisions__description .global-styles-ui-screen-revisions__date { 15501 text-transform: uppercase; 15502 font-weight: 600; 15503 font-size: 12px; 15504 } 15505 15506 .global-styles-ui-screen-revisions__meta { 15507 display: flex; 15508 justify-content: start; 15509 width: 100%; 15510 align-items: flex-start; 15511 text-align: left; 15512 margin-bottom: 4px; 15513 } 15514 15515 .global-styles-ui-screen-revisions__meta img { 15516 width: 16px; 15517 height: 16px; 15518 border-radius: 100%; 15519 margin-right: 8px; 15520 } 15521 15522 .global-styles-ui-screen-revisions__loading { 15523 margin: 24px auto !important; 15524 } 15525 15526 .global-styles-ui-screen-revisions__changes { 15527 text-align: left; 15528 line-height: 1.4; 15529 margin-left: 12px; 15530 list-style: disc; 15531 } 15532 15533 .global-styles-ui-screen-revisions__changes li { 15534 margin-bottom: 4px; 15535 } 15536 15537 .global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination { 15538 justify-content: space-between; 15539 gap: 2px; 15540 } 15541 15542 .global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .edit-site-pagination__total { 15543 position: absolute; 15544 left: -1000px; 15545 height: 1px; 15546 margin: -1px; 15547 overflow: hidden; 15548 } 15549 15550 .global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-text { 15551 font-size: 12px; 15552 will-change: opacity; 15553 } 15554 15555 .global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary { 15556 color: #1e1e1e; 15557 } 15558 15559 .global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary:disabled, 15560 .global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true] { 15561 color: #949494; 15562 } 15563 15564 .global-styles-ui-screen-revisions__footer { 15565 height: 56px; 15566 z-index: 1; 15567 position: sticky; 15568 min-width: 100%; 15569 bottom: 0; 15570 background: #fff; 15571 padding: 12px; 15572 border-top: 1px solid #ddd; 15573 } 15574 15575 .global-styles-ui-variations_item { 15576 box-sizing: border-box; 15577 cursor: pointer; 15578 } 15579 15580 .global-styles-ui-variations_item .global-styles-ui-variations_item-preview { 15581 border-radius: 2px; 15582 outline: 1px solid rgba(0, 0, 0, 0.1); 15583 outline-offset: -1px; 15584 overflow: hidden; 15585 position: relative; 15586 } 15587 15588 @media not (prefers-reduced-motion) { 15589 .global-styles-ui-variations_item .global-styles-ui-variations_item-preview { 15590 transition: outline 0.1s linear; 15591 } 15592 } 15593 .global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill { 15594 height: 32px; 15595 } 15596 15597 .global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill .block-editor-iframe__scale-container { 15598 overflow: hidden; 15599 } 15600 15601 .global-styles-ui-variations_item:not(.is-active):hover .global-styles-ui-variations_item-preview { 15602 outline-color: rgba(0, 0, 0, 0.3); 15603 } 15604 15605 .global-styles-ui-variations_item.is-active .global-styles-ui-variations_item-preview, .global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview { 15606 outline-color: #1e1e1e; 15607 outline-offset: 1px; 15608 outline-width: var(--wp-admin-border-width-focus); 15609 } 15610 15611 .global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview { 15612 outline-color: var(--wp-admin-theme-color); 15613 } 15614 15615 .global-styles-ui-preview { 15616 display: flex; 15617 align-items: center; 15618 justify-content: center; 15619 line-height: 1; 15620 cursor: pointer; 15621 } 15622 15623 .global-styles-ui-preview__wrapper { 15624 max-width: 100%; 15625 display: block; 15626 width: 100%; 15627 } 15628 15629 .global-styles-ui-typography-preview { 15630 display: flex; 15631 align-items: center; 15632 justify-content: center; 15633 min-height: 100px; 15634 margin-bottom: 20px; 15635 background: #f0f0f0; 15636 border-radius: 2px; 15637 overflow: hidden; 15638 } 15639 15640 .global-styles-ui-font-size__item { 15641 white-space: nowrap; 15642 text-overflow: ellipsis; 15643 overflow: hidden; 15644 line-break: anywhere; 15645 } 15646 15647 .global-styles-ui-font-size__item-value { 15648 color: #757575; 15649 } 15650 15651 .global-styles-ui-screen-typography__indicator { 15652 height: 24px; 15653 width: 24px; 15654 font-size: 14px; 15655 display: flex !important; 15656 align-items: center; 15657 justify-content: center; 15658 border-radius: 2px; 15659 } 15660 15661 .global-styles-ui-block-types-search { 15662 margin-bottom: 10px; 15663 padding: 0 16px; 15664 } 15665 15666 .global-styles-ui-screen-typography__font-variants-count { 15667 color: #757575; 15668 } 15669 15670 .global-styles-ui-font-families__manage-fonts { 15671 justify-content: center; 15672 } 15673 15674 .global-styles-ui-screen .color-block-support-panel { 15675 padding-left: 0; 15676 padding-right: 0; 15677 padding-top: 0; 15678 border-top: none; 15679 row-gap: 12px; 15680 } 15681 15682 .global-styles-ui-header { 15683 margin-bottom: 0 !important; 15684 } 15685 15686 .global-styles-ui-subtitle { 15687 margin-bottom: 0 !important; 15688 text-transform: uppercase; 15689 font-weight: 499 !important; 15690 font-size: 11px !important; 15691 } 15692 15693 .global-styles-ui-section-title { 15694 color: #2f2f2f; 15695 font-weight: 600; 15696 line-height: 1.2; 15697 padding: 16px 16px 0; 15698 margin: 0; 15699 } 15700 15701 .global-styles-ui-icon-with-current-color { 15702 fill: currentColor; 15703 } 15704 15705 .global-styles-ui__color-indicator-wrapper { 15706 height: 24px; 15707 flex-shrink: 0; 15708 } 15709 15710 .global-styles-ui__shadows-panel__options-container, 15711 .global-styles-ui__typography-panel__options-container { 15712 height: 24px; 15713 } 15714 15715 .global-styles-ui__block-preview-panel { 15716 position: relative; 15717 width: 100%; 15718 border: #ddd 1px solid; 15719 border-radius: 2px; 15720 overflow: hidden; 15721 } 15722 15723 .global-styles-ui__shadow-preview-panel { 15724 height: 144px; 15725 border: #ddd 1px solid; 15726 border-radius: 2px; 15727 overflow: auto; 15728 background-image: repeating-linear-gradient(45deg, #f5f5f5 25%, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 75%, #f5f5f5 0, #f5f5f5), repeating-linear-gradient(45deg, #f5f5f5 25%, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 75%, #f5f5f5 0, #f5f5f5); 15729 background-position: 0 0, 8px 8px; 15730 background-size: 16px 16px; 15731 } 15732 15733 .global-styles-ui__shadow-preview-panel .global-styles-ui__shadow-preview-block { 15734 border: #ddd 1px solid; 15735 border-radius: 2px; 15736 background-color: #fff; 15737 width: 60%; 15738 height: 60px; 15739 } 15740 15741 .global-styles-ui__shadow-editor__dropdown-content { 15742 width: 280px; 15743 } 15744 15745 .global-styles-ui__shadow-editor-panel { 15746 margin-bottom: 4px; 15747 } 15748 15749 .global-styles-ui__shadow-editor__dropdown { 15750 width: 100%; 15751 position: relative; 15752 } 15753 15754 .global-styles-ui__shadow-editor__dropdown-toggle { 15755 width: 100%; 15756 height: auto; 15757 padding-top: 8px; 15758 padding-bottom: 8px; 15759 text-align: left; 15760 border-radius: inherit; 15761 } 15762 15763 .global-styles-ui__shadow-editor__dropdown-toggle.is-open { 15764 background: #f0f0f0; 15765 color: var(--wp-admin-theme-color); 15766 } 15767 15768 .global-styles-ui__shadow-editor__remove-button { 15769 position: absolute; 15770 right: 8px; 15771 top: 8px; 15772 opacity: 0; 15773 } 15774 15775 .global-styles-ui__shadow-editor__remove-button.global-styles-ui__shadow-editor__remove-button { 15776 border: none; 15777 } 15778 15779 .global-styles-ui__shadow-editor__dropdown-toggle:hover + .global-styles-ui__shadow-editor__remove-button, .global-styles-ui__shadow-editor__remove-button:focus, .global-styles-ui__shadow-editor__remove-button:hover { 15780 opacity: 1; 15781 } 15782 15783 @media (hover: none) { 15784 .global-styles-ui__shadow-editor__remove-button { 15785 opacity: 1; 15786 } 15787 } 15788 .global-styles-ui-screen-css { 15789 flex: 1 1 auto; 15790 display: flex; 15791 flex-direction: column; 15792 margin: 16px; 15793 } 15794 15795 .global-styles-ui-screen-css .components-v-stack { 15796 flex: 1 1 auto; 15797 } 15798 15799 .global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input { 15800 flex: 1 1 auto; 15801 display: flex; 15802 flex-direction: column; 15803 } 15804 15805 .global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field { 15806 flex: 1 1 auto; 15807 display: flex; 15808 flex-direction: column; 15809 } 15810 15811 .global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input { 15812 flex: 1 1 auto; 15813 /*rtl:ignore*/ 15814 direction: ltr; 15815 } 15816 15817 .global-styles-ui-screen-css-help-link { 15818 display: inline-block; 15819 margin-top: 8px; 15820 } 15821 15822 .global-styles-ui-screen-variations { 15823 margin-top: 16px; 15824 border-top: 1px solid #ddd; 15825 } 15826 15827 .global-styles-ui-screen-variations > * { 15828 margin: 24px 16px; 15829 } 15830 15831 .global-styles-ui-sidebar__navigator-provider { 15832 height: 100%; 15833 } 15834 15835 .global-styles-ui-sidebar__navigator-screen { 15836 display: flex; 15837 flex-direction: column; 15838 height: 100%; 15839 } 15840 15841 .global-styles-ui-sidebar__navigator-screen .single-column { 15842 grid-column: span 1; 15843 } 15844 15845 .global-styles-ui-screen-root.global-styles-ui-screen-root, 15846 .global-styles-ui-screen-style-variations.global-styles-ui-screen-style-variations { 15847 background: unset; 15848 color: inherit; 15849 } 15850 15851 .global-styles-ui-sidebar__panel .block-editor-block-icon svg { 15852 fill: currentColor; 15853 } 15854 15855 .global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile, .global-styles-ui-screen-root__active-style-tile.global-styles-ui-screen-root__active-style-tile .global-styles-ui-screen-root__active-style-tile-preview { 15856 border-radius: 2px; 15857 } 15858 15859 .global-styles-ui-screen-root__active-style-tile-preview { 15860 clip-path: border-box; 15861 } 15862 15863 .global-styles-ui-color-palette-panel, 15864 .global-styles-ui-gradient-palette-panel { 15865 padding: 16px; 15866 } 15867 15868 .font-library-page__tablist { 15869 border-bottom: 1px solid #f0f0f0; 15870 padding: 0 24px; 15871 } 15872 15873 .font-library-page__tab-panel { 15874 flex-grow: 1; 15875 max-height: calc(100% - 110px); 15876 overflow: auto; 15877 } 15878 .admin-ui-page:has(.font-library__footer) .font-library-page__tab-panel { 15879 max-height: calc(100% - 198px); 15880 }`; 15881 document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css)); 15882 15883 // routes/font-list/stage.tsx 15884 var { Tabs: Tabs3 } = unlock2(import_components63.privateApis); 15885 var { useGlobalStyles } = unlock2(import_editor.privateApis); 15886 function FontLibraryPage() { 15887 const { records: collections = [] } = (0, import_core_data12.useEntityRecords)("root", "fontCollection", { 15888 _fields: "slug,name,description" 15889 }); 15890 const [activeTab, setActiveTab] = (0, import_element34.useState)("installed-fonts"); 15891 const { base, user, setUser, isReady } = useGlobalStyles(); 15892 const canUserCreate = (0, import_data13.useSelect)((select) => { 15893 return select(import_core_data12.store).canUser("create", { 15894 kind: "postType", 15895 name: "wp_font_family" 15896 }); 15897 }, []); 15898 if (!isReady) { 15899 return null; 15900 } 15901 const tabs = [ 15902 { 15903 id: "installed-fonts", 15904 title: (0, import_i18n46.__)("Library") 15905 } 15906 ]; 15907 if (canUserCreate) { 15908 tabs.push({ 15909 id: "upload-fonts", 15910 title: (0, import_i18n46.__)("Upload") 15911 }); 15912 tabs.push( 15913 ...(collections || []).map(({ slug, name: name2 }) => ({ 15914 id: slug, 15915 title: collections && collections.length === 1 && slug === "google-fonts" ? (0, import_i18n46.__)("Install Fonts") : name2 15916 })) 15917 ); 15918 } 15919 return /* @__PURE__ */ React.createElement(page_default, { title: (0, import_i18n46.__)("Fonts") }, /* @__PURE__ */ React.createElement( 15920 Tabs3, 15921 { 15922 selectedTabId: activeTab, 15923 onSelect: (tabId) => setActiveTab(tabId) 15924 }, 15925 /* @__PURE__ */ React.createElement("div", { className: "font-library-page__tablist" }, /* @__PURE__ */ React.createElement(Tabs3.TabList, null, tabs.map(({ id, title }) => /* @__PURE__ */ React.createElement(Tabs3.Tab, { key: id, tabId: id }, title)))), 15926 tabs.map(({ id }) => /* @__PURE__ */ React.createElement( 15927 Tabs3.TabPanel, 15928 { 15929 key: id, 15930 tabId: id, 15931 focusable: false, 15932 className: "font-library-page__tab-panel" 15933 }, 15934 /* @__PURE__ */ React.createElement( 15935 FontLibrary, 15936 { 15937 value: user, 15938 baseValue: base, 15939 onChange: setUser, 15940 activeTab: id 15941 } 15942 ) 15943 )) 15944 )); 15945 } 15946 function Stage() { 15947 return /* @__PURE__ */ React.createElement(FontLibraryPage, null); 15948 } 15949 var stage = Stage; 15950 export { 15951 stage 15952 }; 15953 /*! Bundled license information: 15954 15955 is-plain-object/dist/is-plain-object.mjs: 15956 (*! 15957 * is-plain-object <https://github.com/jonschlinkert/is-plain-object> 15958 * 15959 * Copyright (c) 2014-2017, Jon Schlinkert. 15960 * Released under the MIT License. 15961 *) 15962 */
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Wed Apr 15 08:20:10 2026 | Cross-referenced by PHPXref |