| [ 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 // vendor-external:react 62 var require_react = __commonJS({ 63 "vendor-external:react"(exports, module) { 64 module.exports = window.React; 65 } 66 }); 67 68 // package-external:@wordpress/primitives 69 var require_primitives = __commonJS({ 70 "package-external:@wordpress/primitives"(exports, module) { 71 module.exports = window.wp.primitives; 72 } 73 }); 74 75 // package-external:@wordpress/private-apis 76 var require_private_apis = __commonJS({ 77 "package-external:@wordpress/private-apis"(exports, module) { 78 module.exports = window.wp.privateApis; 79 } 80 }); 81 82 // package-external:@wordpress/compose 83 var require_compose = __commonJS({ 84 "package-external:@wordpress/compose"(exports, module) { 85 module.exports = window.wp.compose; 86 } 87 }); 88 89 // package-external:@wordpress/editor 90 var require_editor = __commonJS({ 91 "package-external:@wordpress/editor"(exports, module) { 92 module.exports = window.wp.editor; 93 } 94 }); 95 96 // package-external:@wordpress/core-data 97 var require_core_data = __commonJS({ 98 "package-external:@wordpress/core-data"(exports, module) { 99 module.exports = window.wp.coreData; 100 } 101 }); 102 103 // package-external:@wordpress/data 104 var require_data = __commonJS({ 105 "package-external:@wordpress/data"(exports, module) { 106 module.exports = window.wp.data; 107 } 108 }); 109 110 // package-external:@wordpress/blocks 111 var require_blocks = __commonJS({ 112 "package-external:@wordpress/blocks"(exports, module) { 113 module.exports = window.wp.blocks; 114 } 115 }); 116 117 // package-external:@wordpress/block-editor 118 var require_block_editor = __commonJS({ 119 "package-external:@wordpress/block-editor"(exports, module) { 120 module.exports = window.wp.blockEditor; 121 } 122 }); 123 124 // package-external:@wordpress/style-engine 125 var require_style_engine = __commonJS({ 126 "package-external:@wordpress/style-engine"(exports, module) { 127 module.exports = window.wp.styleEngine; 128 } 129 }); 130 131 // node_modules/fast-deep-equal/es6/index.js 132 var require_es6 = __commonJS({ 133 "node_modules/fast-deep-equal/es6/index.js"(exports, module) { 134 "use strict"; 135 module.exports = function equal(a2, b2) { 136 if (a2 === b2) return true; 137 if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { 138 if (a2.constructor !== b2.constructor) return false; 139 var length, i2, keys; 140 if (Array.isArray(a2)) { 141 length = a2.length; 142 if (length != b2.length) return false; 143 for (i2 = length; i2-- !== 0; ) 144 if (!equal(a2[i2], b2[i2])) return false; 145 return true; 146 } 147 if (a2 instanceof Map && b2 instanceof Map) { 148 if (a2.size !== b2.size) return false; 149 for (i2 of a2.entries()) 150 if (!b2.has(i2[0])) return false; 151 for (i2 of a2.entries()) 152 if (!equal(i2[1], b2.get(i2[0]))) return false; 153 return true; 154 } 155 if (a2 instanceof Set && b2 instanceof Set) { 156 if (a2.size !== b2.size) return false; 157 for (i2 of a2.entries()) 158 if (!b2.has(i2[0])) return false; 159 return true; 160 } 161 if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { 162 length = a2.length; 163 if (length != b2.length) return false; 164 for (i2 = length; i2-- !== 0; ) 165 if (a2[i2] !== b2[i2]) return false; 166 return true; 167 } 168 if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; 169 if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); 170 if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); 171 keys = Object.keys(a2); 172 length = keys.length; 173 if (length !== Object.keys(b2).length) return false; 174 for (i2 = length; i2-- !== 0; ) 175 if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; 176 for (i2 = length; i2-- !== 0; ) { 177 var key = keys[i2]; 178 if (!equal(a2[key], b2[key])) return false; 179 } 180 return true; 181 } 182 return a2 !== a2 && b2 !== b2; 183 }; 184 } 185 }); 186 187 // node_modules/deepmerge/dist/cjs.js 188 var require_cjs = __commonJS({ 189 "node_modules/deepmerge/dist/cjs.js"(exports, module) { 190 "use strict"; 191 var isMergeableObject = function isMergeableObject2(value) { 192 return isNonNullObject(value) && !isSpecial(value); 193 }; 194 function isNonNullObject(value) { 195 return !!value && typeof value === "object"; 196 } 197 function isSpecial(value) { 198 var stringValue = Object.prototype.toString.call(value); 199 return stringValue === "[object RegExp]" || stringValue === "[object Date]" || isReactElement(value); 200 } 201 var canUseSymbol = typeof Symbol === "function" && Symbol.for; 202 var REACT_ELEMENT_TYPE = canUseSymbol ? /* @__PURE__ */ Symbol.for("react.element") : 60103; 203 function isReactElement(value) { 204 return value.$$typeof === REACT_ELEMENT_TYPE; 205 } 206 function emptyTarget(val) { 207 return Array.isArray(val) ? [] : {}; 208 } 209 function cloneUnlessOtherwiseSpecified(value, options) { 210 return options.clone !== false && options.isMergeableObject(value) ? deepmerge2(emptyTarget(value), value, options) : value; 211 } 212 function defaultArrayMerge(target, source, options) { 213 return target.concat(source).map(function(element) { 214 return cloneUnlessOtherwiseSpecified(element, options); 215 }); 216 } 217 function getMergeFunction(key, options) { 218 if (!options.customMerge) { 219 return deepmerge2; 220 } 221 var customMerge = options.customMerge(key); 222 return typeof customMerge === "function" ? customMerge : deepmerge2; 223 } 224 function getEnumerableOwnPropertySymbols(target) { 225 return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function(symbol) { 226 return Object.propertyIsEnumerable.call(target, symbol); 227 }) : []; 228 } 229 function getKeys(target) { 230 return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)); 231 } 232 function propertyIsOnObject(object, property) { 233 try { 234 return property in object; 235 } catch (_) { 236 return false; 237 } 238 } 239 function propertyIsUnsafe(target, key) { 240 return propertyIsOnObject(target, key) && !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key)); 241 } 242 function mergeObject(target, source, options) { 243 var destination = {}; 244 if (options.isMergeableObject(target)) { 245 getKeys(target).forEach(function(key) { 246 destination[key] = cloneUnlessOtherwiseSpecified(target[key], options); 247 }); 248 } 249 getKeys(source).forEach(function(key) { 250 if (propertyIsUnsafe(target, key)) { 251 return; 252 } 253 if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) { 254 destination[key] = getMergeFunction(key, options)(target[key], source[key], options); 255 } else { 256 destination[key] = cloneUnlessOtherwiseSpecified(source[key], options); 257 } 258 }); 259 return destination; 260 } 261 function deepmerge2(target, source, options) { 262 options = options || {}; 263 options.arrayMerge = options.arrayMerge || defaultArrayMerge; 264 options.isMergeableObject = options.isMergeableObject || isMergeableObject; 265 options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified; 266 var sourceIsArray = Array.isArray(source); 267 var targetIsArray = Array.isArray(target); 268 var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; 269 if (!sourceAndTargetTypesMatch) { 270 return cloneUnlessOtherwiseSpecified(source, options); 271 } else if (sourceIsArray) { 272 return options.arrayMerge(target, source, options); 273 } else { 274 return mergeObject(target, source, options); 275 } 276 } 277 deepmerge2.all = function deepmergeAll(array, options) { 278 if (!Array.isArray(array)) { 279 throw new Error("first argument should be an array"); 280 } 281 return array.reduce(function(prev, next) { 282 return deepmerge2(prev, next, options); 283 }, {}); 284 }; 285 var deepmerge_1 = deepmerge2; 286 module.exports = deepmerge_1; 287 } 288 }); 289 290 // package-external:@wordpress/keycodes 291 var require_keycodes = __commonJS({ 292 "package-external:@wordpress/keycodes"(exports, module) { 293 module.exports = window.wp.keycodes; 294 } 295 }); 296 297 // package-external:@wordpress/api-fetch 298 var require_api_fetch = __commonJS({ 299 "package-external:@wordpress/api-fetch"(exports, module) { 300 module.exports = window.wp.apiFetch; 301 } 302 }); 303 304 // package-external:@wordpress/date 305 var require_date = __commonJS({ 306 "package-external:@wordpress/date"(exports, module) { 307 module.exports = window.wp.date; 308 } 309 }); 310 311 // node_modules/clsx/dist/clsx.mjs 312 function r(e2) { 313 var t3, f2, n2 = ""; 314 if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; 315 else if ("object" == typeof e2) if (Array.isArray(e2)) { 316 var o3 = e2.length; 317 for (t3 = 0; t3 < o3; t3++) e2[t3] && (f2 = r(e2[t3])) && (n2 && (n2 += " "), n2 += f2); 318 } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); 319 return n2; 320 } 321 function clsx() { 322 for (var e2, t3, f2 = 0, n2 = "", o3 = arguments.length; f2 < o3; f2++) (e2 = arguments[f2]) && (t3 = r(e2)) && (n2 && (n2 += " "), n2 += t3); 323 return n2; 324 } 325 var clsx_default = clsx; 326 327 // packages/admin-ui/build-module/navigable-region/index.mjs 328 var import_element = __toESM(require_element(), 1); 329 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 330 var NavigableRegion = (0, import_element.forwardRef)( 331 ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { 332 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( 333 Tag, 334 { 335 ref, 336 className: clsx_default("admin-ui-navigable-region", className), 337 "aria-label": ariaLabel, 338 role: "region", 339 tabIndex: "-1", 340 ...props, 341 children 342 } 343 ); 344 } 345 ); 346 NavigableRegion.displayName = "NavigableRegion"; 347 var navigable_region_default = NavigableRegion; 348 349 // node_modules/@base-ui/utils/esm/useRefWithInit.js 350 var React2 = __toESM(require_react(), 1); 351 var UNINITIALIZED = {}; 352 function useRefWithInit(init, initArg) { 353 const ref = React2.useRef(UNINITIALIZED); 354 if (ref.current === UNINITIALIZED) { 355 ref.current = init(initArg); 356 } 357 return ref; 358 } 359 360 // node_modules/@base-ui/react/esm/utils/useRenderElement.js 361 var React5 = __toESM(require_react(), 1); 362 363 // node_modules/@base-ui/utils/esm/useMergedRefs.js 364 function useMergedRefs(a2, b2, c2, d2) { 365 const forkRef = useRefWithInit(createForkRef).current; 366 if (didChange(forkRef, a2, b2, c2, d2)) { 367 update(forkRef, [a2, b2, c2, d2]); 368 } 369 return forkRef.callback; 370 } 371 function useMergedRefsN(refs) { 372 const forkRef = useRefWithInit(createForkRef).current; 373 if (didChangeN(forkRef, refs)) { 374 update(forkRef, refs); 375 } 376 return forkRef.callback; 377 } 378 function createForkRef() { 379 return { 380 callback: null, 381 cleanup: null, 382 refs: [] 383 }; 384 } 385 function didChange(forkRef, a2, b2, c2, d2) { 386 return forkRef.refs[0] !== a2 || forkRef.refs[1] !== b2 || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d2; 387 } 388 function didChangeN(forkRef, newRefs) { 389 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]); 390 } 391 function update(forkRef, refs) { 392 forkRef.refs = refs; 393 if (refs.every((ref) => ref == null)) { 394 forkRef.callback = null; 395 return; 396 } 397 forkRef.callback = (instance) => { 398 if (forkRef.cleanup) { 399 forkRef.cleanup(); 400 forkRef.cleanup = null; 401 } 402 if (instance != null) { 403 const cleanupCallbacks = Array(refs.length).fill(null); 404 for (let i2 = 0; i2 < refs.length; i2 += 1) { 405 const ref = refs[i2]; 406 if (ref == null) { 407 continue; 408 } 409 switch (typeof ref) { 410 case "function": { 411 const refCleanup = ref(instance); 412 if (typeof refCleanup === "function") { 413 cleanupCallbacks[i2] = refCleanup; 414 } 415 break; 416 } 417 case "object": { 418 ref.current = instance; 419 break; 420 } 421 default: 422 } 423 } 424 forkRef.cleanup = () => { 425 for (let i2 = 0; i2 < refs.length; i2 += 1) { 426 const ref = refs[i2]; 427 if (ref == null) { 428 continue; 429 } 430 switch (typeof ref) { 431 case "function": { 432 const cleanupCallback = cleanupCallbacks[i2]; 433 if (typeof cleanupCallback === "function") { 434 cleanupCallback(); 435 } else { 436 ref(null); 437 } 438 break; 439 } 440 case "object": { 441 ref.current = null; 442 break; 443 } 444 default: 445 } 446 } 447 }; 448 } 449 }; 450 } 451 452 // node_modules/@base-ui/utils/esm/getReactElementRef.js 453 var React4 = __toESM(require_react(), 1); 454 455 // node_modules/@base-ui/utils/esm/reactVersion.js 456 var React3 = __toESM(require_react(), 1); 457 var majorVersion = parseInt(React3.version, 10); 458 function isReactVersionAtLeast(reactVersionToCheck) { 459 return majorVersion >= reactVersionToCheck; 460 } 461 462 // node_modules/@base-ui/utils/esm/getReactElementRef.js 463 function getReactElementRef(element) { 464 if (!/* @__PURE__ */ React4.isValidElement(element)) { 465 return null; 466 } 467 const reactElement = element; 468 const propsWithRef = reactElement.props; 469 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; 470 } 471 472 // node_modules/@base-ui/utils/esm/mergeObjects.js 473 function mergeObjects(a2, b2) { 474 if (a2 && !b2) { 475 return a2; 476 } 477 if (!a2 && b2) { 478 return b2; 479 } 480 if (a2 || b2) { 481 return { 482 ...a2, 483 ...b2 484 }; 485 } 486 return void 0; 487 } 488 489 // node_modules/@base-ui/react/esm/utils/getStateAttributesProps.js 490 function getStateAttributesProps(state, customMapping) { 491 const props = {}; 492 for (const key in state) { 493 const value = state[key]; 494 if (customMapping?.hasOwnProperty(key)) { 495 const customProps = customMapping[key](value); 496 if (customProps != null) { 497 Object.assign(props, customProps); 498 } 499 continue; 500 } 501 if (value === true) { 502 props[`data-$key.toLowerCase()}`] = ""; 503 } else if (value) { 504 props[`data-$key.toLowerCase()}`] = value.toString(); 505 } 506 } 507 return props; 508 } 509 510 // node_modules/@base-ui/react/esm/utils/resolveClassName.js 511 function resolveClassName(className, state) { 512 return typeof className === "function" ? className(state) : className; 513 } 514 515 // node_modules/@base-ui/react/esm/utils/resolveStyle.js 516 function resolveStyle(style, state) { 517 return typeof style === "function" ? style(state) : style; 518 } 519 520 // node_modules/@base-ui/react/esm/merge-props/mergeProps.js 521 var EMPTY_PROPS = {}; 522 function mergeProps(a2, b2, c2, d2, e2) { 523 let merged = { 524 ...resolvePropsGetter(a2, EMPTY_PROPS) 525 }; 526 if (b2) { 527 merged = mergeOne(merged, b2); 528 } 529 if (c2) { 530 merged = mergeOne(merged, c2); 531 } 532 if (d2) { 533 merged = mergeOne(merged, d2); 534 } 535 if (e2) { 536 merged = mergeOne(merged, e2); 537 } 538 return merged; 539 } 540 function mergePropsN(props) { 541 if (props.length === 0) { 542 return EMPTY_PROPS; 543 } 544 if (props.length === 1) { 545 return resolvePropsGetter(props[0], EMPTY_PROPS); 546 } 547 let merged = { 548 ...resolvePropsGetter(props[0], EMPTY_PROPS) 549 }; 550 for (let i2 = 1; i2 < props.length; i2 += 1) { 551 merged = mergeOne(merged, props[i2]); 552 } 553 return merged; 554 } 555 function mergeOne(merged, inputProps) { 556 if (isPropsGetter(inputProps)) { 557 return inputProps(merged); 558 } 559 return mutablyMergeInto(merged, inputProps); 560 } 561 function mutablyMergeInto(mergedProps, externalProps) { 562 if (!externalProps) { 563 return mergedProps; 564 } 565 for (const propName in externalProps) { 566 const externalPropValue = externalProps[propName]; 567 switch (propName) { 568 case "style": { 569 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); 570 break; 571 } 572 case "className": { 573 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); 574 break; 575 } 576 default: { 577 if (isEventHandler(propName, externalPropValue)) { 578 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); 579 } else { 580 mergedProps[propName] = externalPropValue; 581 } 582 } 583 } 584 } 585 return mergedProps; 586 } 587 function isEventHandler(key, value) { 588 const code0 = key.charCodeAt(0); 589 const code1 = key.charCodeAt(1); 590 const code2 = key.charCodeAt(2); 591 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); 592 } 593 function isPropsGetter(inputProps) { 594 return typeof inputProps === "function"; 595 } 596 function resolvePropsGetter(inputProps, previousProps) { 597 if (isPropsGetter(inputProps)) { 598 return inputProps(previousProps); 599 } 600 return inputProps ?? EMPTY_PROPS; 601 } 602 function mergeEventHandlers(ourHandler, theirHandler) { 603 if (!theirHandler) { 604 return ourHandler; 605 } 606 if (!ourHandler) { 607 return theirHandler; 608 } 609 return (event) => { 610 if (isSyntheticEvent(event)) { 611 const baseUIEvent = event; 612 makeEventPreventable(baseUIEvent); 613 const result2 = theirHandler(baseUIEvent); 614 if (!baseUIEvent.baseUIHandlerPrevented) { 615 ourHandler?.(baseUIEvent); 616 } 617 return result2; 618 } 619 const result = theirHandler(event); 620 ourHandler?.(event); 621 return result; 622 }; 623 } 624 function makeEventPreventable(event) { 625 event.preventBaseUIHandler = () => { 626 event.baseUIHandlerPrevented = true; 627 }; 628 return event; 629 } 630 function mergeClassNames(ourClassName, theirClassName) { 631 if (theirClassName) { 632 if (ourClassName) { 633 return theirClassName + " " + ourClassName; 634 } 635 return theirClassName; 636 } 637 return ourClassName; 638 } 639 function isSyntheticEvent(event) { 640 return event != null && typeof event === "object" && "nativeEvent" in event; 641 } 642 643 // node_modules/@base-ui/utils/esm/empty.js 644 var EMPTY_ARRAY = Object.freeze([]); 645 var EMPTY_OBJECT = Object.freeze({}); 646 647 // node_modules/@base-ui/react/esm/utils/useRenderElement.js 648 var import_react = __toESM(require_react(), 1); 649 function useRenderElement(element, componentProps, params = {}) { 650 const renderProp = componentProps.render; 651 const outProps = useRenderElementProps(componentProps, params); 652 if (params.enabled === false) { 653 return null; 654 } 655 const state = params.state ?? EMPTY_OBJECT; 656 return evaluateRenderProp(element, renderProp, outProps, state); 657 } 658 function useRenderElementProps(componentProps, params = {}) { 659 const { 660 className: classNameProp, 661 style: styleProp, 662 render: renderProp 663 } = componentProps; 664 const { 665 state = EMPTY_OBJECT, 666 ref, 667 props, 668 stateAttributesMapping, 669 enabled = true 670 } = params; 671 const className = enabled ? resolveClassName(classNameProp, state) : void 0; 672 const style = enabled ? resolveStyle(styleProp, state) : void 0; 673 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; 674 const outProps = enabled ? mergeObjects(stateProps, Array.isArray(props) ? mergePropsN(props) : props) ?? EMPTY_OBJECT : EMPTY_OBJECT; 675 if (typeof document !== "undefined") { 676 if (!enabled) { 677 useMergedRefs(null, null); 678 } else if (Array.isArray(ref)) { 679 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); 680 } else { 681 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); 682 } 683 } 684 if (!enabled) { 685 return EMPTY_OBJECT; 686 } 687 if (className !== void 0) { 688 outProps.className = mergeClassNames(outProps.className, className); 689 } 690 if (style !== void 0) { 691 outProps.style = mergeObjects(outProps.style, style); 692 } 693 return outProps; 694 } 695 function evaluateRenderProp(element, render, props, state) { 696 if (render) { 697 if (typeof render === "function") { 698 return render(props, state); 699 } 700 const mergedProps = mergeProps(props, render.props); 701 mergedProps.ref = props.ref; 702 return /* @__PURE__ */ React5.cloneElement(render, mergedProps); 703 } 704 if (element) { 705 if (typeof element === "string") { 706 return renderTag(element, props); 707 } 708 } 709 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage(8)); 710 } 711 function renderTag(Tag, props) { 712 if (Tag === "button") { 713 return /* @__PURE__ */ (0, import_react.createElement)("button", { 714 type: "button", 715 ...props, 716 key: props.key 717 }); 718 } 719 if (Tag === "img") { 720 return /* @__PURE__ */ (0, import_react.createElement)("img", { 721 alt: "", 722 ...props, 723 key: props.key 724 }); 725 } 726 return /* @__PURE__ */ React5.createElement(Tag, props); 727 } 728 729 // node_modules/@base-ui/react/esm/use-render/useRender.js 730 function useRender(params) { 731 return useRenderElement(params.defaultTagName ?? "div", params, params); 732 } 733 734 // packages/icons/build-module/icon/index.mjs 735 var import_element2 = __toESM(require_element(), 1); 736 var icon_default = (0, import_element2.forwardRef)( 737 ({ icon, size = 24, ...props }, ref) => { 738 return (0, import_element2.cloneElement)(icon, { 739 width: size, 740 height: size, 741 ...props, 742 ref 743 }); 744 } 745 ); 746 747 // packages/icons/build-module/library/chevron-left.mjs 748 var import_primitives = __toESM(require_primitives(), 1); 749 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); 750 var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives.Path, { d: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z" }) }); 751 752 // packages/icons/build-module/library/chevron-right.mjs 753 var import_primitives2 = __toESM(require_primitives(), 1); 754 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); 755 var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives2.Path, { d: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z" }) }); 756 757 // packages/icons/build-module/library/more-vertical.mjs 758 var import_primitives3 = __toESM(require_primitives(), 1); 759 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); 760 var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives3.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); 761 762 // packages/icons/build-module/library/next.mjs 763 var import_primitives4 = __toESM(require_primitives(), 1); 764 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); 765 var next_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.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" }) }); 766 767 // packages/icons/build-module/library/previous.mjs 768 var import_primitives5 = __toESM(require_primitives(), 1); 769 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); 770 var previous_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.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" }) }); 771 772 // packages/ui/build-module/stack/stack.mjs 773 var import_element3 = __toESM(require_element(), 1); 774 if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='71d20935c2']")) { 775 const style = document.createElement("style"); 776 style.setAttribute("data-wp-hash", "71d20935c2"); 777 style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._19ce0419607e1896__stack{display:flex}}")); 778 document.head.appendChild(style); 779 } 780 var style_default = { "stack": "_19ce0419607e1896__stack" }; 781 var gapTokens = { 782 xs: "var(--wpds-dimension-gap-xs, 4px)", 783 sm: "var(--wpds-dimension-gap-sm, 8px)", 784 md: "var(--wpds-dimension-gap-md, 12px)", 785 lg: "var(--wpds-dimension-gap-lg, 16px)", 786 xl: "var(--wpds-dimension-gap-xl, 24px)", 787 "2xl": "var(--wpds-dimension-gap-2xl, 32px)", 788 "3xl": "var(--wpds-dimension-gap-3xl, 40px)" 789 }; 790 var Stack = (0, import_element3.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render, ...props }, ref) { 791 const style = { 792 gap: gap && gapTokens[gap], 793 alignItems: align, 794 justifyContent: justify, 795 flexDirection: direction, 796 flexWrap: wrap 797 }; 798 const element = useRender({ 799 render, 800 ref, 801 props: mergeProps(props, { style, className: style_default.stack }) 802 }); 803 return element; 804 }); 805 806 // packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs 807 var import_components = __toESM(require_components(), 1); 808 var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components.createSlotFill)("SidebarToggle"); 809 810 // packages/admin-ui/build-module/page/header.mjs 811 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); 812 function Header({ 813 headingLevel = 1, 814 breadcrumbs, 815 badges, 816 title, 817 subTitle, 818 actions, 819 showSidebarToggle = true 820 }) { 821 const HeadingTag = `h$headingLevel}`; 822 return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Stack, { direction: "column", className: "admin-ui-page__header", children: [ 823 /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Stack, { direction: "row", justify: "space-between", gap: "sm", children: [ 824 /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Stack, { direction: "row", gap: "sm", align: "center", justify: "start", children: [ 825 showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)( 826 SidebarToggleSlot, 827 { 828 bubblesVirtually: true, 829 className: "admin-ui-page__sidebar-toggle-slot" 830 } 831 ), 832 title && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(HeadingTag, { className: "admin-ui-page__header-title", children: title }), 833 breadcrumbs, 834 badges 835 ] }), 836 /* @__PURE__ */ (0, import_jsx_runtime7.jsx)( 837 Stack, 838 { 839 direction: "row", 840 gap: "sm", 841 style: { width: "auto", flexShrink: 0 }, 842 className: "admin-ui-page__header-actions", 843 align: "center", 844 children: actions 845 } 846 ) 847 ] }), 848 subTitle && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle }) 849 ] }); 850 } 851 852 // packages/admin-ui/build-module/page/index.mjs 853 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); 854 function Page({ 855 headingLevel, 856 breadcrumbs, 857 badges, 858 title, 859 subTitle, 860 children, 861 className, 862 actions, 863 hasPadding = false, 864 showSidebarToggle = true 865 }) { 866 const classes = clsx_default("admin-ui-page", className); 867 return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [ 868 (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)( 869 Header, 870 { 871 headingLevel, 872 breadcrumbs, 873 badges, 874 title, 875 subTitle, 876 actions, 877 showSidebarToggle 878 } 879 ), 880 hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children 881 ] }); 882 } 883 Page.SidebarToggleFill = SidebarToggleFill; 884 var page_default = Page; 885 886 // routes/font-list/stage.tsx 887 var import_i18n46 = __toESM(require_i18n()); 888 var import_components62 = __toESM(require_components()); 889 var import_editor = __toESM(require_editor()); 890 var import_core_data12 = __toESM(require_core_data()); 891 var import_data13 = __toESM(require_data()); 892 var import_element35 = __toESM(require_element()); 893 894 // packages/global-styles-ui/build-module/global-styles-ui.mjs 895 var import_components61 = __toESM(require_components(), 1); 896 var import_blocks5 = __toESM(require_blocks(), 1); 897 var import_data12 = __toESM(require_data(), 1); 898 var import_block_editor13 = __toESM(require_block_editor(), 1); 899 var import_element34 = __toESM(require_element(), 1); 900 var import_compose6 = __toESM(require_compose(), 1); 901 902 // packages/global-styles-engine/build-module/utils/object.mjs 903 function setImmutably(object, path, value) { 904 path = Array.isArray(path) ? [...path] : [path]; 905 object = Array.isArray(object) ? [...object] : { ...object }; 906 const leaf = path.pop(); 907 let prev = object; 908 for (const key of path) { 909 const lvl = prev[key]; 910 prev = prev[key] = Array.isArray(lvl) ? [...lvl] : { ...lvl }; 911 } 912 prev[leaf] = value; 913 return object; 914 } 915 var getValueFromObjectPath = (object, path, defaultValue) => { 916 const arrayPath = Array.isArray(path) ? path : path.split("."); 917 let value = object; 918 arrayPath.forEach((fieldName) => { 919 value = value?.[fieldName]; 920 }); 921 return value ?? defaultValue; 922 }; 923 924 // packages/global-styles-engine/build-module/settings/get-setting.mjs 925 var VALID_SETTINGS = [ 926 "appearanceTools", 927 "useRootPaddingAwareAlignments", 928 "background.backgroundImage", 929 "background.backgroundRepeat", 930 "background.backgroundSize", 931 "background.backgroundPosition", 932 "border.color", 933 "border.radius", 934 "border.radiusSizes", 935 "border.style", 936 "border.width", 937 "shadow.presets", 938 "shadow.defaultPresets", 939 "color.background", 940 "color.button", 941 "color.caption", 942 "color.custom", 943 "color.customDuotone", 944 "color.customGradient", 945 "color.defaultDuotone", 946 "color.defaultGradients", 947 "color.defaultPalette", 948 "color.duotone", 949 "color.gradients", 950 "color.heading", 951 "color.link", 952 "color.palette", 953 "color.text", 954 "custom", 955 "dimensions.aspectRatio", 956 "dimensions.height", 957 "dimensions.minHeight", 958 "dimensions.width", 959 "dimensions.dimensionSizes", 960 "layout.contentSize", 961 "layout.definitions", 962 "layout.wideSize", 963 "lightbox.enabled", 964 "lightbox.allowEditing", 965 "position.fixed", 966 "position.sticky", 967 "spacing.customSpacingSize", 968 "spacing.defaultSpacingSizes", 969 "spacing.spacingSizes", 970 "spacing.spacingScale", 971 "spacing.blockGap", 972 "spacing.margin", 973 "spacing.padding", 974 "spacing.units", 975 "typography.fluid", 976 "typography.customFontSize", 977 "typography.defaultFontSizes", 978 "typography.dropCap", 979 "typography.fontFamilies", 980 "typography.fontSizes", 981 "typography.fontStyle", 982 "typography.fontWeight", 983 "typography.letterSpacing", 984 "typography.lineHeight", 985 "typography.textAlign", 986 "typography.textColumns", 987 "typography.textDecoration", 988 "typography.textIndent", 989 "typography.textTransform", 990 "typography.writingMode" 991 ]; 992 function getSetting(globalStyles, path, blockName) { 993 const appendedBlockPath = blockName ? ".blocks." + blockName : ""; 994 const appendedPropertyPath = path ? "." + path : ""; 995 const contextualPath = `settings$appendedBlockPath}$appendedPropertyPath}`; 996 const globalPath = `settings$appendedPropertyPath}`; 997 if (path) { 998 return getValueFromObjectPath(globalStyles, contextualPath) ?? getValueFromObjectPath(globalStyles, globalPath); 999 } 1000 let result = {}; 1001 VALID_SETTINGS.forEach((setting) => { 1002 const value = getValueFromObjectPath( 1003 globalStyles, 1004 `settings$appendedBlockPath}.$setting}` 1005 ) ?? getValueFromObjectPath(globalStyles, `settings.$setting}`); 1006 if (value !== void 0) { 1007 result = setImmutably(result, setting.split("."), value); 1008 } 1009 }); 1010 return result; 1011 } 1012 1013 // packages/global-styles-engine/build-module/settings/set-setting.mjs 1014 function setSetting(globalStyles, path, newValue, blockName) { 1015 const appendedBlockPath = blockName ? ".blocks." + blockName : ""; 1016 const appendedPropertyPath = path ? "." + path : ""; 1017 const finalPath = `settings$appendedBlockPath}$appendedPropertyPath}`; 1018 return setImmutably( 1019 globalStyles, 1020 finalPath.split("."), 1021 newValue 1022 ); 1023 } 1024 1025 // packages/global-styles-engine/build-module/utils/common.mjs 1026 var import_style_engine = __toESM(require_style_engine(), 1); 1027 1028 // packages/global-styles-engine/build-module/utils/fluid.mjs 1029 var DEFAULT_MAXIMUM_VIEWPORT_WIDTH = "1600px"; 1030 var DEFAULT_MINIMUM_VIEWPORT_WIDTH = "320px"; 1031 var DEFAULT_SCALE_FACTOR = 1; 1032 var DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN = 0.25; 1033 var DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX = 0.75; 1034 var DEFAULT_MINIMUM_FONT_SIZE_LIMIT = "14px"; 1035 function getComputedFluidTypographyValue({ 1036 minimumFontSize, 1037 maximumFontSize, 1038 fontSize, 1039 minimumViewportWidth = DEFAULT_MINIMUM_VIEWPORT_WIDTH, 1040 maximumViewportWidth = DEFAULT_MAXIMUM_VIEWPORT_WIDTH, 1041 scaleFactor = DEFAULT_SCALE_FACTOR, 1042 minimumFontSizeLimit 1043 }) { 1044 minimumFontSizeLimit = !!getTypographyValueAndUnit(minimumFontSizeLimit) ? minimumFontSizeLimit : DEFAULT_MINIMUM_FONT_SIZE_LIMIT; 1045 if (fontSize) { 1046 const fontSizeParsed = getTypographyValueAndUnit(fontSize); 1047 if (!fontSizeParsed?.unit || !fontSizeParsed?.value) { 1048 return null; 1049 } 1050 const minimumFontSizeLimitParsed = getTypographyValueAndUnit( 1051 minimumFontSizeLimit, 1052 { 1053 coerceTo: fontSizeParsed.unit 1054 } 1055 ); 1056 if (!!minimumFontSizeLimitParsed?.value && !minimumFontSize && !maximumFontSize) { 1057 if (fontSizeParsed?.value <= minimumFontSizeLimitParsed?.value) { 1058 return null; 1059 } 1060 } 1061 if (!maximumFontSize) { 1062 maximumFontSize = `$fontSizeParsed.value}$fontSizeParsed.unit}`; 1063 } 1064 if (!minimumFontSize) { 1065 const fontSizeValueInPx = fontSizeParsed.unit === "px" ? fontSizeParsed.value : fontSizeParsed.value * 16; 1066 const minimumFontSizeFactor = Math.min( 1067 Math.max( 1068 1 - 0.075 * Math.log2(fontSizeValueInPx), 1069 DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN 1070 ), 1071 DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX 1072 ); 1073 const calculatedMinimumFontSize = roundToPrecision( 1074 fontSizeParsed.value * minimumFontSizeFactor, 1075 3 1076 ); 1077 if (!!minimumFontSizeLimitParsed?.value && calculatedMinimumFontSize < minimumFontSizeLimitParsed?.value) { 1078 minimumFontSize = `$minimumFontSizeLimitParsed.value}$minimumFontSizeLimitParsed.unit}`; 1079 } else { 1080 minimumFontSize = `$calculatedMinimumFontSize}$fontSizeParsed.unit}`; 1081 } 1082 } 1083 } 1084 const minimumFontSizeParsed = getTypographyValueAndUnit(minimumFontSize); 1085 const fontSizeUnit = minimumFontSizeParsed?.unit || "rem"; 1086 const maximumFontSizeParsed = getTypographyValueAndUnit(maximumFontSize, { 1087 coerceTo: fontSizeUnit 1088 }); 1089 if (!minimumFontSizeParsed || !maximumFontSizeParsed) { 1090 return null; 1091 } 1092 const minimumFontSizeRem = getTypographyValueAndUnit(minimumFontSize, { 1093 coerceTo: "rem" 1094 }); 1095 const maximumViewportWidthParsed = getTypographyValueAndUnit( 1096 maximumViewportWidth, 1097 { coerceTo: fontSizeUnit } 1098 ); 1099 const minimumViewportWidthParsed = getTypographyValueAndUnit( 1100 minimumViewportWidth, 1101 { coerceTo: fontSizeUnit } 1102 ); 1103 if (!maximumViewportWidthParsed || !minimumViewportWidthParsed || !minimumFontSizeRem) { 1104 return null; 1105 } 1106 const linearDenominator = maximumViewportWidthParsed.value - minimumViewportWidthParsed.value; 1107 if (!linearDenominator) { 1108 return null; 1109 } 1110 const minViewportWidthOffsetValue = roundToPrecision( 1111 minimumViewportWidthParsed.value / 100, 1112 3 1113 ); 1114 const viewportWidthOffset = roundToPrecision(minViewportWidthOffsetValue, 3) + fontSizeUnit; 1115 const linearFactor = 100 * ((maximumFontSizeParsed.value - minimumFontSizeParsed.value) / linearDenominator); 1116 const linearFactorScaled = roundToPrecision( 1117 (linearFactor || 1) * scaleFactor, 1118 3 1119 ); 1120 const fluidTargetFontSize = `$minimumFontSizeRem.value}$minimumFontSizeRem.unit} + ((1vw - $viewportWidthOffset}) * $linearFactorScaled})`; 1121 return `clamp($minimumFontSize}, $fluidTargetFontSize}, $maximumFontSize})`; 1122 } 1123 function getTypographyValueAndUnit(rawValue, options = {}) { 1124 if (typeof rawValue !== "string" && typeof rawValue !== "number") { 1125 return null; 1126 } 1127 if (isFinite(rawValue)) { 1128 rawValue = `$rawValue}px`; 1129 } 1130 const { coerceTo, rootSizeValue, acceptableUnits } = { 1131 coerceTo: "", 1132 // Default browser font size. Later we could inject some JS to compute this `getComputedStyle( document.querySelector( "html" ) ).fontSize`. 1133 rootSizeValue: 16, 1134 acceptableUnits: ["rem", "px", "em"], 1135 ...options 1136 }; 1137 const acceptableUnitsGroup = acceptableUnits?.join("|"); 1138 const regexUnits = new RegExp( 1139 `^(\\d*\\.?\\d+)($acceptableUnitsGroup}){1,1}$` 1140 ); 1141 const matches = rawValue.toString().match(regexUnits); 1142 if (!matches || matches.length < 3) { 1143 return null; 1144 } 1145 let [, value, unit] = matches; 1146 let returnValue = parseFloat(value); 1147 if ("px" === coerceTo && ("em" === unit || "rem" === unit)) { 1148 returnValue = returnValue * rootSizeValue; 1149 unit = coerceTo; 1150 } 1151 if ("px" === unit && ("em" === coerceTo || "rem" === coerceTo)) { 1152 returnValue = returnValue / rootSizeValue; 1153 unit = coerceTo; 1154 } 1155 if (("em" === coerceTo || "rem" === coerceTo) && ("em" === unit || "rem" === unit)) { 1156 unit = coerceTo; 1157 } 1158 if (!unit) { 1159 return null; 1160 } 1161 return { 1162 value: roundToPrecision(returnValue, 3), 1163 unit 1164 }; 1165 } 1166 function roundToPrecision(value, digits = 3) { 1167 const base = Math.pow(10, digits); 1168 return Math.round(value * base) / base; 1169 } 1170 1171 // packages/global-styles-engine/build-module/utils/typography.mjs 1172 function isFluidTypographyEnabled(typographySettings) { 1173 const fluidSettings = typographySettings?.fluid; 1174 return true === fluidSettings || fluidSettings && typeof fluidSettings === "object" && Object.keys(fluidSettings).length > 0; 1175 } 1176 function getFluidTypographyOptionsFromSettings(settings) { 1177 const typographySettings = settings?.typography ?? {}; 1178 const layoutSettings = settings?.layout; 1179 const defaultMaxViewportWidth = getTypographyValueAndUnit( 1180 layoutSettings?.wideSize 1181 ) ? layoutSettings?.wideSize : null; 1182 return isFluidTypographyEnabled(typographySettings) && defaultMaxViewportWidth ? { 1183 fluid: { 1184 maxViewportWidth: defaultMaxViewportWidth, 1185 ...typeof typographySettings.fluid === "object" ? typographySettings.fluid : {} 1186 } 1187 } : { 1188 fluid: typographySettings?.fluid 1189 }; 1190 } 1191 function getTypographyFontSizeValue(preset, settings) { 1192 const { size: defaultSize } = preset; 1193 if (!defaultSize || "0" === defaultSize || false === preset?.fluid) { 1194 return defaultSize; 1195 } 1196 if (!isFluidTypographyEnabled(settings?.typography) && !isFluidTypographyEnabled(preset)) { 1197 return defaultSize; 1198 } 1199 const fluidTypographySettings = getFluidTypographyOptionsFromSettings(settings)?.fluid ?? {}; 1200 const fluidFontSizeValue = getComputedFluidTypographyValue({ 1201 minimumFontSize: typeof preset?.fluid === "boolean" ? void 0 : preset?.fluid?.min, 1202 maximumFontSize: typeof preset?.fluid === "boolean" ? void 0 : preset?.fluid?.max, 1203 fontSize: defaultSize, 1204 minimumFontSizeLimit: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.minFontSize : void 0, 1205 maximumViewportWidth: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.maxViewportWidth : void 0, 1206 minimumViewportWidth: typeof fluidTypographySettings === "object" ? fluidTypographySettings?.minViewportWidth : void 0 1207 }); 1208 if (!!fluidFontSizeValue) { 1209 return fluidFontSizeValue; 1210 } 1211 return defaultSize; 1212 } 1213 1214 // packages/global-styles-engine/build-module/utils/common.mjs 1215 var PRESET_METADATA = [ 1216 { 1217 path: ["color", "palette"], 1218 valueKey: "color", 1219 cssVarInfix: "color", 1220 classes: [ 1221 { classSuffix: "color", propertyName: "color" }, 1222 { 1223 classSuffix: "background-color", 1224 propertyName: "background-color" 1225 }, 1226 { 1227 classSuffix: "border-color", 1228 propertyName: "border-color" 1229 } 1230 ] 1231 }, 1232 { 1233 path: ["color", "gradients"], 1234 valueKey: "gradient", 1235 cssVarInfix: "gradient", 1236 classes: [ 1237 { 1238 classSuffix: "gradient-background", 1239 propertyName: "background" 1240 } 1241 ] 1242 }, 1243 { 1244 path: ["color", "duotone"], 1245 valueKey: "colors", 1246 cssVarInfix: "duotone", 1247 valueFunc: ({ slug }) => `url( '#wp-duotone-$slug}' )`, 1248 classes: [] 1249 }, 1250 { 1251 path: ["shadow", "presets"], 1252 valueKey: "shadow", 1253 cssVarInfix: "shadow", 1254 classes: [] 1255 }, 1256 { 1257 path: ["typography", "fontSizes"], 1258 valueFunc: (preset, settings) => getTypographyFontSizeValue(preset, settings), 1259 valueKey: "size", 1260 cssVarInfix: "font-size", 1261 classes: [{ classSuffix: "font-size", propertyName: "font-size" }] 1262 }, 1263 { 1264 path: ["typography", "fontFamilies"], 1265 valueKey: "fontFamily", 1266 cssVarInfix: "font-family", 1267 classes: [ 1268 { classSuffix: "font-family", propertyName: "font-family" } 1269 ] 1270 }, 1271 { 1272 path: ["spacing", "spacingSizes"], 1273 valueKey: "size", 1274 cssVarInfix: "spacing", 1275 valueFunc: ({ size }) => size, 1276 classes: [] 1277 }, 1278 { 1279 path: ["border", "radiusSizes"], 1280 valueKey: "size", 1281 cssVarInfix: "border-radius", 1282 classes: [] 1283 }, 1284 { 1285 path: ["dimensions", "dimensionSizes"], 1286 valueKey: "size", 1287 cssVarInfix: "dimension", 1288 classes: [] 1289 } 1290 ]; 1291 function findInPresetsBy(settings, blockName, presetPath = [], presetProperty = "slug", presetValueValue) { 1292 const orderedPresetsByOrigin = [ 1293 blockName ? getValueFromObjectPath(settings, [ 1294 "blocks", 1295 blockName, 1296 ...presetPath 1297 ]) : void 0, 1298 getValueFromObjectPath(settings, presetPath) 1299 ].filter(Boolean); 1300 for (const presetByOrigin of orderedPresetsByOrigin) { 1301 if (presetByOrigin) { 1302 const origins = ["custom", "theme", "default"]; 1303 for (const origin of origins) { 1304 const presets = presetByOrigin[origin]; 1305 if (presets) { 1306 const presetObject = presets.find( 1307 (preset) => preset[presetProperty] === presetValueValue 1308 ); 1309 if (presetObject) { 1310 if (presetProperty === "slug") { 1311 return presetObject; 1312 } 1313 const highestPresetObjectWithSameSlug = findInPresetsBy( 1314 settings, 1315 blockName, 1316 presetPath, 1317 "slug", 1318 presetObject.slug 1319 ); 1320 if (highestPresetObjectWithSameSlug[presetProperty] === presetObject[presetProperty]) { 1321 return presetObject; 1322 } 1323 return void 0; 1324 } 1325 } 1326 } 1327 } 1328 } 1329 } 1330 function getValueFromPresetVariable(features, blockName, variable, [presetType, slug] = []) { 1331 const metadata = PRESET_METADATA.find( 1332 (data) => data.cssVarInfix === presetType 1333 ); 1334 if (!metadata || !features.settings) { 1335 return variable; 1336 } 1337 const presetObject = findInPresetsBy( 1338 features.settings, 1339 blockName, 1340 metadata.path, 1341 "slug", 1342 slug 1343 ); 1344 if (presetObject) { 1345 const { valueKey } = metadata; 1346 const result = presetObject[valueKey]; 1347 return getValueFromVariable(features, blockName, result); 1348 } 1349 return variable; 1350 } 1351 function getValueFromCustomVariable(features, blockName, variable, path = []) { 1352 const result = (blockName ? getValueFromObjectPath(features?.settings ?? {}, [ 1353 "blocks", 1354 blockName, 1355 "custom", 1356 ...path 1357 ]) : void 0) ?? getValueFromObjectPath(features?.settings ?? {}, [ 1358 "custom", 1359 ...path 1360 ]); 1361 if (!result) { 1362 return variable; 1363 } 1364 return getValueFromVariable(features, blockName, result); 1365 } 1366 function getValueFromVariable(features, blockName, variable) { 1367 if (!variable || typeof variable !== "string") { 1368 if (typeof variable === "object" && variable !== null && "ref" in variable && typeof variable.ref === "string") { 1369 const resolvedVariable = getValueFromObjectPath( 1370 features, 1371 variable.ref 1372 ); 1373 if (!resolvedVariable || typeof resolvedVariable === "object" && "ref" in resolvedVariable) { 1374 return resolvedVariable; 1375 } 1376 variable = resolvedVariable; 1377 } else { 1378 return variable; 1379 } 1380 } 1381 const USER_VALUE_PREFIX = "var:"; 1382 const THEME_VALUE_PREFIX = "var(--wp--"; 1383 const THEME_VALUE_SUFFIX = ")"; 1384 let parsedVar; 1385 if (variable.startsWith(USER_VALUE_PREFIX)) { 1386 parsedVar = variable.slice(USER_VALUE_PREFIX.length).split("|"); 1387 } else if (variable.startsWith(THEME_VALUE_PREFIX) && variable.endsWith(THEME_VALUE_SUFFIX)) { 1388 parsedVar = variable.slice(THEME_VALUE_PREFIX.length, -THEME_VALUE_SUFFIX.length).split("--"); 1389 } else { 1390 return variable; 1391 } 1392 const [type, ...path] = parsedVar; 1393 if (type === "preset") { 1394 return getValueFromPresetVariable( 1395 features, 1396 blockName, 1397 variable, 1398 path 1399 ); 1400 } 1401 if (type === "custom") { 1402 return getValueFromCustomVariable( 1403 features, 1404 blockName, 1405 variable, 1406 path 1407 ); 1408 } 1409 return variable; 1410 } 1411 1412 // packages/global-styles-engine/build-module/settings/get-style.mjs 1413 function getStyle(globalStyles, path, blockName, shouldDecodeEncode = true) { 1414 const appendedPath = path ? "." + path : ""; 1415 const finalPath = !blockName ? `styles$appendedPath}` : `styles.blocks.$blockName}$appendedPath}`; 1416 if (!globalStyles) { 1417 return void 0; 1418 } 1419 const rawResult = getValueFromObjectPath(globalStyles, finalPath); 1420 const result = shouldDecodeEncode ? getValueFromVariable(globalStyles, blockName, rawResult) : rawResult; 1421 return result; 1422 } 1423 1424 // packages/global-styles-engine/build-module/settings/set-style.mjs 1425 function setStyle(globalStyles, path, newValue, blockName) { 1426 const appendedPath = path ? "." + path : ""; 1427 const finalPath = !blockName ? `styles$appendedPath}` : `styles.blocks.$blockName}$appendedPath}`; 1428 return setImmutably( 1429 globalStyles, 1430 finalPath.split("."), 1431 newValue 1432 ); 1433 } 1434 1435 // packages/global-styles-engine/build-module/core/equal.mjs 1436 var import_es6 = __toESM(require_es6(), 1); 1437 function areGlobalStylesEqual(original, variation) { 1438 if (typeof original !== "object" || typeof variation !== "object") { 1439 return original === variation; 1440 } 1441 return (0, import_es6.default)(original?.styles, variation?.styles) && (0, import_es6.default)(original?.settings, variation?.settings); 1442 } 1443 1444 // packages/global-styles-engine/build-module/core/merge.mjs 1445 var import_deepmerge = __toESM(require_cjs(), 1); 1446 1447 // node_modules/is-plain-object/dist/is-plain-object.mjs 1448 function isObject(o3) { 1449 return Object.prototype.toString.call(o3) === "[object Object]"; 1450 } 1451 function isPlainObject(o3) { 1452 var ctor, prot; 1453 if (isObject(o3) === false) return false; 1454 ctor = o3.constructor; 1455 if (ctor === void 0) return true; 1456 prot = ctor.prototype; 1457 if (isObject(prot) === false) return false; 1458 if (prot.hasOwnProperty("isPrototypeOf") === false) { 1459 return false; 1460 } 1461 return true; 1462 } 1463 1464 // packages/global-styles-engine/build-module/core/merge.mjs 1465 function mergeGlobalStyles(base, user) { 1466 return (0, import_deepmerge.default)(base, user, { 1467 /* 1468 * We only pass as arrays the presets, 1469 * in which case we want the new array of values 1470 * to override the old array (no merging). 1471 */ 1472 isMergeableObject: isPlainObject, 1473 /* 1474 * Exceptions to the above rule. 1475 * Background images should be replaced, not merged, 1476 * as they themselves are specific object definitions for the style. 1477 */ 1478 customMerge: (key) => { 1479 if (key === "backgroundImage") { 1480 return (baseConfig, userConfig) => userConfig ?? baseConfig; 1481 } 1482 return void 0; 1483 } 1484 }); 1485 } 1486 1487 // node_modules/colord/index.mjs 1488 var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; 1489 var t = function(r3) { 1490 return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; 1491 }; 1492 var n = function(r3, t3, n2) { 1493 return void 0 === t3 && (t3 = 0), void 0 === n2 && (n2 = Math.pow(10, t3)), Math.round(n2 * r3) / n2 + 0; 1494 }; 1495 var e = function(r3, t3, n2) { 1496 return void 0 === t3 && (t3 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t3 ? r3 : t3; 1497 }; 1498 var u = function(r3) { 1499 return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; 1500 }; 1501 var a = function(r3) { 1502 return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; 1503 }; 1504 var o = function(r3) { 1505 return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; 1506 }; 1507 var i = /^#([0-9a-f]{3,8})$/i; 1508 var s = function(r3) { 1509 var t3 = r3.toString(16); 1510 return t3.length < 2 ? "0" + t3 : t3; 1511 }; 1512 var h = function(r3) { 1513 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; 1514 return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o3 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; 1515 }; 1516 var b = function(r3) { 1517 var t3 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; 1518 t3 = t3 / 360 * 6, n2 /= 100, e2 /= 100; 1519 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; 1520 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 }; 1521 }; 1522 var g = function(r3) { 1523 return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; 1524 }; 1525 var d = function(r3) { 1526 return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; 1527 }; 1528 var f = function(r3) { 1529 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 })); 1530 var t3, n2, e2; 1531 }; 1532 var c = function(r3) { 1533 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 }; 1534 var t3, n2, e2, u2; 1535 }; 1536 var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 1537 var p2 = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 1538 var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 1539 var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 1540 var y = { string: [[function(r3) { 1541 var t3 = i.exec(r3); 1542 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; 1543 }, "hex"], [function(r3) { 1544 var t3 = v.exec(r3) || m.exec(r3); 1545 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; 1546 }, "rgb"], [function(t3) { 1547 var n2 = l.exec(t3) || p2.exec(t3); 1548 if (!n2) return null; 1549 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) }); 1550 return f(a2); 1551 }, "hsl"]], object: [[function(r3) { 1552 var n2 = r3.r, e2 = r3.g, u2 = r3.b, o3 = r3.a, i2 = void 0 === o3 ? 1 : o3; 1553 return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; 1554 }, "rgb"], [function(r3) { 1555 var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o3 = void 0 === a2 ? 1 : a2; 1556 if (!t(n2) || !t(e2) || !t(u2)) return null; 1557 var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o3) }); 1558 return f(i2); 1559 }, "hsl"], [function(r3) { 1560 var n2 = r3.h, a2 = r3.s, o3 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; 1561 if (!t(n2) || !t(a2) || !t(o3)) return null; 1562 var h2 = (function(r4) { 1563 return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; 1564 })({ h: Number(n2), s: Number(a2), v: Number(o3), a: Number(s2) }); 1565 return b(h2); 1566 }, "hsv"]] }; 1567 var N = function(r3, t3) { 1568 for (var n2 = 0; n2 < t3.length; n2++) { 1569 var e2 = t3[n2][0](r3); 1570 if (e2) return [e2, t3[n2][1]]; 1571 } 1572 return [null, void 0]; 1573 }; 1574 var x = function(r3) { 1575 return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; 1576 }; 1577 var M = function(r3, t3) { 1578 var n2 = c(r3); 1579 return { h: n2.h, s: e(n2.s + 100 * t3, 0, 100), l: n2.l, a: n2.a }; 1580 }; 1581 var H = function(r3) { 1582 return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; 1583 }; 1584 var $ = function(r3, t3) { 1585 var n2 = c(r3); 1586 return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t3, 0, 100), a: n2.a }; 1587 }; 1588 var j = (function() { 1589 function r3(r4) { 1590 this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; 1591 } 1592 return r3.prototype.isValid = function() { 1593 return null !== this.parsed; 1594 }, r3.prototype.brightness = function() { 1595 return n(H(this.rgba), 2); 1596 }, r3.prototype.isDark = function() { 1597 return H(this.rgba) < 0.5; 1598 }, r3.prototype.isLight = function() { 1599 return H(this.rgba) >= 0.5; 1600 }, r3.prototype.toHex = function() { 1601 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; 1602 var r4, t3, e2, u2, a2, i2; 1603 }, r3.prototype.toRgb = function() { 1604 return o(this.rgba); 1605 }, r3.prototype.toRgbString = function() { 1606 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 + ")"; 1607 var r4, t3, n2, e2, u2; 1608 }, r3.prototype.toHsl = function() { 1609 return d(c(this.rgba)); 1610 }, r3.prototype.toHslString = function() { 1611 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 + "%)"; 1612 var r4, t3, n2, e2, u2; 1613 }, r3.prototype.toHsv = function() { 1614 return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; 1615 var r4; 1616 }, r3.prototype.invert = function() { 1617 return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); 1618 var r4; 1619 }, r3.prototype.saturate = function(r4) { 1620 return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); 1621 }, r3.prototype.desaturate = function(r4) { 1622 return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); 1623 }, r3.prototype.grayscale = function() { 1624 return w(M(this.rgba, -1)); 1625 }, r3.prototype.lighten = function(r4) { 1626 return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); 1627 }, r3.prototype.darken = function(r4) { 1628 return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); 1629 }, r3.prototype.rotate = function(r4) { 1630 return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); 1631 }, r3.prototype.alpha = function(r4) { 1632 return "number" == typeof r4 ? w({ r: (t3 = this.rgba).r, g: t3.g, b: t3.b, a: r4 }) : n(this.rgba.a, 3); 1633 var t3; 1634 }, r3.prototype.hue = function(r4) { 1635 var t3 = c(this.rgba); 1636 return "number" == typeof r4 ? w({ h: r4, s: t3.s, l: t3.l, a: t3.a }) : n(t3.h); 1637 }, r3.prototype.isEqual = function(r4) { 1638 return this.toHex() === w(r4).toHex(); 1639 }, r3; 1640 })(); 1641 var w = function(r3) { 1642 return r3 instanceof j ? r3 : new j(r3); 1643 }; 1644 var S = []; 1645 var k = function(r3) { 1646 r3.forEach(function(r4) { 1647 S.indexOf(r4) < 0 && (r4(j, y), S.push(r4)); 1648 }); 1649 }; 1650 1651 // packages/global-styles-ui/build-module/provider.mjs 1652 var import_element5 = __toESM(require_element(), 1); 1653 1654 // packages/global-styles-ui/build-module/context.mjs 1655 var import_element4 = __toESM(require_element(), 1); 1656 var GlobalStylesContext = (0, import_element4.createContext)({ 1657 user: { styles: {}, settings: {} }, 1658 base: { styles: {}, settings: {} }, 1659 merged: { styles: {}, settings: {} }, 1660 onChange: () => { 1661 }, 1662 fontLibraryEnabled: false 1663 }); 1664 1665 // packages/global-styles-ui/build-module/provider.mjs 1666 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); 1667 function GlobalStylesProvider({ 1668 children, 1669 value, 1670 baseValue, 1671 onChange, 1672 fontLibraryEnabled 1673 }) { 1674 const merged = (0, import_element5.useMemo)(() => { 1675 return mergeGlobalStyles(baseValue, value); 1676 }, [baseValue, value]); 1677 const contextValue = (0, import_element5.useMemo)( 1678 () => ({ 1679 user: value, 1680 base: baseValue, 1681 merged, 1682 onChange, 1683 fontLibraryEnabled 1684 }), 1685 [value, baseValue, merged, onChange, fontLibraryEnabled] 1686 ); 1687 return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(GlobalStylesContext.Provider, { value: contextValue, children }); 1688 } 1689 1690 // packages/global-styles-ui/build-module/screen-root.mjs 1691 var import_components8 = __toESM(require_components(), 1); 1692 var import_i18n4 = __toESM(require_i18n(), 1); 1693 var import_data2 = __toESM(require_data(), 1); 1694 var import_core_data2 = __toESM(require_core_data(), 1); 1695 1696 // packages/global-styles-ui/build-module/icon-with-current-color.mjs 1697 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); 1698 function IconWithCurrentColor({ 1699 className, 1700 ...props 1701 }) { 1702 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)( 1703 icon_default, 1704 { 1705 className: clsx_default( 1706 className, 1707 "global-styles-ui-icon-with-current-color" 1708 ), 1709 ...props 1710 } 1711 ); 1712 } 1713 1714 // packages/global-styles-ui/build-module/navigation-button.mjs 1715 var import_components2 = __toESM(require_components(), 1); 1716 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); 1717 function GenericNavigationButton({ 1718 icon, 1719 children, 1720 ...props 1721 }) { 1722 return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_components2.__experimentalItem, { ...props, children: [ 1723 icon && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_components2.__experimentalHStack, { justify: "flex-start", children: [ 1724 /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(IconWithCurrentColor, { icon, size: 24 }), 1725 /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components2.FlexItem, { children }) 1726 ] }), 1727 !icon && children 1728 ] }); 1729 } 1730 function NavigationButtonAsItem(props) { 1731 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components2.Navigator.Button, { as: GenericNavigationButton, ...props }); 1732 } 1733 1734 // packages/global-styles-ui/build-module/root-menu.mjs 1735 var import_components3 = __toESM(require_components(), 1); 1736 var import_i18n2 = __toESM(require_i18n(), 1); 1737 var import_block_editor = __toESM(require_block_editor(), 1); 1738 1739 // node_modules/colord/plugins/a11y.mjs 1740 var o2 = function(o3) { 1741 var t3 = o3 / 255; 1742 return t3 < 0.04045 ? t3 / 12.92 : Math.pow((t3 + 0.055) / 1.055, 2.4); 1743 }; 1744 var t2 = function(t3) { 1745 return 0.2126 * o2(t3.r) + 0.7152 * o2(t3.g) + 0.0722 * o2(t3.b); 1746 }; 1747 function a11y_default(o3) { 1748 o3.prototype.luminance = function() { 1749 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; 1750 var o4, r3, n2; 1751 }, o3.prototype.contrast = function(r3) { 1752 void 0 === r3 && (r3 = "#FFF"); 1753 var n2, a2, i2, e2, v2, u2, d2, c2 = r3 instanceof o3 ? r3 : new o3(r3); 1754 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; 1755 }, o3.prototype.isReadable = function(o4, t3) { 1756 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); 1757 var r3, n2, a2, i2, e2; 1758 }; 1759 } 1760 1761 // packages/global-styles-ui/build-module/hooks.mjs 1762 var import_element6 = __toESM(require_element(), 1); 1763 var import_data = __toESM(require_data(), 1); 1764 var import_core_data = __toESM(require_core_data(), 1); 1765 var import_i18n = __toESM(require_i18n(), 1); 1766 1767 // packages/global-styles-ui/build-module/utils.mjs 1768 function removePropertiesFromObject(object, properties) { 1769 if (!properties?.length) { 1770 return object; 1771 } 1772 if (typeof object !== "object" || !object || !Object.keys(object).length) { 1773 return object; 1774 } 1775 for (const key in object) { 1776 if (properties.includes(key)) { 1777 delete object[key]; 1778 } else if (typeof object[key] === "object") { 1779 removePropertiesFromObject(object[key], properties); 1780 } 1781 } 1782 return object; 1783 } 1784 var filterObjectByProperties = (object, properties) => { 1785 if (!object || !properties?.length) { 1786 return {}; 1787 } 1788 const newObject = {}; 1789 Object.keys(object).forEach((key) => { 1790 if (properties.includes(key)) { 1791 newObject[key] = object[key]; 1792 } else if (typeof object[key] === "object") { 1793 const newFilter = filterObjectByProperties( 1794 object[key], 1795 properties 1796 ); 1797 if (Object.keys(newFilter).length) { 1798 newObject[key] = newFilter; 1799 } 1800 } 1801 }); 1802 return newObject; 1803 }; 1804 function isVariationWithProperties(variation, properties) { 1805 const variationWithProperties = filterObjectByProperties( 1806 structuredClone(variation), 1807 properties 1808 ); 1809 return areGlobalStylesEqual(variationWithProperties, variation); 1810 } 1811 function getFontFamilyFromSetting(fontFamilies, setting) { 1812 if (!Array.isArray(fontFamilies) || !setting) { 1813 return null; 1814 } 1815 const fontFamilyVariable = setting.replace("var(", "").replace(")", ""); 1816 const fontFamilySlug = fontFamilyVariable?.split("--").slice(-1)[0]; 1817 return fontFamilies.find( 1818 (fontFamily) => fontFamily.slug === fontFamilySlug 1819 ); 1820 } 1821 function getFontFamilies(themeJson) { 1822 const themeFontFamilies = themeJson?.settings?.typography?.fontFamilies?.theme; 1823 const customFontFamilies = themeJson?.settings?.typography?.fontFamilies?.custom; 1824 let fontFamilies = []; 1825 if (themeFontFamilies && customFontFamilies) { 1826 fontFamilies = [...themeFontFamilies, ...customFontFamilies]; 1827 } else if (themeFontFamilies) { 1828 fontFamilies = themeFontFamilies; 1829 } else if (customFontFamilies) { 1830 fontFamilies = customFontFamilies; 1831 } 1832 const bodyFontFamilySetting = themeJson?.styles?.typography?.fontFamily; 1833 const bodyFontFamily = getFontFamilyFromSetting( 1834 fontFamilies, 1835 bodyFontFamilySetting 1836 ); 1837 const headingFontFamilySetting = themeJson?.styles?.elements?.heading?.typography?.fontFamily; 1838 let headingFontFamily; 1839 if (!headingFontFamilySetting) { 1840 headingFontFamily = bodyFontFamily; 1841 } else { 1842 headingFontFamily = getFontFamilyFromSetting( 1843 fontFamilies, 1844 themeJson?.styles?.elements?.heading?.typography?.fontFamily 1845 ); 1846 } 1847 return [bodyFontFamily, headingFontFamily]; 1848 } 1849 1850 // packages/global-styles-ui/build-module/hooks.mjs 1851 k([a11y_default]); 1852 function useStyle(path, blockName, readFrom = "merged", shouldDecodeEncode = true) { 1853 const { user, base, merged, onChange } = (0, import_element6.useContext)(GlobalStylesContext); 1854 let sourceValue = merged; 1855 if (readFrom === "base") { 1856 sourceValue = base; 1857 } else if (readFrom === "user") { 1858 sourceValue = user; 1859 } 1860 const styleValue = (0, import_element6.useMemo)( 1861 () => getStyle(sourceValue, path, blockName, shouldDecodeEncode), 1862 [sourceValue, path, blockName, shouldDecodeEncode] 1863 ); 1864 const setStyleValue = (0, import_element6.useCallback)( 1865 (newValue) => { 1866 const newGlobalStyles = setStyle( 1867 user, 1868 path, 1869 newValue, 1870 blockName 1871 ); 1872 onChange(newGlobalStyles); 1873 }, 1874 [user, onChange, path, blockName] 1875 ); 1876 return [styleValue, setStyleValue]; 1877 } 1878 function useSetting(path, blockName, readFrom = "merged") { 1879 const { user, base, merged, onChange } = (0, import_element6.useContext)(GlobalStylesContext); 1880 let sourceValue = merged; 1881 if (readFrom === "base") { 1882 sourceValue = base; 1883 } else if (readFrom === "user") { 1884 sourceValue = user; 1885 } 1886 const settingValue = (0, import_element6.useMemo)( 1887 () => getSetting(sourceValue, path, blockName), 1888 [sourceValue, path, blockName] 1889 ); 1890 const setSettingValue = (0, import_element6.useCallback)( 1891 (newValue) => { 1892 const newGlobalStyles = setSetting( 1893 user, 1894 path, 1895 newValue, 1896 blockName 1897 ); 1898 onChange(newGlobalStyles); 1899 }, 1900 [user, onChange, path, blockName] 1901 ); 1902 return [settingValue, setSettingValue]; 1903 } 1904 var EMPTY_ARRAY2 = []; 1905 function hasThemeVariation({ 1906 title, 1907 settings, 1908 styles 1909 }) { 1910 return title === (0, import_i18n.__)("Default") || Object.keys(settings || {}).length > 0 || Object.keys(styles || {}).length > 0; 1911 } 1912 function useCurrentMergeThemeStyleVariationsWithUserConfig(properties = []) { 1913 const { variationsFromTheme } = (0, import_data.useSelect)((select) => { 1914 const _variationsFromTheme = select( 1915 import_core_data.store 1916 ).__experimentalGetCurrentThemeGlobalStylesVariations?.(); 1917 return { 1918 variationsFromTheme: _variationsFromTheme || EMPTY_ARRAY2 1919 }; 1920 }, []); 1921 const { user: userVariation } = (0, import_element6.useContext)(GlobalStylesContext); 1922 return (0, import_element6.useMemo)(() => { 1923 const clonedUserVariation = structuredClone(userVariation); 1924 const userVariationWithoutProperties = removePropertiesFromObject( 1925 clonedUserVariation, 1926 properties 1927 ); 1928 userVariationWithoutProperties.title = (0, import_i18n.__)("Default"); 1929 const variationsWithPropertiesAndBase = variationsFromTheme.filter((variation) => { 1930 return isVariationWithProperties(variation, properties); 1931 }).map((variation) => { 1932 return mergeGlobalStyles( 1933 userVariationWithoutProperties, 1934 variation 1935 ); 1936 }); 1937 const variationsByProperties = [ 1938 userVariationWithoutProperties, 1939 ...variationsWithPropertiesAndBase 1940 ]; 1941 return variationsByProperties?.length ? variationsByProperties.filter(hasThemeVariation) : []; 1942 }, [properties, userVariation, variationsFromTheme]); 1943 } 1944 1945 // packages/global-styles-ui/build-module/lock-unlock.mjs 1946 var import_private_apis = __toESM(require_private_apis(), 1); 1947 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 1948 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 1949 "@wordpress/global-styles-ui" 1950 ); 1951 1952 // packages/global-styles-ui/build-module/root-menu.mjs 1953 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); 1954 var { 1955 useHasDimensionsPanel, 1956 useHasTypographyPanel, 1957 useHasColorPanel, 1958 useSettingsForBlockElement, 1959 useHasBackgroundPanel 1960 } = unlock(import_block_editor.privateApis); 1961 1962 // packages/global-styles-ui/build-module/preview-styles.mjs 1963 var import_components7 = __toESM(require_components(), 1); 1964 1965 // packages/global-styles-ui/build-module/preview-hooks.mjs 1966 function useStylesPreviewColors() { 1967 const [textColor = "black"] = useStyle("color.text"); 1968 const [backgroundColor = "white"] = useStyle("color.background"); 1969 const [headingColor = textColor] = useStyle( 1970 "elements.h1.color.text" 1971 ); 1972 const [linkColor = headingColor] = useStyle( 1973 "elements.link.color.text" 1974 ); 1975 const [buttonBackgroundColor = linkColor] = useStyle( 1976 "elements.button.color.background" 1977 ); 1978 const [coreColors] = useSetting("color.palette.core") || []; 1979 const [themeColors] = useSetting("color.palette.theme") || []; 1980 const [customColors] = useSetting("color.palette.custom") || []; 1981 const paletteColors = (themeColors ?? []).concat(customColors ?? []).concat(coreColors ?? []); 1982 const textColorObject = paletteColors.filter( 1983 ({ color }) => color === textColor 1984 ); 1985 const buttonBackgroundColorObject = paletteColors.filter( 1986 ({ color }) => color === buttonBackgroundColor 1987 ); 1988 const highlightedColors = textColorObject.concat(buttonBackgroundColorObject).concat(paletteColors).filter( 1989 // we exclude these background color because it is already visible in the preview. 1990 ({ color }) => color !== backgroundColor 1991 ).slice(0, 2); 1992 return { 1993 paletteColors, 1994 highlightedColors 1995 }; 1996 } 1997 1998 // packages/global-styles-ui/build-module/typography-example.mjs 1999 var import_element7 = __toESM(require_element(), 1); 2000 var import_components4 = __toESM(require_components(), 1); 2001 var import_i18n3 = __toESM(require_i18n(), 1); 2002 2003 // packages/global-styles-ui/build-module/font-library/utils/preview-styles.mjs 2004 function findNearest(input, numbers) { 2005 if (numbers.length === 0) { 2006 return null; 2007 } 2008 numbers.sort((a2, b2) => Math.abs(input - a2) - Math.abs(input - b2)); 2009 return numbers[0]; 2010 } 2011 function extractFontWeights(fontFaces) { 2012 const result = []; 2013 fontFaces.forEach((face) => { 2014 const weights = String(face.fontWeight).split(" "); 2015 if (weights.length === 2) { 2016 const start = parseInt(weights[0]); 2017 const end = parseInt(weights[1]); 2018 for (let i2 = start; i2 <= end; i2 += 100) { 2019 result.push(i2); 2020 } 2021 } else if (weights.length === 1) { 2022 result.push(parseInt(weights[0])); 2023 } 2024 }); 2025 return result; 2026 } 2027 function formatFontFamily(input) { 2028 const regex = /^(?!generic\([ a-zA-Z\-]+\)$)(?!^[a-zA-Z\-]+$).+/; 2029 const output = input.trim(); 2030 const formatItem = (item) => { 2031 item = item.trim(); 2032 if (item.match(regex)) { 2033 item = item.replace(/^["']|["']$/g, ""); 2034 return `"$item}"`; 2035 } 2036 return item; 2037 }; 2038 if (output.includes(",")) { 2039 return output.split(",").map(formatItem).filter((item) => item !== "").join(", "); 2040 } 2041 return formatItem(output); 2042 } 2043 function formatFontFaceName(input) { 2044 if (!input) { 2045 return ""; 2046 } 2047 let output = input.trim(); 2048 if (output.includes(",")) { 2049 output = (output.split(",").find((item) => item.trim() !== "") ?? "").trim(); 2050 } 2051 output = output.replace(/^["']|["']$/g, ""); 2052 if (window.navigator.userAgent.toLowerCase().includes("firefox")) { 2053 output = `"$output}"`; 2054 } 2055 return output; 2056 } 2057 function getFamilyPreviewStyle(family) { 2058 const style = { 2059 fontFamily: formatFontFamily(family.fontFamily) 2060 }; 2061 if (!("fontFace" in family) || !Array.isArray(family.fontFace)) { 2062 style.fontWeight = "400"; 2063 style.fontStyle = "normal"; 2064 return style; 2065 } 2066 if (family.fontFace) { 2067 const normalFaces = family.fontFace.filter( 2068 (face) => face?.fontStyle && face.fontStyle.toLowerCase() === "normal" 2069 ); 2070 if (normalFaces.length > 0) { 2071 style.fontStyle = "normal"; 2072 const normalWeights = extractFontWeights(normalFaces); 2073 const nearestWeight = findNearest(400, normalWeights); 2074 style.fontWeight = String(nearestWeight) || "400"; 2075 } else { 2076 style.fontStyle = family.fontFace.length && family.fontFace[0].fontStyle || "normal"; 2077 style.fontWeight = family.fontFace.length && String(family.fontFace[0].fontWeight) || "400"; 2078 } 2079 } 2080 return style; 2081 } 2082 function getFacePreviewStyle(face) { 2083 return { 2084 fontFamily: formatFontFamily(face.fontFamily), 2085 fontStyle: face.fontStyle || "normal", 2086 fontWeight: face.fontWeight || "400" 2087 }; 2088 } 2089 2090 // packages/global-styles-ui/build-module/typography-example.mjs 2091 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); 2092 function PreviewTypography({ 2093 fontSize, 2094 variation 2095 }) { 2096 const { base } = (0, import_element7.useContext)(GlobalStylesContext); 2097 let config = base; 2098 if (variation) { 2099 config = { ...base, ...variation }; 2100 } 2101 const [textColor] = useStyle("color.text"); 2102 const [bodyFontFamilies, headingFontFamilies] = getFontFamilies(config); 2103 const bodyPreviewStyle = bodyFontFamilies ? getFamilyPreviewStyle(bodyFontFamilies) : {}; 2104 const headingPreviewStyle = headingFontFamilies ? getFamilyPreviewStyle(headingFontFamilies) : {}; 2105 if (textColor) { 2106 bodyPreviewStyle.color = textColor; 2107 headingPreviewStyle.color = textColor; 2108 } 2109 if (fontSize) { 2110 bodyPreviewStyle.fontSize = fontSize; 2111 headingPreviewStyle.fontSize = fontSize; 2112 } 2113 return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)( 2114 import_components4.__unstableMotion.div, 2115 { 2116 animate: { 2117 scale: 1, 2118 opacity: 1 2119 }, 2120 initial: { 2121 scale: 0.1, 2122 opacity: 0 2123 }, 2124 transition: { 2125 delay: 0.3, 2126 type: "tween" 2127 }, 2128 style: { 2129 textAlign: "center", 2130 lineHeight: 1 2131 }, 2132 children: [ 2133 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: headingPreviewStyle, children: (0, import_i18n3._x)("A", "Uppercase letter A") }), 2134 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: bodyPreviewStyle, children: (0, import_i18n3._x)("a", "Lowercase letter A") }) 2135 ] 2136 } 2137 ); 2138 } 2139 2140 // packages/global-styles-ui/build-module/highlighted-colors.mjs 2141 var import_components5 = __toESM(require_components(), 1); 2142 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); 2143 function HighlightedColors({ 2144 normalizedColorSwatchSize, 2145 ratio 2146 }) { 2147 const { highlightedColors } = useStylesPreviewColors(); 2148 const scaledSwatchSize = normalizedColorSwatchSize * ratio; 2149 return highlightedColors.map(({ slug, color }, index) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)( 2150 import_components5.__unstableMotion.div, 2151 { 2152 style: { 2153 height: scaledSwatchSize, 2154 width: scaledSwatchSize, 2155 background: color, 2156 borderRadius: scaledSwatchSize / 2 2157 }, 2158 animate: { 2159 scale: 1, 2160 opacity: 1 2161 }, 2162 initial: { 2163 scale: 0.1, 2164 opacity: 0 2165 }, 2166 transition: { 2167 delay: index === 1 ? 0.2 : 0.1 2168 } 2169 }, 2170 `$slug}-$index}` 2171 )); 2172 } 2173 2174 // packages/global-styles-ui/build-module/preview-wrapper.mjs 2175 var import_components6 = __toESM(require_components(), 1); 2176 var import_compose = __toESM(require_compose(), 1); 2177 var import_element8 = __toESM(require_element(), 1); 2178 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); 2179 var normalizedWidth = 248; 2180 var normalizedHeight = 152; 2181 var THROTTLE_OPTIONS = { 2182 leading: true, 2183 trailing: true 2184 }; 2185 function PreviewWrapper({ 2186 children, 2187 label, 2188 isFocused, 2189 withHoverView 2190 }) { 2191 const [backgroundColor = "white"] = useStyle("color.background"); 2192 const [gradientValue] = useStyle("color.gradient"); 2193 const disableMotion = (0, import_compose.useReducedMotion)(); 2194 const [isHovered, setIsHovered] = (0, import_element8.useState)(false); 2195 const [containerResizeListener, { width }] = (0, import_compose.useResizeObserver)(); 2196 const [throttledWidth, setThrottledWidthState] = (0, import_element8.useState)(width); 2197 const [ratioState, setRatioState] = (0, import_element8.useState)(); 2198 const setThrottledWidth = (0, import_compose.useThrottle)( 2199 setThrottledWidthState, 2200 250, 2201 THROTTLE_OPTIONS 2202 ); 2203 (0, import_element8.useLayoutEffect)(() => { 2204 if (width) { 2205 setThrottledWidth(width); 2206 } 2207 }, [width, setThrottledWidth]); 2208 (0, import_element8.useLayoutEffect)(() => { 2209 const newRatio = throttledWidth ? throttledWidth / normalizedWidth : 1; 2210 const ratioDiff = newRatio - (ratioState || 0); 2211 const isRatioDiffBigEnough = Math.abs(ratioDiff) > 0.1; 2212 if (isRatioDiffBigEnough || !ratioState) { 2213 setRatioState(newRatio); 2214 } 2215 }, [throttledWidth, ratioState]); 2216 const fallbackRatio = width ? width / normalizedWidth : 1; 2217 const ratio = ratioState ? ratioState : fallbackRatio; 2218 const isReady = !!width; 2219 return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [ 2220 /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { position: "relative" }, children: containerResizeListener }), 2221 isReady && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)( 2222 "div", 2223 { 2224 className: "global-styles-ui-preview__wrapper", 2225 style: { 2226 height: normalizedHeight * ratio 2227 }, 2228 onMouseEnter: () => setIsHovered(true), 2229 onMouseLeave: () => setIsHovered(false), 2230 tabIndex: -1, 2231 children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)( 2232 import_components6.__unstableMotion.div, 2233 { 2234 style: { 2235 height: normalizedHeight * ratio, 2236 width: "100%", 2237 background: gradientValue ?? backgroundColor, 2238 cursor: withHoverView ? "pointer" : void 0 2239 }, 2240 initial: "start", 2241 animate: (isHovered || isFocused) && !disableMotion && label ? "hover" : "start", 2242 children: [].concat(children).map( 2243 (child, key) => child({ ratio, key }) 2244 ) 2245 } 2246 ) 2247 } 2248 ) 2249 ] }); 2250 } 2251 var preview_wrapper_default = PreviewWrapper; 2252 2253 // packages/global-styles-ui/build-module/preview-styles.mjs 2254 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); 2255 var firstFrameVariants = { 2256 start: { 2257 scale: 1, 2258 opacity: 1 2259 }, 2260 hover: { 2261 scale: 0, 2262 opacity: 0 2263 } 2264 }; 2265 var midFrameVariants = { 2266 hover: { 2267 opacity: 1 2268 }, 2269 start: { 2270 opacity: 0.5 2271 } 2272 }; 2273 var secondFrameVariants = { 2274 hover: { 2275 scale: 1, 2276 opacity: 1 2277 }, 2278 start: { 2279 scale: 0, 2280 opacity: 0 2281 } 2282 }; 2283 function PreviewStyles({ 2284 label, 2285 isFocused, 2286 withHoverView, 2287 variation 2288 }) { 2289 const [fontWeight] = useStyle("typography.fontWeight"); 2290 const [fontFamily = "serif"] = useStyle( 2291 "typography.fontFamily" 2292 ); 2293 const [headingFontFamily = fontFamily] = useStyle( 2294 "elements.h1.typography.fontFamily" 2295 ); 2296 const [headingFontWeight = fontWeight] = useStyle( 2297 "elements.h1.typography.fontWeight" 2298 ); 2299 const [textColor = "black"] = useStyle("color.text"); 2300 const [headingColor = textColor] = useStyle( 2301 "elements.h1.color.text" 2302 ); 2303 const { paletteColors } = useStylesPreviewColors(); 2304 return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)( 2305 preview_wrapper_default, 2306 { 2307 label, 2308 isFocused, 2309 withHoverView, 2310 children: [ 2311 ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2312 import_components7.__unstableMotion.div, 2313 { 2314 variants: firstFrameVariants, 2315 style: { 2316 height: "100%", 2317 overflow: "hidden" 2318 }, 2319 children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)( 2320 import_components7.__experimentalHStack, 2321 { 2322 spacing: 10 * ratio, 2323 justify: "center", 2324 style: { 2325 height: "100%", 2326 overflow: "hidden" 2327 }, 2328 children: [ 2329 /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2330 PreviewTypography, 2331 { 2332 fontSize: 65 * ratio, 2333 variation 2334 } 2335 ), 2336 /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_components7.__experimentalVStack, { spacing: 4 * ratio, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2337 HighlightedColors, 2338 { 2339 normalizedColorSwatchSize: 32, 2340 ratio 2341 } 2342 ) }) 2343 ] 2344 } 2345 ) 2346 }, 2347 key 2348 ), 2349 ({ key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2350 import_components7.__unstableMotion.div, 2351 { 2352 variants: withHoverView ? midFrameVariants : void 0, 2353 style: { 2354 height: "100%", 2355 width: "100%", 2356 position: "absolute", 2357 top: 0, 2358 overflow: "hidden", 2359 filter: "blur(60px)", 2360 opacity: 0.1 2361 }, 2362 children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2363 import_components7.__experimentalHStack, 2364 { 2365 spacing: 0, 2366 justify: "flex-start", 2367 style: { 2368 height: "100%", 2369 overflow: "hidden" 2370 }, 2371 children: paletteColors.slice(0, 4).map(({ color }, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2372 "div", 2373 { 2374 style: { 2375 height: "100%", 2376 background: color, 2377 flexGrow: 1 2378 } 2379 }, 2380 index 2381 )) 2382 } 2383 ) 2384 }, 2385 key 2386 ), 2387 ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2388 import_components7.__unstableMotion.div, 2389 { 2390 variants: secondFrameVariants, 2391 style: { 2392 height: "100%", 2393 width: "100%", 2394 overflow: "hidden", 2395 position: "absolute", 2396 top: 0 2397 }, 2398 children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2399 import_components7.__experimentalVStack, 2400 { 2401 spacing: 3 * ratio, 2402 justify: "center", 2403 style: { 2404 height: "100%", 2405 overflow: "hidden", 2406 padding: 10 * ratio, 2407 boxSizing: "border-box" 2408 }, 2409 children: label && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 2410 "div", 2411 { 2412 style: { 2413 fontSize: 40 * ratio, 2414 fontFamily: headingFontFamily, 2415 color: headingColor, 2416 fontWeight: headingFontWeight, 2417 lineHeight: "1em", 2418 textAlign: "center" 2419 }, 2420 children: label 2421 } 2422 ) 2423 } 2424 ) 2425 }, 2426 key 2427 ) 2428 ] 2429 } 2430 ); 2431 } 2432 var preview_styles_default = PreviewStyles; 2433 2434 // packages/global-styles-ui/build-module/screen-root.mjs 2435 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); 2436 2437 // packages/global-styles-ui/build-module/screen-block-list.mjs 2438 var import_blocks2 = __toESM(require_blocks(), 1); 2439 var import_i18n6 = __toESM(require_i18n(), 1); 2440 var import_components11 = __toESM(require_components(), 1); 2441 var import_data4 = __toESM(require_data(), 1); 2442 var import_element9 = __toESM(require_element(), 1); 2443 var import_block_editor2 = __toESM(require_block_editor(), 1); 2444 var import_compose2 = __toESM(require_compose(), 1); 2445 import { speak } from "@wordpress/a11y"; 2446 2447 // packages/global-styles-ui/build-module/variations/variations-panel.mjs 2448 var import_blocks = __toESM(require_blocks(), 1); 2449 var import_data3 = __toESM(require_data(), 1); 2450 var import_components9 = __toESM(require_components(), 1); 2451 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); 2452 function getFilteredBlockStyles(blockStyles, variations) { 2453 return blockStyles?.filter( 2454 (style) => style.source === "block" || variations.includes(style.name) 2455 ) || []; 2456 } 2457 function useBlockVariations(name2) { 2458 const blockStyles = (0, import_data3.useSelect)( 2459 (select) => { 2460 const { getBlockStyles } = select(import_blocks.store); 2461 return getBlockStyles(name2); 2462 }, 2463 [name2] 2464 ); 2465 const [variations] = useStyle("variations", name2); 2466 const variationNames = Object.keys(variations ?? {}); 2467 return getFilteredBlockStyles(blockStyles, variationNames); 2468 } 2469 2470 // packages/global-styles-ui/build-module/screen-header.mjs 2471 var import_components10 = __toESM(require_components(), 1); 2472 var import_i18n5 = __toESM(require_i18n(), 1); 2473 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); 2474 2475 // packages/global-styles-ui/build-module/screen-block-list.mjs 2476 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); 2477 var { 2478 useHasDimensionsPanel: useHasDimensionsPanel2, 2479 useHasTypographyPanel: useHasTypographyPanel2, 2480 useHasBorderPanel, 2481 useSettingsForBlockElement: useSettingsForBlockElement2, 2482 useHasColorPanel: useHasColorPanel2 2483 } = unlock(import_block_editor2.privateApis); 2484 function useSortedBlockTypes() { 2485 const blockItems = (0, import_data4.useSelect)( 2486 (select) => select(import_blocks2.store).getBlockTypes(), 2487 [] 2488 ); 2489 const groupByType = (blocks, block) => { 2490 const { core, noncore } = blocks; 2491 const type = block.name.startsWith("core/") ? core : noncore; 2492 type.push(block); 2493 return blocks; 2494 }; 2495 const { core: coreItems, noncore: nonCoreItems } = blockItems.reduce( 2496 groupByType, 2497 { core: [], noncore: [] } 2498 ); 2499 return [...coreItems, ...nonCoreItems]; 2500 } 2501 function useBlockHasGlobalStyles(blockName) { 2502 const [rawSettings] = useSetting("", blockName); 2503 const settings = useSettingsForBlockElement2(rawSettings, blockName); 2504 const hasTypographyPanel = useHasTypographyPanel2(settings); 2505 const hasColorPanel = useHasColorPanel2(settings); 2506 const hasBorderPanel = useHasBorderPanel(settings); 2507 const hasDimensionsPanel = useHasDimensionsPanel2(settings); 2508 const hasLayoutPanel = hasBorderPanel || hasDimensionsPanel; 2509 const hasVariationsPanel = !!useBlockVariations(blockName)?.length; 2510 const hasGlobalStyles = hasTypographyPanel || hasColorPanel || hasLayoutPanel || hasVariationsPanel; 2511 return hasGlobalStyles; 2512 } 2513 function BlockMenuItem({ block }) { 2514 const hasBlockMenuItem = useBlockHasGlobalStyles(block.name); 2515 if (!hasBlockMenuItem) { 2516 return null; 2517 } 2518 return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( 2519 NavigationButtonAsItem, 2520 { 2521 path: "/blocks/" + encodeURIComponent(block.name), 2522 children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_components11.__experimentalHStack, { justify: "flex-start", children: [ 2523 /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_block_editor2.BlockIcon, { icon: block.icon }), 2524 /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_components11.FlexItem, { children: block.title }) 2525 ] }) 2526 } 2527 ); 2528 } 2529 function BlockList({ filterValue }) { 2530 const sortedBlockTypes = useSortedBlockTypes(); 2531 const debouncedSpeak = (0, import_compose2.useDebounce)(speak, 500); 2532 const { isMatchingSearchTerm } = (0, import_data4.useSelect)(import_blocks2.store); 2533 const filteredBlockTypes = !filterValue ? sortedBlockTypes : sortedBlockTypes.filter( 2534 (blockType) => isMatchingSearchTerm(blockType, filterValue) 2535 ); 2536 const blockTypesListRef = (0, import_element9.useRef)(null); 2537 (0, import_element9.useEffect)(() => { 2538 if (!filterValue) { 2539 return; 2540 } 2541 const count = blockTypesListRef.current?.childElementCount || 0; 2542 const resultsFoundMessage = (0, import_i18n6.sprintf)( 2543 /* translators: %d: number of results. */ 2544 (0, import_i18n6._n)("%d result found.", "%d results found.", count), 2545 count 2546 ); 2547 debouncedSpeak(resultsFoundMessage, "polite"); 2548 }, [filterValue, debouncedSpeak]); 2549 return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( 2550 "div", 2551 { 2552 ref: blockTypesListRef, 2553 className: "global-styles-ui-block-types-item-list", 2554 role: "list", 2555 children: filteredBlockTypes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_components11.__experimentalText, { align: "center", as: "p", children: (0, import_i18n6.__)("No blocks found.") }) : filteredBlockTypes.map((block) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( 2556 BlockMenuItem, 2557 { 2558 block 2559 }, 2560 "menu-itemblock-" + block.name 2561 )) 2562 } 2563 ); 2564 } 2565 var MemoizedBlockList = (0, import_element9.memo)(BlockList); 2566 2567 // packages/global-styles-ui/build-module/screen-block.mjs 2568 var import_blocks4 = __toESM(require_blocks(), 1); 2569 var import_block_editor4 = __toESM(require_block_editor(), 1); 2570 var import_element11 = __toESM(require_element(), 1); 2571 var import_data5 = __toESM(require_data(), 1); 2572 var import_core_data3 = __toESM(require_core_data(), 1); 2573 var import_components14 = __toESM(require_components(), 1); 2574 var import_i18n7 = __toESM(require_i18n(), 1); 2575 2576 // packages/global-styles-ui/build-module/block-preview-panel.mjs 2577 var import_block_editor3 = __toESM(require_block_editor(), 1); 2578 var import_blocks3 = __toESM(require_blocks(), 1); 2579 var import_components12 = __toESM(require_components(), 1); 2580 var import_element10 = __toESM(require_element(), 1); 2581 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); 2582 2583 // packages/global-styles-ui/build-module/subtitle.mjs 2584 var import_components13 = __toESM(require_components(), 1); 2585 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); 2586 function Subtitle({ children, level = 2 }) { 2587 return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_components13.__experimentalHeading, { className: "global-styles-ui-subtitle", level, children }); 2588 } 2589 2590 // packages/global-styles-ui/build-module/screen-block.mjs 2591 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); 2592 var { 2593 useHasDimensionsPanel: useHasDimensionsPanel3, 2594 useHasTypographyPanel: useHasTypographyPanel3, 2595 useHasBorderPanel: useHasBorderPanel2, 2596 useSettingsForBlockElement: useSettingsForBlockElement3, 2597 useHasColorPanel: useHasColorPanel3, 2598 useHasFiltersPanel, 2599 useHasImageSettingsPanel, 2600 useHasBackgroundPanel: useHasBackgroundPanel2, 2601 BackgroundPanel: StylesBackgroundPanel, 2602 BorderPanel: StylesBorderPanel, 2603 ColorPanel: StylesColorPanel, 2604 TypographyPanel: StylesTypographyPanel, 2605 DimensionsPanel: StylesDimensionsPanel, 2606 FiltersPanel: StylesFiltersPanel, 2607 ImageSettingsPanel, 2608 AdvancedPanel: StylesAdvancedPanel 2609 } = unlock(import_block_editor4.privateApis); 2610 2611 // packages/global-styles-ui/build-module/screen-typography.mjs 2612 var import_i18n21 = __toESM(require_i18n(), 1); 2613 var import_components34 = __toESM(require_components(), 1); 2614 var import_element22 = __toESM(require_element(), 1); 2615 2616 // packages/global-styles-ui/build-module/screen-body.mjs 2617 var import_components15 = __toESM(require_components(), 1); 2618 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); 2619 2620 // packages/global-styles-ui/build-module/typography-elements.mjs 2621 var import_i18n8 = __toESM(require_i18n(), 1); 2622 var import_components16 = __toESM(require_components(), 1); 2623 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); 2624 2625 // packages/global-styles-ui/build-module/variations/variations-typography.mjs 2626 var import_components19 = __toESM(require_components(), 1); 2627 2628 // packages/global-styles-ui/build-module/preview-typography.mjs 2629 var import_components17 = __toESM(require_components(), 1); 2630 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); 2631 var StylesPreviewTypography = ({ 2632 variation, 2633 isFocused, 2634 withHoverView 2635 }) => { 2636 return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 2637 preview_wrapper_default, 2638 { 2639 label: variation.title, 2640 isFocused, 2641 withHoverView, 2642 children: ({ ratio, key }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 2643 import_components17.__experimentalHStack, 2644 { 2645 spacing: 10 * ratio, 2646 justify: "center", 2647 style: { 2648 height: "100%", 2649 overflow: "hidden" 2650 }, 2651 children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 2652 PreviewTypography, 2653 { 2654 variation, 2655 fontSize: 85 * ratio 2656 } 2657 ) 2658 }, 2659 key 2660 ) 2661 } 2662 ); 2663 }; 2664 var preview_typography_default = StylesPreviewTypography; 2665 2666 // packages/global-styles-ui/build-module/variations/variation.mjs 2667 var import_components18 = __toESM(require_components(), 1); 2668 var import_element12 = __toESM(require_element(), 1); 2669 var import_keycodes = __toESM(require_keycodes(), 1); 2670 var import_i18n9 = __toESM(require_i18n(), 1); 2671 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); 2672 function Variation({ 2673 variation, 2674 children, 2675 isPill = false, 2676 properties, 2677 showTooltip = false 2678 }) { 2679 const [isFocused, setIsFocused] = (0, import_element12.useState)(false); 2680 const { 2681 base, 2682 user, 2683 onChange: setUserConfig 2684 } = (0, import_element12.useContext)(GlobalStylesContext); 2685 const context = (0, import_element12.useMemo)(() => { 2686 let merged = mergeGlobalStyles(base, variation); 2687 if (properties) { 2688 merged = filterObjectByProperties(merged, properties); 2689 } 2690 return { 2691 user: variation, 2692 base, 2693 merged, 2694 onChange: () => { 2695 } 2696 }; 2697 }, [variation, base, properties]); 2698 const selectVariation = () => setUserConfig(variation); 2699 const selectOnEnter = (event) => { 2700 if (event.keyCode === import_keycodes.ENTER) { 2701 event.preventDefault(); 2702 selectVariation(); 2703 } 2704 }; 2705 const isActive = (0, import_element12.useMemo)( 2706 () => areGlobalStylesEqual(user, variation), 2707 [user, variation] 2708 ); 2709 let label = variation?.title; 2710 if (variation?.description) { 2711 label = (0, import_i18n9.sprintf)( 2712 /* translators: 1: variation title. 2: variation description. */ 2713 (0, import_i18n9._x)("%1$s (%2$s)", "variation label"), 2714 variation?.title, 2715 variation?.description 2716 ); 2717 } 2718 const content = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 2719 "div", 2720 { 2721 className: clsx_default("global-styles-ui-variations_item", { 2722 "is-active": isActive 2723 }), 2724 role: "button", 2725 onClick: selectVariation, 2726 onKeyDown: selectOnEnter, 2727 tabIndex: 0, 2728 "aria-label": label, 2729 "aria-current": isActive, 2730 onFocus: () => setIsFocused(true), 2731 onBlur: () => setIsFocused(false), 2732 children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 2733 "div", 2734 { 2735 className: clsx_default("global-styles-ui-variations_item-preview", { 2736 "is-pill": isPill 2737 }), 2738 children: children(isFocused) 2739 } 2740 ) 2741 } 2742 ); 2743 return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(GlobalStylesContext.Provider, { value: context, children: showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components18.Tooltip, { text: variation?.title, children: content }) : content }); 2744 } 2745 2746 // packages/global-styles-ui/build-module/variations/variations-typography.mjs 2747 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); 2748 var propertiesToFilter = ["typography"]; 2749 function TypographyVariations({ 2750 title, 2751 gap = 2 2752 }) { 2753 const typographyVariations = useCurrentMergeThemeStyleVariationsWithUserConfig(propertiesToFilter); 2754 if (typographyVariations?.length <= 1) { 2755 return null; 2756 } 2757 return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_components19.__experimentalVStack, { spacing: 3, children: [ 2758 title && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Subtitle, { level: 3, children: title }), 2759 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 2760 import_components19.__experimentalGrid, 2761 { 2762 columns: 3, 2763 gap, 2764 className: "global-styles-ui-style-variations-container", 2765 children: typographyVariations.map( 2766 (variation, index) => { 2767 return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 2768 Variation, 2769 { 2770 variation, 2771 properties: propertiesToFilter, 2772 showTooltip: true, 2773 children: () => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 2774 preview_typography_default, 2775 { 2776 variation 2777 } 2778 ) 2779 }, 2780 index 2781 ); 2782 } 2783 ) 2784 } 2785 ) 2786 ] }); 2787 } 2788 2789 // packages/global-styles-ui/build-module/font-families.mjs 2790 var import_i18n19 = __toESM(require_i18n(), 1); 2791 var import_components32 = __toESM(require_components(), 1); 2792 var import_element21 = __toESM(require_element(), 1); 2793 2794 // packages/global-styles-ui/build-module/font-library/context.mjs 2795 var import_element13 = __toESM(require_element(), 1); 2796 var import_data6 = __toESM(require_data(), 1); 2797 var import_core_data5 = __toESM(require_core_data(), 1); 2798 var import_i18n11 = __toESM(require_i18n(), 1); 2799 2800 // packages/global-styles-ui/build-module/font-library/api.mjs 2801 var import_api_fetch = __toESM(require_api_fetch(), 1); 2802 var import_core_data4 = __toESM(require_core_data(), 1); 2803 var FONT_FAMILIES_URL = "/wp/v2/font-families"; 2804 function invalidateFontFamilyCache(registry) { 2805 const { receiveEntityRecords } = registry.dispatch(import_core_data4.store); 2806 receiveEntityRecords( 2807 "postType", 2808 "wp_font_family", 2809 [], 2810 void 0, 2811 true 2812 // invalidateCache 2813 ); 2814 } 2815 async function fetchInstallFontFamily(data, registry) { 2816 const config = { 2817 path: FONT_FAMILIES_URL, 2818 method: "POST", 2819 body: data 2820 }; 2821 const response = await (0, import_api_fetch.default)(config); 2822 invalidateFontFamilyCache(registry); 2823 return { 2824 id: response.id, 2825 ...response.font_family_settings, 2826 fontFace: [] 2827 }; 2828 } 2829 async function fetchInstallFontFace(fontFamilyId, data, registry) { 2830 const config = { 2831 path: `$FONT_FAMILIES_URL}/$fontFamilyId}/font-faces`, 2832 method: "POST", 2833 body: data 2834 }; 2835 const response = await (0, import_api_fetch.default)(config); 2836 invalidateFontFamilyCache(registry); 2837 return { 2838 id: response.id, 2839 ...response.font_face_settings 2840 }; 2841 } 2842 2843 // packages/global-styles-ui/build-module/font-library/utils/index.mjs 2844 var import_components20 = __toESM(require_components(), 1); 2845 2846 // packages/global-styles-ui/build-module/font-library/utils/constants.mjs 2847 var import_i18n10 = __toESM(require_i18n(), 1); 2848 var ALLOWED_FILE_EXTENSIONS = ["otf", "ttf", "woff", "woff2"]; 2849 var FONT_WEIGHTS = { 2850 100: (0, import_i18n10._x)("Thin", "font weight"), 2851 200: (0, import_i18n10._x)("Extra-light", "font weight"), 2852 300: (0, import_i18n10._x)("Light", "font weight"), 2853 400: (0, import_i18n10._x)("Normal", "font weight"), 2854 500: (0, import_i18n10._x)("Medium", "font weight"), 2855 600: (0, import_i18n10._x)("Semi-bold", "font weight"), 2856 700: (0, import_i18n10._x)("Bold", "font weight"), 2857 800: (0, import_i18n10._x)("Extra-bold", "font weight"), 2858 900: (0, import_i18n10._x)("Black", "font weight") 2859 }; 2860 var FONT_STYLES = { 2861 normal: (0, import_i18n10._x)("Normal", "font style"), 2862 italic: (0, import_i18n10._x)("Italic", "font style") 2863 }; 2864 2865 // packages/global-styles-ui/build-module/font-library/utils/index.mjs 2866 var { File } = window; 2867 var { kebabCase } = unlock(import_components20.privateApis); 2868 function setUIValuesNeeded(font2, extraValues = {}) { 2869 if (!font2.name && (font2.fontFamily || font2.slug)) { 2870 font2.name = font2.fontFamily || font2.slug; 2871 } 2872 return { 2873 ...font2, 2874 ...extraValues 2875 }; 2876 } 2877 function isUrlEncoded(url) { 2878 if (typeof url !== "string") { 2879 return false; 2880 } 2881 return url !== decodeURIComponent(url); 2882 } 2883 function getFontFaceVariantName(face) { 2884 const weightName = FONT_WEIGHTS[face.fontWeight ?? ""] || face.fontWeight; 2885 const styleName = face.fontStyle === "normal" ? "" : FONT_STYLES[face.fontStyle ?? ""] || face.fontStyle; 2886 return `$weightName} $styleName}`; 2887 } 2888 function mergeFontFaces(existing = [], incoming = []) { 2889 const map = /* @__PURE__ */ new Map(); 2890 for (const face of existing) { 2891 map.set(`$face.fontWeight}$face.fontStyle}`, face); 2892 } 2893 for (const face of incoming) { 2894 map.set(`$face.fontWeight}$face.fontStyle}`, face); 2895 } 2896 return Array.from(map.values()); 2897 } 2898 function mergeFontFamilies(existing = [], incoming = []) { 2899 const map = /* @__PURE__ */ new Map(); 2900 for (const font2 of existing) { 2901 map.set(font2.slug, { ...font2 }); 2902 } 2903 for (const font2 of incoming) { 2904 if (map.has(font2.slug)) { 2905 const { fontFace: incomingFontFaces, ...restIncoming } = font2; 2906 const existingFont = map.get(font2.slug); 2907 const mergedFontFaces = mergeFontFaces( 2908 existingFont.fontFace, 2909 incomingFontFaces 2910 ); 2911 map.set(font2.slug, { 2912 ...restIncoming, 2913 fontFace: mergedFontFaces 2914 }); 2915 } else { 2916 map.set(font2.slug, { ...font2 }); 2917 } 2918 } 2919 return Array.from(map.values()); 2920 } 2921 async function loadFontFaceInBrowser(fontFace, source, addTo = "all") { 2922 let dataSource; 2923 if (typeof source === "string") { 2924 dataSource = `url($source})`; 2925 } else if (source instanceof File) { 2926 dataSource = await source.arrayBuffer(); 2927 } else { 2928 return; 2929 } 2930 const newFont = new window.FontFace( 2931 formatFontFaceName(fontFace.fontFamily), 2932 dataSource, 2933 { 2934 style: fontFace.fontStyle, 2935 weight: String(fontFace.fontWeight) 2936 } 2937 ); 2938 const loadedFace = await newFont.load(); 2939 if (addTo === "document" || addTo === "all") { 2940 document.fonts.add(loadedFace); 2941 } 2942 if (addTo === "iframe" || addTo === "all") { 2943 const iframe = document.querySelector( 2944 'iframe[name="editor-canvas"]' 2945 ); 2946 if (iframe?.contentDocument) { 2947 iframe.contentDocument.fonts.add(loadedFace); 2948 } 2949 } 2950 } 2951 function unloadFontFaceInBrowser(fontFace, removeFrom = "all") { 2952 const unloadFontFace = (fonts) => { 2953 fonts.forEach((f2) => { 2954 if (f2.family === formatFontFaceName(fontFace?.fontFamily) && f2.weight === fontFace?.fontWeight && f2.style === fontFace?.fontStyle) { 2955 fonts.delete(f2); 2956 } 2957 }); 2958 }; 2959 if (removeFrom === "document" || removeFrom === "all") { 2960 unloadFontFace(document.fonts); 2961 } 2962 if (removeFrom === "iframe" || removeFrom === "all") { 2963 const iframe = document.querySelector( 2964 'iframe[name="editor-canvas"]' 2965 ); 2966 if (iframe?.contentDocument) { 2967 unloadFontFace(iframe.contentDocument.fonts); 2968 } 2969 } 2970 } 2971 function getDisplaySrcFromFontFace(input) { 2972 if (!input) { 2973 return; 2974 } 2975 let src; 2976 if (Array.isArray(input)) { 2977 src = input[0]; 2978 } else { 2979 src = input; 2980 } 2981 if (src.startsWith("file:.")) { 2982 return; 2983 } 2984 if (!isUrlEncoded(src)) { 2985 src = encodeURI(src); 2986 } 2987 return src; 2988 } 2989 function makeFontFamilyFormData(fontFamily) { 2990 const formData = new FormData(); 2991 const { fontFace, category, ...familyWithValidParameters } = fontFamily; 2992 const fontFamilySettings = { 2993 ...familyWithValidParameters, 2994 slug: kebabCase(fontFamily.slug) 2995 }; 2996 formData.append( 2997 "font_family_settings", 2998 JSON.stringify(fontFamilySettings) 2999 ); 3000 return formData; 3001 } 3002 function makeFontFacesFormData(font2) { 3003 const fontFacesFormData = (font2?.fontFace ?? []).map( 3004 (item, faceIndex) => { 3005 const face = { ...item }; 3006 const formData = new FormData(); 3007 if (face.file) { 3008 const files = Array.isArray(face.file) ? face.file : [face.file]; 3009 const src = []; 3010 files.forEach((file, key) => { 3011 const fileId = `file-$faceIndex}-$key}`; 3012 formData.append(fileId, file, file.name); 3013 src.push(fileId); 3014 }); 3015 face.src = src.length === 1 ? src[0] : src; 3016 delete face.file; 3017 formData.append("font_face_settings", JSON.stringify(face)); 3018 } else { 3019 formData.append("font_face_settings", JSON.stringify(face)); 3020 } 3021 return formData; 3022 } 3023 ); 3024 return fontFacesFormData; 3025 } 3026 async function batchInstallFontFaces(fontFamilyId, fontFacesData, registry) { 3027 const responses = []; 3028 for (const faceData of fontFacesData) { 3029 try { 3030 const response = await fetchInstallFontFace( 3031 fontFamilyId, 3032 faceData, 3033 registry 3034 ); 3035 responses.push({ status: "fulfilled", value: response }); 3036 } catch (error) { 3037 responses.push({ status: "rejected", reason: error }); 3038 } 3039 } 3040 const results = { 3041 errors: [], 3042 successes: [] 3043 }; 3044 responses.forEach((result, index) => { 3045 if (result.status === "fulfilled" && result.value) { 3046 const response = result.value; 3047 results.successes.push(response); 3048 } else if (result.reason) { 3049 results.errors.push({ 3050 data: fontFacesData[index], 3051 message: result.reason.message 3052 }); 3053 } 3054 }); 3055 return results; 3056 } 3057 async function downloadFontFaceAssets(src) { 3058 src = Array.isArray(src) ? src : [src]; 3059 const files = await Promise.all( 3060 src.map(async (url) => { 3061 return fetch(new Request(url)).then((response) => { 3062 if (!response.ok) { 3063 throw new Error( 3064 `Error downloading font face asset from $url}. Server responded with status: $response.status}` 3065 ); 3066 } 3067 return response.blob(); 3068 }).then((blob) => { 3069 const filename = url.split("/").pop(); 3070 const file = new File([blob], filename, { 3071 type: blob.type 3072 }); 3073 return file; 3074 }); 3075 }) 3076 ); 3077 return files.length === 1 ? files[0] : files; 3078 } 3079 function checkFontFaceInstalled(fontFace, collection) { 3080 return -1 !== collection.findIndex((collectionFontFace) => { 3081 return collectionFontFace.fontWeight === fontFace.fontWeight && collectionFontFace.fontStyle === fontFace.fontStyle; 3082 }); 3083 } 3084 3085 // packages/global-styles-ui/build-module/font-library/utils/set-immutably.mjs 3086 function setImmutably2(object, path, value) { 3087 path = Array.isArray(path) ? [...path] : [path]; 3088 object = Array.isArray(object) ? [...object] : { ...object }; 3089 const leaf = path.pop(); 3090 let prev = object; 3091 for (const key of path) { 3092 const lvl = prev[key]; 3093 prev = prev[key] = Array.isArray(lvl) ? [...lvl] : { ...lvl }; 3094 } 3095 prev[leaf] = value; 3096 return object; 3097 } 3098 3099 // packages/global-styles-ui/build-module/font-library/utils/toggleFont.mjs 3100 function toggleFont(font2, face, initialfonts = []) { 3101 const isFontActivated = (f2) => f2.slug === font2.slug; 3102 const getActivatedFont = (fonts) => fonts.find(isFontActivated); 3103 const toggleEntireFontFamily = (activatedFont2) => { 3104 if (!activatedFont2) { 3105 return [...initialfonts, font2]; 3106 } 3107 return initialfonts.filter( 3108 (f2) => !isFontActivated(f2) 3109 ); 3110 }; 3111 const toggleFontVariant = (activatedFont2) => { 3112 const isFaceActivated = (f2) => f2.fontWeight === face.fontWeight && f2.fontStyle === face.fontStyle; 3113 if (!activatedFont2) { 3114 return [...initialfonts, { ...font2, fontFace: [face] }]; 3115 } 3116 let newFontFaces = activatedFont2.fontFace || []; 3117 if (newFontFaces.find(isFaceActivated)) { 3118 newFontFaces = newFontFaces.filter( 3119 (f2) => !isFaceActivated(f2) 3120 ); 3121 } else { 3122 newFontFaces = [...newFontFaces, face]; 3123 } 3124 if (newFontFaces.length === 0) { 3125 return initialfonts.filter( 3126 (f2) => !isFontActivated(f2) 3127 ); 3128 } 3129 return initialfonts.map( 3130 (f2) => isFontActivated(f2) ? { ...f2, fontFace: newFontFaces } : f2 3131 ); 3132 }; 3133 const activatedFont = getActivatedFont(initialfonts); 3134 if (!face) { 3135 return toggleEntireFontFamily(activatedFont); 3136 } 3137 return toggleFontVariant(activatedFont); 3138 } 3139 3140 // packages/global-styles-ui/build-module/font-library/context.mjs 3141 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); 3142 var FontLibraryContext = (0, import_element13.createContext)( 3143 {} 3144 ); 3145 FontLibraryContext.displayName = "FontLibraryContext"; 3146 function FontLibraryProvider({ children }) { 3147 const registry = (0, import_data6.useRegistry)(); 3148 const { saveEntityRecord, deleteEntityRecord } = (0, import_data6.useDispatch)(import_core_data5.store); 3149 const { globalStylesId } = (0, import_data6.useSelect)((select) => { 3150 const { __experimentalGetCurrentGlobalStylesId } = select(import_core_data5.store); 3151 return { globalStylesId: __experimentalGetCurrentGlobalStylesId() }; 3152 }, []); 3153 const globalStyles = (0, import_core_data5.useEntityRecord)( 3154 "root", 3155 "globalStyles", 3156 globalStylesId 3157 ); 3158 const [isInstalling, setIsInstalling] = (0, import_element13.useState)(false); 3159 const { records: libraryPosts = [], isResolving: isResolvingLibrary } = (0, import_core_data5.useEntityRecords)( 3160 "postType", 3161 "wp_font_family", 3162 { 3163 _embed: true 3164 } 3165 ); 3166 const libraryFonts = (libraryPosts || []).map((fontFamilyPost) => { 3167 return { 3168 id: fontFamilyPost.id, 3169 ...fontFamilyPost.font_family_settings || {}, 3170 fontFace: fontFamilyPost?._embedded?.font_faces?.map( 3171 (face) => face.font_face_settings 3172 ) || [] 3173 }; 3174 }) || []; 3175 const [fontFamilies, setFontFamilies] = useSetting("typography.fontFamilies"); 3176 const saveFontFamilies = async (fonts) => { 3177 if (!globalStyles.record) { 3178 return; 3179 } 3180 const updatedGlobalStyles = globalStyles.record; 3181 const finalGlobalStyles = setImmutably2( 3182 updatedGlobalStyles ?? {}, 3183 ["settings", "typography", "fontFamilies"], 3184 fonts 3185 ); 3186 await saveEntityRecord("root", "globalStyles", finalGlobalStyles); 3187 }; 3188 const [modalTabOpen, setModalTabOpen] = (0, import_element13.useState)(""); 3189 const [libraryFontSelected, setLibraryFontSelected] = (0, import_element13.useState)(void 0); 3190 const themeFonts = fontFamilies?.theme ? fontFamilies.theme.map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; 3191 const customFonts = fontFamilies?.custom ? fontFamilies.custom.map((f2) => setUIValuesNeeded(f2, { source: "custom" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; 3192 const baseCustomFonts = libraryFonts ? libraryFonts.map((f2) => setUIValuesNeeded(f2, { source: "custom" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; 3193 (0, import_element13.useEffect)(() => { 3194 if (!modalTabOpen) { 3195 setLibraryFontSelected(void 0); 3196 } 3197 }, [modalTabOpen]); 3198 const handleSetLibraryFontSelected = (font2) => { 3199 if (!font2) { 3200 setLibraryFontSelected(void 0); 3201 return; 3202 } 3203 const fonts = font2.source === "theme" ? themeFonts : baseCustomFonts; 3204 const fontSelected = fonts.find((f2) => f2.slug === font2.slug); 3205 setLibraryFontSelected({ 3206 ...fontSelected || font2, 3207 source: font2.source 3208 }); 3209 }; 3210 const [loadedFontUrls] = (0, import_element13.useState)(/* @__PURE__ */ new Set()); 3211 const getAvailableFontsOutline = (availableFontFamilies) => { 3212 const outline = availableFontFamilies.reduce( 3213 (acc, font2) => { 3214 const availableFontFaces = font2?.fontFace && font2.fontFace?.length > 0 ? font2?.fontFace.map( 3215 (face) => `$face.fontStyle ?? ""}$face.fontWeight ?? ""}` 3216 ) : ["normal400"]; 3217 acc[font2.slug] = availableFontFaces; 3218 return acc; 3219 }, 3220 {} 3221 ); 3222 return outline; 3223 }; 3224 const getActivatedFontsOutline = (source) => { 3225 switch (source) { 3226 case "theme": 3227 return getAvailableFontsOutline(themeFonts); 3228 case "custom": 3229 default: 3230 return getAvailableFontsOutline(customFonts); 3231 } 3232 }; 3233 const isFontActivated = (slug, style, weight, source) => { 3234 if (!style && !weight) { 3235 return !!getActivatedFontsOutline(source)[slug]; 3236 } 3237 return !!getActivatedFontsOutline(source)[slug]?.includes( 3238 (style ?? "") + (weight ?? "") 3239 ); 3240 }; 3241 const getFontFacesActivated = (slug, source) => { 3242 return getActivatedFontsOutline(source)[slug] || []; 3243 }; 3244 async function installFonts(fontFamiliesToInstall) { 3245 setIsInstalling(true); 3246 try { 3247 const fontFamiliesToActivate = []; 3248 let installationErrors = []; 3249 for (const fontFamilyToInstall of fontFamiliesToInstall) { 3250 let isANewFontFamily = false; 3251 const fontFamilyRecords = await (0, import_data6.resolveSelect)( 3252 import_core_data5.store 3253 ).getEntityRecords( 3254 "postType", 3255 "wp_font_family", 3256 { 3257 slug: fontFamilyToInstall.slug, 3258 per_page: 1, 3259 _embed: true 3260 } 3261 ); 3262 const fontFamilyPost = fontFamilyRecords && fontFamilyRecords.length > 0 ? fontFamilyRecords[0] : null; 3263 let installedFontFamily = fontFamilyPost ? { 3264 id: fontFamilyPost.id, 3265 ...fontFamilyPost.font_family_settings, 3266 fontFace: (fontFamilyPost?._embedded?.font_faces ?? []).map( 3267 (face) => face.font_face_settings 3268 ) || [] 3269 } : null; 3270 if (!installedFontFamily) { 3271 isANewFontFamily = true; 3272 installedFontFamily = await fetchInstallFontFamily( 3273 makeFontFamilyFormData(fontFamilyToInstall), 3274 registry 3275 ); 3276 } 3277 const alreadyInstalledFontFaces = installedFontFamily.fontFace && fontFamilyToInstall.fontFace ? installedFontFamily.fontFace.filter( 3278 (fontFaceToInstall) => fontFaceToInstall && fontFamilyToInstall.fontFace && checkFontFaceInstalled( 3279 fontFaceToInstall, 3280 fontFamilyToInstall.fontFace 3281 ) 3282 ) : []; 3283 if (installedFontFamily.fontFace && fontFamilyToInstall.fontFace) { 3284 fontFamilyToInstall.fontFace = fontFamilyToInstall.fontFace.filter( 3285 (fontFaceToInstall) => !checkFontFaceInstalled( 3286 fontFaceToInstall, 3287 installedFontFamily.fontFace 3288 ) 3289 ); 3290 } 3291 let successfullyInstalledFontFaces = []; 3292 let unsuccessfullyInstalledFontFaces = []; 3293 if (fontFamilyToInstall?.fontFace?.length ?? 0 > 0) { 3294 const response = await batchInstallFontFaces( 3295 // @ts-expect-error - Type mismatch: WpFontFamily.id can be number | string, but batchInstallFontFaces expects only string. 3296 installedFontFamily.id, 3297 makeFontFacesFormData( 3298 fontFamilyToInstall 3299 ), 3300 registry 3301 ); 3302 successfullyInstalledFontFaces = response?.successes; 3303 unsuccessfullyInstalledFontFaces = response?.errors; 3304 } 3305 if (successfullyInstalledFontFaces?.length > 0 || alreadyInstalledFontFaces?.length > 0) { 3306 installedFontFamily.fontFace = [ 3307 ...successfullyInstalledFontFaces 3308 ]; 3309 fontFamiliesToActivate.push(installedFontFamily); 3310 } 3311 if (installedFontFamily && !fontFamilyToInstall?.fontFace?.length) { 3312 fontFamiliesToActivate.push(installedFontFamily); 3313 } 3314 if (isANewFontFamily && (fontFamilyToInstall?.fontFace?.length ?? 0) > 0 && successfullyInstalledFontFaces?.length === 0) { 3315 await deleteEntityRecord( 3316 "postType", 3317 "wp_font_family", 3318 installedFontFamily.id, 3319 { force: true } 3320 ); 3321 } 3322 installationErrors = installationErrors.concat( 3323 unsuccessfullyInstalledFontFaces 3324 ); 3325 } 3326 const installationErrorMessages = installationErrors.reduce( 3327 (unique, item) => unique.includes(item.message) ? unique : [...unique, item.message], 3328 [] 3329 ); 3330 if (fontFamiliesToActivate.length > 0) { 3331 const activeFonts = activateCustomFontFamilies( 3332 // @ts-expect-error - Type mismatch: items may have id as number | string, but FontFamily.id should be string | undefined. 3333 fontFamiliesToActivate 3334 ); 3335 await saveFontFamilies(activeFonts); 3336 } 3337 if (installationErrorMessages.length > 0) { 3338 const installError = new Error((0, import_i18n11.__)("There was an error installing fonts.")); 3339 installError.installationErrors = installationErrorMessages; 3340 throw installError; 3341 } 3342 } finally { 3343 setIsInstalling(false); 3344 } 3345 } 3346 async function uninstallFontFamily(fontFamilyToUninstall) { 3347 if (!fontFamilyToUninstall?.id) { 3348 throw new Error((0, import_i18n11.__)("Font family to uninstall is not defined.")); 3349 } 3350 try { 3351 await deleteEntityRecord( 3352 "postType", 3353 "wp_font_family", 3354 fontFamilyToUninstall.id, 3355 { force: true } 3356 ); 3357 const activeFonts = deactivateFontFamily(fontFamilyToUninstall); 3358 await saveFontFamilies(activeFonts); 3359 return { deleted: true }; 3360 } catch (error) { 3361 console.error( 3362 `There was an error uninstalling the font family:`, 3363 error 3364 ); 3365 throw error; 3366 } 3367 } 3368 const deactivateFontFamily = (font2) => { 3369 const initialCustomFonts = fontFamilies?.[font2.source ?? ""] ?? []; 3370 const newCustomFonts = initialCustomFonts.filter( 3371 (f2) => f2.slug !== font2.slug 3372 ); 3373 const activeFonts = { 3374 ...fontFamilies, 3375 [font2.source ?? ""]: newCustomFonts 3376 }; 3377 setFontFamilies(activeFonts); 3378 if (font2.fontFace) { 3379 font2.fontFace.forEach((face) => { 3380 unloadFontFaceInBrowser(face, "all"); 3381 }); 3382 } 3383 return activeFonts; 3384 }; 3385 const activateCustomFontFamilies = (fontsToAdd) => { 3386 const fontsToActivate = cleanFontsForSave(fontsToAdd); 3387 const activeFonts = { 3388 ...fontFamilies, 3389 // Merge the existing custom fonts with the new fonts. 3390 custom: mergeFontFamilies(fontFamilies?.custom, fontsToActivate) 3391 }; 3392 setFontFamilies(activeFonts); 3393 loadFontsInBrowser(fontsToActivate); 3394 return activeFonts; 3395 }; 3396 const cleanFontsForSave = (fonts) => { 3397 return fonts.map(({ id: _familyDbId, fontFace, ...font2 }) => ({ 3398 ...font2, 3399 ...fontFace && fontFace.length > 0 ? { 3400 fontFace: fontFace.map( 3401 ({ id: _faceDbId, ...face }) => face 3402 ) 3403 } : {} 3404 })); 3405 }; 3406 const loadFontsInBrowser = (fonts) => { 3407 fonts.forEach((font2) => { 3408 if (font2.fontFace) { 3409 font2.fontFace.forEach((face) => { 3410 const displaySrc = getDisplaySrcFromFontFace( 3411 face?.src ?? "" 3412 ); 3413 if (displaySrc) { 3414 loadFontFaceInBrowser(face, displaySrc, "all"); 3415 } 3416 }); 3417 } 3418 }); 3419 }; 3420 const toggleActivateFont = (font2, face) => { 3421 const initialFonts = fontFamilies?.[font2.source ?? ""] ?? []; 3422 const newFonts = toggleFont(font2, face, initialFonts); 3423 setFontFamilies({ 3424 ...fontFamilies, 3425 [font2.source ?? ""]: newFonts 3426 }); 3427 const isFaceActivated = isFontActivated( 3428 font2.slug, 3429 face?.fontStyle ?? "", 3430 face?.fontWeight ?? "", 3431 font2.source ?? "custom" 3432 ); 3433 if (face && isFaceActivated) { 3434 unloadFontFaceInBrowser(face, "all"); 3435 } else { 3436 const displaySrc = getDisplaySrcFromFontFace(face?.src ?? ""); 3437 if (face && displaySrc) { 3438 loadFontFaceInBrowser(face, displaySrc, "all"); 3439 } 3440 } 3441 }; 3442 const loadFontFaceAsset = async (fontFace) => { 3443 if (!fontFace.src) { 3444 return; 3445 } 3446 const src = getDisplaySrcFromFontFace(fontFace.src); 3447 if (!src || loadedFontUrls.has(src)) { 3448 return; 3449 } 3450 loadFontFaceInBrowser(fontFace, src, "document"); 3451 loadedFontUrls.add(src); 3452 }; 3453 return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( 3454 FontLibraryContext.Provider, 3455 { 3456 value: { 3457 libraryFontSelected, 3458 handleSetLibraryFontSelected, 3459 fontFamilies: fontFamilies ?? {}, 3460 baseCustomFonts, 3461 isFontActivated, 3462 getFontFacesActivated, 3463 loadFontFaceAsset, 3464 installFonts, 3465 uninstallFontFamily, 3466 toggleActivateFont, 3467 getAvailableFontsOutline, 3468 modalTabOpen, 3469 setModalTabOpen, 3470 saveFontFamilies, 3471 isResolvingLibrary, 3472 isInstalling 3473 }, 3474 children 3475 } 3476 ); 3477 } 3478 var context_default = FontLibraryProvider; 3479 3480 // packages/global-styles-ui/build-module/font-library/modal.mjs 3481 var import_i18n17 = __toESM(require_i18n(), 1); 3482 var import_components30 = __toESM(require_components(), 1); 3483 var import_core_data8 = __toESM(require_core_data(), 1); 3484 var import_data8 = __toESM(require_data(), 1); 3485 3486 // packages/global-styles-ui/build-module/font-library/installed-fonts.mjs 3487 var import_components24 = __toESM(require_components(), 1); 3488 var import_core_data6 = __toESM(require_core_data(), 1); 3489 var import_data7 = __toESM(require_data(), 1); 3490 var import_element16 = __toESM(require_element(), 1); 3491 var import_i18n13 = __toESM(require_i18n(), 1); 3492 3493 // packages/global-styles-ui/build-module/font-library/font-card.mjs 3494 var import_i18n12 = __toESM(require_i18n(), 1); 3495 var import_components22 = __toESM(require_components(), 1); 3496 3497 // packages/global-styles-ui/build-module/font-library/font-demo.mjs 3498 var import_components21 = __toESM(require_components(), 1); 3499 var import_element14 = __toESM(require_element(), 1); 3500 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); 3501 function getPreviewUrl(fontFace) { 3502 if (fontFace.preview) { 3503 return fontFace.preview; 3504 } 3505 if (fontFace.src) { 3506 return Array.isArray(fontFace.src) ? fontFace.src[0] : fontFace.src; 3507 } 3508 return void 0; 3509 } 3510 function getDisplayFontFace(font2) { 3511 if ("fontStyle" in font2 && font2.fontStyle || "fontWeight" in font2 && font2.fontWeight) { 3512 return font2; 3513 } 3514 if ("fontFace" in font2 && font2.fontFace && font2.fontFace.length) { 3515 return font2.fontFace.find( 3516 (face) => face.fontStyle === "normal" && face.fontWeight === "400" 3517 ) || font2.fontFace[0]; 3518 } 3519 return { 3520 fontStyle: "normal", 3521 fontWeight: "400", 3522 fontFamily: font2.fontFamily 3523 }; 3524 } 3525 function FontDemo({ font: font2, text }) { 3526 const ref = (0, import_element14.useRef)(null); 3527 const fontFace = getDisplayFontFace(font2); 3528 const style = getFamilyPreviewStyle(font2); 3529 text = text || ("name" in font2 ? font2.name : ""); 3530 const customPreviewUrl = font2.preview; 3531 const [isIntersecting, setIsIntersecting] = (0, import_element14.useState)(false); 3532 const [isAssetLoaded, setIsAssetLoaded] = (0, import_element14.useState)(false); 3533 const { loadFontFaceAsset } = (0, import_element14.useContext)(FontLibraryContext); 3534 const previewUrl = customPreviewUrl ?? getPreviewUrl(fontFace); 3535 const isPreviewImage = previewUrl && previewUrl.match(/\.(png|jpg|jpeg|gif|svg)$/i); 3536 const faceStyles = getFacePreviewStyle(fontFace); 3537 const textDemoStyle = { 3538 fontSize: "18px", 3539 lineHeight: 1, 3540 opacity: isAssetLoaded ? "1" : "0", 3541 ...style, 3542 ...faceStyles 3543 }; 3544 (0, import_element14.useEffect)(() => { 3545 const observer = new window.IntersectionObserver(([entry]) => { 3546 setIsIntersecting(entry.isIntersecting); 3547 }, {}); 3548 if (ref.current) { 3549 observer.observe(ref.current); 3550 } 3551 return () => observer.disconnect(); 3552 }, [ref]); 3553 (0, import_element14.useEffect)(() => { 3554 const loadAsset = async () => { 3555 if (isIntersecting) { 3556 if (!isPreviewImage && fontFace.src) { 3557 await loadFontFaceAsset(fontFace); 3558 } 3559 setIsAssetLoaded(true); 3560 } 3561 }; 3562 loadAsset(); 3563 }, [fontFace, isIntersecting, loadFontFaceAsset, isPreviewImage]); 3564 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { ref, children: isPreviewImage ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( 3565 "img", 3566 { 3567 src: previewUrl, 3568 loading: "lazy", 3569 alt: text, 3570 className: "font-library__font-variant_demo-image" 3571 } 3572 ) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( 3573 import_components21.__experimentalText, 3574 { 3575 style: textDemoStyle, 3576 className: "font-library__font-variant_demo-text", 3577 children: text 3578 } 3579 ) }); 3580 } 3581 var font_demo_default = FontDemo; 3582 3583 // packages/global-styles-ui/build-module/font-library/font-card.mjs 3584 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); 3585 function FontCard({ 3586 font: font2, 3587 onClick, 3588 variantsText, 3589 navigatorPath 3590 }) { 3591 const variantsCount = font2.fontFace?.length || 1; 3592 const style = { 3593 cursor: !!onClick ? "pointer" : "default" 3594 }; 3595 const navigator = (0, import_components22.useNavigator)(); 3596 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( 3597 import_components22.Button, 3598 { 3599 __next40pxDefaultSize: true, 3600 onClick: () => { 3601 onClick(); 3602 if (navigatorPath) { 3603 navigator.goTo(navigatorPath); 3604 } 3605 }, 3606 style, 3607 className: "font-library__font-card", 3608 children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_components22.Flex, { justify: "space-between", wrap: false, children: [ 3609 /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(font_demo_default, { font: font2 }), 3610 /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_components22.Flex, { justify: "flex-end", children: [ 3611 /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components22.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components22.__experimentalText, { className: "font-library__font-card__count", children: variantsText || (0, import_i18n12.sprintf)( 3612 /* translators: %d: Number of font variants. */ 3613 (0, import_i18n12._n)( 3614 "%d variant", 3615 "%d variants", 3616 variantsCount 3617 ), 3618 variantsCount 3619 ) }) }), 3620 /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components22.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(icon_default, { icon: (0, import_i18n12.isRTL)() ? chevron_left_default : chevron_right_default }) }) 3621 ] }) 3622 ] }) 3623 } 3624 ); 3625 } 3626 var font_card_default = FontCard; 3627 3628 // packages/global-styles-ui/build-module/font-library/library-font-variant.mjs 3629 var import_element15 = __toESM(require_element(), 1); 3630 var import_components23 = __toESM(require_components(), 1); 3631 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); 3632 function LibraryFontVariant({ 3633 face, 3634 font: font2 3635 }) { 3636 const { isFontActivated, toggleActivateFont } = (0, import_element15.useContext)(FontLibraryContext); 3637 const isInstalled = (font2?.fontFace?.length ?? 0) > 0 ? isFontActivated( 3638 font2.slug, 3639 face.fontStyle, 3640 face.fontWeight, 3641 font2.source 3642 ) : isFontActivated(font2.slug, void 0, void 0, font2.source); 3643 const handleToggleActivation = () => { 3644 if ((font2?.fontFace?.length ?? 0) > 0) { 3645 toggleActivateFont(font2, face); 3646 return; 3647 } 3648 toggleActivateFont(font2); 3649 }; 3650 const displayName = font2.name + " " + getFontFaceVariantName(face); 3651 const checkboxId = (0, import_element15.useId)(); 3652 return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "font-library__font-card", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_components23.Flex, { justify: "flex-start", align: "center", gap: "1rem", children: [ 3653 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( 3654 import_components23.CheckboxControl, 3655 { 3656 checked: isInstalled, 3657 onChange: handleToggleActivation, 3658 id: checkboxId 3659 } 3660 ), 3661 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("label", { htmlFor: checkboxId, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( 3662 font_demo_default, 3663 { 3664 font: face, 3665 text: displayName, 3666 onClick: handleToggleActivation 3667 } 3668 ) }) 3669 ] }) }); 3670 } 3671 var library_font_variant_default = LibraryFontVariant; 3672 3673 // packages/global-styles-ui/build-module/font-library/utils/sort-font-faces.mjs 3674 function getNumericFontWeight(value) { 3675 switch (value) { 3676 case "normal": 3677 return 400; 3678 case "bold": 3679 return 700; 3680 case "bolder": 3681 return 500; 3682 case "lighter": 3683 return 300; 3684 default: 3685 return parseInt(value, 10); 3686 } 3687 } 3688 function sortFontFaces(faces) { 3689 return faces.sort((a2, b2) => { 3690 if (a2.fontStyle === "normal" && b2.fontStyle !== "normal") { 3691 return -1; 3692 } 3693 if (b2.fontStyle === "normal" && a2.fontStyle !== "normal") { 3694 return 1; 3695 } 3696 if (a2.fontStyle === b2.fontStyle) { 3697 return getNumericFontWeight(a2.fontWeight?.toString() ?? "normal") - getNumericFontWeight(b2.fontWeight?.toString() ?? "normal"); 3698 } 3699 if (!a2.fontStyle || !b2.fontStyle) { 3700 return !a2.fontStyle ? 1 : -1; 3701 } 3702 return a2.fontStyle.localeCompare(b2.fontStyle); 3703 }); 3704 } 3705 3706 // packages/global-styles-ui/build-module/font-library/installed-fonts.mjs 3707 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); 3708 function InstalledFonts() { 3709 const { 3710 baseCustomFonts, 3711 libraryFontSelected, 3712 handleSetLibraryFontSelected, 3713 uninstallFontFamily, 3714 isResolvingLibrary, 3715 isInstalling, 3716 saveFontFamilies, 3717 getFontFacesActivated 3718 } = (0, import_element16.useContext)(FontLibraryContext); 3719 const [fontFamilies, setFontFamilies] = useSetting("typography.fontFamilies"); 3720 const [isConfirmDeleteOpen, setIsConfirmDeleteOpen] = (0, import_element16.useState)(false); 3721 const [notice, setNotice] = (0, import_element16.useState)(null); 3722 const [baseFontFamilies] = useSetting("typography.fontFamilies", void 0, "base"); 3723 const globalStylesId = (0, import_data7.useSelect)((select) => { 3724 const { __experimentalGetCurrentGlobalStylesId } = select(import_core_data6.store); 3725 return __experimentalGetCurrentGlobalStylesId(); 3726 }, []); 3727 const globalStyles = (0, import_core_data6.useEntityRecord)( 3728 "root", 3729 "globalStyles", 3730 globalStylesId 3731 ); 3732 const fontFamiliesHasChanges = !!globalStyles?.edits?.settings?.typography?.fontFamilies; 3733 const themeFonts = fontFamilies?.theme ? fontFamilies.theme.map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) : []; 3734 const themeFontsSlugs = new Set(themeFonts.map((f2) => f2.slug)); 3735 const baseThemeFonts = baseFontFamilies?.theme ? themeFonts.concat( 3736 baseFontFamilies.theme.filter((f2) => !themeFontsSlugs.has(f2.slug)).map((f2) => setUIValuesNeeded(f2, { source: "theme" })).sort((a2, b2) => a2.name.localeCompare(b2.name)) 3737 ) : []; 3738 const customFontFamilyId = libraryFontSelected?.source === "custom" && libraryFontSelected?.id; 3739 const canUserDelete = (0, import_data7.useSelect)( 3740 (select) => { 3741 const { canUser } = select(import_core_data6.store); 3742 return customFontFamilyId && canUser("delete", { 3743 kind: "postType", 3744 name: "wp_font_family", 3745 id: customFontFamilyId 3746 }); 3747 }, 3748 [customFontFamilyId] 3749 ); 3750 const shouldDisplayDeleteButton = !!libraryFontSelected && libraryFontSelected?.source !== "theme" && canUserDelete; 3751 const handleUninstallClick = () => { 3752 setIsConfirmDeleteOpen(true); 3753 }; 3754 const handleUpdate = async () => { 3755 setNotice(null); 3756 try { 3757 await saveFontFamilies(fontFamilies); 3758 setNotice({ 3759 type: "success", 3760 message: (0, import_i18n13.__)("Font family updated successfully.") 3761 }); 3762 } catch (error) { 3763 setNotice({ 3764 type: "error", 3765 message: (0, import_i18n13.sprintf)( 3766 /* translators: %s: error message */ 3767 (0, import_i18n13.__)("There was an error updating the font family. %s"), 3768 error.message 3769 ) 3770 }); 3771 } 3772 }; 3773 const getFontFacesToDisplay = (font2) => { 3774 if (!font2) { 3775 return []; 3776 } 3777 if (!font2.fontFace || !font2.fontFace.length) { 3778 return [ 3779 { 3780 fontFamily: font2.fontFamily, 3781 fontStyle: "normal", 3782 fontWeight: "400" 3783 } 3784 ]; 3785 } 3786 return sortFontFaces(font2.fontFace); 3787 }; 3788 const getFontCardVariantsText = (font2) => { 3789 const variantsInstalled = font2?.fontFace && (font2?.fontFace?.length ?? 0) > 0 ? font2.fontFace.length : 1; 3790 const variantsActive = getFontFacesActivated( 3791 font2.slug, 3792 font2.source 3793 ).length; 3794 return (0, import_i18n13.sprintf)( 3795 /* translators: 1: Active font variants, 2: Total font variants. */ 3796 (0, import_i18n13.__)("%1$d/%2$d variants active"), 3797 variantsActive, 3798 variantsInstalled 3799 ); 3800 }; 3801 (0, import_element16.useEffect)(() => { 3802 handleSetLibraryFontSelected(libraryFontSelected); 3803 }, []); 3804 const activeFontsCount = libraryFontSelected ? getFontFacesActivated( 3805 libraryFontSelected.slug, 3806 libraryFontSelected.source 3807 ).length : 0; 3808 const selectedFontsCount = libraryFontSelected?.fontFace?.length ?? (libraryFontSelected?.fontFamily ? 1 : 0); 3809 const isIndeterminate = activeFontsCount > 0 && activeFontsCount !== selectedFontsCount; 3810 const isSelectAllChecked = activeFontsCount === selectedFontsCount; 3811 const toggleSelectAll = () => { 3812 if (!libraryFontSelected || !libraryFontSelected?.source) { 3813 return; 3814 } 3815 const initialFonts = fontFamilies?.[libraryFontSelected.source]?.filter( 3816 (f2) => f2.slug !== libraryFontSelected.slug 3817 ) ?? []; 3818 const newFonts = isSelectAllChecked ? initialFonts : [...initialFonts, libraryFontSelected]; 3819 setFontFamilies({ 3820 ...fontFamilies, 3821 [libraryFontSelected.source]: newFonts 3822 }); 3823 if (libraryFontSelected.fontFace) { 3824 libraryFontSelected.fontFace.forEach((face) => { 3825 if (isSelectAllChecked) { 3826 unloadFontFaceInBrowser(face, "all"); 3827 } else { 3828 const displaySrc = getDisplaySrcFromFontFace( 3829 face?.src ?? "" 3830 ); 3831 if (displaySrc) { 3832 loadFontFaceInBrowser(face, displaySrc, "all"); 3833 } 3834 } 3835 }); 3836 } 3837 }; 3838 const hasFonts = baseThemeFonts.length > 0 || baseCustomFonts.length > 0; 3839 return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ 3840 isResolvingLibrary && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "font-library__loading", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.ProgressBar, {}) }), 3841 !isResolvingLibrary && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ 3842 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)( 3843 import_components24.Navigator, 3844 { 3845 initialPath: libraryFontSelected ? "/fontFamily" : "/", 3846 children: [ 3847 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.Navigator.Screen, { path: "/", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components24.__experimentalVStack, { spacing: "8", children: [ 3848 notice && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3849 import_components24.Notice, 3850 { 3851 status: notice.type, 3852 onRemove: () => setNotice(null), 3853 children: notice.message 3854 } 3855 ), 3856 !hasFonts && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.__experimentalText, { as: "p", children: (0, import_i18n13.__)("No fonts installed.") }), 3857 baseThemeFonts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components24.__experimentalVStack, { children: [ 3858 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h2", { 3859 className: "font-library__fonts-title", 3860 /* translators: Heading for a list of fonts provided by the theme. */ 3861 children: (0, import_i18n13._x)("Theme", "font source") 3862 }), 3863 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3864 "ul", 3865 { 3866 role: "list", 3867 className: "font-library__fonts-list", 3868 children: baseThemeFonts.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3869 "li", 3870 { 3871 className: "font-library__fonts-list-item", 3872 children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3873 font_card_default, 3874 { 3875 font: font2, 3876 navigatorPath: "/fontFamily", 3877 variantsText: getFontCardVariantsText( 3878 font2 3879 ), 3880 onClick: () => { 3881 setNotice(null); 3882 handleSetLibraryFontSelected( 3883 font2 3884 ); 3885 } 3886 } 3887 ) 3888 }, 3889 font2.slug 3890 )) 3891 } 3892 ) 3893 ] }), 3894 baseCustomFonts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components24.__experimentalVStack, { children: [ 3895 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h2", { 3896 className: "font-library__fonts-title", 3897 /* translators: Heading for a list of fonts installed by the user. */ 3898 children: (0, import_i18n13._x)("Custom", "font source") 3899 }), 3900 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3901 "ul", 3902 { 3903 role: "list", 3904 className: "font-library__fonts-list", 3905 children: baseCustomFonts.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3906 "li", 3907 { 3908 className: "font-library__fonts-list-item", 3909 children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3910 font_card_default, 3911 { 3912 font: font2, 3913 navigatorPath: "/fontFamily", 3914 variantsText: getFontCardVariantsText( 3915 font2 3916 ), 3917 onClick: () => { 3918 setNotice(null); 3919 handleSetLibraryFontSelected( 3920 font2 3921 ); 3922 } 3923 } 3924 ) 3925 }, 3926 font2.slug 3927 )) 3928 } 3929 ) 3930 ] }) 3931 ] }) }), 3932 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components24.Navigator.Screen, { path: "/fontFamily", children: [ 3933 libraryFontSelected && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3934 ConfirmDeleteDialog, 3935 { 3936 font: libraryFontSelected, 3937 isOpen: isConfirmDeleteOpen, 3938 setIsOpen: setIsConfirmDeleteOpen, 3939 setNotice, 3940 uninstallFontFamily, 3941 handleSetLibraryFontSelected 3942 } 3943 ), 3944 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components24.Flex, { justify: "flex-start", children: [ 3945 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3946 import_components24.Navigator.BackButton, 3947 { 3948 icon: (0, import_i18n13.isRTL)() ? chevron_right_default : chevron_left_default, 3949 size: "small", 3950 onClick: () => { 3951 handleSetLibraryFontSelected( 3952 void 0 3953 ); 3954 setNotice(null); 3955 }, 3956 label: (0, import_i18n13.__)("Back") 3957 } 3958 ), 3959 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3960 import_components24.__experimentalHeading, 3961 { 3962 level: 2, 3963 size: 13, 3964 className: "global-styles-ui-header", 3965 children: libraryFontSelected?.name 3966 } 3967 ) 3968 ] }), 3969 notice && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ 3970 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.__experimentalSpacer, { margin: 1 }), 3971 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3972 import_components24.Notice, 3973 { 3974 status: notice.type, 3975 onRemove: () => setNotice(null), 3976 children: notice.message 3977 } 3978 ), 3979 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.__experimentalSpacer, { margin: 1 }) 3980 ] }), 3981 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.__experimentalSpacer, { margin: 4 }), 3982 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.__experimentalText, { children: (0, import_i18n13.__)( 3983 "Choose font variants. Keep in mind that too many variants could make your site slower." 3984 ) }), 3985 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.__experimentalSpacer, { margin: 4 }), 3986 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components24.__experimentalVStack, { spacing: 0, children: [ 3987 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3988 import_components24.CheckboxControl, 3989 { 3990 className: "font-library__select-all", 3991 label: (0, import_i18n13.__)("Select all"), 3992 checked: isSelectAllChecked, 3993 onChange: toggleSelectAll, 3994 indeterminate: isIndeterminate 3995 } 3996 ), 3997 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.__experimentalSpacer, { margin: 8 }), 3998 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 3999 "ul", 4000 { 4001 role: "list", 4002 className: "font-library__fonts-list", 4003 children: libraryFontSelected && getFontFacesToDisplay( 4004 libraryFontSelected 4005 ).map((face, i2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 4006 "li", 4007 { 4008 className: "font-library__fonts-list-item", 4009 children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 4010 library_font_variant_default, 4011 { 4012 font: libraryFontSelected, 4013 face 4014 }, 4015 `face$i2}` 4016 ) 4017 }, 4018 `face$i2}` 4019 )) 4020 } 4021 ) 4022 ] }) 4023 ] }) 4024 ] 4025 } 4026 ), 4027 /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components24.__experimentalHStack, { justify: "flex-end", className: "font-library__footer", children: [ 4028 isInstalling && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components24.ProgressBar, {}), 4029 shouldDisplayDeleteButton && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 4030 import_components24.Button, 4031 { 4032 __next40pxDefaultSize: true, 4033 isDestructive: true, 4034 variant: "tertiary", 4035 onClick: handleUninstallClick, 4036 children: (0, import_i18n13.__)("Delete") 4037 } 4038 ), 4039 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 4040 import_components24.Button, 4041 { 4042 __next40pxDefaultSize: true, 4043 variant: "primary", 4044 onClick: handleUpdate, 4045 disabled: !fontFamiliesHasChanges, 4046 accessibleWhenDisabled: true, 4047 children: (0, import_i18n13.__)("Update") 4048 } 4049 ) 4050 ] }) 4051 ] }) 4052 ] }); 4053 } 4054 function ConfirmDeleteDialog({ 4055 font: font2, 4056 isOpen, 4057 setIsOpen, 4058 setNotice, 4059 uninstallFontFamily, 4060 handleSetLibraryFontSelected 4061 }) { 4062 const navigator = (0, import_components24.useNavigator)(); 4063 const handleConfirmUninstall = async () => { 4064 setNotice(null); 4065 setIsOpen(false); 4066 try { 4067 await uninstallFontFamily(font2); 4068 navigator.goBack(); 4069 handleSetLibraryFontSelected(void 0); 4070 setNotice({ 4071 type: "success", 4072 message: (0, import_i18n13.__)("Font family uninstalled successfully.") 4073 }); 4074 } catch (error) { 4075 setNotice({ 4076 type: "error", 4077 message: (0, import_i18n13.__)("There was an error uninstalling the font family.") + error.message 4078 }); 4079 } 4080 }; 4081 const handleCancelUninstall = () => { 4082 setIsOpen(false); 4083 }; 4084 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 4085 import_components24.__experimentalConfirmDialog, 4086 { 4087 isOpen, 4088 cancelButtonText: (0, import_i18n13.__)("Cancel"), 4089 confirmButtonText: (0, import_i18n13.__)("Delete"), 4090 onCancel: handleCancelUninstall, 4091 onConfirm: handleConfirmUninstall, 4092 size: "medium", 4093 children: font2 && (0, import_i18n13.sprintf)( 4094 /* translators: %s: Name of the font. */ 4095 (0, import_i18n13.__)( 4096 'Are you sure you want to delete "%s" font and all its variants and assets?' 4097 ), 4098 font2.name 4099 ) 4100 } 4101 ); 4102 } 4103 var installed_fonts_default = InstalledFonts; 4104 4105 // packages/global-styles-ui/build-module/font-library/font-collection.mjs 4106 var import_element18 = __toESM(require_element(), 1); 4107 var import_components27 = __toESM(require_components(), 1); 4108 var import_compose3 = __toESM(require_compose(), 1); 4109 var import_i18n15 = __toESM(require_i18n(), 1); 4110 var import_core_data7 = __toESM(require_core_data(), 1); 4111 4112 // packages/global-styles-ui/build-module/font-library/utils/filter-fonts.mjs 4113 function filterFonts(fonts, filters) { 4114 const { category, search } = filters; 4115 let filteredFonts = fonts || []; 4116 if (category && category !== "all") { 4117 filteredFonts = filteredFonts.filter( 4118 (font2) => font2.categories && font2.categories.indexOf(category) !== -1 4119 ); 4120 } 4121 if (search) { 4122 filteredFonts = filteredFonts.filter( 4123 (font2) => font2.font_family_settings && font2.font_family_settings.name.toLowerCase().includes(search.toLowerCase()) 4124 ); 4125 } 4126 return filteredFonts; 4127 } 4128 4129 // packages/global-styles-ui/build-module/font-library/utils/fonts-outline.mjs 4130 function getFontsOutline(fonts) { 4131 return fonts.reduce( 4132 (acc, font2) => ({ 4133 ...acc, 4134 [font2.slug]: (font2?.fontFace || []).reduce( 4135 (faces, face) => ({ 4136 ...faces, 4137 [`$face.fontStyle}-$face.fontWeight}`]: true 4138 }), 4139 {} 4140 ) 4141 }), 4142 {} 4143 ); 4144 } 4145 function isFontFontFaceInOutline(slug, face, outline) { 4146 if (!face) { 4147 return !!outline[slug]; 4148 } 4149 return !!outline[slug]?.[`$face.fontStyle}-$face.fontWeight}`]; 4150 } 4151 4152 // packages/global-styles-ui/build-module/font-library/google-fonts-confirm-dialog.mjs 4153 var import_i18n14 = __toESM(require_i18n(), 1); 4154 var import_components25 = __toESM(require_components(), 1); 4155 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); 4156 function GoogleFontsConfirmDialog() { 4157 const handleConfirm = () => { 4158 window.localStorage.setItem( 4159 "wp-font-library-google-fonts-permission", 4160 "true" 4161 ); 4162 window.dispatchEvent(new Event("storage")); 4163 }; 4164 return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "font-library__google-fonts-confirm", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components25.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_components25.CardBody, { children: [ 4165 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components25.__experimentalHeading, { level: 2, children: (0, import_i18n14.__)("Connect to Google Fonts") }), 4166 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components25.__experimentalSpacer, { margin: 6 }), 4167 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components25.__experimentalText, { as: "p", children: (0, import_i18n14.__)( 4168 "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." 4169 ) }), 4170 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components25.__experimentalSpacer, { margin: 3 }), 4171 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components25.__experimentalText, { as: "p", children: (0, import_i18n14.__)( 4172 "You can alternatively upload files directly on the Upload tab." 4173 ) }), 4174 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components25.__experimentalSpacer, { margin: 6 }), 4175 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( 4176 import_components25.Button, 4177 { 4178 __next40pxDefaultSize: true, 4179 variant: "primary", 4180 onClick: handleConfirm, 4181 children: (0, import_i18n14.__)("Allow access to Google Fonts") 4182 } 4183 ) 4184 ] }) }) }); 4185 } 4186 var google_fonts_confirm_dialog_default = GoogleFontsConfirmDialog; 4187 4188 // packages/global-styles-ui/build-module/font-library/collection-font-variant.mjs 4189 var import_element17 = __toESM(require_element(), 1); 4190 var import_components26 = __toESM(require_components(), 1); 4191 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); 4192 function CollectionFontVariant({ 4193 face, 4194 font: font2, 4195 handleToggleVariant, 4196 selected 4197 }) { 4198 const handleToggleActivation = () => { 4199 if (font2?.fontFace) { 4200 handleToggleVariant(font2, face); 4201 return; 4202 } 4203 handleToggleVariant(font2); 4204 }; 4205 const displayName = font2.name + " " + getFontFaceVariantName(face); 4206 const checkboxId = (0, import_element17.useId)(); 4207 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "font-library__font-card", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components26.Flex, { justify: "flex-start", align: "center", gap: "1rem", children: [ 4208 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( 4209 import_components26.CheckboxControl, 4210 { 4211 checked: selected, 4212 onChange: handleToggleActivation, 4213 id: checkboxId 4214 } 4215 ), 4216 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("label", { htmlFor: checkboxId, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( 4217 font_demo_default, 4218 { 4219 font: face, 4220 text: displayName, 4221 onClick: handleToggleActivation 4222 } 4223 ) }) 4224 ] }) }); 4225 } 4226 var collection_font_variant_default = CollectionFontVariant; 4227 4228 // packages/global-styles-ui/build-module/font-library/font-collection.mjs 4229 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); 4230 var DEFAULT_CATEGORY = { 4231 slug: "all", 4232 name: (0, import_i18n15._x)("All", "font categories") 4233 }; 4234 var LOCAL_STORAGE_ITEM = "wp-font-library-google-fonts-permission"; 4235 var MIN_WINDOW_HEIGHT = 500; 4236 function FontCollection({ slug }) { 4237 const requiresPermission = slug === "google-fonts"; 4238 const getGoogleFontsPermissionFromStorage = () => { 4239 return window.localStorage.getItem(LOCAL_STORAGE_ITEM) === "true"; 4240 }; 4241 const [selectedFont, setSelectedFont] = (0, import_element18.useState)( 4242 null 4243 ); 4244 const [notice, setNotice] = (0, import_element18.useState)(null); 4245 const [fontsToInstall, setFontsToInstall] = (0, import_element18.useState)( 4246 [] 4247 ); 4248 const [page, setPage] = (0, import_element18.useState)(1); 4249 const [filters, setFilters] = (0, import_element18.useState)({}); 4250 const [renderConfirmDialog, setRenderConfirmDialog] = (0, import_element18.useState)( 4251 requiresPermission && !getGoogleFontsPermissionFromStorage() 4252 ); 4253 const { installFonts, isInstalling } = (0, import_element18.useContext)(FontLibraryContext); 4254 const { record: selectedCollection, isResolving: isLoading } = (0, import_core_data7.useEntityRecord)("root", "fontCollection", slug); 4255 (0, import_element18.useEffect)(() => { 4256 const handleStorage = () => { 4257 setRenderConfirmDialog( 4258 requiresPermission && !getGoogleFontsPermissionFromStorage() 4259 ); 4260 }; 4261 handleStorage(); 4262 window.addEventListener("storage", handleStorage); 4263 return () => window.removeEventListener("storage", handleStorage); 4264 }, [slug, requiresPermission]); 4265 const revokeAccess = () => { 4266 window.localStorage.setItem(LOCAL_STORAGE_ITEM, "false"); 4267 window.dispatchEvent(new Event("storage")); 4268 }; 4269 (0, import_element18.useEffect)(() => { 4270 setSelectedFont(null); 4271 }, [slug]); 4272 (0, import_element18.useEffect)(() => { 4273 setFontsToInstall([]); 4274 }, [selectedFont]); 4275 const collectionFonts = (0, import_element18.useMemo)( 4276 () => selectedCollection?.font_families ?? [], 4277 [selectedCollection] 4278 ); 4279 const collectionCategories = selectedCollection?.categories ?? []; 4280 const categories = [DEFAULT_CATEGORY, ...collectionCategories]; 4281 const fonts = (0, import_element18.useMemo)( 4282 () => filterFonts(collectionFonts, filters), 4283 [collectionFonts, filters] 4284 ); 4285 const windowHeight = Math.max(window.innerHeight, MIN_WINDOW_HEIGHT); 4286 const pageSize = Math.floor((windowHeight - 417) / 61); 4287 const totalPages = Math.ceil(fonts.length / pageSize); 4288 const itemsStart = (page - 1) * pageSize; 4289 const itemsLimit = page * pageSize; 4290 const items = fonts.slice(itemsStart, itemsLimit); 4291 const handleCategoryFilter = (category) => { 4292 setFilters({ ...filters, category }); 4293 setPage(1); 4294 }; 4295 const handleUpdateSearchInput = (value) => { 4296 setFilters({ ...filters, search: value }); 4297 setPage(1); 4298 }; 4299 const debouncedUpdateSearchInput = (0, import_compose3.debounce)(handleUpdateSearchInput, 300); 4300 const handleToggleVariant = (font2, face) => { 4301 const newFontsToInstall = toggleFont(font2, face, fontsToInstall); 4302 setFontsToInstall(newFontsToInstall); 4303 }; 4304 const fontToInstallOutline = getFontsOutline(fontsToInstall); 4305 const resetFontsToInstall = () => { 4306 setFontsToInstall([]); 4307 }; 4308 const selectFontCount = fontsToInstall.length > 0 ? fontsToInstall[0]?.fontFace?.length ?? 0 : 0; 4309 const isIndeterminate = selectFontCount > 0 && selectFontCount !== selectedFont?.fontFace?.length; 4310 const isSelectAllChecked = selectFontCount === selectedFont?.fontFace?.length; 4311 const toggleSelectAll = () => { 4312 const newFonts = []; 4313 if (!isSelectAllChecked && selectedFont) { 4314 newFonts.push(selectedFont); 4315 } 4316 setFontsToInstall(newFonts); 4317 }; 4318 const handleInstall = async () => { 4319 setNotice(null); 4320 const fontFamily = fontsToInstall[0]; 4321 try { 4322 if (fontFamily?.fontFace) { 4323 await Promise.all( 4324 fontFamily.fontFace.map(async (fontFace) => { 4325 if (fontFace.src) { 4326 fontFace.file = await downloadFontFaceAssets( 4327 fontFace.src 4328 ); 4329 } 4330 }) 4331 ); 4332 } 4333 } catch (error) { 4334 setNotice({ 4335 type: "error", 4336 message: (0, import_i18n15.__)( 4337 "Error installing the fonts, could not be downloaded." 4338 ) 4339 }); 4340 return; 4341 } 4342 try { 4343 await installFonts([fontFamily]); 4344 setNotice({ 4345 type: "success", 4346 message: (0, import_i18n15.__)("Fonts were installed successfully.") 4347 }); 4348 } catch (error) { 4349 setNotice({ 4350 type: "error", 4351 message: error.message 4352 }); 4353 } 4354 resetFontsToInstall(); 4355 }; 4356 const getSortedFontFaces = (fontFamily) => { 4357 if (!fontFamily) { 4358 return []; 4359 } 4360 if (!fontFamily.fontFace || !fontFamily.fontFace.length) { 4361 return [ 4362 { 4363 fontFamily: fontFamily.fontFamily, 4364 fontStyle: "normal", 4365 fontWeight: "400" 4366 } 4367 ]; 4368 } 4369 return sortFontFaces(fontFamily.fontFace); 4370 }; 4371 if (renderConfirmDialog) { 4372 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(google_fonts_confirm_dialog_default, {}); 4373 } 4374 const ActionsComponent = () => { 4375 if (slug !== "google-fonts" || renderConfirmDialog || selectedFont) { 4376 return null; 4377 } 4378 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4379 import_components27.DropdownMenu, 4380 { 4381 icon: more_vertical_default, 4382 label: (0, import_i18n15.__)("Actions"), 4383 popoverProps: { 4384 position: "bottom left" 4385 }, 4386 controls: [ 4387 { 4388 title: (0, import_i18n15.__)("Revoke access to Google Fonts"), 4389 onClick: revokeAccess 4390 } 4391 ] 4392 } 4393 ); 4394 }; 4395 return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ 4396 isLoading && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "font-library__loading", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.ProgressBar, {}) }), 4397 !isLoading && selectedCollection && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 4398 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( 4399 import_components27.Navigator, 4400 { 4401 initialPath: "/", 4402 className: "font-library__tabpanel-layout", 4403 children: [ 4404 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components27.Navigator.Screen, { path: "/", children: [ 4405 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components27.__experimentalHStack, { justify: "space-between", children: [ 4406 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components27.__experimentalVStack, { children: [ 4407 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalHeading, { level: 2, size: 13, children: selectedCollection.name }), 4408 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalText, { children: selectedCollection.description }) 4409 ] }), 4410 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ActionsComponent, {}) 4411 ] }), 4412 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalSpacer, { margin: 4 }), 4413 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components27.__experimentalHStack, { spacing: 4, justify: "space-between", children: [ 4414 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4415 import_components27.SearchControl, 4416 { 4417 value: filters.search, 4418 placeholder: (0, import_i18n15.__)("Font name\u2026"), 4419 label: (0, import_i18n15.__)("Search"), 4420 onChange: debouncedUpdateSearchInput, 4421 hideLabelFromVision: false 4422 } 4423 ), 4424 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4425 import_components27.SelectControl, 4426 { 4427 __next40pxDefaultSize: true, 4428 label: (0, import_i18n15.__)("Category"), 4429 value: filters.category, 4430 onChange: handleCategoryFilter, 4431 children: categories && categories.map((category) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4432 "option", 4433 { 4434 value: category.slug, 4435 children: category.name 4436 }, 4437 category.slug 4438 )) 4439 } 4440 ) 4441 ] }), 4442 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalSpacer, { margin: 4 }), 4443 !!selectedCollection?.font_families?.length && !fonts.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalText, { children: (0, import_i18n15.__)( 4444 "No fonts found. Try with a different search term." 4445 ) }), 4446 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "font-library__fonts-grid__main", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4447 "ul", 4448 { 4449 role: "list", 4450 className: "font-library__fonts-list", 4451 children: items.map((font2) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4452 "li", 4453 { 4454 className: "font-library__fonts-list-item", 4455 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4456 font_card_default, 4457 { 4458 font: font2.font_family_settings, 4459 navigatorPath: "/fontFamily", 4460 onClick: () => { 4461 setSelectedFont( 4462 font2.font_family_settings 4463 ); 4464 } 4465 } 4466 ) 4467 }, 4468 font2.font_family_settings.slug 4469 )) 4470 } 4471 ) }) 4472 ] }), 4473 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components27.Navigator.Screen, { path: "/fontFamily", children: [ 4474 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components27.Flex, { justify: "flex-start", children: [ 4475 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4476 import_components27.Navigator.BackButton, 4477 { 4478 icon: (0, import_i18n15.isRTL)() ? chevron_right_default : chevron_left_default, 4479 size: "small", 4480 onClick: () => { 4481 setSelectedFont(null); 4482 setNotice(null); 4483 }, 4484 label: (0, import_i18n15.__)("Back") 4485 } 4486 ), 4487 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4488 import_components27.__experimentalHeading, 4489 { 4490 level: 2, 4491 size: 13, 4492 className: "global-styles-ui-header", 4493 children: selectedFont?.name 4494 } 4495 ) 4496 ] }), 4497 notice && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 4498 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalSpacer, { margin: 1 }), 4499 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4500 import_components27.Notice, 4501 { 4502 status: notice.type, 4503 onRemove: () => setNotice(null), 4504 children: notice.message 4505 } 4506 ), 4507 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalSpacer, { margin: 1 }) 4508 ] }), 4509 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalSpacer, { margin: 4 }), 4510 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalText, { children: (0, import_i18n15.__)("Select font variants to install.") }), 4511 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalSpacer, { margin: 4 }), 4512 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4513 import_components27.CheckboxControl, 4514 { 4515 className: "font-library__select-all", 4516 label: (0, import_i18n15.__)("Select all"), 4517 checked: isSelectAllChecked, 4518 onChange: toggleSelectAll, 4519 indeterminate: isIndeterminate 4520 } 4521 ), 4522 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalVStack, { spacing: 0, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4523 "ul", 4524 { 4525 role: "list", 4526 className: "font-library__fonts-list", 4527 children: selectedFont && getSortedFontFaces(selectedFont).map( 4528 (face, i2) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4529 "li", 4530 { 4531 className: "font-library__fonts-list-item", 4532 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4533 collection_font_variant_default, 4534 { 4535 font: selectedFont, 4536 face, 4537 handleToggleVariant, 4538 selected: isFontFontFaceInOutline( 4539 selectedFont.slug, 4540 selectedFont.fontFace ? face : null, 4541 // If the font has no fontFace, we want to check if the font is in the outline 4542 fontToInstallOutline 4543 ) 4544 } 4545 ) 4546 }, 4547 `face$i2}` 4548 ) 4549 ) 4550 } 4551 ) }), 4552 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components27.__experimentalSpacer, { margin: 16 }) 4553 ] }) 4554 ] 4555 } 4556 ), 4557 selectedFont && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4558 import_components27.Flex, 4559 { 4560 justify: "flex-end", 4561 className: "font-library__footer", 4562 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4563 import_components27.Button, 4564 { 4565 __next40pxDefaultSize: true, 4566 variant: "primary", 4567 onClick: handleInstall, 4568 isBusy: isInstalling, 4569 disabled: fontsToInstall.length === 0 || isInstalling, 4570 accessibleWhenDisabled: true, 4571 children: (0, import_i18n15.__)("Install") 4572 } 4573 ) 4574 } 4575 ), 4576 !selectedFont && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)( 4577 import_components27.__experimentalHStack, 4578 { 4579 expanded: false, 4580 className: "font-library__footer", 4581 justify: "end", 4582 spacing: 6, 4583 children: [ 4584 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4585 import_components27.__experimentalHStack, 4586 { 4587 justify: "flex-start", 4588 expanded: false, 4589 spacing: 1, 4590 className: "font-library__page-selection", 4591 children: (0, import_element18.createInterpolateElement)( 4592 (0, import_i18n15.sprintf)( 4593 // translators: 1: Current page number, 2: Total number of pages. 4594 (0, import_i18n15._x)( 4595 "<div>Page</div>%1$s<div>of %2$d</div>", 4596 "paging" 4597 ), 4598 "<CurrentPage />", 4599 totalPages 4600 ), 4601 { 4602 div: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { "aria-hidden": true }), 4603 CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4604 import_components27.SelectControl, 4605 { 4606 "aria-label": (0, import_i18n15.__)( 4607 "Current page" 4608 ), 4609 value: page.toString(), 4610 options: [ 4611 ...Array(totalPages) 4612 ].map((e2, i2) => { 4613 return { 4614 label: (i2 + 1).toString(), 4615 value: (i2 + 1).toString() 4616 }; 4617 }), 4618 onChange: (newPage) => setPage( 4619 parseInt(newPage) 4620 ), 4621 size: "small", 4622 variant: "minimal" 4623 } 4624 ) 4625 } 4626 ) 4627 } 4628 ), 4629 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_components27.__experimentalHStack, { expanded: false, spacing: 1, children: [ 4630 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4631 import_components27.Button, 4632 { 4633 onClick: () => setPage(page - 1), 4634 disabled: page === 1, 4635 accessibleWhenDisabled: true, 4636 label: (0, import_i18n15.__)("Previous page"), 4637 icon: (0, import_i18n15.isRTL)() ? next_default : previous_default, 4638 showTooltip: true, 4639 size: "compact", 4640 tooltipPosition: "top" 4641 } 4642 ), 4643 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 4644 import_components27.Button, 4645 { 4646 onClick: () => setPage(page + 1), 4647 disabled: page === totalPages, 4648 accessibleWhenDisabled: true, 4649 label: (0, import_i18n15.__)("Next page"), 4650 icon: (0, import_i18n15.isRTL)() ? previous_default : next_default, 4651 showTooltip: true, 4652 size: "compact", 4653 tooltipPosition: "top" 4654 } 4655 ) 4656 ] }) 4657 ] 4658 } 4659 ) 4660 ] }) 4661 ] }); 4662 } 4663 var font_collection_default = FontCollection; 4664 4665 // packages/global-styles-ui/build-module/font-library/upload-fonts.mjs 4666 var import_i18n16 = __toESM(require_i18n(), 1); 4667 var import_components29 = __toESM(require_components(), 1); 4668 var import_element19 = __toESM(require_element(), 1); 4669 4670 // packages/global-styles-ui/build-module/font-library/lib/unbrotli.mjs 4671 var __require2 = /* @__PURE__ */ ((x2) => typeof __require !== "undefined" ? __require : typeof Proxy !== "undefined" ? new Proxy(x2, { 4672 get: (a2, b2) => (typeof __require !== "undefined" ? __require : a2)[b2] 4673 }) : x2)(function(x2) { 4674 if (typeof __require !== "undefined") return __require.apply(this, arguments); 4675 throw Error('Dynamic require of "' + x2 + '" is not supported'); 4676 }); 4677 var unbrotli_default = (function() { 4678 var define, module, exports; 4679 return (/* @__PURE__ */ (function() { 4680 function r3(e2, n2, t3) { 4681 function o3(i22, f2) { 4682 if (!n2[i22]) { 4683 if (!e2[i22]) { 4684 var c2 = "function" == typeof __require2 && __require2; 4685 if (!f2 && c2) return c2(i22, true); 4686 if (u2) return u2(i22, true); 4687 var a2 = new Error("Cannot find module '" + i22 + "'"); 4688 throw a2.code = "MODULE_NOT_FOUND", a2; 4689 } 4690 var p3 = n2[i22] = { exports: {} }; 4691 e2[i22][0].call( 4692 p3.exports, 4693 function(r22) { 4694 var n22 = e2[i22][1][r22]; 4695 return o3(n22 || r22); 4696 }, 4697 p3, 4698 p3.exports, 4699 r3, 4700 e2, 4701 n2, 4702 t3 4703 ); 4704 } 4705 return n2[i22].exports; 4706 } 4707 for (var u2 = "function" == typeof __require2 && __require2, i2 = 0; i2 < t3.length; i2++) 4708 o3(t3[i2]); 4709 return o3; 4710 } 4711 return r3; 4712 })())( 4713 { 4714 1: [ 4715 function(require2, module2, exports2) { 4716 var BROTLI_READ_SIZE = 4096; 4717 var BROTLI_IBUF_SIZE = 2 * BROTLI_READ_SIZE + 32; 4718 var BROTLI_IBUF_MASK = 2 * BROTLI_READ_SIZE - 1; 4719 var kBitMask = new Uint32Array([ 4720 0, 4721 1, 4722 3, 4723 7, 4724 15, 4725 31, 4726 63, 4727 127, 4728 255, 4729 511, 4730 1023, 4731 2047, 4732 4095, 4733 8191, 4734 16383, 4735 32767, 4736 65535, 4737 131071, 4738 262143, 4739 524287, 4740 1048575, 4741 2097151, 4742 4194303, 4743 8388607, 4744 16777215 4745 ]); 4746 function BrotliBitReader(input) { 4747 this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE); 4748 this.input_ = input; 4749 this.reset(); 4750 } 4751 BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE; 4752 BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK; 4753 BrotliBitReader.prototype.reset = function() { 4754 this.buf_ptr_ = 0; 4755 this.val_ = 0; 4756 this.pos_ = 0; 4757 this.bit_pos_ = 0; 4758 this.bit_end_pos_ = 0; 4759 this.eos_ = 0; 4760 this.readMoreInput(); 4761 for (var i2 = 0; i2 < 4; i2++) { 4762 this.val_ |= this.buf_[this.pos_] << 8 * i2; 4763 ++this.pos_; 4764 } 4765 return this.bit_end_pos_ > 0; 4766 }; 4767 BrotliBitReader.prototype.readMoreInput = function() { 4768 if (this.bit_end_pos_ > 256) { 4769 return; 4770 } else if (this.eos_) { 4771 if (this.bit_pos_ > this.bit_end_pos_) 4772 throw new Error( 4773 "Unexpected end of input " + this.bit_pos_ + " " + this.bit_end_pos_ 4774 ); 4775 } else { 4776 var dst = this.buf_ptr_; 4777 var bytes_read = this.input_.read( 4778 this.buf_, 4779 dst, 4780 BROTLI_READ_SIZE 4781 ); 4782 if (bytes_read < 0) { 4783 throw new Error("Unexpected end of input"); 4784 } 4785 if (bytes_read < BROTLI_READ_SIZE) { 4786 this.eos_ = 1; 4787 for (var p3 = 0; p3 < 32; p3++) 4788 this.buf_[dst + bytes_read + p3] = 0; 4789 } 4790 if (dst === 0) { 4791 for (var p3 = 0; p3 < 32; p3++) 4792 this.buf_[(BROTLI_READ_SIZE << 1) + p3] = this.buf_[p3]; 4793 this.buf_ptr_ = BROTLI_READ_SIZE; 4794 } else { 4795 this.buf_ptr_ = 0; 4796 } 4797 this.bit_end_pos_ += bytes_read << 3; 4798 } 4799 }; 4800 BrotliBitReader.prototype.fillBitWindow = function() { 4801 while (this.bit_pos_ >= 8) { 4802 this.val_ >>>= 8; 4803 this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24; 4804 ++this.pos_; 4805 this.bit_pos_ = this.bit_pos_ - 8 >>> 0; 4806 this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0; 4807 } 4808 }; 4809 BrotliBitReader.prototype.readBits = function(n_bits) { 4810 if (32 - this.bit_pos_ < n_bits) { 4811 this.fillBitWindow(); 4812 } 4813 var val = this.val_ >>> this.bit_pos_ & kBitMask[n_bits]; 4814 this.bit_pos_ += n_bits; 4815 return val; 4816 }; 4817 module2.exports = BrotliBitReader; 4818 }, 4819 {} 4820 ], 4821 2: [ 4822 function(require2, module2, exports2) { 4823 var CONTEXT_LSB6 = 0; 4824 var CONTEXT_MSB6 = 1; 4825 var CONTEXT_UTF8 = 2; 4826 var CONTEXT_SIGNED = 3; 4827 exports2.lookup = new Uint8Array([ 4828 /* CONTEXT_UTF8, last byte. */ 4829 /* ASCII range. */ 4830 0, 4831 0, 4832 0, 4833 0, 4834 0, 4835 0, 4836 0, 4837 0, 4838 0, 4839 4, 4840 4, 4841 0, 4842 0, 4843 4, 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 8, 4863 12, 4864 16, 4865 12, 4866 12, 4867 20, 4868 12, 4869 16, 4870 24, 4871 28, 4872 12, 4873 12, 4874 32, 4875 12, 4876 36, 4877 12, 4878 44, 4879 44, 4880 44, 4881 44, 4882 44, 4883 44, 4884 44, 4885 44, 4886 44, 4887 44, 4888 32, 4889 32, 4890 24, 4891 40, 4892 28, 4893 12, 4894 12, 4895 48, 4896 52, 4897 52, 4898 52, 4899 48, 4900 52, 4901 52, 4902 52, 4903 48, 4904 52, 4905 52, 4906 52, 4907 52, 4908 52, 4909 48, 4910 52, 4911 52, 4912 52, 4913 52, 4914 52, 4915 48, 4916 52, 4917 52, 4918 52, 4919 52, 4920 52, 4921 24, 4922 12, 4923 28, 4924 12, 4925 12, 4926 12, 4927 56, 4928 60, 4929 60, 4930 60, 4931 56, 4932 60, 4933 60, 4934 60, 4935 56, 4936 60, 4937 60, 4938 60, 4939 60, 4940 60, 4941 56, 4942 60, 4943 60, 4944 60, 4945 60, 4946 60, 4947 56, 4948 60, 4949 60, 4950 60, 4951 60, 4952 60, 4953 24, 4954 12, 4955 28, 4956 12, 4957 0, 4958 /* UTF8 continuation byte range. */ 4959 0, 4960 1, 4961 0, 4962 1, 4963 0, 4964 1, 4965 0, 4966 1, 4967 0, 4968 1, 4969 0, 4970 1, 4971 0, 4972 1, 4973 0, 4974 1, 4975 0, 4976 1, 4977 0, 4978 1, 4979 0, 4980 1, 4981 0, 4982 1, 4983 0, 4984 1, 4985 0, 4986 1, 4987 0, 4988 1, 4989 0, 4990 1, 4991 0, 4992 1, 4993 0, 4994 1, 4995 0, 4996 1, 4997 0, 4998 1, 4999 0, 5000 1, 5001 0, 5002 1, 5003 0, 5004 1, 5005 0, 5006 1, 5007 0, 5008 1, 5009 0, 5010 1, 5011 0, 5012 1, 5013 0, 5014 1, 5015 0, 5016 1, 5017 0, 5018 1, 5019 0, 5020 1, 5021 0, 5022 1, 5023 2, 5024 3, 5025 2, 5026 3, 5027 2, 5028 3, 5029 2, 5030 3, 5031 2, 5032 3, 5033 2, 5034 3, 5035 2, 5036 3, 5037 2, 5038 3, 5039 2, 5040 3, 5041 2, 5042 3, 5043 2, 5044 3, 5045 2, 5046 3, 5047 2, 5048 3, 5049 2, 5050 3, 5051 2, 5052 3, 5053 2, 5054 3, 5055 2, 5056 3, 5057 2, 5058 3, 5059 2, 5060 3, 5061 2, 5062 3, 5063 2, 5064 3, 5065 2, 5066 3, 5067 2, 5068 3, 5069 2, 5070 3, 5071 2, 5072 3, 5073 2, 5074 3, 5075 2, 5076 3, 5077 2, 5078 3, 5079 2, 5080 3, 5081 2, 5082 3, 5083 2, 5084 3, 5085 2, 5086 3, 5087 /* ASCII range. */ 5088 0, 5089 0, 5090 0, 5091 0, 5092 0, 5093 0, 5094 0, 5095 0, 5096 0, 5097 0, 5098 0, 5099 0, 5100 0, 5101 0, 5102 0, 5103 0, 5104 0, 5105 0, 5106 0, 5107 0, 5108 0, 5109 0, 5110 0, 5111 0, 5112 0, 5113 0, 5114 0, 5115 0, 5116 0, 5117 0, 5118 0, 5119 0, 5120 0, 5121 1, 5122 1, 5123 1, 5124 1, 5125 1, 5126 1, 5127 1, 5128 1, 5129 1, 5130 1, 5131 1, 5132 1, 5133 1, 5134 1, 5135 1, 5136 2, 5137 2, 5138 2, 5139 2, 5140 2, 5141 2, 5142 2, 5143 2, 5144 2, 5145 2, 5146 1, 5147 1, 5148 1, 5149 1, 5150 1, 5151 1, 5152 1, 5153 2, 5154 2, 5155 2, 5156 2, 5157 2, 5158 2, 5159 2, 5160 2, 5161 2, 5162 2, 5163 2, 5164 2, 5165 2, 5166 2, 5167 2, 5168 2, 5169 2, 5170 2, 5171 2, 5172 2, 5173 2, 5174 2, 5175 2, 5176 2, 5177 2, 5178 2, 5179 1, 5180 1, 5181 1, 5182 1, 5183 1, 5184 1, 5185 3, 5186 3, 5187 3, 5188 3, 5189 3, 5190 3, 5191 3, 5192 3, 5193 3, 5194 3, 5195 3, 5196 3, 5197 3, 5198 3, 5199 3, 5200 3, 5201 3, 5202 3, 5203 3, 5204 3, 5205 3, 5206 3, 5207 3, 5208 3, 5209 3, 5210 3, 5211 1, 5212 1, 5213 1, 5214 1, 5215 0, 5216 /* UTF8 continuation byte range. */ 5217 0, 5218 0, 5219 0, 5220 0, 5221 0, 5222 0, 5223 0, 5224 0, 5225 0, 5226 0, 5227 0, 5228 0, 5229 0, 5230 0, 5231 0, 5232 0, 5233 0, 5234 0, 5235 0, 5236 0, 5237 0, 5238 0, 5239 0, 5240 0, 5241 0, 5242 0, 5243 0, 5244 0, 5245 0, 5246 0, 5247 0, 5248 0, 5249 0, 5250 0, 5251 0, 5252 0, 5253 0, 5254 0, 5255 0, 5256 0, 5257 0, 5258 0, 5259 0, 5260 0, 5261 0, 5262 0, 5263 0, 5264 0, 5265 0, 5266 0, 5267 0, 5268 0, 5269 0, 5270 0, 5271 0, 5272 0, 5273 0, 5274 0, 5275 0, 5276 0, 5277 0, 5278 0, 5279 0, 5280 0, 5281 0, 5282 0, 5283 0, 5284 0, 5285 0, 5286 0, 5287 0, 5288 0, 5289 0, 5290 0, 5291 0, 5292 0, 5293 0, 5294 0, 5295 0, 5296 0, 5297 0, 5298 0, 5299 0, 5300 0, 5301 0, 5302 0, 5303 0, 5304 0, 5305 0, 5306 0, 5307 0, 5308 0, 5309 0, 5310 0, 5311 0, 5312 0, 5313 2, 5314 2, 5315 2, 5316 2, 5317 2, 5318 2, 5319 2, 5320 2, 5321 2, 5322 2, 5323 2, 5324 2, 5325 2, 5326 2, 5327 2, 5328 2, 5329 2, 5330 2, 5331 2, 5332 2, 5333 2, 5334 2, 5335 2, 5336 2, 5337 2, 5338 2, 5339 2, 5340 2, 5341 2, 5342 2, 5343 2, 5344 2, 5345 0, 5346 1, 5347 1, 5348 1, 5349 1, 5350 1, 5351 1, 5352 1, 5353 1, 5354 1, 5355 1, 5356 1, 5357 1, 5358 1, 5359 1, 5360 1, 5361 2, 5362 2, 5363 2, 5364 2, 5365 2, 5366 2, 5367 2, 5368 2, 5369 2, 5370 2, 5371 2, 5372 2, 5373 2, 5374 2, 5375 2, 5376 2, 5377 2, 5378 2, 5379 2, 5380 2, 5381 2, 5382 2, 5383 2, 5384 2, 5385 2, 5386 2, 5387 2, 5388 2, 5389 2, 5390 2, 5391 2, 5392 2, 5393 2, 5394 2, 5395 2, 5396 2, 5397 2, 5398 2, 5399 2, 5400 2, 5401 2, 5402 2, 5403 2, 5404 2, 5405 2, 5406 2, 5407 2, 5408 2, 5409 3, 5410 3, 5411 3, 5412 3, 5413 3, 5414 3, 5415 3, 5416 3, 5417 3, 5418 3, 5419 3, 5420 3, 5421 3, 5422 3, 5423 3, 5424 3, 5425 3, 5426 3, 5427 3, 5428 3, 5429 3, 5430 3, 5431 3, 5432 3, 5433 3, 5434 3, 5435 3, 5436 3, 5437 3, 5438 3, 5439 3, 5440 3, 5441 3, 5442 3, 5443 3, 5444 3, 5445 3, 5446 3, 5447 3, 5448 3, 5449 3, 5450 3, 5451 3, 5452 3, 5453 3, 5454 3, 5455 3, 5456 3, 5457 3, 5458 3, 5459 3, 5460 3, 5461 3, 5462 3, 5463 3, 5464 3, 5465 3, 5466 3, 5467 3, 5468 3, 5469 3, 5470 3, 5471 3, 5472 3, 5473 4, 5474 4, 5475 4, 5476 4, 5477 4, 5478 4, 5479 4, 5480 4, 5481 4, 5482 4, 5483 4, 5484 4, 5485 4, 5486 4, 5487 4, 5488 4, 5489 4, 5490 4, 5491 4, 5492 4, 5493 4, 5494 4, 5495 4, 5496 4, 5497 4, 5498 4, 5499 4, 5500 4, 5501 4, 5502 4, 5503 4, 5504 4, 5505 4, 5506 4, 5507 4, 5508 4, 5509 4, 5510 4, 5511 4, 5512 4, 5513 4, 5514 4, 5515 4, 5516 4, 5517 4, 5518 4, 5519 4, 5520 4, 5521 4, 5522 4, 5523 4, 5524 4, 5525 4, 5526 4, 5527 4, 5528 4, 5529 4, 5530 4, 5531 4, 5532 4, 5533 4, 5534 4, 5535 4, 5536 4, 5537 5, 5538 5, 5539 5, 5540 5, 5541 5, 5542 5, 5543 5, 5544 5, 5545 5, 5546 5, 5547 5, 5548 5, 5549 5, 5550 5, 5551 5, 5552 5, 5553 5, 5554 5, 5555 5, 5556 5, 5557 5, 5558 5, 5559 5, 5560 5, 5561 5, 5562 5, 5563 5, 5564 5, 5565 5, 5566 5, 5567 5, 5568 5, 5569 5, 5570 5, 5571 5, 5572 5, 5573 5, 5574 5, 5575 5, 5576 5, 5577 5, 5578 5, 5579 5, 5580 5, 5581 5, 5582 5, 5583 5, 5584 5, 5585 6, 5586 6, 5587 6, 5588 6, 5589 6, 5590 6, 5591 6, 5592 6, 5593 6, 5594 6, 5595 6, 5596 6, 5597 6, 5598 6, 5599 6, 5600 7, 5601 /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ 5602 0, 5603 8, 5604 8, 5605 8, 5606 8, 5607 8, 5608 8, 5609 8, 5610 8, 5611 8, 5612 8, 5613 8, 5614 8, 5615 8, 5616 8, 5617 8, 5618 16, 5619 16, 5620 16, 5621 16, 5622 16, 5623 16, 5624 16, 5625 16, 5626 16, 5627 16, 5628 16, 5629 16, 5630 16, 5631 16, 5632 16, 5633 16, 5634 16, 5635 16, 5636 16, 5637 16, 5638 16, 5639 16, 5640 16, 5641 16, 5642 16, 5643 16, 5644 16, 5645 16, 5646 16, 5647 16, 5648 16, 5649 16, 5650 16, 5651 16, 5652 16, 5653 16, 5654 16, 5655 16, 5656 16, 5657 16, 5658 16, 5659 16, 5660 16, 5661 16, 5662 16, 5663 16, 5664 16, 5665 16, 5666 24, 5667 24, 5668 24, 5669 24, 5670 24, 5671 24, 5672 24, 5673 24, 5674 24, 5675 24, 5676 24, 5677 24, 5678 24, 5679 24, 5680 24, 5681 24, 5682 24, 5683 24, 5684 24, 5685 24, 5686 24, 5687 24, 5688 24, 5689 24, 5690 24, 5691 24, 5692 24, 5693 24, 5694 24, 5695 24, 5696 24, 5697 24, 5698 24, 5699 24, 5700 24, 5701 24, 5702 24, 5703 24, 5704 24, 5705 24, 5706 24, 5707 24, 5708 24, 5709 24, 5710 24, 5711 24, 5712 24, 5713 24, 5714 24, 5715 24, 5716 24, 5717 24, 5718 24, 5719 24, 5720 24, 5721 24, 5722 24, 5723 24, 5724 24, 5725 24, 5726 24, 5727 24, 5728 24, 5729 24, 5730 32, 5731 32, 5732 32, 5733 32, 5734 32, 5735 32, 5736 32, 5737 32, 5738 32, 5739 32, 5740 32, 5741 32, 5742 32, 5743 32, 5744 32, 5745 32, 5746 32, 5747 32, 5748 32, 5749 32, 5750 32, 5751 32, 5752 32, 5753 32, 5754 32, 5755 32, 5756 32, 5757 32, 5758 32, 5759 32, 5760 32, 5761 32, 5762 32, 5763 32, 5764 32, 5765 32, 5766 32, 5767 32, 5768 32, 5769 32, 5770 32, 5771 32, 5772 32, 5773 32, 5774 32, 5775 32, 5776 32, 5777 32, 5778 32, 5779 32, 5780 32, 5781 32, 5782 32, 5783 32, 5784 32, 5785 32, 5786 32, 5787 32, 5788 32, 5789 32, 5790 32, 5791 32, 5792 32, 5793 32, 5794 40, 5795 40, 5796 40, 5797 40, 5798 40, 5799 40, 5800 40, 5801 40, 5802 40, 5803 40, 5804 40, 5805 40, 5806 40, 5807 40, 5808 40, 5809 40, 5810 40, 5811 40, 5812 40, 5813 40, 5814 40, 5815 40, 5816 40, 5817 40, 5818 40, 5819 40, 5820 40, 5821 40, 5822 40, 5823 40, 5824 40, 5825 40, 5826 40, 5827 40, 5828 40, 5829 40, 5830 40, 5831 40, 5832 40, 5833 40, 5834 40, 5835 40, 5836 40, 5837 40, 5838 40, 5839 40, 5840 40, 5841 40, 5842 48, 5843 48, 5844 48, 5845 48, 5846 48, 5847 48, 5848 48, 5849 48, 5850 48, 5851 48, 5852 48, 5853 48, 5854 48, 5855 48, 5856 48, 5857 56, 5858 /* CONTEXT_LSB6, last byte. */ 5859 0, 5860 1, 5861 2, 5862 3, 5863 4, 5864 5, 5865 6, 5866 7, 5867 8, 5868 9, 5869 10, 5870 11, 5871 12, 5872 13, 5873 14, 5874 15, 5875 16, 5876 17, 5877 18, 5878 19, 5879 20, 5880 21, 5881 22, 5882 23, 5883 24, 5884 25, 5885 26, 5886 27, 5887 28, 5888 29, 5889 30, 5890 31, 5891 32, 5892 33, 5893 34, 5894 35, 5895 36, 5896 37, 5897 38, 5898 39, 5899 40, 5900 41, 5901 42, 5902 43, 5903 44, 5904 45, 5905 46, 5906 47, 5907 48, 5908 49, 5909 50, 5910 51, 5911 52, 5912 53, 5913 54, 5914 55, 5915 56, 5916 57, 5917 58, 5918 59, 5919 60, 5920 61, 5921 62, 5922 63, 5923 0, 5924 1, 5925 2, 5926 3, 5927 4, 5928 5, 5929 6, 5930 7, 5931 8, 5932 9, 5933 10, 5934 11, 5935 12, 5936 13, 5937 14, 5938 15, 5939 16, 5940 17, 5941 18, 5942 19, 5943 20, 5944 21, 5945 22, 5946 23, 5947 24, 5948 25, 5949 26, 5950 27, 5951 28, 5952 29, 5953 30, 5954 31, 5955 32, 5956 33, 5957 34, 5958 35, 5959 36, 5960 37, 5961 38, 5962 39, 5963 40, 5964 41, 5965 42, 5966 43, 5967 44, 5968 45, 5969 46, 5970 47, 5971 48, 5972 49, 5973 50, 5974 51, 5975 52, 5976 53, 5977 54, 5978 55, 5979 56, 5980 57, 5981 58, 5982 59, 5983 60, 5984 61, 5985 62, 5986 63, 5987 0, 5988 1, 5989 2, 5990 3, 5991 4, 5992 5, 5993 6, 5994 7, 5995 8, 5996 9, 5997 10, 5998 11, 5999 12, 6000 13, 6001 14, 6002 15, 6003 16, 6004 17, 6005 18, 6006 19, 6007 20, 6008 21, 6009 22, 6010 23, 6011 24, 6012 25, 6013 26, 6014 27, 6015 28, 6016 29, 6017 30, 6018 31, 6019 32, 6020 33, 6021 34, 6022 35, 6023 36, 6024 37, 6025 38, 6026 39, 6027 40, 6028 41, 6029 42, 6030 43, 6031 44, 6032 45, 6033 46, 6034 47, 6035 48, 6036 49, 6037 50, 6038 51, 6039 52, 6040 53, 6041 54, 6042 55, 6043 56, 6044 57, 6045 58, 6046 59, 6047 60, 6048 61, 6049 62, 6050 63, 6051 0, 6052 1, 6053 2, 6054 3, 6055 4, 6056 5, 6057 6, 6058 7, 6059 8, 6060 9, 6061 10, 6062 11, 6063 12, 6064 13, 6065 14, 6066 15, 6067 16, 6068 17, 6069 18, 6070 19, 6071 20, 6072 21, 6073 22, 6074 23, 6075 24, 6076 25, 6077 26, 6078 27, 6079 28, 6080 29, 6081 30, 6082 31, 6083 32, 6084 33, 6085 34, 6086 35, 6087 36, 6088 37, 6089 38, 6090 39, 6091 40, 6092 41, 6093 42, 6094 43, 6095 44, 6096 45, 6097 46, 6098 47, 6099 48, 6100 49, 6101 50, 6102 51, 6103 52, 6104 53, 6105 54, 6106 55, 6107 56, 6108 57, 6109 58, 6110 59, 6111 60, 6112 61, 6113 62, 6114 63, 6115 /* CONTEXT_MSB6, last byte. */ 6116 0, 6117 0, 6118 0, 6119 0, 6120 1, 6121 1, 6122 1, 6123 1, 6124 2, 6125 2, 6126 2, 6127 2, 6128 3, 6129 3, 6130 3, 6131 3, 6132 4, 6133 4, 6134 4, 6135 4, 6136 5, 6137 5, 6138 5, 6139 5, 6140 6, 6141 6, 6142 6, 6143 6, 6144 7, 6145 7, 6146 7, 6147 7, 6148 8, 6149 8, 6150 8, 6151 8, 6152 9, 6153 9, 6154 9, 6155 9, 6156 10, 6157 10, 6158 10, 6159 10, 6160 11, 6161 11, 6162 11, 6163 11, 6164 12, 6165 12, 6166 12, 6167 12, 6168 13, 6169 13, 6170 13, 6171 13, 6172 14, 6173 14, 6174 14, 6175 14, 6176 15, 6177 15, 6178 15, 6179 15, 6180 16, 6181 16, 6182 16, 6183 16, 6184 17, 6185 17, 6186 17, 6187 17, 6188 18, 6189 18, 6190 18, 6191 18, 6192 19, 6193 19, 6194 19, 6195 19, 6196 20, 6197 20, 6198 20, 6199 20, 6200 21, 6201 21, 6202 21, 6203 21, 6204 22, 6205 22, 6206 22, 6207 22, 6208 23, 6209 23, 6210 23, 6211 23, 6212 24, 6213 24, 6214 24, 6215 24, 6216 25, 6217 25, 6218 25, 6219 25, 6220 26, 6221 26, 6222 26, 6223 26, 6224 27, 6225 27, 6226 27, 6227 27, 6228 28, 6229 28, 6230 28, 6231 28, 6232 29, 6233 29, 6234 29, 6235 29, 6236 30, 6237 30, 6238 30, 6239 30, 6240 31, 6241 31, 6242 31, 6243 31, 6244 32, 6245 32, 6246 32, 6247 32, 6248 33, 6249 33, 6250 33, 6251 33, 6252 34, 6253 34, 6254 34, 6255 34, 6256 35, 6257 35, 6258 35, 6259 35, 6260 36, 6261 36, 6262 36, 6263 36, 6264 37, 6265 37, 6266 37, 6267 37, 6268 38, 6269 38, 6270 38, 6271 38, 6272 39, 6273 39, 6274 39, 6275 39, 6276 40, 6277 40, 6278 40, 6279 40, 6280 41, 6281 41, 6282 41, 6283 41, 6284 42, 6285 42, 6286 42, 6287 42, 6288 43, 6289 43, 6290 43, 6291 43, 6292 44, 6293 44, 6294 44, 6295 44, 6296 45, 6297 45, 6298 45, 6299 45, 6300 46, 6301 46, 6302 46, 6303 46, 6304 47, 6305 47, 6306 47, 6307 47, 6308 48, 6309 48, 6310 48, 6311 48, 6312 49, 6313 49, 6314 49, 6315 49, 6316 50, 6317 50, 6318 50, 6319 50, 6320 51, 6321 51, 6322 51, 6323 51, 6324 52, 6325 52, 6326 52, 6327 52, 6328 53, 6329 53, 6330 53, 6331 53, 6332 54, 6333 54, 6334 54, 6335 54, 6336 55, 6337 55, 6338 55, 6339 55, 6340 56, 6341 56, 6342 56, 6343 56, 6344 57, 6345 57, 6346 57, 6347 57, 6348 58, 6349 58, 6350 58, 6351 58, 6352 59, 6353 59, 6354 59, 6355 59, 6356 60, 6357 60, 6358 60, 6359 60, 6360 61, 6361 61, 6362 61, 6363 61, 6364 62, 6365 62, 6366 62, 6367 62, 6368 63, 6369 63, 6370 63, 6371 63, 6372 /* CONTEXT_{M,L}SB6, second last byte, */ 6373 0, 6374 0, 6375 0, 6376 0, 6377 0, 6378 0, 6379 0, 6380 0, 6381 0, 6382 0, 6383 0, 6384 0, 6385 0, 6386 0, 6387 0, 6388 0, 6389 0, 6390 0, 6391 0, 6392 0, 6393 0, 6394 0, 6395 0, 6396 0, 6397 0, 6398 0, 6399 0, 6400 0, 6401 0, 6402 0, 6403 0, 6404 0, 6405 0, 6406 0, 6407 0, 6408 0, 6409 0, 6410 0, 6411 0, 6412 0, 6413 0, 6414 0, 6415 0, 6416 0, 6417 0, 6418 0, 6419 0, 6420 0, 6421 0, 6422 0, 6423 0, 6424 0, 6425 0, 6426 0, 6427 0, 6428 0, 6429 0, 6430 0, 6431 0, 6432 0, 6433 0, 6434 0, 6435 0, 6436 0, 6437 0, 6438 0, 6439 0, 6440 0, 6441 0, 6442 0, 6443 0, 6444 0, 6445 0, 6446 0, 6447 0, 6448 0, 6449 0, 6450 0, 6451 0, 6452 0, 6453 0, 6454 0, 6455 0, 6456 0, 6457 0, 6458 0, 6459 0, 6460 0, 6461 0, 6462 0, 6463 0, 6464 0, 6465 0, 6466 0, 6467 0, 6468 0, 6469 0, 6470 0, 6471 0, 6472 0, 6473 0, 6474 0, 6475 0, 6476 0, 6477 0, 6478 0, 6479 0, 6480 0, 6481 0, 6482 0, 6483 0, 6484 0, 6485 0, 6486 0, 6487 0, 6488 0, 6489 0, 6490 0, 6491 0, 6492 0, 6493 0, 6494 0, 6495 0, 6496 0, 6497 0, 6498 0, 6499 0, 6500 0, 6501 0, 6502 0, 6503 0, 6504 0, 6505 0, 6506 0, 6507 0, 6508 0, 6509 0, 6510 0, 6511 0, 6512 0, 6513 0, 6514 0, 6515 0, 6516 0, 6517 0, 6518 0, 6519 0, 6520 0, 6521 0, 6522 0, 6523 0, 6524 0, 6525 0, 6526 0, 6527 0, 6528 0, 6529 0, 6530 0, 6531 0, 6532 0, 6533 0, 6534 0, 6535 0, 6536 0, 6537 0, 6538 0, 6539 0, 6540 0, 6541 0, 6542 0, 6543 0, 6544 0, 6545 0, 6546 0, 6547 0, 6548 0, 6549 0, 6550 0, 6551 0, 6552 0, 6553 0, 6554 0, 6555 0, 6556 0, 6557 0, 6558 0, 6559 0, 6560 0, 6561 0, 6562 0, 6563 0, 6564 0, 6565 0, 6566 0, 6567 0, 6568 0, 6569 0, 6570 0, 6571 0, 6572 0, 6573 0, 6574 0, 6575 0, 6576 0, 6577 0, 6578 0, 6579 0, 6580 0, 6581 0, 6582 0, 6583 0, 6584 0, 6585 0, 6586 0, 6587 0, 6588 0, 6589 0, 6590 0, 6591 0, 6592 0, 6593 0, 6594 0, 6595 0, 6596 0, 6597 0, 6598 0, 6599 0, 6600 0, 6601 0, 6602 0, 6603 0, 6604 0, 6605 0, 6606 0, 6607 0, 6608 0, 6609 0, 6610 0, 6611 0, 6612 0, 6613 0, 6614 0, 6615 0, 6616 0, 6617 0, 6618 0, 6619 0, 6620 0, 6621 0, 6622 0, 6623 0, 6624 0, 6625 0, 6626 0, 6627 0, 6628 0 6629 ]); 6630 exports2.lookupOffsets = new Uint16Array([ 6631 /* CONTEXT_LSB6 */ 6632 1024, 6633 1536, 6634 1280, 6635 1536, 6636 0, 6637 256, 6638 768, 6639 512 6640 ]); 6641 }, 6642 {} 6643 ], 6644 3: [ 6645 function(require2, module2, exports2) { 6646 var BrotliInput = require2("./streams").BrotliInput; 6647 var BrotliOutput = require2("./streams").BrotliOutput; 6648 var BrotliBitReader = require2("./bit_reader"); 6649 var BrotliDictionary = require2("./dictionary"); 6650 var HuffmanCode = require2("./huffman").HuffmanCode; 6651 var BrotliBuildHuffmanTable = require2("./huffman").BrotliBuildHuffmanTable; 6652 var Context = require2("./context"); 6653 var Prefix = require2("./prefix"); 6654 var Transform = require2("./transform"); 6655 var kDefaultCodeLength = 8; 6656 var kCodeLengthRepeatCode = 16; 6657 var kNumLiteralCodes = 256; 6658 var kNumInsertAndCopyCodes = 704; 6659 var kNumBlockLengthCodes = 26; 6660 var kLiteralContextBits = 6; 6661 var kDistanceContextBits = 2; 6662 var HUFFMAN_TABLE_BITS = 8; 6663 var HUFFMAN_TABLE_MASK = 255; 6664 var HUFFMAN_MAX_TABLE_SIZE = 1080; 6665 var CODE_LENGTH_CODES = 18; 6666 var kCodeLengthCodeOrder = new Uint8Array([ 6667 1, 6668 2, 6669 3, 6670 4, 6671 0, 6672 5, 6673 17, 6674 6, 6675 16, 6676 7, 6677 8, 6678 9, 6679 10, 6680 11, 6681 12, 6682 13, 6683 14, 6684 15 6685 ]); 6686 var NUM_DISTANCE_SHORT_CODES = 16; 6687 var kDistanceShortCodeIndexOffset = new Uint8Array([ 6688 3, 6689 2, 6690 1, 6691 0, 6692 3, 6693 3, 6694 3, 6695 3, 6696 3, 6697 3, 6698 2, 6699 2, 6700 2, 6701 2, 6702 2, 6703 2 6704 ]); 6705 var kDistanceShortCodeValueOffset = new Int8Array([ 6706 0, 6707 0, 6708 0, 6709 0, 6710 -1, 6711 1, 6712 -2, 6713 2, 6714 -3, 6715 3, 6716 -1, 6717 1, 6718 -2, 6719 2, 6720 -3, 6721 3 6722 ]); 6723 var kMaxHuffmanTableSize = new Uint16Array([ 6724 256, 6725 402, 6726 436, 6727 468, 6728 500, 6729 534, 6730 566, 6731 598, 6732 630, 6733 662, 6734 694, 6735 726, 6736 758, 6737 790, 6738 822, 6739 854, 6740 886, 6741 920, 6742 952, 6743 984, 6744 1016, 6745 1048, 6746 1080 6747 ]); 6748 function DecodeWindowBits(br) { 6749 var n2; 6750 if (br.readBits(1) === 0) { 6751 return 16; 6752 } 6753 n2 = br.readBits(3); 6754 if (n2 > 0) { 6755 return 17 + n2; 6756 } 6757 n2 = br.readBits(3); 6758 if (n2 > 0) { 6759 return 8 + n2; 6760 } 6761 return 17; 6762 } 6763 function DecodeVarLenUint8(br) { 6764 if (br.readBits(1)) { 6765 var nbits = br.readBits(3); 6766 if (nbits === 0) { 6767 return 1; 6768 } else { 6769 return br.readBits(nbits) + (1 << nbits); 6770 } 6771 } 6772 return 0; 6773 } 6774 function MetaBlockLength() { 6775 this.meta_block_length = 0; 6776 this.input_end = 0; 6777 this.is_uncompressed = 0; 6778 this.is_metadata = false; 6779 } 6780 function DecodeMetaBlockLength(br) { 6781 var out = new MetaBlockLength(); 6782 var size_nibbles; 6783 var size_bytes; 6784 var i2; 6785 out.input_end = br.readBits(1); 6786 if (out.input_end && br.readBits(1)) { 6787 return out; 6788 } 6789 size_nibbles = br.readBits(2) + 4; 6790 if (size_nibbles === 7) { 6791 out.is_metadata = true; 6792 if (br.readBits(1) !== 0) 6793 throw new Error("Invalid reserved bit"); 6794 size_bytes = br.readBits(2); 6795 if (size_bytes === 0) return out; 6796 for (i2 = 0; i2 < size_bytes; i2++) { 6797 var next_byte = br.readBits(8); 6798 if (i2 + 1 === size_bytes && size_bytes > 1 && next_byte === 0) 6799 throw new Error("Invalid size byte"); 6800 out.meta_block_length |= next_byte << i2 * 8; 6801 } 6802 } else { 6803 for (i2 = 0; i2 < size_nibbles; ++i2) { 6804 var next_nibble = br.readBits(4); 6805 if (i2 + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0) 6806 throw new Error("Invalid size nibble"); 6807 out.meta_block_length |= next_nibble << i2 * 4; 6808 } 6809 } 6810 ++out.meta_block_length; 6811 if (!out.input_end && !out.is_metadata) { 6812 out.is_uncompressed = br.readBits(1); 6813 } 6814 return out; 6815 } 6816 function ReadSymbol(table, index, br) { 6817 var start_index = index; 6818 var nbits; 6819 br.fillBitWindow(); 6820 index += br.val_ >>> br.bit_pos_ & HUFFMAN_TABLE_MASK; 6821 nbits = table[index].bits - HUFFMAN_TABLE_BITS; 6822 if (nbits > 0) { 6823 br.bit_pos_ += HUFFMAN_TABLE_BITS; 6824 index += table[index].value; 6825 index += br.val_ >>> br.bit_pos_ & (1 << nbits) - 1; 6826 } 6827 br.bit_pos_ += table[index].bits; 6828 return table[index].value; 6829 } 6830 function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) { 6831 var symbol = 0; 6832 var prev_code_len = kDefaultCodeLength; 6833 var repeat = 0; 6834 var repeat_code_len = 0; 6835 var space = 32768; 6836 var table = []; 6837 for (var i2 = 0; i2 < 32; i2++) 6838 table.push(new HuffmanCode(0, 0)); 6839 BrotliBuildHuffmanTable( 6840 table, 6841 0, 6842 5, 6843 code_length_code_lengths, 6844 CODE_LENGTH_CODES 6845 ); 6846 while (symbol < num_symbols && space > 0) { 6847 var p3 = 0; 6848 var code_len; 6849 br.readMoreInput(); 6850 br.fillBitWindow(); 6851 p3 += br.val_ >>> br.bit_pos_ & 31; 6852 br.bit_pos_ += table[p3].bits; 6853 code_len = table[p3].value & 255; 6854 if (code_len < kCodeLengthRepeatCode) { 6855 repeat = 0; 6856 code_lengths[symbol++] = code_len; 6857 if (code_len !== 0) { 6858 prev_code_len = code_len; 6859 space -= 32768 >> code_len; 6860 } 6861 } else { 6862 var extra_bits = code_len - 14; 6863 var old_repeat; 6864 var repeat_delta; 6865 var new_len = 0; 6866 if (code_len === kCodeLengthRepeatCode) { 6867 new_len = prev_code_len; 6868 } 6869 if (repeat_code_len !== new_len) { 6870 repeat = 0; 6871 repeat_code_len = new_len; 6872 } 6873 old_repeat = repeat; 6874 if (repeat > 0) { 6875 repeat -= 2; 6876 repeat <<= extra_bits; 6877 } 6878 repeat += br.readBits(extra_bits) + 3; 6879 repeat_delta = repeat - old_repeat; 6880 if (symbol + repeat_delta > num_symbols) { 6881 throw new Error( 6882 "[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols" 6883 ); 6884 } 6885 for (var x2 = 0; x2 < repeat_delta; x2++) 6886 code_lengths[symbol + x2] = repeat_code_len; 6887 symbol += repeat_delta; 6888 if (repeat_code_len !== 0) { 6889 space -= repeat_delta << 15 - repeat_code_len; 6890 } 6891 } 6892 } 6893 if (space !== 0) { 6894 throw new Error( 6895 "[ReadHuffmanCodeLengths] space = " + space 6896 ); 6897 } 6898 for (; symbol < num_symbols; symbol++) 6899 code_lengths[symbol] = 0; 6900 } 6901 function ReadHuffmanCode(alphabet_size, tables, table, br) { 6902 var table_size = 0; 6903 var simple_code_or_skip; 6904 var code_lengths = new Uint8Array(alphabet_size); 6905 br.readMoreInput(); 6906 simple_code_or_skip = br.readBits(2); 6907 if (simple_code_or_skip === 1) { 6908 var i2; 6909 var max_bits_counter = alphabet_size - 1; 6910 var max_bits = 0; 6911 var symbols = new Int32Array(4); 6912 var num_symbols = br.readBits(2) + 1; 6913 while (max_bits_counter) { 6914 max_bits_counter >>= 1; 6915 ++max_bits; 6916 } 6917 for (i2 = 0; i2 < num_symbols; ++i2) { 6918 symbols[i2] = br.readBits(max_bits) % alphabet_size; 6919 code_lengths[symbols[i2]] = 2; 6920 } 6921 code_lengths[symbols[0]] = 1; 6922 switch (num_symbols) { 6923 case 1: 6924 break; 6925 case 3: 6926 if (symbols[0] === symbols[1] || symbols[0] === symbols[2] || symbols[1] === symbols[2]) { 6927 throw new Error( 6928 "[ReadHuffmanCode] invalid symbols" 6929 ); 6930 } 6931 break; 6932 case 2: 6933 if (symbols[0] === symbols[1]) { 6934 throw new Error( 6935 "[ReadHuffmanCode] invalid symbols" 6936 ); 6937 } 6938 code_lengths[symbols[1]] = 1; 6939 break; 6940 case 4: 6941 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]) { 6942 throw new Error( 6943 "[ReadHuffmanCode] invalid symbols" 6944 ); 6945 } 6946 if (br.readBits(1)) { 6947 code_lengths[symbols[2]] = 3; 6948 code_lengths[symbols[3]] = 3; 6949 } else { 6950 code_lengths[symbols[0]] = 2; 6951 } 6952 break; 6953 } 6954 } else { 6955 var i2; 6956 var code_length_code_lengths = new Uint8Array( 6957 CODE_LENGTH_CODES 6958 ); 6959 var space = 32; 6960 var num_codes = 0; 6961 var huff = [ 6962 new HuffmanCode(2, 0), 6963 new HuffmanCode(2, 4), 6964 new HuffmanCode(2, 3), 6965 new HuffmanCode(3, 2), 6966 new HuffmanCode(2, 0), 6967 new HuffmanCode(2, 4), 6968 new HuffmanCode(2, 3), 6969 new HuffmanCode(4, 1), 6970 new HuffmanCode(2, 0), 6971 new HuffmanCode(2, 4), 6972 new HuffmanCode(2, 3), 6973 new HuffmanCode(3, 2), 6974 new HuffmanCode(2, 0), 6975 new HuffmanCode(2, 4), 6976 new HuffmanCode(2, 3), 6977 new HuffmanCode(4, 5) 6978 ]; 6979 for (i2 = simple_code_or_skip; i2 < CODE_LENGTH_CODES && space > 0; ++i2) { 6980 var code_len_idx = kCodeLengthCodeOrder[i2]; 6981 var p3 = 0; 6982 var v2; 6983 br.fillBitWindow(); 6984 p3 += br.val_ >>> br.bit_pos_ & 15; 6985 br.bit_pos_ += huff[p3].bits; 6986 v2 = huff[p3].value; 6987 code_length_code_lengths[code_len_idx] = v2; 6988 if (v2 !== 0) { 6989 space -= 32 >> v2; 6990 ++num_codes; 6991 } 6992 } 6993 if (!(num_codes === 1 || space === 0)) 6994 throw new Error( 6995 "[ReadHuffmanCode] invalid num_codes or space" 6996 ); 6997 ReadHuffmanCodeLengths( 6998 code_length_code_lengths, 6999 alphabet_size, 7000 code_lengths, 7001 br 7002 ); 7003 } 7004 table_size = BrotliBuildHuffmanTable( 7005 tables, 7006 table, 7007 HUFFMAN_TABLE_BITS, 7008 code_lengths, 7009 alphabet_size 7010 ); 7011 if (table_size === 0) { 7012 throw new Error( 7013 "[ReadHuffmanCode] BuildHuffmanTable failed: " 7014 ); 7015 } 7016 return table_size; 7017 } 7018 function ReadBlockLength(table, index, br) { 7019 var code; 7020 var nbits; 7021 code = ReadSymbol(table, index, br); 7022 nbits = Prefix.kBlockLengthPrefixCode[code].nbits; 7023 return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits); 7024 } 7025 function TranslateShortCodes(code, ringbuffer, index) { 7026 var val; 7027 if (code < NUM_DISTANCE_SHORT_CODES) { 7028 index += kDistanceShortCodeIndexOffset[code]; 7029 index &= 3; 7030 val = ringbuffer[index] + kDistanceShortCodeValueOffset[code]; 7031 } else { 7032 val = code - NUM_DISTANCE_SHORT_CODES + 1; 7033 } 7034 return val; 7035 } 7036 function MoveToFront(v2, index) { 7037 var value = v2[index]; 7038 var i2 = index; 7039 for (; i2; --i2) v2[i2] = v2[i2 - 1]; 7040 v2[0] = value; 7041 } 7042 function InverseMoveToFrontTransform(v2, v_len) { 7043 var mtf = new Uint8Array(256); 7044 var i2; 7045 for (i2 = 0; i2 < 256; ++i2) { 7046 mtf[i2] = i2; 7047 } 7048 for (i2 = 0; i2 < v_len; ++i2) { 7049 var index = v2[i2]; 7050 v2[i2] = mtf[index]; 7051 if (index) MoveToFront(mtf, index); 7052 } 7053 } 7054 function HuffmanTreeGroup(alphabet_size, num_htrees) { 7055 this.alphabet_size = alphabet_size; 7056 this.num_htrees = num_htrees; 7057 this.codes = new Array( 7058 num_htrees + num_htrees * kMaxHuffmanTableSize[alphabet_size + 31 >>> 5] 7059 ); 7060 this.htrees = new Uint32Array(num_htrees); 7061 } 7062 HuffmanTreeGroup.prototype.decode = function(br) { 7063 var i2; 7064 var table_size; 7065 var next = 0; 7066 for (i2 = 0; i2 < this.num_htrees; ++i2) { 7067 this.htrees[i2] = next; 7068 table_size = ReadHuffmanCode( 7069 this.alphabet_size, 7070 this.codes, 7071 next, 7072 br 7073 ); 7074 next += table_size; 7075 } 7076 }; 7077 function DecodeContextMap(context_map_size, br) { 7078 var out = { num_htrees: null, context_map: null }; 7079 var use_rle_for_zeros; 7080 var max_run_length_prefix = 0; 7081 var table; 7082 var i2; 7083 br.readMoreInput(); 7084 var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1; 7085 var context_map = out.context_map = new Uint8Array( 7086 context_map_size 7087 ); 7088 if (num_htrees <= 1) { 7089 return out; 7090 } 7091 use_rle_for_zeros = br.readBits(1); 7092 if (use_rle_for_zeros) { 7093 max_run_length_prefix = br.readBits(4) + 1; 7094 } 7095 table = []; 7096 for (i2 = 0; i2 < HUFFMAN_MAX_TABLE_SIZE; i2++) { 7097 table[i2] = new HuffmanCode(0, 0); 7098 } 7099 ReadHuffmanCode( 7100 num_htrees + max_run_length_prefix, 7101 table, 7102 0, 7103 br 7104 ); 7105 for (i2 = 0; i2 < context_map_size; ) { 7106 var code; 7107 br.readMoreInput(); 7108 code = ReadSymbol(table, 0, br); 7109 if (code === 0) { 7110 context_map[i2] = 0; 7111 ++i2; 7112 } else if (code <= max_run_length_prefix) { 7113 var reps = 1 + (1 << code) + br.readBits(code); 7114 while (--reps) { 7115 if (i2 >= context_map_size) { 7116 throw new Error( 7117 "[DecodeContextMap] i >= context_map_size" 7118 ); 7119 } 7120 context_map[i2] = 0; 7121 ++i2; 7122 } 7123 } else { 7124 context_map[i2] = code - max_run_length_prefix; 7125 ++i2; 7126 } 7127 } 7128 if (br.readBits(1)) { 7129 InverseMoveToFrontTransform( 7130 context_map, 7131 context_map_size 7132 ); 7133 } 7134 return out; 7135 } 7136 function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) { 7137 var ringbuffer = tree_type * 2; 7138 var index = tree_type; 7139 var type_code = ReadSymbol( 7140 trees, 7141 tree_type * HUFFMAN_MAX_TABLE_SIZE, 7142 br 7143 ); 7144 var block_type; 7145 if (type_code === 0) { 7146 block_type = ringbuffers[ringbuffer + (indexes[index] & 1)]; 7147 } else if (type_code === 1) { 7148 block_type = ringbuffers[ringbuffer + (indexes[index] - 1 & 1)] + 1; 7149 } else { 7150 block_type = type_code - 2; 7151 } 7152 if (block_type >= max_block_type) { 7153 block_type -= max_block_type; 7154 } 7155 block_types[tree_type] = block_type; 7156 ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type; 7157 ++indexes[index]; 7158 } 7159 function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) { 7160 var rb_size = ringbuffer_mask + 1; 7161 var rb_pos = pos & ringbuffer_mask; 7162 var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK; 7163 var nbytes; 7164 if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) { 7165 while (len-- > 0) { 7166 br.readMoreInput(); 7167 ringbuffer[rb_pos++] = br.readBits(8); 7168 if (rb_pos === rb_size) { 7169 output.write(ringbuffer, rb_size); 7170 rb_pos = 0; 7171 } 7172 } 7173 return; 7174 } 7175 if (br.bit_end_pos_ < 32) { 7176 throw new Error( 7177 "[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32" 7178 ); 7179 } 7180 while (br.bit_pos_ < 32) { 7181 ringbuffer[rb_pos] = br.val_ >>> br.bit_pos_; 7182 br.bit_pos_ += 8; 7183 ++rb_pos; 7184 --len; 7185 } 7186 nbytes = br.bit_end_pos_ - br.bit_pos_ >> 3; 7187 if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) { 7188 var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos; 7189 for (var x2 = 0; x2 < tail; x2++) 7190 ringbuffer[rb_pos + x2] = br.buf_[br_pos + x2]; 7191 nbytes -= tail; 7192 rb_pos += tail; 7193 len -= tail; 7194 br_pos = 0; 7195 } 7196 for (var x2 = 0; x2 < nbytes; x2++) 7197 ringbuffer[rb_pos + x2] = br.buf_[br_pos + x2]; 7198 rb_pos += nbytes; 7199 len -= nbytes; 7200 if (rb_pos >= rb_size) { 7201 output.write(ringbuffer, rb_size); 7202 rb_pos -= rb_size; 7203 for (var x2 = 0; x2 < rb_pos; x2++) 7204 ringbuffer[x2] = ringbuffer[rb_size + x2]; 7205 } 7206 while (rb_pos + len >= rb_size) { 7207 nbytes = rb_size - rb_pos; 7208 if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) { 7209 throw new Error( 7210 "[CopyUncompressedBlockToOutput] not enough bytes" 7211 ); 7212 } 7213 output.write(ringbuffer, rb_size); 7214 len -= nbytes; 7215 rb_pos = 0; 7216 } 7217 if (br.input_.read(ringbuffer, rb_pos, len) < len) { 7218 throw new Error( 7219 "[CopyUncompressedBlockToOutput] not enough bytes" 7220 ); 7221 } 7222 br.reset(); 7223 } 7224 function JumpToByteBoundary(br) { 7225 var new_bit_pos = br.bit_pos_ + 7 & ~7; 7226 var pad_bits = br.readBits(new_bit_pos - br.bit_pos_); 7227 return pad_bits == 0; 7228 } 7229 function BrotliDecompressedSize(buffer) { 7230 var input = new BrotliInput(buffer); 7231 var br = new BrotliBitReader(input); 7232 DecodeWindowBits(br); 7233 var out = DecodeMetaBlockLength(br); 7234 return out.meta_block_length; 7235 } 7236 exports2.BrotliDecompressedSize = BrotliDecompressedSize; 7237 function BrotliDecompressBuffer(buffer, output_size) { 7238 var input = new BrotliInput(buffer); 7239 if (output_size == null) { 7240 output_size = BrotliDecompressedSize(buffer); 7241 } 7242 var output_buffer = new Uint8Array(output_size); 7243 var output = new BrotliOutput(output_buffer); 7244 BrotliDecompress(input, output); 7245 if (output.pos < output.buffer.length) { 7246 output.buffer = output.buffer.subarray( 7247 0, 7248 output.pos 7249 ); 7250 } 7251 return output.buffer; 7252 } 7253 exports2.BrotliDecompressBuffer = BrotliDecompressBuffer; 7254 function BrotliDecompress(input, output) { 7255 var i2; 7256 var pos = 0; 7257 var input_end = 0; 7258 var window_bits = 0; 7259 var max_backward_distance; 7260 var max_distance = 0; 7261 var ringbuffer_size; 7262 var ringbuffer_mask; 7263 var ringbuffer; 7264 var ringbuffer_end; 7265 var dist_rb = [16, 15, 11, 4]; 7266 var dist_rb_idx = 0; 7267 var prev_byte1 = 0; 7268 var prev_byte2 = 0; 7269 var hgroup = [ 7270 new HuffmanTreeGroup(0, 0), 7271 new HuffmanTreeGroup(0, 0), 7272 new HuffmanTreeGroup(0, 0) 7273 ]; 7274 var block_type_trees; 7275 var block_len_trees; 7276 var br; 7277 var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE; 7278 br = new BrotliBitReader(input); 7279 window_bits = DecodeWindowBits(br); 7280 max_backward_distance = (1 << window_bits) - 16; 7281 ringbuffer_size = 1 << window_bits; 7282 ringbuffer_mask = ringbuffer_size - 1; 7283 ringbuffer = new Uint8Array( 7284 ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength 7285 ); 7286 ringbuffer_end = ringbuffer_size; 7287 block_type_trees = []; 7288 block_len_trees = []; 7289 for (var x2 = 0; x2 < 3 * HUFFMAN_MAX_TABLE_SIZE; x2++) { 7290 block_type_trees[x2] = new HuffmanCode(0, 0); 7291 block_len_trees[x2] = new HuffmanCode(0, 0); 7292 } 7293 while (!input_end) { 7294 var meta_block_remaining_len = 0; 7295 var is_uncompressed; 7296 var block_length = [1 << 28, 1 << 28, 1 << 28]; 7297 var block_type = [0]; 7298 var num_block_types = [1, 1, 1]; 7299 var block_type_rb = [0, 1, 0, 1, 0, 1]; 7300 var block_type_rb_index = [0]; 7301 var distance_postfix_bits; 7302 var num_direct_distance_codes; 7303 var distance_postfix_mask; 7304 var num_distance_codes; 7305 var context_map = null; 7306 var context_modes = null; 7307 var num_literal_htrees; 7308 var dist_context_map = null; 7309 var num_dist_htrees; 7310 var context_offset = 0; 7311 var context_map_slice = null; 7312 var literal_htree_index = 0; 7313 var dist_context_offset = 0; 7314 var dist_context_map_slice = null; 7315 var dist_htree_index = 0; 7316 var context_lookup_offset1 = 0; 7317 var context_lookup_offset2 = 0; 7318 var context_mode; 7319 var htree_command; 7320 for (i2 = 0; i2 < 3; ++i2) { 7321 hgroup[i2].codes = null; 7322 hgroup[i2].htrees = null; 7323 } 7324 br.readMoreInput(); 7325 var _out = DecodeMetaBlockLength(br); 7326 meta_block_remaining_len = _out.meta_block_length; 7327 if (pos + meta_block_remaining_len > output.buffer.length) { 7328 var tmp = new Uint8Array( 7329 pos + meta_block_remaining_len 7330 ); 7331 tmp.set(output.buffer); 7332 output.buffer = tmp; 7333 } 7334 input_end = _out.input_end; 7335 is_uncompressed = _out.is_uncompressed; 7336 if (_out.is_metadata) { 7337 JumpToByteBoundary(br); 7338 for (; meta_block_remaining_len > 0; --meta_block_remaining_len) { 7339 br.readMoreInput(); 7340 br.readBits(8); 7341 } 7342 continue; 7343 } 7344 if (meta_block_remaining_len === 0) { 7345 continue; 7346 } 7347 if (is_uncompressed) { 7348 br.bit_pos_ = br.bit_pos_ + 7 & ~7; 7349 CopyUncompressedBlockToOutput( 7350 output, 7351 meta_block_remaining_len, 7352 pos, 7353 ringbuffer, 7354 ringbuffer_mask, 7355 br 7356 ); 7357 pos += meta_block_remaining_len; 7358 continue; 7359 } 7360 for (i2 = 0; i2 < 3; ++i2) { 7361 num_block_types[i2] = DecodeVarLenUint8(br) + 1; 7362 if (num_block_types[i2] >= 2) { 7363 ReadHuffmanCode( 7364 num_block_types[i2] + 2, 7365 block_type_trees, 7366 i2 * HUFFMAN_MAX_TABLE_SIZE, 7367 br 7368 ); 7369 ReadHuffmanCode( 7370 kNumBlockLengthCodes, 7371 block_len_trees, 7372 i2 * HUFFMAN_MAX_TABLE_SIZE, 7373 br 7374 ); 7375 block_length[i2] = ReadBlockLength( 7376 block_len_trees, 7377 i2 * HUFFMAN_MAX_TABLE_SIZE, 7378 br 7379 ); 7380 block_type_rb_index[i2] = 1; 7381 } 7382 } 7383 br.readMoreInput(); 7384 distance_postfix_bits = br.readBits(2); 7385 num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits); 7386 distance_postfix_mask = (1 << distance_postfix_bits) - 1; 7387 num_distance_codes = num_direct_distance_codes + (48 << distance_postfix_bits); 7388 context_modes = new Uint8Array( 7389 num_block_types[0] 7390 ); 7391 for (i2 = 0; i2 < num_block_types[0]; ++i2) { 7392 br.readMoreInput(); 7393 context_modes[i2] = br.readBits(2) << 1; 7394 } 7395 var _o1 = DecodeContextMap( 7396 num_block_types[0] << kLiteralContextBits, 7397 br 7398 ); 7399 num_literal_htrees = _o1.num_htrees; 7400 context_map = _o1.context_map; 7401 var _o2 = DecodeContextMap( 7402 num_block_types[2] << kDistanceContextBits, 7403 br 7404 ); 7405 num_dist_htrees = _o2.num_htrees; 7406 dist_context_map = _o2.context_map; 7407 hgroup[0] = new HuffmanTreeGroup( 7408 kNumLiteralCodes, 7409 num_literal_htrees 7410 ); 7411 hgroup[1] = new HuffmanTreeGroup( 7412 kNumInsertAndCopyCodes, 7413 num_block_types[1] 7414 ); 7415 hgroup[2] = new HuffmanTreeGroup( 7416 num_distance_codes, 7417 num_dist_htrees 7418 ); 7419 for (i2 = 0; i2 < 3; ++i2) { 7420 hgroup[i2].decode(br); 7421 } 7422 context_map_slice = 0; 7423 dist_context_map_slice = 0; 7424 context_mode = context_modes[block_type[0]]; 7425 context_lookup_offset1 = Context.lookupOffsets[context_mode]; 7426 context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; 7427 htree_command = hgroup[1].htrees[0]; 7428 while (meta_block_remaining_len > 0) { 7429 var cmd_code; 7430 var range_idx; 7431 var insert_code; 7432 var copy_code; 7433 var insert_length; 7434 var copy_length; 7435 var distance_code; 7436 var distance; 7437 var context; 7438 var j2; 7439 var copy_dst; 7440 br.readMoreInput(); 7441 if (block_length[1] === 0) { 7442 DecodeBlockType( 7443 num_block_types[1], 7444 block_type_trees, 7445 1, 7446 block_type, 7447 block_type_rb, 7448 block_type_rb_index, 7449 br 7450 ); 7451 block_length[1] = ReadBlockLength( 7452 block_len_trees, 7453 HUFFMAN_MAX_TABLE_SIZE, 7454 br 7455 ); 7456 htree_command = hgroup[1].htrees[block_type[1]]; 7457 } 7458 --block_length[1]; 7459 cmd_code = ReadSymbol( 7460 hgroup[1].codes, 7461 htree_command, 7462 br 7463 ); 7464 range_idx = cmd_code >> 6; 7465 if (range_idx >= 2) { 7466 range_idx -= 2; 7467 distance_code = -1; 7468 } else { 7469 distance_code = 0; 7470 } 7471 insert_code = Prefix.kInsertRangeLut[range_idx] + (cmd_code >> 3 & 7); 7472 copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7); 7473 insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset + br.readBits( 7474 Prefix.kInsertLengthPrefixCode[insert_code].nbits 7475 ); 7476 copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset + br.readBits( 7477 Prefix.kCopyLengthPrefixCode[copy_code].nbits 7478 ); 7479 prev_byte1 = ringbuffer[pos - 1 & ringbuffer_mask]; 7480 prev_byte2 = ringbuffer[pos - 2 & ringbuffer_mask]; 7481 for (j2 = 0; j2 < insert_length; ++j2) { 7482 br.readMoreInput(); 7483 if (block_length[0] === 0) { 7484 DecodeBlockType( 7485 num_block_types[0], 7486 block_type_trees, 7487 0, 7488 block_type, 7489 block_type_rb, 7490 block_type_rb_index, 7491 br 7492 ); 7493 block_length[0] = ReadBlockLength( 7494 block_len_trees, 7495 0, 7496 br 7497 ); 7498 context_offset = block_type[0] << kLiteralContextBits; 7499 context_map_slice = context_offset; 7500 context_mode = context_modes[block_type[0]]; 7501 context_lookup_offset1 = Context.lookupOffsets[context_mode]; 7502 context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; 7503 } 7504 context = Context.lookup[context_lookup_offset1 + prev_byte1] | Context.lookup[context_lookup_offset2 + prev_byte2]; 7505 literal_htree_index = context_map[context_map_slice + context]; 7506 --block_length[0]; 7507 prev_byte2 = prev_byte1; 7508 prev_byte1 = ReadSymbol( 7509 hgroup[0].codes, 7510 hgroup[0].htrees[literal_htree_index], 7511 br 7512 ); 7513 ringbuffer[pos & ringbuffer_mask] = prev_byte1; 7514 if ((pos & ringbuffer_mask) === ringbuffer_mask) { 7515 output.write( 7516 ringbuffer, 7517 ringbuffer_size 7518 ); 7519 } 7520 ++pos; 7521 } 7522 meta_block_remaining_len -= insert_length; 7523 if (meta_block_remaining_len <= 0) break; 7524 if (distance_code < 0) { 7525 var context; 7526 br.readMoreInput(); 7527 if (block_length[2] === 0) { 7528 DecodeBlockType( 7529 num_block_types[2], 7530 block_type_trees, 7531 2, 7532 block_type, 7533 block_type_rb, 7534 block_type_rb_index, 7535 br 7536 ); 7537 block_length[2] = ReadBlockLength( 7538 block_len_trees, 7539 2 * HUFFMAN_MAX_TABLE_SIZE, 7540 br 7541 ); 7542 dist_context_offset = block_type[2] << kDistanceContextBits; 7543 dist_context_map_slice = dist_context_offset; 7544 } 7545 --block_length[2]; 7546 context = (copy_length > 4 ? 3 : copy_length - 2) & 255; 7547 dist_htree_index = dist_context_map[dist_context_map_slice + context]; 7548 distance_code = ReadSymbol( 7549 hgroup[2].codes, 7550 hgroup[2].htrees[dist_htree_index], 7551 br 7552 ); 7553 if (distance_code >= num_direct_distance_codes) { 7554 var nbits; 7555 var postfix; 7556 var offset; 7557 distance_code -= num_direct_distance_codes; 7558 postfix = distance_code & distance_postfix_mask; 7559 distance_code >>= distance_postfix_bits; 7560 nbits = (distance_code >> 1) + 1; 7561 offset = (2 + (distance_code & 1) << nbits) - 4; 7562 distance_code = num_direct_distance_codes + (offset + br.readBits(nbits) << distance_postfix_bits) + postfix; 7563 } 7564 } 7565 distance = TranslateShortCodes( 7566 distance_code, 7567 dist_rb, 7568 dist_rb_idx 7569 ); 7570 if (distance < 0) { 7571 throw new Error( 7572 "[BrotliDecompress] invalid distance" 7573 ); 7574 } 7575 if (pos < max_backward_distance && max_distance !== max_backward_distance) { 7576 max_distance = pos; 7577 } else { 7578 max_distance = max_backward_distance; 7579 } 7580 copy_dst = pos & ringbuffer_mask; 7581 if (distance > max_distance) { 7582 if (copy_length >= BrotliDictionary.minDictionaryWordLength && copy_length <= BrotliDictionary.maxDictionaryWordLength) { 7583 var offset = BrotliDictionary.offsetsByLength[copy_length]; 7584 var word_id = distance - max_distance - 1; 7585 var shift = BrotliDictionary.sizeBitsByLength[copy_length]; 7586 var mask = (1 << shift) - 1; 7587 var word_idx = word_id & mask; 7588 var transform_idx = word_id >> shift; 7589 offset += word_idx * copy_length; 7590 if (transform_idx < Transform.kNumTransforms) { 7591 var len = Transform.transformDictionaryWord( 7592 ringbuffer, 7593 copy_dst, 7594 offset, 7595 copy_length, 7596 transform_idx 7597 ); 7598 copy_dst += len; 7599 pos += len; 7600 meta_block_remaining_len -= len; 7601 if (copy_dst >= ringbuffer_end) { 7602 output.write( 7603 ringbuffer, 7604 ringbuffer_size 7605 ); 7606 for (var _x9 = 0; _x9 < copy_dst - ringbuffer_end; _x9++) 7607 ringbuffer[_x9] = ringbuffer[ringbuffer_end + _x9]; 7608 } 7609 } else { 7610 throw new Error( 7611 "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len 7612 ); 7613 } 7614 } else { 7615 throw new Error( 7616 "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len 7617 ); 7618 } 7619 } else { 7620 if (distance_code > 0) { 7621 dist_rb[dist_rb_idx & 3] = distance; 7622 ++dist_rb_idx; 7623 } 7624 if (copy_length > meta_block_remaining_len) { 7625 throw new Error( 7626 "Invalid backward reference. pos: " + pos + " distance: " + distance + " len: " + copy_length + " bytes left: " + meta_block_remaining_len 7627 ); 7628 } 7629 for (j2 = 0; j2 < copy_length; ++j2) { 7630 ringbuffer[pos & ringbuffer_mask] = ringbuffer[pos - distance & ringbuffer_mask]; 7631 if ((pos & ringbuffer_mask) === ringbuffer_mask) { 7632 output.write( 7633 ringbuffer, 7634 ringbuffer_size 7635 ); 7636 } 7637 ++pos; 7638 --meta_block_remaining_len; 7639 } 7640 } 7641 prev_byte1 = ringbuffer[pos - 1 & ringbuffer_mask]; 7642 prev_byte2 = ringbuffer[pos - 2 & ringbuffer_mask]; 7643 } 7644 pos &= 1073741823; 7645 } 7646 output.write(ringbuffer, pos & ringbuffer_mask); 7647 } 7648 exports2.BrotliDecompress = BrotliDecompress; 7649 BrotliDictionary.init(); 7650 }, 7651 { 7652 "./bit_reader": 1, 7653 "./context": 2, 7654 "./dictionary": 6, 7655 "./huffman": 7, 7656 "./prefix": 9, 7657 "./streams": 10, 7658 "./transform": 11 7659 } 7660 ], 7661 4: [ 7662 function(require2, module2, exports2) { 7663 var base64 = require2("base64-js"); 7664 exports2.init = function() { 7665 var BrotliDecompressBuffer = require2("./decode").BrotliDecompressBuffer; 7666 var compressed = base64.toByteArray( 7667 require2("./dictionary.bin.js") 7668 ); 7669 return BrotliDecompressBuffer(compressed); 7670 }; 7671 }, 7672 { "./decode": 3, "./dictionary.bin.js": 5, "base64-js": 8 } 7673 ], 7674 5: [ 7675 function(require2, module2, exports2) { 7676 module2.exports = "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"; 7677 }, 7678 {} 7679 ], 7680 6: [ 7681 function(require2, module2, exports2) { 7682 var data = require2("./dictionary-browser"); 7683 exports2.init = function() { 7684 exports2.dictionary = data.init(); 7685 }; 7686 exports2.offsetsByLength = new Uint32Array([ 7687 0, 7688 0, 7689 0, 7690 0, 7691 0, 7692 4096, 7693 9216, 7694 21504, 7695 35840, 7696 44032, 7697 53248, 7698 63488, 7699 74752, 7700 87040, 7701 93696, 7702 100864, 7703 104704, 7704 106752, 7705 108928, 7706 113536, 7707 115968, 7708 118528, 7709 119872, 7710 121280, 7711 122016 7712 ]); 7713 exports2.sizeBitsByLength = new Uint8Array([ 7714 0, 7715 0, 7716 0, 7717 0, 7718 10, 7719 10, 7720 11, 7721 11, 7722 10, 7723 10, 7724 10, 7725 10, 7726 10, 7727 9, 7728 9, 7729 8, 7730 7, 7731 7, 7732 8, 7733 7, 7734 7, 7735 6, 7736 6, 7737 5, 7738 5 7739 ]); 7740 exports2.minDictionaryWordLength = 4; 7741 exports2.maxDictionaryWordLength = 24; 7742 }, 7743 { "./dictionary-browser": 4 } 7744 ], 7745 7: [ 7746 function(require2, module2, exports2) { 7747 function HuffmanCode(bits, value) { 7748 this.bits = bits; 7749 this.value = value; 7750 } 7751 exports2.HuffmanCode = HuffmanCode; 7752 var MAX_LENGTH = 15; 7753 function GetNextKey(key, len) { 7754 var step = 1 << len - 1; 7755 while (key & step) { 7756 step >>= 1; 7757 } 7758 return (key & step - 1) + step; 7759 } 7760 function ReplicateValue(table, i2, step, end, code) { 7761 do { 7762 end -= step; 7763 table[i2 + end] = new HuffmanCode( 7764 code.bits, 7765 code.value 7766 ); 7767 } while (end > 0); 7768 } 7769 function NextTableBitSize(count, len, root_bits) { 7770 var left = 1 << len - root_bits; 7771 while (len < MAX_LENGTH) { 7772 left -= count[len]; 7773 if (left <= 0) break; 7774 ++len; 7775 left <<= 1; 7776 } 7777 return len - root_bits; 7778 } 7779 exports2.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) { 7780 var start_table = table; 7781 var code; 7782 var len; 7783 var symbol; 7784 var key; 7785 var step; 7786 var low; 7787 var mask; 7788 var table_bits; 7789 var table_size; 7790 var total_size; 7791 var sorted; 7792 var count = new Int32Array( 7793 MAX_LENGTH + 1 7794 ); 7795 var offset = new Int32Array( 7796 MAX_LENGTH + 1 7797 ); 7798 sorted = new Int32Array(code_lengths_size); 7799 for (symbol = 0; symbol < code_lengths_size; symbol++) { 7800 count[code_lengths[symbol]]++; 7801 } 7802 offset[1] = 0; 7803 for (len = 1; len < MAX_LENGTH; len++) { 7804 offset[len + 1] = offset[len] + count[len]; 7805 } 7806 for (symbol = 0; symbol < code_lengths_size; symbol++) { 7807 if (code_lengths[symbol] !== 0) { 7808 sorted[offset[code_lengths[symbol]]++] = symbol; 7809 } 7810 } 7811 table_bits = root_bits; 7812 table_size = 1 << table_bits; 7813 total_size = table_size; 7814 if (offset[MAX_LENGTH] === 1) { 7815 for (key = 0; key < total_size; ++key) { 7816 root_table[table + key] = new HuffmanCode( 7817 0, 7818 sorted[0] & 65535 7819 ); 7820 } 7821 return total_size; 7822 } 7823 key = 0; 7824 symbol = 0; 7825 for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { 7826 for (; count[len] > 0; --count[len]) { 7827 code = new HuffmanCode( 7828 len & 255, 7829 sorted[symbol++] & 65535 7830 ); 7831 ReplicateValue( 7832 root_table, 7833 table + key, 7834 step, 7835 table_size, 7836 code 7837 ); 7838 key = GetNextKey(key, len); 7839 } 7840 } 7841 mask = total_size - 1; 7842 low = -1; 7843 for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) { 7844 for (; count[len] > 0; --count[len]) { 7845 if ((key & mask) !== low) { 7846 table += table_size; 7847 table_bits = NextTableBitSize( 7848 count, 7849 len, 7850 root_bits 7851 ); 7852 table_size = 1 << table_bits; 7853 total_size += table_size; 7854 low = key & mask; 7855 root_table[start_table + low] = new HuffmanCode( 7856 table_bits + root_bits & 255, 7857 table - start_table - low & 65535 7858 ); 7859 } 7860 code = new HuffmanCode( 7861 len - root_bits & 255, 7862 sorted[symbol++] & 65535 7863 ); 7864 ReplicateValue( 7865 root_table, 7866 table + (key >> root_bits), 7867 step, 7868 table_size, 7869 code 7870 ); 7871 key = GetNextKey(key, len); 7872 } 7873 } 7874 return total_size; 7875 }; 7876 }, 7877 {} 7878 ], 7879 8: [ 7880 function(require2, module2, exports2) { 7881 "use strict"; 7882 exports2.byteLength = byteLength; 7883 exports2.toByteArray = toByteArray; 7884 exports2.fromByteArray = fromByteArray; 7885 var lookup = []; 7886 var revLookup = []; 7887 var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array; 7888 var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 7889 for (var i2 = 0, len = code.length; i2 < len; ++i2) { 7890 lookup[i2] = code[i2]; 7891 revLookup[code.charCodeAt(i2)] = i2; 7892 } 7893 revLookup["-".charCodeAt(0)] = 62; 7894 revLookup["_".charCodeAt(0)] = 63; 7895 function getLens(b64) { 7896 var len2 = b64.length; 7897 if (len2 % 4 > 0) { 7898 throw new Error( 7899 "Invalid string. Length must be a multiple of 4" 7900 ); 7901 } 7902 var validLen = b64.indexOf("="); 7903 if (validLen === -1) validLen = len2; 7904 var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4; 7905 return [validLen, placeHoldersLen]; 7906 } 7907 function byteLength(b64) { 7908 var lens = getLens(b64); 7909 var validLen = lens[0]; 7910 var placeHoldersLen = lens[1]; 7911 return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; 7912 } 7913 function _byteLength(b64, validLen, placeHoldersLen) { 7914 return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; 7915 } 7916 function toByteArray(b64) { 7917 var tmp; 7918 var lens = getLens(b64); 7919 var validLen = lens[0]; 7920 var placeHoldersLen = lens[1]; 7921 var arr = new Arr( 7922 _byteLength(b64, validLen, placeHoldersLen) 7923 ); 7924 var curByte = 0; 7925 var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen; 7926 for (var i22 = 0; i22 < len2; i22 += 4) { 7927 tmp = revLookup[b64.charCodeAt(i22)] << 18 | revLookup[b64.charCodeAt(i22 + 1)] << 12 | revLookup[b64.charCodeAt(i22 + 2)] << 6 | revLookup[b64.charCodeAt(i22 + 3)]; 7928 arr[curByte++] = tmp >> 16 & 255; 7929 arr[curByte++] = tmp >> 8 & 255; 7930 arr[curByte++] = tmp & 255; 7931 } 7932 if (placeHoldersLen === 2) { 7933 tmp = revLookup[b64.charCodeAt(i22)] << 2 | revLookup[b64.charCodeAt(i22 + 1)] >> 4; 7934 arr[curByte++] = tmp & 255; 7935 } 7936 if (placeHoldersLen === 1) { 7937 tmp = revLookup[b64.charCodeAt(i22)] << 10 | revLookup[b64.charCodeAt(i22 + 1)] << 4 | revLookup[b64.charCodeAt(i22 + 2)] >> 2; 7938 arr[curByte++] = tmp >> 8 & 255; 7939 arr[curByte++] = tmp & 255; 7940 } 7941 return arr; 7942 } 7943 function tripletToBase64(num) { 7944 return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63]; 7945 } 7946 function encodeChunk(uint8, start, end) { 7947 var tmp; 7948 var output = []; 7949 for (var i22 = start; i22 < end; i22 += 3) { 7950 tmp = (uint8[i22] << 16 & 16711680) + (uint8[i22 + 1] << 8 & 65280) + (uint8[i22 + 2] & 255); 7951 output.push(tripletToBase64(tmp)); 7952 } 7953 return output.join(""); 7954 } 7955 function fromByteArray(uint8) { 7956 var tmp; 7957 var len2 = uint8.length; 7958 var extraBytes = len2 % 3; 7959 var parts = []; 7960 var maxChunkLength = 16383; 7961 for (var i22 = 0, len22 = len2 - extraBytes; i22 < len22; i22 += maxChunkLength) { 7962 parts.push( 7963 encodeChunk( 7964 uint8, 7965 i22, 7966 i22 + maxChunkLength > len22 ? len22 : i22 + maxChunkLength 7967 ) 7968 ); 7969 } 7970 if (extraBytes === 1) { 7971 tmp = uint8[len2 - 1]; 7972 parts.push( 7973 lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "==" 7974 ); 7975 } else if (extraBytes === 2) { 7976 tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1]; 7977 parts.push( 7978 lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "=" 7979 ); 7980 } 7981 return parts.join(""); 7982 } 7983 }, 7984 {} 7985 ], 7986 9: [ 7987 function(require2, module2, exports2) { 7988 function PrefixCodeRange(offset, nbits) { 7989 this.offset = offset; 7990 this.nbits = nbits; 7991 } 7992 exports2.kBlockLengthPrefixCode = [ 7993 new PrefixCodeRange(1, 2), 7994 new PrefixCodeRange(5, 2), 7995 new PrefixCodeRange(9, 2), 7996 new PrefixCodeRange(13, 2), 7997 new PrefixCodeRange(17, 3), 7998 new PrefixCodeRange(25, 3), 7999 new PrefixCodeRange(33, 3), 8000 new PrefixCodeRange(41, 3), 8001 new PrefixCodeRange(49, 4), 8002 new PrefixCodeRange(65, 4), 8003 new PrefixCodeRange(81, 4), 8004 new PrefixCodeRange(97, 4), 8005 new PrefixCodeRange(113, 5), 8006 new PrefixCodeRange(145, 5), 8007 new PrefixCodeRange(177, 5), 8008 new PrefixCodeRange(209, 5), 8009 new PrefixCodeRange(241, 6), 8010 new PrefixCodeRange(305, 6), 8011 new PrefixCodeRange(369, 7), 8012 new PrefixCodeRange(497, 8), 8013 new PrefixCodeRange(753, 9), 8014 new PrefixCodeRange(1265, 10), 8015 new PrefixCodeRange(2289, 11), 8016 new PrefixCodeRange(4337, 12), 8017 new PrefixCodeRange(8433, 13), 8018 new PrefixCodeRange(16625, 24) 8019 ]; 8020 exports2.kInsertLengthPrefixCode = [ 8021 new PrefixCodeRange(0, 0), 8022 new PrefixCodeRange(1, 0), 8023 new PrefixCodeRange(2, 0), 8024 new PrefixCodeRange(3, 0), 8025 new PrefixCodeRange(4, 0), 8026 new PrefixCodeRange(5, 0), 8027 new PrefixCodeRange(6, 1), 8028 new PrefixCodeRange(8, 1), 8029 new PrefixCodeRange(10, 2), 8030 new PrefixCodeRange(14, 2), 8031 new PrefixCodeRange(18, 3), 8032 new PrefixCodeRange(26, 3), 8033 new PrefixCodeRange(34, 4), 8034 new PrefixCodeRange(50, 4), 8035 new PrefixCodeRange(66, 5), 8036 new PrefixCodeRange(98, 5), 8037 new PrefixCodeRange(130, 6), 8038 new PrefixCodeRange(194, 7), 8039 new PrefixCodeRange(322, 8), 8040 new PrefixCodeRange(578, 9), 8041 new PrefixCodeRange(1090, 10), 8042 new PrefixCodeRange(2114, 12), 8043 new PrefixCodeRange(6210, 14), 8044 new PrefixCodeRange(22594, 24) 8045 ]; 8046 exports2.kCopyLengthPrefixCode = [ 8047 new PrefixCodeRange(2, 0), 8048 new PrefixCodeRange(3, 0), 8049 new PrefixCodeRange(4, 0), 8050 new PrefixCodeRange(5, 0), 8051 new PrefixCodeRange(6, 0), 8052 new PrefixCodeRange(7, 0), 8053 new PrefixCodeRange(8, 0), 8054 new PrefixCodeRange(9, 0), 8055 new PrefixCodeRange(10, 1), 8056 new PrefixCodeRange(12, 1), 8057 new PrefixCodeRange(14, 2), 8058 new PrefixCodeRange(18, 2), 8059 new PrefixCodeRange(22, 3), 8060 new PrefixCodeRange(30, 3), 8061 new PrefixCodeRange(38, 4), 8062 new PrefixCodeRange(54, 4), 8063 new PrefixCodeRange(70, 5), 8064 new PrefixCodeRange(102, 5), 8065 new PrefixCodeRange(134, 6), 8066 new PrefixCodeRange(198, 7), 8067 new PrefixCodeRange(326, 8), 8068 new PrefixCodeRange(582, 9), 8069 new PrefixCodeRange(1094, 10), 8070 new PrefixCodeRange(2118, 24) 8071 ]; 8072 exports2.kInsertRangeLut = [0, 0, 8, 8, 0, 16, 8, 16, 16]; 8073 exports2.kCopyRangeLut = [0, 8, 0, 8, 16, 0, 16, 8, 16]; 8074 }, 8075 {} 8076 ], 8077 10: [ 8078 function(require2, module2, exports2) { 8079 function BrotliInput(buffer) { 8080 this.buffer = buffer; 8081 this.pos = 0; 8082 } 8083 BrotliInput.prototype.read = function(buf, i2, count) { 8084 if (this.pos + count > this.buffer.length) { 8085 count = this.buffer.length - this.pos; 8086 } 8087 for (var p3 = 0; p3 < count; p3++) 8088 buf[i2 + p3] = this.buffer[this.pos + p3]; 8089 this.pos += count; 8090 return count; 8091 }; 8092 exports2.BrotliInput = BrotliInput; 8093 function BrotliOutput(buf) { 8094 this.buffer = buf; 8095 this.pos = 0; 8096 } 8097 BrotliOutput.prototype.write = function(buf, count) { 8098 if (this.pos + count > this.buffer.length) 8099 throw new Error( 8100 "Output buffer is not large enough" 8101 ); 8102 this.buffer.set(buf.subarray(0, count), this.pos); 8103 this.pos += count; 8104 return count; 8105 }; 8106 exports2.BrotliOutput = BrotliOutput; 8107 }, 8108 {} 8109 ], 8110 11: [ 8111 function(require2, module2, exports2) { 8112 var BrotliDictionary = require2("./dictionary"); 8113 var kIdentity = 0; 8114 var kOmitLast1 = 1; 8115 var kOmitLast2 = 2; 8116 var kOmitLast3 = 3; 8117 var kOmitLast4 = 4; 8118 var kOmitLast5 = 5; 8119 var kOmitLast6 = 6; 8120 var kOmitLast7 = 7; 8121 var kOmitLast8 = 8; 8122 var kOmitLast9 = 9; 8123 var kUppercaseFirst = 10; 8124 var kUppercaseAll = 11; 8125 var kOmitFirst1 = 12; 8126 var kOmitFirst2 = 13; 8127 var kOmitFirst3 = 14; 8128 var kOmitFirst4 = 15; 8129 var kOmitFirst5 = 16; 8130 var kOmitFirst6 = 17; 8131 var kOmitFirst7 = 18; 8132 var kOmitFirst8 = 19; 8133 var kOmitFirst9 = 20; 8134 function Transform(prefix, transform, suffix) { 8135 this.prefix = new Uint8Array(prefix.length); 8136 this.transform = transform; 8137 this.suffix = new Uint8Array(suffix.length); 8138 for (var i2 = 0; i2 < prefix.length; i2++) 8139 this.prefix[i2] = prefix.charCodeAt(i2); 8140 for (var i2 = 0; i2 < suffix.length; i2++) 8141 this.suffix[i2] = suffix.charCodeAt(i2); 8142 } 8143 var kTransforms = [ 8144 new Transform("", kIdentity, ""), 8145 new Transform("", kIdentity, " "), 8146 new Transform(" ", kIdentity, " "), 8147 new Transform("", kOmitFirst1, ""), 8148 new Transform("", kUppercaseFirst, " "), 8149 new Transform("", kIdentity, " the "), 8150 new Transform(" ", kIdentity, ""), 8151 new Transform("s ", kIdentity, " "), 8152 new Transform("", kIdentity, " of "), 8153 new Transform("", kUppercaseFirst, ""), 8154 new Transform("", kIdentity, " and "), 8155 new Transform("", kOmitFirst2, ""), 8156 new Transform("", kOmitLast1, ""), 8157 new Transform(", ", kIdentity, " "), 8158 new Transform("", kIdentity, ", "), 8159 new Transform(" ", kUppercaseFirst, " "), 8160 new Transform("", kIdentity, " in "), 8161 new Transform("", kIdentity, " to "), 8162 new Transform("e ", kIdentity, " "), 8163 new Transform("", kIdentity, '"'), 8164 new Transform("", kIdentity, "."), 8165 new Transform("", kIdentity, '">'), 8166 new Transform("", kIdentity, "\n"), 8167 new Transform("", kOmitLast3, ""), 8168 new Transform("", kIdentity, "]"), 8169 new Transform("", kIdentity, " for "), 8170 new Transform("", kOmitFirst3, ""), 8171 new Transform("", kOmitLast2, ""), 8172 new Transform("", kIdentity, " a "), 8173 new Transform("", kIdentity, " that "), 8174 new Transform(" ", kUppercaseFirst, ""), 8175 new Transform("", kIdentity, ". "), 8176 new Transform(".", kIdentity, ""), 8177 new Transform(" ", kIdentity, ", "), 8178 new Transform("", kOmitFirst4, ""), 8179 new Transform("", kIdentity, " with "), 8180 new Transform("", kIdentity, "'"), 8181 new Transform("", kIdentity, " from "), 8182 new Transform("", kIdentity, " by "), 8183 new Transform("", kOmitFirst5, ""), 8184 new Transform("", kOmitFirst6, ""), 8185 new Transform(" the ", kIdentity, ""), 8186 new Transform("", kOmitLast4, ""), 8187 new Transform("", kIdentity, ". The "), 8188 new Transform("", kUppercaseAll, ""), 8189 new Transform("", kIdentity, " on "), 8190 new Transform("", kIdentity, " as "), 8191 new Transform("", kIdentity, " is "), 8192 new Transform("", kOmitLast7, ""), 8193 new Transform("", kOmitLast1, "ing "), 8194 new Transform("", kIdentity, "\n "), 8195 new Transform("", kIdentity, ":"), 8196 new Transform(" ", kIdentity, ". "), 8197 new Transform("", kIdentity, "ed "), 8198 new Transform("", kOmitFirst9, ""), 8199 new Transform("", kOmitFirst7, ""), 8200 new Transform("", kOmitLast6, ""), 8201 new Transform("", kIdentity, "("), 8202 new Transform("", kUppercaseFirst, ", "), 8203 new Transform("", kOmitLast8, ""), 8204 new Transform("", kIdentity, " at "), 8205 new Transform("", kIdentity, "ly "), 8206 new Transform(" the ", kIdentity, " of "), 8207 new Transform("", kOmitLast5, ""), 8208 new Transform("", kOmitLast9, ""), 8209 new Transform(" ", kUppercaseFirst, ", "), 8210 new Transform("", kUppercaseFirst, '"'), 8211 new Transform(".", kIdentity, "("), 8212 new Transform("", kUppercaseAll, " "), 8213 new Transform("", kUppercaseFirst, '">'), 8214 new Transform("", kIdentity, '="'), 8215 new Transform(" ", kIdentity, "."), 8216 new Transform(".com/", kIdentity, ""), 8217 new Transform(" the ", kIdentity, " of the "), 8218 new Transform("", kUppercaseFirst, "'"), 8219 new Transform("", kIdentity, ". This "), 8220 new Transform("", kIdentity, ","), 8221 new Transform(".", kIdentity, " "), 8222 new Transform("", kUppercaseFirst, "("), 8223 new Transform("", kUppercaseFirst, "."), 8224 new Transform("", kIdentity, " not "), 8225 new Transform(" ", kIdentity, '="'), 8226 new Transform("", kIdentity, "er "), 8227 new Transform(" ", kUppercaseAll, " "), 8228 new Transform("", kIdentity, "al "), 8229 new Transform(" ", kUppercaseAll, ""), 8230 new Transform("", kIdentity, "='"), 8231 new Transform("", kUppercaseAll, '"'), 8232 new Transform("", kUppercaseFirst, ". "), 8233 new Transform(" ", kIdentity, "("), 8234 new Transform("", kIdentity, "ful "), 8235 new Transform(" ", kUppercaseFirst, ". "), 8236 new Transform("", kIdentity, "ive "), 8237 new Transform("", kIdentity, "less "), 8238 new Transform("", kUppercaseAll, "'"), 8239 new Transform("", kIdentity, "est "), 8240 new Transform(" ", kUppercaseFirst, "."), 8241 new Transform("", kUppercaseAll, '">'), 8242 new Transform(" ", kIdentity, "='"), 8243 new Transform("", kUppercaseFirst, ","), 8244 new Transform("", kIdentity, "ize "), 8245 new Transform("", kUppercaseAll, "."), 8246 new Transform("\xC2\xA0", kIdentity, ""), 8247 new Transform(" ", kIdentity, ","), 8248 new Transform("", kUppercaseFirst, '="'), 8249 new Transform("", kUppercaseAll, '="'), 8250 new Transform("", kIdentity, "ous "), 8251 new Transform("", kUppercaseAll, ", "), 8252 new Transform("", kUppercaseFirst, "='"), 8253 new Transform(" ", kUppercaseFirst, ","), 8254 new Transform(" ", kUppercaseAll, '="'), 8255 new Transform(" ", kUppercaseAll, ", "), 8256 new Transform("", kUppercaseAll, ","), 8257 new Transform("", kUppercaseAll, "("), 8258 new Transform("", kUppercaseAll, ". "), 8259 new Transform(" ", kUppercaseAll, "."), 8260 new Transform("", kUppercaseAll, "='"), 8261 new Transform(" ", kUppercaseAll, ". "), 8262 new Transform(" ", kUppercaseFirst, '="'), 8263 new Transform(" ", kUppercaseAll, "='"), 8264 new Transform(" ", kUppercaseFirst, "='") 8265 ]; 8266 exports2.kTransforms = kTransforms; 8267 exports2.kNumTransforms = kTransforms.length; 8268 function ToUpperCase(p3, i2) { 8269 if (p3[i2] < 192) { 8270 if (p3[i2] >= 97 && p3[i2] <= 122) { 8271 p3[i2] ^= 32; 8272 } 8273 return 1; 8274 } 8275 if (p3[i2] < 224) { 8276 p3[i2 + 1] ^= 32; 8277 return 2; 8278 } 8279 p3[i2 + 2] ^= 5; 8280 return 3; 8281 } 8282 exports2.transformDictionaryWord = function(dst, idx, word, len, transform) { 8283 var prefix = kTransforms[transform].prefix; 8284 var suffix = kTransforms[transform].suffix; 8285 var t3 = kTransforms[transform].transform; 8286 var skip = t3 < kOmitFirst1 ? 0 : t3 - (kOmitFirst1 - 1); 8287 var i2 = 0; 8288 var start_idx = idx; 8289 var uppercase; 8290 if (skip > len) { 8291 skip = len; 8292 } 8293 var prefix_pos = 0; 8294 while (prefix_pos < prefix.length) { 8295 dst[idx++] = prefix[prefix_pos++]; 8296 } 8297 word += skip; 8298 len -= skip; 8299 if (t3 <= kOmitLast9) { 8300 len -= t3; 8301 } 8302 for (i2 = 0; i2 < len; i2++) { 8303 dst[idx++] = BrotliDictionary.dictionary[word + i2]; 8304 } 8305 uppercase = idx - len; 8306 if (t3 === kUppercaseFirst) { 8307 ToUpperCase(dst, uppercase); 8308 } else if (t3 === kUppercaseAll) { 8309 while (len > 0) { 8310 var step = ToUpperCase(dst, uppercase); 8311 uppercase += step; 8312 len -= step; 8313 } 8314 } 8315 var suffix_pos = 0; 8316 while (suffix_pos < suffix.length) { 8317 dst[idx++] = suffix[suffix_pos++]; 8318 } 8319 return idx - start_idx; 8320 }; 8321 }, 8322 { "./dictionary": 6 } 8323 ], 8324 12: [ 8325 function(require2, module2, exports2) { 8326 module2.exports = require2("./dec/decode").BrotliDecompressBuffer; 8327 }, 8328 { "./dec/decode": 3 } 8329 ] 8330 }, 8331 {}, 8332 [12] 8333 )(12); 8334 })(); 8335 8336 // packages/global-styles-ui/build-module/font-library/lib/inflate.mjs 8337 var __require3 = /* @__PURE__ */ ((x2) => typeof __require !== "undefined" ? __require : typeof Proxy !== "undefined" ? new Proxy(x2, { 8338 get: (a2, b2) => (typeof __require !== "undefined" ? __require : a2)[b2] 8339 }) : x2)(function(x2) { 8340 if (typeof __require !== "undefined") return __require.apply(this, arguments); 8341 throw Error('Dynamic require of "' + x2 + '" is not supported'); 8342 }); 8343 var inflate_default = (function() { 8344 var define, module, exports; 8345 return (/* @__PURE__ */ (function() { 8346 function r3(e2, n2, t3) { 8347 function o3(i22, f2) { 8348 if (!n2[i22]) { 8349 if (!e2[i22]) { 8350 var c2 = "function" == typeof __require3 && __require3; 8351 if (!f2 && c2) return c2(i22, true); 8352 if (u2) return u2(i22, true); 8353 var a2 = new Error("Cannot find module '" + i22 + "'"); 8354 throw a2.code = "MODULE_NOT_FOUND", a2; 8355 } 8356 var p3 = n2[i22] = { exports: {} }; 8357 e2[i22][0].call( 8358 p3.exports, 8359 function(r22) { 8360 var n22 = e2[i22][1][r22]; 8361 return o3(n22 || r22); 8362 }, 8363 p3, 8364 p3.exports, 8365 r3, 8366 e2, 8367 n2, 8368 t3 8369 ); 8370 } 8371 return n2[i22].exports; 8372 } 8373 for (var u2 = "function" == typeof __require3 && __require3, i2 = 0; i2 < t3.length; i2++) 8374 o3(t3[i2]); 8375 return o3; 8376 } 8377 return r3; 8378 })())( 8379 { 8380 1: [ 8381 function(require2, module2, exports2) { 8382 "use strict"; 8383 var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined"; 8384 function _has(obj, key) { 8385 return Object.prototype.hasOwnProperty.call(obj, key); 8386 } 8387 exports2.assign = function(obj) { 8388 var sources = Array.prototype.slice.call( 8389 arguments, 8390 1 8391 ); 8392 while (sources.length) { 8393 var source = sources.shift(); 8394 if (!source) { 8395 continue; 8396 } 8397 if (typeof source !== "object") { 8398 throw new TypeError( 8399 source + "must be non-object" 8400 ); 8401 } 8402 for (var p3 in source) { 8403 if (_has(source, p3)) { 8404 obj[p3] = source[p3]; 8405 } 8406 } 8407 } 8408 return obj; 8409 }; 8410 exports2.shrinkBuf = function(buf, size) { 8411 if (buf.length === size) { 8412 return buf; 8413 } 8414 if (buf.subarray) { 8415 return buf.subarray(0, size); 8416 } 8417 buf.length = size; 8418 return buf; 8419 }; 8420 var fnTyped = { 8421 arraySet: function(dest, src, src_offs, len, dest_offs) { 8422 if (src.subarray && dest.subarray) { 8423 dest.set( 8424 src.subarray(src_offs, src_offs + len), 8425 dest_offs 8426 ); 8427 return; 8428 } 8429 for (var i2 = 0; i2 < len; i2++) { 8430 dest[dest_offs + i2] = src[src_offs + i2]; 8431 } 8432 }, 8433 // Join array of chunks to single array. 8434 flattenChunks: function(chunks) { 8435 var i2, l2, len, pos, chunk, result; 8436 len = 0; 8437 for (i2 = 0, l2 = chunks.length; i2 < l2; i2++) { 8438 len += chunks[i2].length; 8439 } 8440 result = new Uint8Array(len); 8441 pos = 0; 8442 for (i2 = 0, l2 = chunks.length; i2 < l2; i2++) { 8443 chunk = chunks[i2]; 8444 result.set(chunk, pos); 8445 pos += chunk.length; 8446 } 8447 return result; 8448 } 8449 }; 8450 var fnUntyped = { 8451 arraySet: function(dest, src, src_offs, len, dest_offs) { 8452 for (var i2 = 0; i2 < len; i2++) { 8453 dest[dest_offs + i2] = src[src_offs + i2]; 8454 } 8455 }, 8456 // Join array of chunks to single array. 8457 flattenChunks: function(chunks) { 8458 return [].concat.apply([], chunks); 8459 } 8460 }; 8461 exports2.setTyped = function(on) { 8462 if (on) { 8463 exports2.Buf8 = Uint8Array; 8464 exports2.Buf16 = Uint16Array; 8465 exports2.Buf32 = Int32Array; 8466 exports2.assign(exports2, fnTyped); 8467 } else { 8468 exports2.Buf8 = Array; 8469 exports2.Buf16 = Array; 8470 exports2.Buf32 = Array; 8471 exports2.assign(exports2, fnUntyped); 8472 } 8473 }; 8474 exports2.setTyped(TYPED_OK); 8475 }, 8476 {} 8477 ], 8478 2: [ 8479 function(require2, module2, exports2) { 8480 "use strict"; 8481 var utils = require2("./common"); 8482 var STR_APPLY_OK = true; 8483 var STR_APPLY_UIA_OK = true; 8484 try { 8485 String.fromCharCode.apply(null, [0]); 8486 } catch (__42) { 8487 STR_APPLY_OK = false; 8488 } 8489 try { 8490 String.fromCharCode.apply(null, new Uint8Array(1)); 8491 } catch (__42) { 8492 STR_APPLY_UIA_OK = false; 8493 } 8494 var _utf8len = new utils.Buf8(256); 8495 for (var q = 0; q < 256; q++) { 8496 _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1; 8497 } 8498 _utf8len[254] = _utf8len[254] = 1; 8499 exports2.string2buf = function(str) { 8500 var buf, c2, c22, m_pos, i2, str_len = str.length, buf_len = 0; 8501 for (m_pos = 0; m_pos < str_len; m_pos++) { 8502 c2 = str.charCodeAt(m_pos); 8503 if ((c2 & 64512) === 55296 && m_pos + 1 < str_len) { 8504 c22 = str.charCodeAt(m_pos + 1); 8505 if ((c22 & 64512) === 56320) { 8506 c2 = 65536 + (c2 - 55296 << 10) + (c22 - 56320); 8507 m_pos++; 8508 } 8509 } 8510 buf_len += c2 < 128 ? 1 : c2 < 2048 ? 2 : c2 < 65536 ? 3 : 4; 8511 } 8512 buf = new utils.Buf8(buf_len); 8513 for (i2 = 0, m_pos = 0; i2 < buf_len; m_pos++) { 8514 c2 = str.charCodeAt(m_pos); 8515 if ((c2 & 64512) === 55296 && m_pos + 1 < str_len) { 8516 c22 = str.charCodeAt(m_pos + 1); 8517 if ((c22 & 64512) === 56320) { 8518 c2 = 65536 + (c2 - 55296 << 10) + (c22 - 56320); 8519 m_pos++; 8520 } 8521 } 8522 if (c2 < 128) { 8523 buf[i2++] = c2; 8524 } else if (c2 < 2048) { 8525 buf[i2++] = 192 | c2 >>> 6; 8526 buf[i2++] = 128 | c2 & 63; 8527 } else if (c2 < 65536) { 8528 buf[i2++] = 224 | c2 >>> 12; 8529 buf[i2++] = 128 | c2 >>> 6 & 63; 8530 buf[i2++] = 128 | c2 & 63; 8531 } else { 8532 buf[i2++] = 240 | c2 >>> 18; 8533 buf[i2++] = 128 | c2 >>> 12 & 63; 8534 buf[i2++] = 128 | c2 >>> 6 & 63; 8535 buf[i2++] = 128 | c2 & 63; 8536 } 8537 } 8538 return buf; 8539 }; 8540 function buf2binstring(buf, len) { 8541 if (len < 65534) { 8542 if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) { 8543 return String.fromCharCode.apply( 8544 null, 8545 utils.shrinkBuf(buf, len) 8546 ); 8547 } 8548 } 8549 var result = ""; 8550 for (var i2 = 0; i2 < len; i2++) { 8551 result += String.fromCharCode(buf[i2]); 8552 } 8553 return result; 8554 } 8555 exports2.buf2binstring = function(buf) { 8556 return buf2binstring(buf, buf.length); 8557 }; 8558 exports2.binstring2buf = function(str) { 8559 var buf = new utils.Buf8(str.length); 8560 for (var i2 = 0, len = buf.length; i2 < len; i2++) { 8561 buf[i2] = str.charCodeAt(i2); 8562 } 8563 return buf; 8564 }; 8565 exports2.buf2string = function(buf, max) { 8566 var i2, out, c2, c_len; 8567 var len = max || buf.length; 8568 var utf16buf = new Array(len * 2); 8569 for (out = 0, i2 = 0; i2 < len; ) { 8570 c2 = buf[i2++]; 8571 if (c2 < 128) { 8572 utf16buf[out++] = c2; 8573 continue; 8574 } 8575 c_len = _utf8len[c2]; 8576 if (c_len > 4) { 8577 utf16buf[out++] = 65533; 8578 i2 += c_len - 1; 8579 continue; 8580 } 8581 c2 &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7; 8582 while (c_len > 1 && i2 < len) { 8583 c2 = c2 << 6 | buf[i2++] & 63; 8584 c_len--; 8585 } 8586 if (c_len > 1) { 8587 utf16buf[out++] = 65533; 8588 continue; 8589 } 8590 if (c2 < 65536) { 8591 utf16buf[out++] = c2; 8592 } else { 8593 c2 -= 65536; 8594 utf16buf[out++] = 55296 | c2 >> 10 & 1023; 8595 utf16buf[out++] = 56320 | c2 & 1023; 8596 } 8597 } 8598 return buf2binstring(utf16buf, out); 8599 }; 8600 exports2.utf8border = function(buf, max) { 8601 var pos; 8602 max = max || buf.length; 8603 if (max > buf.length) { 8604 max = buf.length; 8605 } 8606 pos = max - 1; 8607 while (pos >= 0 && (buf[pos] & 192) === 128) { 8608 pos--; 8609 } 8610 if (pos < 0) { 8611 return max; 8612 } 8613 if (pos === 0) { 8614 return max; 8615 } 8616 return pos + _utf8len[buf[pos]] > max ? pos : max; 8617 }; 8618 }, 8619 { "./common": 1 } 8620 ], 8621 3: [ 8622 function(require2, module2, exports2) { 8623 "use strict"; 8624 function adler32(adler, buf, len, pos) { 8625 var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n2 = 0; 8626 while (len !== 0) { 8627 n2 = len > 2e3 ? 2e3 : len; 8628 len -= n2; 8629 do { 8630 s1 = s1 + buf[pos++] | 0; 8631 s2 = s2 + s1 | 0; 8632 } while (--n2); 8633 s1 %= 65521; 8634 s2 %= 65521; 8635 } 8636 return s1 | s2 << 16 | 0; 8637 } 8638 module2.exports = adler32; 8639 }, 8640 {} 8641 ], 8642 4: [ 8643 function(require2, module2, exports2) { 8644 "use strict"; 8645 module2.exports = { 8646 /* Allowed flush values; see deflate() and inflate() below for details */ 8647 Z_NO_FLUSH: 0, 8648 Z_PARTIAL_FLUSH: 1, 8649 Z_SYNC_FLUSH: 2, 8650 Z_FULL_FLUSH: 3, 8651 Z_FINISH: 4, 8652 Z_BLOCK: 5, 8653 Z_TREES: 6, 8654 /* Return codes for the compression/decompression functions. Negative values 8655 * are errors, positive values are used for special but normal events. 8656 */ 8657 Z_OK: 0, 8658 Z_STREAM_END: 1, 8659 Z_NEED_DICT: 2, 8660 Z_ERRNO: -1, 8661 Z_STREAM_ERROR: -2, 8662 Z_DATA_ERROR: -3, 8663 //Z_MEM_ERROR: -4, 8664 Z_BUF_ERROR: -5, 8665 //Z_VERSION_ERROR: -6, 8666 /* compression levels */ 8667 Z_NO_COMPRESSION: 0, 8668 Z_BEST_SPEED: 1, 8669 Z_BEST_COMPRESSION: 9, 8670 Z_DEFAULT_COMPRESSION: -1, 8671 Z_FILTERED: 1, 8672 Z_HUFFMAN_ONLY: 2, 8673 Z_RLE: 3, 8674 Z_FIXED: 4, 8675 Z_DEFAULT_STRATEGY: 0, 8676 /* Possible values of the data_type field (though see inflate()) */ 8677 Z_BINARY: 0, 8678 Z_TEXT: 1, 8679 //Z_ASCII: 1, // = Z_TEXT (deprecated) 8680 Z_UNKNOWN: 2, 8681 /* The deflate compression method */ 8682 Z_DEFLATED: 8 8683 //Z_NULL: null // Use -1 or null inline, depending on var type 8684 }; 8685 }, 8686 {} 8687 ], 8688 5: [ 8689 function(require2, module2, exports2) { 8690 "use strict"; 8691 function makeTable() { 8692 var c2, table = []; 8693 for (var n2 = 0; n2 < 256; n2++) { 8694 c2 = n2; 8695 for (var k2 = 0; k2 < 8; k2++) { 8696 c2 = c2 & 1 ? 3988292384 ^ c2 >>> 1 : c2 >>> 1; 8697 } 8698 table[n2] = c2; 8699 } 8700 return table; 8701 } 8702 var crcTable = makeTable(); 8703 function crc32(crc, buf, len, pos) { 8704 var t3 = crcTable, end = pos + len; 8705 crc ^= -1; 8706 for (var i2 = pos; i2 < end; i2++) { 8707 crc = crc >>> 8 ^ t3[(crc ^ buf[i2]) & 255]; 8708 } 8709 return crc ^ -1; 8710 } 8711 module2.exports = crc32; 8712 }, 8713 {} 8714 ], 8715 6: [ 8716 function(require2, module2, exports2) { 8717 "use strict"; 8718 function GZheader() { 8719 this.text = 0; 8720 this.time = 0; 8721 this.xflags = 0; 8722 this.os = 0; 8723 this.extra = null; 8724 this.extra_len = 0; 8725 this.name = ""; 8726 this.comment = ""; 8727 this.hcrc = 0; 8728 this.done = false; 8729 } 8730 module2.exports = GZheader; 8731 }, 8732 {} 8733 ], 8734 7: [ 8735 function(require2, module2, exports2) { 8736 "use strict"; 8737 var BAD = 30; 8738 var TYPE = 12; 8739 module2.exports = function inflate_fast(strm, start) { 8740 var state; 8741 var _in; 8742 var last; 8743 var _out; 8744 var beg; 8745 var end; 8746 var dmax; 8747 var wsize; 8748 var whave; 8749 var wnext; 8750 var s_window; 8751 var hold; 8752 var bits; 8753 var lcode; 8754 var dcode; 8755 var lmask; 8756 var dmask; 8757 var here; 8758 var op; 8759 var len; 8760 var dist; 8761 var from; 8762 var from_source; 8763 var input, output; 8764 state = strm.state; 8765 _in = strm.next_in; 8766 input = strm.input; 8767 last = _in + (strm.avail_in - 5); 8768 _out = strm.next_out; 8769 output = strm.output; 8770 beg = _out - (start - strm.avail_out); 8771 end = _out + (strm.avail_out - 257); 8772 dmax = state.dmax; 8773 wsize = state.wsize; 8774 whave = state.whave; 8775 wnext = state.wnext; 8776 s_window = state.window; 8777 hold = state.hold; 8778 bits = state.bits; 8779 lcode = state.lencode; 8780 dcode = state.distcode; 8781 lmask = (1 << state.lenbits) - 1; 8782 dmask = (1 << state.distbits) - 1; 8783 top: do { 8784 if (bits < 15) { 8785 hold += input[_in++] << bits; 8786 bits += 8; 8787 hold += input[_in++] << bits; 8788 bits += 8; 8789 } 8790 here = lcode[hold & lmask]; 8791 dolen: for (; ; ) { 8792 op = here >>> 24; 8793 hold >>>= op; 8794 bits -= op; 8795 op = here >>> 16 & 255; 8796 if (op === 0) { 8797 output[_out++] = here & 65535; 8798 } else if (op & 16) { 8799 len = here & 65535; 8800 op &= 15; 8801 if (op) { 8802 if (bits < op) { 8803 hold += input[_in++] << bits; 8804 bits += 8; 8805 } 8806 len += hold & (1 << op) - 1; 8807 hold >>>= op; 8808 bits -= op; 8809 } 8810 if (bits < 15) { 8811 hold += input[_in++] << bits; 8812 bits += 8; 8813 hold += input[_in++] << bits; 8814 bits += 8; 8815 } 8816 here = dcode[hold & dmask]; 8817 dodist: for (; ; ) { 8818 op = here >>> 24; 8819 hold >>>= op; 8820 bits -= op; 8821 op = here >>> 16 & 255; 8822 if (op & 16) { 8823 dist = here & 65535; 8824 op &= 15; 8825 if (bits < op) { 8826 hold += input[_in++] << bits; 8827 bits += 8; 8828 if (bits < op) { 8829 hold += input[_in++] << bits; 8830 bits += 8; 8831 } 8832 } 8833 dist += hold & (1 << op) - 1; 8834 if (dist > dmax) { 8835 strm.msg = "invalid distance too far back"; 8836 state.mode = BAD; 8837 break top; 8838 } 8839 hold >>>= op; 8840 bits -= op; 8841 op = _out - beg; 8842 if (dist > op) { 8843 op = dist - op; 8844 if (op > whave) { 8845 if (state.sane) { 8846 strm.msg = "invalid distance too far back"; 8847 state.mode = BAD; 8848 break top; 8849 } 8850 } 8851 from = 0; 8852 from_source = s_window; 8853 if (wnext === 0) { 8854 from += wsize - op; 8855 if (op < len) { 8856 len -= op; 8857 do { 8858 output[_out++] = s_window[from++]; 8859 } while (--op); 8860 from = _out - dist; 8861 from_source = output; 8862 } 8863 } else if (wnext < op) { 8864 from += wsize + wnext - op; 8865 op -= wnext; 8866 if (op < len) { 8867 len -= op; 8868 do { 8869 output[_out++] = s_window[from++]; 8870 } while (--op); 8871 from = 0; 8872 if (wnext < len) { 8873 op = wnext; 8874 len -= op; 8875 do { 8876 output[_out++] = s_window[from++]; 8877 } while (--op); 8878 from = _out - dist; 8879 from_source = output; 8880 } 8881 } 8882 } else { 8883 from += wnext - op; 8884 if (op < len) { 8885 len -= op; 8886 do { 8887 output[_out++] = s_window[from++]; 8888 } while (--op); 8889 from = _out - dist; 8890 from_source = output; 8891 } 8892 } 8893 while (len > 2) { 8894 output[_out++] = from_source[from++]; 8895 output[_out++] = from_source[from++]; 8896 output[_out++] = from_source[from++]; 8897 len -= 3; 8898 } 8899 if (len) { 8900 output[_out++] = from_source[from++]; 8901 if (len > 1) { 8902 output[_out++] = from_source[from++]; 8903 } 8904 } 8905 } else { 8906 from = _out - dist; 8907 do { 8908 output[_out++] = output[from++]; 8909 output[_out++] = output[from++]; 8910 output[_out++] = output[from++]; 8911 len -= 3; 8912 } while (len > 2); 8913 if (len) { 8914 output[_out++] = output[from++]; 8915 if (len > 1) { 8916 output[_out++] = output[from++]; 8917 } 8918 } 8919 } 8920 } else if ((op & 64) === 0) { 8921 here = dcode[(here & 65535) + (hold & (1 << op) - 1)]; 8922 continue dodist; 8923 } else { 8924 strm.msg = "invalid distance code"; 8925 state.mode = BAD; 8926 break top; 8927 } 8928 break; 8929 } 8930 } else if ((op & 64) === 0) { 8931 here = lcode[(here & 65535) + (hold & (1 << op) - 1)]; 8932 continue dolen; 8933 } else if (op & 32) { 8934 state.mode = TYPE; 8935 break top; 8936 } else { 8937 strm.msg = "invalid literal/length code"; 8938 state.mode = BAD; 8939 break top; 8940 } 8941 break; 8942 } 8943 } while (_in < last && _out < end); 8944 len = bits >> 3; 8945 _in -= len; 8946 bits -= len << 3; 8947 hold &= (1 << bits) - 1; 8948 strm.next_in = _in; 8949 strm.next_out = _out; 8950 strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last); 8951 strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end); 8952 state.hold = hold; 8953 state.bits = bits; 8954 return; 8955 }; 8956 }, 8957 {} 8958 ], 8959 8: [ 8960 function(require2, module2, exports2) { 8961 "use strict"; 8962 var utils = require2("../utils/common"); 8963 var adler32 = require2("./adler32"); 8964 var crc32 = require2("./crc32"); 8965 var inflate_fast = require2("./inffast"); 8966 var inflate_table = require2("./inftrees"); 8967 var CODES = 0; 8968 var LENS = 1; 8969 var DISTS = 2; 8970 var Z_FINISH = 4; 8971 var Z_BLOCK = 5; 8972 var Z_TREES = 6; 8973 var Z_OK = 0; 8974 var Z_STREAM_END = 1; 8975 var Z_NEED_DICT = 2; 8976 var Z_STREAM_ERROR = -2; 8977 var Z_DATA_ERROR = -3; 8978 var Z_MEM_ERROR = -4; 8979 var Z_BUF_ERROR = -5; 8980 var Z_DEFLATED = 8; 8981 var HEAD = 1; 8982 var FLAGS = 2; 8983 var TIME = 3; 8984 var OS = 4; 8985 var EXLEN = 5; 8986 var EXTRA = 6; 8987 var NAME = 7; 8988 var COMMENT = 8; 8989 var HCRC = 9; 8990 var DICTID = 10; 8991 var DICT = 11; 8992 var TYPE = 12; 8993 var TYPEDO = 13; 8994 var STORED = 14; 8995 var COPY_ = 15; 8996 var COPY = 16; 8997 var TABLE = 17; 8998 var LENLENS = 18; 8999 var CODELENS = 19; 9000 var LEN_ = 20; 9001 var LEN = 21; 9002 var LENEXT = 22; 9003 var DIST = 23; 9004 var DISTEXT = 24; 9005 var MATCH = 25; 9006 var LIT = 26; 9007 var CHECK = 27; 9008 var LENGTH = 28; 9009 var DONE = 29; 9010 var BAD = 30; 9011 var MEM = 31; 9012 var SYNC = 32; 9013 var ENOUGH_LENS = 852; 9014 var ENOUGH_DISTS = 592; 9015 var MAX_WBITS = 15; 9016 var DEF_WBITS = MAX_WBITS; 9017 function zswap32(q) { 9018 return (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24); 9019 } 9020 function InflateState() { 9021 this.mode = 0; 9022 this.last = false; 9023 this.wrap = 0; 9024 this.havedict = false; 9025 this.flags = 0; 9026 this.dmax = 0; 9027 this.check = 0; 9028 this.total = 0; 9029 this.head = null; 9030 this.wbits = 0; 9031 this.wsize = 0; 9032 this.whave = 0; 9033 this.wnext = 0; 9034 this.window = null; 9035 this.hold = 0; 9036 this.bits = 0; 9037 this.length = 0; 9038 this.offset = 0; 9039 this.extra = 0; 9040 this.lencode = null; 9041 this.distcode = null; 9042 this.lenbits = 0; 9043 this.distbits = 0; 9044 this.ncode = 0; 9045 this.nlen = 0; 9046 this.ndist = 0; 9047 this.have = 0; 9048 this.next = null; 9049 this.lens = new utils.Buf16( 9050 320 9051 ); 9052 this.work = new utils.Buf16( 9053 288 9054 ); 9055 this.lendyn = null; 9056 this.distdyn = null; 9057 this.sane = 0; 9058 this.back = 0; 9059 this.was = 0; 9060 } 9061 function inflateResetKeep(strm) { 9062 var state; 9063 if (!strm || !strm.state) { 9064 return Z_STREAM_ERROR; 9065 } 9066 state = strm.state; 9067 strm.total_in = strm.total_out = state.total = 0; 9068 strm.msg = ""; 9069 if (state.wrap) { 9070 strm.adler = state.wrap & 1; 9071 } 9072 state.mode = HEAD; 9073 state.last = 0; 9074 state.havedict = 0; 9075 state.dmax = 32768; 9076 state.head = null; 9077 state.hold = 0; 9078 state.bits = 0; 9079 state.lencode = state.lendyn = new utils.Buf32( 9080 ENOUGH_LENS 9081 ); 9082 state.distcode = state.distdyn = new utils.Buf32( 9083 ENOUGH_DISTS 9084 ); 9085 state.sane = 1; 9086 state.back = -1; 9087 return Z_OK; 9088 } 9089 function inflateReset(strm) { 9090 var state; 9091 if (!strm || !strm.state) { 9092 return Z_STREAM_ERROR; 9093 } 9094 state = strm.state; 9095 state.wsize = 0; 9096 state.whave = 0; 9097 state.wnext = 0; 9098 return inflateResetKeep(strm); 9099 } 9100 function inflateReset2(strm, windowBits) { 9101 var wrap; 9102 var state; 9103 if (!strm || !strm.state) { 9104 return Z_STREAM_ERROR; 9105 } 9106 state = strm.state; 9107 if (windowBits < 0) { 9108 wrap = 0; 9109 windowBits = -windowBits; 9110 } else { 9111 wrap = (windowBits >> 4) + 1; 9112 if (windowBits < 48) { 9113 windowBits &= 15; 9114 } 9115 } 9116 if (windowBits && (windowBits < 8 || windowBits > 15)) { 9117 return Z_STREAM_ERROR; 9118 } 9119 if (state.window !== null && state.wbits !== windowBits) { 9120 state.window = null; 9121 } 9122 state.wrap = wrap; 9123 state.wbits = windowBits; 9124 return inflateReset(strm); 9125 } 9126 function inflateInit2(strm, windowBits) { 9127 var ret; 9128 var state; 9129 if (!strm) { 9130 return Z_STREAM_ERROR; 9131 } 9132 state = new InflateState(); 9133 strm.state = state; 9134 state.window = null; 9135 ret = inflateReset2(strm, windowBits); 9136 if (ret !== Z_OK) { 9137 strm.state = null; 9138 } 9139 return ret; 9140 } 9141 function inflateInit(strm) { 9142 return inflateInit2(strm, DEF_WBITS); 9143 } 9144 var virgin = true; 9145 var lenfix, distfix; 9146 function fixedtables(state) { 9147 if (virgin) { 9148 var sym; 9149 lenfix = new utils.Buf32(512); 9150 distfix = new utils.Buf32(32); 9151 sym = 0; 9152 while (sym < 144) { 9153 state.lens[sym++] = 8; 9154 } 9155 while (sym < 256) { 9156 state.lens[sym++] = 9; 9157 } 9158 while (sym < 280) { 9159 state.lens[sym++] = 7; 9160 } 9161 while (sym < 288) { 9162 state.lens[sym++] = 8; 9163 } 9164 inflate_table( 9165 LENS, 9166 state.lens, 9167 0, 9168 288, 9169 lenfix, 9170 0, 9171 state.work, 9172 { bits: 9 } 9173 ); 9174 sym = 0; 9175 while (sym < 32) { 9176 state.lens[sym++] = 5; 9177 } 9178 inflate_table( 9179 DISTS, 9180 state.lens, 9181 0, 9182 32, 9183 distfix, 9184 0, 9185 state.work, 9186 { bits: 5 } 9187 ); 9188 virgin = false; 9189 } 9190 state.lencode = lenfix; 9191 state.lenbits = 9; 9192 state.distcode = distfix; 9193 state.distbits = 5; 9194 } 9195 function updatewindow(strm, src, end, copy) { 9196 var dist; 9197 var state = strm.state; 9198 if (state.window === null) { 9199 state.wsize = 1 << state.wbits; 9200 state.wnext = 0; 9201 state.whave = 0; 9202 state.window = new utils.Buf8(state.wsize); 9203 } 9204 if (copy >= state.wsize) { 9205 utils.arraySet( 9206 state.window, 9207 src, 9208 end - state.wsize, 9209 state.wsize, 9210 0 9211 ); 9212 state.wnext = 0; 9213 state.whave = state.wsize; 9214 } else { 9215 dist = state.wsize - state.wnext; 9216 if (dist > copy) { 9217 dist = copy; 9218 } 9219 utils.arraySet( 9220 state.window, 9221 src, 9222 end - copy, 9223 dist, 9224 state.wnext 9225 ); 9226 copy -= dist; 9227 if (copy) { 9228 utils.arraySet( 9229 state.window, 9230 src, 9231 end - copy, 9232 copy, 9233 0 9234 ); 9235 state.wnext = copy; 9236 state.whave = state.wsize; 9237 } else { 9238 state.wnext += dist; 9239 if (state.wnext === state.wsize) { 9240 state.wnext = 0; 9241 } 9242 if (state.whave < state.wsize) { 9243 state.whave += dist; 9244 } 9245 } 9246 } 9247 return 0; 9248 } 9249 function inflate(strm, flush) { 9250 var state; 9251 var input, output; 9252 var next; 9253 var put; 9254 var have, left; 9255 var hold; 9256 var bits; 9257 var _in, _out; 9258 var copy; 9259 var from; 9260 var from_source; 9261 var here = 0; 9262 var here_bits, here_op, here_val; 9263 var last_bits, last_op, last_val; 9264 var len; 9265 var ret; 9266 var hbuf = new utils.Buf8( 9267 4 9268 ); 9269 var opts; 9270 var n2; 9271 var order = ( 9272 /* permutation of code lengths */ 9273 [ 9274 16, 9275 17, 9276 18, 9277 0, 9278 8, 9279 7, 9280 9, 9281 6, 9282 10, 9283 5, 9284 11, 9285 4, 9286 12, 9287 3, 9288 13, 9289 2, 9290 14, 9291 1, 9292 15 9293 ] 9294 ); 9295 if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) { 9296 return Z_STREAM_ERROR; 9297 } 9298 state = strm.state; 9299 if (state.mode === TYPE) { 9300 state.mode = TYPEDO; 9301 } 9302 put = strm.next_out; 9303 output = strm.output; 9304 left = strm.avail_out; 9305 next = strm.next_in; 9306 input = strm.input; 9307 have = strm.avail_in; 9308 hold = state.hold; 9309 bits = state.bits; 9310 _in = have; 9311 _out = left; 9312 ret = Z_OK; 9313 inf_leave: for (; ; ) { 9314 switch (state.mode) { 9315 case HEAD: 9316 if (state.wrap === 0) { 9317 state.mode = TYPEDO; 9318 break; 9319 } 9320 while (bits < 16) { 9321 if (have === 0) { 9322 break inf_leave; 9323 } 9324 have--; 9325 hold += input[next++] << bits; 9326 bits += 8; 9327 } 9328 if (state.wrap & 2 && hold === 35615) { 9329 state.check = 0; 9330 hbuf[0] = hold & 255; 9331 hbuf[1] = hold >>> 8 & 255; 9332 state.check = crc32( 9333 state.check, 9334 hbuf, 9335 2, 9336 0 9337 ); 9338 hold = 0; 9339 bits = 0; 9340 state.mode = FLAGS; 9341 break; 9342 } 9343 state.flags = 0; 9344 if (state.head) { 9345 state.head.done = false; 9346 } 9347 if (!(state.wrap & 1) || (((hold & 255) << 8) + (hold >> 8)) % 31) { 9348 strm.msg = "incorrect header check"; 9349 state.mode = BAD; 9350 break; 9351 } 9352 if ((hold & 15) !== Z_DEFLATED) { 9353 strm.msg = "unknown compression method"; 9354 state.mode = BAD; 9355 break; 9356 } 9357 hold >>>= 4; 9358 bits -= 4; 9359 len = (hold & 15) + 8; 9360 if (state.wbits === 0) { 9361 state.wbits = len; 9362 } else if (len > state.wbits) { 9363 strm.msg = "invalid window size"; 9364 state.mode = BAD; 9365 break; 9366 } 9367 state.dmax = 1 << len; 9368 strm.adler = state.check = 1; 9369 state.mode = hold & 512 ? DICTID : TYPE; 9370 hold = 0; 9371 bits = 0; 9372 break; 9373 case FLAGS: 9374 while (bits < 16) { 9375 if (have === 0) { 9376 break inf_leave; 9377 } 9378 have--; 9379 hold += input[next++] << bits; 9380 bits += 8; 9381 } 9382 state.flags = hold; 9383 if ((state.flags & 255) !== Z_DEFLATED) { 9384 strm.msg = "unknown compression method"; 9385 state.mode = BAD; 9386 break; 9387 } 9388 if (state.flags & 57344) { 9389 strm.msg = "unknown header flags set"; 9390 state.mode = BAD; 9391 break; 9392 } 9393 if (state.head) { 9394 state.head.text = hold >> 8 & 1; 9395 } 9396 if (state.flags & 512) { 9397 hbuf[0] = hold & 255; 9398 hbuf[1] = hold >>> 8 & 255; 9399 state.check = crc32( 9400 state.check, 9401 hbuf, 9402 2, 9403 0 9404 ); 9405 } 9406 hold = 0; 9407 bits = 0; 9408 state.mode = TIME; 9409 /* falls through */ 9410 case TIME: 9411 while (bits < 32) { 9412 if (have === 0) { 9413 break inf_leave; 9414 } 9415 have--; 9416 hold += input[next++] << bits; 9417 bits += 8; 9418 } 9419 if (state.head) { 9420 state.head.time = hold; 9421 } 9422 if (state.flags & 512) { 9423 hbuf[0] = hold & 255; 9424 hbuf[1] = hold >>> 8 & 255; 9425 hbuf[2] = hold >>> 16 & 255; 9426 hbuf[3] = hold >>> 24 & 255; 9427 state.check = crc32( 9428 state.check, 9429 hbuf, 9430 4, 9431 0 9432 ); 9433 } 9434 hold = 0; 9435 bits = 0; 9436 state.mode = OS; 9437 /* falls through */ 9438 case OS: 9439 while (bits < 16) { 9440 if (have === 0) { 9441 break inf_leave; 9442 } 9443 have--; 9444 hold += input[next++] << bits; 9445 bits += 8; 9446 } 9447 if (state.head) { 9448 state.head.xflags = hold & 255; 9449 state.head.os = hold >> 8; 9450 } 9451 if (state.flags & 512) { 9452 hbuf[0] = hold & 255; 9453 hbuf[1] = hold >>> 8 & 255; 9454 state.check = crc32( 9455 state.check, 9456 hbuf, 9457 2, 9458 0 9459 ); 9460 } 9461 hold = 0; 9462 bits = 0; 9463 state.mode = EXLEN; 9464 /* falls through */ 9465 case EXLEN: 9466 if (state.flags & 1024) { 9467 while (bits < 16) { 9468 if (have === 0) { 9469 break inf_leave; 9470 } 9471 have--; 9472 hold += input[next++] << bits; 9473 bits += 8; 9474 } 9475 state.length = hold; 9476 if (state.head) { 9477 state.head.extra_len = hold; 9478 } 9479 if (state.flags & 512) { 9480 hbuf[0] = hold & 255; 9481 hbuf[1] = hold >>> 8 & 255; 9482 state.check = crc32( 9483 state.check, 9484 hbuf, 9485 2, 9486 0 9487 ); 9488 } 9489 hold = 0; 9490 bits = 0; 9491 } else if (state.head) { 9492 state.head.extra = null; 9493 } 9494 state.mode = EXTRA; 9495 /* falls through */ 9496 case EXTRA: 9497 if (state.flags & 1024) { 9498 copy = state.length; 9499 if (copy > have) { 9500 copy = have; 9501 } 9502 if (copy) { 9503 if (state.head) { 9504 len = state.head.extra_len - state.length; 9505 if (!state.head.extra) { 9506 state.head.extra = new Array( 9507 state.head.extra_len 9508 ); 9509 } 9510 utils.arraySet( 9511 state.head.extra, 9512 input, 9513 next, 9514 // extra field is limited to 65536 bytes 9515 // - no need for additional size check 9516 copy, 9517 /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ 9518 len 9519 ); 9520 } 9521 if (state.flags & 512) { 9522 state.check = crc32( 9523 state.check, 9524 input, 9525 copy, 9526 next 9527 ); 9528 } 9529 have -= copy; 9530 next += copy; 9531 state.length -= copy; 9532 } 9533 if (state.length) { 9534 break inf_leave; 9535 } 9536 } 9537 state.length = 0; 9538 state.mode = NAME; 9539 /* falls through */ 9540 case NAME: 9541 if (state.flags & 2048) { 9542 if (have === 0) { 9543 break inf_leave; 9544 } 9545 copy = 0; 9546 do { 9547 len = input[next + copy++]; 9548 if (state.head && len && state.length < 65536) { 9549 state.head.name += String.fromCharCode(len); 9550 } 9551 } while (len && copy < have); 9552 if (state.flags & 512) { 9553 state.check = crc32( 9554 state.check, 9555 input, 9556 copy, 9557 next 9558 ); 9559 } 9560 have -= copy; 9561 next += copy; 9562 if (len) { 9563 break inf_leave; 9564 } 9565 } else if (state.head) { 9566 state.head.name = null; 9567 } 9568 state.length = 0; 9569 state.mode = COMMENT; 9570 /* falls through */ 9571 case COMMENT: 9572 if (state.flags & 4096) { 9573 if (have === 0) { 9574 break inf_leave; 9575 } 9576 copy = 0; 9577 do { 9578 len = input[next + copy++]; 9579 if (state.head && len && state.length < 65536) { 9580 state.head.comment += String.fromCharCode(len); 9581 } 9582 } while (len && copy < have); 9583 if (state.flags & 512) { 9584 state.check = crc32( 9585 state.check, 9586 input, 9587 copy, 9588 next 9589 ); 9590 } 9591 have -= copy; 9592 next += copy; 9593 if (len) { 9594 break inf_leave; 9595 } 9596 } else if (state.head) { 9597 state.head.comment = null; 9598 } 9599 state.mode = HCRC; 9600 /* falls through */ 9601 case HCRC: 9602 if (state.flags & 512) { 9603 while (bits < 16) { 9604 if (have === 0) { 9605 break inf_leave; 9606 } 9607 have--; 9608 hold += input[next++] << bits; 9609 bits += 8; 9610 } 9611 if (hold !== (state.check & 65535)) { 9612 strm.msg = "header crc mismatch"; 9613 state.mode = BAD; 9614 break; 9615 } 9616 hold = 0; 9617 bits = 0; 9618 } 9619 if (state.head) { 9620 state.head.hcrc = state.flags >> 9 & 1; 9621 state.head.done = true; 9622 } 9623 strm.adler = state.check = 0; 9624 state.mode = TYPE; 9625 break; 9626 case DICTID: 9627 while (bits < 32) { 9628 if (have === 0) { 9629 break inf_leave; 9630 } 9631 have--; 9632 hold += input[next++] << bits; 9633 bits += 8; 9634 } 9635 strm.adler = state.check = zswap32(hold); 9636 hold = 0; 9637 bits = 0; 9638 state.mode = DICT; 9639 /* falls through */ 9640 case DICT: 9641 if (state.havedict === 0) { 9642 strm.next_out = put; 9643 strm.avail_out = left; 9644 strm.next_in = next; 9645 strm.avail_in = have; 9646 state.hold = hold; 9647 state.bits = bits; 9648 return Z_NEED_DICT; 9649 } 9650 strm.adler = state.check = 1; 9651 state.mode = TYPE; 9652 /* falls through */ 9653 case TYPE: 9654 if (flush === Z_BLOCK || flush === Z_TREES) { 9655 break inf_leave; 9656 } 9657 /* falls through */ 9658 case TYPEDO: 9659 if (state.last) { 9660 hold >>>= bits & 7; 9661 bits -= bits & 7; 9662 state.mode = CHECK; 9663 break; 9664 } 9665 while (bits < 3) { 9666 if (have === 0) { 9667 break inf_leave; 9668 } 9669 have--; 9670 hold += input[next++] << bits; 9671 bits += 8; 9672 } 9673 state.last = hold & 1; 9674 hold >>>= 1; 9675 bits -= 1; 9676 switch (hold & 3) { 9677 case 0: 9678 state.mode = STORED; 9679 break; 9680 case 1: 9681 fixedtables(state); 9682 state.mode = LEN_; 9683 if (flush === Z_TREES) { 9684 hold >>>= 2; 9685 bits -= 2; 9686 break inf_leave; 9687 } 9688 break; 9689 case 2: 9690 state.mode = TABLE; 9691 break; 9692 case 3: 9693 strm.msg = "invalid block type"; 9694 state.mode = BAD; 9695 } 9696 hold >>>= 2; 9697 bits -= 2; 9698 break; 9699 case STORED: 9700 hold >>>= bits & 7; 9701 bits -= bits & 7; 9702 while (bits < 32) { 9703 if (have === 0) { 9704 break inf_leave; 9705 } 9706 have--; 9707 hold += input[next++] << bits; 9708 bits += 8; 9709 } 9710 if ((hold & 65535) !== (hold >>> 16 ^ 65535)) { 9711 strm.msg = "invalid stored block lengths"; 9712 state.mode = BAD; 9713 break; 9714 } 9715 state.length = hold & 65535; 9716 hold = 0; 9717 bits = 0; 9718 state.mode = COPY_; 9719 if (flush === Z_TREES) { 9720 break inf_leave; 9721 } 9722 /* falls through */ 9723 case COPY_: 9724 state.mode = COPY; 9725 /* falls through */ 9726 case COPY: 9727 copy = state.length; 9728 if (copy) { 9729 if (copy > have) { 9730 copy = have; 9731 } 9732 if (copy > left) { 9733 copy = left; 9734 } 9735 if (copy === 0) { 9736 break inf_leave; 9737 } 9738 utils.arraySet( 9739 output, 9740 input, 9741 next, 9742 copy, 9743 put 9744 ); 9745 have -= copy; 9746 next += copy; 9747 left -= copy; 9748 put += copy; 9749 state.length -= copy; 9750 break; 9751 } 9752 state.mode = TYPE; 9753 break; 9754 case TABLE: 9755 while (bits < 14) { 9756 if (have === 0) { 9757 break inf_leave; 9758 } 9759 have--; 9760 hold += input[next++] << bits; 9761 bits += 8; 9762 } 9763 state.nlen = (hold & 31) + 257; 9764 hold >>>= 5; 9765 bits -= 5; 9766 state.ndist = (hold & 31) + 1; 9767 hold >>>= 5; 9768 bits -= 5; 9769 state.ncode = (hold & 15) + 4; 9770 hold >>>= 4; 9771 bits -= 4; 9772 if (state.nlen > 286 || state.ndist > 30) { 9773 strm.msg = "too many length or distance symbols"; 9774 state.mode = BAD; 9775 break; 9776 } 9777 state.have = 0; 9778 state.mode = LENLENS; 9779 /* falls through */ 9780 case LENLENS: 9781 while (state.have < state.ncode) { 9782 while (bits < 3) { 9783 if (have === 0) { 9784 break inf_leave; 9785 } 9786 have--; 9787 hold += input[next++] << bits; 9788 bits += 8; 9789 } 9790 state.lens[order[state.have++]] = hold & 7; 9791 hold >>>= 3; 9792 bits -= 3; 9793 } 9794 while (state.have < 19) { 9795 state.lens[order[state.have++]] = 0; 9796 } 9797 state.lencode = state.lendyn; 9798 state.lenbits = 7; 9799 opts = { bits: state.lenbits }; 9800 ret = inflate_table( 9801 CODES, 9802 state.lens, 9803 0, 9804 19, 9805 state.lencode, 9806 0, 9807 state.work, 9808 opts 9809 ); 9810 state.lenbits = opts.bits; 9811 if (ret) { 9812 strm.msg = "invalid code lengths set"; 9813 state.mode = BAD; 9814 break; 9815 } 9816 state.have = 0; 9817 state.mode = CODELENS; 9818 /* falls through */ 9819 case CODELENS: 9820 while (state.have < state.nlen + state.ndist) { 9821 for (; ; ) { 9822 here = state.lencode[hold & (1 << state.lenbits) - 1]; 9823 here_bits = here >>> 24; 9824 here_op = here >>> 16 & 255; 9825 here_val = here & 65535; 9826 if (here_bits <= bits) { 9827 break; 9828 } 9829 if (have === 0) { 9830 break inf_leave; 9831 } 9832 have--; 9833 hold += input[next++] << bits; 9834 bits += 8; 9835 } 9836 if (here_val < 16) { 9837 hold >>>= here_bits; 9838 bits -= here_bits; 9839 state.lens[state.have++] = here_val; 9840 } else { 9841 if (here_val === 16) { 9842 n2 = here_bits + 2; 9843 while (bits < n2) { 9844 if (have === 0) { 9845 break inf_leave; 9846 } 9847 have--; 9848 hold += input[next++] << bits; 9849 bits += 8; 9850 } 9851 hold >>>= here_bits; 9852 bits -= here_bits; 9853 if (state.have === 0) { 9854 strm.msg = "invalid bit length repeat"; 9855 state.mode = BAD; 9856 break; 9857 } 9858 len = state.lens[state.have - 1]; 9859 copy = 3 + (hold & 3); 9860 hold >>>= 2; 9861 bits -= 2; 9862 } else if (here_val === 17) { 9863 n2 = here_bits + 3; 9864 while (bits < n2) { 9865 if (have === 0) { 9866 break inf_leave; 9867 } 9868 have--; 9869 hold += input[next++] << bits; 9870 bits += 8; 9871 } 9872 hold >>>= here_bits; 9873 bits -= here_bits; 9874 len = 0; 9875 copy = 3 + (hold & 7); 9876 hold >>>= 3; 9877 bits -= 3; 9878 } else { 9879 n2 = here_bits + 7; 9880 while (bits < n2) { 9881 if (have === 0) { 9882 break inf_leave; 9883 } 9884 have--; 9885 hold += input[next++] << bits; 9886 bits += 8; 9887 } 9888 hold >>>= here_bits; 9889 bits -= here_bits; 9890 len = 0; 9891 copy = 11 + (hold & 127); 9892 hold >>>= 7; 9893 bits -= 7; 9894 } 9895 if (state.have + copy > state.nlen + state.ndist) { 9896 strm.msg = "invalid bit length repeat"; 9897 state.mode = BAD; 9898 break; 9899 } 9900 while (copy--) { 9901 state.lens[state.have++] = len; 9902 } 9903 } 9904 } 9905 if (state.mode === BAD) { 9906 break; 9907 } 9908 if (state.lens[256] === 0) { 9909 strm.msg = "invalid code -- missing end-of-block"; 9910 state.mode = BAD; 9911 break; 9912 } 9913 state.lenbits = 9; 9914 opts = { bits: state.lenbits }; 9915 ret = inflate_table( 9916 LENS, 9917 state.lens, 9918 0, 9919 state.nlen, 9920 state.lencode, 9921 0, 9922 state.work, 9923 opts 9924 ); 9925 state.lenbits = opts.bits; 9926 if (ret) { 9927 strm.msg = "invalid literal/lengths set"; 9928 state.mode = BAD; 9929 break; 9930 } 9931 state.distbits = 6; 9932 state.distcode = state.distdyn; 9933 opts = { bits: state.distbits }; 9934 ret = inflate_table( 9935 DISTS, 9936 state.lens, 9937 state.nlen, 9938 state.ndist, 9939 state.distcode, 9940 0, 9941 state.work, 9942 opts 9943 ); 9944 state.distbits = opts.bits; 9945 if (ret) { 9946 strm.msg = "invalid distances set"; 9947 state.mode = BAD; 9948 break; 9949 } 9950 state.mode = LEN_; 9951 if (flush === Z_TREES) { 9952 break inf_leave; 9953 } 9954 /* falls through */ 9955 case LEN_: 9956 state.mode = LEN; 9957 /* falls through */ 9958 case LEN: 9959 if (have >= 6 && left >= 258) { 9960 strm.next_out = put; 9961 strm.avail_out = left; 9962 strm.next_in = next; 9963 strm.avail_in = have; 9964 state.hold = hold; 9965 state.bits = bits; 9966 inflate_fast(strm, _out); 9967 put = strm.next_out; 9968 output = strm.output; 9969 left = strm.avail_out; 9970 next = strm.next_in; 9971 input = strm.input; 9972 have = strm.avail_in; 9973 hold = state.hold; 9974 bits = state.bits; 9975 if (state.mode === TYPE) { 9976 state.back = -1; 9977 } 9978 break; 9979 } 9980 state.back = 0; 9981 for (; ; ) { 9982 here = state.lencode[hold & (1 << state.lenbits) - 1]; 9983 here_bits = here >>> 24; 9984 here_op = here >>> 16 & 255; 9985 here_val = here & 65535; 9986 if (here_bits <= bits) { 9987 break; 9988 } 9989 if (have === 0) { 9990 break inf_leave; 9991 } 9992 have--; 9993 hold += input[next++] << bits; 9994 bits += 8; 9995 } 9996 if (here_op && (here_op & 240) === 0) { 9997 last_bits = here_bits; 9998 last_op = here_op; 9999 last_val = here_val; 10000 for (; ; ) { 10001 here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; 10002 here_bits = here >>> 24; 10003 here_op = here >>> 16 & 255; 10004 here_val = here & 65535; 10005 if (last_bits + here_bits <= bits) { 10006 break; 10007 } 10008 if (have === 0) { 10009 break inf_leave; 10010 } 10011 have--; 10012 hold += input[next++] << bits; 10013 bits += 8; 10014 } 10015 hold >>>= last_bits; 10016 bits -= last_bits; 10017 state.back += last_bits; 10018 } 10019 hold >>>= here_bits; 10020 bits -= here_bits; 10021 state.back += here_bits; 10022 state.length = here_val; 10023 if (here_op === 0) { 10024 state.mode = LIT; 10025 break; 10026 } 10027 if (here_op & 32) { 10028 state.back = -1; 10029 state.mode = TYPE; 10030 break; 10031 } 10032 if (here_op & 64) { 10033 strm.msg = "invalid literal/length code"; 10034 state.mode = BAD; 10035 break; 10036 } 10037 state.extra = here_op & 15; 10038 state.mode = LENEXT; 10039 /* falls through */ 10040 case LENEXT: 10041 if (state.extra) { 10042 n2 = state.extra; 10043 while (bits < n2) { 10044 if (have === 0) { 10045 break inf_leave; 10046 } 10047 have--; 10048 hold += input[next++] << bits; 10049 bits += 8; 10050 } 10051 state.length += hold & (1 << state.extra) - 1; 10052 hold >>>= state.extra; 10053 bits -= state.extra; 10054 state.back += state.extra; 10055 } 10056 state.was = state.length; 10057 state.mode = DIST; 10058 /* falls through */ 10059 case DIST: 10060 for (; ; ) { 10061 here = state.distcode[hold & (1 << state.distbits) - 1]; 10062 here_bits = here >>> 24; 10063 here_op = here >>> 16 & 255; 10064 here_val = here & 65535; 10065 if (here_bits <= bits) { 10066 break; 10067 } 10068 if (have === 0) { 10069 break inf_leave; 10070 } 10071 have--; 10072 hold += input[next++] << bits; 10073 bits += 8; 10074 } 10075 if ((here_op & 240) === 0) { 10076 last_bits = here_bits; 10077 last_op = here_op; 10078 last_val = here_val; 10079 for (; ; ) { 10080 here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; 10081 here_bits = here >>> 24; 10082 here_op = here >>> 16 & 255; 10083 here_val = here & 65535; 10084 if (last_bits + here_bits <= bits) { 10085 break; 10086 } 10087 if (have === 0) { 10088 break inf_leave; 10089 } 10090 have--; 10091 hold += input[next++] << bits; 10092 bits += 8; 10093 } 10094 hold >>>= last_bits; 10095 bits -= last_bits; 10096 state.back += last_bits; 10097 } 10098 hold >>>= here_bits; 10099 bits -= here_bits; 10100 state.back += here_bits; 10101 if (here_op & 64) { 10102 strm.msg = "invalid distance code"; 10103 state.mode = BAD; 10104 break; 10105 } 10106 state.offset = here_val; 10107 state.extra = here_op & 15; 10108 state.mode = DISTEXT; 10109 /* falls through */ 10110 case DISTEXT: 10111 if (state.extra) { 10112 n2 = state.extra; 10113 while (bits < n2) { 10114 if (have === 0) { 10115 break inf_leave; 10116 } 10117 have--; 10118 hold += input[next++] << bits; 10119 bits += 8; 10120 } 10121 state.offset += hold & (1 << state.extra) - 1; 10122 hold >>>= state.extra; 10123 bits -= state.extra; 10124 state.back += state.extra; 10125 } 10126 if (state.offset > state.dmax) { 10127 strm.msg = "invalid distance too far back"; 10128 state.mode = BAD; 10129 break; 10130 } 10131 state.mode = MATCH; 10132 /* falls through */ 10133 case MATCH: 10134 if (left === 0) { 10135 break inf_leave; 10136 } 10137 copy = _out - left; 10138 if (state.offset > copy) { 10139 copy = state.offset - copy; 10140 if (copy > state.whave) { 10141 if (state.sane) { 10142 strm.msg = "invalid distance too far back"; 10143 state.mode = BAD; 10144 break; 10145 } 10146 } 10147 if (copy > state.wnext) { 10148 copy -= state.wnext; 10149 from = state.wsize - copy; 10150 } else { 10151 from = state.wnext - copy; 10152 } 10153 if (copy > state.length) { 10154 copy = state.length; 10155 } 10156 from_source = state.window; 10157 } else { 10158 from_source = output; 10159 from = put - state.offset; 10160 copy = state.length; 10161 } 10162 if (copy > left) { 10163 copy = left; 10164 } 10165 left -= copy; 10166 state.length -= copy; 10167 do { 10168 output[put++] = from_source[from++]; 10169 } while (--copy); 10170 if (state.length === 0) { 10171 state.mode = LEN; 10172 } 10173 break; 10174 case LIT: 10175 if (left === 0) { 10176 break inf_leave; 10177 } 10178 output[put++] = state.length; 10179 left--; 10180 state.mode = LEN; 10181 break; 10182 case CHECK: 10183 if (state.wrap) { 10184 while (bits < 32) { 10185 if (have === 0) { 10186 break inf_leave; 10187 } 10188 have--; 10189 hold |= input[next++] << bits; 10190 bits += 8; 10191 } 10192 _out -= left; 10193 strm.total_out += _out; 10194 state.total += _out; 10195 if (_out) { 10196 strm.adler = state.check = /*UPDATE(state.check, put - _out, _out);*/ 10197 state.flags ? crc32( 10198 state.check, 10199 output, 10200 _out, 10201 put - _out 10202 ) : adler32( 10203 state.check, 10204 output, 10205 _out, 10206 put - _out 10207 ); 10208 } 10209 _out = left; 10210 if ((state.flags ? hold : zswap32(hold)) !== state.check) { 10211 strm.msg = "incorrect data check"; 10212 state.mode = BAD; 10213 break; 10214 } 10215 hold = 0; 10216 bits = 0; 10217 } 10218 state.mode = LENGTH; 10219 /* falls through */ 10220 case LENGTH: 10221 if (state.wrap && state.flags) { 10222 while (bits < 32) { 10223 if (have === 0) { 10224 break inf_leave; 10225 } 10226 have--; 10227 hold += input[next++] << bits; 10228 bits += 8; 10229 } 10230 if (hold !== (state.total & 4294967295)) { 10231 strm.msg = "incorrect length check"; 10232 state.mode = BAD; 10233 break; 10234 } 10235 hold = 0; 10236 bits = 0; 10237 } 10238 state.mode = DONE; 10239 /* falls through */ 10240 case DONE: 10241 ret = Z_STREAM_END; 10242 break inf_leave; 10243 case BAD: 10244 ret = Z_DATA_ERROR; 10245 break inf_leave; 10246 case MEM: 10247 return Z_MEM_ERROR; 10248 case SYNC: 10249 /* falls through */ 10250 default: 10251 return Z_STREAM_ERROR; 10252 } 10253 } 10254 strm.next_out = put; 10255 strm.avail_out = left; 10256 strm.next_in = next; 10257 strm.avail_in = have; 10258 state.hold = hold; 10259 state.bits = bits; 10260 if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) { 10261 if (updatewindow( 10262 strm, 10263 strm.output, 10264 strm.next_out, 10265 _out - strm.avail_out 10266 )) { 10267 state.mode = MEM; 10268 return Z_MEM_ERROR; 10269 } 10270 } 10271 _in -= strm.avail_in; 10272 _out -= strm.avail_out; 10273 strm.total_in += _in; 10274 strm.total_out += _out; 10275 state.total += _out; 10276 if (state.wrap && _out) { 10277 strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ 10278 state.flags ? crc32( 10279 state.check, 10280 output, 10281 _out, 10282 strm.next_out - _out 10283 ) : adler32( 10284 state.check, 10285 output, 10286 _out, 10287 strm.next_out - _out 10288 ); 10289 } 10290 strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); 10291 if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) { 10292 ret = Z_BUF_ERROR; 10293 } 10294 return ret; 10295 } 10296 function inflateEnd(strm) { 10297 if (!strm || !strm.state) { 10298 return Z_STREAM_ERROR; 10299 } 10300 var state = strm.state; 10301 if (state.window) { 10302 state.window = null; 10303 } 10304 strm.state = null; 10305 return Z_OK; 10306 } 10307 function inflateGetHeader(strm, head2) { 10308 var state; 10309 if (!strm || !strm.state) { 10310 return Z_STREAM_ERROR; 10311 } 10312 state = strm.state; 10313 if ((state.wrap & 2) === 0) { 10314 return Z_STREAM_ERROR; 10315 } 10316 state.head = head2; 10317 head2.done = false; 10318 return Z_OK; 10319 } 10320 function inflateSetDictionary(strm, dictionary) { 10321 var dictLength = dictionary.length; 10322 var state; 10323 var dictid; 10324 var ret; 10325 if (!strm || !strm.state) { 10326 return Z_STREAM_ERROR; 10327 } 10328 state = strm.state; 10329 if (state.wrap !== 0 && state.mode !== DICT) { 10330 return Z_STREAM_ERROR; 10331 } 10332 if (state.mode === DICT) { 10333 dictid = 1; 10334 dictid = adler32( 10335 dictid, 10336 dictionary, 10337 dictLength, 10338 0 10339 ); 10340 if (dictid !== state.check) { 10341 return Z_DATA_ERROR; 10342 } 10343 } 10344 ret = updatewindow( 10345 strm, 10346 dictionary, 10347 dictLength, 10348 dictLength 10349 ); 10350 if (ret) { 10351 state.mode = MEM; 10352 return Z_MEM_ERROR; 10353 } 10354 state.havedict = 1; 10355 return Z_OK; 10356 } 10357 exports2.inflateReset = inflateReset; 10358 exports2.inflateReset2 = inflateReset2; 10359 exports2.inflateResetKeep = inflateResetKeep; 10360 exports2.inflateInit = inflateInit; 10361 exports2.inflateInit2 = inflateInit2; 10362 exports2.inflate = inflate; 10363 exports2.inflateEnd = inflateEnd; 10364 exports2.inflateGetHeader = inflateGetHeader; 10365 exports2.inflateSetDictionary = inflateSetDictionary; 10366 exports2.inflateInfo = "pako inflate (from Nodeca project)"; 10367 }, 10368 { 10369 "../utils/common": 1, 10370 "./adler32": 3, 10371 "./crc32": 5, 10372 "./inffast": 7, 10373 "./inftrees": 9 10374 } 10375 ], 10376 9: [ 10377 function(require2, module2, exports2) { 10378 "use strict"; 10379 var utils = require2("../utils/common"); 10380 var MAXBITS = 15; 10381 var ENOUGH_LENS = 852; 10382 var ENOUGH_DISTS = 592; 10383 var CODES = 0; 10384 var LENS = 1; 10385 var DISTS = 2; 10386 var lbase = [ 10387 /* Length codes 257..285 base */ 10388 3, 10389 4, 10390 5, 10391 6, 10392 7, 10393 8, 10394 9, 10395 10, 10396 11, 10397 13, 10398 15, 10399 17, 10400 19, 10401 23, 10402 27, 10403 31, 10404 35, 10405 43, 10406 51, 10407 59, 10408 67, 10409 83, 10410 99, 10411 115, 10412 131, 10413 163, 10414 195, 10415 227, 10416 258, 10417 0, 10418 0 10419 ]; 10420 var lext = [ 10421 /* Length codes 257..285 extra */ 10422 16, 10423 16, 10424 16, 10425 16, 10426 16, 10427 16, 10428 16, 10429 16, 10430 17, 10431 17, 10432 17, 10433 17, 10434 18, 10435 18, 10436 18, 10437 18, 10438 19, 10439 19, 10440 19, 10441 19, 10442 20, 10443 20, 10444 20, 10445 20, 10446 21, 10447 21, 10448 21, 10449 21, 10450 16, 10451 72, 10452 78 10453 ]; 10454 var dbase = [ 10455 /* Distance codes 0..29 base */ 10456 1, 10457 2, 10458 3, 10459 4, 10460 5, 10461 7, 10462 9, 10463 13, 10464 17, 10465 25, 10466 33, 10467 49, 10468 65, 10469 97, 10470 129, 10471 193, 10472 257, 10473 385, 10474 513, 10475 769, 10476 1025, 10477 1537, 10478 2049, 10479 3073, 10480 4097, 10481 6145, 10482 8193, 10483 12289, 10484 16385, 10485 24577, 10486 0, 10487 0 10488 ]; 10489 var dext = [ 10490 /* Distance codes 0..29 extra */ 10491 16, 10492 16, 10493 16, 10494 16, 10495 17, 10496 17, 10497 18, 10498 18, 10499 19, 10500 19, 10501 20, 10502 20, 10503 21, 10504 21, 10505 22, 10506 22, 10507 23, 10508 23, 10509 24, 10510 24, 10511 25, 10512 25, 10513 26, 10514 26, 10515 27, 10516 27, 10517 28, 10518 28, 10519 29, 10520 29, 10521 64, 10522 64 10523 ]; 10524 module2.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) { 10525 var bits = opts.bits; 10526 var len = 0; 10527 var sym = 0; 10528 var min = 0, max = 0; 10529 var root = 0; 10530 var curr = 0; 10531 var drop = 0; 10532 var left = 0; 10533 var used = 0; 10534 var huff = 0; 10535 var incr; 10536 var fill; 10537 var low; 10538 var mask; 10539 var next; 10540 var base = null; 10541 var base_index = 0; 10542 var end; 10543 var count = new utils.Buf16(MAXBITS + 1); 10544 var offs = new utils.Buf16(MAXBITS + 1); 10545 var extra = null; 10546 var extra_index = 0; 10547 var here_bits, here_op, here_val; 10548 for (len = 0; len <= MAXBITS; len++) { 10549 count[len] = 0; 10550 } 10551 for (sym = 0; sym < codes; sym++) { 10552 count[lens[lens_index + sym]]++; 10553 } 10554 root = bits; 10555 for (max = MAXBITS; max >= 1; max--) { 10556 if (count[max] !== 0) { 10557 break; 10558 } 10559 } 10560 if (root > max) { 10561 root = max; 10562 } 10563 if (max === 0) { 10564 table[table_index++] = 1 << 24 | 64 << 16 | 0; 10565 table[table_index++] = 1 << 24 | 64 << 16 | 0; 10566 opts.bits = 1; 10567 return 0; 10568 } 10569 for (min = 1; min < max; min++) { 10570 if (count[min] !== 0) { 10571 break; 10572 } 10573 } 10574 if (root < min) { 10575 root = min; 10576 } 10577 left = 1; 10578 for (len = 1; len <= MAXBITS; len++) { 10579 left <<= 1; 10580 left -= count[len]; 10581 if (left < 0) { 10582 return -1; 10583 } 10584 } 10585 if (left > 0 && (type === CODES || max !== 1)) { 10586 return -1; 10587 } 10588 offs[1] = 0; 10589 for (len = 1; len < MAXBITS; len++) { 10590 offs[len + 1] = offs[len] + count[len]; 10591 } 10592 for (sym = 0; sym < codes; sym++) { 10593 if (lens[lens_index + sym] !== 0) { 10594 work[offs[lens[lens_index + sym]]++] = sym; 10595 } 10596 } 10597 if (type === CODES) { 10598 base = extra = work; 10599 end = 19; 10600 } else if (type === LENS) { 10601 base = lbase; 10602 base_index -= 257; 10603 extra = lext; 10604 extra_index -= 257; 10605 end = 256; 10606 } else { 10607 base = dbase; 10608 extra = dext; 10609 end = -1; 10610 } 10611 huff = 0; 10612 sym = 0; 10613 len = min; 10614 next = table_index; 10615 curr = root; 10616 drop = 0; 10617 low = -1; 10618 used = 1 << root; 10619 mask = used - 1; 10620 if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { 10621 return 1; 10622 } 10623 for (; ; ) { 10624 here_bits = len - drop; 10625 if (work[sym] < end) { 10626 here_op = 0; 10627 here_val = work[sym]; 10628 } else if (work[sym] > end) { 10629 here_op = extra[extra_index + work[sym]]; 10630 here_val = base[base_index + work[sym]]; 10631 } else { 10632 here_op = 32 + 64; 10633 here_val = 0; 10634 } 10635 incr = 1 << len - drop; 10636 fill = 1 << curr; 10637 min = fill; 10638 do { 10639 fill -= incr; 10640 table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0; 10641 } while (fill !== 0); 10642 incr = 1 << len - 1; 10643 while (huff & incr) { 10644 incr >>= 1; 10645 } 10646 if (incr !== 0) { 10647 huff &= incr - 1; 10648 huff += incr; 10649 } else { 10650 huff = 0; 10651 } 10652 sym++; 10653 if (--count[len] === 0) { 10654 if (len === max) { 10655 break; 10656 } 10657 len = lens[lens_index + work[sym]]; 10658 } 10659 if (len > root && (huff & mask) !== low) { 10660 if (drop === 0) { 10661 drop = root; 10662 } 10663 next += min; 10664 curr = len - drop; 10665 left = 1 << curr; 10666 while (curr + drop < max) { 10667 left -= count[curr + drop]; 10668 if (left <= 0) { 10669 break; 10670 } 10671 curr++; 10672 left <<= 1; 10673 } 10674 used += 1 << curr; 10675 if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { 10676 return 1; 10677 } 10678 low = huff & mask; 10679 table[low] = root << 24 | curr << 16 | next - table_index | 0; 10680 } 10681 } 10682 if (huff !== 0) { 10683 table[next + huff] = len - drop << 24 | 64 << 16 | 0; 10684 } 10685 opts.bits = root; 10686 return 0; 10687 }; 10688 }, 10689 { "../utils/common": 1 } 10690 ], 10691 10: [ 10692 function(require2, module2, exports2) { 10693 "use strict"; 10694 module2.exports = { 10695 2: "need dictionary", 10696 1: "stream end", 10697 0: "", 10698 "-1": "file error", 10699 "-2": "stream error", 10700 "-3": "data error", 10701 "-4": "insufficient memory", 10702 "-5": "buffer error", 10703 "-6": "incompatible version" 10704 }; 10705 }, 10706 {} 10707 ], 10708 11: [ 10709 function(require2, module2, exports2) { 10710 "use strict"; 10711 function ZStream() { 10712 this.input = null; 10713 this.next_in = 0; 10714 this.avail_in = 0; 10715 this.total_in = 0; 10716 this.output = null; 10717 this.next_out = 0; 10718 this.avail_out = 0; 10719 this.total_out = 0; 10720 this.msg = ""; 10721 this.state = null; 10722 this.data_type = 2; 10723 this.adler = 0; 10724 } 10725 module2.exports = ZStream; 10726 }, 10727 {} 10728 ], 10729 "/lib/inflate.js": [ 10730 function(require2, module2, exports2) { 10731 "use strict"; 10732 var zlib_inflate = require2("./zlib/inflate"); 10733 var utils = require2("./utils/common"); 10734 var strings = require2("./utils/strings"); 10735 var c2 = require2("./zlib/constants"); 10736 var msg = require2("./zlib/messages"); 10737 var ZStream = require2("./zlib/zstream"); 10738 var GZheader = require2("./zlib/gzheader"); 10739 var toString = Object.prototype.toString; 10740 function Inflate(options) { 10741 if (!(this instanceof Inflate)) 10742 return new Inflate(options); 10743 this.options = utils.assign( 10744 { 10745 chunkSize: 16384, 10746 windowBits: 0, 10747 to: "" 10748 }, 10749 options || {} 10750 ); 10751 var opt = this.options; 10752 if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) { 10753 opt.windowBits = -opt.windowBits; 10754 if (opt.windowBits === 0) { 10755 opt.windowBits = -15; 10756 } 10757 } 10758 if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) { 10759 opt.windowBits += 32; 10760 } 10761 if (opt.windowBits > 15 && opt.windowBits < 48) { 10762 if ((opt.windowBits & 15) === 0) { 10763 opt.windowBits |= 15; 10764 } 10765 } 10766 this.err = 0; 10767 this.msg = ""; 10768 this.ended = false; 10769 this.chunks = []; 10770 this.strm = new ZStream(); 10771 this.strm.avail_out = 0; 10772 var status = zlib_inflate.inflateInit2( 10773 this.strm, 10774 opt.windowBits 10775 ); 10776 if (status !== c2.Z_OK) { 10777 throw new Error(msg[status]); 10778 } 10779 this.header = new GZheader(); 10780 zlib_inflate.inflateGetHeader(this.strm, this.header); 10781 if (opt.dictionary) { 10782 if (typeof opt.dictionary === "string") { 10783 opt.dictionary = strings.string2buf( 10784 opt.dictionary 10785 ); 10786 } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { 10787 opt.dictionary = new Uint8Array( 10788 opt.dictionary 10789 ); 10790 } 10791 if (opt.raw) { 10792 status = zlib_inflate.inflateSetDictionary( 10793 this.strm, 10794 opt.dictionary 10795 ); 10796 if (status !== c2.Z_OK) { 10797 throw new Error(msg[status]); 10798 } 10799 } 10800 } 10801 } 10802 Inflate.prototype.push = function(data, mode) { 10803 var strm = this.strm; 10804 var chunkSize = this.options.chunkSize; 10805 var dictionary = this.options.dictionary; 10806 var status, _mode; 10807 var next_out_utf8, tail, utf8str; 10808 var allowBufError = false; 10809 if (this.ended) { 10810 return false; 10811 } 10812 _mode = mode === ~~mode ? mode : mode === true ? c2.Z_FINISH : c2.Z_NO_FLUSH; 10813 if (typeof data === "string") { 10814 strm.input = strings.binstring2buf(data); 10815 } else if (toString.call(data) === "[object ArrayBuffer]") { 10816 strm.input = new Uint8Array(data); 10817 } else { 10818 strm.input = data; 10819 } 10820 strm.next_in = 0; 10821 strm.avail_in = strm.input.length; 10822 do { 10823 if (strm.avail_out === 0) { 10824 strm.output = new utils.Buf8(chunkSize); 10825 strm.next_out = 0; 10826 strm.avail_out = chunkSize; 10827 } 10828 status = zlib_inflate.inflate( 10829 strm, 10830 c2.Z_NO_FLUSH 10831 ); 10832 if (status === c2.Z_NEED_DICT && dictionary) { 10833 status = zlib_inflate.inflateSetDictionary( 10834 this.strm, 10835 dictionary 10836 ); 10837 } 10838 if (status === c2.Z_BUF_ERROR && allowBufError === true) { 10839 status = c2.Z_OK; 10840 allowBufError = false; 10841 } 10842 if (status !== c2.Z_STREAM_END && status !== c2.Z_OK) { 10843 this.onEnd(status); 10844 this.ended = true; 10845 return false; 10846 } 10847 if (strm.next_out) { 10848 if (strm.avail_out === 0 || status === c2.Z_STREAM_END || strm.avail_in === 0 && (_mode === c2.Z_FINISH || _mode === c2.Z_SYNC_FLUSH)) { 10849 if (this.options.to === "string") { 10850 next_out_utf8 = strings.utf8border( 10851 strm.output, 10852 strm.next_out 10853 ); 10854 tail = strm.next_out - next_out_utf8; 10855 utf8str = strings.buf2string( 10856 strm.output, 10857 next_out_utf8 10858 ); 10859 strm.next_out = tail; 10860 strm.avail_out = chunkSize - tail; 10861 if (tail) { 10862 utils.arraySet( 10863 strm.output, 10864 strm.output, 10865 next_out_utf8, 10866 tail, 10867 0 10868 ); 10869 } 10870 this.onData(utf8str); 10871 } else { 10872 this.onData( 10873 utils.shrinkBuf( 10874 strm.output, 10875 strm.next_out 10876 ) 10877 ); 10878 } 10879 } 10880 } 10881 if (strm.avail_in === 0 && strm.avail_out === 0) { 10882 allowBufError = true; 10883 } 10884 } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c2.Z_STREAM_END); 10885 if (status === c2.Z_STREAM_END) { 10886 _mode = c2.Z_FINISH; 10887 } 10888 if (_mode === c2.Z_FINISH) { 10889 status = zlib_inflate.inflateEnd(this.strm); 10890 this.onEnd(status); 10891 this.ended = true; 10892 return status === c2.Z_OK; 10893 } 10894 if (_mode === c2.Z_SYNC_FLUSH) { 10895 this.onEnd(c2.Z_OK); 10896 strm.avail_out = 0; 10897 return true; 10898 } 10899 return true; 10900 }; 10901 Inflate.prototype.onData = function(chunk) { 10902 this.chunks.push(chunk); 10903 }; 10904 Inflate.prototype.onEnd = function(status) { 10905 if (status === c2.Z_OK) { 10906 if (this.options.to === "string") { 10907 this.result = this.chunks.join(""); 10908 } else { 10909 this.result = utils.flattenChunks( 10910 this.chunks 10911 ); 10912 } 10913 } 10914 this.chunks = []; 10915 this.err = status; 10916 this.msg = this.strm.msg; 10917 }; 10918 function inflate(input, options) { 10919 var inflator = new Inflate(options); 10920 inflator.push(input, true); 10921 if (inflator.err) { 10922 throw inflator.msg || msg[inflator.err]; 10923 } 10924 return inflator.result; 10925 } 10926 function inflateRaw(input, options) { 10927 options = options || {}; 10928 options.raw = true; 10929 return inflate(input, options); 10930 } 10931 exports2.Inflate = Inflate; 10932 exports2.inflate = inflate; 10933 exports2.inflateRaw = inflateRaw; 10934 exports2.ungzip = inflate; 10935 }, 10936 { 10937 "./utils/common": 1, 10938 "./utils/strings": 2, 10939 "./zlib/constants": 4, 10940 "./zlib/gzheader": 6, 10941 "./zlib/inflate": 8, 10942 "./zlib/messages": 10, 10943 "./zlib/zstream": 11 10944 } 10945 ] 10946 }, 10947 {}, 10948 [] 10949 )("/lib/inflate.js"); 10950 })(); 10951 10952 // packages/global-styles-ui/build-module/font-library/lib/lib-font.browser.mjs 10953 var fetchFunction = globalThis.fetch; 10954 var Event2 = class { 10955 constructor(type, detail = {}, msg) { 10956 this.type = type; 10957 this.detail = detail; 10958 this.msg = msg; 10959 Object.defineProperty(this, `__mayPropagate`, { 10960 enumerable: false, 10961 writable: true 10962 }); 10963 this.__mayPropagate = true; 10964 } 10965 preventDefault() { 10966 } 10967 stopPropagation() { 10968 this.__mayPropagate = false; 10969 } 10970 valueOf() { 10971 return this; 10972 } 10973 toString() { 10974 return this.msg ? `[$this.type} event]: $this.msg}` : `[$this.type} event]`; 10975 } 10976 }; 10977 var EventManager = class { 10978 constructor() { 10979 this.listeners = {}; 10980 } 10981 addEventListener(type, listener, useCapture) { 10982 let bin = this.listeners[type] || []; 10983 if (useCapture) bin.unshift(listener); 10984 else bin.push(listener); 10985 this.listeners[type] = bin; 10986 } 10987 removeEventListener(type, listener) { 10988 let bin = this.listeners[type] || []; 10989 let pos = bin.findIndex((e2) => e2 === listener); 10990 if (pos > -1) { 10991 bin.splice(pos, 1); 10992 this.listeners[type] = bin; 10993 } 10994 } 10995 dispatch(event) { 10996 let bin = this.listeners[event.type]; 10997 if (bin) { 10998 for (let l2 = 0, e2 = bin.length; l2 < e2; l2++) { 10999 if (!event.__mayPropagate) break; 11000 bin[l2](event); 11001 } 11002 } 11003 } 11004 }; 11005 var startDate = (/* @__PURE__ */ new Date(`1904-01-01T00:00:00+0000`)).getTime(); 11006 function asText(data) { 11007 return Array.from(data).map((v2) => String.fromCharCode(v2)).join(``); 11008 } 11009 var Parser = class { 11010 constructor(dict, dataview, name2) { 11011 this.name = (name2 || dict.tag || ``).trim(); 11012 this.length = dict.length; 11013 this.start = dict.offset; 11014 this.offset = 0; 11015 this.data = dataview; 11016 [ 11017 `getInt8`, 11018 `getUint8`, 11019 `getInt16`, 11020 `getUint16`, 11021 `getInt32`, 11022 `getUint32`, 11023 `getBigInt64`, 11024 `getBigUint64` 11025 ].forEach((name3) => { 11026 let fn = name3.replace(/get(Big)?/, "").toLowerCase(); 11027 let increment = parseInt(name3.replace(/[^\d]/g, "")) / 8; 11028 Object.defineProperty(this, fn, { 11029 get: () => this.getValue(name3, increment) 11030 }); 11031 }); 11032 } 11033 get currentPosition() { 11034 return this.start + this.offset; 11035 } 11036 set currentPosition(position) { 11037 this.start = position; 11038 this.offset = 0; 11039 } 11040 skip(n2 = 0, bits = 8) { 11041 this.offset += n2 * bits / 8; 11042 } 11043 getValue(type, increment) { 11044 let pos = this.start + this.offset; 11045 this.offset += increment; 11046 try { 11047 return this.data[type](pos); 11048 } catch (e2) { 11049 console.error(`parser`, type, increment, this); 11050 console.error(`parser`, this.start, this.offset); 11051 throw e2; 11052 } 11053 } 11054 flags(n2) { 11055 if (n2 === 8 || n2 === 16 || n2 === 32 || n2 === 64) { 11056 return this[`uint$n2}`].toString(2).padStart(n2, 0).split(``).map((v2) => v2 === "1"); 11057 } 11058 console.error( 11059 `Error parsing flags: flag types can only be 1, 2, 4, or 8 bytes long` 11060 ); 11061 console.trace(); 11062 } 11063 get tag() { 11064 const t3 = this.uint32; 11065 return asText([ 11066 t3 >> 24 & 255, 11067 t3 >> 16 & 255, 11068 t3 >> 8 & 255, 11069 t3 & 255 11070 ]); 11071 } 11072 get fixed() { 11073 let major = this.int16; 11074 let minor = Math.round(1e3 * this.uint16 / 65356); 11075 return major + minor / 1e3; 11076 } 11077 get legacyFixed() { 11078 let major = this.uint16; 11079 let minor = this.uint16.toString(16).padStart(4, 0); 11080 return parseFloat(`$major}.$minor}`); 11081 } 11082 get uint24() { 11083 return (this.uint8 << 16) + (this.uint8 << 8) + this.uint8; 11084 } 11085 get uint128() { 11086 let value = 0; 11087 for (let i2 = 0; i2 < 5; i2++) { 11088 let byte = this.uint8; 11089 value = value * 128 + (byte & 127); 11090 if (byte < 128) break; 11091 } 11092 return value; 11093 } 11094 get longdatetime() { 11095 return new Date(startDate + 1e3 * parseInt(this.int64.toString())); 11096 } 11097 get fword() { 11098 return this.int16; 11099 } 11100 get ufword() { 11101 return this.uint16; 11102 } 11103 get Offset16() { 11104 return this.uint16; 11105 } 11106 get Offset32() { 11107 return this.uint32; 11108 } 11109 get F2DOT14() { 11110 const bits = p.uint16; 11111 const integer = [0, 1, -2, -1][bits >> 14]; 11112 const fraction = bits & 16383; 11113 return integer + fraction / 16384; 11114 } 11115 verifyLength() { 11116 if (this.offset != this.length) { 11117 console.error( 11118 `unexpected parsed table size ($this.offset}) for "$this.name}" (expected $this.length})` 11119 ); 11120 } 11121 } 11122 readBytes(n2 = 0, position = 0, bits = 8, signed = false) { 11123 n2 = n2 || this.length; 11124 if (n2 === 0) return []; 11125 if (position) this.currentPosition = position; 11126 const fn = `$signed ? `` : `u`}int$bits}`, slice = []; 11127 while (n2--) slice.push(this[fn]); 11128 return slice; 11129 } 11130 }; 11131 var ParsedData = class { 11132 constructor(parser) { 11133 const pGetter = { enumerable: false, get: () => parser }; 11134 Object.defineProperty(this, `parser`, pGetter); 11135 const start = parser.currentPosition; 11136 const startGetter = { enumerable: false, get: () => start }; 11137 Object.defineProperty(this, `start`, startGetter); 11138 } 11139 load(struct) { 11140 Object.keys(struct).forEach((p22) => { 11141 let props = Object.getOwnPropertyDescriptor(struct, p22); 11142 if (props.get) { 11143 this[p22] = props.get.bind(this); 11144 } else if (props.value !== void 0) { 11145 this[p22] = props.value; 11146 } 11147 }); 11148 if (this.parser.length) { 11149 this.parser.verifyLength(); 11150 } 11151 } 11152 }; 11153 var SimpleTable = class extends ParsedData { 11154 constructor(dict, dataview, name2) { 11155 const { parser, start } = super( 11156 new Parser(dict, dataview, name2) 11157 ); 11158 const pGetter = { enumerable: false, get: () => parser }; 11159 Object.defineProperty(this, `p`, pGetter); 11160 const startGetter = { enumerable: false, get: () => start }; 11161 Object.defineProperty(this, `tableStart`, startGetter); 11162 } 11163 }; 11164 function lazy$1(object, property, getter) { 11165 let val; 11166 Object.defineProperty(object, property, { 11167 get: () => { 11168 if (val) return val; 11169 val = getter(); 11170 return val; 11171 }, 11172 enumerable: true 11173 }); 11174 } 11175 var SFNT = class extends SimpleTable { 11176 constructor(font2, dataview, createTable2) { 11177 const { p: p22 } = super({ offset: 0, length: 12 }, dataview, `sfnt`); 11178 this.version = p22.uint32; 11179 this.numTables = p22.uint16; 11180 this.searchRange = p22.uint16; 11181 this.entrySelector = p22.uint16; 11182 this.rangeShift = p22.uint16; 11183 p22.verifyLength(); 11184 this.directory = [...new Array(this.numTables)].map( 11185 (_) => new TableRecord(p22) 11186 ); 11187 this.tables = {}; 11188 this.directory.forEach((entry) => { 11189 const getter = () => createTable2( 11190 this.tables, 11191 { 11192 tag: entry.tag, 11193 offset: entry.offset, 11194 length: entry.length 11195 }, 11196 dataview 11197 ); 11198 lazy$1(this.tables, entry.tag.trim(), getter); 11199 }); 11200 } 11201 }; 11202 var TableRecord = class { 11203 constructor(p22) { 11204 this.tag = p22.tag; 11205 this.checksum = p22.uint32; 11206 this.offset = p22.uint32; 11207 this.length = p22.uint32; 11208 } 11209 }; 11210 var gzipDecode = inflate_default.inflate || void 0; 11211 var nativeGzipDecode = void 0; 11212 var WOFF$1 = class extends SimpleTable { 11213 constructor(font2, dataview, createTable2) { 11214 const { p: p22 } = super({ offset: 0, length: 44 }, dataview, `woff`); 11215 this.signature = p22.tag; 11216 this.flavor = p22.uint32; 11217 this.length = p22.uint32; 11218 this.numTables = p22.uint16; 11219 p22.uint16; 11220 this.totalSfntSize = p22.uint32; 11221 this.majorVersion = p22.uint16; 11222 this.minorVersion = p22.uint16; 11223 this.metaOffset = p22.uint32; 11224 this.metaLength = p22.uint32; 11225 this.metaOrigLength = p22.uint32; 11226 this.privOffset = p22.uint32; 11227 this.privLength = p22.uint32; 11228 p22.verifyLength(); 11229 this.directory = [...new Array(this.numTables)].map( 11230 (_) => new WoffTableDirectoryEntry(p22) 11231 ); 11232 buildWoffLazyLookups(this, dataview, createTable2); 11233 } 11234 }; 11235 var WoffTableDirectoryEntry = class { 11236 constructor(p22) { 11237 this.tag = p22.tag; 11238 this.offset = p22.uint32; 11239 this.compLength = p22.uint32; 11240 this.origLength = p22.uint32; 11241 this.origChecksum = p22.uint32; 11242 } 11243 }; 11244 function buildWoffLazyLookups(woff, dataview, createTable2) { 11245 woff.tables = {}; 11246 woff.directory.forEach((entry) => { 11247 lazy$1(woff.tables, entry.tag.trim(), () => { 11248 let offset = 0; 11249 let view = dataview; 11250 if (entry.compLength !== entry.origLength) { 11251 const data = dataview.buffer.slice( 11252 entry.offset, 11253 entry.offset + entry.compLength 11254 ); 11255 let unpacked; 11256 if (gzipDecode) { 11257 unpacked = gzipDecode(new Uint8Array(data)); 11258 } else if (nativeGzipDecode) { 11259 unpacked = nativeGzipDecode(new Uint8Array(data)); 11260 } else { 11261 const msg = `no brotli decoder available to decode WOFF2 font`; 11262 if (font.onerror) font.onerror(msg); 11263 throw new Error(msg); 11264 } 11265 view = new DataView(unpacked.buffer); 11266 } else { 11267 offset = entry.offset; 11268 } 11269 return createTable2( 11270 woff.tables, 11271 { tag: entry.tag, offset, length: entry.origLength }, 11272 view 11273 ); 11274 }); 11275 }); 11276 } 11277 var brotliDecode = unbrotli_default; 11278 var nativeBrotliDecode = void 0; 11279 var WOFF2$1 = class extends SimpleTable { 11280 constructor(font2, dataview, createTable2) { 11281 const { p: p22 } = super({ offset: 0, length: 48 }, dataview, `woff2`); 11282 this.signature = p22.tag; 11283 this.flavor = p22.uint32; 11284 this.length = p22.uint32; 11285 this.numTables = p22.uint16; 11286 p22.uint16; 11287 this.totalSfntSize = p22.uint32; 11288 this.totalCompressedSize = p22.uint32; 11289 this.majorVersion = p22.uint16; 11290 this.minorVersion = p22.uint16; 11291 this.metaOffset = p22.uint32; 11292 this.metaLength = p22.uint32; 11293 this.metaOrigLength = p22.uint32; 11294 this.privOffset = p22.uint32; 11295 this.privLength = p22.uint32; 11296 p22.verifyLength(); 11297 this.directory = [...new Array(this.numTables)].map( 11298 (_) => new Woff2TableDirectoryEntry(p22) 11299 ); 11300 let dictOffset = p22.currentPosition; 11301 this.directory[0].offset = 0; 11302 this.directory.forEach((e2, i2) => { 11303 let next = this.directory[i2 + 1]; 11304 if (next) { 11305 next.offset = e2.offset + (e2.transformLength !== void 0 ? e2.transformLength : e2.origLength); 11306 } 11307 }); 11308 let decoded; 11309 let buffer = dataview.buffer.slice(dictOffset); 11310 if (brotliDecode) { 11311 decoded = brotliDecode(new Uint8Array(buffer)); 11312 } else if (nativeBrotliDecode) { 11313 decoded = new Uint8Array(nativeBrotliDecode(buffer)); 11314 } else { 11315 const msg = `no brotli decoder available to decode WOFF2 font`; 11316 if (font2.onerror) font2.onerror(msg); 11317 throw new Error(msg); 11318 } 11319 buildWoff2LazyLookups(this, decoded, createTable2); 11320 } 11321 }; 11322 var Woff2TableDirectoryEntry = class { 11323 constructor(p22) { 11324 this.flags = p22.uint8; 11325 const tagNumber = this.tagNumber = this.flags & 63; 11326 if (tagNumber === 63) { 11327 this.tag = p22.tag; 11328 } else { 11329 this.tag = getWOFF2Tag(tagNumber); 11330 } 11331 const transformVersion = this.transformVersion = (this.flags & 192) >> 6; 11332 let hasTransforms = transformVersion !== 0; 11333 if (this.tag === `glyf` || this.tag === `loca`) { 11334 hasTransforms = this.transformVersion !== 3; 11335 } 11336 this.origLength = p22.uint128; 11337 if (hasTransforms) { 11338 this.transformLength = p22.uint128; 11339 } 11340 } 11341 }; 11342 function buildWoff2LazyLookups(woff2, decoded, createTable2) { 11343 woff2.tables = {}; 11344 woff2.directory.forEach((entry) => { 11345 lazy$1(woff2.tables, entry.tag.trim(), () => { 11346 const start = entry.offset; 11347 const end = start + (entry.transformLength ? entry.transformLength : entry.origLength); 11348 const data = new DataView(decoded.slice(start, end).buffer); 11349 try { 11350 return createTable2( 11351 woff2.tables, 11352 { tag: entry.tag, offset: 0, length: entry.origLength }, 11353 data 11354 ); 11355 } catch (e2) { 11356 console.error(e2); 11357 } 11358 }); 11359 }); 11360 } 11361 function getWOFF2Tag(flag) { 11362 return [ 11363 `cmap`, 11364 `head`, 11365 `hhea`, 11366 `hmtx`, 11367 `maxp`, 11368 `name`, 11369 `OS/2`, 11370 `post`, 11371 `cvt `, 11372 `fpgm`, 11373 `glyf`, 11374 `loca`, 11375 `prep`, 11376 `CFF `, 11377 `VORG`, 11378 `EBDT`, 11379 `EBLC`, 11380 `gasp`, 11381 `hdmx`, 11382 `kern`, 11383 `LTSH`, 11384 `PCLT`, 11385 `VDMX`, 11386 `vhea`, 11387 `vmtx`, 11388 `BASE`, 11389 `GDEF`, 11390 `GPOS`, 11391 `GSUB`, 11392 `EBSC`, 11393 `JSTF`, 11394 `MATH`, 11395 `CBDT`, 11396 `CBLC`, 11397 `COLR`, 11398 `CPAL`, 11399 `SVG `, 11400 `sbix`, 11401 `acnt`, 11402 `avar`, 11403 `bdat`, 11404 `bloc`, 11405 `bsln`, 11406 `cvar`, 11407 `fdsc`, 11408 `feat`, 11409 `fmtx`, 11410 `fvar`, 11411 `gvar`, 11412 `hsty`, 11413 `just`, 11414 `lcar`, 11415 `mort`, 11416 `morx`, 11417 `opbd`, 11418 `prop`, 11419 `trak`, 11420 `Zapf`, 11421 `Silf`, 11422 `Glat`, 11423 `Gloc`, 11424 `Feat`, 11425 `Sill` 11426 ][flag & 63]; 11427 } 11428 var tableClasses = {}; 11429 var tableClassesLoaded = false; 11430 Promise.all([ 11431 Promise.resolve().then(function() { 11432 return cmap$1; 11433 }), 11434 Promise.resolve().then(function() { 11435 return head$1; 11436 }), 11437 Promise.resolve().then(function() { 11438 return hhea$1; 11439 }), 11440 Promise.resolve().then(function() { 11441 return hmtx$1; 11442 }), 11443 Promise.resolve().then(function() { 11444 return maxp$1; 11445 }), 11446 Promise.resolve().then(function() { 11447 return name$1; 11448 }), 11449 Promise.resolve().then(function() { 11450 return OS2$1; 11451 }), 11452 Promise.resolve().then(function() { 11453 return post$1; 11454 }), 11455 Promise.resolve().then(function() { 11456 return BASE$1; 11457 }), 11458 Promise.resolve().then(function() { 11459 return GDEF$1; 11460 }), 11461 Promise.resolve().then(function() { 11462 return GSUB$1; 11463 }), 11464 Promise.resolve().then(function() { 11465 return GPOS$1; 11466 }), 11467 Promise.resolve().then(function() { 11468 return SVG$1; 11469 }), 11470 Promise.resolve().then(function() { 11471 return fvar$1; 11472 }), 11473 Promise.resolve().then(function() { 11474 return cvt$1; 11475 }), 11476 Promise.resolve().then(function() { 11477 return fpgm$1; 11478 }), 11479 Promise.resolve().then(function() { 11480 return gasp$1; 11481 }), 11482 Promise.resolve().then(function() { 11483 return glyf$1; 11484 }), 11485 Promise.resolve().then(function() { 11486 return loca$1; 11487 }), 11488 Promise.resolve().then(function() { 11489 return prep$1; 11490 }), 11491 Promise.resolve().then(function() { 11492 return CFF$1; 11493 }), 11494 Promise.resolve().then(function() { 11495 return CFF2$1; 11496 }), 11497 Promise.resolve().then(function() { 11498 return VORG$1; 11499 }), 11500 Promise.resolve().then(function() { 11501 return EBLC$1; 11502 }), 11503 Promise.resolve().then(function() { 11504 return EBDT$1; 11505 }), 11506 Promise.resolve().then(function() { 11507 return EBSC$1; 11508 }), 11509 Promise.resolve().then(function() { 11510 return CBLC$1; 11511 }), 11512 Promise.resolve().then(function() { 11513 return CBDT$1; 11514 }), 11515 Promise.resolve().then(function() { 11516 return sbix$1; 11517 }), 11518 Promise.resolve().then(function() { 11519 return COLR$1; 11520 }), 11521 Promise.resolve().then(function() { 11522 return CPAL$1; 11523 }), 11524 Promise.resolve().then(function() { 11525 return DSIG$1; 11526 }), 11527 Promise.resolve().then(function() { 11528 return hdmx$1; 11529 }), 11530 Promise.resolve().then(function() { 11531 return kern$1; 11532 }), 11533 Promise.resolve().then(function() { 11534 return LTSH$1; 11535 }), 11536 Promise.resolve().then(function() { 11537 return MERG$1; 11538 }), 11539 Promise.resolve().then(function() { 11540 return meta$1; 11541 }), 11542 Promise.resolve().then(function() { 11543 return PCLT$1; 11544 }), 11545 Promise.resolve().then(function() { 11546 return VDMX$1; 11547 }), 11548 Promise.resolve().then(function() { 11549 return vhea$1; 11550 }), 11551 Promise.resolve().then(function() { 11552 return vmtx$1; 11553 }) 11554 ]).then((data) => { 11555 data.forEach((e2) => { 11556 let name2 = Object.keys(e2)[0]; 11557 tableClasses[name2] = e2[name2]; 11558 }); 11559 tableClassesLoaded = true; 11560 }); 11561 function createTable(tables, dict, dataview) { 11562 let name2 = dict.tag.replace(/[^\w\d]/g, ``); 11563 let Type = tableClasses[name2]; 11564 if (Type) return new Type(dict, dataview, tables); 11565 console.warn( 11566 `lib-font has no definition for $name2}. The table was skipped.` 11567 ); 11568 return {}; 11569 } 11570 function loadTableClasses() { 11571 let count = 0; 11572 function checkLoaded(resolve, reject) { 11573 if (!tableClassesLoaded) { 11574 if (count > 10) { 11575 return reject(new Error(`loading took too long`)); 11576 } 11577 count++; 11578 return setTimeout(() => checkLoaded(resolve), 250); 11579 } 11580 resolve(createTable); 11581 } 11582 return new Promise((resolve, reject) => checkLoaded(resolve)); 11583 } 11584 function getFontCSSFormat(path, errorOnStyle) { 11585 let pos = path.lastIndexOf(`.`); 11586 let ext = (path.substring(pos + 1) || ``).toLowerCase(); 11587 let format = { 11588 ttf: `truetype`, 11589 otf: `opentype`, 11590 woff: `woff`, 11591 woff2: `woff2` 11592 }[ext]; 11593 if (format) return format; 11594 let msg = { 11595 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.`, 11596 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.`, 11597 fon: `The .fon format is not supported: this is an ancient Windows bitmap font format.`, 11598 ttc: `Based on the current CSS specification, font collections are not (yet?) supported.` 11599 }[ext]; 11600 if (!msg) msg = `$path} is not a known webfont format.`; 11601 if (errorOnStyle) { 11602 throw new Error(msg); 11603 } else { 11604 console.warn(`Could not load font: $msg}`); 11605 } 11606 } 11607 async function setupFontFace(name2, url, options = {}) { 11608 if (!globalThis.document) return; 11609 let format = getFontCSSFormat(url, options.errorOnStyle); 11610 if (!format) return; 11611 let style = document.createElement(`style`); 11612 style.className = `injected-by-Font-js`; 11613 let rules = []; 11614 if (options.styleRules) { 11615 rules = Object.entries(options.styleRules).map( 11616 ([key, value]) => `$key}: $value};` 11617 ); 11618 } 11619 style.textContent = ` 11620 @font-face { 11621 font-family: "$name2}"; 11622 $rules.join( 11623 ` 11624 ` 11625 )} 11626 src: url("$url}") format("$format}"); 11627 }`; 11628 globalThis.document.head.appendChild(style); 11629 return style; 11630 } 11631 var TTF = [0, 1, 0, 0]; 11632 var OTF = [79, 84, 84, 79]; 11633 var WOFF = [119, 79, 70, 70]; 11634 var WOFF2 = [119, 79, 70, 50]; 11635 function match(ar1, ar2) { 11636 if (ar1.length !== ar2.length) return; 11637 for (let i2 = 0; i2 < ar1.length; i2++) { 11638 if (ar1[i2] !== ar2[i2]) return; 11639 } 11640 return true; 11641 } 11642 function validFontFormat(dataview) { 11643 const LEAD_BYTES = [ 11644 dataview.getUint8(0), 11645 dataview.getUint8(1), 11646 dataview.getUint8(2), 11647 dataview.getUint8(3) 11648 ]; 11649 if (match(LEAD_BYTES, TTF) || match(LEAD_BYTES, OTF)) return `SFNT`; 11650 if (match(LEAD_BYTES, WOFF)) return `WOFF`; 11651 if (match(LEAD_BYTES, WOFF2)) return `WOFF2`; 11652 } 11653 function checkFetchResponseStatus(response) { 11654 if (!response.ok) { 11655 throw new Error( 11656 `HTTP $response.status} - $response.statusText}` 11657 ); 11658 } 11659 return response; 11660 } 11661 var Font = class extends EventManager { 11662 constructor(name2, options = {}) { 11663 super(); 11664 this.name = name2; 11665 this.options = options; 11666 this.metrics = false; 11667 } 11668 get src() { 11669 return this.__src; 11670 } 11671 set src(src) { 11672 this.__src = src; 11673 (async () => { 11674 if (globalThis.document && !this.options.skipStyleSheet) { 11675 await setupFontFace(this.name, src, this.options); 11676 } 11677 this.loadFont(src); 11678 })(); 11679 } 11680 async loadFont(url, filename) { 11681 fetch(url).then( 11682 (response) => checkFetchResponseStatus(response) && response.arrayBuffer() 11683 ).then( 11684 (buffer) => this.fromDataBuffer(buffer, filename || url) 11685 ).catch((err) => { 11686 const evt = new Event2( 11687 `error`, 11688 err, 11689 `Failed to load font at $filename || url}` 11690 ); 11691 this.dispatch(evt); 11692 if (this.onerror) this.onerror(evt); 11693 }); 11694 } 11695 async fromDataBuffer(buffer, filenameOrUrL) { 11696 this.fontData = new DataView(buffer); 11697 let type = validFontFormat(this.fontData); 11698 if (!type) { 11699 throw new Error( 11700 `$filenameOrUrL} is either an unsupported font format, or not a font at all.` 11701 ); 11702 } 11703 await this.parseBasicData(type); 11704 const evt = new Event2("load", { font: this }); 11705 this.dispatch(evt); 11706 if (this.onload) this.onload(evt); 11707 } 11708 async parseBasicData(type) { 11709 return loadTableClasses().then((createTable2) => { 11710 if (type === `SFNT`) { 11711 this.opentype = new SFNT(this, this.fontData, createTable2); 11712 } 11713 if (type === `WOFF`) { 11714 this.opentype = new WOFF$1(this, this.fontData, createTable2); 11715 } 11716 if (type === `WOFF2`) { 11717 this.opentype = new WOFF2$1(this, this.fontData, createTable2); 11718 } 11719 return this.opentype; 11720 }); 11721 } 11722 getGlyphId(char) { 11723 return this.opentype.tables.cmap.getGlyphId(char); 11724 } 11725 reverse(glyphid) { 11726 return this.opentype.tables.cmap.reverse(glyphid); 11727 } 11728 supports(char) { 11729 return this.getGlyphId(char) !== 0; 11730 } 11731 supportsVariation(variation) { 11732 return this.opentype.tables.cmap.supportsVariation(variation) !== false; 11733 } 11734 measureText(text, size = 16) { 11735 if (this.__unloaded) 11736 throw new Error( 11737 "Cannot measure text: font was unloaded. Please reload before calling measureText()" 11738 ); 11739 let d2 = document.createElement("div"); 11740 d2.textContent = text; 11741 d2.style.fontFamily = this.name; 11742 d2.style.fontSize = `$size}px`; 11743 d2.style.color = `transparent`; 11744 d2.style.background = `transparent`; 11745 d2.style.top = `0`; 11746 d2.style.left = `0`; 11747 d2.style.position = `absolute`; 11748 document.body.appendChild(d2); 11749 let bbox = d2.getBoundingClientRect(); 11750 document.body.removeChild(d2); 11751 const OS22 = this.opentype.tables["OS/2"]; 11752 bbox.fontSize = size; 11753 bbox.ascender = OS22.sTypoAscender; 11754 bbox.descender = OS22.sTypoDescender; 11755 return bbox; 11756 } 11757 unload() { 11758 if (this.styleElement.parentNode) { 11759 this.styleElement.parentNode.removeElement(this.styleElement); 11760 const evt = new Event2("unload", { font: this }); 11761 this.dispatch(evt); 11762 if (this.onunload) this.onunload(evt); 11763 } 11764 this._unloaded = true; 11765 } 11766 load() { 11767 if (this.__unloaded) { 11768 delete this.__unloaded; 11769 document.head.appendChild(this.styleElement); 11770 const evt = new Event2("load", { font: this }); 11771 this.dispatch(evt); 11772 if (this.onload) this.onload(evt); 11773 } 11774 } 11775 }; 11776 globalThis.Font = Font; 11777 var Subtable = class extends ParsedData { 11778 constructor(p22, plaformID, encodingID) { 11779 super(p22); 11780 this.plaformID = plaformID; 11781 this.encodingID = encodingID; 11782 } 11783 }; 11784 var Format0 = class extends Subtable { 11785 constructor(p22, platformID, encodingID) { 11786 super(p22, platformID, encodingID); 11787 this.format = 0; 11788 this.length = p22.uint16; 11789 this.language = p22.uint16; 11790 this.glyphIdArray = [...new Array(256)].map((_) => p22.uint8); 11791 } 11792 supports(charCode) { 11793 if (charCode.charCodeAt) { 11794 charCode = -1; 11795 console.warn( 11796 `supports(character) not implemented for cmap subtable format 0. only supports(id) is implemented.` 11797 ); 11798 } 11799 return 0 <= charCode && charCode <= 255; 11800 } 11801 reverse(glyphID) { 11802 console.warn(`reverse not implemented for cmap subtable format 0`); 11803 return {}; 11804 } 11805 getSupportedCharCodes() { 11806 return [{ start: 1, end: 256 }]; 11807 } 11808 }; 11809 var Format2 = class extends Subtable { 11810 constructor(p22, platformID, encodingID) { 11811 super(p22, platformID, encodingID); 11812 this.format = 2; 11813 this.length = p22.uint16; 11814 this.language = p22.uint16; 11815 this.subHeaderKeys = [...new Array(256)].map((_) => p22.uint16); 11816 const subHeaderCount = Math.max(...this.subHeaderKeys); 11817 const subHeaderOffset = p22.currentPosition; 11818 lazy$1(this, `subHeaders`, () => { 11819 p22.currentPosition = subHeaderOffset; 11820 return [...new Array(subHeaderCount)].map( 11821 (_) => new SubHeader(p22) 11822 ); 11823 }); 11824 const glyphIndexOffset = subHeaderOffset + subHeaderCount * 8; 11825 lazy$1(this, `glyphIndexArray`, () => { 11826 p22.currentPosition = glyphIndexOffset; 11827 return [...new Array(subHeaderCount)].map((_) => p22.uint16); 11828 }); 11829 } 11830 supports(charCode) { 11831 if (charCode.charCodeAt) { 11832 charCode = -1; 11833 console.warn( 11834 `supports(character) not implemented for cmap subtable format 2. only supports(id) is implemented.` 11835 ); 11836 } 11837 const low = charCode && 255; 11838 const high = charCode && 65280; 11839 const subHeaderKey = this.subHeaders[high]; 11840 const subheader = this.subHeaders[subHeaderKey]; 11841 const first = subheader.firstCode; 11842 const last = first + subheader.entryCount; 11843 return first <= low && low <= last; 11844 } 11845 reverse(glyphID) { 11846 console.warn(`reverse not implemented for cmap subtable format 2`); 11847 return {}; 11848 } 11849 getSupportedCharCodes(preservePropNames = false) { 11850 if (preservePropNames) { 11851 return this.subHeaders.map((h2) => ({ 11852 firstCode: h2.firstCode, 11853 lastCode: h2.lastCode 11854 })); 11855 } 11856 return this.subHeaders.map((h2) => ({ 11857 start: h2.firstCode, 11858 end: h2.lastCode 11859 })); 11860 } 11861 }; 11862 var SubHeader = class { 11863 constructor(p22) { 11864 this.firstCode = p22.uint16; 11865 this.entryCount = p22.uint16; 11866 this.lastCode = this.first + this.entryCount; 11867 this.idDelta = p22.int16; 11868 this.idRangeOffset = p22.uint16; 11869 } 11870 }; 11871 var Format4 = class extends Subtable { 11872 constructor(p22, platformID, encodingID) { 11873 super(p22, platformID, encodingID); 11874 this.format = 4; 11875 this.length = p22.uint16; 11876 this.language = p22.uint16; 11877 this.segCountX2 = p22.uint16; 11878 this.segCount = this.segCountX2 / 2; 11879 this.searchRange = p22.uint16; 11880 this.entrySelector = p22.uint16; 11881 this.rangeShift = p22.uint16; 11882 const endCodePosition = p22.currentPosition; 11883 lazy$1( 11884 this, 11885 `endCode`, 11886 () => p22.readBytes(this.segCount, endCodePosition, 16) 11887 ); 11888 const startCodePosition = endCodePosition + 2 + this.segCountX2; 11889 lazy$1( 11890 this, 11891 `startCode`, 11892 () => p22.readBytes(this.segCount, startCodePosition, 16) 11893 ); 11894 const idDeltaPosition = startCodePosition + this.segCountX2; 11895 lazy$1( 11896 this, 11897 `idDelta`, 11898 () => p22.readBytes(this.segCount, idDeltaPosition, 16, true) 11899 ); 11900 const idRangePosition = idDeltaPosition + this.segCountX2; 11901 lazy$1( 11902 this, 11903 `idRangeOffset`, 11904 () => p22.readBytes(this.segCount, idRangePosition, 16) 11905 ); 11906 const glyphIdArrayPosition = idRangePosition + this.segCountX2; 11907 const glyphIdArrayLength = this.length - (glyphIdArrayPosition - this.tableStart); 11908 lazy$1( 11909 this, 11910 `glyphIdArray`, 11911 () => p22.readBytes(glyphIdArrayLength, glyphIdArrayPosition, 16) 11912 ); 11913 lazy$1( 11914 this, 11915 `segments`, 11916 () => this.buildSegments(idRangePosition, glyphIdArrayPosition, p22) 11917 ); 11918 } 11919 buildSegments(idRangePosition, glyphIdArrayPosition, p22) { 11920 const build = (_, i2) => { 11921 let startCode = this.startCode[i2], endCode = this.endCode[i2], idDelta = this.idDelta[i2], idRangeOffset = this.idRangeOffset[i2], idRangeOffsetPointer = idRangePosition + 2 * i2, glyphIDs = []; 11922 if (idRangeOffset === 0) { 11923 for (let i22 = startCode + idDelta, e2 = endCode + idDelta; i22 <= e2; i22++) { 11924 glyphIDs.push(i22); 11925 } 11926 } else { 11927 for (let i22 = 0, e2 = endCode - startCode; i22 <= e2; i22++) { 11928 p22.currentPosition = idRangeOffsetPointer + idRangeOffset + i22 * 2; 11929 glyphIDs.push(p22.uint16); 11930 } 11931 } 11932 return { 11933 startCode, 11934 endCode, 11935 idDelta, 11936 idRangeOffset, 11937 glyphIDs 11938 }; 11939 }; 11940 return [...new Array(this.segCount)].map(build); 11941 } 11942 reverse(glyphID) { 11943 let s2 = this.segments.find((v2) => v2.glyphIDs.includes(glyphID)); 11944 if (!s2) return {}; 11945 const code = s2.startCode + s2.glyphIDs.indexOf(glyphID); 11946 return { code, unicode: String.fromCodePoint(code) }; 11947 } 11948 getGlyphId(charCode) { 11949 if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); 11950 if (55296 <= charCode && charCode <= 57343) return 0; 11951 if ((charCode & 65534) === 65534 || (charCode & 65535) === 65535) 11952 return 0; 11953 let segment = this.segments.find( 11954 (s2) => s2.startCode <= charCode && charCode <= s2.endCode 11955 ); 11956 if (!segment) return 0; 11957 return segment.glyphIDs[charCode - segment.startCode]; 11958 } 11959 supports(charCode) { 11960 return this.getGlyphId(charCode) !== 0; 11961 } 11962 getSupportedCharCodes(preservePropNames = false) { 11963 if (preservePropNames) return this.segments; 11964 return this.segments.map((v2) => ({ 11965 start: v2.startCode, 11966 end: v2.endCode 11967 })); 11968 } 11969 }; 11970 var Format6 = class extends Subtable { 11971 constructor(p22, platformID, encodingID) { 11972 super(p22, platformID, encodingID); 11973 this.format = 6; 11974 this.length = p22.uint16; 11975 this.language = p22.uint16; 11976 this.firstCode = p22.uint16; 11977 this.entryCount = p22.uint16; 11978 this.lastCode = this.firstCode + this.entryCount - 1; 11979 const getter = () => [...new Array(this.entryCount)].map((_) => p22.uint16); 11980 lazy$1(this, `glyphIdArray`, getter); 11981 } 11982 supports(charCode) { 11983 if (charCode.charCodeAt) { 11984 charCode = -1; 11985 console.warn( 11986 `supports(character) not implemented for cmap subtable format 6. only supports(id) is implemented.` 11987 ); 11988 } 11989 if (charCode < this.firstCode) return {}; 11990 if (charCode > this.firstCode + this.entryCount) return {}; 11991 const code = charCode - this.firstCode; 11992 return { code, unicode: String.fromCodePoint(code) }; 11993 } 11994 reverse(glyphID) { 11995 let pos = this.glyphIdArray.indexOf(glyphID); 11996 if (pos > -1) return this.firstCode + pos; 11997 } 11998 getSupportedCharCodes(preservePropNames = false) { 11999 if (preservePropNames) { 12000 return [{ firstCode: this.firstCode, lastCode: this.lastCode }]; 12001 } 12002 return [{ start: this.firstCode, end: this.lastCode }]; 12003 } 12004 }; 12005 var Format8 = class extends Subtable { 12006 constructor(p22, platformID, encodingID) { 12007 super(p22, platformID, encodingID); 12008 this.format = 8; 12009 p22.uint16; 12010 this.length = p22.uint32; 12011 this.language = p22.uint32; 12012 this.is32 = [...new Array(8192)].map((_) => p22.uint8); 12013 this.numGroups = p22.uint32; 12014 const getter = () => [...new Array(this.numGroups)].map( 12015 (_) => new SequentialMapGroup$1(p22) 12016 ); 12017 lazy$1(this, `groups`, getter); 12018 } 12019 supports(charCode) { 12020 if (charCode.charCodeAt) { 12021 charCode = -1; 12022 console.warn( 12023 `supports(character) not implemented for cmap subtable format 8. only supports(id) is implemented.` 12024 ); 12025 } 12026 return this.groups.findIndex( 12027 (s2) => s2.startcharCode <= charCode && charCode <= s2.endcharCode 12028 ) !== -1; 12029 } 12030 reverse(glyphID) { 12031 console.warn(`reverse not implemented for cmap subtable format 8`); 12032 return {}; 12033 } 12034 getSupportedCharCodes(preservePropNames = false) { 12035 if (preservePropNames) return this.groups; 12036 return this.groups.map((v2) => ({ 12037 start: v2.startcharCode, 12038 end: v2.endcharCode 12039 })); 12040 } 12041 }; 12042 var SequentialMapGroup$1 = class { 12043 constructor(p22) { 12044 this.startcharCode = p22.uint32; 12045 this.endcharCode = p22.uint32; 12046 this.startGlyphID = p22.uint32; 12047 } 12048 }; 12049 var Format10 = class extends Subtable { 12050 constructor(p22, platformID, encodingID) { 12051 super(p22, platformID, encodingID); 12052 this.format = 10; 12053 p22.uint16; 12054 this.length = p22.uint32; 12055 this.language = p22.uint32; 12056 this.startCharCode = p22.uint32; 12057 this.numChars = p22.uint32; 12058 this.endCharCode = this.startCharCode + this.numChars; 12059 const getter = () => [...new Array(this.numChars)].map((_) => p22.uint16); 12060 lazy$1(this, `glyphs`, getter); 12061 } 12062 supports(charCode) { 12063 if (charCode.charCodeAt) { 12064 charCode = -1; 12065 console.warn( 12066 `supports(character) not implemented for cmap subtable format 10. only supports(id) is implemented.` 12067 ); 12068 } 12069 if (charCode < this.startCharCode) return false; 12070 if (charCode > this.startCharCode + this.numChars) return false; 12071 return charCode - this.startCharCode; 12072 } 12073 reverse(glyphID) { 12074 console.warn(`reverse not implemented for cmap subtable format 10`); 12075 return {}; 12076 } 12077 getSupportedCharCodes(preservePropNames = false) { 12078 if (preservePropNames) { 12079 return [ 12080 { 12081 startCharCode: this.startCharCode, 12082 endCharCode: this.endCharCode 12083 } 12084 ]; 12085 } 12086 return [{ start: this.startCharCode, end: this.endCharCode }]; 12087 } 12088 }; 12089 var Format12 = class extends Subtable { 12090 constructor(p22, platformID, encodingID) { 12091 super(p22, platformID, encodingID); 12092 this.format = 12; 12093 p22.uint16; 12094 this.length = p22.uint32; 12095 this.language = p22.uint32; 12096 this.numGroups = p22.uint32; 12097 const getter = () => [...new Array(this.numGroups)].map( 12098 (_) => new SequentialMapGroup(p22) 12099 ); 12100 lazy$1(this, `groups`, getter); 12101 } 12102 supports(charCode) { 12103 if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); 12104 if (55296 <= charCode && charCode <= 57343) return 0; 12105 if ((charCode & 65534) === 65534 || (charCode & 65535) === 65535) 12106 return 0; 12107 return this.groups.findIndex( 12108 (s2) => s2.startCharCode <= charCode && charCode <= s2.endCharCode 12109 ) !== -1; 12110 } 12111 reverse(glyphID) { 12112 for (let group of this.groups) { 12113 let start = group.startGlyphID; 12114 if (start > glyphID) continue; 12115 if (start === glyphID) return group.startCharCode; 12116 let end = start + (group.endCharCode - group.startCharCode); 12117 if (end < glyphID) continue; 12118 const code = group.startCharCode + (glyphID - start); 12119 return { code, unicode: String.fromCodePoint(code) }; 12120 } 12121 return {}; 12122 } 12123 getSupportedCharCodes(preservePropNames = false) { 12124 if (preservePropNames) return this.groups; 12125 return this.groups.map((v2) => ({ 12126 start: v2.startCharCode, 12127 end: v2.endCharCode 12128 })); 12129 } 12130 }; 12131 var SequentialMapGroup = class { 12132 constructor(p22) { 12133 this.startCharCode = p22.uint32; 12134 this.endCharCode = p22.uint32; 12135 this.startGlyphID = p22.uint32; 12136 } 12137 }; 12138 var Format13 = class extends Subtable { 12139 constructor(p22, platformID, encodingID) { 12140 super(p22, platformID, encodingID); 12141 this.format = 13; 12142 p22.uint16; 12143 this.length = p22.uint32; 12144 this.language = p22.uint32; 12145 this.numGroups = p22.uint32; 12146 const getter = [...new Array(this.numGroups)].map( 12147 (_) => new ConstantMapGroup(p22) 12148 ); 12149 lazy$1(this, `groups`, getter); 12150 } 12151 supports(charCode) { 12152 if (charCode.charCodeAt) charCode = charCode.charCodeAt(0); 12153 return this.groups.findIndex( 12154 (s2) => s2.startCharCode <= charCode && charCode <= s2.endCharCode 12155 ) !== -1; 12156 } 12157 reverse(glyphID) { 12158 console.warn(`reverse not implemented for cmap subtable format 13`); 12159 return {}; 12160 } 12161 getSupportedCharCodes(preservePropNames = false) { 12162 if (preservePropNames) return this.groups; 12163 return this.groups.map((v2) => ({ 12164 start: v2.startCharCode, 12165 end: v2.endCharCode 12166 })); 12167 } 12168 }; 12169 var ConstantMapGroup = class { 12170 constructor(p22) { 12171 this.startCharCode = p22.uint32; 12172 this.endCharCode = p22.uint32; 12173 this.glyphID = p22.uint32; 12174 } 12175 }; 12176 var Format14 = class extends Subtable { 12177 constructor(p22, platformID, encodingID) { 12178 super(p22, platformID, encodingID); 12179 this.subTableStart = p22.currentPosition; 12180 this.format = 14; 12181 this.length = p22.uint32; 12182 this.numVarSelectorRecords = p22.uint32; 12183 lazy$1( 12184 this, 12185 `varSelectors`, 12186 () => [...new Array(this.numVarSelectorRecords)].map( 12187 (_) => new VariationSelector(p22) 12188 ) 12189 ); 12190 } 12191 supports() { 12192 console.warn(`supports not implemented for cmap subtable format 14`); 12193 return 0; 12194 } 12195 getSupportedCharCodes() { 12196 console.warn( 12197 `getSupportedCharCodes not implemented for cmap subtable format 14` 12198 ); 12199 return []; 12200 } 12201 reverse(glyphID) { 12202 console.warn(`reverse not implemented for cmap subtable format 14`); 12203 return {}; 12204 } 12205 supportsVariation(variation) { 12206 let v2 = this.varSelector.find( 12207 (uvs) => uvs.varSelector === variation 12208 ); 12209 return v2 ? v2 : false; 12210 } 12211 getSupportedVariations() { 12212 return this.varSelectors.map((v2) => v2.varSelector); 12213 } 12214 }; 12215 var VariationSelector = class { 12216 constructor(p22) { 12217 this.varSelector = p22.uint24; 12218 this.defaultUVSOffset = p22.Offset32; 12219 this.nonDefaultUVSOffset = p22.Offset32; 12220 } 12221 }; 12222 function createSubTable(parser, platformID, encodingID) { 12223 const format = parser.uint16; 12224 if (format === 0) return new Format0(parser, platformID, encodingID); 12225 if (format === 2) return new Format2(parser, platformID, encodingID); 12226 if (format === 4) return new Format4(parser, platformID, encodingID); 12227 if (format === 6) return new Format6(parser, platformID, encodingID); 12228 if (format === 8) return new Format8(parser, platformID, encodingID); 12229 if (format === 10) return new Format10(parser, platformID, encodingID); 12230 if (format === 12) return new Format12(parser, platformID, encodingID); 12231 if (format === 13) return new Format13(parser, platformID, encodingID); 12232 if (format === 14) return new Format14(parser, platformID, encodingID); 12233 return {}; 12234 } 12235 var cmap = class extends SimpleTable { 12236 constructor(dict, dataview) { 12237 const { p: p22 } = super(dict, dataview); 12238 this.version = p22.uint16; 12239 this.numTables = p22.uint16; 12240 this.encodingRecords = [...new Array(this.numTables)].map( 12241 (_) => new EncodingRecord(p22, this.tableStart) 12242 ); 12243 } 12244 getSubTable(tableID) { 12245 return this.encodingRecords[tableID].table; 12246 } 12247 getSupportedEncodings() { 12248 return this.encodingRecords.map((r3) => ({ 12249 platformID: r3.platformID, 12250 encodingId: r3.encodingID 12251 })); 12252 } 12253 getSupportedCharCodes(platformID, encodingID) { 12254 const recordID = this.encodingRecords.findIndex( 12255 (r3) => r3.platformID === platformID && r3.encodingID === encodingID 12256 ); 12257 if (recordID === -1) return false; 12258 const subtable = this.getSubTable(recordID); 12259 return subtable.getSupportedCharCodes(); 12260 } 12261 reverse(glyphid) { 12262 for (let i2 = 0; i2 < this.numTables; i2++) { 12263 let code = this.getSubTable(i2).reverse(glyphid); 12264 if (code) return code; 12265 } 12266 } 12267 getGlyphId(char) { 12268 let last = 0; 12269 this.encodingRecords.some((_, tableID) => { 12270 let t3 = this.getSubTable(tableID); 12271 if (!t3.getGlyphId) return false; 12272 last = t3.getGlyphId(char); 12273 return last !== 0; 12274 }); 12275 return last; 12276 } 12277 supports(char) { 12278 return this.encodingRecords.some((_, tableID) => { 12279 const t3 = this.getSubTable(tableID); 12280 return t3.supports && t3.supports(char) !== false; 12281 }); 12282 } 12283 supportsVariation(variation) { 12284 return this.encodingRecords.some((_, tableID) => { 12285 const t3 = this.getSubTable(tableID); 12286 return t3.supportsVariation && t3.supportsVariation(variation) !== false; 12287 }); 12288 } 12289 }; 12290 var EncodingRecord = class { 12291 constructor(p22, tableStart) { 12292 const platformID = this.platformID = p22.uint16; 12293 const encodingID = this.encodingID = p22.uint16; 12294 const offset = this.offset = p22.Offset32; 12295 lazy$1(this, `table`, () => { 12296 p22.currentPosition = tableStart + offset; 12297 return createSubTable(p22, platformID, encodingID); 12298 }); 12299 } 12300 }; 12301 var cmap$1 = Object.freeze({ __proto__: null, cmap }); 12302 var head = class extends SimpleTable { 12303 constructor(dict, dataview) { 12304 const { p: p22 } = super(dict, dataview); 12305 this.load({ 12306 majorVersion: p22.uint16, 12307 minorVersion: p22.uint16, 12308 fontRevision: p22.fixed, 12309 checkSumAdjustment: p22.uint32, 12310 magicNumber: p22.uint32, 12311 flags: p22.flags(16), 12312 unitsPerEm: p22.uint16, 12313 created: p22.longdatetime, 12314 modified: p22.longdatetime, 12315 xMin: p22.int16, 12316 yMin: p22.int16, 12317 xMax: p22.int16, 12318 yMax: p22.int16, 12319 macStyle: p22.flags(16), 12320 lowestRecPPEM: p22.uint16, 12321 fontDirectionHint: p22.uint16, 12322 indexToLocFormat: p22.uint16, 12323 glyphDataFormat: p22.uint16 12324 }); 12325 } 12326 }; 12327 var head$1 = Object.freeze({ __proto__: null, head }); 12328 var hhea = class extends SimpleTable { 12329 constructor(dict, dataview) { 12330 const { p: p22 } = super(dict, dataview); 12331 this.majorVersion = p22.uint16; 12332 this.minorVersion = p22.uint16; 12333 this.ascender = p22.fword; 12334 this.descender = p22.fword; 12335 this.lineGap = p22.fword; 12336 this.advanceWidthMax = p22.ufword; 12337 this.minLeftSideBearing = p22.fword; 12338 this.minRightSideBearing = p22.fword; 12339 this.xMaxExtent = p22.fword; 12340 this.caretSlopeRise = p22.int16; 12341 this.caretSlopeRun = p22.int16; 12342 this.caretOffset = p22.int16; 12343 p22.int16; 12344 p22.int16; 12345 p22.int16; 12346 p22.int16; 12347 this.metricDataFormat = p22.int16; 12348 this.numberOfHMetrics = p22.uint16; 12349 p22.verifyLength(); 12350 } 12351 }; 12352 var hhea$1 = Object.freeze({ __proto__: null, hhea }); 12353 var hmtx = class extends SimpleTable { 12354 constructor(dict, dataview, tables) { 12355 const { p: p22 } = super(dict, dataview); 12356 const numberOfHMetrics = tables.hhea.numberOfHMetrics; 12357 const numGlyphs = tables.maxp.numGlyphs; 12358 const metricsStart = p22.currentPosition; 12359 lazy$1(this, `hMetrics`, () => { 12360 p22.currentPosition = metricsStart; 12361 return [...new Array(numberOfHMetrics)].map( 12362 (_) => new LongHorMetric(p22.uint16, p22.int16) 12363 ); 12364 }); 12365 if (numberOfHMetrics < numGlyphs) { 12366 const lsbStart = metricsStart + numberOfHMetrics * 4; 12367 lazy$1(this, `leftSideBearings`, () => { 12368 p22.currentPosition = lsbStart; 12369 return [...new Array(numGlyphs - numberOfHMetrics)].map( 12370 (_) => p22.int16 12371 ); 12372 }); 12373 } 12374 } 12375 }; 12376 var LongHorMetric = class { 12377 constructor(w2, b2) { 12378 this.advanceWidth = w2; 12379 this.lsb = b2; 12380 } 12381 }; 12382 var hmtx$1 = Object.freeze({ __proto__: null, hmtx }); 12383 var maxp = class extends SimpleTable { 12384 constructor(dict, dataview) { 12385 const { p: p22 } = super(dict, dataview); 12386 this.version = p22.legacyFixed; 12387 this.numGlyphs = p22.uint16; 12388 if (this.version === 1) { 12389 this.maxPoints = p22.uint16; 12390 this.maxContours = p22.uint16; 12391 this.maxCompositePoints = p22.uint16; 12392 this.maxCompositeContours = p22.uint16; 12393 this.maxZones = p22.uint16; 12394 this.maxTwilightPoints = p22.uint16; 12395 this.maxStorage = p22.uint16; 12396 this.maxFunctionDefs = p22.uint16; 12397 this.maxInstructionDefs = p22.uint16; 12398 this.maxStackElements = p22.uint16; 12399 this.maxSizeOfInstructions = p22.uint16; 12400 this.maxComponentElements = p22.uint16; 12401 this.maxComponentDepth = p22.uint16; 12402 } 12403 p22.verifyLength(); 12404 } 12405 }; 12406 var maxp$1 = Object.freeze({ __proto__: null, maxp }); 12407 var name = class extends SimpleTable { 12408 constructor(dict, dataview) { 12409 const { p: p22 } = super(dict, dataview); 12410 this.format = p22.uint16; 12411 this.count = p22.uint16; 12412 this.stringOffset = p22.Offset16; 12413 this.nameRecords = [...new Array(this.count)].map( 12414 (_) => new NameRecord(p22, this) 12415 ); 12416 if (this.format === 1) { 12417 this.langTagCount = p22.uint16; 12418 this.langTagRecords = [...new Array(this.langTagCount)].map( 12419 (_) => new LangTagRecord(p22.uint16, p22.Offset16) 12420 ); 12421 } 12422 this.stringStart = this.tableStart + this.stringOffset; 12423 } 12424 get(nameID) { 12425 let record = this.nameRecords.find( 12426 (record2) => record2.nameID === nameID 12427 ); 12428 if (record) return record.string; 12429 } 12430 }; 12431 var LangTagRecord = class { 12432 constructor(length, offset) { 12433 this.length = length; 12434 this.offset = offset; 12435 } 12436 }; 12437 var NameRecord = class { 12438 constructor(p22, nameTable) { 12439 this.platformID = p22.uint16; 12440 this.encodingID = p22.uint16; 12441 this.languageID = p22.uint16; 12442 this.nameID = p22.uint16; 12443 this.length = p22.uint16; 12444 this.offset = p22.Offset16; 12445 lazy$1(this, `string`, () => { 12446 p22.currentPosition = nameTable.stringStart + this.offset; 12447 return decodeString(p22, this); 12448 }); 12449 } 12450 }; 12451 function decodeString(p22, record) { 12452 const { platformID, length } = record; 12453 if (length === 0) return ``; 12454 if (platformID === 0 || platformID === 3) { 12455 const str2 = []; 12456 for (let i2 = 0, e2 = length / 2; i2 < e2; i2++) 12457 str2[i2] = String.fromCharCode(p22.uint16); 12458 return str2.join(``); 12459 } 12460 const bytes = p22.readBytes(length); 12461 const str = []; 12462 bytes.forEach(function(b2, i2) { 12463 str[i2] = String.fromCharCode(b2); 12464 }); 12465 return str.join(``); 12466 } 12467 var name$1 = Object.freeze({ __proto__: null, name }); 12468 var OS2 = class extends SimpleTable { 12469 constructor(dict, dataview) { 12470 const { p: p22 } = super(dict, dataview); 12471 this.version = p22.uint16; 12472 this.xAvgCharWidth = p22.int16; 12473 this.usWeightClass = p22.uint16; 12474 this.usWidthClass = p22.uint16; 12475 this.fsType = p22.uint16; 12476 this.ySubscriptXSize = p22.int16; 12477 this.ySubscriptYSize = p22.int16; 12478 this.ySubscriptXOffset = p22.int16; 12479 this.ySubscriptYOffset = p22.int16; 12480 this.ySuperscriptXSize = p22.int16; 12481 this.ySuperscriptYSize = p22.int16; 12482 this.ySuperscriptXOffset = p22.int16; 12483 this.ySuperscriptYOffset = p22.int16; 12484 this.yStrikeoutSize = p22.int16; 12485 this.yStrikeoutPosition = p22.int16; 12486 this.sFamilyClass = p22.int16; 12487 this.panose = [...new Array(10)].map((_) => p22.uint8); 12488 this.ulUnicodeRange1 = p22.flags(32); 12489 this.ulUnicodeRange2 = p22.flags(32); 12490 this.ulUnicodeRange3 = p22.flags(32); 12491 this.ulUnicodeRange4 = p22.flags(32); 12492 this.achVendID = p22.tag; 12493 this.fsSelection = p22.uint16; 12494 this.usFirstCharIndex = p22.uint16; 12495 this.usLastCharIndex = p22.uint16; 12496 this.sTypoAscender = p22.int16; 12497 this.sTypoDescender = p22.int16; 12498 this.sTypoLineGap = p22.int16; 12499 this.usWinAscent = p22.uint16; 12500 this.usWinDescent = p22.uint16; 12501 if (this.version === 0) return p22.verifyLength(); 12502 this.ulCodePageRange1 = p22.flags(32); 12503 this.ulCodePageRange2 = p22.flags(32); 12504 if (this.version === 1) return p22.verifyLength(); 12505 this.sxHeight = p22.int16; 12506 this.sCapHeight = p22.int16; 12507 this.usDefaultChar = p22.uint16; 12508 this.usBreakChar = p22.uint16; 12509 this.usMaxContext = p22.uint16; 12510 if (this.version <= 4) return p22.verifyLength(); 12511 this.usLowerOpticalPointSize = p22.uint16; 12512 this.usUpperOpticalPointSize = p22.uint16; 12513 if (this.version === 5) return p22.verifyLength(); 12514 } 12515 }; 12516 var OS2$1 = Object.freeze({ __proto__: null, OS2 }); 12517 var post = class extends SimpleTable { 12518 constructor(dict, dataview) { 12519 const { p: p22 } = super(dict, dataview); 12520 this.version = p22.legacyFixed; 12521 this.italicAngle = p22.fixed; 12522 this.underlinePosition = p22.fword; 12523 this.underlineThickness = p22.fword; 12524 this.isFixedPitch = p22.uint32; 12525 this.minMemType42 = p22.uint32; 12526 this.maxMemType42 = p22.uint32; 12527 this.minMemType1 = p22.uint32; 12528 this.maxMemType1 = p22.uint32; 12529 if (this.version === 1 || this.version === 3) return p22.verifyLength(); 12530 this.numGlyphs = p22.uint16; 12531 if (this.version === 2) { 12532 this.glyphNameIndex = [...new Array(this.numGlyphs)].map( 12533 (_) => p22.uint16 12534 ); 12535 this.namesOffset = p22.currentPosition; 12536 this.glyphNameOffsets = [1]; 12537 for (let i2 = 0; i2 < this.numGlyphs; i2++) { 12538 let index = this.glyphNameIndex[i2]; 12539 if (index < macStrings.length) { 12540 this.glyphNameOffsets.push(this.glyphNameOffsets[i2]); 12541 continue; 12542 } 12543 let bytelength = p22.int8; 12544 p22.skip(bytelength); 12545 this.glyphNameOffsets.push( 12546 this.glyphNameOffsets[i2] + bytelength + 1 12547 ); 12548 } 12549 } 12550 if (this.version === 2.5) { 12551 this.offset = [...new Array(this.numGlyphs)].map( 12552 (_) => p22.int8 12553 ); 12554 } 12555 } 12556 getGlyphName(glyphid) { 12557 if (this.version !== 2) { 12558 console.warn( 12559 `post table version $this.version} does not support glyph name lookups` 12560 ); 12561 return ``; 12562 } 12563 let index = this.glyphNameIndex[glyphid]; 12564 if (index < 258) return macStrings[index]; 12565 let offset = this.glyphNameOffsets[glyphid]; 12566 let next = this.glyphNameOffsets[glyphid + 1]; 12567 let len = next - offset - 1; 12568 if (len === 0) return `.notdef.`; 12569 this.parser.currentPosition = this.namesOffset + offset; 12570 const data = this.parser.readBytes( 12571 len, 12572 this.namesOffset + offset, 12573 8, 12574 true 12575 ); 12576 return data.map((b2) => String.fromCharCode(b2)).join(``); 12577 } 12578 }; 12579 var macStrings = [ 12580 `.notdef`, 12581 `.null`, 12582 `nonmarkingreturn`, 12583 `space`, 12584 `exclam`, 12585 `quotedbl`, 12586 `numbersign`, 12587 `dollar`, 12588 `percent`, 12589 `ampersand`, 12590 `quotesingle`, 12591 `parenleft`, 12592 `parenright`, 12593 `asterisk`, 12594 `plus`, 12595 `comma`, 12596 `hyphen`, 12597 `period`, 12598 `slash`, 12599 `zero`, 12600 `one`, 12601 `two`, 12602 `three`, 12603 `four`, 12604 `five`, 12605 `six`, 12606 `seven`, 12607 `eight`, 12608 `nine`, 12609 `colon`, 12610 `semicolon`, 12611 `less`, 12612 `equal`, 12613 `greater`, 12614 `question`, 12615 `at`, 12616 `A`, 12617 `B`, 12618 `C`, 12619 `D`, 12620 `E`, 12621 `F`, 12622 `G`, 12623 `H`, 12624 `I`, 12625 `J`, 12626 `K`, 12627 `L`, 12628 `M`, 12629 `N`, 12630 `O`, 12631 `P`, 12632 `Q`, 12633 `R`, 12634 `S`, 12635 `T`, 12636 `U`, 12637 `V`, 12638 `W`, 12639 `X`, 12640 `Y`, 12641 `Z`, 12642 `bracketleft`, 12643 `backslash`, 12644 `bracketright`, 12645 `asciicircum`, 12646 `underscore`, 12647 `grave`, 12648 `a`, 12649 `b`, 12650 `c`, 12651 `d`, 12652 `e`, 12653 `f`, 12654 `g`, 12655 `h`, 12656 `i`, 12657 `j`, 12658 `k`, 12659 `l`, 12660 `m`, 12661 `n`, 12662 `o`, 12663 `p`, 12664 `q`, 12665 `r`, 12666 `s`, 12667 `t`, 12668 `u`, 12669 `v`, 12670 `w`, 12671 `x`, 12672 `y`, 12673 `z`, 12674 `braceleft`, 12675 `bar`, 12676 `braceright`, 12677 `asciitilde`, 12678 `Adieresis`, 12679 `Aring`, 12680 `Ccedilla`, 12681 `Eacute`, 12682 `Ntilde`, 12683 `Odieresis`, 12684 `Udieresis`, 12685 `aacute`, 12686 `agrave`, 12687 `acircumflex`, 12688 `adieresis`, 12689 `atilde`, 12690 `aring`, 12691 `ccedilla`, 12692 `eacute`, 12693 `egrave`, 12694 `ecircumflex`, 12695 `edieresis`, 12696 `iacute`, 12697 `igrave`, 12698 `icircumflex`, 12699 `idieresis`, 12700 `ntilde`, 12701 `oacute`, 12702 `ograve`, 12703 `ocircumflex`, 12704 `odieresis`, 12705 `otilde`, 12706 `uacute`, 12707 `ugrave`, 12708 `ucircumflex`, 12709 `udieresis`, 12710 `dagger`, 12711 `degree`, 12712 `cent`, 12713 `sterling`, 12714 `section`, 12715 `bullet`, 12716 `paragraph`, 12717 `germandbls`, 12718 `registered`, 12719 `copyright`, 12720 `trademark`, 12721 `acute`, 12722 `dieresis`, 12723 `notequal`, 12724 `AE`, 12725 `Oslash`, 12726 `infinity`, 12727 `plusminus`, 12728 `lessequal`, 12729 `greaterequal`, 12730 `yen`, 12731 `mu`, 12732 `partialdiff`, 12733 `summation`, 12734 `product`, 12735 `pi`, 12736 `integral`, 12737 `ordfeminine`, 12738 `ordmasculine`, 12739 `Omega`, 12740 `ae`, 12741 `oslash`, 12742 `questiondown`, 12743 `exclamdown`, 12744 `logicalnot`, 12745 `radical`, 12746 `florin`, 12747 `approxequal`, 12748 `Delta`, 12749 `guillemotleft`, 12750 `guillemotright`, 12751 `ellipsis`, 12752 `nonbreakingspace`, 12753 `Agrave`, 12754 `Atilde`, 12755 `Otilde`, 12756 `OE`, 12757 `oe`, 12758 `endash`, 12759 `emdash`, 12760 `quotedblleft`, 12761 `quotedblright`, 12762 `quoteleft`, 12763 `quoteright`, 12764 `divide`, 12765 `lozenge`, 12766 `ydieresis`, 12767 `Ydieresis`, 12768 `fraction`, 12769 `currency`, 12770 `guilsinglleft`, 12771 `guilsinglright`, 12772 `fi`, 12773 `fl`, 12774 `daggerdbl`, 12775 `periodcentered`, 12776 `quotesinglbase`, 12777 `quotedblbase`, 12778 `perthousand`, 12779 `Acircumflex`, 12780 `Ecircumflex`, 12781 `Aacute`, 12782 `Edieresis`, 12783 `Egrave`, 12784 `Iacute`, 12785 `Icircumflex`, 12786 `Idieresis`, 12787 `Igrave`, 12788 `Oacute`, 12789 `Ocircumflex`, 12790 `apple`, 12791 `Ograve`, 12792 `Uacute`, 12793 `Ucircumflex`, 12794 `Ugrave`, 12795 `dotlessi`, 12796 `circumflex`, 12797 `tilde`, 12798 `macron`, 12799 `breve`, 12800 `dotaccent`, 12801 `ring`, 12802 `cedilla`, 12803 `hungarumlaut`, 12804 `ogonek`, 12805 `caron`, 12806 `Lslash`, 12807 `lslash`, 12808 `Scaron`, 12809 `scaron`, 12810 `Zcaron`, 12811 `zcaron`, 12812 `brokenbar`, 12813 `Eth`, 12814 `eth`, 12815 `Yacute`, 12816 `yacute`, 12817 `Thorn`, 12818 `thorn`, 12819 `minus`, 12820 `multiply`, 12821 `onesuperior`, 12822 `twosuperior`, 12823 `threesuperior`, 12824 `onehalf`, 12825 `onequarter`, 12826 `threequarters`, 12827 `franc`, 12828 `Gbreve`, 12829 `gbreve`, 12830 `Idotaccent`, 12831 `Scedilla`, 12832 `scedilla`, 12833 `Cacute`, 12834 `cacute`, 12835 `Ccaron`, 12836 `ccaron`, 12837 `dcroat` 12838 ]; 12839 var post$1 = Object.freeze({ __proto__: null, post }); 12840 var BASE = class extends SimpleTable { 12841 constructor(dict, dataview) { 12842 const { p: p22 } = super(dict, dataview); 12843 this.majorVersion = p22.uint16; 12844 this.minorVersion = p22.uint16; 12845 this.horizAxisOffset = p22.Offset16; 12846 this.vertAxisOffset = p22.Offset16; 12847 lazy$1( 12848 this, 12849 `horizAxis`, 12850 () => new AxisTable( 12851 { offset: dict.offset + this.horizAxisOffset }, 12852 dataview 12853 ) 12854 ); 12855 lazy$1( 12856 this, 12857 `vertAxis`, 12858 () => new AxisTable( 12859 { offset: dict.offset + this.vertAxisOffset }, 12860 dataview 12861 ) 12862 ); 12863 if (this.majorVersion === 1 && this.minorVersion === 1) { 12864 this.itemVarStoreOffset = p22.Offset32; 12865 lazy$1( 12866 this, 12867 `itemVarStore`, 12868 () => new AxisTable( 12869 { offset: dict.offset + this.itemVarStoreOffset }, 12870 dataview 12871 ) 12872 ); 12873 } 12874 } 12875 }; 12876 var AxisTable = class extends SimpleTable { 12877 constructor(dict, dataview) { 12878 const { p: p22 } = super(dict, dataview, `AxisTable`); 12879 this.baseTagListOffset = p22.Offset16; 12880 this.baseScriptListOffset = p22.Offset16; 12881 lazy$1( 12882 this, 12883 `baseTagList`, 12884 () => new BaseTagListTable( 12885 { offset: dict.offset + this.baseTagListOffset }, 12886 dataview 12887 ) 12888 ); 12889 lazy$1( 12890 this, 12891 `baseScriptList`, 12892 () => new BaseScriptListTable( 12893 { offset: dict.offset + this.baseScriptListOffset }, 12894 dataview 12895 ) 12896 ); 12897 } 12898 }; 12899 var BaseTagListTable = class extends SimpleTable { 12900 constructor(dict, dataview) { 12901 const { p: p22 } = super(dict, dataview, `BaseTagListTable`); 12902 this.baseTagCount = p22.uint16; 12903 this.baselineTags = [...new Array(this.baseTagCount)].map( 12904 (_) => p22.tag 12905 ); 12906 } 12907 }; 12908 var BaseScriptListTable = class extends SimpleTable { 12909 constructor(dict, dataview) { 12910 const { p: p22 } = super(dict, dataview, `BaseScriptListTable`); 12911 this.baseScriptCount = p22.uint16; 12912 const recordStart = p22.currentPosition; 12913 lazy$1(this, `baseScriptRecords`, () => { 12914 p22.currentPosition = recordStart; 12915 return [...new Array(this.baseScriptCount)].map( 12916 (_) => new BaseScriptRecord(this.start, p22) 12917 ); 12918 }); 12919 } 12920 }; 12921 var BaseScriptRecord = class { 12922 constructor(baseScriptListTableStart, p22) { 12923 this.baseScriptTag = p22.tag; 12924 this.baseScriptOffset = p22.Offset16; 12925 lazy$1(this, `baseScriptTable`, () => { 12926 p22.currentPosition = baseScriptListTableStart + this.baseScriptOffset; 12927 return new BaseScriptTable(p22); 12928 }); 12929 } 12930 }; 12931 var BaseScriptTable = class { 12932 constructor(p22) { 12933 this.start = p22.currentPosition; 12934 this.baseValuesOffset = p22.Offset16; 12935 this.defaultMinMaxOffset = p22.Offset16; 12936 this.baseLangSysCount = p22.uint16; 12937 this.baseLangSysRecords = [...new Array(this.baseLangSysCount)].map( 12938 (_) => new BaseLangSysRecord(this.start, p22) 12939 ); 12940 lazy$1(this, `baseValues`, () => { 12941 p22.currentPosition = this.start + this.baseValuesOffset; 12942 return new BaseValuesTable(p22); 12943 }); 12944 lazy$1(this, `defaultMinMax`, () => { 12945 p22.currentPosition = this.start + this.defaultMinMaxOffset; 12946 return new MinMaxTable(p22); 12947 }); 12948 } 12949 }; 12950 var BaseLangSysRecord = class { 12951 constructor(baseScriptTableStart, p22) { 12952 this.baseLangSysTag = p22.tag; 12953 this.minMaxOffset = p22.Offset16; 12954 lazy$1(this, `minMax`, () => { 12955 p22.currentPosition = baseScriptTableStart + this.minMaxOffset; 12956 return new MinMaxTable(p22); 12957 }); 12958 } 12959 }; 12960 var BaseValuesTable = class { 12961 constructor(p22) { 12962 this.parser = p22; 12963 this.start = p22.currentPosition; 12964 this.defaultBaselineIndex = p22.uint16; 12965 this.baseCoordCount = p22.uint16; 12966 this.baseCoords = [...new Array(this.baseCoordCount)].map( 12967 (_) => p22.Offset16 12968 ); 12969 } 12970 getTable(id) { 12971 this.parser.currentPosition = this.start + this.baseCoords[id]; 12972 return new BaseCoordTable(this.parser); 12973 } 12974 }; 12975 var MinMaxTable = class { 12976 constructor(p22) { 12977 this.minCoord = p22.Offset16; 12978 this.maxCoord = p22.Offset16; 12979 this.featMinMaxCount = p22.uint16; 12980 const recordStart = p22.currentPosition; 12981 lazy$1(this, `featMinMaxRecords`, () => { 12982 p22.currentPosition = recordStart; 12983 return [...new Array(this.featMinMaxCount)].map( 12984 (_) => new FeatMinMaxRecord(p22) 12985 ); 12986 }); 12987 } 12988 }; 12989 var FeatMinMaxRecord = class { 12990 constructor(p22) { 12991 this.featureTableTag = p22.tag; 12992 this.minCoord = p22.Offset16; 12993 this.maxCoord = p22.Offset16; 12994 } 12995 }; 12996 var BaseCoordTable = class { 12997 constructor(p22) { 12998 this.baseCoordFormat = p22.uint16; 12999 this.coordinate = p22.int16; 13000 if (this.baseCoordFormat === 2) { 13001 this.referenceGlyph = p22.uint16; 13002 this.baseCoordPoint = p22.uint16; 13003 } 13004 if (this.baseCoordFormat === 3) { 13005 this.deviceTable = p22.Offset16; 13006 } 13007 } 13008 }; 13009 var BASE$1 = Object.freeze({ __proto__: null, BASE }); 13010 var ClassDefinition = class { 13011 constructor(p22) { 13012 this.classFormat = p22.uint16; 13013 if (this.classFormat === 1) { 13014 this.startGlyphID = p22.uint16; 13015 this.glyphCount = p22.uint16; 13016 this.classValueArray = [...new Array(this.glyphCount)].map( 13017 (_) => p22.uint16 13018 ); 13019 } 13020 if (this.classFormat === 2) { 13021 this.classRangeCount = p22.uint16; 13022 this.classRangeRecords = [ 13023 ...new Array(this.classRangeCount) 13024 ].map((_) => new ClassRangeRecord(p22)); 13025 } 13026 } 13027 }; 13028 var ClassRangeRecord = class { 13029 constructor(p22) { 13030 this.startGlyphID = p22.uint16; 13031 this.endGlyphID = p22.uint16; 13032 this.class = p22.uint16; 13033 } 13034 }; 13035 var CoverageTable = class extends ParsedData { 13036 constructor(p22) { 13037 super(p22); 13038 this.coverageFormat = p22.uint16; 13039 if (this.coverageFormat === 1) { 13040 this.glyphCount = p22.uint16; 13041 this.glyphArray = [...new Array(this.glyphCount)].map( 13042 (_) => p22.uint16 13043 ); 13044 } 13045 if (this.coverageFormat === 2) { 13046 this.rangeCount = p22.uint16; 13047 this.rangeRecords = [...new Array(this.rangeCount)].map( 13048 (_) => new CoverageRangeRecord(p22) 13049 ); 13050 } 13051 } 13052 }; 13053 var CoverageRangeRecord = class { 13054 constructor(p22) { 13055 this.startGlyphID = p22.uint16; 13056 this.endGlyphID = p22.uint16; 13057 this.startCoverageIndex = p22.uint16; 13058 } 13059 }; 13060 var ItemVariationStoreTable = class { 13061 constructor(table, p22) { 13062 this.table = table; 13063 this.parser = p22; 13064 this.start = p22.currentPosition; 13065 this.format = p22.uint16; 13066 this.variationRegionListOffset = p22.Offset32; 13067 this.itemVariationDataCount = p22.uint16; 13068 this.itemVariationDataOffsets = [ 13069 ...new Array(this.itemVariationDataCount) 13070 ].map((_) => p22.Offset32); 13071 } 13072 }; 13073 var GDEF = class extends SimpleTable { 13074 constructor(dict, dataview) { 13075 const { p: p22 } = super(dict, dataview); 13076 this.majorVersion = p22.uint16; 13077 this.minorVersion = p22.uint16; 13078 this.glyphClassDefOffset = p22.Offset16; 13079 lazy$1(this, `glyphClassDefs`, () => { 13080 if (this.glyphClassDefOffset === 0) return void 0; 13081 p22.currentPosition = this.tableStart + this.glyphClassDefOffset; 13082 return new ClassDefinition(p22); 13083 }); 13084 this.attachListOffset = p22.Offset16; 13085 lazy$1(this, `attachList`, () => { 13086 if (this.attachListOffset === 0) return void 0; 13087 p22.currentPosition = this.tableStart + this.attachListOffset; 13088 return new AttachList(p22); 13089 }); 13090 this.ligCaretListOffset = p22.Offset16; 13091 lazy$1(this, `ligCaretList`, () => { 13092 if (this.ligCaretListOffset === 0) return void 0; 13093 p22.currentPosition = this.tableStart + this.ligCaretListOffset; 13094 return new LigCaretList(p22); 13095 }); 13096 this.markAttachClassDefOffset = p22.Offset16; 13097 lazy$1(this, `markAttachClassDef`, () => { 13098 if (this.markAttachClassDefOffset === 0) return void 0; 13099 p22.currentPosition = this.tableStart + this.markAttachClassDefOffset; 13100 return new ClassDefinition(p22); 13101 }); 13102 if (this.minorVersion >= 2) { 13103 this.markGlyphSetsDefOffset = p22.Offset16; 13104 lazy$1(this, `markGlyphSetsDef`, () => { 13105 if (this.markGlyphSetsDefOffset === 0) return void 0; 13106 p22.currentPosition = this.tableStart + this.markGlyphSetsDefOffset; 13107 return new MarkGlyphSetsTable(p22); 13108 }); 13109 } 13110 if (this.minorVersion === 3) { 13111 this.itemVarStoreOffset = p22.Offset32; 13112 lazy$1(this, `itemVarStore`, () => { 13113 if (this.itemVarStoreOffset === 0) return void 0; 13114 p22.currentPosition = this.tableStart + this.itemVarStoreOffset; 13115 return new ItemVariationStoreTable(p22); 13116 }); 13117 } 13118 } 13119 }; 13120 var AttachList = class extends ParsedData { 13121 constructor(p22) { 13122 super(p22); 13123 this.coverageOffset = p22.Offset16; 13124 this.glyphCount = p22.uint16; 13125 this.attachPointOffsets = [...new Array(this.glyphCount)].map( 13126 (_) => p22.Offset16 13127 ); 13128 } 13129 getPoint(pointID) { 13130 this.parser.currentPosition = this.start + this.attachPointOffsets[pointID]; 13131 return new AttachPoint(this.parser); 13132 } 13133 }; 13134 var AttachPoint = class { 13135 constructor(p22) { 13136 this.pointCount = p22.uint16; 13137 this.pointIndices = [...new Array(this.pointCount)].map( 13138 (_) => p22.uint16 13139 ); 13140 } 13141 }; 13142 var LigCaretList = class extends ParsedData { 13143 constructor(p22) { 13144 super(p22); 13145 this.coverageOffset = p22.Offset16; 13146 lazy$1(this, `coverage`, () => { 13147 p22.currentPosition = this.start + this.coverageOffset; 13148 return new CoverageTable(p22); 13149 }); 13150 this.ligGlyphCount = p22.uint16; 13151 this.ligGlyphOffsets = [...new Array(this.ligGlyphCount)].map( 13152 (_) => p22.Offset16 13153 ); 13154 } 13155 getLigGlyph(ligGlyphID) { 13156 this.parser.currentPosition = this.start + this.ligGlyphOffsets[ligGlyphID]; 13157 return new LigGlyph(this.parser); 13158 } 13159 }; 13160 var LigGlyph = class extends ParsedData { 13161 constructor(p22) { 13162 super(p22); 13163 this.caretCount = p22.uint16; 13164 this.caretValueOffsets = [...new Array(this.caretCount)].map( 13165 (_) => p22.Offset16 13166 ); 13167 } 13168 getCaretValue(caretID) { 13169 this.parser.currentPosition = this.start + this.caretValueOffsets[caretID]; 13170 return new CaretValue(this.parser); 13171 } 13172 }; 13173 var CaretValue = class { 13174 constructor(p22) { 13175 this.caretValueFormat = p22.uint16; 13176 if (this.caretValueFormat === 1) { 13177 this.coordinate = p22.int16; 13178 } 13179 if (this.caretValueFormat === 2) { 13180 this.caretValuePointIndex = p22.uint16; 13181 } 13182 if (this.caretValueFormat === 3) { 13183 this.coordinate = p22.int16; 13184 this.deviceOffset = p22.Offset16; 13185 } 13186 } 13187 }; 13188 var MarkGlyphSetsTable = class extends ParsedData { 13189 constructor(p22) { 13190 super(p22); 13191 this.markGlyphSetTableFormat = p22.uint16; 13192 this.markGlyphSetCount = p22.uint16; 13193 this.coverageOffsets = [...new Array(this.markGlyphSetCount)].map( 13194 (_) => p22.Offset32 13195 ); 13196 } 13197 getMarkGlyphSet(markGlyphSetID) { 13198 this.parser.currentPosition = this.start + this.coverageOffsets[markGlyphSetID]; 13199 return new CoverageTable(this.parser); 13200 } 13201 }; 13202 var GDEF$1 = Object.freeze({ __proto__: null, GDEF }); 13203 var ScriptList = class extends ParsedData { 13204 static EMPTY = { scriptCount: 0, scriptRecords: [] }; 13205 constructor(p22) { 13206 super(p22); 13207 this.scriptCount = p22.uint16; 13208 this.scriptRecords = [...new Array(this.scriptCount)].map( 13209 (_) => new ScriptRecord(p22) 13210 ); 13211 } 13212 }; 13213 var ScriptRecord = class { 13214 constructor(p22) { 13215 this.scriptTag = p22.tag; 13216 this.scriptOffset = p22.Offset16; 13217 } 13218 }; 13219 var ScriptTable = class extends ParsedData { 13220 constructor(p22) { 13221 super(p22); 13222 this.defaultLangSys = p22.Offset16; 13223 this.langSysCount = p22.uint16; 13224 this.langSysRecords = [...new Array(this.langSysCount)].map( 13225 (_) => new LangSysRecord(p22) 13226 ); 13227 } 13228 }; 13229 var LangSysRecord = class { 13230 constructor(p22) { 13231 this.langSysTag = p22.tag; 13232 this.langSysOffset = p22.Offset16; 13233 } 13234 }; 13235 var LangSysTable = class { 13236 constructor(p22) { 13237 this.lookupOrder = p22.Offset16; 13238 this.requiredFeatureIndex = p22.uint16; 13239 this.featureIndexCount = p22.uint16; 13240 this.featureIndices = [...new Array(this.featureIndexCount)].map( 13241 (_) => p22.uint16 13242 ); 13243 } 13244 }; 13245 var FeatureList = class extends ParsedData { 13246 static EMPTY = { featureCount: 0, featureRecords: [] }; 13247 constructor(p22) { 13248 super(p22); 13249 this.featureCount = p22.uint16; 13250 this.featureRecords = [...new Array(this.featureCount)].map( 13251 (_) => new FeatureRecord(p22) 13252 ); 13253 } 13254 }; 13255 var FeatureRecord = class { 13256 constructor(p22) { 13257 this.featureTag = p22.tag; 13258 this.featureOffset = p22.Offset16; 13259 } 13260 }; 13261 var FeatureTable = class extends ParsedData { 13262 constructor(p22) { 13263 super(p22); 13264 this.featureParams = p22.Offset16; 13265 this.lookupIndexCount = p22.uint16; 13266 this.lookupListIndices = [...new Array(this.lookupIndexCount)].map( 13267 (_) => p22.uint16 13268 ); 13269 } 13270 getFeatureParams() { 13271 if (this.featureParams > 0) { 13272 const p22 = this.parser; 13273 p22.currentPosition = this.start + this.featureParams; 13274 const tag = this.featureTag; 13275 if (tag === `size`) return new Size(p22); 13276 if (tag.startsWith(`cc`)) return new CharacterVariant(p22); 13277 if (tag.startsWith(`ss`)) return new StylisticSet(p22); 13278 } 13279 } 13280 }; 13281 var CharacterVariant = class { 13282 constructor(p22) { 13283 this.format = p22.uint16; 13284 this.featUiLabelNameId = p22.uint16; 13285 this.featUiTooltipTextNameId = p22.uint16; 13286 this.sampleTextNameId = p22.uint16; 13287 this.numNamedParameters = p22.uint16; 13288 this.firstParamUiLabelNameId = p22.uint16; 13289 this.charCount = p22.uint16; 13290 this.character = [...new Array(this.charCount)].map( 13291 (_) => p22.uint24 13292 ); 13293 } 13294 }; 13295 var Size = class { 13296 constructor(p22) { 13297 this.designSize = p22.uint16; 13298 this.subfamilyIdentifier = p22.uint16; 13299 this.subfamilyNameID = p22.uint16; 13300 this.smallEnd = p22.uint16; 13301 this.largeEnd = p22.uint16; 13302 } 13303 }; 13304 var StylisticSet = class { 13305 constructor(p22) { 13306 this.version = p22.uint16; 13307 this.UINameID = p22.uint16; 13308 } 13309 }; 13310 function undoCoverageOffsetParsing(instance) { 13311 instance.parser.currentPosition -= 2; 13312 delete instance.coverageOffset; 13313 delete instance.getCoverageTable; 13314 } 13315 var LookupType$1 = class extends ParsedData { 13316 constructor(p22) { 13317 super(p22); 13318 this.substFormat = p22.uint16; 13319 this.coverageOffset = p22.Offset16; 13320 } 13321 getCoverageTable() { 13322 let p22 = this.parser; 13323 p22.currentPosition = this.start + this.coverageOffset; 13324 return new CoverageTable(p22); 13325 } 13326 }; 13327 var SubstLookupRecord = class { 13328 constructor(p22) { 13329 this.glyphSequenceIndex = p22.uint16; 13330 this.lookupListIndex = p22.uint16; 13331 } 13332 }; 13333 var LookupType1$1 = class extends LookupType$1 { 13334 constructor(p22) { 13335 super(p22); 13336 this.deltaGlyphID = p22.int16; 13337 } 13338 }; 13339 var LookupType2$1 = class extends LookupType$1 { 13340 constructor(p22) { 13341 super(p22); 13342 this.sequenceCount = p22.uint16; 13343 this.sequenceOffsets = [...new Array(this.sequenceCount)].map( 13344 (_) => p22.Offset16 13345 ); 13346 } 13347 getSequence(index) { 13348 let p22 = this.parser; 13349 p22.currentPosition = this.start + this.sequenceOffsets[index]; 13350 return new SequenceTable(p22); 13351 } 13352 }; 13353 var SequenceTable = class { 13354 constructor(p22) { 13355 this.glyphCount = p22.uint16; 13356 this.substituteGlyphIDs = [...new Array(this.glyphCount)].map( 13357 (_) => p22.uint16 13358 ); 13359 } 13360 }; 13361 var LookupType3$1 = class extends LookupType$1 { 13362 constructor(p22) { 13363 super(p22); 13364 this.alternateSetCount = p22.uint16; 13365 this.alternateSetOffsets = [ 13366 ...new Array(this.alternateSetCount) 13367 ].map((_) => p22.Offset16); 13368 } 13369 getAlternateSet(index) { 13370 let p22 = this.parser; 13371 p22.currentPosition = this.start + this.alternateSetOffsets[index]; 13372 return new AlternateSetTable(p22); 13373 } 13374 }; 13375 var AlternateSetTable = class { 13376 constructor(p22) { 13377 this.glyphCount = p22.uint16; 13378 this.alternateGlyphIDs = [...new Array(this.glyphCount)].map( 13379 (_) => p22.uint16 13380 ); 13381 } 13382 }; 13383 var LookupType4$1 = class extends LookupType$1 { 13384 constructor(p22) { 13385 super(p22); 13386 this.ligatureSetCount = p22.uint16; 13387 this.ligatureSetOffsets = [...new Array(this.ligatureSetCount)].map( 13388 (_) => p22.Offset16 13389 ); 13390 } 13391 getLigatureSet(index) { 13392 let p22 = this.parser; 13393 p22.currentPosition = this.start + this.ligatureSetOffsets[index]; 13394 return new LigatureSetTable(p22); 13395 } 13396 }; 13397 var LigatureSetTable = class extends ParsedData { 13398 constructor(p22) { 13399 super(p22); 13400 this.ligatureCount = p22.uint16; 13401 this.ligatureOffsets = [...new Array(this.ligatureCount)].map( 13402 (_) => p22.Offset16 13403 ); 13404 } 13405 getLigature(index) { 13406 let p22 = this.parser; 13407 p22.currentPosition = this.start + this.ligatureOffsets[index]; 13408 return new LigatureTable(p22); 13409 } 13410 }; 13411 var LigatureTable = class { 13412 constructor(p22) { 13413 this.ligatureGlyph = p22.uint16; 13414 this.componentCount = p22.uint16; 13415 this.componentGlyphIDs = [ 13416 ...new Array(this.componentCount - 1) 13417 ].map((_) => p22.uint16); 13418 } 13419 }; 13420 var LookupType5$1 = class extends LookupType$1 { 13421 constructor(p22) { 13422 super(p22); 13423 if (this.substFormat === 1) { 13424 this.subRuleSetCount = p22.uint16; 13425 this.subRuleSetOffsets = [ 13426 ...new Array(this.subRuleSetCount) 13427 ].map((_) => p22.Offset16); 13428 } 13429 if (this.substFormat === 2) { 13430 this.classDefOffset = p22.Offset16; 13431 this.subClassSetCount = p22.uint16; 13432 this.subClassSetOffsets = [ 13433 ...new Array(this.subClassSetCount) 13434 ].map((_) => p22.Offset16); 13435 } 13436 if (this.substFormat === 3) { 13437 undoCoverageOffsetParsing(this); 13438 this.glyphCount = p22.uint16; 13439 this.substitutionCount = p22.uint16; 13440 this.coverageOffsets = [...new Array(this.glyphCount)].map( 13441 (_) => p22.Offset16 13442 ); 13443 this.substLookupRecords = [ 13444 ...new Array(this.substitutionCount) 13445 ].map((_) => new SubstLookupRecord(p22)); 13446 } 13447 } 13448 getSubRuleSet(index) { 13449 if (this.substFormat !== 1) 13450 throw new Error( 13451 `lookup type 5.$this.substFormat} has no subrule sets.` 13452 ); 13453 let p22 = this.parser; 13454 p22.currentPosition = this.start + this.subRuleSetOffsets[index]; 13455 return new SubRuleSetTable(p22); 13456 } 13457 getSubClassSet(index) { 13458 if (this.substFormat !== 2) 13459 throw new Error( 13460 `lookup type 5.$this.substFormat} has no subclass sets.` 13461 ); 13462 let p22 = this.parser; 13463 p22.currentPosition = this.start + this.subClassSetOffsets[index]; 13464 return new SubClassSetTable(p22); 13465 } 13466 getCoverageTable(index) { 13467 if (this.substFormat !== 3 && !index) 13468 return super.getCoverageTable(); 13469 if (!index) 13470 throw new Error( 13471 `lookup type 5.$this.substFormat} requires an coverage table index.` 13472 ); 13473 let p22 = this.parser; 13474 p22.currentPosition = this.start + this.coverageOffsets[index]; 13475 return new CoverageTable(p22); 13476 } 13477 }; 13478 var SubRuleSetTable = class extends ParsedData { 13479 constructor(p22) { 13480 super(p22); 13481 this.subRuleCount = p22.uint16; 13482 this.subRuleOffsets = [...new Array(this.subRuleCount)].map( 13483 (_) => p22.Offset16 13484 ); 13485 } 13486 getSubRule(index) { 13487 let p22 = this.parser; 13488 p22.currentPosition = this.start + this.subRuleOffsets[index]; 13489 return new SubRuleTable(p22); 13490 } 13491 }; 13492 var SubRuleTable = class { 13493 constructor(p22) { 13494 this.glyphCount = p22.uint16; 13495 this.substitutionCount = p22.uint16; 13496 this.inputSequence = [...new Array(this.glyphCount - 1)].map( 13497 (_) => p22.uint16 13498 ); 13499 this.substLookupRecords = [ 13500 ...new Array(this.substitutionCount) 13501 ].map((_) => new SubstLookupRecord(p22)); 13502 } 13503 }; 13504 var SubClassSetTable = class extends ParsedData { 13505 constructor(p22) { 13506 super(p22); 13507 this.subClassRuleCount = p22.uint16; 13508 this.subClassRuleOffsets = [ 13509 ...new Array(this.subClassRuleCount) 13510 ].map((_) => p22.Offset16); 13511 } 13512 getSubClass(index) { 13513 let p22 = this.parser; 13514 p22.currentPosition = this.start + this.subClassRuleOffsets[index]; 13515 return new SubClassRuleTable(p22); 13516 } 13517 }; 13518 var SubClassRuleTable = class extends SubRuleTable { 13519 constructor(p22) { 13520 super(p22); 13521 } 13522 }; 13523 var LookupType6$1 = class extends LookupType$1 { 13524 constructor(p22) { 13525 super(p22); 13526 if (this.substFormat === 1) { 13527 this.chainSubRuleSetCount = p22.uint16; 13528 this.chainSubRuleSetOffsets = [ 13529 ...new Array(this.chainSubRuleSetCount) 13530 ].map((_) => p22.Offset16); 13531 } 13532 if (this.substFormat === 2) { 13533 this.backtrackClassDefOffset = p22.Offset16; 13534 this.inputClassDefOffset = p22.Offset16; 13535 this.lookaheadClassDefOffset = p22.Offset16; 13536 this.chainSubClassSetCount = p22.uint16; 13537 this.chainSubClassSetOffsets = [ 13538 ...new Array(this.chainSubClassSetCount) 13539 ].map((_) => p22.Offset16); 13540 } 13541 if (this.substFormat === 3) { 13542 undoCoverageOffsetParsing(this); 13543 this.backtrackGlyphCount = p22.uint16; 13544 this.backtrackCoverageOffsets = [ 13545 ...new Array(this.backtrackGlyphCount) 13546 ].map((_) => p22.Offset16); 13547 this.inputGlyphCount = p22.uint16; 13548 this.inputCoverageOffsets = [ 13549 ...new Array(this.inputGlyphCount) 13550 ].map((_) => p22.Offset16); 13551 this.lookaheadGlyphCount = p22.uint16; 13552 this.lookaheadCoverageOffsets = [ 13553 ...new Array(this.lookaheadGlyphCount) 13554 ].map((_) => p22.Offset16); 13555 this.seqLookupCount = p22.uint16; 13556 this.seqLookupRecords = [ 13557 ...new Array(this.substitutionCount) 13558 ].map((_) => new SequenceLookupRecord(p22)); 13559 } 13560 } 13561 getChainSubRuleSet(index) { 13562 if (this.substFormat !== 1) 13563 throw new Error( 13564 `lookup type 6.$this.substFormat} has no chainsubrule sets.` 13565 ); 13566 let p22 = this.parser; 13567 p22.currentPosition = this.start + this.chainSubRuleSetOffsets[index]; 13568 return new ChainSubRuleSetTable(p22); 13569 } 13570 getChainSubClassSet(index) { 13571 if (this.substFormat !== 2) 13572 throw new Error( 13573 `lookup type 6.$this.substFormat} has no chainsubclass sets.` 13574 ); 13575 let p22 = this.parser; 13576 p22.currentPosition = this.start + this.chainSubClassSetOffsets[index]; 13577 return new ChainSubClassSetTable(p22); 13578 } 13579 getCoverageFromOffset(offset) { 13580 if (this.substFormat !== 3) 13581 throw new Error( 13582 `lookup type 6.$this.substFormat} does not use contextual coverage offsets.` 13583 ); 13584 let p22 = this.parser; 13585 p22.currentPosition = this.start + offset; 13586 return new CoverageTable(p22); 13587 } 13588 }; 13589 var ChainSubRuleSetTable = class extends ParsedData { 13590 constructor(p22) { 13591 super(p22); 13592 this.chainSubRuleCount = p22.uint16; 13593 this.chainSubRuleOffsets = [ 13594 ...new Array(this.chainSubRuleCount) 13595 ].map((_) => p22.Offset16); 13596 } 13597 getSubRule(index) { 13598 let p22 = this.parser; 13599 p22.currentPosition = this.start + this.chainSubRuleOffsets[index]; 13600 return new ChainSubRuleTable(p22); 13601 } 13602 }; 13603 var ChainSubRuleTable = class { 13604 constructor(p22) { 13605 this.backtrackGlyphCount = p22.uint16; 13606 this.backtrackSequence = [ 13607 ...new Array(this.backtrackGlyphCount) 13608 ].map((_) => p22.uint16); 13609 this.inputGlyphCount = p22.uint16; 13610 this.inputSequence = [...new Array(this.inputGlyphCount - 1)].map( 13611 (_) => p22.uint16 13612 ); 13613 this.lookaheadGlyphCount = p22.uint16; 13614 this.lookAheadSequence = [ 13615 ...new Array(this.lookAheadGlyphCount) 13616 ].map((_) => p22.uint16); 13617 this.substitutionCount = p22.uint16; 13618 this.substLookupRecords = [...new Array(this.SubstCount)].map( 13619 (_) => new SubstLookupRecord(p22) 13620 ); 13621 } 13622 }; 13623 var ChainSubClassSetTable = class extends ParsedData { 13624 constructor(p22) { 13625 super(p22); 13626 this.chainSubClassRuleCount = p22.uint16; 13627 this.chainSubClassRuleOffsets = [ 13628 ...new Array(this.chainSubClassRuleCount) 13629 ].map((_) => p22.Offset16); 13630 } 13631 getSubClass(index) { 13632 let p22 = this.parser; 13633 p22.currentPosition = this.start + this.chainSubRuleOffsets[index]; 13634 return new ChainSubClassRuleTable(p22); 13635 } 13636 }; 13637 var ChainSubClassRuleTable = class { 13638 constructor(p22) { 13639 this.backtrackGlyphCount = p22.uint16; 13640 this.backtrackSequence = [ 13641 ...new Array(this.backtrackGlyphCount) 13642 ].map((_) => p22.uint16); 13643 this.inputGlyphCount = p22.uint16; 13644 this.inputSequence = [...new Array(this.inputGlyphCount - 1)].map( 13645 (_) => p22.uint16 13646 ); 13647 this.lookaheadGlyphCount = p22.uint16; 13648 this.lookAheadSequence = [ 13649 ...new Array(this.lookAheadGlyphCount) 13650 ].map((_) => p22.uint16); 13651 this.substitutionCount = p22.uint16; 13652 this.substLookupRecords = [ 13653 ...new Array(this.substitutionCount) 13654 ].map((_) => new SequenceLookupRecord(p22)); 13655 } 13656 }; 13657 var SequenceLookupRecord = class extends ParsedData { 13658 constructor(p22) { 13659 super(p22); 13660 this.sequenceIndex = p22.uint16; 13661 this.lookupListIndex = p22.uint16; 13662 } 13663 }; 13664 var LookupType7$1 = class extends ParsedData { 13665 constructor(p22) { 13666 super(p22); 13667 this.substFormat = p22.uint16; 13668 this.extensionLookupType = p22.uint16; 13669 this.extensionOffset = p22.Offset32; 13670 } 13671 }; 13672 var LookupType8$1 = class extends LookupType$1 { 13673 constructor(p22) { 13674 super(p22); 13675 this.backtrackGlyphCount = p22.uint16; 13676 this.backtrackCoverageOffsets = [ 13677 ...new Array(this.backtrackGlyphCount) 13678 ].map((_) => p22.Offset16); 13679 this.lookaheadGlyphCount = p22.uint16; 13680 this.lookaheadCoverageOffsets = [ 13681 new Array(this.lookaheadGlyphCount) 13682 ].map((_) => p22.Offset16); 13683 this.glyphCount = p22.uint16; 13684 this.substituteGlyphIDs = [...new Array(this.glyphCount)].map( 13685 (_) => p22.uint16 13686 ); 13687 } 13688 }; 13689 var GSUBtables = { 13690 buildSubtable: function(type, p22) { 13691 const subtable = new [ 13692 void 0, 13693 LookupType1$1, 13694 LookupType2$1, 13695 LookupType3$1, 13696 LookupType4$1, 13697 LookupType5$1, 13698 LookupType6$1, 13699 LookupType7$1, 13700 LookupType8$1 13701 ][type](p22); 13702 subtable.type = type; 13703 return subtable; 13704 } 13705 }; 13706 var LookupType = class extends ParsedData { 13707 constructor(p22) { 13708 super(p22); 13709 } 13710 }; 13711 var LookupType1 = class extends LookupType { 13712 constructor(p22) { 13713 super(p22); 13714 console.log(`lookup type 1`); 13715 } 13716 }; 13717 var LookupType2 = class extends LookupType { 13718 constructor(p22) { 13719 super(p22); 13720 console.log(`lookup type 2`); 13721 } 13722 }; 13723 var LookupType3 = class extends LookupType { 13724 constructor(p22) { 13725 super(p22); 13726 console.log(`lookup type 3`); 13727 } 13728 }; 13729 var LookupType4 = class extends LookupType { 13730 constructor(p22) { 13731 super(p22); 13732 console.log(`lookup type 4`); 13733 } 13734 }; 13735 var LookupType5 = class extends LookupType { 13736 constructor(p22) { 13737 super(p22); 13738 console.log(`lookup type 5`); 13739 } 13740 }; 13741 var LookupType6 = class extends LookupType { 13742 constructor(p22) { 13743 super(p22); 13744 console.log(`lookup type 6`); 13745 } 13746 }; 13747 var LookupType7 = class extends LookupType { 13748 constructor(p22) { 13749 super(p22); 13750 console.log(`lookup type 7`); 13751 } 13752 }; 13753 var LookupType8 = class extends LookupType { 13754 constructor(p22) { 13755 super(p22); 13756 console.log(`lookup type 8`); 13757 } 13758 }; 13759 var LookupType9 = class extends LookupType { 13760 constructor(p22) { 13761 super(p22); 13762 console.log(`lookup type 9`); 13763 } 13764 }; 13765 var GPOStables = { 13766 buildSubtable: function(type, p22) { 13767 const subtable = new [ 13768 void 0, 13769 LookupType1, 13770 LookupType2, 13771 LookupType3, 13772 LookupType4, 13773 LookupType5, 13774 LookupType6, 13775 LookupType7, 13776 LookupType8, 13777 LookupType9 13778 ][type](p22); 13779 subtable.type = type; 13780 return subtable; 13781 } 13782 }; 13783 var LookupList = class extends ParsedData { 13784 static EMPTY = { lookupCount: 0, lookups: [] }; 13785 constructor(p22) { 13786 super(p22); 13787 this.lookupCount = p22.uint16; 13788 this.lookups = [...new Array(this.lookupCount)].map( 13789 (_) => p22.Offset16 13790 ); 13791 } 13792 }; 13793 var LookupTable = class extends ParsedData { 13794 constructor(p22, type) { 13795 super(p22); 13796 this.ctType = type; 13797 this.lookupType = p22.uint16; 13798 this.lookupFlag = p22.uint16; 13799 this.subTableCount = p22.uint16; 13800 this.subtableOffsets = [...new Array(this.subTableCount)].map( 13801 (_) => p22.Offset16 13802 ); 13803 this.markFilteringSet = p22.uint16; 13804 } 13805 get rightToLeft() { 13806 return this.lookupFlag & true; 13807 } 13808 get ignoreBaseGlyphs() { 13809 return this.lookupFlag & true; 13810 } 13811 get ignoreLigatures() { 13812 return this.lookupFlag & true; 13813 } 13814 get ignoreMarks() { 13815 return this.lookupFlag & true; 13816 } 13817 get useMarkFilteringSet() { 13818 return this.lookupFlag & true; 13819 } 13820 get markAttachmentType() { 13821 return this.lookupFlag & true; 13822 } 13823 getSubTable(index) { 13824 const builder = this.ctType === `GSUB` ? GSUBtables : GPOStables; 13825 this.parser.currentPosition = this.start + this.subtableOffsets[index]; 13826 return builder.buildSubtable(this.lookupType, this.parser); 13827 } 13828 }; 13829 var CommonLayoutTable = class extends SimpleTable { 13830 constructor(dict, dataview, name2) { 13831 const { p: p22, tableStart } = super(dict, dataview, name2); 13832 this.majorVersion = p22.uint16; 13833 this.minorVersion = p22.uint16; 13834 this.scriptListOffset = p22.Offset16; 13835 this.featureListOffset = p22.Offset16; 13836 this.lookupListOffset = p22.Offset16; 13837 if (this.majorVersion === 1 && this.minorVersion === 1) { 13838 this.featureVariationsOffset = p22.Offset32; 13839 } 13840 const no_content = !(this.scriptListOffset || this.featureListOffset || this.lookupListOffset); 13841 lazy$1(this, `scriptList`, () => { 13842 if (no_content) return ScriptList.EMPTY; 13843 p22.currentPosition = tableStart + this.scriptListOffset; 13844 return new ScriptList(p22); 13845 }); 13846 lazy$1(this, `featureList`, () => { 13847 if (no_content) return FeatureList.EMPTY; 13848 p22.currentPosition = tableStart + this.featureListOffset; 13849 return new FeatureList(p22); 13850 }); 13851 lazy$1(this, `lookupList`, () => { 13852 if (no_content) return LookupList.EMPTY; 13853 p22.currentPosition = tableStart + this.lookupListOffset; 13854 return new LookupList(p22); 13855 }); 13856 if (this.featureVariationsOffset) { 13857 lazy$1(this, `featureVariations`, () => { 13858 if (no_content) return FeatureVariations.EMPTY; 13859 p22.currentPosition = tableStart + this.featureVariationsOffset; 13860 return new FeatureVariations(p22); 13861 }); 13862 } 13863 } 13864 getSupportedScripts() { 13865 return this.scriptList.scriptRecords.map((r3) => r3.scriptTag); 13866 } 13867 getScriptTable(scriptTag) { 13868 let record = this.scriptList.scriptRecords.find( 13869 (r3) => r3.scriptTag === scriptTag 13870 ); 13871 this.parser.currentPosition = this.scriptList.start + record.scriptOffset; 13872 let table = new ScriptTable(this.parser); 13873 table.scriptTag = scriptTag; 13874 return table; 13875 } 13876 ensureScriptTable(arg) { 13877 if (typeof arg === "string") { 13878 return this.getScriptTable(arg); 13879 } 13880 return arg; 13881 } 13882 getSupportedLangSys(scriptTable) { 13883 scriptTable = this.ensureScriptTable(scriptTable); 13884 const hasDefault = scriptTable.defaultLangSys !== 0; 13885 const supported = scriptTable.langSysRecords.map( 13886 (l2) => l2.langSysTag 13887 ); 13888 if (hasDefault) supported.unshift(`dflt`); 13889 return supported; 13890 } 13891 getDefaultLangSysTable(scriptTable) { 13892 scriptTable = this.ensureScriptTable(scriptTable); 13893 let offset = scriptTable.defaultLangSys; 13894 if (offset !== 0) { 13895 this.parser.currentPosition = scriptTable.start + offset; 13896 let table = new LangSysTable(this.parser); 13897 table.langSysTag = ``; 13898 table.defaultForScript = scriptTable.scriptTag; 13899 return table; 13900 } 13901 } 13902 getLangSysTable(scriptTable, langSysTag = `dflt`) { 13903 if (langSysTag === `dflt`) 13904 return this.getDefaultLangSysTable(scriptTable); 13905 scriptTable = this.ensureScriptTable(scriptTable); 13906 let record = scriptTable.langSysRecords.find( 13907 (l2) => l2.langSysTag === langSysTag 13908 ); 13909 this.parser.currentPosition = scriptTable.start + record.langSysOffset; 13910 let table = new LangSysTable(this.parser); 13911 table.langSysTag = langSysTag; 13912 return table; 13913 } 13914 getFeatures(langSysTable) { 13915 return langSysTable.featureIndices.map( 13916 (index) => this.getFeature(index) 13917 ); 13918 } 13919 getFeature(indexOrTag) { 13920 let record; 13921 if (parseInt(indexOrTag) == indexOrTag) { 13922 record = this.featureList.featureRecords[indexOrTag]; 13923 } else { 13924 record = this.featureList.featureRecords.find( 13925 (f2) => f2.featureTag === indexOrTag 13926 ); 13927 } 13928 if (!record) return; 13929 this.parser.currentPosition = this.featureList.start + record.featureOffset; 13930 let table = new FeatureTable(this.parser); 13931 table.featureTag = record.featureTag; 13932 return table; 13933 } 13934 getLookups(featureTable) { 13935 return featureTable.lookupListIndices.map( 13936 (index) => this.getLookup(index) 13937 ); 13938 } 13939 getLookup(lookupIndex, type) { 13940 let lookupOffset = this.lookupList.lookups[lookupIndex]; 13941 this.parser.currentPosition = this.lookupList.start + lookupOffset; 13942 return new LookupTable(this.parser, type); 13943 } 13944 }; 13945 var GSUB = class extends CommonLayoutTable { 13946 constructor(dict, dataview) { 13947 super(dict, dataview, `GSUB`); 13948 } 13949 getLookup(lookupIndex) { 13950 return super.getLookup(lookupIndex, `GSUB`); 13951 } 13952 }; 13953 var GSUB$1 = Object.freeze({ __proto__: null, GSUB }); 13954 var GPOS = class extends CommonLayoutTable { 13955 constructor(dict, dataview) { 13956 super(dict, dataview, `GPOS`); 13957 } 13958 getLookup(lookupIndex) { 13959 return super.getLookup(lookupIndex, `GPOS`); 13960 } 13961 }; 13962 var GPOS$1 = Object.freeze({ __proto__: null, GPOS }); 13963 var SVG6 = class extends SimpleTable { 13964 constructor(dict, dataview) { 13965 const { p: p22 } = super(dict, dataview); 13966 this.version = p22.uint16; 13967 this.offsetToSVGDocumentList = p22.Offset32; 13968 p22.currentPosition = this.tableStart + this.offsetToSVGDocumentList; 13969 this.documentList = new SVGDocumentList(p22); 13970 } 13971 }; 13972 var SVGDocumentList = class extends ParsedData { 13973 constructor(p22) { 13974 super(p22); 13975 this.numEntries = p22.uint16; 13976 this.documentRecords = [...new Array(this.numEntries)].map( 13977 (_) => new SVGDocumentRecord(p22) 13978 ); 13979 } 13980 getDocument(documentID) { 13981 let record = this.documentRecords[documentID]; 13982 if (!record) return ""; 13983 let offset = this.start + record.svgDocOffset; 13984 this.parser.currentPosition = offset; 13985 return this.parser.readBytes(record.svgDocLength); 13986 } 13987 getDocumentForGlyph(glyphID) { 13988 let id = this.documentRecords.findIndex( 13989 (d2) => d2.startGlyphID <= glyphID && glyphID <= d2.endGlyphID 13990 ); 13991 if (id === -1) return ""; 13992 return this.getDocument(id); 13993 } 13994 }; 13995 var SVGDocumentRecord = class { 13996 constructor(p22) { 13997 this.startGlyphID = p22.uint16; 13998 this.endGlyphID = p22.uint16; 13999 this.svgDocOffset = p22.Offset32; 14000 this.svgDocLength = p22.uint32; 14001 } 14002 }; 14003 var SVG$1 = Object.freeze({ __proto__: null, SVG: SVG6 }); 14004 var fvar = class extends SimpleTable { 14005 constructor(dict, dataview) { 14006 const { p: p22 } = super(dict, dataview); 14007 this.majorVersion = p22.uint16; 14008 this.minorVersion = p22.uint16; 14009 this.axesArrayOffset = p22.Offset16; 14010 p22.uint16; 14011 this.axisCount = p22.uint16; 14012 this.axisSize = p22.uint16; 14013 this.instanceCount = p22.uint16; 14014 this.instanceSize = p22.uint16; 14015 const axisStart = this.tableStart + this.axesArrayOffset; 14016 lazy$1(this, `axes`, () => { 14017 p22.currentPosition = axisStart; 14018 return [...new Array(this.axisCount)].map( 14019 (_) => new VariationAxisRecord(p22) 14020 ); 14021 }); 14022 const instanceStart = axisStart + this.axisCount * this.axisSize; 14023 lazy$1(this, `instances`, () => { 14024 let instances = []; 14025 for (let i2 = 0; i2 < this.instanceCount; i2++) { 14026 p22.currentPosition = instanceStart + i2 * this.instanceSize; 14027 instances.push( 14028 new InstanceRecord(p22, this.axisCount, this.instanceSize) 14029 ); 14030 } 14031 return instances; 14032 }); 14033 } 14034 getSupportedAxes() { 14035 return this.axes.map((a2) => a2.tag); 14036 } 14037 getAxis(name2) { 14038 return this.axes.find((a2) => a2.tag === name2); 14039 } 14040 }; 14041 var VariationAxisRecord = class { 14042 constructor(p22) { 14043 this.tag = p22.tag; 14044 this.minValue = p22.fixed; 14045 this.defaultValue = p22.fixed; 14046 this.maxValue = p22.fixed; 14047 this.flags = p22.flags(16); 14048 this.axisNameID = p22.uint16; 14049 } 14050 }; 14051 var InstanceRecord = class { 14052 constructor(p22, axisCount, size) { 14053 let start = p22.currentPosition; 14054 this.subfamilyNameID = p22.uint16; 14055 p22.uint16; 14056 this.coordinates = [...new Array(axisCount)].map( 14057 (_) => p22.fixed 14058 ); 14059 if (p22.currentPosition - start < size) { 14060 this.postScriptNameID = p22.uint16; 14061 } 14062 } 14063 }; 14064 var fvar$1 = Object.freeze({ __proto__: null, fvar }); 14065 var cvt = class extends SimpleTable { 14066 constructor(dict, dataview) { 14067 const { p: p22 } = super(dict, dataview); 14068 const n2 = dict.length / 2; 14069 lazy$1( 14070 this, 14071 `items`, 14072 () => [...new Array(n2)].map((_) => p22.fword) 14073 ); 14074 } 14075 }; 14076 var cvt$1 = Object.freeze({ __proto__: null, cvt }); 14077 var fpgm = class extends SimpleTable { 14078 constructor(dict, dataview) { 14079 const { p: p22 } = super(dict, dataview); 14080 lazy$1( 14081 this, 14082 `instructions`, 14083 () => [...new Array(dict.length)].map((_) => p22.uint8) 14084 ); 14085 } 14086 }; 14087 var fpgm$1 = Object.freeze({ __proto__: null, fpgm }); 14088 var gasp = class extends SimpleTable { 14089 constructor(dict, dataview) { 14090 const { p: p22 } = super(dict, dataview); 14091 this.version = p22.uint16; 14092 this.numRanges = p22.uint16; 14093 const getter = () => [...new Array(this.numRanges)].map( 14094 (_) => new GASPRange(p22) 14095 ); 14096 lazy$1(this, `gaspRanges`, getter); 14097 } 14098 }; 14099 var GASPRange = class { 14100 constructor(p22) { 14101 this.rangeMaxPPEM = p22.uint16; 14102 this.rangeGaspBehavior = p22.uint16; 14103 } 14104 }; 14105 var gasp$1 = Object.freeze({ __proto__: null, gasp }); 14106 var glyf = class extends SimpleTable { 14107 constructor(dict, dataview) { 14108 super(dict, dataview); 14109 } 14110 getGlyphData(offset, length) { 14111 this.parser.currentPosition = this.tableStart + offset; 14112 return this.parser.readBytes(length); 14113 } 14114 }; 14115 var glyf$1 = Object.freeze({ __proto__: null, glyf }); 14116 var loca = class extends SimpleTable { 14117 constructor(dict, dataview, tables) { 14118 const { p: p22 } = super(dict, dataview); 14119 const n2 = tables.maxp.numGlyphs + 1; 14120 if (tables.head.indexToLocFormat === 0) { 14121 this.x2 = true; 14122 lazy$1( 14123 this, 14124 `offsets`, 14125 () => [...new Array(n2)].map((_) => p22.Offset16) 14126 ); 14127 } else { 14128 lazy$1( 14129 this, 14130 `offsets`, 14131 () => [...new Array(n2)].map((_) => p22.Offset32) 14132 ); 14133 } 14134 } 14135 getGlyphDataOffsetAndLength(glyphID) { 14136 let offset = this.offsets[glyphID] * this.x2 ? 2 : 1; 14137 let nextOffset = this.offsets[glyphID + 1] * this.x2 ? 2 : 1; 14138 return { offset, length: nextOffset - offset }; 14139 } 14140 }; 14141 var loca$1 = Object.freeze({ __proto__: null, loca }); 14142 var prep = class extends SimpleTable { 14143 constructor(dict, dataview) { 14144 const { p: p22 } = super(dict, dataview); 14145 lazy$1( 14146 this, 14147 `instructions`, 14148 () => [...new Array(dict.length)].map((_) => p22.uint8) 14149 ); 14150 } 14151 }; 14152 var prep$1 = Object.freeze({ __proto__: null, prep }); 14153 var CFF = class extends SimpleTable { 14154 constructor(dict, dataview) { 14155 const { p: p22 } = super(dict, dataview); 14156 lazy$1(this, `data`, () => p22.readBytes()); 14157 } 14158 }; 14159 var CFF$1 = Object.freeze({ __proto__: null, CFF }); 14160 var CFF2 = class extends SimpleTable { 14161 constructor(dict, dataview) { 14162 const { p: p22 } = super(dict, dataview); 14163 lazy$1(this, `data`, () => p22.readBytes()); 14164 } 14165 }; 14166 var CFF2$1 = Object.freeze({ __proto__: null, CFF2 }); 14167 var VORG = class extends SimpleTable { 14168 constructor(dict, dataview) { 14169 const { p: p22 } = super(dict, dataview); 14170 this.majorVersion = p22.uint16; 14171 this.minorVersion = p22.uint16; 14172 this.defaultVertOriginY = p22.int16; 14173 this.numVertOriginYMetrics = p22.uint16; 14174 lazy$1( 14175 this, 14176 `vertORiginYMetrics`, 14177 () => [...new Array(this.numVertOriginYMetrics)].map( 14178 (_) => new VertOriginYMetric(p22) 14179 ) 14180 ); 14181 } 14182 }; 14183 var VertOriginYMetric = class { 14184 constructor(p22) { 14185 this.glyphIndex = p22.uint16; 14186 this.vertOriginY = p22.int16; 14187 } 14188 }; 14189 var VORG$1 = Object.freeze({ __proto__: null, VORG }); 14190 var BitmapSize = class { 14191 constructor(p22) { 14192 this.indexSubTableArrayOffset = p22.Offset32; 14193 this.indexTablesSize = p22.uint32; 14194 this.numberofIndexSubTables = p22.uint32; 14195 this.colorRef = p22.uint32; 14196 this.hori = new SbitLineMetrics(p22); 14197 this.vert = new SbitLineMetrics(p22); 14198 this.startGlyphIndex = p22.uint16; 14199 this.endGlyphIndex = p22.uint16; 14200 this.ppemX = p22.uint8; 14201 this.ppemY = p22.uint8; 14202 this.bitDepth = p22.uint8; 14203 this.flags = p22.int8; 14204 } 14205 }; 14206 var BitmapScale = class { 14207 constructor(p22) { 14208 this.hori = new SbitLineMetrics(p22); 14209 this.vert = new SbitLineMetrics(p22); 14210 this.ppemX = p22.uint8; 14211 this.ppemY = p22.uint8; 14212 this.substitutePpemX = p22.uint8; 14213 this.substitutePpemY = p22.uint8; 14214 } 14215 }; 14216 var SbitLineMetrics = class { 14217 constructor(p22) { 14218 this.ascender = p22.int8; 14219 this.descender = p22.int8; 14220 this.widthMax = p22.uint8; 14221 this.caretSlopeNumerator = p22.int8; 14222 this.caretSlopeDenominator = p22.int8; 14223 this.caretOffset = p22.int8; 14224 this.minOriginSB = p22.int8; 14225 this.minAdvanceSB = p22.int8; 14226 this.maxBeforeBL = p22.int8; 14227 this.minAfterBL = p22.int8; 14228 this.pad1 = p22.int8; 14229 this.pad2 = p22.int8; 14230 } 14231 }; 14232 var EBLC = class extends SimpleTable { 14233 constructor(dict, dataview, name2) { 14234 const { p: p22 } = super(dict, dataview, name2); 14235 this.majorVersion = p22.uint16; 14236 this.minorVersion = p22.uint16; 14237 this.numSizes = p22.uint32; 14238 lazy$1( 14239 this, 14240 `bitMapSizes`, 14241 () => [...new Array(this.numSizes)].map( 14242 (_) => new BitmapSize(p22) 14243 ) 14244 ); 14245 } 14246 }; 14247 var EBLC$1 = Object.freeze({ __proto__: null, EBLC }); 14248 var EBDT = class extends SimpleTable { 14249 constructor(dict, dataview, name2) { 14250 const { p: p22 } = super(dict, dataview, name2); 14251 this.majorVersion = p22.uint16; 14252 this.minorVersion = p22.uint16; 14253 } 14254 }; 14255 var EBDT$1 = Object.freeze({ __proto__: null, EBDT }); 14256 var EBSC = class extends SimpleTable { 14257 constructor(dict, dataview) { 14258 const { p: p22 } = super(dict, dataview); 14259 this.majorVersion = p22.uint16; 14260 this.minorVersion = p22.uint16; 14261 this.numSizes = p22.uint32; 14262 lazy$1( 14263 this, 14264 `bitmapScales`, 14265 () => [...new Array(this.numSizes)].map( 14266 (_) => new BitmapScale(p22) 14267 ) 14268 ); 14269 } 14270 }; 14271 var EBSC$1 = Object.freeze({ __proto__: null, EBSC }); 14272 var CBLC = class extends EBLC { 14273 constructor(dict, dataview) { 14274 super(dict, dataview, `CBLC`); 14275 } 14276 }; 14277 var CBLC$1 = Object.freeze({ __proto__: null, CBLC }); 14278 var CBDT = class extends EBDT { 14279 constructor(dict, dataview) { 14280 super(dict, dataview, `CBDT`); 14281 } 14282 }; 14283 var CBDT$1 = Object.freeze({ __proto__: null, CBDT }); 14284 var sbix = class extends SimpleTable { 14285 constructor(dict, dataview) { 14286 const { p: p22 } = super(dict, dataview); 14287 this.version = p22.uint16; 14288 this.flags = p22.flags(16); 14289 this.numStrikes = p22.uint32; 14290 lazy$1( 14291 this, 14292 `strikeOffsets`, 14293 () => [...new Array(this.numStrikes)].map((_) => p22.Offset32) 14294 ); 14295 } 14296 }; 14297 var sbix$1 = Object.freeze({ __proto__: null, sbix }); 14298 var COLR = class extends SimpleTable { 14299 constructor(dict, dataview) { 14300 const { p: p22 } = super(dict, dataview); 14301 this.version = p22.uint16; 14302 this.numBaseGlyphRecords = p22.uint16; 14303 this.baseGlyphRecordsOffset = p22.Offset32; 14304 this.layerRecordsOffset = p22.Offset32; 14305 this.numLayerRecords = p22.uint16; 14306 } 14307 getBaseGlyphRecord(glyphID) { 14308 let start = this.tableStart + this.baseGlyphRecordsOffset; 14309 this.parser.currentPosition = start; 14310 let first = new BaseGlyphRecord(this.parser); 14311 let firstID = first.gID; 14312 let end = this.tableStart + this.layerRecordsOffset - 6; 14313 this.parser.currentPosition = end; 14314 let last = new BaseGlyphRecord(this.parser); 14315 let lastID = last.gID; 14316 if (firstID === glyphID) return first; 14317 if (lastID === glyphID) return last; 14318 while (true) { 14319 if (start === end) break; 14320 let mid = start + (end - start) / 12; 14321 this.parser.currentPosition = mid; 14322 let middle = new BaseGlyphRecord(this.parser); 14323 let midID = middle.gID; 14324 if (midID === glyphID) return middle; 14325 else if (midID > glyphID) { 14326 end = mid; 14327 } else if (midID < glyphID) { 14328 start = mid; 14329 } 14330 } 14331 return false; 14332 } 14333 getLayers(glyphID) { 14334 let record = this.getBaseGlyphRecord(glyphID); 14335 this.parser.currentPosition = this.tableStart + this.layerRecordsOffset + 4 * record.firstLayerIndex; 14336 return [...new Array(record.numLayers)].map( 14337 (_) => new LayerRecord(p) 14338 ); 14339 } 14340 }; 14341 var BaseGlyphRecord = class { 14342 constructor(p22) { 14343 this.gID = p22.uint16; 14344 this.firstLayerIndex = p22.uint16; 14345 this.numLayers = p22.uint16; 14346 } 14347 }; 14348 var LayerRecord = class { 14349 constructor(p22) { 14350 this.gID = p22.uint16; 14351 this.paletteIndex = p22.uint16; 14352 } 14353 }; 14354 var COLR$1 = Object.freeze({ __proto__: null, COLR }); 14355 var CPAL = class extends SimpleTable { 14356 constructor(dict, dataview) { 14357 const { p: p22 } = super(dict, dataview); 14358 this.version = p22.uint16; 14359 this.numPaletteEntries = p22.uint16; 14360 const numPalettes = this.numPalettes = p22.uint16; 14361 this.numColorRecords = p22.uint16; 14362 this.offsetFirstColorRecord = p22.Offset32; 14363 this.colorRecordIndices = [...new Array(this.numPalettes)].map( 14364 (_) => p22.uint16 14365 ); 14366 lazy$1(this, `colorRecords`, () => { 14367 p22.currentPosition = this.tableStart + this.offsetFirstColorRecord; 14368 return [...new Array(this.numColorRecords)].map( 14369 (_) => new ColorRecord(p22) 14370 ); 14371 }); 14372 if (this.version === 1) { 14373 this.offsetPaletteTypeArray = p22.Offset32; 14374 this.offsetPaletteLabelArray = p22.Offset32; 14375 this.offsetPaletteEntryLabelArray = p22.Offset32; 14376 lazy$1(this, `paletteTypeArray`, () => { 14377 p22.currentPosition = this.tableStart + this.offsetPaletteTypeArray; 14378 return new PaletteTypeArray(p22, numPalettes); 14379 }); 14380 lazy$1(this, `paletteLabelArray`, () => { 14381 p22.currentPosition = this.tableStart + this.offsetPaletteLabelArray; 14382 return new PaletteLabelsArray(p22, numPalettes); 14383 }); 14384 lazy$1(this, `paletteEntryLabelArray`, () => { 14385 p22.currentPosition = this.tableStart + this.offsetPaletteEntryLabelArray; 14386 return new PaletteEntryLabelArray(p22, numPalettes); 14387 }); 14388 } 14389 } 14390 }; 14391 var ColorRecord = class { 14392 constructor(p22) { 14393 this.blue = p22.uint8; 14394 this.green = p22.uint8; 14395 this.red = p22.uint8; 14396 this.alpha = p22.uint8; 14397 } 14398 }; 14399 var PaletteTypeArray = class { 14400 constructor(p22, numPalettes) { 14401 this.paletteTypes = [...new Array(numPalettes)].map( 14402 (_) => p22.uint32 14403 ); 14404 } 14405 }; 14406 var PaletteLabelsArray = class { 14407 constructor(p22, numPalettes) { 14408 this.paletteLabels = [...new Array(numPalettes)].map( 14409 (_) => p22.uint16 14410 ); 14411 } 14412 }; 14413 var PaletteEntryLabelArray = class { 14414 constructor(p22, numPalettes) { 14415 this.paletteEntryLabels = [...new Array(numPalettes)].map( 14416 (_) => p22.uint16 14417 ); 14418 } 14419 }; 14420 var CPAL$1 = Object.freeze({ __proto__: null, CPAL }); 14421 var DSIG = class extends SimpleTable { 14422 constructor(dict, dataview) { 14423 const { p: p22 } = super(dict, dataview); 14424 this.version = p22.uint32; 14425 this.numSignatures = p22.uint16; 14426 this.flags = p22.uint16; 14427 this.signatureRecords = [...new Array(this.numSignatures)].map( 14428 (_) => new SignatureRecord(p22) 14429 ); 14430 } 14431 getData(signatureID) { 14432 const record = this.signatureRecords[signatureID]; 14433 this.parser.currentPosition = this.tableStart + record.offset; 14434 return new SignatureBlockFormat1(this.parser); 14435 } 14436 }; 14437 var SignatureRecord = class { 14438 constructor(p22) { 14439 this.format = p22.uint32; 14440 this.length = p22.uint32; 14441 this.offset = p22.Offset32; 14442 } 14443 }; 14444 var SignatureBlockFormat1 = class { 14445 constructor(p22) { 14446 p22.uint16; 14447 p22.uint16; 14448 this.signatureLength = p22.uint32; 14449 this.signature = p22.readBytes(this.signatureLength); 14450 } 14451 }; 14452 var DSIG$1 = Object.freeze({ __proto__: null, DSIG }); 14453 var hdmx = class extends SimpleTable { 14454 constructor(dict, dataview, tables) { 14455 const { p: p22 } = super(dict, dataview); 14456 const numGlyphs = tables.hmtx.numGlyphs; 14457 this.version = p22.uint16; 14458 this.numRecords = p22.int16; 14459 this.sizeDeviceRecord = p22.int32; 14460 this.records = [...new Array(numRecords)].map( 14461 (_) => new DeviceRecord(p22, numGlyphs) 14462 ); 14463 } 14464 }; 14465 var DeviceRecord = class { 14466 constructor(p22, numGlyphs) { 14467 this.pixelSize = p22.uint8; 14468 this.maxWidth = p22.uint8; 14469 this.widths = p22.readBytes(numGlyphs); 14470 } 14471 }; 14472 var hdmx$1 = Object.freeze({ __proto__: null, hdmx }); 14473 var kern = class extends SimpleTable { 14474 constructor(dict, dataview) { 14475 const { p: p22 } = super(dict, dataview); 14476 this.version = p22.uint16; 14477 this.nTables = p22.uint16; 14478 lazy$1(this, `tables`, () => { 14479 let offset = this.tableStart + 4; 14480 const tables = []; 14481 for (let i2 = 0; i2 < this.nTables; i2++) { 14482 p22.currentPosition = offset; 14483 let subtable = new KernSubTable(p22); 14484 tables.push(subtable); 14485 offset += subtable; 14486 } 14487 return tables; 14488 }); 14489 } 14490 }; 14491 var KernSubTable = class { 14492 constructor(p22) { 14493 this.version = p22.uint16; 14494 this.length = p22.uint16; 14495 this.coverage = p22.flags(8); 14496 this.format = p22.uint8; 14497 if (this.format === 0) { 14498 this.nPairs = p22.uint16; 14499 this.searchRange = p22.uint16; 14500 this.entrySelector = p22.uint16; 14501 this.rangeShift = p22.uint16; 14502 lazy$1( 14503 this, 14504 `pairs`, 14505 () => [...new Array(this.nPairs)].map((_) => new Pair(p22)) 14506 ); 14507 } 14508 if (this.format === 2) { 14509 console.warn( 14510 `Kern subtable format 2 is not supported: this parser currently only parses universal table data.` 14511 ); 14512 } 14513 } 14514 get horizontal() { 14515 return this.coverage[0]; 14516 } 14517 get minimum() { 14518 return this.coverage[1]; 14519 } 14520 get crossstream() { 14521 return this.coverage[2]; 14522 } 14523 get override() { 14524 return this.coverage[3]; 14525 } 14526 }; 14527 var Pair = class { 14528 constructor(p22) { 14529 this.left = p22.uint16; 14530 this.right = p22.uint16; 14531 this.value = p22.fword; 14532 } 14533 }; 14534 var kern$1 = Object.freeze({ __proto__: null, kern }); 14535 var LTSH = class extends SimpleTable { 14536 constructor(dict, dataview) { 14537 const { p: p22 } = super(dict, dataview); 14538 this.version = p22.uint16; 14539 this.numGlyphs = p22.uint16; 14540 this.yPels = p22.readBytes(this.numGlyphs); 14541 } 14542 }; 14543 var LTSH$1 = Object.freeze({ __proto__: null, LTSH }); 14544 var MERG = class extends SimpleTable { 14545 constructor(dict, dataview) { 14546 const { p: p22 } = super(dict, dataview); 14547 this.version = p22.uint16; 14548 this.mergeClassCount = p22.uint16; 14549 this.mergeDataOffset = p22.Offset16; 14550 this.classDefCount = p22.uint16; 14551 this.offsetToClassDefOffsets = p22.Offset16; 14552 lazy$1( 14553 this, 14554 `mergeEntryMatrix`, 14555 () => [...new Array(this.mergeClassCount)].map( 14556 (_) => p22.readBytes(this.mergeClassCount) 14557 ) 14558 ); 14559 console.warn(`Full MERG parsing is currently not supported.`); 14560 console.warn( 14561 `If you need this table parsed, please file an issue, or better yet, a PR.` 14562 ); 14563 } 14564 }; 14565 var MERG$1 = Object.freeze({ __proto__: null, MERG }); 14566 var meta = class extends SimpleTable { 14567 constructor(dict, dataview) { 14568 const { p: p22 } = super(dict, dataview); 14569 this.version = p22.uint32; 14570 this.flags = p22.uint32; 14571 p22.uint32; 14572 this.dataMapsCount = p22.uint32; 14573 this.dataMaps = [...new Array(this.dataMapsCount)].map( 14574 (_) => new DataMap(this.tableStart, p22) 14575 ); 14576 } 14577 }; 14578 var DataMap = class { 14579 constructor(tableStart, p22) { 14580 this.tableStart = tableStart; 14581 this.parser = p22; 14582 this.tag = p22.tag; 14583 this.dataOffset = p22.Offset32; 14584 this.dataLength = p22.uint32; 14585 } 14586 getData() { 14587 this.parser.currentField = this.tableStart + this.dataOffset; 14588 return this.parser.readBytes(this.dataLength); 14589 } 14590 }; 14591 var meta$1 = Object.freeze({ __proto__: null, meta }); 14592 var PCLT = class extends SimpleTable { 14593 constructor(dict, dataview) { 14594 super(dict, dataview); 14595 console.warn( 14596 `This font uses a PCLT table, which is currently not supported by this parser.` 14597 ); 14598 console.warn( 14599 `If you need this table parsed, please file an issue, or better yet, a PR.` 14600 ); 14601 } 14602 }; 14603 var PCLT$1 = Object.freeze({ __proto__: null, PCLT }); 14604 var VDMX = class extends SimpleTable { 14605 constructor(dict, dataview) { 14606 const { p: p22 } = super(dict, dataview); 14607 this.version = p22.uint16; 14608 this.numRecs = p22.uint16; 14609 this.numRatios = p22.uint16; 14610 this.ratRanges = [...new Array(this.numRatios)].map( 14611 (_) => new RatioRange(p22) 14612 ); 14613 this.offsets = [...new Array(this.numRatios)].map( 14614 (_) => p22.Offset16 14615 ); 14616 this.VDMXGroups = [...new Array(this.numRecs)].map( 14617 (_) => new VDMXGroup(p22) 14618 ); 14619 } 14620 }; 14621 var RatioRange = class { 14622 constructor(p22) { 14623 this.bCharSet = p22.uint8; 14624 this.xRatio = p22.uint8; 14625 this.yStartRatio = p22.uint8; 14626 this.yEndRatio = p22.uint8; 14627 } 14628 }; 14629 var VDMXGroup = class { 14630 constructor(p22) { 14631 this.recs = p22.uint16; 14632 this.startsz = p22.uint8; 14633 this.endsz = p22.uint8; 14634 this.records = [...new Array(this.recs)].map( 14635 (_) => new vTable(p22) 14636 ); 14637 } 14638 }; 14639 var vTable = class { 14640 constructor(p22) { 14641 this.yPelHeight = p22.uint16; 14642 this.yMax = p22.int16; 14643 this.yMin = p22.int16; 14644 } 14645 }; 14646 var VDMX$1 = Object.freeze({ __proto__: null, VDMX }); 14647 var vhea = class extends SimpleTable { 14648 constructor(dict, dataview) { 14649 const { p: p22 } = super(dict, dataview); 14650 this.version = p22.fixed; 14651 this.ascent = this.vertTypoAscender = p22.int16; 14652 this.descent = this.vertTypoDescender = p22.int16; 14653 this.lineGap = this.vertTypoLineGap = p22.int16; 14654 this.advanceHeightMax = p22.int16; 14655 this.minTopSideBearing = p22.int16; 14656 this.minBottomSideBearing = p22.int16; 14657 this.yMaxExtent = p22.int16; 14658 this.caretSlopeRise = p22.int16; 14659 this.caretSlopeRun = p22.int16; 14660 this.caretOffset = p22.int16; 14661 this.reserved = p22.int16; 14662 this.reserved = p22.int16; 14663 this.reserved = p22.int16; 14664 this.reserved = p22.int16; 14665 this.metricDataFormat = p22.int16; 14666 this.numOfLongVerMetrics = p22.uint16; 14667 p22.verifyLength(); 14668 } 14669 }; 14670 var vhea$1 = Object.freeze({ __proto__: null, vhea }); 14671 var vmtx = class extends SimpleTable { 14672 constructor(dict, dataview, tables) { 14673 super(dict, dataview); 14674 const numOfLongVerMetrics = tables.vhea.numOfLongVerMetrics; 14675 const numGlyphs = tables.maxp.numGlyphs; 14676 const metricsStart = p.currentPosition; 14677 lazy(this, `vMetrics`, () => { 14678 p.currentPosition = metricsStart; 14679 return [...new Array(numOfLongVerMetrics)].map( 14680 (_) => new LongVertMetric(p.uint16, p.int16) 14681 ); 14682 }); 14683 if (numOfLongVerMetrics < numGlyphs) { 14684 const tsbStart = metricsStart + numOfLongVerMetrics * 4; 14685 lazy(this, `topSideBearings`, () => { 14686 p.currentPosition = tsbStart; 14687 return [...new Array(numGlyphs - numOfLongVerMetrics)].map( 14688 (_) => p.int16 14689 ); 14690 }); 14691 } 14692 } 14693 }; 14694 var LongVertMetric = class { 14695 constructor(h2, b2) { 14696 this.advanceHeight = h2; 14697 this.topSideBearing = b2; 14698 } 14699 }; 14700 var vmtx$1 = Object.freeze({ __proto__: null, vmtx }); 14701 14702 // packages/global-styles-ui/build-module/font-library/utils/make-families-from-faces.mjs 14703 var import_components28 = __toESM(require_components(), 1); 14704 var { kebabCase: kebabCase2 } = unlock(import_components28.privateApis); 14705 function makeFamiliesFromFaces(fontFaces) { 14706 const fontFamiliesObject = fontFaces.reduce( 14707 (acc, item) => { 14708 if (!acc[item.fontFamily]) { 14709 acc[item.fontFamily] = { 14710 name: item.fontFamily, 14711 fontFamily: item.fontFamily, 14712 slug: kebabCase2(item.fontFamily.toLowerCase()), 14713 fontFace: [] 14714 }; 14715 } 14716 acc[item.fontFamily].fontFace.push(item); 14717 return acc; 14718 }, 14719 {} 14720 ); 14721 return Object.values(fontFamiliesObject); 14722 } 14723 14724 // packages/global-styles-ui/build-module/font-library/upload-fonts.mjs 14725 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); 14726 function UploadFonts() { 14727 const { installFonts } = (0, import_element19.useContext)(FontLibraryContext); 14728 const [isUploading, setIsUploading] = (0, import_element19.useState)(false); 14729 const [notice, setNotice] = (0, import_element19.useState)(null); 14730 const handleDropZone = (files) => { 14731 handleFilesUpload(files); 14732 }; 14733 const onFilesUpload = (event) => { 14734 handleFilesUpload(event.target.files); 14735 }; 14736 const handleFilesUpload = async (files) => { 14737 if (!files) { 14738 return; 14739 } 14740 setNotice(null); 14741 setIsUploading(true); 14742 const uniqueFilenames = /* @__PURE__ */ new Set(); 14743 const selectedFiles = [...files]; 14744 let hasInvalidFiles = false; 14745 const checkFilesPromises = selectedFiles.map(async (file) => { 14746 const isFont = await isFontFile(file); 14747 if (!isFont) { 14748 hasInvalidFiles = true; 14749 return null; 14750 } 14751 if (uniqueFilenames.has(file.name)) { 14752 return null; 14753 } 14754 const fileExtension = (((file.name ?? "").split(".") ?? []).pop() ?? "").toLowerCase(); 14755 if (ALLOWED_FILE_EXTENSIONS.includes(fileExtension)) { 14756 uniqueFilenames.add(file.name); 14757 return file; 14758 } 14759 return null; 14760 }); 14761 const allowedFiles = (await Promise.all(checkFilesPromises)).filter((file) => null !== file); 14762 if (allowedFiles.length > 0) { 14763 loadFiles(allowedFiles); 14764 } else { 14765 const message = hasInvalidFiles ? (0, import_i18n16.__)("Sorry, you are not allowed to upload this file type.") : (0, import_i18n16.__)("No fonts found to install."); 14766 setNotice({ 14767 type: "error", 14768 message 14769 }); 14770 setIsUploading(false); 14771 } 14772 }; 14773 const loadFiles = async (files) => { 14774 const fontFacesLoaded = await Promise.all( 14775 files.map(async (fontFile) => { 14776 const fontFaceData = await getFontFaceMetadata(fontFile); 14777 await loadFontFaceInBrowser( 14778 fontFaceData, 14779 fontFaceData.file, 14780 "all" 14781 ); 14782 return fontFaceData; 14783 }) 14784 ); 14785 handleInstall(fontFacesLoaded); 14786 }; 14787 async function isFontFile(file) { 14788 const font2 = new Font("Uploaded Font"); 14789 try { 14790 const buffer = await readFileAsArrayBuffer(file); 14791 await font2.fromDataBuffer(buffer, "font"); 14792 return true; 14793 } catch (error) { 14794 return false; 14795 } 14796 } 14797 async function readFileAsArrayBuffer(file) { 14798 return new Promise((resolve, reject) => { 14799 const reader = new window.FileReader(); 14800 reader.readAsArrayBuffer(file); 14801 reader.onload = () => resolve(reader.result); 14802 reader.onerror = reject; 14803 }); 14804 } 14805 const getFontFaceMetadata = async (fontFile) => { 14806 const buffer = await readFileAsArrayBuffer(fontFile); 14807 const fontObj = new Font("Uploaded Font"); 14808 fontObj.fromDataBuffer(buffer, fontFile.name); 14809 const onloadEvent = await new Promise( 14810 (resolve) => fontObj.onload = resolve 14811 ); 14812 const font2 = onloadEvent.detail.font; 14813 const { name: name2 } = font2.opentype.tables; 14814 const fontName = name2.get(16) || name2.get(1); 14815 const isItalic = name2.get(2).toLowerCase().includes("italic"); 14816 const fontWeight = font2.opentype.tables["OS/2"].usWeightClass || "normal"; 14817 const isVariable = !!font2.opentype.tables.fvar; 14818 const weightAxis = isVariable && font2.opentype.tables.fvar.axes.find( 14819 ({ tag }) => tag === "wght" 14820 ); 14821 const weightRange = weightAxis ? `$weightAxis.minValue} $weightAxis.maxValue}` : null; 14822 return { 14823 file: fontFile, 14824 fontFamily: fontName, 14825 fontStyle: isItalic ? "italic" : "normal", 14826 fontWeight: weightRange || fontWeight 14827 }; 14828 }; 14829 const handleInstall = async (fontFaces) => { 14830 const fontFamilies = makeFamiliesFromFaces(fontFaces); 14831 try { 14832 await installFonts(fontFamilies); 14833 setNotice({ 14834 type: "success", 14835 message: (0, import_i18n16.__)("Fonts were installed successfully.") 14836 }); 14837 } catch (error) { 14838 const typedError = error; 14839 setNotice({ 14840 type: "error", 14841 message: typedError.message, 14842 errors: typedError?.installationErrors 14843 }); 14844 } 14845 setIsUploading(false); 14846 }; 14847 return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "font-library__tabpanel-layout", children: [ 14848 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components29.DropZone, { onFilesDrop: handleDropZone }), 14849 /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_components29.__experimentalVStack, { className: "font-library__local-fonts", justify: "start", children: [ 14850 notice && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)( 14851 import_components29.Notice, 14852 { 14853 status: notice.type, 14854 __unstableHTML: true, 14855 onRemove: () => setNotice(null), 14856 children: [ 14857 notice.message, 14858 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)) }) 14859 ] 14860 } 14861 ), 14862 isUploading && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components29.FlexItem, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "font-library__upload-area", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components29.ProgressBar, {}) }) }), 14863 !isUploading && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 14864 import_components29.FormFileUpload, 14865 { 14866 accept: ALLOWED_FILE_EXTENSIONS.map( 14867 (ext) => `.$ext}` 14868 ).join(","), 14869 multiple: true, 14870 onChange: onFilesUpload, 14871 render: ({ openFileDialog }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 14872 import_components29.Button, 14873 { 14874 __next40pxDefaultSize: true, 14875 className: "font-library__upload-area", 14876 onClick: openFileDialog, 14877 children: (0, import_i18n16.__)("Upload font") 14878 } 14879 ) 14880 } 14881 ), 14882 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components29.__experimentalText, { className: "font-library__upload-area__text", children: (0, import_i18n16.__)( 14883 "Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2." 14884 ) }) 14885 ] }) 14886 ] }); 14887 } 14888 var upload_fonts_default = UploadFonts; 14889 14890 // packages/global-styles-ui/build-module/font-library/modal.mjs 14891 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); 14892 var { Tabs } = unlock(import_components30.privateApis); 14893 var DEFAULT_TAB = { 14894 id: "installed-fonts", 14895 title: (0, import_i18n17._x)("Library", "Font library") 14896 }; 14897 var UPLOAD_TAB = { 14898 id: "upload-fonts", 14899 title: (0, import_i18n17._x)("Upload", "noun") 14900 }; 14901 14902 // packages/global-styles-ui/build-module/font-family-item.mjs 14903 var import_i18n18 = __toESM(require_i18n(), 1); 14904 var import_components31 = __toESM(require_components(), 1); 14905 var import_element20 = __toESM(require_element(), 1); 14906 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); 14907 14908 // packages/global-styles-ui/build-module/font-families.mjs 14909 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); 14910 14911 // packages/global-styles-ui/build-module/font-sizes/font-sizes-count.mjs 14912 var import_i18n20 = __toESM(require_i18n(), 1); 14913 var import_components33 = __toESM(require_components(), 1); 14914 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); 14915 14916 // packages/global-styles-ui/build-module/screen-typography.mjs 14917 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); 14918 14919 // packages/global-styles-ui/build-module/screen-typography-element.mjs 14920 var import_i18n22 = __toESM(require_i18n(), 1); 14921 var import_components35 = __toESM(require_components(), 1); 14922 var import_element23 = __toESM(require_element(), 1); 14923 14924 // packages/global-styles-ui/build-module/typography-panel.mjs 14925 var import_block_editor5 = __toESM(require_block_editor(), 1); 14926 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); 14927 var { useSettingsForBlockElement: useSettingsForBlockElement4, TypographyPanel: StylesTypographyPanel2 } = unlock(import_block_editor5.privateApis); 14928 14929 // packages/global-styles-ui/build-module/typography-preview.mjs 14930 var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); 14931 14932 // packages/global-styles-ui/build-module/screen-typography-element.mjs 14933 var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); 14934 var elements = { 14935 text: { 14936 description: (0, import_i18n22.__)("Manage the fonts used on the site."), 14937 title: (0, import_i18n22.__)("Text") 14938 }, 14939 link: { 14940 description: (0, import_i18n22.__)("Manage the fonts and typography used on the links."), 14941 title: (0, import_i18n22.__)("Links") 14942 }, 14943 heading: { 14944 description: (0, import_i18n22.__)("Manage the fonts and typography used on headings."), 14945 title: (0, import_i18n22.__)("Headings") 14946 }, 14947 caption: { 14948 description: (0, import_i18n22.__)("Manage the fonts and typography used on captions."), 14949 title: (0, import_i18n22.__)("Captions") 14950 }, 14951 button: { 14952 description: (0, import_i18n22.__)("Manage the fonts and typography used on buttons."), 14953 title: (0, import_i18n22.__)("Buttons") 14954 } 14955 }; 14956 14957 // packages/global-styles-ui/build-module/screen-colors.mjs 14958 var import_i18n24 = __toESM(require_i18n(), 1); 14959 var import_components38 = __toESM(require_components(), 1); 14960 var import_block_editor6 = __toESM(require_block_editor(), 1); 14961 14962 // packages/global-styles-ui/build-module/palette.mjs 14963 var import_components37 = __toESM(require_components(), 1); 14964 var import_i18n23 = __toESM(require_i18n(), 1); 14965 var import_element24 = __toESM(require_element(), 1); 14966 14967 // packages/global-styles-ui/build-module/color-indicator-wrapper.mjs 14968 var import_components36 = __toESM(require_components(), 1); 14969 var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); 14970 14971 // packages/global-styles-ui/build-module/palette.mjs 14972 var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); 14973 14974 // packages/global-styles-ui/build-module/screen-colors.mjs 14975 var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); 14976 var { useSettingsForBlockElement: useSettingsForBlockElement5, ColorPanel: StylesColorPanel2 } = unlock( 14977 import_block_editor6.privateApis 14978 ); 14979 14980 // packages/global-styles-ui/build-module/screen-color-palette.mjs 14981 var import_i18n27 = __toESM(require_i18n(), 1); 14982 var import_components43 = __toESM(require_components(), 1); 14983 14984 // packages/global-styles-ui/build-module/color-palette-panel.mjs 14985 var import_compose4 = __toESM(require_compose(), 1); 14986 var import_components41 = __toESM(require_components(), 1); 14987 var import_i18n25 = __toESM(require_i18n(), 1); 14988 14989 // packages/global-styles-ui/build-module/variations/variations-color.mjs 14990 var import_components40 = __toESM(require_components(), 1); 14991 14992 // packages/global-styles-ui/build-module/preview-colors.mjs 14993 var import_components39 = __toESM(require_components(), 1); 14994 14995 // packages/global-styles-ui/build-module/preset-colors.mjs 14996 var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); 14997 function PresetColors() { 14998 const { paletteColors } = useStylesPreviewColors(); 14999 return paletteColors.slice(0, 4).map(({ slug, color }, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( 15000 "div", 15001 { 15002 style: { 15003 flexGrow: 1, 15004 height: "100%", 15005 background: color 15006 } 15007 }, 15008 `$slug}-$index}` 15009 )); 15010 } 15011 15012 // packages/global-styles-ui/build-module/preview-colors.mjs 15013 var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); 15014 var firstFrameVariants2 = { 15015 start: { 15016 scale: 1, 15017 opacity: 1 15018 }, 15019 hover: { 15020 scale: 0, 15021 opacity: 0 15022 } 15023 }; 15024 var StylesPreviewColors = ({ 15025 label, 15026 isFocused, 15027 withHoverView 15028 }) => { 15029 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( 15030 preview_wrapper_default, 15031 { 15032 label, 15033 isFocused, 15034 withHoverView, 15035 children: ({ key }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( 15036 import_components39.__unstableMotion.div, 15037 { 15038 variants: firstFrameVariants2, 15039 style: { 15040 height: "100%", 15041 overflow: "hidden" 15042 }, 15043 children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( 15044 import_components39.__experimentalHStack, 15045 { 15046 spacing: 0, 15047 justify: "center", 15048 style: { 15049 height: "100%", 15050 overflow: "hidden" 15051 }, 15052 children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(PresetColors, {}) 15053 } 15054 ) 15055 }, 15056 key 15057 ) 15058 } 15059 ); 15060 }; 15061 var preview_colors_default = StylesPreviewColors; 15062 15063 // packages/global-styles-ui/build-module/variations/variations-color.mjs 15064 var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); 15065 var propertiesToFilter2 = ["color"]; 15066 function ColorVariations({ 15067 title, 15068 gap = 2 15069 }) { 15070 const colorVariations = useCurrentMergeThemeStyleVariationsWithUserConfig(propertiesToFilter2); 15071 if (colorVariations?.length <= 1) { 15072 return null; 15073 } 15074 return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_components40.__experimentalVStack, { spacing: 3, children: [ 15075 title && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Subtitle, { level: 3, children: title }), 15076 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_components40.__experimentalGrid, { gap, children: colorVariations.map((variation, index) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)( 15077 Variation, 15078 { 15079 variation, 15080 isPill: true, 15081 properties: propertiesToFilter2, 15082 showTooltip: true, 15083 children: () => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(preview_colors_default, {}) 15084 }, 15085 index 15086 )) }) 15087 ] }); 15088 } 15089 15090 // packages/global-styles-ui/build-module/color-palette-panel.mjs 15091 var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); 15092 15093 // packages/global-styles-ui/build-module/gradients-palette-panel.mjs 15094 var import_compose5 = __toESM(require_compose(), 1); 15095 var import_components42 = __toESM(require_components(), 1); 15096 var import_i18n26 = __toESM(require_i18n(), 1); 15097 var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); 15098 15099 // packages/global-styles-ui/build-module/screen-color-palette.mjs 15100 var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); 15101 var { Tabs: Tabs2 } = unlock(import_components43.privateApis); 15102 15103 // packages/global-styles-ui/build-module/screen-background.mjs 15104 var import_i18n28 = __toESM(require_i18n(), 1); 15105 var import_block_editor8 = __toESM(require_block_editor(), 1); 15106 var import_components44 = __toESM(require_components(), 1); 15107 15108 // packages/global-styles-ui/build-module/background-panel.mjs 15109 var import_block_editor7 = __toESM(require_block_editor(), 1); 15110 var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); 15111 var { BackgroundPanel: StylesBackgroundPanel2 } = unlock( 15112 import_block_editor7.privateApis 15113 ); 15114 15115 // packages/global-styles-ui/build-module/screen-background.mjs 15116 var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); 15117 var { useHasBackgroundPanel: useHasBackgroundPanel3 } = unlock(import_block_editor8.privateApis); 15118 15119 // packages/global-styles-ui/build-module/shadows-panel.mjs 15120 var import_components46 = __toESM(require_components(), 1); 15121 var import_i18n30 = __toESM(require_i18n(), 1); 15122 var import_element25 = __toESM(require_element(), 1); 15123 15124 // packages/global-styles-ui/build-module/confirm-reset-shadow-dialog.mjs 15125 var import_components45 = __toESM(require_components(), 1); 15126 var import_i18n29 = __toESM(require_i18n(), 1); 15127 var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); 15128 15129 // packages/global-styles-ui/build-module/shadows-panel.mjs 15130 var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); 15131 var { Menu } = unlock(import_components46.privateApis); 15132 15133 // packages/global-styles-ui/build-module/shadows-edit-panel.mjs 15134 var import_components47 = __toESM(require_components(), 1); 15135 var import_i18n31 = __toESM(require_i18n(), 1); 15136 var import_element26 = __toESM(require_element(), 1); 15137 var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); 15138 var { Menu: Menu2 } = unlock(import_components47.privateApis); 15139 var customShadowMenuItems = [ 15140 { 15141 label: (0, import_i18n31.__)("Rename"), 15142 action: "rename" 15143 }, 15144 { 15145 label: (0, import_i18n31.__)("Delete"), 15146 action: "delete" 15147 } 15148 ]; 15149 var presetShadowMenuItems = [ 15150 { 15151 label: (0, import_i18n31.__)("Reset"), 15152 action: "reset" 15153 } 15154 ]; 15155 15156 // packages/global-styles-ui/build-module/screen-shadows.mjs 15157 var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); 15158 15159 // packages/global-styles-ui/build-module/screen-layout.mjs 15160 var import_i18n32 = __toESM(require_i18n(), 1); 15161 var import_block_editor10 = __toESM(require_block_editor(), 1); 15162 15163 // packages/global-styles-ui/build-module/dimensions-panel.mjs 15164 var import_block_editor9 = __toESM(require_block_editor(), 1); 15165 var import_element27 = __toESM(require_element(), 1); 15166 var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); 15167 var { useSettingsForBlockElement: useSettingsForBlockElement6, DimensionsPanel: StylesDimensionsPanel2 } = unlock(import_block_editor9.privateApis); 15168 15169 // packages/global-styles-ui/build-module/screen-layout.mjs 15170 var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); 15171 var { useHasDimensionsPanel: useHasDimensionsPanel4, useSettingsForBlockElement: useSettingsForBlockElement7 } = unlock( 15172 import_block_editor10.privateApis 15173 ); 15174 15175 // packages/global-styles-ui/build-module/screen-style-variations.mjs 15176 var import_components50 = __toESM(require_components(), 1); 15177 var import_i18n35 = __toESM(require_i18n(), 1); 15178 15179 // packages/global-styles-ui/build-module/style-variations-content.mjs 15180 var import_i18n34 = __toESM(require_i18n(), 1); 15181 var import_components49 = __toESM(require_components(), 1); 15182 15183 // packages/global-styles-ui/build-module/style-variations-container.mjs 15184 var import_core_data9 = __toESM(require_core_data(), 1); 15185 var import_data9 = __toESM(require_data(), 1); 15186 var import_element28 = __toESM(require_element(), 1); 15187 var import_components48 = __toESM(require_components(), 1); 15188 var import_i18n33 = __toESM(require_i18n(), 1); 15189 var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); 15190 function StyleVariationsContainer({ 15191 gap = 2 15192 }) { 15193 const { user } = (0, import_element28.useContext)(GlobalStylesContext); 15194 const userStyles = user?.styles; 15195 const variations = (0, import_data9.useSelect)((select) => { 15196 const result = select( 15197 import_core_data9.store 15198 ).__experimentalGetCurrentThemeGlobalStylesVariations(); 15199 return Array.isArray(result) ? result : void 0; 15200 }, []); 15201 const fullStyleVariations = variations?.filter( 15202 (variation) => { 15203 return !isVariationWithProperties(variation, ["color"]) && !isVariationWithProperties(variation, [ 15204 "typography", 15205 "spacing" 15206 ]); 15207 } 15208 ); 15209 const themeVariations = (0, import_element28.useMemo)(() => { 15210 const withEmptyVariation = [ 15211 { 15212 title: (0, import_i18n33.__)("Default"), 15213 settings: {}, 15214 styles: {} 15215 }, 15216 ...fullStyleVariations ?? [] 15217 ]; 15218 return [ 15219 ...withEmptyVariation.map((variation) => { 15220 const blockStyles = variation?.styles?.blocks ? { ...variation.styles.blocks } : {}; 15221 if (userStyles?.blocks) { 15222 Object.keys(userStyles.blocks).forEach((blockName) => { 15223 if (userStyles.blocks?.[blockName]?.css) { 15224 const variationBlockStyles = blockStyles[blockName] || {}; 15225 const customCSS = { 15226 css: `$blockStyles[blockName]?.css || ""} $userStyles.blocks?.[blockName]?.css?.trim() || ""}` 15227 }; 15228 blockStyles[blockName] = { 15229 ...variationBlockStyles, 15230 ...customCSS 15231 }; 15232 } 15233 }); 15234 } 15235 const css = userStyles?.css || variation.styles?.css ? { 15236 css: `$variation.styles?.css || ""} $userStyles?.css || ""}` 15237 } : {}; 15238 const blocks = Object.keys(blockStyles).length > 0 ? { blocks: blockStyles } : {}; 15239 const styles = { 15240 ...variation.styles, 15241 ...css, 15242 ...blocks 15243 }; 15244 return { 15245 ...variation, 15246 settings: variation.settings ?? {}, 15247 styles 15248 }; 15249 }) 15250 ]; 15251 }, [fullStyleVariations, userStyles?.blocks, userStyles?.css]); 15252 if (!fullStyleVariations || fullStyleVariations.length < 1) { 15253 return null; 15254 } 15255 return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( 15256 import_components48.__experimentalGrid, 15257 { 15258 columns: 2, 15259 className: "global-styles-ui-style-variations-container", 15260 gap, 15261 children: themeVariations.map( 15262 (variation, index) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Variation, { variation, children: (isFocused) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)( 15263 preview_styles_default, 15264 { 15265 label: variation?.title, 15266 withHoverView: true, 15267 isFocused, 15268 variation 15269 } 15270 ) }, index) 15271 ) 15272 } 15273 ); 15274 } 15275 var style_variations_container_default = StyleVariationsContainer; 15276 15277 // packages/global-styles-ui/build-module/style-variations-content.mjs 15278 var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); 15279 15280 // packages/global-styles-ui/build-module/screen-style-variations.mjs 15281 var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); 15282 15283 // packages/global-styles-ui/build-module/screen-css.mjs 15284 var import_i18n36 = __toESM(require_i18n(), 1); 15285 var import_components51 = __toESM(require_components(), 1); 15286 var import_block_editor11 = __toESM(require_block_editor(), 1); 15287 var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); 15288 var { AdvancedPanel: StylesAdvancedPanel2 } = unlock(import_block_editor11.privateApis); 15289 15290 // packages/global-styles-ui/build-module/screen-revisions/index.mjs 15291 var import_i18n39 = __toESM(require_i18n(), 1); 15292 var import_components54 = __toESM(require_components(), 1); 15293 var import_element30 = __toESM(require_element(), 1); 15294 15295 // packages/global-styles-ui/build-module/screen-revisions/use-global-styles-revisions.mjs 15296 var import_data10 = __toESM(require_data(), 1); 15297 var import_core_data10 = __toESM(require_core_data(), 1); 15298 var import_element29 = __toESM(require_element(), 1); 15299 15300 // packages/global-styles-ui/build-module/screen-revisions/revisions-buttons.mjs 15301 var import_i18n37 = __toESM(require_i18n(), 1); 15302 var import_components52 = __toESM(require_components(), 1); 15303 var import_date = __toESM(require_date(), 1); 15304 var import_core_data11 = __toESM(require_core_data(), 1); 15305 var import_data11 = __toESM(require_data(), 1); 15306 var import_keycodes2 = __toESM(require_keycodes(), 1); 15307 var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); 15308 var DAY_IN_MILLISECONDS = 60 * 60 * 1e3 * 24; 15309 15310 // packages/global-styles-ui/build-module/pagination/index.mjs 15311 var import_components53 = __toESM(require_components(), 1); 15312 var import_i18n38 = __toESM(require_i18n(), 1); 15313 var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); 15314 15315 // packages/global-styles-ui/build-module/screen-revisions/index.mjs 15316 var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); 15317 15318 // packages/global-styles-ui/build-module/font-sizes/font-sizes.mjs 15319 var import_i18n41 = __toESM(require_i18n(), 1); 15320 var import_components56 = __toESM(require_components(), 1); 15321 var import_element31 = __toESM(require_element(), 1); 15322 15323 // packages/global-styles-ui/build-module/font-sizes/confirm-reset-font-sizes-dialog.mjs 15324 var import_components55 = __toESM(require_components(), 1); 15325 var import_i18n40 = __toESM(require_i18n(), 1); 15326 var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); 15327 15328 // packages/global-styles-ui/build-module/font-sizes/font-sizes.mjs 15329 var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); 15330 var { Menu: Menu3 } = unlock(import_components56.privateApis); 15331 15332 // packages/global-styles-ui/build-module/font-sizes/font-size.mjs 15333 var import_i18n45 = __toESM(require_i18n(), 1); 15334 var import_components60 = __toESM(require_components(), 1); 15335 var import_element33 = __toESM(require_element(), 1); 15336 15337 // packages/global-styles-ui/build-module/font-sizes/font-size-preview.mjs 15338 var import_block_editor12 = __toESM(require_block_editor(), 1); 15339 var import_i18n42 = __toESM(require_i18n(), 1); 15340 var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); 15341 15342 // packages/global-styles-ui/build-module/font-sizes/confirm-delete-font-size-dialog.mjs 15343 var import_components57 = __toESM(require_components(), 1); 15344 var import_i18n43 = __toESM(require_i18n(), 1); 15345 var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); 15346 15347 // packages/global-styles-ui/build-module/font-sizes/rename-font-size-dialog.mjs 15348 var import_components58 = __toESM(require_components(), 1); 15349 var import_i18n44 = __toESM(require_i18n(), 1); 15350 var import_element32 = __toESM(require_element(), 1); 15351 var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); 15352 15353 // packages/global-styles-ui/build-module/size-control/index.mjs 15354 var import_components59 = __toESM(require_components(), 1); 15355 var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); 15356 15357 // packages/global-styles-ui/build-module/font-sizes/font-size.mjs 15358 var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); 15359 var { Menu: Menu4 } = unlock(import_components60.privateApis); 15360 15361 // packages/global-styles-ui/build-module/global-styles-ui.mjs 15362 var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); 15363 15364 // packages/global-styles-ui/build-module/with-global-styles-provider.mjs 15365 var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); 15366 function withGlobalStylesProvider(Component) { 15367 return function WrappedComponent({ 15368 value, 15369 baseValue, 15370 onChange, 15371 ...props 15372 }) { 15373 return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( 15374 GlobalStylesProvider, 15375 { 15376 value, 15377 baseValue, 15378 onChange, 15379 children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Component, { ...props }) 15380 } 15381 ); 15382 }; 15383 } 15384 15385 // packages/global-styles-ui/build-module/style-variations.mjs 15386 var StyleVariations = withGlobalStylesProvider(style_variations_container_default); 15387 15388 // packages/global-styles-ui/build-module/color-variations.mjs 15389 var ColorVariations2 = withGlobalStylesProvider(ColorVariations); 15390 15391 // packages/global-styles-ui/build-module/typography-variations.mjs 15392 var TypographyVariations2 = withGlobalStylesProvider(TypographyVariations); 15393 15394 // packages/global-styles-ui/build-module/font-library/font-library.mjs 15395 var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); 15396 function FontLibrary({ 15397 value, 15398 baseValue, 15399 onChange, 15400 activeTab = "installed-fonts" 15401 }) { 15402 let content; 15403 switch (activeTab) { 15404 case "upload-fonts": 15405 content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(upload_fonts_default, {}); 15406 break; 15407 case "installed-fonts": 15408 content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(installed_fonts_default, {}); 15409 break; 15410 default: 15411 content = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(font_collection_default, { slug: activeTab }); 15412 } 15413 return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( 15414 GlobalStylesProvider, 15415 { 15416 value, 15417 baseValue, 15418 onChange, 15419 children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(context_default, { children: content }) 15420 } 15421 ); 15422 } 15423 15424 // routes/font-list/lock-unlock.ts 15425 var import_private_apis2 = __toESM(require_private_apis()); 15426 var { unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 15427 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 15428 "@wordpress/font-list-route" 15429 ); 15430 15431 // routes/font-list/style.scss 15432 if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='4bbd4c3e39']")) { 15433 const style = document.createElement("style"); 15434 style.setAttribute("data-wp-hash", "4bbd4c3e39"); 15435 style.appendChild(document.createTextNode('@media (min-width:782px){.font-library-modal.font-library-modal{width:65vw}}.font-library-modal .components-modal__header{border-bottom:none}.font-library-modal .components-modal__content{margin-bottom:90px;padding:0}.font-library-modal .font-library__subtitle{font-size:11px;font-weight:499;text-transform:uppercase}.font-library-modal__tab-panel{height:calc(100% - 50px)}.font-library__tabpanel-layout{display:flex;flex-direction:column;height:100%}.font-library__tabpanel-layout>div{flex-grow:1}.font-library__tabpanel-layout .font-library__loading{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;left:0;padding-top:124px;position:absolute;top:0;width:100%}.font-library__footer,.font-library__tabpanel-layout .components-navigator-screen{padding:24px;width:100%}.font-library__footer{background-color:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;flex-grow:0!important;flex-shrink:0;height:90px;position:absolute}.font-library__page-selection{font-size:11px;font-weight:499;text-transform:uppercase}@media (min-width:600px){.font-library__page-selection .font-library__page-selection-trigger{font-size:11px!important;font-weight:499}}.font-library__fonts-title{font-size:11px;font-weight:600;margin-bottom:0;margin-top:0;text-transform:uppercase}.font-library__fonts-list{list-style:none;margin-bottom:0;margin-top:0;padding:0}.font-library__fonts-list-item{margin-bottom:0}.font-library__font-card{border:1px solid #ddd;box-sizing:border-box;height:auto!important;margin-top:-1px;padding:16px;width:100%}.font-library__font-card:hover{background-color:#f0f0f0}.font-library__font-card:focus{position:relative}.font-library__font-card .font-library__font-card__name{font-weight:700}.font-library__font-card .font-library__font-card__count{color:#757575}.font-library__font-card .font-library__font-variant_demo-image{display:block;height:24px;width:auto}.font-library__font-card .font-library__font-variant_demo-text{flex-shrink:0;white-space:nowrap}@media not (prefers-reduced-motion){.font-library__font-card .font-library__font-variant_demo-text{transition:opacity .3s ease-in-out}}.font-library-modal__tablist-container{background:#fff;border-bottom:1px solid #ddd;position:sticky;top:0;z-index:1}.font-library__upload-area{align-items:center;display:flex;height:256px!important;justify-content:center;width:100%}button.font-library__upload-area{background-color:#f0f0f0}.font-library__local-fonts{margin:24px auto;width:80%}.font-library__local-fonts .font-library__upload-area__text{color:#757575}.font-library__google-fonts-confirm{align-items:center;display:flex;justify-content:center;margin-top:64px}.font-library__google-fonts-confirm p{line-height:1.4}.font-library__google-fonts-confirm h2{font-size:1.2rem;font-weight:400}.font-library__google-fonts-confirm .components-card{padding:16px;width:400px}.font-library__google-fonts-confirm .components-button{justify-content:center;width:100%}.font-library__select-all{padding:16px 16px 16px 17px}.font-library__select-all .components-checkbox-control__label{padding-left:16px}.global-styles-ui-pagination .components-button.is-tertiary{height:32px;justify-content:center;width:32px}.global-styles-ui-screen-revisions__revisions-list{flex-grow:1;list-style:none;margin:0 16px 16px}.global-styles-ui-screen-revisions__revisions-list li{margin-bottom:0}.global-styles-ui-screen-revisions__revision-item{cursor:pointer;display:flex;flex-direction:column;position:relative}.global-styles-ui-screen-revisions__revision-item[role=option]:active,.global-styles-ui-screen-revisions__revision-item[role=option]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.global-styles-ui-screen-revisions__revision-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.global-styles-ui-screen-revisions__revision-item:hover .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item:after,.global-styles-ui-screen-revisions__revision-item:before{content:"\\a";display:block;position:absolute}.global-styles-ui-screen-revisions__revision-item:before{background:#ddd;border:4px solid #0000;border-radius:50%;height:8px;left:17px;top:18px;transform:translate(-50%,-50%);width:8px;z-index:1}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:2px;color:var(--wp-admin-theme-color);outline:3px solid #0000;outline-offset:-2px}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__date{color:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true]:before{background:var(--wp-admin-theme-color)}.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__changes>li,.global-styles-ui-screen-revisions__revision-item[aria-selected=true] .global-styles-ui-screen-revisions__meta{color:#1e1e1e}.global-styles-ui-screen-revisions__revision-item:after{border:.5px solid #ddd;height:100%;left:16px;top:0;width:0}.global-styles-ui-screen-revisions__revision-item:first-child:after{top:18px}.global-styles-ui-screen-revisions__revision-item:last-child:after{height:18px}.global-styles-ui-screen-revisions__revision-item-wrapper{display:block;padding:12px 12px 4px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__apply-button.is-primary{align-self:flex-start;margin:4px 12px 12px 40px}.global-styles-ui-screen-revisions__applied-text,.global-styles-ui-screen-revisions__changes,.global-styles-ui-screen-revisions__meta{color:#757575;font-size:12px}.global-styles-ui-screen-revisions__description{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.global-styles-ui-screen-revisions__description .global-styles-ui-screen-revisions__date{font-size:12px;font-weight:600;text-transform:uppercase}.global-styles-ui-screen-revisions__meta{align-items:flex-start;display:flex;justify-content:start;margin-bottom:4px;text-align:left;width:100%}.global-styles-ui-screen-revisions__meta img{border-radius:100%;height:16px;margin-right:8px;width:16px}.global-styles-ui-screen-revisions__loading{margin:24px auto!important}.global-styles-ui-screen-revisions__changes{line-height:1.4;list-style:disc;margin-left:12px;text-align:left}.global-styles-ui-screen-revisions__changes li{margin-bottom:4px}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination{gap:2px;justify-content:space-between}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .edit-site-pagination__total{height:1px;left:-1000px;margin:-1px;overflow:hidden;position:absolute}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-text{font-size:12px;will-change:opacity}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary{color:#1e1e1e}.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary:disabled,.global-styles-ui-screen-revisions__pagination.global-styles-ui-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{color:#949494}.global-styles-ui-screen-revisions__footer{background:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;height:56px;min-width:100%;padding:12px;position:sticky;z-index:1}.global-styles-ui-variations_item{box-sizing:border-box;cursor:pointer}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{border-radius:2px;outline:1px solid #0000001a;outline-offset:-1px;overflow:hidden;position:relative}@media not (prefers-reduced-motion){.global-styles-ui-variations_item .global-styles-ui-variations_item-preview{transition:outline .1s linear}}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill{height:32px}.global-styles-ui-variations_item .global-styles-ui-variations_item-preview.is-pill .block-editor-iframe__scale-container{overflow:hidden}.global-styles-ui-variations_item:not(.is-active):hover .global-styles-ui-variations_item-preview{outline-color:#0000004d}.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{outline-color:#1e1e1e;outline-offset:1px;outline-width:var(--wp-admin-border-width-focus)}.global-styles-ui-variations_item:focus-visible .global-styles-ui-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.global-styles-ui-preview{align-items:center;cursor:pointer;display:flex;justify-content:center;line-height:1}.global-styles-ui-preview__wrapper{display:block;max-width:100%;width:100%}.global-styles-ui-typography-preview{align-items:center;background:#f0f0f0;border-radius:2px;display:flex;justify-content:center;margin-bottom:20px;min-height:100px;overflow:hidden}.global-styles-ui-font-size__item{line-break:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.global-styles-ui-font-size__item-value{color:#757575}.global-styles-ui-screen-typography__indicator{align-items:center;border-radius:2px;display:flex!important;font-size:14px;height:24px;justify-content:center;width:24px}.global-styles-ui-block-types-search{margin-bottom:10px;padding:0 16px}.global-styles-ui-screen-typography__font-variants-count{color:#757575}.global-styles-ui-font-families__manage-fonts{justify-content:center}.global-styles-ui-screen .color-block-support-panel{border-top:none;padding-left:0;padding-right:0;padding-top:0;row-gap:12px}.global-styles-ui-header{margin-bottom:0!important}.global-styles-ui-subtitle{font-size:11px!important;font-weight:499!important;margin-bottom:0!important;text-transform:uppercase}.global-styles-ui-section-title{color:#2f2f2f;font-weight:600;line-height:1.2;margin:0;padding:16px 16px 0}.global-styles-ui-icon-with-current-color{fill:currentColor}.global-styles-ui__color-indicator-wrapper{flex-shrink:0;height:24px}.global-styles-ui__shadows-panel__options-container,.global-styles-ui__typography-panel__options-container{height:24px}.global-styles-ui__block-preview-panel{border:1px solid #ddd;border-radius:2px;overflow:hidden;position:relative;width:100%}.global-styles-ui__shadow-preview-panel{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,8px 8px;background-size:16px 16px;border:1px solid #ddd;border-radius:2px;height:144px;overflow:auto}.global-styles-ui__shadow-preview-panel .global-styles-ui__shadow-preview-block{background-color:#fff;border:1px solid #ddd;border-radius:2px;height:60px;width:60%}.global-styles-ui__shadow-editor__dropdown-content{width:280px}.global-styles-ui__shadow-editor-panel{margin-bottom:4px}.global-styles-ui__shadow-editor__dropdown{position:relative;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle{border-radius:inherit;height:auto;padding-bottom:8px;padding-top:8px;text-align:left;width:100%}.global-styles-ui__shadow-editor__dropdown-toggle.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.global-styles-ui__shadow-editor__remove-button{opacity:0;position:absolute;right:8px;top:8px}.global-styles-ui__shadow-editor__remove-button.global-styles-ui__shadow-editor__remove-button{border:none}.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{opacity:1}@media (hover:none){.global-styles-ui__shadow-editor__remove-button{opacity:1}}.global-styles-ui-screen-css{display:flex;flex:1 1 auto;flex-direction:column;margin:16px}.global-styles-ui-screen-css .components-v-stack{flex:1 1 auto}.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.global-styles-ui-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{display:flex;flex:1 1 auto;flex-direction:column}.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{direction:ltr;flex:1 1 auto}.global-styles-ui-screen-css-help-link{display:inline-block;margin-top:8px}.global-styles-ui-screen-variations{border-top:1px solid #ddd;margin-top:16px}.global-styles-ui-screen-variations>*{margin:24px 16px}.global-styles-ui-sidebar__navigator-provider{height:100%}.global-styles-ui-sidebar__navigator-screen{display:flex;flex-direction:column;height:100%}.global-styles-ui-sidebar__navigator-screen .single-column{grid-column:span 1}.global-styles-ui-screen-root.global-styles-ui-screen-root,.global-styles-ui-screen-style-variations.global-styles-ui-screen-style-variations{background:unset;color:inherit}.global-styles-ui-sidebar__panel .block-editor-block-icon svg{fill:currentColor}.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{border-radius:2px}.global-styles-ui-screen-root__active-style-tile-preview{clip-path:border-box}.global-styles-ui-color-palette-panel,.global-styles-ui-gradient-palette-panel{padding:16px}.font-library-page__tablist{border-bottom:1px solid #f0f0f0;padding:0 24px}.font-library-page__tab-panel{flex-grow:1;max-height:calc(100% - 110px);overflow:auto}.admin-ui-page:has(.font-library__footer) .font-library-page__tab-panel{max-height:calc(100% - 198px)}')); 15436 document.head.appendChild(style); 15437 } 15438 15439 // routes/font-list/stage.tsx 15440 var { Tabs: Tabs3 } = unlock2(import_components62.privateApis); 15441 var { useGlobalStyles } = unlock2(import_editor.privateApis); 15442 function FontLibraryPage() { 15443 const { records: collections = [] } = (0, import_core_data12.useEntityRecords)("root", "fontCollection", { 15444 _fields: "slug,name,description" 15445 }); 15446 const [activeTab, setActiveTab] = (0, import_element35.useState)("installed-fonts"); 15447 const { base, user, setUser, isReady } = useGlobalStyles(); 15448 const canUserCreate = (0, import_data13.useSelect)((select) => { 15449 return select(import_core_data12.store).canUser("create", { 15450 kind: "postType", 15451 name: "wp_font_family" 15452 }); 15453 }, []); 15454 if (!isReady) { 15455 return null; 15456 } 15457 const tabs = [ 15458 { 15459 id: "installed-fonts", 15460 title: (0, import_i18n46.__)("Library") 15461 } 15462 ]; 15463 if (canUserCreate) { 15464 tabs.push({ 15465 id: "upload-fonts", 15466 title: (0, import_i18n46.__)("Upload") 15467 }); 15468 tabs.push( 15469 ...(collections || []).map(({ slug, name: name2 }) => ({ 15470 id: slug, 15471 title: collections && collections.length === 1 && slug === "google-fonts" ? (0, import_i18n46.__)("Install Fonts") : name2 15472 })) 15473 ); 15474 } 15475 return /* @__PURE__ */ React.createElement(page_default, { title: (0, import_i18n46.__)("Fonts") }, /* @__PURE__ */ React.createElement( 15476 Tabs3, 15477 { 15478 selectedTabId: activeTab, 15479 onSelect: (tabId) => setActiveTab(tabId) 15480 }, 15481 /* @__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)))), 15482 tabs.map(({ id }) => /* @__PURE__ */ React.createElement( 15483 Tabs3.TabPanel, 15484 { 15485 key: id, 15486 tabId: id, 15487 focusable: false, 15488 className: "font-library-page__tab-panel" 15489 }, 15490 /* @__PURE__ */ React.createElement( 15491 FontLibrary, 15492 { 15493 value: user, 15494 baseValue: base, 15495 onChange: setUser, 15496 activeTab: id 15497 } 15498 ) 15499 )) 15500 )); 15501 } 15502 function Stage() { 15503 return /* @__PURE__ */ React.createElement(FontLibraryPage, null); 15504 } 15505 var stage = Stage; 15506 export { 15507 stage 15508 }; 15509 /*! Bundled license information: 15510 15511 is-plain-object/dist/is-plain-object.mjs: 15512 (*! 15513 * is-plain-object <https://github.com/jonschlinkert/is-plain-object> 15514 * 15515 * Copyright (c) 2014-2017, Jon Schlinkert. 15516 * Released under the MIT License. 15517 *) 15518 */
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Sun Jun 14 08:20:09 2026 | Cross-referenced by PHPXref |