| [ 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 __commonJS = (cb, mod) => function __require() { 8 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 9 }; 10 var __copyProps = (to, from, except, desc) => { 11 if (from && typeof from === "object" || typeof from === "function") { 12 for (let key of __getOwnPropNames(from)) 13 if (!__hasOwnProp.call(to, key) && key !== except) 14 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 15 } 16 return to; 17 }; 18 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 19 // If the importer is in node compatibility mode or this is not an ESM 20 // file that has been converted to a CommonJS file using a Babel- 21 // compatible transform (i.e. "__esModule" has not been set), then set 22 // "default" to the CommonJS "module.exports" for node compatibility. 23 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 24 mod 25 )); 26 27 // package-external:@wordpress/element 28 var require_element = __commonJS({ 29 "package-external:@wordpress/element"(exports, module) { 30 module.exports = window.wp.element; 31 } 32 }); 33 34 // vendor-external:react 35 var require_react = __commonJS({ 36 "vendor-external:react"(exports, module) { 37 module.exports = window.React; 38 } 39 }); 40 41 // vendor-external:react/jsx-runtime 42 var require_jsx_runtime = __commonJS({ 43 "vendor-external:react/jsx-runtime"(exports, module) { 44 module.exports = window.ReactJSXRuntime; 45 } 46 }); 47 48 // vendor-external:react-dom 49 var require_react_dom = __commonJS({ 50 "vendor-external:react-dom"(exports, module) { 51 module.exports = window.ReactDOM; 52 } 53 }); 54 55 // package-external:@wordpress/data 56 var require_data = __commonJS({ 57 "package-external:@wordpress/data"(exports, module) { 58 module.exports = window.wp.data; 59 } 60 }); 61 62 // package-external:@wordpress/i18n 63 var require_i18n = __commonJS({ 64 "package-external:@wordpress/i18n"(exports, module) { 65 module.exports = window.wp.i18n; 66 } 67 }); 68 69 // package-external:@wordpress/components 70 var require_components = __commonJS({ 71 "package-external:@wordpress/components"(exports, module) { 72 module.exports = window.wp.components; 73 } 74 }); 75 76 // package-external:@wordpress/keyboard-shortcuts 77 var require_keyboard_shortcuts = __commonJS({ 78 "package-external:@wordpress/keyboard-shortcuts"(exports, module) { 79 module.exports = window.wp.keyboardShortcuts; 80 } 81 }); 82 83 // package-external:@wordpress/primitives 84 var require_primitives = __commonJS({ 85 "package-external:@wordpress/primitives"(exports, module) { 86 module.exports = window.wp.primitives; 87 } 88 }); 89 90 // package-external:@wordpress/private-apis 91 var require_private_apis = __commonJS({ 92 "package-external:@wordpress/private-apis"(exports, module) { 93 module.exports = window.wp.privateApis; 94 } 95 }); 96 97 // packages/workflow/build-module/index.js 98 var import_element3 = __toESM(require_element()); 99 100 // node_modules/cmdk/dist/chunk-NZJY6EH4.mjs 101 var U = 1; 102 var Y = 0.9; 103 var H = 0.8; 104 var J = 0.17; 105 var p = 0.1; 106 var u = 0.999; 107 var $ = 0.9999; 108 var k = 0.99; 109 var m = /[\\\/_+.#"@\[\(\{&]/; 110 var B = /[\\\/_+.#"@\[\(\{&]/g; 111 var K = /[\s-]/; 112 var X = /[\s-]/g; 113 function G(_, C, h, P2, A, f, O) { 114 if (f === C.length) return A === _.length ? U : k; 115 var T2 = `$A},$f}`; 116 if (O[T2] !== void 0) return O[T2]; 117 for (var L2 = P2.charAt(f), c = h.indexOf(L2, A), S = 0, E, N2, R, M; c >= 0; ) E = G(_, C, h, P2, c + 1, f + 1, O), E > S && (c === A ? E *= U : m.test(_.charAt(c - 1)) ? (E *= H, R = _.slice(A, c - 1).match(B), R && A > 0 && (E *= Math.pow(u, R.length))) : K.test(_.charAt(c - 1)) ? (E *= Y, M = _.slice(A, c - 1).match(X), M && A > 0 && (E *= Math.pow(u, M.length))) : (E *= J, A > 0 && (E *= Math.pow(u, c - A))), _.charAt(c) !== C.charAt(f) && (E *= $)), (E < p && h.charAt(c - 1) === P2.charAt(f + 1) || P2.charAt(f + 1) === P2.charAt(f) && h.charAt(c - 1) !== P2.charAt(f)) && (N2 = G(_, C, h, P2, c + 1, f + 2, O), N2 * p > E && (E = N2 * p)), E > S && (S = E), c = h.indexOf(L2, c + 1); 118 return O[T2] = S, S; 119 } 120 function D(_) { 121 return _.toLowerCase().replace(X, " "); 122 } 123 function W(_, C, h) { 124 return _ = h && h.length > 0 ? `$_ + " " + h.join(" ")}` : _, G(_, C, D(_), D(C), 0, 0, {}); 125 } 126 127 // node_modules/@radix-ui/react-dialog/dist/index.mjs 128 var React37 = __toESM(require_react(), 1); 129 130 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/primitive/dist/index.mjs 131 var canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement); 132 function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) { 133 return function handleEvent(event) { 134 originalEventHandler?.(event); 135 if (checkForDefaultPrevented === false || !event.defaultPrevented) { 136 return ourEventHandler?.(event); 137 } 138 }; 139 } 140 141 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-compose-refs/dist/index.mjs 142 var React = __toESM(require_react(), 1); 143 function setRef(ref, value) { 144 if (typeof ref === "function") { 145 return ref(value); 146 } else if (ref !== null && ref !== void 0) { 147 ref.current = value; 148 } 149 } 150 function composeRefs(...refs) { 151 return (node) => { 152 let hasCleanup = false; 153 const cleanups = refs.map((ref) => { 154 const cleanup = setRef(ref, node); 155 if (!hasCleanup && typeof cleanup == "function") { 156 hasCleanup = true; 157 } 158 return cleanup; 159 }); 160 if (hasCleanup) { 161 return () => { 162 for (let i = 0; i < cleanups.length; i++) { 163 const cleanup = cleanups[i]; 164 if (typeof cleanup == "function") { 165 cleanup(); 166 } else { 167 setRef(refs[i], null); 168 } 169 } 170 }; 171 } 172 }; 173 } 174 function useComposedRefs(...refs) { 175 return React.useCallback(composeRefs(...refs), refs); 176 } 177 178 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-context/dist/index.mjs 179 var React2 = __toESM(require_react(), 1); 180 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 181 function createContext2(rootComponentName, defaultContext) { 182 const Context = React2.createContext(defaultContext); 183 const Provider = (props) => { 184 const { children, ...context } = props; 185 const value = React2.useMemo(() => context, Object.values(context)); 186 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Context.Provider, { value, children }); 187 }; 188 Provider.displayName = rootComponentName + "Provider"; 189 function useContext22(consumerName) { 190 const context = React2.useContext(Context); 191 if (context) return context; 192 if (defaultContext !== void 0) return defaultContext; 193 throw new Error(`\`$consumerName}\` must be used within \`$rootComponentName}\``); 194 } 195 return [Provider, useContext22]; 196 } 197 function createContextScope(scopeName, createContextScopeDeps = []) { 198 let defaultContexts = []; 199 function createContext32(rootComponentName, defaultContext) { 200 const BaseContext = React2.createContext(defaultContext); 201 const index = defaultContexts.length; 202 defaultContexts = [...defaultContexts, defaultContext]; 203 const Provider = (props) => { 204 const { scope, children, ...context } = props; 205 const Context = scope?.[scopeName]?.[index] || BaseContext; 206 const value = React2.useMemo(() => context, Object.values(context)); 207 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Context.Provider, { value, children }); 208 }; 209 Provider.displayName = rootComponentName + "Provider"; 210 function useContext22(consumerName, scope) { 211 const Context = scope?.[scopeName]?.[index] || BaseContext; 212 const context = React2.useContext(Context); 213 if (context) return context; 214 if (defaultContext !== void 0) return defaultContext; 215 throw new Error(`\`$consumerName}\` must be used within \`$rootComponentName}\``); 216 } 217 return [Provider, useContext22]; 218 } 219 const createScope = () => { 220 const scopeContexts = defaultContexts.map((defaultContext) => { 221 return React2.createContext(defaultContext); 222 }); 223 return function useScope(scope) { 224 const contexts = scope?.[scopeName] || scopeContexts; 225 return React2.useMemo( 226 () => ({ [`__scope$scopeName}`]: { ...scope, [scopeName]: contexts } }), 227 [scope, contexts] 228 ); 229 }; 230 }; 231 createScope.scopeName = scopeName; 232 return [createContext32, composeContextScopes(createScope, ...createContextScopeDeps)]; 233 } 234 function composeContextScopes(...scopes) { 235 const baseScope = scopes[0]; 236 if (scopes.length === 1) return baseScope; 237 const createScope = () => { 238 const scopeHooks = scopes.map((createScope2) => ({ 239 useScope: createScope2(), 240 scopeName: createScope2.scopeName 241 })); 242 return function useComposedScopes(overrideScopes) { 243 const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => { 244 const scopeProps = useScope(overrideScopes); 245 const currentScope = scopeProps[`__scope$scopeName}`]; 246 return { ...nextScopes2, ...currentScope }; 247 }, {}); 248 return React2.useMemo(() => ({ [`__scope$baseScope.scopeName}`]: nextScopes }), [nextScopes]); 249 }; 250 }; 251 createScope.scopeName = baseScope.scopeName; 252 return createScope; 253 } 254 255 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-id/dist/index.mjs 256 var React4 = __toESM(require_react(), 1); 257 258 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs 259 var React3 = __toESM(require_react(), 1); 260 var useLayoutEffect2 = globalThis?.document ? React3.useLayoutEffect : () => { 261 }; 262 263 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-id/dist/index.mjs 264 var useReactId = React4[" useId ".trim().toString()] || (() => void 0); 265 var count = 0; 266 function useId(deterministicId) { 267 const [id, setId] = React4.useState(useReactId()); 268 useLayoutEffect2(() => { 269 if (!deterministicId) setId((reactId) => reactId ?? String(count++)); 270 }, [deterministicId]); 271 return deterministicId || (id ? `radix-$id}` : ""); 272 } 273 274 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs 275 var React5 = __toESM(require_react(), 1); 276 var React22 = __toESM(require_react(), 1); 277 var useInsertionEffect = React5[" useInsertionEffect ".trim().toString()] || useLayoutEffect2; 278 function useControllableState({ 279 prop, 280 defaultProp, 281 onChange = () => { 282 }, 283 caller 284 }) { 285 const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({ 286 defaultProp, 287 onChange 288 }); 289 const isControlled = prop !== void 0; 290 const value = isControlled ? prop : uncontrolledProp; 291 if (true) { 292 const isControlledRef = React5.useRef(prop !== void 0); 293 React5.useEffect(() => { 294 const wasControlled = isControlledRef.current; 295 if (wasControlled !== isControlled) { 296 const from = wasControlled ? "controlled" : "uncontrolled"; 297 const to = isControlled ? "controlled" : "uncontrolled"; 298 console.warn( 299 `$caller} is changing from $from} to $to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.` 300 ); 301 } 302 isControlledRef.current = isControlled; 303 }, [isControlled, caller]); 304 } 305 const setValue = React5.useCallback( 306 (nextValue) => { 307 if (isControlled) { 308 const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue; 309 if (value2 !== prop) { 310 onChangeRef.current?.(value2); 311 } 312 } else { 313 setUncontrolledProp(nextValue); 314 } 315 }, 316 [isControlled, prop, setUncontrolledProp, onChangeRef] 317 ); 318 return [value, setValue]; 319 } 320 function useUncontrolledState({ 321 defaultProp, 322 onChange 323 }) { 324 const [value, setValue] = React5.useState(defaultProp); 325 const prevValueRef = React5.useRef(value); 326 const onChangeRef = React5.useRef(onChange); 327 useInsertionEffect(() => { 328 onChangeRef.current = onChange; 329 }, [onChange]); 330 React5.useEffect(() => { 331 if (prevValueRef.current !== value) { 332 onChangeRef.current?.(value); 333 prevValueRef.current = value; 334 } 335 }, [value, prevValueRef]); 336 return [value, setValue, onChangeRef]; 337 } 338 function isFunction(value) { 339 return typeof value === "function"; 340 } 341 var SYNC_STATE = Symbol("RADIX:SYNC_STATE"); 342 343 // node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs 344 var React11 = __toESM(require_react(), 1); 345 346 // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/primitive/dist/index.mjs 347 var canUseDOM2 = !!(typeof window !== "undefined" && window.document && window.document.createElement); 348 function composeEventHandlers2(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) { 349 return function handleEvent(event) { 350 originalEventHandler?.(event); 351 if (checkForDefaultPrevented === false || !event.defaultPrevented) { 352 return ourEventHandler?.(event); 353 } 354 }; 355 } 356 357 // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive/dist/index.mjs 358 var React8 = __toESM(require_react(), 1); 359 var ReactDOM = __toESM(require_react_dom(), 1); 360 361 // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot/dist/index.mjs 362 var React7 = __toESM(require_react(), 1); 363 364 // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-compose-refs/dist/index.mjs 365 var React6 = __toESM(require_react(), 1); 366 function setRef2(ref, value) { 367 if (typeof ref === "function") { 368 return ref(value); 369 } else if (ref !== null && ref !== void 0) { 370 ref.current = value; 371 } 372 } 373 function composeRefs2(...refs) { 374 return (node) => { 375 let hasCleanup = false; 376 const cleanups = refs.map((ref) => { 377 const cleanup = setRef2(ref, node); 378 if (!hasCleanup && typeof cleanup == "function") { 379 hasCleanup = true; 380 } 381 return cleanup; 382 }); 383 if (hasCleanup) { 384 return () => { 385 for (let i = 0; i < cleanups.length; i++) { 386 const cleanup = cleanups[i]; 387 if (typeof cleanup == "function") { 388 cleanup(); 389 } else { 390 setRef2(refs[i], null); 391 } 392 } 393 }; 394 } 395 }; 396 } 397 function useComposedRefs2(...refs) { 398 return React6.useCallback(composeRefs2(...refs), refs); 399 } 400 401 // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot/dist/index.mjs 402 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); 403 // @__NO_SIDE_EFFECTS__ 404 function createSlot(ownerName) { 405 const SlotClone = /* @__PURE__ */ createSlotClone(ownerName); 406 const Slot2 = React7.forwardRef((props, forwardedRef) => { 407 const { children, ...slotProps } = props; 408 const childrenArray = React7.Children.toArray(children); 409 const slottable = childrenArray.find(isSlottable); 410 if (slottable) { 411 const newElement = slottable.props.children; 412 const newChildren = childrenArray.map((child) => { 413 if (child === slottable) { 414 if (React7.Children.count(newElement) > 1) return React7.Children.only(null); 415 return React7.isValidElement(newElement) ? newElement.props.children : null; 416 } else { 417 return child; 418 } 419 }); 420 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React7.isValidElement(newElement) ? React7.cloneElement(newElement, void 0, newChildren) : null }); 421 } 422 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children }); 423 }); 424 Slot2.displayName = `$ownerName}.Slot`; 425 return Slot2; 426 } 427 // @__NO_SIDE_EFFECTS__ 428 function createSlotClone(ownerName) { 429 const SlotClone = React7.forwardRef((props, forwardedRef) => { 430 const { children, ...slotProps } = props; 431 if (React7.isValidElement(children)) { 432 const childrenRef = getElementRef(children); 433 const props2 = mergeProps(slotProps, children.props); 434 if (children.type !== React7.Fragment) { 435 props2.ref = forwardedRef ? composeRefs2(forwardedRef, childrenRef) : childrenRef; 436 } 437 return React7.cloneElement(children, props2); 438 } 439 return React7.Children.count(children) > 1 ? React7.Children.only(null) : null; 440 }); 441 SlotClone.displayName = `$ownerName}.SlotClone`; 442 return SlotClone; 443 } 444 var SLOTTABLE_IDENTIFIER = Symbol("radix.slottable"); 445 function isSlottable(child) { 446 return React7.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER; 447 } 448 function mergeProps(slotProps, childProps) { 449 const overrideProps = { ...childProps }; 450 for (const propName in childProps) { 451 const slotPropValue = slotProps[propName]; 452 const childPropValue = childProps[propName]; 453 const isHandler = /^on[A-Z]/.test(propName); 454 if (isHandler) { 455 if (slotPropValue && childPropValue) { 456 overrideProps[propName] = (...args) => { 457 const result = childPropValue(...args); 458 slotPropValue(...args); 459 return result; 460 }; 461 } else if (slotPropValue) { 462 overrideProps[propName] = slotPropValue; 463 } 464 } else if (propName === "style") { 465 overrideProps[propName] = { ...slotPropValue, ...childPropValue }; 466 } else if (propName === "className") { 467 overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" "); 468 } 469 } 470 return { ...slotProps, ...overrideProps }; 471 } 472 function getElementRef(element) { 473 let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get; 474 let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 475 if (mayWarn) { 476 return element.ref; 477 } 478 getter = Object.getOwnPropertyDescriptor(element, "ref")?.get; 479 mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 480 if (mayWarn) { 481 return element.props.ref; 482 } 483 return element.props.ref || element.ref; 484 } 485 486 // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive/dist/index.mjs 487 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); 488 var NODES = [ 489 "a", 490 "button", 491 "div", 492 "form", 493 "h2", 494 "h3", 495 "img", 496 "input", 497 "label", 498 "li", 499 "nav", 500 "ol", 501 "p", 502 "select", 503 "span", 504 "svg", 505 "ul" 506 ]; 507 var Primitive = NODES.reduce((primitive, node) => { 508 const Slot2 = createSlot(`Primitive.$node}`); 509 const Node2 = React8.forwardRef((props, forwardedRef) => { 510 const { asChild, ...primitiveProps } = props; 511 const Comp = asChild ? Slot2 : node; 512 if (typeof window !== "undefined") { 513 window[Symbol.for("radix-ui")] = true; 514 } 515 return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Comp, { ...primitiveProps, ref: forwardedRef }); 516 }); 517 Node2.displayName = `Primitive.$node}`; 518 return { ...primitive, [node]: Node2 }; 519 }, {}); 520 function dispatchDiscreteCustomEvent(target, event) { 521 if (target) ReactDOM.flushSync(() => target.dispatchEvent(event)); 522 } 523 524 // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs 525 var React9 = __toESM(require_react(), 1); 526 function useCallbackRef(callback) { 527 const callbackRef = React9.useRef(callback); 528 React9.useEffect(() => { 529 callbackRef.current = callback; 530 }); 531 return React9.useMemo(() => (...args) => callbackRef.current?.(...args), []); 532 } 533 534 // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs 535 var React10 = __toESM(require_react(), 1); 536 function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) { 537 const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp); 538 React10.useEffect(() => { 539 const handleKeyDown = (event) => { 540 if (event.key === "Escape") { 541 onEscapeKeyDown(event); 542 } 543 }; 544 ownerDocument.addEventListener("keydown", handleKeyDown, { capture: true }); 545 return () => ownerDocument.removeEventListener("keydown", handleKeyDown, { capture: true }); 546 }, [onEscapeKeyDown, ownerDocument]); 547 } 548 549 // node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs 550 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); 551 var DISMISSABLE_LAYER_NAME = "DismissableLayer"; 552 var CONTEXT_UPDATE = "dismissableLayer.update"; 553 var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside"; 554 var FOCUS_OUTSIDE = "dismissableLayer.focusOutside"; 555 var originalBodyPointerEvents; 556 var DismissableLayerContext = React11.createContext({ 557 layers: /* @__PURE__ */ new Set(), 558 layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(), 559 branches: /* @__PURE__ */ new Set() 560 }); 561 var DismissableLayer = React11.forwardRef( 562 (props, forwardedRef) => { 563 const { 564 disableOutsidePointerEvents = false, 565 onEscapeKeyDown, 566 onPointerDownOutside, 567 onFocusOutside, 568 onInteractOutside, 569 onDismiss, 570 ...layerProps 571 } = props; 572 const context = React11.useContext(DismissableLayerContext); 573 const [node, setNode] = React11.useState(null); 574 const ownerDocument = node?.ownerDocument ?? globalThis?.document; 575 const [, force] = React11.useState({}); 576 const composedRefs = useComposedRefs2(forwardedRef, (node2) => setNode(node2)); 577 const layers = Array.from(context.layers); 578 const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); 579 const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); 580 const index = node ? layers.indexOf(node) : -1; 581 const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0; 582 const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex; 583 const pointerDownOutside = usePointerDownOutside((event) => { 584 const target = event.target; 585 const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target)); 586 if (!isPointerEventsEnabled || isPointerDownOnBranch) return; 587 onPointerDownOutside?.(event); 588 onInteractOutside?.(event); 589 if (!event.defaultPrevented) onDismiss?.(); 590 }, ownerDocument); 591 const focusOutside = useFocusOutside((event) => { 592 const target = event.target; 593 const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target)); 594 if (isFocusInBranch) return; 595 onFocusOutside?.(event); 596 onInteractOutside?.(event); 597 if (!event.defaultPrevented) onDismiss?.(); 598 }, ownerDocument); 599 useEscapeKeydown((event) => { 600 const isHighestLayer = index === context.layers.size - 1; 601 if (!isHighestLayer) return; 602 onEscapeKeyDown?.(event); 603 if (!event.defaultPrevented && onDismiss) { 604 event.preventDefault(); 605 onDismiss(); 606 } 607 }, ownerDocument); 608 React11.useEffect(() => { 609 if (!node) return; 610 if (disableOutsidePointerEvents) { 611 if (context.layersWithOutsidePointerEventsDisabled.size === 0) { 612 originalBodyPointerEvents = ownerDocument.body.style.pointerEvents; 613 ownerDocument.body.style.pointerEvents = "none"; 614 } 615 context.layersWithOutsidePointerEventsDisabled.add(node); 616 } 617 context.layers.add(node); 618 dispatchUpdate(); 619 return () => { 620 if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) { 621 ownerDocument.body.style.pointerEvents = originalBodyPointerEvents; 622 } 623 }; 624 }, [node, ownerDocument, disableOutsidePointerEvents, context]); 625 React11.useEffect(() => { 626 return () => { 627 if (!node) return; 628 context.layers.delete(node); 629 context.layersWithOutsidePointerEventsDisabled.delete(node); 630 dispatchUpdate(); 631 }; 632 }, [node, context]); 633 React11.useEffect(() => { 634 const handleUpdate = () => force({}); 635 document.addEventListener(CONTEXT_UPDATE, handleUpdate); 636 return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate); 637 }, []); 638 return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)( 639 Primitive.div, 640 { 641 ...layerProps, 642 ref: composedRefs, 643 style: { 644 pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0, 645 ...props.style 646 }, 647 onFocusCapture: composeEventHandlers2(props.onFocusCapture, focusOutside.onFocusCapture), 648 onBlurCapture: composeEventHandlers2(props.onBlurCapture, focusOutside.onBlurCapture), 649 onPointerDownCapture: composeEventHandlers2( 650 props.onPointerDownCapture, 651 pointerDownOutside.onPointerDownCapture 652 ) 653 } 654 ); 655 } 656 ); 657 DismissableLayer.displayName = DISMISSABLE_LAYER_NAME; 658 var BRANCH_NAME = "DismissableLayerBranch"; 659 var DismissableLayerBranch = React11.forwardRef((props, forwardedRef) => { 660 const context = React11.useContext(DismissableLayerContext); 661 const ref = React11.useRef(null); 662 const composedRefs = useComposedRefs2(forwardedRef, ref); 663 React11.useEffect(() => { 664 const node = ref.current; 665 if (node) { 666 context.branches.add(node); 667 return () => { 668 context.branches.delete(node); 669 }; 670 } 671 }, [context.branches]); 672 return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Primitive.div, { ...props, ref: composedRefs }); 673 }); 674 DismissableLayerBranch.displayName = BRANCH_NAME; 675 function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) { 676 const handlePointerDownOutside = useCallbackRef(onPointerDownOutside); 677 const isPointerInsideReactTreeRef = React11.useRef(false); 678 const handleClickRef = React11.useRef(() => { 679 }); 680 React11.useEffect(() => { 681 const handlePointerDown = (event) => { 682 if (event.target && !isPointerInsideReactTreeRef.current) { 683 let handleAndDispatchPointerDownOutsideEvent2 = function() { 684 handleAndDispatchCustomEvent( 685 POINTER_DOWN_OUTSIDE, 686 handlePointerDownOutside, 687 eventDetail, 688 { discrete: true } 689 ); 690 }; 691 var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2; 692 const eventDetail = { originalEvent: event }; 693 if (event.pointerType === "touch") { 694 ownerDocument.removeEventListener("click", handleClickRef.current); 695 handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2; 696 ownerDocument.addEventListener("click", handleClickRef.current, { once: true }); 697 } else { 698 handleAndDispatchPointerDownOutsideEvent2(); 699 } 700 } else { 701 ownerDocument.removeEventListener("click", handleClickRef.current); 702 } 703 isPointerInsideReactTreeRef.current = false; 704 }; 705 const timerId = window.setTimeout(() => { 706 ownerDocument.addEventListener("pointerdown", handlePointerDown); 707 }, 0); 708 return () => { 709 window.clearTimeout(timerId); 710 ownerDocument.removeEventListener("pointerdown", handlePointerDown); 711 ownerDocument.removeEventListener("click", handleClickRef.current); 712 }; 713 }, [ownerDocument, handlePointerDownOutside]); 714 return { 715 // ensures we check React component tree (not just DOM tree) 716 onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true 717 }; 718 } 719 function useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) { 720 const handleFocusOutside = useCallbackRef(onFocusOutside); 721 const isFocusInsideReactTreeRef = React11.useRef(false); 722 React11.useEffect(() => { 723 const handleFocus = (event) => { 724 if (event.target && !isFocusInsideReactTreeRef.current) { 725 const eventDetail = { originalEvent: event }; 726 handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, { 727 discrete: false 728 }); 729 } 730 }; 731 ownerDocument.addEventListener("focusin", handleFocus); 732 return () => ownerDocument.removeEventListener("focusin", handleFocus); 733 }, [ownerDocument, handleFocusOutside]); 734 return { 735 onFocusCapture: () => isFocusInsideReactTreeRef.current = true, 736 onBlurCapture: () => isFocusInsideReactTreeRef.current = false 737 }; 738 } 739 function dispatchUpdate() { 740 const event = new CustomEvent(CONTEXT_UPDATE); 741 document.dispatchEvent(event); 742 } 743 function handleAndDispatchCustomEvent(name, handler, detail, { discrete }) { 744 const target = detail.originalEvent.target; 745 const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail }); 746 if (handler) target.addEventListener(name, handler, { once: true }); 747 if (discrete) { 748 dispatchDiscreteCustomEvent(target, event); 749 } else { 750 target.dispatchEvent(event); 751 } 752 } 753 754 // node_modules/@radix-ui/react-focus-scope/dist/index.mjs 755 var React16 = __toESM(require_react(), 1); 756 757 // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-compose-refs/dist/index.mjs 758 var React12 = __toESM(require_react(), 1); 759 function setRef3(ref, value) { 760 if (typeof ref === "function") { 761 return ref(value); 762 } else if (ref !== null && ref !== void 0) { 763 ref.current = value; 764 } 765 } 766 function composeRefs3(...refs) { 767 return (node) => { 768 let hasCleanup = false; 769 const cleanups = refs.map((ref) => { 770 const cleanup = setRef3(ref, node); 771 if (!hasCleanup && typeof cleanup == "function") { 772 hasCleanup = true; 773 } 774 return cleanup; 775 }); 776 if (hasCleanup) { 777 return () => { 778 for (let i = 0; i < cleanups.length; i++) { 779 const cleanup = cleanups[i]; 780 if (typeof cleanup == "function") { 781 cleanup(); 782 } else { 783 setRef3(refs[i], null); 784 } 785 } 786 }; 787 } 788 }; 789 } 790 function useComposedRefs3(...refs) { 791 return React12.useCallback(composeRefs3(...refs), refs); 792 } 793 794 // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive/dist/index.mjs 795 var React14 = __toESM(require_react(), 1); 796 var ReactDOM2 = __toESM(require_react_dom(), 1); 797 798 // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-slot/dist/index.mjs 799 var React13 = __toESM(require_react(), 1); 800 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); 801 // @__NO_SIDE_EFFECTS__ 802 function createSlot2(ownerName) { 803 const SlotClone = /* @__PURE__ */ createSlotClone2(ownerName); 804 const Slot2 = React13.forwardRef((props, forwardedRef) => { 805 const { children, ...slotProps } = props; 806 const childrenArray = React13.Children.toArray(children); 807 const slottable = childrenArray.find(isSlottable2); 808 if (slottable) { 809 const newElement = slottable.props.children; 810 const newChildren = childrenArray.map((child) => { 811 if (child === slottable) { 812 if (React13.Children.count(newElement) > 1) return React13.Children.only(null); 813 return React13.isValidElement(newElement) ? newElement.props.children : null; 814 } else { 815 return child; 816 } 817 }); 818 return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React13.isValidElement(newElement) ? React13.cloneElement(newElement, void 0, newChildren) : null }); 819 } 820 return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children }); 821 }); 822 Slot2.displayName = `$ownerName}.Slot`; 823 return Slot2; 824 } 825 // @__NO_SIDE_EFFECTS__ 826 function createSlotClone2(ownerName) { 827 const SlotClone = React13.forwardRef((props, forwardedRef) => { 828 const { children, ...slotProps } = props; 829 if (React13.isValidElement(children)) { 830 const childrenRef = getElementRef2(children); 831 const props2 = mergeProps2(slotProps, children.props); 832 if (children.type !== React13.Fragment) { 833 props2.ref = forwardedRef ? composeRefs3(forwardedRef, childrenRef) : childrenRef; 834 } 835 return React13.cloneElement(children, props2); 836 } 837 return React13.Children.count(children) > 1 ? React13.Children.only(null) : null; 838 }); 839 SlotClone.displayName = `$ownerName}.SlotClone`; 840 return SlotClone; 841 } 842 var SLOTTABLE_IDENTIFIER2 = Symbol("radix.slottable"); 843 function isSlottable2(child) { 844 return React13.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER2; 845 } 846 function mergeProps2(slotProps, childProps) { 847 const overrideProps = { ...childProps }; 848 for (const propName in childProps) { 849 const slotPropValue = slotProps[propName]; 850 const childPropValue = childProps[propName]; 851 const isHandler = /^on[A-Z]/.test(propName); 852 if (isHandler) { 853 if (slotPropValue && childPropValue) { 854 overrideProps[propName] = (...args) => { 855 const result = childPropValue(...args); 856 slotPropValue(...args); 857 return result; 858 }; 859 } else if (slotPropValue) { 860 overrideProps[propName] = slotPropValue; 861 } 862 } else if (propName === "style") { 863 overrideProps[propName] = { ...slotPropValue, ...childPropValue }; 864 } else if (propName === "className") { 865 overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" "); 866 } 867 } 868 return { ...slotProps, ...overrideProps }; 869 } 870 function getElementRef2(element) { 871 let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get; 872 let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 873 if (mayWarn) { 874 return element.ref; 875 } 876 getter = Object.getOwnPropertyDescriptor(element, "ref")?.get; 877 mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 878 if (mayWarn) { 879 return element.props.ref; 880 } 881 return element.props.ref || element.ref; 882 } 883 884 // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive/dist/index.mjs 885 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); 886 var NODES2 = [ 887 "a", 888 "button", 889 "div", 890 "form", 891 "h2", 892 "h3", 893 "img", 894 "input", 895 "label", 896 "li", 897 "nav", 898 "ol", 899 "p", 900 "select", 901 "span", 902 "svg", 903 "ul" 904 ]; 905 var Primitive2 = NODES2.reduce((primitive, node) => { 906 const Slot2 = createSlot2(`Primitive.$node}`); 907 const Node2 = React14.forwardRef((props, forwardedRef) => { 908 const { asChild, ...primitiveProps } = props; 909 const Comp = asChild ? Slot2 : node; 910 if (typeof window !== "undefined") { 911 window[Symbol.for("radix-ui")] = true; 912 } 913 return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Comp, { ...primitiveProps, ref: forwardedRef }); 914 }); 915 Node2.displayName = `Primitive.$node}`; 916 return { ...primitive, [node]: Node2 }; 917 }, {}); 918 919 // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs 920 var React15 = __toESM(require_react(), 1); 921 function useCallbackRef2(callback) { 922 const callbackRef = React15.useRef(callback); 923 React15.useEffect(() => { 924 callbackRef.current = callback; 925 }); 926 return React15.useMemo(() => (...args) => callbackRef.current?.(...args), []); 927 } 928 929 // node_modules/@radix-ui/react-focus-scope/dist/index.mjs 930 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); 931 var AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount"; 932 var AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount"; 933 var EVENT_OPTIONS = { bubbles: false, cancelable: true }; 934 var FOCUS_SCOPE_NAME = "FocusScope"; 935 var FocusScope = React16.forwardRef((props, forwardedRef) => { 936 const { 937 loop = false, 938 trapped = false, 939 onMountAutoFocus: onMountAutoFocusProp, 940 onUnmountAutoFocus: onUnmountAutoFocusProp, 941 ...scopeProps 942 } = props; 943 const [container, setContainer] = React16.useState(null); 944 const onMountAutoFocus = useCallbackRef2(onMountAutoFocusProp); 945 const onUnmountAutoFocus = useCallbackRef2(onUnmountAutoFocusProp); 946 const lastFocusedElementRef = React16.useRef(null); 947 const composedRefs = useComposedRefs3(forwardedRef, (node) => setContainer(node)); 948 const focusScope = React16.useRef({ 949 paused: false, 950 pause() { 951 this.paused = true; 952 }, 953 resume() { 954 this.paused = false; 955 } 956 }).current; 957 React16.useEffect(() => { 958 if (trapped) { 959 let handleFocusIn2 = function(event) { 960 if (focusScope.paused || !container) return; 961 const target = event.target; 962 if (container.contains(target)) { 963 lastFocusedElementRef.current = target; 964 } else { 965 focus(lastFocusedElementRef.current, { select: true }); 966 } 967 }, handleFocusOut2 = function(event) { 968 if (focusScope.paused || !container) return; 969 const relatedTarget = event.relatedTarget; 970 if (relatedTarget === null) return; 971 if (!container.contains(relatedTarget)) { 972 focus(lastFocusedElementRef.current, { select: true }); 973 } 974 }, handleMutations2 = function(mutations) { 975 const focusedElement = document.activeElement; 976 if (focusedElement !== document.body) return; 977 for (const mutation of mutations) { 978 if (mutation.removedNodes.length > 0) focus(container); 979 } 980 }; 981 var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2; 982 document.addEventListener("focusin", handleFocusIn2); 983 document.addEventListener("focusout", handleFocusOut2); 984 const mutationObserver = new MutationObserver(handleMutations2); 985 if (container) mutationObserver.observe(container, { childList: true, subtree: true }); 986 return () => { 987 document.removeEventListener("focusin", handleFocusIn2); 988 document.removeEventListener("focusout", handleFocusOut2); 989 mutationObserver.disconnect(); 990 }; 991 } 992 }, [trapped, container, focusScope.paused]); 993 React16.useEffect(() => { 994 if (container) { 995 focusScopesStack.add(focusScope); 996 const previouslyFocusedElement = document.activeElement; 997 const hasFocusedCandidate = container.contains(previouslyFocusedElement); 998 if (!hasFocusedCandidate) { 999 const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS); 1000 container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus); 1001 container.dispatchEvent(mountEvent); 1002 if (!mountEvent.defaultPrevented) { 1003 focusFirst(removeLinks(getTabbableCandidates(container)), { select: true }); 1004 if (document.activeElement === previouslyFocusedElement) { 1005 focus(container); 1006 } 1007 } 1008 } 1009 return () => { 1010 container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus); 1011 setTimeout(() => { 1012 const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS); 1013 container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus); 1014 container.dispatchEvent(unmountEvent); 1015 if (!unmountEvent.defaultPrevented) { 1016 focus(previouslyFocusedElement ?? document.body, { select: true }); 1017 } 1018 container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus); 1019 focusScopesStack.remove(focusScope); 1020 }, 0); 1021 }; 1022 } 1023 }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]); 1024 const handleKeyDown = React16.useCallback( 1025 (event) => { 1026 if (!loop && !trapped) return; 1027 if (focusScope.paused) return; 1028 const isTabKey = event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey; 1029 const focusedElement = document.activeElement; 1030 if (isTabKey && focusedElement) { 1031 const container2 = event.currentTarget; 1032 const [first, last] = getTabbableEdges(container2); 1033 const hasTabbableElementsInside = first && last; 1034 if (!hasTabbableElementsInside) { 1035 if (focusedElement === container2) event.preventDefault(); 1036 } else { 1037 if (!event.shiftKey && focusedElement === last) { 1038 event.preventDefault(); 1039 if (loop) focus(first, { select: true }); 1040 } else if (event.shiftKey && focusedElement === first) { 1041 event.preventDefault(); 1042 if (loop) focus(last, { select: true }); 1043 } 1044 } 1045 } 1046 }, 1047 [loop, trapped, focusScope.paused] 1048 ); 1049 return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Primitive2.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown }); 1050 }); 1051 FocusScope.displayName = FOCUS_SCOPE_NAME; 1052 function focusFirst(candidates, { select = false } = {}) { 1053 const previouslyFocusedElement = document.activeElement; 1054 for (const candidate of candidates) { 1055 focus(candidate, { select }); 1056 if (document.activeElement !== previouslyFocusedElement) return; 1057 } 1058 } 1059 function getTabbableEdges(container) { 1060 const candidates = getTabbableCandidates(container); 1061 const first = findVisible(candidates, container); 1062 const last = findVisible(candidates.reverse(), container); 1063 return [first, last]; 1064 } 1065 function getTabbableCandidates(container) { 1066 const nodes = []; 1067 const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, { 1068 acceptNode: (node) => { 1069 const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden"; 1070 if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP; 1071 return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; 1072 } 1073 }); 1074 while (walker.nextNode()) nodes.push(walker.currentNode); 1075 return nodes; 1076 } 1077 function findVisible(elements, container) { 1078 for (const element of elements) { 1079 if (!isHidden(element, { upTo: container })) return element; 1080 } 1081 } 1082 function isHidden(node, { upTo }) { 1083 if (getComputedStyle(node).visibility === "hidden") return true; 1084 while (node) { 1085 if (upTo !== void 0 && node === upTo) return false; 1086 if (getComputedStyle(node).display === "none") return true; 1087 node = node.parentElement; 1088 } 1089 return false; 1090 } 1091 function isSelectableInput(element) { 1092 return element instanceof HTMLInputElement && "select" in element; 1093 } 1094 function focus(element, { select = false } = {}) { 1095 if (element && element.focus) { 1096 const previouslyFocusedElement = document.activeElement; 1097 element.focus({ preventScroll: true }); 1098 if (element !== previouslyFocusedElement && isSelectableInput(element) && select) 1099 element.select(); 1100 } 1101 } 1102 var focusScopesStack = createFocusScopesStack(); 1103 function createFocusScopesStack() { 1104 let stack = []; 1105 return { 1106 add(focusScope) { 1107 const activeFocusScope = stack[0]; 1108 if (focusScope !== activeFocusScope) { 1109 activeFocusScope?.pause(); 1110 } 1111 stack = arrayRemove(stack, focusScope); 1112 stack.unshift(focusScope); 1113 }, 1114 remove(focusScope) { 1115 stack = arrayRemove(stack, focusScope); 1116 stack[0]?.resume(); 1117 } 1118 }; 1119 } 1120 function arrayRemove(array, item) { 1121 const updatedArray = [...array]; 1122 const index = updatedArray.indexOf(item); 1123 if (index !== -1) { 1124 updatedArray.splice(index, 1); 1125 } 1126 return updatedArray; 1127 } 1128 function removeLinks(items) { 1129 return items.filter((item) => item.tagName !== "A"); 1130 } 1131 1132 // node_modules/@radix-ui/react-portal/dist/index.mjs 1133 var React21 = __toESM(require_react(), 1); 1134 var import_react_dom = __toESM(require_react_dom(), 1); 1135 1136 // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive/dist/index.mjs 1137 var React19 = __toESM(require_react(), 1); 1138 var ReactDOM3 = __toESM(require_react_dom(), 1); 1139 1140 // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot/dist/index.mjs 1141 var React18 = __toESM(require_react(), 1); 1142 1143 // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-compose-refs/dist/index.mjs 1144 var React17 = __toESM(require_react(), 1); 1145 function setRef4(ref, value) { 1146 if (typeof ref === "function") { 1147 return ref(value); 1148 } else if (ref !== null && ref !== void 0) { 1149 ref.current = value; 1150 } 1151 } 1152 function composeRefs4(...refs) { 1153 return (node) => { 1154 let hasCleanup = false; 1155 const cleanups = refs.map((ref) => { 1156 const cleanup = setRef4(ref, node); 1157 if (!hasCleanup && typeof cleanup == "function") { 1158 hasCleanup = true; 1159 } 1160 return cleanup; 1161 }); 1162 if (hasCleanup) { 1163 return () => { 1164 for (let i = 0; i < cleanups.length; i++) { 1165 const cleanup = cleanups[i]; 1166 if (typeof cleanup == "function") { 1167 cleanup(); 1168 } else { 1169 setRef4(refs[i], null); 1170 } 1171 } 1172 }; 1173 } 1174 }; 1175 } 1176 1177 // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot/dist/index.mjs 1178 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); 1179 // @__NO_SIDE_EFFECTS__ 1180 function createSlot3(ownerName) { 1181 const SlotClone = /* @__PURE__ */ createSlotClone3(ownerName); 1182 const Slot2 = React18.forwardRef((props, forwardedRef) => { 1183 const { children, ...slotProps } = props; 1184 const childrenArray = React18.Children.toArray(children); 1185 const slottable = childrenArray.find(isSlottable3); 1186 if (slottable) { 1187 const newElement = slottable.props.children; 1188 const newChildren = childrenArray.map((child) => { 1189 if (child === slottable) { 1190 if (React18.Children.count(newElement) > 1) return React18.Children.only(null); 1191 return React18.isValidElement(newElement) ? newElement.props.children : null; 1192 } else { 1193 return child; 1194 } 1195 }); 1196 return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React18.isValidElement(newElement) ? React18.cloneElement(newElement, void 0, newChildren) : null }); 1197 } 1198 return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children }); 1199 }); 1200 Slot2.displayName = `$ownerName}.Slot`; 1201 return Slot2; 1202 } 1203 // @__NO_SIDE_EFFECTS__ 1204 function createSlotClone3(ownerName) { 1205 const SlotClone = React18.forwardRef((props, forwardedRef) => { 1206 const { children, ...slotProps } = props; 1207 if (React18.isValidElement(children)) { 1208 const childrenRef = getElementRef3(children); 1209 const props2 = mergeProps3(slotProps, children.props); 1210 if (children.type !== React18.Fragment) { 1211 props2.ref = forwardedRef ? composeRefs4(forwardedRef, childrenRef) : childrenRef; 1212 } 1213 return React18.cloneElement(children, props2); 1214 } 1215 return React18.Children.count(children) > 1 ? React18.Children.only(null) : null; 1216 }); 1217 SlotClone.displayName = `$ownerName}.SlotClone`; 1218 return SlotClone; 1219 } 1220 var SLOTTABLE_IDENTIFIER3 = Symbol("radix.slottable"); 1221 function isSlottable3(child) { 1222 return React18.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER3; 1223 } 1224 function mergeProps3(slotProps, childProps) { 1225 const overrideProps = { ...childProps }; 1226 for (const propName in childProps) { 1227 const slotPropValue = slotProps[propName]; 1228 const childPropValue = childProps[propName]; 1229 const isHandler = /^on[A-Z]/.test(propName); 1230 if (isHandler) { 1231 if (slotPropValue && childPropValue) { 1232 overrideProps[propName] = (...args) => { 1233 const result = childPropValue(...args); 1234 slotPropValue(...args); 1235 return result; 1236 }; 1237 } else if (slotPropValue) { 1238 overrideProps[propName] = slotPropValue; 1239 } 1240 } else if (propName === "style") { 1241 overrideProps[propName] = { ...slotPropValue, ...childPropValue }; 1242 } else if (propName === "className") { 1243 overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" "); 1244 } 1245 } 1246 return { ...slotProps, ...overrideProps }; 1247 } 1248 function getElementRef3(element) { 1249 let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get; 1250 let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 1251 if (mayWarn) { 1252 return element.ref; 1253 } 1254 getter = Object.getOwnPropertyDescriptor(element, "ref")?.get; 1255 mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 1256 if (mayWarn) { 1257 return element.props.ref; 1258 } 1259 return element.props.ref || element.ref; 1260 } 1261 1262 // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive/dist/index.mjs 1263 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); 1264 var NODES3 = [ 1265 "a", 1266 "button", 1267 "div", 1268 "form", 1269 "h2", 1270 "h3", 1271 "img", 1272 "input", 1273 "label", 1274 "li", 1275 "nav", 1276 "ol", 1277 "p", 1278 "select", 1279 "span", 1280 "svg", 1281 "ul" 1282 ]; 1283 var Primitive3 = NODES3.reduce((primitive, node) => { 1284 const Slot2 = createSlot3(`Primitive.$node}`); 1285 const Node2 = React19.forwardRef((props, forwardedRef) => { 1286 const { asChild, ...primitiveProps } = props; 1287 const Comp = asChild ? Slot2 : node; 1288 if (typeof window !== "undefined") { 1289 window[Symbol.for("radix-ui")] = true; 1290 } 1291 return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Comp, { ...primitiveProps, ref: forwardedRef }); 1292 }); 1293 Node2.displayName = `Primitive.$node}`; 1294 return { ...primitive, [node]: Node2 }; 1295 }, {}); 1296 1297 // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs 1298 var React20 = __toESM(require_react(), 1); 1299 var useLayoutEffect22 = globalThis?.document ? React20.useLayoutEffect : () => { 1300 }; 1301 1302 // node_modules/@radix-ui/react-portal/dist/index.mjs 1303 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); 1304 var PORTAL_NAME = "Portal"; 1305 var Portal = React21.forwardRef((props, forwardedRef) => { 1306 const { container: containerProp, ...portalProps } = props; 1307 const [mounted, setMounted] = React21.useState(false); 1308 useLayoutEffect22(() => setMounted(true), []); 1309 const container = containerProp || mounted && globalThis?.document?.body; 1310 return container ? import_react_dom.default.createPortal(/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Primitive3.div, { ...portalProps, ref: forwardedRef }), container) : null; 1311 }); 1312 Portal.displayName = PORTAL_NAME; 1313 1314 // node_modules/@radix-ui/react-presence/dist/index.mjs 1315 var React25 = __toESM(require_react(), 1); 1316 1317 // node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-compose-refs/dist/index.mjs 1318 var React23 = __toESM(require_react(), 1); 1319 function setRef5(ref, value) { 1320 if (typeof ref === "function") { 1321 return ref(value); 1322 } else if (ref !== null && ref !== void 0) { 1323 ref.current = value; 1324 } 1325 } 1326 function composeRefs5(...refs) { 1327 return (node) => { 1328 let hasCleanup = false; 1329 const cleanups = refs.map((ref) => { 1330 const cleanup = setRef5(ref, node); 1331 if (!hasCleanup && typeof cleanup == "function") { 1332 hasCleanup = true; 1333 } 1334 return cleanup; 1335 }); 1336 if (hasCleanup) { 1337 return () => { 1338 for (let i = 0; i < cleanups.length; i++) { 1339 const cleanup = cleanups[i]; 1340 if (typeof cleanup == "function") { 1341 cleanup(); 1342 } else { 1343 setRef5(refs[i], null); 1344 } 1345 } 1346 }; 1347 } 1348 }; 1349 } 1350 function useComposedRefs4(...refs) { 1351 return React23.useCallback(composeRefs5(...refs), refs); 1352 } 1353 1354 // node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs 1355 var React24 = __toESM(require_react(), 1); 1356 var useLayoutEffect23 = globalThis?.document ? React24.useLayoutEffect : () => { 1357 }; 1358 1359 // node_modules/@radix-ui/react-presence/dist/index.mjs 1360 var React26 = __toESM(require_react(), 1); 1361 function useStateMachine(initialState, machine) { 1362 return React26.useReducer((state, event) => { 1363 const nextState = machine[state][event]; 1364 return nextState ?? state; 1365 }, initialState); 1366 } 1367 var Presence = (props) => { 1368 const { present, children } = props; 1369 const presence = usePresence(present); 1370 const child = typeof children === "function" ? children({ present: presence.isPresent }) : React25.Children.only(children); 1371 const ref = useComposedRefs4(presence.ref, getElementRef4(child)); 1372 const forceMount = typeof children === "function"; 1373 return forceMount || presence.isPresent ? React25.cloneElement(child, { ref }) : null; 1374 }; 1375 Presence.displayName = "Presence"; 1376 function usePresence(present) { 1377 const [node, setNode] = React25.useState(); 1378 const stylesRef = React25.useRef(null); 1379 const prevPresentRef = React25.useRef(present); 1380 const prevAnimationNameRef = React25.useRef("none"); 1381 const initialState = present ? "mounted" : "unmounted"; 1382 const [state, send] = useStateMachine(initialState, { 1383 mounted: { 1384 UNMOUNT: "unmounted", 1385 ANIMATION_OUT: "unmountSuspended" 1386 }, 1387 unmountSuspended: { 1388 MOUNT: "mounted", 1389 ANIMATION_END: "unmounted" 1390 }, 1391 unmounted: { 1392 MOUNT: "mounted" 1393 } 1394 }); 1395 React25.useEffect(() => { 1396 const currentAnimationName = getAnimationName(stylesRef.current); 1397 prevAnimationNameRef.current = state === "mounted" ? currentAnimationName : "none"; 1398 }, [state]); 1399 useLayoutEffect23(() => { 1400 const styles = stylesRef.current; 1401 const wasPresent = prevPresentRef.current; 1402 const hasPresentChanged = wasPresent !== present; 1403 if (hasPresentChanged) { 1404 const prevAnimationName = prevAnimationNameRef.current; 1405 const currentAnimationName = getAnimationName(styles); 1406 if (present) { 1407 send("MOUNT"); 1408 } else if (currentAnimationName === "none" || styles?.display === "none") { 1409 send("UNMOUNT"); 1410 } else { 1411 const isAnimating = prevAnimationName !== currentAnimationName; 1412 if (wasPresent && isAnimating) { 1413 send("ANIMATION_OUT"); 1414 } else { 1415 send("UNMOUNT"); 1416 } 1417 } 1418 prevPresentRef.current = present; 1419 } 1420 }, [present, send]); 1421 useLayoutEffect23(() => { 1422 if (node) { 1423 let timeoutId; 1424 const ownerWindow = node.ownerDocument.defaultView ?? window; 1425 const handleAnimationEnd = (event) => { 1426 const currentAnimationName = getAnimationName(stylesRef.current); 1427 const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName)); 1428 if (event.target === node && isCurrentAnimation) { 1429 send("ANIMATION_END"); 1430 if (!prevPresentRef.current) { 1431 const currentFillMode = node.style.animationFillMode; 1432 node.style.animationFillMode = "forwards"; 1433 timeoutId = ownerWindow.setTimeout(() => { 1434 if (node.style.animationFillMode === "forwards") { 1435 node.style.animationFillMode = currentFillMode; 1436 } 1437 }); 1438 } 1439 } 1440 }; 1441 const handleAnimationStart = (event) => { 1442 if (event.target === node) { 1443 prevAnimationNameRef.current = getAnimationName(stylesRef.current); 1444 } 1445 }; 1446 node.addEventListener("animationstart", handleAnimationStart); 1447 node.addEventListener("animationcancel", handleAnimationEnd); 1448 node.addEventListener("animationend", handleAnimationEnd); 1449 return () => { 1450 ownerWindow.clearTimeout(timeoutId); 1451 node.removeEventListener("animationstart", handleAnimationStart); 1452 node.removeEventListener("animationcancel", handleAnimationEnd); 1453 node.removeEventListener("animationend", handleAnimationEnd); 1454 }; 1455 } else { 1456 send("ANIMATION_END"); 1457 } 1458 }, [node, send]); 1459 return { 1460 isPresent: ["mounted", "unmountSuspended"].includes(state), 1461 ref: React25.useCallback((node2) => { 1462 stylesRef.current = node2 ? getComputedStyle(node2) : null; 1463 setNode(node2); 1464 }, []) 1465 }; 1466 } 1467 function getAnimationName(styles) { 1468 return styles?.animationName || "none"; 1469 } 1470 function getElementRef4(element) { 1471 let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get; 1472 let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 1473 if (mayWarn) { 1474 return element.ref; 1475 } 1476 getter = Object.getOwnPropertyDescriptor(element, "ref")?.get; 1477 mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 1478 if (mayWarn) { 1479 return element.props.ref; 1480 } 1481 return element.props.ref || element.ref; 1482 } 1483 1484 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive/dist/index.mjs 1485 var React28 = __toESM(require_react(), 1); 1486 var ReactDOM5 = __toESM(require_react_dom(), 1); 1487 1488 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs 1489 var React27 = __toESM(require_react(), 1); 1490 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); 1491 // @__NO_SIDE_EFFECTS__ 1492 function createSlot4(ownerName) { 1493 const SlotClone = /* @__PURE__ */ createSlotClone4(ownerName); 1494 const Slot2 = React27.forwardRef((props, forwardedRef) => { 1495 const { children, ...slotProps } = props; 1496 const childrenArray = React27.Children.toArray(children); 1497 const slottable = childrenArray.find(isSlottable4); 1498 if (slottable) { 1499 const newElement = slottable.props.children; 1500 const newChildren = childrenArray.map((child) => { 1501 if (child === slottable) { 1502 if (React27.Children.count(newElement) > 1) return React27.Children.only(null); 1503 return React27.isValidElement(newElement) ? newElement.props.children : null; 1504 } else { 1505 return child; 1506 } 1507 }); 1508 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React27.isValidElement(newElement) ? React27.cloneElement(newElement, void 0, newChildren) : null }); 1509 } 1510 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children }); 1511 }); 1512 Slot2.displayName = `$ownerName}.Slot`; 1513 return Slot2; 1514 } 1515 // @__NO_SIDE_EFFECTS__ 1516 function createSlotClone4(ownerName) { 1517 const SlotClone = React27.forwardRef((props, forwardedRef) => { 1518 const { children, ...slotProps } = props; 1519 if (React27.isValidElement(children)) { 1520 const childrenRef = getElementRef5(children); 1521 const props2 = mergeProps4(slotProps, children.props); 1522 if (children.type !== React27.Fragment) { 1523 props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef; 1524 } 1525 return React27.cloneElement(children, props2); 1526 } 1527 return React27.Children.count(children) > 1 ? React27.Children.only(null) : null; 1528 }); 1529 SlotClone.displayName = `$ownerName}.SlotClone`; 1530 return SlotClone; 1531 } 1532 var SLOTTABLE_IDENTIFIER4 = Symbol("radix.slottable"); 1533 function isSlottable4(child) { 1534 return React27.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER4; 1535 } 1536 function mergeProps4(slotProps, childProps) { 1537 const overrideProps = { ...childProps }; 1538 for (const propName in childProps) { 1539 const slotPropValue = slotProps[propName]; 1540 const childPropValue = childProps[propName]; 1541 const isHandler = /^on[A-Z]/.test(propName); 1542 if (isHandler) { 1543 if (slotPropValue && childPropValue) { 1544 overrideProps[propName] = (...args) => { 1545 const result = childPropValue(...args); 1546 slotPropValue(...args); 1547 return result; 1548 }; 1549 } else if (slotPropValue) { 1550 overrideProps[propName] = slotPropValue; 1551 } 1552 } else if (propName === "style") { 1553 overrideProps[propName] = { ...slotPropValue, ...childPropValue }; 1554 } else if (propName === "className") { 1555 overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" "); 1556 } 1557 } 1558 return { ...slotProps, ...overrideProps }; 1559 } 1560 function getElementRef5(element) { 1561 let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get; 1562 let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 1563 if (mayWarn) { 1564 return element.ref; 1565 } 1566 getter = Object.getOwnPropertyDescriptor(element, "ref")?.get; 1567 mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 1568 if (mayWarn) { 1569 return element.props.ref; 1570 } 1571 return element.props.ref || element.ref; 1572 } 1573 1574 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive/dist/index.mjs 1575 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); 1576 var NODES4 = [ 1577 "a", 1578 "button", 1579 "div", 1580 "form", 1581 "h2", 1582 "h3", 1583 "img", 1584 "input", 1585 "label", 1586 "li", 1587 "nav", 1588 "ol", 1589 "p", 1590 "select", 1591 "span", 1592 "svg", 1593 "ul" 1594 ]; 1595 var Primitive4 = NODES4.reduce((primitive, node) => { 1596 const Slot2 = createSlot4(`Primitive.$node}`); 1597 const Node2 = React28.forwardRef((props, forwardedRef) => { 1598 const { asChild, ...primitiveProps } = props; 1599 const Comp = asChild ? Slot2 : node; 1600 if (typeof window !== "undefined") { 1601 window[Symbol.for("radix-ui")] = true; 1602 } 1603 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Comp, { ...primitiveProps, ref: forwardedRef }); 1604 }); 1605 Node2.displayName = `Primitive.$node}`; 1606 return { ...primitive, [node]: Node2 }; 1607 }, {}); 1608 1609 // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-focus-guards/dist/index.mjs 1610 var React29 = __toESM(require_react(), 1); 1611 var count2 = 0; 1612 function useFocusGuards() { 1613 React29.useEffect(() => { 1614 const edgeGuards = document.querySelectorAll("[data-radix-focus-guard]"); 1615 document.body.insertAdjacentElement("afterbegin", edgeGuards[0] ?? createFocusGuard()); 1616 document.body.insertAdjacentElement("beforeend", edgeGuards[1] ?? createFocusGuard()); 1617 count2++; 1618 return () => { 1619 if (count2 === 1) { 1620 document.querySelectorAll("[data-radix-focus-guard]").forEach((node) => node.remove()); 1621 } 1622 count2--; 1623 }; 1624 }, []); 1625 } 1626 function createFocusGuard() { 1627 const element = document.createElement("span"); 1628 element.setAttribute("data-radix-focus-guard", ""); 1629 element.tabIndex = 0; 1630 element.style.outline = "none"; 1631 element.style.opacity = "0"; 1632 element.style.position = "fixed"; 1633 element.style.pointerEvents = "none"; 1634 return element; 1635 } 1636 1637 // node_modules/tslib/tslib.es6.mjs 1638 var __assign = function() { 1639 __assign = Object.assign || function __assign2(t2) { 1640 for (var s, i = 1, n = arguments.length; i < n; i++) { 1641 s = arguments[i]; 1642 for (var p2 in s) if (Object.prototype.hasOwnProperty.call(s, p2)) t2[p2] = s[p2]; 1643 } 1644 return t2; 1645 }; 1646 return __assign.apply(this, arguments); 1647 }; 1648 function __rest(s, e) { 1649 var t2 = {}; 1650 for (var p2 in s) if (Object.prototype.hasOwnProperty.call(s, p2) && e.indexOf(p2) < 0) 1651 t2[p2] = s[p2]; 1652 if (s != null && typeof Object.getOwnPropertySymbols === "function") 1653 for (var i = 0, p2 = Object.getOwnPropertySymbols(s); i < p2.length; i++) { 1654 if (e.indexOf(p2[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p2[i])) 1655 t2[p2[i]] = s[p2[i]]; 1656 } 1657 return t2; 1658 } 1659 function __spreadArray(to, from, pack) { 1660 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 1661 if (ar || !(i in from)) { 1662 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 1663 ar[i] = from[i]; 1664 } 1665 } 1666 return to.concat(ar || Array.prototype.slice.call(from)); 1667 } 1668 1669 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/Combination.js 1670 var React36 = __toESM(require_react()); 1671 1672 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/UI.js 1673 var React32 = __toESM(require_react()); 1674 1675 // node_modules/react-remove-scroll-bar/dist/es2015/constants.js 1676 var zeroRightClassName = "right-scroll-bar-position"; 1677 var fullWidthClassName = "width-before-scroll-bar"; 1678 var noScrollbarsClassName = "with-scroll-bars-hidden"; 1679 var removedBarSizeVariable = "--removed-body-scroll-bar-size"; 1680 1681 // node_modules/use-callback-ref/dist/es2015/assignRef.js 1682 function assignRef(ref, value) { 1683 if (typeof ref === "function") { 1684 ref(value); 1685 } else if (ref) { 1686 ref.current = value; 1687 } 1688 return ref; 1689 } 1690 1691 // node_modules/use-callback-ref/dist/es2015/useRef.js 1692 var import_react = __toESM(require_react()); 1693 function useCallbackRef3(initialValue, callback) { 1694 var ref = (0, import_react.useState)(function() { 1695 return { 1696 // value 1697 value: initialValue, 1698 // last callback 1699 callback, 1700 // "memoized" public interface 1701 facade: { 1702 get current() { 1703 return ref.value; 1704 }, 1705 set current(value) { 1706 var last = ref.value; 1707 if (last !== value) { 1708 ref.value = value; 1709 ref.callback(value, last); 1710 } 1711 } 1712 } 1713 }; 1714 })[0]; 1715 ref.callback = callback; 1716 return ref.facade; 1717 } 1718 1719 // node_modules/use-callback-ref/dist/es2015/useMergeRef.js 1720 var React30 = __toESM(require_react()); 1721 var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React30.useLayoutEffect : React30.useEffect; 1722 var currentValues = /* @__PURE__ */ new WeakMap(); 1723 function useMergeRefs(refs, defaultValue) { 1724 var callbackRef = useCallbackRef3(defaultValue || null, function(newValue) { 1725 return refs.forEach(function(ref) { 1726 return assignRef(ref, newValue); 1727 }); 1728 }); 1729 useIsomorphicLayoutEffect(function() { 1730 var oldValue = currentValues.get(callbackRef); 1731 if (oldValue) { 1732 var prevRefs_1 = new Set(oldValue); 1733 var nextRefs_1 = new Set(refs); 1734 var current_1 = callbackRef.current; 1735 prevRefs_1.forEach(function(ref) { 1736 if (!nextRefs_1.has(ref)) { 1737 assignRef(ref, null); 1738 } 1739 }); 1740 nextRefs_1.forEach(function(ref) { 1741 if (!prevRefs_1.has(ref)) { 1742 assignRef(ref, current_1); 1743 } 1744 }); 1745 } 1746 currentValues.set(callbackRef, refs); 1747 }, [refs]); 1748 return callbackRef; 1749 } 1750 1751 // node_modules/use-sidecar/dist/es2015/medium.js 1752 function ItoI(a) { 1753 return a; 1754 } 1755 function innerCreateMedium(defaults, middleware) { 1756 if (middleware === void 0) { 1757 middleware = ItoI; 1758 } 1759 var buffer = []; 1760 var assigned = false; 1761 var medium = { 1762 read: function() { 1763 if (assigned) { 1764 throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`."); 1765 } 1766 if (buffer.length) { 1767 return buffer[buffer.length - 1]; 1768 } 1769 return defaults; 1770 }, 1771 useMedium: function(data) { 1772 var item = middleware(data, assigned); 1773 buffer.push(item); 1774 return function() { 1775 buffer = buffer.filter(function(x) { 1776 return x !== item; 1777 }); 1778 }; 1779 }, 1780 assignSyncMedium: function(cb) { 1781 assigned = true; 1782 while (buffer.length) { 1783 var cbs = buffer; 1784 buffer = []; 1785 cbs.forEach(cb); 1786 } 1787 buffer = { 1788 push: function(x) { 1789 return cb(x); 1790 }, 1791 filter: function() { 1792 return buffer; 1793 } 1794 }; 1795 }, 1796 assignMedium: function(cb) { 1797 assigned = true; 1798 var pendingQueue = []; 1799 if (buffer.length) { 1800 var cbs = buffer; 1801 buffer = []; 1802 cbs.forEach(cb); 1803 pendingQueue = buffer; 1804 } 1805 var executeQueue = function() { 1806 var cbs2 = pendingQueue; 1807 pendingQueue = []; 1808 cbs2.forEach(cb); 1809 }; 1810 var cycle = function() { 1811 return Promise.resolve().then(executeQueue); 1812 }; 1813 cycle(); 1814 buffer = { 1815 push: function(x) { 1816 pendingQueue.push(x); 1817 cycle(); 1818 }, 1819 filter: function(filter) { 1820 pendingQueue = pendingQueue.filter(filter); 1821 return buffer; 1822 } 1823 }; 1824 } 1825 }; 1826 return medium; 1827 } 1828 function createSidecarMedium(options) { 1829 if (options === void 0) { 1830 options = {}; 1831 } 1832 var medium = innerCreateMedium(null); 1833 medium.options = __assign({ async: true, ssr: false }, options); 1834 return medium; 1835 } 1836 1837 // node_modules/use-sidecar/dist/es2015/exports.js 1838 var React31 = __toESM(require_react()); 1839 var SideCar = function(_a) { 1840 var sideCar = _a.sideCar, rest = __rest(_a, ["sideCar"]); 1841 if (!sideCar) { 1842 throw new Error("Sidecar: please provide `sideCar` property to import the right car"); 1843 } 1844 var Target = sideCar.read(); 1845 if (!Target) { 1846 throw new Error("Sidecar medium not found"); 1847 } 1848 return React31.createElement(Target, __assign({}, rest)); 1849 }; 1850 SideCar.isSideCarExport = true; 1851 function exportSidecar(medium, exported) { 1852 medium.useMedium(exported); 1853 return SideCar; 1854 } 1855 1856 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/medium.js 1857 var effectCar = createSidecarMedium(); 1858 1859 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/UI.js 1860 var nothing = function() { 1861 return; 1862 }; 1863 var RemoveScroll = React32.forwardRef(function(props, parentRef) { 1864 var ref = React32.useRef(null); 1865 var _a = React32.useState({ 1866 onScrollCapture: nothing, 1867 onWheelCapture: nothing, 1868 onTouchMoveCapture: nothing 1869 }), callbacks = _a[0], setCallbacks = _a[1]; 1870 var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? "div" : _b, gapMode = props.gapMode, rest = __rest(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noRelative", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]); 1871 var SideCar2 = sideCar; 1872 var containerRef = useMergeRefs([ref, parentRef]); 1873 var containerProps = __assign(__assign({}, rest), callbacks); 1874 return React32.createElement( 1875 React32.Fragment, 1876 null, 1877 enabled && React32.createElement(SideCar2, { sideCar: effectCar, removeScrollBar, shards, noRelative, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode }), 1878 forwardProps ? React32.cloneElement(React32.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef })) : React32.createElement(Container, __assign({}, containerProps, { className, ref: containerRef }), children) 1879 ); 1880 }); 1881 RemoveScroll.defaultProps = { 1882 enabled: true, 1883 removeScrollBar: true, 1884 inert: false 1885 }; 1886 RemoveScroll.classNames = { 1887 fullWidth: fullWidthClassName, 1888 zeroRight: zeroRightClassName 1889 }; 1890 1891 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/SideEffect.js 1892 var React35 = __toESM(require_react()); 1893 1894 // node_modules/react-remove-scroll-bar/dist/es2015/component.js 1895 var React34 = __toESM(require_react()); 1896 1897 // node_modules/react-style-singleton/dist/es2015/hook.js 1898 var React33 = __toESM(require_react()); 1899 1900 // node_modules/get-nonce/dist/es2015/index.js 1901 var currentNonce; 1902 var getNonce = function() { 1903 if (currentNonce) { 1904 return currentNonce; 1905 } 1906 if (typeof __webpack_nonce__ !== "undefined") { 1907 return __webpack_nonce__; 1908 } 1909 return void 0; 1910 }; 1911 1912 // node_modules/react-style-singleton/dist/es2015/singleton.js 1913 function makeStyleTag() { 1914 if (!document) 1915 return null; 1916 var tag = document.createElement("style"); 1917 tag.type = "text/css"; 1918 var nonce = getNonce(); 1919 if (nonce) { 1920 tag.setAttribute("nonce", nonce); 1921 } 1922 return tag; 1923 } 1924 function injectStyles(tag, css2) { 1925 if (tag.styleSheet) { 1926 tag.styleSheet.cssText = css2; 1927 } else { 1928 tag.appendChild(document.createTextNode(css2)); 1929 } 1930 } 1931 function insertStyleTag(tag) { 1932 var head = document.head || document.getElementsByTagName("head")[0]; 1933 head.appendChild(tag); 1934 } 1935 var stylesheetSingleton = function() { 1936 var counter = 0; 1937 var stylesheet = null; 1938 return { 1939 add: function(style) { 1940 if (counter == 0) { 1941 if (stylesheet = makeStyleTag()) { 1942 injectStyles(stylesheet, style); 1943 insertStyleTag(stylesheet); 1944 } 1945 } 1946 counter++; 1947 }, 1948 remove: function() { 1949 counter--; 1950 if (!counter && stylesheet) { 1951 stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet); 1952 stylesheet = null; 1953 } 1954 } 1955 }; 1956 }; 1957 1958 // node_modules/react-style-singleton/dist/es2015/hook.js 1959 var styleHookSingleton = function() { 1960 var sheet = stylesheetSingleton(); 1961 return function(styles, isDynamic) { 1962 React33.useEffect(function() { 1963 sheet.add(styles); 1964 return function() { 1965 sheet.remove(); 1966 }; 1967 }, [styles && isDynamic]); 1968 }; 1969 }; 1970 1971 // node_modules/react-style-singleton/dist/es2015/component.js 1972 var styleSingleton = function() { 1973 var useStyle = styleHookSingleton(); 1974 var Sheet = function(_a) { 1975 var styles = _a.styles, dynamic = _a.dynamic; 1976 useStyle(styles, dynamic); 1977 return null; 1978 }; 1979 return Sheet; 1980 }; 1981 1982 // node_modules/react-remove-scroll-bar/dist/es2015/utils.js 1983 var zeroGap = { 1984 left: 0, 1985 top: 0, 1986 right: 0, 1987 gap: 0 1988 }; 1989 var parse = function(x) { 1990 return parseInt(x || "", 10) || 0; 1991 }; 1992 var getOffset = function(gapMode) { 1993 var cs = window.getComputedStyle(document.body); 1994 var left = cs[gapMode === "padding" ? "paddingLeft" : "marginLeft"]; 1995 var top = cs[gapMode === "padding" ? "paddingTop" : "marginTop"]; 1996 var right = cs[gapMode === "padding" ? "paddingRight" : "marginRight"]; 1997 return [parse(left), parse(top), parse(right)]; 1998 }; 1999 var getGapWidth = function(gapMode) { 2000 if (gapMode === void 0) { 2001 gapMode = "margin"; 2002 } 2003 if (typeof window === "undefined") { 2004 return zeroGap; 2005 } 2006 var offsets = getOffset(gapMode); 2007 var documentWidth = document.documentElement.clientWidth; 2008 var windowWidth = window.innerWidth; 2009 return { 2010 left: offsets[0], 2011 top: offsets[1], 2012 right: offsets[2], 2013 gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]) 2014 }; 2015 }; 2016 2017 // node_modules/react-remove-scroll-bar/dist/es2015/component.js 2018 var Style = styleSingleton(); 2019 var lockAttribute = "data-scroll-locked"; 2020 var getStyles = function(_a, allowRelative, gapMode, important) { 2021 var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap; 2022 if (gapMode === void 0) { 2023 gapMode = "margin"; 2024 } 2025 return "\n .".concat(noScrollbarsClassName, " {\n overflow: hidden ").concat(important, ";\n padding-right: ").concat(gap, "px ").concat(important, ";\n }\n body[").concat(lockAttribute, "] {\n overflow: hidden ").concat(important, ";\n overscroll-behavior: contain;\n ").concat([ 2026 allowRelative && "position: relative ".concat(important, ";"), 2027 gapMode === "margin" && "\n padding-left: ".concat(left, "px;\n padding-top: ").concat(top, "px;\n padding-right: ").concat(right, "px;\n margin-left:0;\n margin-top:0;\n margin-right: ").concat(gap, "px ").concat(important, ";\n "), 2028 gapMode === "padding" && "padding-right: ".concat(gap, "px ").concat(important, ";") 2029 ].filter(Boolean).join(""), "\n }\n \n .").concat(zeroRightClassName, " {\n right: ").concat(gap, "px ").concat(important, ";\n }\n \n .").concat(fullWidthClassName, " {\n margin-right: ").concat(gap, "px ").concat(important, ";\n }\n \n .").concat(zeroRightClassName, " .").concat(zeroRightClassName, " {\n right: 0 ").concat(important, ";\n }\n \n .").concat(fullWidthClassName, " .").concat(fullWidthClassName, " {\n margin-right: 0 ").concat(important, ";\n }\n \n body[").concat(lockAttribute, "] {\n ").concat(removedBarSizeVariable, ": ").concat(gap, "px;\n }\n"); 2030 }; 2031 var getCurrentUseCounter = function() { 2032 var counter = parseInt(document.body.getAttribute(lockAttribute) || "0", 10); 2033 return isFinite(counter) ? counter : 0; 2034 }; 2035 var useLockAttribute = function() { 2036 React34.useEffect(function() { 2037 document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString()); 2038 return function() { 2039 var newCounter = getCurrentUseCounter() - 1; 2040 if (newCounter <= 0) { 2041 document.body.removeAttribute(lockAttribute); 2042 } else { 2043 document.body.setAttribute(lockAttribute, newCounter.toString()); 2044 } 2045 }; 2046 }, []); 2047 }; 2048 var RemoveScrollBar = function(_a) { 2049 var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? "margin" : _b; 2050 useLockAttribute(); 2051 var gap = React34.useMemo(function() { 2052 return getGapWidth(gapMode); 2053 }, [gapMode]); 2054 return React34.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? "!important" : "") }); 2055 }; 2056 2057 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js 2058 var passiveSupported = false; 2059 if (typeof window !== "undefined") { 2060 try { 2061 options = Object.defineProperty({}, "passive", { 2062 get: function() { 2063 passiveSupported = true; 2064 return true; 2065 } 2066 }); 2067 window.addEventListener("test", options, options); 2068 window.removeEventListener("test", options, options); 2069 } catch (err) { 2070 passiveSupported = false; 2071 } 2072 } 2073 var options; 2074 var nonPassive = passiveSupported ? { passive: false } : false; 2075 2076 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/handleScroll.js 2077 var alwaysContainsScroll = function(node) { 2078 return node.tagName === "TEXTAREA"; 2079 }; 2080 var elementCanBeScrolled = function(node, overflow) { 2081 if (!(node instanceof Element)) { 2082 return false; 2083 } 2084 var styles = window.getComputedStyle(node); 2085 return ( 2086 // not-not-scrollable 2087 styles[overflow] !== "hidden" && // contains scroll inside self 2088 !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === "visible") 2089 ); 2090 }; 2091 var elementCouldBeVScrolled = function(node) { 2092 return elementCanBeScrolled(node, "overflowY"); 2093 }; 2094 var elementCouldBeHScrolled = function(node) { 2095 return elementCanBeScrolled(node, "overflowX"); 2096 }; 2097 var locationCouldBeScrolled = function(axis, node) { 2098 var ownerDocument = node.ownerDocument; 2099 var current = node; 2100 do { 2101 if (typeof ShadowRoot !== "undefined" && current instanceof ShadowRoot) { 2102 current = current.host; 2103 } 2104 var isScrollable = elementCouldBeScrolled(axis, current); 2105 if (isScrollable) { 2106 var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2]; 2107 if (scrollHeight > clientHeight) { 2108 return true; 2109 } 2110 } 2111 current = current.parentNode; 2112 } while (current && current !== ownerDocument.body); 2113 return false; 2114 }; 2115 var getVScrollVariables = function(_a) { 2116 var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight; 2117 return [ 2118 scrollTop, 2119 scrollHeight, 2120 clientHeight 2121 ]; 2122 }; 2123 var getHScrollVariables = function(_a) { 2124 var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth; 2125 return [ 2126 scrollLeft, 2127 scrollWidth, 2128 clientWidth 2129 ]; 2130 }; 2131 var elementCouldBeScrolled = function(axis, node) { 2132 return axis === "v" ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node); 2133 }; 2134 var getScrollVariables = function(axis, node) { 2135 return axis === "v" ? getVScrollVariables(node) : getHScrollVariables(node); 2136 }; 2137 var getDirectionFactor = function(axis, direction) { 2138 return axis === "h" && direction === "rtl" ? -1 : 1; 2139 }; 2140 var handleScroll = function(axis, endTarget, event, sourceDelta, noOverscroll) { 2141 var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction); 2142 var delta = directionFactor * sourceDelta; 2143 var target = event.target; 2144 var targetInLock = endTarget.contains(target); 2145 var shouldCancelScroll = false; 2146 var isDeltaPositive = delta > 0; 2147 var availableScroll = 0; 2148 var availableScrollTop = 0; 2149 do { 2150 if (!target) { 2151 break; 2152 } 2153 var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2]; 2154 var elementScroll = scroll_1 - capacity - directionFactor * position; 2155 if (position || elementScroll) { 2156 if (elementCouldBeScrolled(axis, target)) { 2157 availableScroll += elementScroll; 2158 availableScrollTop += position; 2159 } 2160 } 2161 var parent_1 = target.parentNode; 2162 target = parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1; 2163 } while ( 2164 // portaled content 2165 !targetInLock && target !== document.body || // self content 2166 targetInLock && (endTarget.contains(target) || endTarget === target) 2167 ); 2168 if (isDeltaPositive && (noOverscroll && Math.abs(availableScroll) < 1 || !noOverscroll && delta > availableScroll)) { 2169 shouldCancelScroll = true; 2170 } else if (!isDeltaPositive && (noOverscroll && Math.abs(availableScrollTop) < 1 || !noOverscroll && -delta > availableScrollTop)) { 2171 shouldCancelScroll = true; 2172 } 2173 return shouldCancelScroll; 2174 }; 2175 2176 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/SideEffect.js 2177 var getTouchXY = function(event) { 2178 return "changedTouches" in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0]; 2179 }; 2180 var getDeltaXY = function(event) { 2181 return [event.deltaX, event.deltaY]; 2182 }; 2183 var extractRef = function(ref) { 2184 return ref && "current" in ref ? ref.current : ref; 2185 }; 2186 var deltaCompare = function(x, y) { 2187 return x[0] === y[0] && x[1] === y[1]; 2188 }; 2189 var generateStyle = function(id) { 2190 return "\n .block-interactivity-".concat(id, " {pointer-events: none;}\n .allow-interactivity-").concat(id, " {pointer-events: all;}\n"); 2191 }; 2192 var idCounter = 0; 2193 var lockStack = []; 2194 function RemoveScrollSideCar(props) { 2195 var shouldPreventQueue = React35.useRef([]); 2196 var touchStartRef = React35.useRef([0, 0]); 2197 var activeAxis = React35.useRef(); 2198 var id = React35.useState(idCounter++)[0]; 2199 var Style2 = React35.useState(styleSingleton)[0]; 2200 var lastProps = React35.useRef(props); 2201 React35.useEffect(function() { 2202 lastProps.current = props; 2203 }, [props]); 2204 React35.useEffect(function() { 2205 if (props.inert) { 2206 document.body.classList.add("block-interactivity-".concat(id)); 2207 var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean); 2208 allow_1.forEach(function(el) { 2209 return el.classList.add("allow-interactivity-".concat(id)); 2210 }); 2211 return function() { 2212 document.body.classList.remove("block-interactivity-".concat(id)); 2213 allow_1.forEach(function(el) { 2214 return el.classList.remove("allow-interactivity-".concat(id)); 2215 }); 2216 }; 2217 } 2218 return; 2219 }, [props.inert, props.lockRef.current, props.shards]); 2220 var shouldCancelEvent = React35.useCallback(function(event, parent) { 2221 if ("touches" in event && event.touches.length === 2 || event.type === "wheel" && event.ctrlKey) { 2222 return !lastProps.current.allowPinchZoom; 2223 } 2224 var touch = getTouchXY(event); 2225 var touchStart = touchStartRef.current; 2226 var deltaX = "deltaX" in event ? event.deltaX : touchStart[0] - touch[0]; 2227 var deltaY = "deltaY" in event ? event.deltaY : touchStart[1] - touch[1]; 2228 var currentAxis; 2229 var target = event.target; 2230 var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? "h" : "v"; 2231 if ("touches" in event && moveDirection === "h" && target.type === "range") { 2232 return false; 2233 } 2234 var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target); 2235 if (!canBeScrolledInMainDirection) { 2236 return true; 2237 } 2238 if (canBeScrolledInMainDirection) { 2239 currentAxis = moveDirection; 2240 } else { 2241 currentAxis = moveDirection === "v" ? "h" : "v"; 2242 canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target); 2243 } 2244 if (!canBeScrolledInMainDirection) { 2245 return false; 2246 } 2247 if (!activeAxis.current && "changedTouches" in event && (deltaX || deltaY)) { 2248 activeAxis.current = currentAxis; 2249 } 2250 if (!currentAxis) { 2251 return true; 2252 } 2253 var cancelingAxis = activeAxis.current || currentAxis; 2254 return handleScroll(cancelingAxis, parent, event, cancelingAxis === "h" ? deltaX : deltaY, true); 2255 }, []); 2256 var shouldPrevent = React35.useCallback(function(_event) { 2257 var event = _event; 2258 if (!lockStack.length || lockStack[lockStack.length - 1] !== Style2) { 2259 return; 2260 } 2261 var delta = "deltaY" in event ? getDeltaXY(event) : getTouchXY(event); 2262 var sourceEvent = shouldPreventQueue.current.filter(function(e) { 2263 return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); 2264 })[0]; 2265 if (sourceEvent && sourceEvent.should) { 2266 if (event.cancelable) { 2267 event.preventDefault(); 2268 } 2269 return; 2270 } 2271 if (!sourceEvent) { 2272 var shardNodes = (lastProps.current.shards || []).map(extractRef).filter(Boolean).filter(function(node) { 2273 return node.contains(event.target); 2274 }); 2275 var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation; 2276 if (shouldStop) { 2277 if (event.cancelable) { 2278 event.preventDefault(); 2279 } 2280 } 2281 } 2282 }, []); 2283 var shouldCancel = React35.useCallback(function(name, delta, target, should) { 2284 var event = { name, delta, target, should, shadowParent: getOutermostShadowParent(target) }; 2285 shouldPreventQueue.current.push(event); 2286 setTimeout(function() { 2287 shouldPreventQueue.current = shouldPreventQueue.current.filter(function(e) { 2288 return e !== event; 2289 }); 2290 }, 1); 2291 }, []); 2292 var scrollTouchStart = React35.useCallback(function(event) { 2293 touchStartRef.current = getTouchXY(event); 2294 activeAxis.current = void 0; 2295 }, []); 2296 var scrollWheel = React35.useCallback(function(event) { 2297 shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); 2298 }, []); 2299 var scrollTouchMove = React35.useCallback(function(event) { 2300 shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); 2301 }, []); 2302 React35.useEffect(function() { 2303 lockStack.push(Style2); 2304 props.setCallbacks({ 2305 onScrollCapture: scrollWheel, 2306 onWheelCapture: scrollWheel, 2307 onTouchMoveCapture: scrollTouchMove 2308 }); 2309 document.addEventListener("wheel", shouldPrevent, nonPassive); 2310 document.addEventListener("touchmove", shouldPrevent, nonPassive); 2311 document.addEventListener("touchstart", scrollTouchStart, nonPassive); 2312 return function() { 2313 lockStack = lockStack.filter(function(inst) { 2314 return inst !== Style2; 2315 }); 2316 document.removeEventListener("wheel", shouldPrevent, nonPassive); 2317 document.removeEventListener("touchmove", shouldPrevent, nonPassive); 2318 document.removeEventListener("touchstart", scrollTouchStart, nonPassive); 2319 }; 2320 }, []); 2321 var removeScrollBar = props.removeScrollBar, inert = props.inert; 2322 return React35.createElement( 2323 React35.Fragment, 2324 null, 2325 inert ? React35.createElement(Style2, { styles: generateStyle(id) }) : null, 2326 removeScrollBar ? React35.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null 2327 ); 2328 } 2329 function getOutermostShadowParent(node) { 2330 var shadowParent = null; 2331 while (node !== null) { 2332 if (node instanceof ShadowRoot) { 2333 shadowParent = node.host; 2334 node = node.host; 2335 } 2336 node = node.parentNode; 2337 } 2338 return shadowParent; 2339 } 2340 2341 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/sidecar.js 2342 var sidecar_default = exportSidecar(effectCar, RemoveScrollSideCar); 2343 2344 // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/Combination.js 2345 var ReactRemoveScroll = React36.forwardRef(function(props, ref) { 2346 return React36.createElement(RemoveScroll, __assign({}, props, { ref, sideCar: sidecar_default })); 2347 }); 2348 ReactRemoveScroll.classNames = RemoveScroll.classNames; 2349 var Combination_default = ReactRemoveScroll; 2350 2351 // node_modules/aria-hidden/dist/es2015/index.js 2352 var getDefaultParent = function(originalTarget) { 2353 if (typeof document === "undefined") { 2354 return null; 2355 } 2356 var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget; 2357 return sampleTarget.ownerDocument.body; 2358 }; 2359 var counterMap = /* @__PURE__ */ new WeakMap(); 2360 var uncontrolledNodes = /* @__PURE__ */ new WeakMap(); 2361 var markerMap = {}; 2362 var lockCount = 0; 2363 var unwrapHost = function(node) { 2364 return node && (node.host || unwrapHost(node.parentNode)); 2365 }; 2366 var correctTargets = function(parent, targets) { 2367 return targets.map(function(target) { 2368 if (parent.contains(target)) { 2369 return target; 2370 } 2371 var correctedTarget = unwrapHost(target); 2372 if (correctedTarget && parent.contains(correctedTarget)) { 2373 return correctedTarget; 2374 } 2375 console.error("aria-hidden", target, "in not contained inside", parent, ". Doing nothing"); 2376 return null; 2377 }).filter(function(x) { 2378 return Boolean(x); 2379 }); 2380 }; 2381 var applyAttributeToOthers = function(originalTarget, parentNode, markerName, controlAttribute) { 2382 var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]); 2383 if (!markerMap[markerName]) { 2384 markerMap[markerName] = /* @__PURE__ */ new WeakMap(); 2385 } 2386 var markerCounter = markerMap[markerName]; 2387 var hiddenNodes = []; 2388 var elementsToKeep = /* @__PURE__ */ new Set(); 2389 var elementsToStop = new Set(targets); 2390 var keep = function(el) { 2391 if (!el || elementsToKeep.has(el)) { 2392 return; 2393 } 2394 elementsToKeep.add(el); 2395 keep(el.parentNode); 2396 }; 2397 targets.forEach(keep); 2398 var deep = function(parent) { 2399 if (!parent || elementsToStop.has(parent)) { 2400 return; 2401 } 2402 Array.prototype.forEach.call(parent.children, function(node) { 2403 if (elementsToKeep.has(node)) { 2404 deep(node); 2405 } else { 2406 try { 2407 var attr = node.getAttribute(controlAttribute); 2408 var alreadyHidden = attr !== null && attr !== "false"; 2409 var counterValue = (counterMap.get(node) || 0) + 1; 2410 var markerValue = (markerCounter.get(node) || 0) + 1; 2411 counterMap.set(node, counterValue); 2412 markerCounter.set(node, markerValue); 2413 hiddenNodes.push(node); 2414 if (counterValue === 1 && alreadyHidden) { 2415 uncontrolledNodes.set(node, true); 2416 } 2417 if (markerValue === 1) { 2418 node.setAttribute(markerName, "true"); 2419 } 2420 if (!alreadyHidden) { 2421 node.setAttribute(controlAttribute, "true"); 2422 } 2423 } catch (e) { 2424 console.error("aria-hidden: cannot operate on ", node, e); 2425 } 2426 } 2427 }); 2428 }; 2429 deep(parentNode); 2430 elementsToKeep.clear(); 2431 lockCount++; 2432 return function() { 2433 hiddenNodes.forEach(function(node) { 2434 var counterValue = counterMap.get(node) - 1; 2435 var markerValue = markerCounter.get(node) - 1; 2436 counterMap.set(node, counterValue); 2437 markerCounter.set(node, markerValue); 2438 if (!counterValue) { 2439 if (!uncontrolledNodes.has(node)) { 2440 node.removeAttribute(controlAttribute); 2441 } 2442 uncontrolledNodes.delete(node); 2443 } 2444 if (!markerValue) { 2445 node.removeAttribute(markerName); 2446 } 2447 }); 2448 lockCount--; 2449 if (!lockCount) { 2450 counterMap = /* @__PURE__ */ new WeakMap(); 2451 counterMap = /* @__PURE__ */ new WeakMap(); 2452 uncontrolledNodes = /* @__PURE__ */ new WeakMap(); 2453 markerMap = {}; 2454 } 2455 }; 2456 }; 2457 var hideOthers = function(originalTarget, parentNode, markerName) { 2458 if (markerName === void 0) { 2459 markerName = "data-aria-hidden"; 2460 } 2461 var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]); 2462 var activeParentNode = parentNode || getDefaultParent(originalTarget); 2463 if (!activeParentNode) { 2464 return function() { 2465 return null; 2466 }; 2467 } 2468 targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll("[aria-live], script"))); 2469 return applyAttributeToOthers(targets, activeParentNode, markerName, "aria-hidden"); 2470 }; 2471 2472 // node_modules/@radix-ui/react-dialog/dist/index.mjs 2473 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); 2474 var DIALOG_NAME = "Dialog"; 2475 var [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME); 2476 var [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME); 2477 var Dialog = (props) => { 2478 const { 2479 __scopeDialog, 2480 children, 2481 open: openProp, 2482 defaultOpen, 2483 onOpenChange, 2484 modal = true 2485 } = props; 2486 const triggerRef = React37.useRef(null); 2487 const contentRef = React37.useRef(null); 2488 const [open, setOpen] = useControllableState({ 2489 prop: openProp, 2490 defaultProp: defaultOpen ?? false, 2491 onChange: onOpenChange, 2492 caller: DIALOG_NAME 2493 }); 2494 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 2495 DialogProvider, 2496 { 2497 scope: __scopeDialog, 2498 triggerRef, 2499 contentRef, 2500 contentId: useId(), 2501 titleId: useId(), 2502 descriptionId: useId(), 2503 open, 2504 onOpenChange: setOpen, 2505 onOpenToggle: React37.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]), 2506 modal, 2507 children 2508 } 2509 ); 2510 }; 2511 Dialog.displayName = DIALOG_NAME; 2512 var TRIGGER_NAME = "DialogTrigger"; 2513 var DialogTrigger = React37.forwardRef( 2514 (props, forwardedRef) => { 2515 const { __scopeDialog, ...triggerProps } = props; 2516 const context = useDialogContext(TRIGGER_NAME, __scopeDialog); 2517 const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef); 2518 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 2519 Primitive4.button, 2520 { 2521 type: "button", 2522 "aria-haspopup": "dialog", 2523 "aria-expanded": context.open, 2524 "aria-controls": context.contentId, 2525 "data-state": getState(context.open), 2526 ...triggerProps, 2527 ref: composedTriggerRef, 2528 onClick: composeEventHandlers(props.onClick, context.onOpenToggle) 2529 } 2530 ); 2531 } 2532 ); 2533 DialogTrigger.displayName = TRIGGER_NAME; 2534 var PORTAL_NAME2 = "DialogPortal"; 2535 var [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME2, { 2536 forceMount: void 0 2537 }); 2538 var DialogPortal = (props) => { 2539 const { __scopeDialog, forceMount, children, container } = props; 2540 const context = useDialogContext(PORTAL_NAME2, __scopeDialog); 2541 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PortalProvider, { scope: __scopeDialog, forceMount, children: React37.Children.map(children, (child) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Portal, { asChild: true, container, children: child }) })) }); 2542 }; 2543 DialogPortal.displayName = PORTAL_NAME2; 2544 var OVERLAY_NAME = "DialogOverlay"; 2545 var DialogOverlay = React37.forwardRef( 2546 (props, forwardedRef) => { 2547 const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog); 2548 const { forceMount = portalContext.forceMount, ...overlayProps } = props; 2549 const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog); 2550 return context.modal ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null; 2551 } 2552 ); 2553 DialogOverlay.displayName = OVERLAY_NAME; 2554 var Slot = createSlot4("DialogOverlay.RemoveScroll"); 2555 var DialogOverlayImpl = React37.forwardRef( 2556 (props, forwardedRef) => { 2557 const { __scopeDialog, ...overlayProps } = props; 2558 const context = useDialogContext(OVERLAY_NAME, __scopeDialog); 2559 return ( 2560 // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll` 2561 // ie. when `Overlay` and `Content` are siblings 2562 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Combination_default, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 2563 Primitive4.div, 2564 { 2565 "data-state": getState(context.open), 2566 ...overlayProps, 2567 ref: forwardedRef, 2568 style: { pointerEvents: "auto", ...overlayProps.style } 2569 } 2570 ) }) 2571 ); 2572 } 2573 ); 2574 var CONTENT_NAME = "DialogContent"; 2575 var DialogContent = React37.forwardRef( 2576 (props, forwardedRef) => { 2577 const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog); 2578 const { forceMount = portalContext.forceMount, ...contentProps } = props; 2579 const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); 2580 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) }); 2581 } 2582 ); 2583 DialogContent.displayName = CONTENT_NAME; 2584 var DialogContentModal = React37.forwardRef( 2585 (props, forwardedRef) => { 2586 const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); 2587 const contentRef = React37.useRef(null); 2588 const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef); 2589 React37.useEffect(() => { 2590 const content = contentRef.current; 2591 if (content) return hideOthers(content); 2592 }, []); 2593 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 2594 DialogContentImpl, 2595 { 2596 ...props, 2597 ref: composedRefs, 2598 trapFocus: context.open, 2599 disableOutsidePointerEvents: true, 2600 onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => { 2601 event.preventDefault(); 2602 context.triggerRef.current?.focus(); 2603 }), 2604 onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => { 2605 const originalEvent = event.detail.originalEvent; 2606 const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true; 2607 const isRightClick = originalEvent.button === 2 || ctrlLeftClick; 2608 if (isRightClick) event.preventDefault(); 2609 }), 2610 onFocusOutside: composeEventHandlers( 2611 props.onFocusOutside, 2612 (event) => event.preventDefault() 2613 ) 2614 } 2615 ); 2616 } 2617 ); 2618 var DialogContentNonModal = React37.forwardRef( 2619 (props, forwardedRef) => { 2620 const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); 2621 const hasInteractedOutsideRef = React37.useRef(false); 2622 const hasPointerDownOutsideRef = React37.useRef(false); 2623 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 2624 DialogContentImpl, 2625 { 2626 ...props, 2627 ref: forwardedRef, 2628 trapFocus: false, 2629 disableOutsidePointerEvents: false, 2630 onCloseAutoFocus: (event) => { 2631 props.onCloseAutoFocus?.(event); 2632 if (!event.defaultPrevented) { 2633 if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus(); 2634 event.preventDefault(); 2635 } 2636 hasInteractedOutsideRef.current = false; 2637 hasPointerDownOutsideRef.current = false; 2638 }, 2639 onInteractOutside: (event) => { 2640 props.onInteractOutside?.(event); 2641 if (!event.defaultPrevented) { 2642 hasInteractedOutsideRef.current = true; 2643 if (event.detail.originalEvent.type === "pointerdown") { 2644 hasPointerDownOutsideRef.current = true; 2645 } 2646 } 2647 const target = event.target; 2648 const targetIsTrigger = context.triggerRef.current?.contains(target); 2649 if (targetIsTrigger) event.preventDefault(); 2650 if (event.detail.originalEvent.type === "focusin" && hasPointerDownOutsideRef.current) { 2651 event.preventDefault(); 2652 } 2653 } 2654 } 2655 ); 2656 } 2657 ); 2658 var DialogContentImpl = React37.forwardRef( 2659 (props, forwardedRef) => { 2660 const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props; 2661 const context = useDialogContext(CONTENT_NAME, __scopeDialog); 2662 const contentRef = React37.useRef(null); 2663 const composedRefs = useComposedRefs(forwardedRef, contentRef); 2664 useFocusGuards(); 2665 return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [ 2666 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 2667 FocusScope, 2668 { 2669 asChild: true, 2670 loop: true, 2671 trapped: trapFocus, 2672 onMountAutoFocus: onOpenAutoFocus, 2673 onUnmountAutoFocus: onCloseAutoFocus, 2674 children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 2675 DismissableLayer, 2676 { 2677 role: "dialog", 2678 id: context.contentId, 2679 "aria-describedby": context.descriptionId, 2680 "aria-labelledby": context.titleId, 2681 "data-state": getState(context.open), 2682 ...contentProps, 2683 ref: composedRefs, 2684 onDismiss: () => context.onOpenChange(false) 2685 } 2686 ) 2687 } 2688 ), 2689 /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [ 2690 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TitleWarning, { titleId: context.titleId }), 2691 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DescriptionWarning, { contentRef, descriptionId: context.descriptionId }) 2692 ] }) 2693 ] }); 2694 } 2695 ); 2696 var TITLE_NAME = "DialogTitle"; 2697 var DialogTitle = React37.forwardRef( 2698 (props, forwardedRef) => { 2699 const { __scopeDialog, ...titleProps } = props; 2700 const context = useDialogContext(TITLE_NAME, __scopeDialog); 2701 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Primitive4.h2, { id: context.titleId, ...titleProps, ref: forwardedRef }); 2702 } 2703 ); 2704 DialogTitle.displayName = TITLE_NAME; 2705 var DESCRIPTION_NAME = "DialogDescription"; 2706 var DialogDescription = React37.forwardRef( 2707 (props, forwardedRef) => { 2708 const { __scopeDialog, ...descriptionProps } = props; 2709 const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog); 2710 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Primitive4.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef }); 2711 } 2712 ); 2713 DialogDescription.displayName = DESCRIPTION_NAME; 2714 var CLOSE_NAME = "DialogClose"; 2715 var DialogClose = React37.forwardRef( 2716 (props, forwardedRef) => { 2717 const { __scopeDialog, ...closeProps } = props; 2718 const context = useDialogContext(CLOSE_NAME, __scopeDialog); 2719 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 2720 Primitive4.button, 2721 { 2722 type: "button", 2723 ...closeProps, 2724 ref: forwardedRef, 2725 onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false)) 2726 } 2727 ); 2728 } 2729 ); 2730 DialogClose.displayName = CLOSE_NAME; 2731 function getState(open) { 2732 return open ? "open" : "closed"; 2733 } 2734 var TITLE_WARNING_NAME = "DialogTitleWarning"; 2735 var [WarningProvider, useWarningContext] = createContext2(TITLE_WARNING_NAME, { 2736 contentName: CONTENT_NAME, 2737 titleName: TITLE_NAME, 2738 docsSlug: "dialog" 2739 }); 2740 var TitleWarning = ({ titleId }) => { 2741 const titleWarningContext = useWarningContext(TITLE_WARNING_NAME); 2742 const MESSAGE = `\`$titleWarningContext.contentName}\` requires a \`$titleWarningContext.titleName}\` for the component to be accessible for screen reader users. 2743 2744 If you want to hide the \`$titleWarningContext.titleName}\`, you can wrap it with our VisuallyHidden component. 2745 2746 For more information, see https://radix-ui.com/primitives/docs/components/$titleWarningContext.docsSlug}`; 2747 React37.useEffect(() => { 2748 if (titleId) { 2749 const hasTitle = document.getElementById(titleId); 2750 if (!hasTitle) console.error(MESSAGE); 2751 } 2752 }, [MESSAGE, titleId]); 2753 return null; 2754 }; 2755 var DESCRIPTION_WARNING_NAME = "DialogDescriptionWarning"; 2756 var DescriptionWarning = ({ contentRef, descriptionId }) => { 2757 const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME); 2758 const MESSAGE = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {$descriptionWarningContext.contentName}}.`; 2759 React37.useEffect(() => { 2760 const describedById = contentRef.current?.getAttribute("aria-describedby"); 2761 if (descriptionId && describedById) { 2762 const hasDescription = document.getElementById(descriptionId); 2763 if (!hasDescription) console.warn(MESSAGE); 2764 } 2765 }, [MESSAGE, contentRef, descriptionId]); 2766 return null; 2767 }; 2768 var Root = Dialog; 2769 var Portal2 = DialogPortal; 2770 var Overlay = DialogOverlay; 2771 var Content = DialogContent; 2772 2773 // node_modules/cmdk/dist/index.mjs 2774 var t = __toESM(require_react(), 1); 2775 2776 // node_modules/cmdk/node_modules/@radix-ui/react-primitive/dist/index.mjs 2777 var React40 = __toESM(require_react(), 1); 2778 var ReactDOM6 = __toESM(require_react_dom(), 1); 2779 2780 // node_modules/cmdk/node_modules/@radix-ui/react-slot/dist/index.mjs 2781 var React39 = __toESM(require_react(), 1); 2782 2783 // node_modules/cmdk/node_modules/@radix-ui/react-compose-refs/dist/index.mjs 2784 var React38 = __toESM(require_react(), 1); 2785 function setRef6(ref, value) { 2786 if (typeof ref === "function") { 2787 return ref(value); 2788 } else if (ref !== null && ref !== void 0) { 2789 ref.current = value; 2790 } 2791 } 2792 function composeRefs6(...refs) { 2793 return (node) => { 2794 let hasCleanup = false; 2795 const cleanups = refs.map((ref) => { 2796 const cleanup = setRef6(ref, node); 2797 if (!hasCleanup && typeof cleanup == "function") { 2798 hasCleanup = true; 2799 } 2800 return cleanup; 2801 }); 2802 if (hasCleanup) { 2803 return () => { 2804 for (let i = 0; i < cleanups.length; i++) { 2805 const cleanup = cleanups[i]; 2806 if (typeof cleanup == "function") { 2807 cleanup(); 2808 } else { 2809 setRef6(refs[i], null); 2810 } 2811 } 2812 }; 2813 } 2814 }; 2815 } 2816 2817 // node_modules/cmdk/node_modules/@radix-ui/react-slot/dist/index.mjs 2818 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); 2819 var REACT_LAZY_TYPE = Symbol.for("react.lazy"); 2820 var use = React39[" use ".trim().toString()]; 2821 function isPromiseLike(value) { 2822 return typeof value === "object" && value !== null && "then" in value; 2823 } 2824 function isLazyComponent(element) { 2825 return element != null && typeof element === "object" && "$$typeof" in element && element.$$typeof === REACT_LAZY_TYPE && "_payload" in element && isPromiseLike(element._payload); 2826 } 2827 // @__NO_SIDE_EFFECTS__ 2828 function createSlot5(ownerName) { 2829 const SlotClone = /* @__PURE__ */ createSlotClone5(ownerName); 2830 const Slot2 = React39.forwardRef((props, forwardedRef) => { 2831 let { children, ...slotProps } = props; 2832 if (isLazyComponent(children) && typeof use === "function") { 2833 children = use(children._payload); 2834 } 2835 const childrenArray = React39.Children.toArray(children); 2836 const slottable = childrenArray.find(isSlottable5); 2837 if (slottable) { 2838 const newElement = slottable.props.children; 2839 const newChildren = childrenArray.map((child) => { 2840 if (child === slottable) { 2841 if (React39.Children.count(newElement) > 1) return React39.Children.only(null); 2842 return React39.isValidElement(newElement) ? newElement.props.children : null; 2843 } else { 2844 return child; 2845 } 2846 }); 2847 return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React39.isValidElement(newElement) ? React39.cloneElement(newElement, void 0, newChildren) : null }); 2848 } 2849 return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children }); 2850 }); 2851 Slot2.displayName = `$ownerName}.Slot`; 2852 return Slot2; 2853 } 2854 // @__NO_SIDE_EFFECTS__ 2855 function createSlotClone5(ownerName) { 2856 const SlotClone = React39.forwardRef((props, forwardedRef) => { 2857 let { children, ...slotProps } = props; 2858 if (isLazyComponent(children) && typeof use === "function") { 2859 children = use(children._payload); 2860 } 2861 if (React39.isValidElement(children)) { 2862 const childrenRef = getElementRef6(children); 2863 const props2 = mergeProps5(slotProps, children.props); 2864 if (children.type !== React39.Fragment) { 2865 props2.ref = forwardedRef ? composeRefs6(forwardedRef, childrenRef) : childrenRef; 2866 } 2867 return React39.cloneElement(children, props2); 2868 } 2869 return React39.Children.count(children) > 1 ? React39.Children.only(null) : null; 2870 }); 2871 SlotClone.displayName = `$ownerName}.SlotClone`; 2872 return SlotClone; 2873 } 2874 var SLOTTABLE_IDENTIFIER5 = Symbol("radix.slottable"); 2875 function isSlottable5(child) { 2876 return React39.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER5; 2877 } 2878 function mergeProps5(slotProps, childProps) { 2879 const overrideProps = { ...childProps }; 2880 for (const propName in childProps) { 2881 const slotPropValue = slotProps[propName]; 2882 const childPropValue = childProps[propName]; 2883 const isHandler = /^on[A-Z]/.test(propName); 2884 if (isHandler) { 2885 if (slotPropValue && childPropValue) { 2886 overrideProps[propName] = (...args) => { 2887 const result = childPropValue(...args); 2888 slotPropValue(...args); 2889 return result; 2890 }; 2891 } else if (slotPropValue) { 2892 overrideProps[propName] = slotPropValue; 2893 } 2894 } else if (propName === "style") { 2895 overrideProps[propName] = { ...slotPropValue, ...childPropValue }; 2896 } else if (propName === "className") { 2897 overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" "); 2898 } 2899 } 2900 return { ...slotProps, ...overrideProps }; 2901 } 2902 function getElementRef6(element) { 2903 let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get; 2904 let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 2905 if (mayWarn) { 2906 return element.ref; 2907 } 2908 getter = Object.getOwnPropertyDescriptor(element, "ref")?.get; 2909 mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; 2910 if (mayWarn) { 2911 return element.props.ref; 2912 } 2913 return element.props.ref || element.ref; 2914 } 2915 2916 // node_modules/cmdk/node_modules/@radix-ui/react-primitive/dist/index.mjs 2917 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); 2918 var NODES5 = [ 2919 "a", 2920 "button", 2921 "div", 2922 "form", 2923 "h2", 2924 "h3", 2925 "img", 2926 "input", 2927 "label", 2928 "li", 2929 "nav", 2930 "ol", 2931 "p", 2932 "select", 2933 "span", 2934 "svg", 2935 "ul" 2936 ]; 2937 var Primitive5 = NODES5.reduce((primitive, node) => { 2938 const Slot2 = createSlot5(`Primitive.$node}`); 2939 const Node2 = React40.forwardRef((props, forwardedRef) => { 2940 const { asChild, ...primitiveProps } = props; 2941 const Comp = asChild ? Slot2 : node; 2942 if (typeof window !== "undefined") { 2943 window[Symbol.for("radix-ui")] = true; 2944 } 2945 return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Comp, { ...primitiveProps, ref: forwardedRef }); 2946 }); 2947 Node2.displayName = `Primitive.$node}`; 2948 return { ...primitive, [node]: Node2 }; 2949 }, {}); 2950 2951 // node_modules/cmdk/node_modules/@radix-ui/react-id/dist/index.mjs 2952 var React42 = __toESM(require_react(), 1); 2953 2954 // node_modules/cmdk/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs 2955 var React41 = __toESM(require_react(), 1); 2956 var useLayoutEffect24 = globalThis?.document ? React41.useLayoutEffect : () => { 2957 }; 2958 2959 // node_modules/cmdk/node_modules/@radix-ui/react-id/dist/index.mjs 2960 var useReactId2 = React42[" useId ".trim().toString()] || (() => void 0); 2961 var count3 = 0; 2962 function useId2(deterministicId) { 2963 const [id, setId] = React42.useState(useReactId2()); 2964 useLayoutEffect24(() => { 2965 if (!deterministicId) setId((reactId) => reactId ?? String(count3++)); 2966 }, [deterministicId]); 2967 return deterministicId || (id ? `radix-$id}` : ""); 2968 } 2969 2970 // node_modules/cmdk/dist/index.mjs 2971 var N = '[cmdk-group=""]'; 2972 var Y2 = '[cmdk-group-items=""]'; 2973 var be = '[cmdk-group-heading=""]'; 2974 var le = '[cmdk-item=""]'; 2975 var ce = `$le}:not([aria-disabled="true"])`; 2976 var Z = "cmdk-item-select"; 2977 var T = "data-value"; 2978 var Re = (r, o, n) => W(r, o, n); 2979 var ue = t.createContext(void 0); 2980 var K2 = () => t.useContext(ue); 2981 var de = t.createContext(void 0); 2982 var ee = () => t.useContext(de); 2983 var fe = t.createContext(void 0); 2984 var me = t.forwardRef((r, o) => { 2985 let n = L(() => { 2986 var e, a; 2987 return { search: "", value: (a = (e = r.value) != null ? e : r.defaultValue) != null ? a : "", selectedItemId: void 0, filtered: { count: 0, items: /* @__PURE__ */ new Map(), groups: /* @__PURE__ */ new Set() } }; 2988 }), u2 = L(() => /* @__PURE__ */ new Set()), c = L(() => /* @__PURE__ */ new Map()), d = L(() => /* @__PURE__ */ new Map()), f = L(() => /* @__PURE__ */ new Set()), p2 = pe(r), { label: b, children: m2, value: R, onValueChange: x, filter: C, shouldFilter: S, loop: A, disablePointerSelection: ge = false, vimBindings: j = true, ...O } = r, $2 = useId2(), q = useId2(), _ = useId2(), I = t.useRef(null), v = ke(); 2989 k2(() => { 2990 if (R !== void 0) { 2991 let e = R.trim(); 2992 n.current.value = e, E.emit(); 2993 } 2994 }, [R]), k2(() => { 2995 v(6, ne); 2996 }, []); 2997 let E = t.useMemo(() => ({ subscribe: (e) => (f.current.add(e), () => f.current.delete(e)), snapshot: () => n.current, setState: (e, a, s) => { 2998 var i, l, g, y; 2999 if (!Object.is(n.current[e], a)) { 3000 if (n.current[e] = a, e === "search") J2(), z(), v(1, W2); 3001 else if (e === "value") { 3002 if (document.activeElement.hasAttribute("cmdk-input") || document.activeElement.hasAttribute("cmdk-root")) { 3003 let h = document.getElementById(_); 3004 h ? h.focus() : (i = document.getElementById($2)) == null || i.focus(); 3005 } 3006 if (v(7, () => { 3007 var h; 3008 n.current.selectedItemId = (h = M()) == null ? void 0 : h.id, E.emit(); 3009 }), s || v(5, ne), ((l = p2.current) == null ? void 0 : l.value) !== void 0) { 3010 let h = a != null ? a : ""; 3011 (y = (g = p2.current).onValueChange) == null || y.call(g, h); 3012 return; 3013 } 3014 } 3015 E.emit(); 3016 } 3017 }, emit: () => { 3018 f.current.forEach((e) => e()); 3019 } }), []), U2 = t.useMemo(() => ({ value: (e, a, s) => { 3020 var i; 3021 a !== ((i = d.current.get(e)) == null ? void 0 : i.value) && (d.current.set(e, { value: a, keywords: s }), n.current.filtered.items.set(e, te(a, s)), v(2, () => { 3022 z(), E.emit(); 3023 })); 3024 }, item: (e, a) => (u2.current.add(e), a && (c.current.has(a) ? c.current.get(a).add(e) : c.current.set(a, /* @__PURE__ */ new Set([e]))), v(3, () => { 3025 J2(), z(), n.current.value || W2(), E.emit(); 3026 }), () => { 3027 d.current.delete(e), u2.current.delete(e), n.current.filtered.items.delete(e); 3028 let s = M(); 3029 v(4, () => { 3030 J2(), (s == null ? void 0 : s.getAttribute("id")) === e && W2(), E.emit(); 3031 }); 3032 }), group: (e) => (c.current.has(e) || c.current.set(e, /* @__PURE__ */ new Set()), () => { 3033 d.current.delete(e), c.current.delete(e); 3034 }), filter: () => p2.current.shouldFilter, label: b || r["aria-label"], getDisablePointerSelection: () => p2.current.disablePointerSelection, listId: $2, inputId: _, labelId: q, listInnerRef: I }), []); 3035 function te(e, a) { 3036 var i, l; 3037 let s = (l = (i = p2.current) == null ? void 0 : i.filter) != null ? l : Re; 3038 return e ? s(e, n.current.search, a) : 0; 3039 } 3040 function z() { 3041 if (!n.current.search || p2.current.shouldFilter === false) return; 3042 let e = n.current.filtered.items, a = []; 3043 n.current.filtered.groups.forEach((i) => { 3044 let l = c.current.get(i), g = 0; 3045 l.forEach((y) => { 3046 let h = e.get(y); 3047 g = Math.max(h, g); 3048 }), a.push([i, g]); 3049 }); 3050 let s = I.current; 3051 V().sort((i, l) => { 3052 var h, F; 3053 let g = i.getAttribute("id"), y = l.getAttribute("id"); 3054 return ((h = e.get(y)) != null ? h : 0) - ((F = e.get(g)) != null ? F : 0); 3055 }).forEach((i) => { 3056 let l = i.closest(Y2); 3057 l ? l.appendChild(i.parentElement === l ? i : i.closest(`$Y2} > *`)) : s.appendChild(i.parentElement === s ? i : i.closest(`$Y2} > *`)); 3058 }), a.sort((i, l) => l[1] - i[1]).forEach((i) => { 3059 var g; 3060 let l = (g = I.current) == null ? void 0 : g.querySelector(`$N}[$T}="$encodeURIComponent(i[0])}"]`); 3061 l == null || l.parentElement.appendChild(l); 3062 }); 3063 } 3064 function W2() { 3065 let e = V().find((s) => s.getAttribute("aria-disabled") !== "true"), a = e == null ? void 0 : e.getAttribute(T); 3066 E.setState("value", a || void 0); 3067 } 3068 function J2() { 3069 var a, s, i, l; 3070 if (!n.current.search || p2.current.shouldFilter === false) { 3071 n.current.filtered.count = u2.current.size; 3072 return; 3073 } 3074 n.current.filtered.groups = /* @__PURE__ */ new Set(); 3075 let e = 0; 3076 for (let g of u2.current) { 3077 let y = (s = (a = d.current.get(g)) == null ? void 0 : a.value) != null ? s : "", h = (l = (i = d.current.get(g)) == null ? void 0 : i.keywords) != null ? l : [], F = te(y, h); 3078 n.current.filtered.items.set(g, F), F > 0 && e++; 3079 } 3080 for (let [g, y] of c.current) for (let h of y) if (n.current.filtered.items.get(h) > 0) { 3081 n.current.filtered.groups.add(g); 3082 break; 3083 } 3084 n.current.filtered.count = e; 3085 } 3086 function ne() { 3087 var a, s, i; 3088 let e = M(); 3089 e && (((a = e.parentElement) == null ? void 0 : a.firstChild) === e && ((i = (s = e.closest(N)) == null ? void 0 : s.querySelector(be)) == null || i.scrollIntoView({ block: "nearest" })), e.scrollIntoView({ block: "nearest" })); 3090 } 3091 function M() { 3092 var e; 3093 return (e = I.current) == null ? void 0 : e.querySelector(`$le}[aria-selected="true"]`); 3094 } 3095 function V() { 3096 var e; 3097 return Array.from(((e = I.current) == null ? void 0 : e.querySelectorAll(ce)) || []); 3098 } 3099 function X2(e) { 3100 let s = V()[e]; 3101 s && E.setState("value", s.getAttribute(T)); 3102 } 3103 function Q(e) { 3104 var g; 3105 let a = M(), s = V(), i = s.findIndex((y) => y === a), l = s[i + e]; 3106 (g = p2.current) != null && g.loop && (l = i + e < 0 ? s[s.length - 1] : i + e === s.length ? s[0] : s[i + e]), l && E.setState("value", l.getAttribute(T)); 3107 } 3108 function re(e) { 3109 let a = M(), s = a == null ? void 0 : a.closest(N), i; 3110 for (; s && !i; ) s = e > 0 ? we(s, N) : De(s, N), i = s == null ? void 0 : s.querySelector(ce); 3111 i ? E.setState("value", i.getAttribute(T)) : Q(e); 3112 } 3113 let oe = () => X2(V().length - 1), ie = (e) => { 3114 e.preventDefault(), e.metaKey ? oe() : e.altKey ? re(1) : Q(1); 3115 }, se = (e) => { 3116 e.preventDefault(), e.metaKey ? X2(0) : e.altKey ? re(-1) : Q(-1); 3117 }; 3118 return t.createElement(Primitive5.div, { ref: o, tabIndex: -1, ...O, "cmdk-root": "", onKeyDown: (e) => { 3119 var s; 3120 (s = O.onKeyDown) == null || s.call(O, e); 3121 let a = e.nativeEvent.isComposing || e.keyCode === 229; 3122 if (!(e.defaultPrevented || a)) switch (e.key) { 3123 case "n": 3124 case "j": { 3125 j && e.ctrlKey && ie(e); 3126 break; 3127 } 3128 case "ArrowDown": { 3129 ie(e); 3130 break; 3131 } 3132 case "p": 3133 case "k": { 3134 j && e.ctrlKey && se(e); 3135 break; 3136 } 3137 case "ArrowUp": { 3138 se(e); 3139 break; 3140 } 3141 case "Home": { 3142 e.preventDefault(), X2(0); 3143 break; 3144 } 3145 case "End": { 3146 e.preventDefault(), oe(); 3147 break; 3148 } 3149 case "Enter": { 3150 e.preventDefault(); 3151 let i = M(); 3152 if (i) { 3153 let l = new Event(Z); 3154 i.dispatchEvent(l); 3155 } 3156 } 3157 } 3158 } }, t.createElement("label", { "cmdk-label": "", htmlFor: U2.inputId, id: U2.labelId, style: Te }, b), B2(r, (e) => t.createElement(de.Provider, { value: E }, t.createElement(ue.Provider, { value: U2 }, e)))); 3159 }); 3160 var he = t.forwardRef((r, o) => { 3161 var _, I; 3162 let n = useId2(), u2 = t.useRef(null), c = t.useContext(fe), d = K2(), f = pe(r), p2 = (I = (_ = f.current) == null ? void 0 : _.forceMount) != null ? I : c == null ? void 0 : c.forceMount; 3163 k2(() => { 3164 if (!p2) return d.item(n, c == null ? void 0 : c.id); 3165 }, [p2]); 3166 let b = ve(n, u2, [r.value, r.children, u2], r.keywords), m2 = ee(), R = P((v) => v.value && v.value === b.current), x = P((v) => p2 || d.filter() === false ? true : v.search ? v.filtered.items.get(n) > 0 : true); 3167 t.useEffect(() => { 3168 let v = u2.current; 3169 if (!(!v || r.disabled)) return v.addEventListener(Z, C), () => v.removeEventListener(Z, C); 3170 }, [x, r.onSelect, r.disabled]); 3171 function C() { 3172 var v, E; 3173 S(), (E = (v = f.current).onSelect) == null || E.call(v, b.current); 3174 } 3175 function S() { 3176 m2.setState("value", b.current, true); 3177 } 3178 if (!x) return null; 3179 let { disabled: A, value: ge, onSelect: j, forceMount: O, keywords: $2, ...q } = r; 3180 return t.createElement(Primitive5.div, { ref: composeRefs6(u2, o), ...q, id: n, "cmdk-item": "", role: "option", "aria-disabled": !!A, "aria-selected": !!R, "data-disabled": !!A, "data-selected": !!R, onPointerMove: A || d.getDisablePointerSelection() ? void 0 : S, onClick: A ? void 0 : C }, r.children); 3181 }); 3182 var Ee = t.forwardRef((r, o) => { 3183 let { heading: n, children: u2, forceMount: c, ...d } = r, f = useId2(), p2 = t.useRef(null), b = t.useRef(null), m2 = useId2(), R = K2(), x = P((S) => c || R.filter() === false ? true : S.search ? S.filtered.groups.has(f) : true); 3184 k2(() => R.group(f), []), ve(f, p2, [r.value, r.heading, b]); 3185 let C = t.useMemo(() => ({ id: f, forceMount: c }), [c]); 3186 return t.createElement(Primitive5.div, { ref: composeRefs6(p2, o), ...d, "cmdk-group": "", role: "presentation", hidden: x ? void 0 : true }, n && t.createElement("div", { ref: b, "cmdk-group-heading": "", "aria-hidden": true, id: m2 }, n), B2(r, (S) => t.createElement("div", { "cmdk-group-items": "", role: "group", "aria-labelledby": n ? m2 : void 0 }, t.createElement(fe.Provider, { value: C }, S)))); 3187 }); 3188 var ye = t.forwardRef((r, o) => { 3189 let { alwaysRender: n, ...u2 } = r, c = t.useRef(null), d = P((f) => !f.search); 3190 return !n && !d ? null : t.createElement(Primitive5.div, { ref: composeRefs6(c, o), ...u2, "cmdk-separator": "", role: "separator" }); 3191 }); 3192 var Se = t.forwardRef((r, o) => { 3193 let { onValueChange: n, ...u2 } = r, c = r.value != null, d = ee(), f = P((m2) => m2.search), p2 = P((m2) => m2.selectedItemId), b = K2(); 3194 return t.useEffect(() => { 3195 r.value != null && d.setState("search", r.value); 3196 }, [r.value]), t.createElement(Primitive5.input, { ref: o, ...u2, "cmdk-input": "", autoComplete: "off", autoCorrect: "off", spellCheck: false, "aria-autocomplete": "list", role: "combobox", "aria-expanded": true, "aria-controls": b.listId, "aria-labelledby": b.labelId, "aria-activedescendant": p2, id: b.inputId, type: "text", value: c ? r.value : f, onChange: (m2) => { 3197 c || d.setState("search", m2.target.value), n == null || n(m2.target.value); 3198 } }); 3199 }); 3200 var Ce = t.forwardRef((r, o) => { 3201 let { children: n, label: u2 = "Suggestions", ...c } = r, d = t.useRef(null), f = t.useRef(null), p2 = P((m2) => m2.selectedItemId), b = K2(); 3202 return t.useEffect(() => { 3203 if (f.current && d.current) { 3204 let m2 = f.current, R = d.current, x, C = new ResizeObserver(() => { 3205 x = requestAnimationFrame(() => { 3206 let S = m2.offsetHeight; 3207 R.style.setProperty("--cmdk-list-height", S.toFixed(1) + "px"); 3208 }); 3209 }); 3210 return C.observe(m2), () => { 3211 cancelAnimationFrame(x), C.unobserve(m2); 3212 }; 3213 } 3214 }, []), t.createElement(Primitive5.div, { ref: composeRefs6(d, o), ...c, "cmdk-list": "", role: "listbox", tabIndex: -1, "aria-activedescendant": p2, "aria-label": u2, id: b.listId }, B2(r, (m2) => t.createElement("div", { ref: composeRefs6(f, b.listInnerRef), "cmdk-list-sizer": "" }, m2))); 3215 }); 3216 var xe = t.forwardRef((r, o) => { 3217 let { open: n, onOpenChange: u2, overlayClassName: c, contentClassName: d, container: f, ...p2 } = r; 3218 return t.createElement(Root, { open: n, onOpenChange: u2 }, t.createElement(Portal2, { container: f }, t.createElement(Overlay, { "cmdk-overlay": "", className: c }), t.createElement(Content, { "aria-label": r.label, "cmdk-dialog": "", className: d }, t.createElement(me, { ref: o, ...p2 })))); 3219 }); 3220 var Ie = t.forwardRef((r, o) => P((u2) => u2.filtered.count === 0) ? t.createElement(Primitive5.div, { ref: o, ...r, "cmdk-empty": "", role: "presentation" }) : null); 3221 var Pe = t.forwardRef((r, o) => { 3222 let { progress: n, children: u2, label: c = "Loading...", ...d } = r; 3223 return t.createElement(Primitive5.div, { ref: o, ...d, "cmdk-loading": "", role: "progressbar", "aria-valuenow": n, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": c }, B2(r, (f) => t.createElement("div", { "aria-hidden": true }, f))); 3224 }); 3225 var _e = Object.assign(me, { List: Ce, Item: he, Input: Se, Group: Ee, Separator: ye, Dialog: xe, Empty: Ie, Loading: Pe }); 3226 function we(r, o) { 3227 let n = r.nextElementSibling; 3228 for (; n; ) { 3229 if (n.matches(o)) return n; 3230 n = n.nextElementSibling; 3231 } 3232 } 3233 function De(r, o) { 3234 let n = r.previousElementSibling; 3235 for (; n; ) { 3236 if (n.matches(o)) return n; 3237 n = n.previousElementSibling; 3238 } 3239 } 3240 function pe(r) { 3241 let o = t.useRef(r); 3242 return k2(() => { 3243 o.current = r; 3244 }), o; 3245 } 3246 var k2 = typeof window == "undefined" ? t.useEffect : t.useLayoutEffect; 3247 function L(r) { 3248 let o = t.useRef(); 3249 return o.current === void 0 && (o.current = r()), o; 3250 } 3251 function P(r) { 3252 let o = ee(), n = () => r(o.snapshot()); 3253 return t.useSyncExternalStore(o.subscribe, n, n); 3254 } 3255 function ve(r, o, n, u2 = []) { 3256 let c = t.useRef(), d = K2(); 3257 return k2(() => { 3258 var b; 3259 let f = (() => { 3260 var m2; 3261 for (let R of n) { 3262 if (typeof R == "string") return R.trim(); 3263 if (typeof R == "object" && "current" in R) return R.current ? (m2 = R.current.textContent) == null ? void 0 : m2.trim() : c.current; 3264 } 3265 })(), p2 = u2.map((m2) => m2.trim()); 3266 d.value(r, f, p2), (b = o.current) == null || b.setAttribute(T, f), c.current = f; 3267 }), c; 3268 } 3269 var ke = () => { 3270 let [r, o] = t.useState(), n = L(() => /* @__PURE__ */ new Map()); 3271 return k2(() => { 3272 n.current.forEach((u2) => u2()), n.current = /* @__PURE__ */ new Map(); 3273 }, [r]), (u2, c) => { 3274 n.current.set(u2, c), o({}); 3275 }; 3276 }; 3277 function Me(r) { 3278 let o = r.type; 3279 return typeof o == "function" ? o(r.props) : "render" in o ? o.render(r.props) : r; 3280 } 3281 function B2({ asChild: r, children: o }, n) { 3282 return r && t.isValidElement(o) ? t.cloneElement(Me(o), { ref: o.ref }, n(o.props.children)) : n(o); 3283 } 3284 var Te = { position: "absolute", width: "1px", height: "1px", padding: "0", margin: "-1px", overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", borderWidth: "0" }; 3285 3286 // packages/workflow/build-module/components/workflow-menu.js 3287 var import_data = __toESM(require_data()); 3288 var import_element2 = __toESM(require_element()); 3289 var import_i18n = __toESM(require_i18n()); 3290 var import_components = __toESM(require_components()); 3291 var import_keyboard_shortcuts = __toESM(require_keyboard_shortcuts()); 3292 3293 // packages/icons/build-module/icon/index.js 3294 var import_element = __toESM(require_element()); 3295 var icon_default = (0, import_element.forwardRef)( 3296 ({ icon, size = 24, ...props }, ref) => { 3297 return (0, import_element.cloneElement)(icon, { 3298 width: size, 3299 height: size, 3300 ...props, 3301 ref 3302 }); 3303 } 3304 ); 3305 3306 // packages/icons/build-module/library/search.js 3307 var import_primitives = __toESM(require_primitives()); 3308 var import_jsx_runtime16 = __toESM(require_jsx_runtime()); 3309 var search_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) }); 3310 3311 // packages/workflow/build-module/components/workflow-menu.js 3312 import { executeAbility, store as abilitiesStore } from "@wordpress/abilities"; 3313 3314 // packages/workflow/build-module/lock-unlock.js 3315 var import_private_apis = __toESM(require_private_apis()); 3316 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 3317 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 3318 "@wordpress/workflows" 3319 ); 3320 3321 // packages/workflow/build-module/components/workflow-menu.js 3322 var import_jsx_runtime17 = __toESM(require_jsx_runtime()); 3323 var css = `/** 3324 * Typography 3325 */ 3326 /** 3327 * SCSS Variables. 3328 * 3329 * Please use variables from this sheet to ensure consistency across the UI. 3330 * Don't add to this sheet unless you're pretty sure the value will be reused in many places. 3331 * For example, don't add rules to this sheet that affect block visuals. It's purely for UI. 3332 */ 3333 /** 3334 * Colors 3335 */ 3336 /** 3337 * Fonts & basic variables. 3338 */ 3339 /** 3340 * Typography 3341 */ 3342 /** 3343 * Grid System. 3344 * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/ 3345 */ 3346 /** 3347 * Radius scale. 3348 */ 3349 /** 3350 * Elevation scale. 3351 */ 3352 /** 3353 * Dimensions. 3354 */ 3355 /** 3356 * Mobile specific styles 3357 */ 3358 /** 3359 * Editor styles. 3360 */ 3361 /** 3362 * Block & Editor UI. 3363 */ 3364 /** 3365 * Block paddings. 3366 */ 3367 /** 3368 * React Native specific. 3369 * These variables do not appear to be used anywhere else. 3370 */ 3371 /** 3372 * Breakpoints & Media Queries 3373 */ 3374 /** 3375 * Converts a hex value into the rgb equivalent. 3376 * 3377 * @param {string} hex - the hexadecimal value to convert 3378 * @return {string} comma separated rgb values 3379 */ 3380 /** 3381 * Long content fade mixin 3382 * 3383 * Creates a fading overlay to signify that the content is longer 3384 * than the space allows. 3385 */ 3386 /** 3387 * Breakpoint mixins 3388 */ 3389 /** 3390 * Focus styles. 3391 */ 3392 /** 3393 * Applies editor left position to the selector passed as argument 3394 */ 3395 /** 3396 * Styles that are reused verbatim in a few places 3397 */ 3398 /** 3399 * Allows users to opt-out of animations via OS-level preferences. 3400 */ 3401 /** 3402 * Reset default styles for JavaScript UI based pages. 3403 * This is a WP-admin agnostic reset 3404 */ 3405 /** 3406 * Reset the WP Admin page styles for Gutenberg-like pages. 3407 */ 3408 :root { 3409 --wp-block-synced-color: #7a00df; 3410 --wp-block-synced-color--rgb: 122, 0, 223; 3411 --wp-bound-block-color: var(--wp-block-synced-color); 3412 --wp-editor-canvas-background: #ddd; 3413 --wp-admin-theme-color: #007cba; 3414 --wp-admin-theme-color--rgb: 0, 124, 186; 3415 --wp-admin-theme-color-darker-10: rgb(0, 107, 160.5); 3416 --wp-admin-theme-color-darker-10--rgb: 0, 107, 160.5; 3417 --wp-admin-theme-color-darker-20: #005a87; 3418 --wp-admin-theme-color-darker-20--rgb: 0, 90, 135; 3419 --wp-admin-border-width-focus: 2px; 3420 } 3421 @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { 3422 :root { 3423 --wp-admin-border-width-focus: 1.5px; 3424 } 3425 } 3426 3427 .workflows-workflow-menu { 3428 border-radius: 4px; 3429 width: calc(100% - 32px); 3430 margin: auto; 3431 max-width: 400px; 3432 position: relative; 3433 top: calc(5% + 64px); 3434 } 3435 @media (min-width: 600px) { 3436 .workflows-workflow-menu { 3437 top: calc(10% + 64px); 3438 } 3439 } 3440 .workflows-workflow-menu .components-modal__content { 3441 margin: 0; 3442 padding: 0; 3443 } 3444 3445 .workflows-workflow-menu__overlay { 3446 display: block; 3447 align-items: start; 3448 } 3449 3450 .workflows-workflow-menu__header { 3451 padding: 0 16px; 3452 } 3453 3454 .workflows-workflow-menu__header-search-icon:dir(ltr) { 3455 transform: scaleX(-1); 3456 } 3457 3458 .workflows-workflow-menu__container { 3459 will-change: transform; 3460 } 3461 .workflows-workflow-menu__container:focus { 3462 outline: none; 3463 } 3464 .workflows-workflow-menu__container [cmdk-input] { 3465 border: none; 3466 width: 100%; 3467 padding: 16px 4px; 3468 outline: none; 3469 color: #1e1e1e; 3470 margin: 0; 3471 font-size: 15px; 3472 line-height: 28px; 3473 border-radius: 0; 3474 } 3475 .workflows-workflow-menu__container [cmdk-input]::placeholder { 3476 color: #757575; 3477 } 3478 .workflows-workflow-menu__container [cmdk-input]:focus { 3479 box-shadow: none; 3480 outline: none; 3481 } 3482 .workflows-workflow-menu__container [cmdk-item] { 3483 border-radius: 2px; 3484 cursor: pointer; 3485 display: flex; 3486 align-items: center; 3487 color: #1e1e1e; 3488 font-size: 13px; 3489 } 3490 .workflows-workflow-menu__container [cmdk-item][aria-selected=true], .workflows-workflow-menu__container [cmdk-item]:active { 3491 background: var(--wp-admin-theme-color); 3492 color: #fff; 3493 } 3494 .workflows-workflow-menu__container [cmdk-item][aria-disabled=true] { 3495 color: #949494; 3496 cursor: not-allowed; 3497 } 3498 .workflows-workflow-menu__container [cmdk-item] > div { 3499 min-height: 40px; 3500 padding: 4px; 3501 padding-left: 16px; 3502 } 3503 .workflows-workflow-menu__container [cmdk-root] > [cmdk-list] { 3504 max-height: 368px; 3505 overflow: auto; 3506 } 3507 .workflows-workflow-menu__container [cmdk-root] > [cmdk-list] [cmdk-list-sizer] > [cmdk-group]:last-child [cmdk-group-items]:not(:empty) { 3508 padding-bottom: 8px; 3509 } 3510 .workflows-workflow-menu__container [cmdk-root] > [cmdk-list] [cmdk-list-sizer] > [cmdk-group] > [cmdk-group-items]:not(:empty) { 3511 padding: 0 8px; 3512 } 3513 .workflows-workflow-menu__container [cmdk-empty] { 3514 display: flex; 3515 align-items: center; 3516 justify-content: center; 3517 white-space: pre-wrap; 3518 color: #1e1e1e; 3519 padding: 8px 0 32px; 3520 } 3521 .workflows-workflow-menu__container [cmdk-loading] { 3522 padding: 16px; 3523 } 3524 .workflows-workflow-menu__container [cmdk-list-sizer] { 3525 position: relative; 3526 } 3527 3528 .workflows-workflow-menu__item span { 3529 display: inline-block; 3530 overflow: hidden; 3531 text-overflow: ellipsis; 3532 white-space: nowrap; 3533 } 3534 3535 .workflows-workflow-menu__item mark { 3536 color: inherit; 3537 background: unset; 3538 font-weight: 600; 3539 } 3540 3541 .workflows-workflow-menu__output { 3542 padding: 16px; 3543 } 3544 3545 .workflows-workflow-menu__output-header { 3546 margin-bottom: 16px; 3547 border-bottom: 1px solid #ddd; 3548 padding-bottom: 8px; 3549 } 3550 .workflows-workflow-menu__output-header h3 { 3551 margin: 0 0 4px; 3552 font-size: 16px; 3553 font-weight: 600; 3554 color: #1e1e1e; 3555 } 3556 3557 .workflows-workflow-menu__output-hint { 3558 margin: 0; 3559 font-size: 12px; 3560 color: #757575; 3561 } 3562 3563 .workflows-workflow-menu__output-content { 3564 max-height: 400px; 3565 overflow: auto; 3566 } 3567 .workflows-workflow-menu__output-content pre { 3568 margin: 0; 3569 padding: 12px; 3570 background: #f0f0f0; 3571 border-radius: 2px; 3572 font-size: 12px; 3573 line-height: 1.5; 3574 white-space: pre-wrap; 3575 word-break: break-word; 3576 color: #1e1e1e; 3577 } 3578 3579 .workflows-workflow-menu__output-error { 3580 padding: 12px; 3581 background: #e0e0e0; 3582 border: 1px solid rgb(158.3684210526, 18.6315789474, 18.6315789474); 3583 border-radius: 2px; 3584 color: #cc1818; 3585 } 3586 .workflows-workflow-menu__output-error p { 3587 margin: 0; 3588 font-size: 13px; 3589 } 3590 3591 .workflows-workflow-menu__executing { 3592 padding: 24px 16px; 3593 color: #757575; 3594 font-size: 14px; 3595 } 3596 /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUvc3ZuL2NoZWNrb3V0cy9kZXZlbG9wLnN2bi53b3JkcHJlc3Mub3JnL3RydW5rL2d1dGVuYmVyZy9wYWNrYWdlcy93b3JrZmxvdy9zcmMvY29tcG9uZW50cyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvYmFzZS1zdHlsZXMvX21peGlucy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvYmFzZS1zdHlsZXMvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvYmFzZS1zdHlsZXMvX2NvbG9ycy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvYmFzZS1zdHlsZXMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9iYXNlLXN0eWxlcy9fZnVuY3Rpb25zLnNjc3MiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9iYXNlLXN0eWxlcy9fbG9uZy1jb250ZW50LWZhZGUuc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2Jhc2Utc3R5bGVzL19kZWZhdWx0LWN1c3RvbS1wcm9wZXJ0aWVzLnNjc3MiLCJ3b3JrZmxvdy1tZW51LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUNBQTtBQUFBO0FBQUE7QURVQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBQUE7QUE2QkE7QUFBQTtBQUFBO0FBQUE7QUFpQkE7QUFBQTtBQUFBO0FBV0E7QUFBQTtBQUFBO0FBZ0JBO0FBQUE7QUFBQTtBQXlCQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFlQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUVuS0E7QUFBQTtBQUFBO0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FMNEVBO0FBQUE7QUFBQTtBQTBEQTtBQUFBO0FBQUE7QUFnREE7QUFBQTtBQUFBO0FBcUNBO0FBQUE7QUFBQTtBQW9CQTtBQUFBO0FBQUE7QUF3TEE7QUFBQTtBQUFBO0FBQUE7QUFnREE7QUFBQTtBQUFBO0FNaGRBO0VBQ0M7RUFDQTtFQUdBO0VBQ0E7RU5zZkE7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBSUE7O0FBQ0E7RU12Z0JEO0lOd2dCRTs7OztBT3hnQkY7RUFDQyxlTjRDYztFTTNDZDtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBUHdHQTtFTzlHRDtJQVNFOzs7QUFHRDtFQUNDO0VBQ0E7OztBQUlGO0VBQ0M7RUFDQTs7O0FBR0Q7RUFDQzs7O0FBSUE7RUFDQzs7O0FBSUY7RUFFQzs7QUFFQTtFQUNDOztBQUdEO0VBQ0M7RUFDQTtFQUNBO0VBQ0E7RUFDQSxPTC9DUztFS2dEVDtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNDLE9McERROztBS3VEVDtFQUNDO0VBQ0E7O0FBSUY7RUFDQyxlTkZhO0VNR2I7RUFDQTtFQUNBO0VBQ0EsT0xwRVM7RUtxRVQsV05uRGlCOztBTXFEakI7RUFFQztFQUNBLE9MbEVLOztBS3FFTjtFQUNDLE9MM0VRO0VLNEVSOztBQUdEO0VBQ0MsWU5PNkI7RU1ON0IsU050Q1k7RU11Q1osY05wQ1k7O0FNd0NkO0VBQ0MsWU5pQm1CO0VNaEJuQjs7QUFHQTtFQUdDLGdCTmxEWTs7QU1xRGI7RUFDQzs7QUFJRjtFQUNDO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsT0w5R1M7RUsrR1Q7O0FBR0Q7RUFDQyxTTmxFYTs7QU1xRWQ7RUFDQzs7O0FBSUY7RUFFQztFQUNBO0VBQ0E7RUFDQTs7O0FBR0Q7RUFDQztFQUNBO0VBQ0E7OztBQUdEO0VBQ0MsU056RmM7OztBTTRGZjtFQUNDLGVON0ZjO0VNOEZkO0VBQ0EsZ0JOakdjOztBTW1HZDtFQUNDO0VBQ0E7RUFDQTtFQUNBLE9MdEpTOzs7QUswSlg7RUFDQztFQUNBO0VBQ0EsT0wzSlU7OztBSzhKWDtFQUNDO0VBQ0E7O0FBRUE7RUFDQztFQUNBLFNOdEhhO0VNdUhiLFlMaEtTO0VLaUtULGVOMUdhO0VNMkdiO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsT0w3S1M7OztBS2lMWDtFQUNDLFNObEljO0VNbUlkLFlMN0tVO0VLOEtWO0VBQ0EsZU52SGM7RU13SGQsT0xyS1c7O0FLdUtYO0VBQ0M7RUFDQTs7O0FBSUY7RUFDQztFQUNBLE9MOUxVO0VLK0xWIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBvZ3JhcGh5XG4gKi9cblxuQHVzZSBcInNhc3M6Y29sb3JcIjtcbkB1c2UgXCJzYXNzOm1hdGhcIjtcbkB1c2UgXCIuL3ZhcmlhYmxlc1wiO1xuQHVzZSBcIi4vY29sb3JzXCI7XG5AdXNlIFwiLi9icmVha3BvaW50c1wiO1xuQHVzZSBcIi4vZnVuY3Rpb25zXCI7XG5AdXNlIFwiLi9sb25nLWNvbnRlbnQtZmFkZVwiO1xuXG5AbWl4aW4gX3RleHQtaGVhZGluZygpIHtcblx0Zm9udC1mYW1pbHk6IHZhcmlhYmxlcy4kZm9udC1mYW1pbHktaGVhZGluZ3M7XG5cdGZvbnQtd2VpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtd2VpZ2h0LW1lZGl1bTtcbn1cblxuQG1peGluIF90ZXh0LWJvZHkoKSB7XG5cdGZvbnQtZmFtaWx5OiB2YXJpYWJsZXMuJGZvbnQtZmFtaWx5LWJvZHk7XG5cdGZvbnQtd2VpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtd2VpZ2h0LXJlZ3VsYXI7XG59XG5cbkBtaXhpbiBoZWFkaW5nLXNtYWxsKCkge1xuXHRAaW5jbHVkZSBfdGV4dC1oZWFkaW5nKCk7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRmb250LXNpemUteC1zbWFsbDtcblx0bGluZS1oZWlnaHQ6IHZhcmlhYmxlcy4kZm9udC1saW5lLWhlaWdodC14LXNtYWxsO1xufVxuXG5AbWl4aW4gaGVhZGluZy1tZWRpdW0oKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWhlYWRpbmcoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS1tZWRpdW07XG5cdGxpbmUtaGVpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtbGluZS1oZWlnaHQtc21hbGw7XG59XG5cbkBtaXhpbiBoZWFkaW5nLWxhcmdlKCkge1xuXHRAaW5jbHVkZSBfdGV4dC1oZWFkaW5nKCk7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRmb250LXNpemUtbGFyZ2U7XG5cdGxpbmUtaGVpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtbGluZS1oZWlnaHQtc21hbGw7XG59XG5cbkBtaXhpbiBoZWFkaW5nLXgtbGFyZ2UoKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWhlYWRpbmcoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS14LWxhcmdlO1xuXHRsaW5lLWhlaWdodDogdmFyaWFibGVzLiRmb250LWxpbmUtaGVpZ2h0LW1lZGl1bTtcbn1cblxuQG1peGluIGhlYWRpbmctMngtbGFyZ2UoKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWhlYWRpbmcoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS0yeC1sYXJnZTtcblx0bGluZS1oZWlnaHQ6IHZhcmlhYmxlcy4kZm9udC1saW5lLWhlaWdodC0yeC1sYXJnZTtcbn1cblxuQG1peGluIGJvZHktc21hbGwoKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWJvZHkoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS1zbWFsbDtcblx0bGluZS1oZWlnaHQ6IHZhcmlhYmxlcy4kZm9udC1saW5lLWhlaWdodC14LXNtYWxsO1xufVxuXG5AbWl4aW4gYm9keS1tZWRpdW0oKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWJvZHkoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS1tZWRpdW07XG5cdGxpbmUtaGVpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtbGluZS1oZWlnaHQtc21hbGw7XG59XG5cbkBtaXhpbiBib2R5LWxhcmdlKCkge1xuXHRAaW5jbHVkZSBfdGV4dC1ib2R5KCk7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRmb250LXNpemUtbGFyZ2U7XG5cdGxpbmUtaGVpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtbGluZS1oZWlnaHQtbWVkaXVtO1xufVxuXG5AbWl4aW4gYm9keS14LWxhcmdlKCkge1xuXHRAaW5jbHVkZSBfdGV4dC1ib2R5KCk7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRmb250LXNpemUteC1sYXJnZTtcblx0bGluZS1oZWlnaHQ6IHZhcmlhYmxlcy4kZm9udC1saW5lLWhlaWdodC14LWxhcmdlO1xufVxuXG4vKipcbiAqIEJyZWFrcG9pbnQgbWl4aW5zXG4gKi9cblxuQG1peGluIGJyZWFrLXhodWdlKCkge1xuXHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay14aHVnZSkgfSkge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cbkBtaXhpbiBicmVhay1odWdlKCkge1xuXHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay1odWdlKSB9KSB7XG5cdFx0QGNvbnRlbnQ7XG5cdH1cbn1cblxuQG1peGluIGJyZWFrLXdpZGUoKSB7XG5cdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLXdpZGUpIH0pIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuXG5AbWl4aW4gYnJlYWsteGxhcmdlKCkge1xuXHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay14bGFyZ2UpIH0pIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuXG5AbWl4aW4gYnJlYWstbGFyZ2UoKSB7XG5cdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLWxhcmdlKSB9KSB7XG5cdFx0QGNvbnRlbnQ7XG5cdH1cbn1cblxuQG1peGluIGJyZWFrLW1lZGl1bSgpIHtcblx0QG1lZGlhIChtaW4td2lkdGg6ICN7IChicmVha3BvaW50cy4kYnJlYWstbWVkaXVtKSB9KSB7XG5cdFx0QGNvbnRlbnQ7XG5cdH1cbn1cblxuQG1peGluIGJyZWFrLXNtYWxsKCkge1xuXHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay1zbWFsbCkgfSkge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cbkBtaXhpbiBicmVhay1tb2JpbGUoKSB7XG5cdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLW1vYmlsZSkgfSkge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cbkBtaXhpbiBicmVhay16b29tZWQtaW4oKSB7XG5cdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLXpvb21lZC1pbikgfSkge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cbi8qKlxuICogRm9jdXMgc3R5bGVzLlxuICovXG5cbkBtaXhpbiBibG9jay10b29sYmFyLWJ1dHRvbi1zdHlsZV9fZm9jdXMoKSB7XG5cdGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoIGNvbG9ycy4kd2hpdGUsIDAgMCAwIHZhcigtLXdwLWFkbWluLWJvcmRlci13aWR0aC1mb2N1cykgdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpO1xuXG5cdC8vIFdpbmRvd3MgSGlnaCBDb250cmFzdCBtb2RlIHdpbGwgc2hvdyB0aGlzIG91dGxpbmUsIGJ1dCBub3QgdGhlIGJveC1zaGFkb3cuXG5cdG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLy8gVGFicywgSW5wdXRzLCBTcXVhcmUgYnV0dG9ucy5cbkBtaXhpbiBpbnB1dC1zdHlsZV9fbmV1dHJhbCgpIHtcblx0Ym94LXNoYWRvdzogMCAwIDAgdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci1yYWRpdXM6IHZhcmlhYmxlcy4kcmFkaXVzLXNtYWxsO1xuXHRib3JkZXI6IHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoIHNvbGlkIGNvbG9ycy4kZ3JheS02MDA7XG5cblx0QG1lZGlhIG5vdCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikge1xuXHRcdHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4xcyBsaW5lYXI7XG5cdH1cbn1cblxuXG5AbWl4aW4gaW5wdXQtc3R5bGVfX2ZvY3VzKCRhY2NlbnQtY29sb3I6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKSkge1xuXHRib3JkZXItY29sb3I6ICRhY2NlbnQtY29sb3I7XG5cdC8vIEV4cGFuZCB0aGUgZGVmYXVsdCBib3JkZXIgZm9jdXMgc3R5bGUgYnkgLjVweCB0byBiZSBhIHRvdGFsIG9mIDEuNXB4LlxuXHRib3gtc2hhZG93OiAwIDAgMCAwLjVweCAkYWNjZW50LWNvbG9yO1xuXHQvLyBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZSB3aWxsIHNob3cgdGhpcyBvdXRsaW5lLCBidXQgbm90IHRoZSBib3gtc2hhZG93LlxuXHRvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbkBtaXhpbiBidXR0b24tc3R5bGVfX2ZvY3VzKCkge1xuXHRib3gtc2hhZG93OiAwIDAgMCB2YXIoLS13cC1hZG1pbi1ib3JkZXItd2lkdGgtZm9jdXMpIHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblxuXHQvLyBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZSB3aWxsIHNob3cgdGhpcyBvdXRsaW5lLCBidXQgbm90IHRoZSBib3gtc2hhZG93LlxuXHRvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cblxuQG1peGluIGJ1dHRvbi1zdHlsZS1vdXRzZXRfX2ZvY3VzKCRmb2N1cy1jb2xvcikge1xuXHRib3gtc2hhZG93OiAwIDAgMCB2YXIoLS13cC1hZG1pbi1ib3JkZXItd2lkdGgtZm9jdXMpIGNvbG9ycy4kd2hpdGUsIDAgMCAwIGNhbGMoMiAqIHZhcigtLXdwLWFkbWluLWJvcmRlci13aWR0aC1mb2N1cykpICRmb2N1cy1jb2xvcjtcblxuXHQvLyBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZSB3aWxsIHNob3cgdGhpcyBvdXRsaW5lLCBidXQgbm90IHRoZSBib3gtc2hhZG93LlxuXHRvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cblxuLyoqXG4gKiBBcHBsaWVzIGVkaXRvciBsZWZ0IHBvc2l0aW9uIHRvIHRoZSBzZWxlY3RvciBwYXNzZWQgYXMgYXJndW1lbnRcbiAqL1xuXG5AbWl4aW4gZWRpdG9yLWxlZnQoJHNlbGVjdG9yKSB7XG5cdCN7JHNlbGVjdG9yfSB7IC8qIFNldCBsZWZ0IHBvc2l0aW9uIHdoZW4gYXV0by1mb2xkIGlzIG5vdCBvbiB0aGUgYm9keSBlbGVtZW50LiAqL1xuXHRcdGxlZnQ6IDA7XG5cblx0XHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay1tZWRpdW0gKyAxKSB9KSB7XG5cdFx0XHRsZWZ0OiB2YXJpYWJsZXMuJGFkbWluLXNpZGViYXItd2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0LmF1dG8tZm9sZCAjeyRzZWxlY3Rvcn0geyAvKiBBdXRvIGZvbGQgaXMgd2hlbiBvbiBzbWFsbGVyIGJyZWFrcG9pbnRzLCBuYXYgbWVudSBhdXRvIGNvbGxhcHNlcy4gKi9cblx0XHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay1tZWRpdW0gKyAxKSB9KSB7XG5cdFx0XHRsZWZ0OiB2YXJpYWJsZXMuJGFkbWluLXNpZGViYXItd2lkdGgtY29sbGFwc2VkO1xuXHRcdH1cblxuXHRcdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLWxhcmdlICsgMSkgfSkge1xuXHRcdFx0bGVmdDogdmFyaWFibGVzLiRhZG1pbi1zaWRlYmFyLXdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdC8qIFNpZGViYXIgbWFudWFsbHkgY29sbGFwc2VkLiAqL1xuXHQuZm9sZGVkICN7JHNlbGVjdG9yfSB7XG5cdFx0bGVmdDogMDtcblxuXHRcdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLW1lZGl1bSArIDEpIH0pIHtcblx0XHRcdGxlZnQ6IHZhcmlhYmxlcy4kYWRtaW4tc2lkZWJhci13aWR0aC1jb2xsYXBzZWQ7XG5cdFx0fVxuXHR9XG5cblx0Ym9keS5pcy1mdWxsc2NyZWVuLW1vZGUgI3skc2VsZWN0b3J9IHtcblx0XHRsZWZ0OiAwICFpbXBvcnRhbnQ7XG5cdH1cbn1cblxuLyoqXG4gKiBTdHlsZXMgdGhhdCBhcmUgcmV1c2VkIHZlcmJhdGltIGluIGEgZmV3IHBsYWNlc1xuICovXG5cbi8vIFRoZXNlIGFyZSBhZGRpdGlvbmFsIHN0eWxlcyBmb3IgYWxsIGNhcHRpb25zLCB3aGVuIHRoZSB0aGVtZSBvcHRzIGluIHRvIGJsb2NrIHN0eWxlcy5cbkBtaXhpbiBjYXB0aW9uLXN0eWxlKCkge1xuXHRtYXJnaW4tdG9wOiAwLjVlbTtcblx0bWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG5AbWl4aW4gY2FwdGlvbi1zdHlsZS10aGVtZSgpIHtcblx0Y29sb3I6ICM1NTU7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRkZWZhdWx0LWZvbnQtc2l6ZTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdC5pcy1kYXJrLXRoZW1lICYge1xuXHRcdGNvbG9yOiBjb2xvcnMuJGxpZ2h0LWdyYXktcGxhY2Vob2xkZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBBbGxvd3MgdXNlcnMgdG8gb3B0LW91dCBvZiBhbmltYXRpb25zIHZpYSBPUy1sZXZlbCBwcmVmZXJlbmNlcy5cbiAqL1xuXG5AbWl4aW4gcmVkdWNlLW1vdGlvbigkcHJvcGVydHk6IFwiXCIpIHtcblxuXHRAaWYgJHByb3BlcnR5ID09IFwidHJhbnNpdGlvblwiIHtcblx0XHRAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuXHRcdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMHM7XG5cdFx0XHR0cmFuc2l0aW9uLWRlbGF5OiAwcztcblx0XHR9XG5cdH0gQGVsc2UgaWYgJHByb3BlcnR5ID09IFwiYW5pbWF0aW9uXCIge1xuXHRcdEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG5cdFx0XHRhbmltYXRpb24tZHVyYXRpb246IDFtcztcblx0XHRcdGFuaW1hdGlvbi1kZWxheTogMHM7XG5cdFx0fVxuXHR9IEBlbHNlIHtcblx0XHRAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuXHRcdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMHM7XG5cdFx0XHR0cmFuc2l0aW9uLWRlbGF5OiAwcztcblx0XHRcdGFuaW1hdGlvbi1kdXJhdGlvbjogMW1zO1xuXHRcdFx0YW5pbWF0aW9uLWRlbGF5OiAwcztcblx0XHR9XG5cdH1cbn1cblxuQG1peGluIGlucHV0LWNvbnRyb2woJGFjY2VudC1jb2xvcjogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpKSB7XG5cdGZvbnQtZmFtaWx5OiB2YXJpYWJsZXMuJGRlZmF1bHQtZm9udDtcblx0cGFkZGluZzogNnB4IDhweDtcblx0LyogRm9udHMgc21hbGxlciB0aGFuIDE2cHggY2F1c2VzIG1vYmlsZSBzYWZhcmkgdG8gem9vbS4gKi9cblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJG1vYmlsZS10ZXh0LW1pbi1mb250LXNpemU7XG5cdC8qIE92ZXJyaWRlIGNvcmUgbGluZS1oZWlnaHQuIFRvIGJlIHJldmlld2VkLiAqL1xuXHRsaW5lLWhlaWdodDogbm9ybWFsO1xuXHRAaW5jbHVkZSBpbnB1dC1zdHlsZV9fbmV1dHJhbCgpO1xuXG5cdEBpbmNsdWRlIGJyZWFrLXNtYWxsIHtcblx0XHRmb250LXNpemU6IHZhcmlhYmxlcy4kZGVmYXVsdC1mb250LXNpemU7XG5cdFx0LyogT3ZlcnJpZGUgY29yZSBsaW5lLWhlaWdodC4gVG8gYmUgcmV2aWV3ZWQuICovXG5cdFx0bGluZS1oZWlnaHQ6IG5vcm1hbDtcblx0fVxuXG5cdCY6Zm9jdXMge1xuXHRcdEBpbmNsdWRlIGlucHV0LXN0eWxlX19mb2N1cygkYWNjZW50LWNvbG9yKTtcblx0fVxuXG5cdC8vIFVzZSBvcGFjaXR5IHRvIHdvcmsgaW4gdmFyaW91cyBlZGl0b3Igc3R5bGVzLlxuXHQmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcblx0XHRjb2xvcjogY29sb3JzLiRkYXJrLWdyYXktcGxhY2Vob2xkZXI7XG5cdH1cblxuXHQmOjotbW96LXBsYWNlaG9sZGVyIHtcblx0XHRjb2xvcjogY29sb3JzLiRkYXJrLWdyYXktcGxhY2Vob2xkZXI7XG5cdH1cblxuXHQmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG5cdFx0Y29sb3I6IGNvbG9ycy4kZGFyay1ncmF5LXBsYWNlaG9sZGVyO1xuXHR9XG59XG5cbkBtaXhpbiBjaGVja2JveC1jb250cm9sIHtcblx0Ym9yZGVyOiB2YXJpYWJsZXMuJGJvcmRlci13aWR0aCBzb2xpZCBjb2xvcnMuJGdyYXktOTAwO1xuXHRtYXJnaW4tcmlnaHQ6IHZhcmlhYmxlcy4kZ3JpZC11bml0LTE1O1xuXHR0cmFuc2l0aW9uOiBub25lO1xuXHRib3JkZXItcmFkaXVzOiB2YXJpYWJsZXMuJHJhZGl1cy1zbWFsbDtcblx0QGluY2x1ZGUgaW5wdXQtY29udHJvbDtcblxuXHQmOmZvY3VzIHtcblx0XHRib3gtc2hhZG93OiAwIDAgMCAodmFyaWFibGVzLiRib3JkZXItd2lkdGggKiAyKSBjb2xvcnMuJHdoaXRlLCAwIDAgMCAodmFyaWFibGVzLiRib3JkZXItd2lkdGggKiAyICsgdmFyaWFibGVzLiRib3JkZXItd2lkdGgtZm9jdXMtZmFsbGJhY2spIHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblxuXHRcdC8vIE9ubHkgdmlzaWJsZSBpbiBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZS5cblx0XHRvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdH1cblxuXHQmOmNoZWNrZWQge1xuXHRcdGJhY2tncm91bmQ6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblx0XHRib3JkZXItY29sb3I6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblxuXHRcdC8vIEhpZGUgZGVmYXVsdCBjaGVja2JveCBzdHlsZXMgaW4gSUUuXG5cdFx0Jjo6LW1zLWNoZWNrIHtcblx0XHRcdG9wYWNpdHk6IDA7XG5cdFx0fVxuXHR9XG5cblx0JjpjaGVja2VkOjpiZWZvcmUsXG5cdCZbYXJpYS1jaGVja2VkPVwibWl4ZWRcIl06OmJlZm9yZSB7XG5cdFx0bWFyZ2luOiAtM3B4IC01cHg7XG5cdFx0Y29sb3I6IGNvbG9ycy4kd2hpdGU7XG5cblx0XHRAaW5jbHVkZSBicmVhay1tZWRpdW0oKSB7XG5cdFx0XHRtYXJnaW46IC00cHggMCAwIC01cHg7XG5cdFx0fVxuXHR9XG5cblx0JlthcmlhLWNoZWNrZWQ9XCJtaXhlZFwiXSB7XG5cdFx0YmFja2dyb3VuZDogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpO1xuXHRcdGJvcmRlci1jb2xvcjogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpO1xuXG5cdFx0Jjo6YmVmb3JlIHtcblx0XHRcdC8vIEluaGVyaXRlZCBmcm9tIGBmb3Jtcy5jc3NgLlxuXHRcdFx0Ly8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL3dvcmRwcmVzcy1kZXZlbG9wL3RyZWUvNS4xLjEvc3JjL3dwLWFkbWluL2Nzcy9mb3Jtcy5jc3MjTDEyMi1MMTMyXG5cdFx0XHRjb250ZW50OiBcIlxcZjQ2MFwiO1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0d2lkdGg6IDE2cHg7XG5cdFx0XHQvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZm9udC1mYW1pbHktbm8tbWlzc2luZy1nZW5lcmljLWZhbWlseS1rZXl3b3JkIC0tIGRhc2hpY29ucyBkb24ndCBuZWVkIGEgZ2VuZXJpYyBmYW1pbHkga2V5d29yZC4gKi9cblx0XHRcdGZvbnQ6IG5vcm1hbCAzMHB4LzEgZGFzaGljb25zO1xuXHRcdFx0c3BlYWs6IG5vbmU7XG5cdFx0XHQtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblx0XHRcdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cblx0XHRcdEBpbmNsdWRlIGJyZWFrLW1lZGl1bSgpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMjFweDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQmW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdLFxuXHQmOmRpc2FibGVkIHtcblx0XHRiYWNrZ3JvdW5kOiBjb2xvcnMuJGdyYXktMTAwO1xuXHRcdGJvcmRlci1jb2xvcjogY29sb3JzLiRncmF5LTMwMDtcblx0XHRjdXJzb3I6IGRlZmF1bHQ7XG5cblx0XHQvLyBPdmVycmlkZSBzdHlsZSBpbmhlcml0ZWQgZnJvbSB3cC1hZG1pbi4gUmVxdWlyZWQgdG8gYXZvaWQgZGVncmFkZWQgYXBwZWFyYW5jZSBvbiBkaWZmZXJlbnQgYmFja2dyb3VuZHMuXG5cdFx0b3BhY2l0eTogMTtcblx0fVxufVxuXG5AbWl4aW4gcmFkaW8tY29udHJvbCB7XG5cdGJvcmRlcjogdmFyaWFibGVzLiRib3JkZXItd2lkdGggc29saWQgY29sb3JzLiRncmF5LTkwMDtcblx0bWFyZ2luLXJpZ2h0OiB2YXJpYWJsZXMuJGdyaWQtdW5pdC0xNTtcblx0dHJhbnNpdGlvbjogbm9uZTtcblx0Ym9yZGVyLXJhZGl1czogdmFyaWFibGVzLiRyYWRpdXMtcm91bmQ7XG5cdHdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemUtc207XG5cdGhlaWdodDogdmFyaWFibGVzLiRyYWRpby1pbnB1dC1zaXplLXNtO1xuXHRtaW4td2lkdGg6IHZhcmlhYmxlcy4kcmFkaW8taW5wdXQtc2l6ZS1zbTtcblx0bWF4LXdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemUtc207XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRAbWVkaWEgbm90IChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKSB7XG5cdFx0dHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjFzIGxpbmVhcjtcblx0fVxuXG5cdEBpbmNsdWRlIGJyZWFrLXNtYWxsKCkge1xuXHRcdGhlaWdodDogdmFyaWFibGVzLiRyYWRpby1pbnB1dC1zaXplO1xuXHRcdHdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemU7XG5cdFx0bWluLXdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemU7XG5cdFx0bWF4LXdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemU7XG5cdH1cblxuXHQmOmNoZWNrZWQ6OmJlZm9yZSB7XG5cdFx0Ym94LXNpemluZzogaW5oZXJpdDtcblx0XHR3aWR0aDogbWF0aC5kaXYodmFyaWFibGVzLiRyYWRpby1pbnB1dC1zaXplLXNtLCAyKTtcblx0XHRoZWlnaHQ6IG1hdGguZGl2KHZhcmlhYmxlcy4kcmFkaW8taW5wdXQtc2l6ZS1zbSwgMik7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogNTAlO1xuXHRcdGxlZnQ6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblx0XHRtYXJnaW46IDA7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogY29sb3JzLiR3aGl0ZTtcblxuXHRcdC8vIFRoaXMgYm9yZGVyIHNlcnZlcyBhcyBhIGJhY2tncm91bmQgY29sb3IgaW4gV2luZG93cyBIaWdoIENvbnRyYXN0IG1vZGUuXG5cdFx0Ym9yZGVyOiA0cHggc29saWQgY29sb3JzLiR3aGl0ZTtcblxuXHRcdEBpbmNsdWRlIGJyZWFrLXNtYWxsKCkge1xuXHRcdFx0d2lkdGg6IG1hdGguZGl2KHZhcmlhYmxlcy4kcmFkaW8taW5wdXQtc2l6ZSwgMik7XG5cdFx0XHRoZWlnaHQ6IG1hdGguZGl2KHZhcmlhYmxlcy4kcmFkaW8taW5wdXQtc2l6ZSwgMik7XG5cdFx0fVxuXHR9XG5cblx0Jjpmb2N1cyB7XG5cdFx0Ym94LXNoYWRvdzogMCAwIDAgKHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoICogMikgY29sb3JzLiR3aGl0ZSwgMCAwIDAgKHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoICogMiArIHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoLWZvY3VzLWZhbGxiYWNrKSB2YXIoLS13cC1hZG1pbi10aGVtZS1jb2xvcik7XG5cblx0XHQvLyBPbmx5IHZpc2libGUgaW4gV2luZG93cyBIaWdoIENvbnRyYXN0IG1vZGUuXG5cdFx0b3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHR9XG5cblx0JjpjaGVja2VkIHtcblx0XHRiYWNrZ3JvdW5kOiB2YXIoLS13cC1hZG1pbi10aGVtZS1jb2xvcik7XG5cdFx0Ym9yZGVyOiBub25lO1xuXHR9XG59XG5cbi8qKlxuICogUmVzZXQgZGVmYXVsdCBzdHlsZXMgZm9yIEphdmFTY3JpcHQgVUkgYmFzZWQgcGFnZXMuXG4gKiBUaGlzIGlzIGEgV1AtYWRtaW4gYWdub3N0aWMgcmVzZXRcbiAqL1xuXG5AbWl4aW4gcmVzZXQge1xuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG5cdCosXG5cdCo6OmJlZm9yZSxcblx0Kjo6YWZ0ZXIge1xuXHRcdGJveC1zaXppbmc6IGluaGVyaXQ7XG5cdH1cbn1cblxuQG1peGluIGxpbmstcmVzZXQge1xuXHQmOmZvY3VzIHtcblx0XHRjb2xvcjogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3ItLXJnYik7XG5cdFx0Ym94LXNoYWRvdzogMCAwIDAgdmFyKC0td3AtYWRtaW4tYm9yZGVyLXdpZHRoLWZvY3VzKSB2YXIoLS13cC1hZG1pbi10aGVtZS1jb2xvciwgIzAwN2NiYSk7XG5cdFx0Ym9yZGVyLXJhZGl1czogdmFyaWFibGVzLiRyYWRpdXMtc21hbGw7XG5cdH1cbn1cblxuLy8gVGhlIGVkaXRvciBpbnB1dCByZXNldCB3aXRoIGluY3JlYXNlZCBzcGVjaWZpY2l0eSB0byBhdm9pZCB0aGVtZSBzdHlsZXMgYmxlZWRpbmcgaW4uXG5AbWl4aW4gZWRpdG9yLWlucHV0LXJlc2V0KCkge1xuXHRmb250LWZhbWlseTogdmFyaWFibGVzLiRlZGl0b3ItaHRtbC1mb250ICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiBjb2xvcnMuJGdyYXktOTAwICFpbXBvcnRhbnQ7XG5cdGJhY2tncm91bmQ6IGNvbG9ycy4kd2hpdGUgIWltcG9ydGFudDtcblx0cGFkZGluZzogdmFyaWFibGVzLiRncmlkLXVuaXQtMTUgIWltcG9ydGFudDtcblx0Ym9yZGVyOiB2YXJpYWJsZXMuJGJvcmRlci13aWR0aCBzb2xpZCBjb2xvcnMuJGdyYXktOTAwICFpbXBvcnRhbnQ7XG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcblx0Ym9yZGVyLXJhZGl1czogdmFyaWFibGVzLiRyYWRpdXMtc21hbGwgIWltcG9ydGFudDtcblxuXHQvLyBGb250cyBzbWFsbGVyIHRoYW4gMTZweCBjYXVzZXMgbW9iaWxlIHNhZmFyaSB0byB6b29tLlxuXHRmb250LXNpemU6IHZhcmlhYmxlcy4kbW9iaWxlLXRleHQtbWluLWZvbnQtc2l6ZSAhaW1wb3J0YW50O1xuXHRAaW5jbHVkZSBicmVhay1zbWFsbCB7XG5cdFx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGRlZmF1bHQtZm9udC1zaXplICFpbXBvcnRhbnQ7XG5cdH1cblxuXHQmOmZvY3VzIHtcblx0XHRib3JkZXItY29sb3I6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKSAhaW1wb3J0YW50O1xuXHRcdGJveC1zaGFkb3c6IDAgMCAwICh2YXJpYWJsZXMuJGJvcmRlci13aWR0aC1mb2N1cy1mYWxsYmFjayAtIHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoKSB2YXIoLS13cC1hZG1pbi10aGVtZS1jb2xvcikgIWltcG9ydGFudDtcblxuXHRcdC8vIFdpbmRvd3MgSGlnaCBDb250cmFzdCBtb2RlIHdpbGwgc2hvdyB0aGlzIG91dGxpbmUsIGJ1dCBub3QgdGhlIGJveC1zaGFkb3cuXG5cdFx0b3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXNldCB0aGUgV1AgQWRtaW4gcGFnZSBzdHlsZXMgZm9yIEd1dGVuYmVyZy1saWtlIHBhZ2VzLlxuICovXG5cbkBtaXhpbiB3cC1hZG1pbi1yZXNldCggJGNvbnRlbnQtY29udGFpbmVyICkge1xuXHRiYWNrZ3JvdW5kOiBjb2xvcnMuJHdoaXRlO1xuXG5cdCN3cGNvbnRlbnQge1xuXHRcdHBhZGRpbmctbGVmdDogMDtcblx0fVxuXG5cdCN3cGJvZHktY29udGVudCB7XG5cdFx0cGFkZGluZy1ib3R0b206IDA7XG5cdH1cblxuXHQvKiBXZSBoaWRlIGxlZ2FjeSBub3RpY2VzIGluIEd1dGVuYmVyZyBCYXNlZCBQYWdlcywgYmVjYXVzZSB0aGV5IHdlcmUgbm90IGRlc2lnbmVkIGluIGEgd2F5IHRoYXQgc2NhbGVkIHdlbGwuXG5cdCAgIFBsdWdpbnMgY2FuIHVzZSBHdXRlbmJlcmcgbm90aWNlcyBpZiB0aGV5IG5lZWQgdG8gcGFzcyBvbiBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB3aGVuIHRoZXkgYXJlIGVkaXRpbmcuICovXG5cdCN3cGJvZHktY29udGVudCA+IGRpdjpub3QoI3sgJGNvbnRlbnQtY29udGFpbmVyIH0pOm5vdCgjc2NyZWVuLW1ldGEpIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0I3dwZm9vdGVyIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0LmExMXktc3BlYWstcmVnaW9uIHtcblx0XHRsZWZ0OiAtMXB4O1xuXHRcdHRvcDogLTFweDtcblx0fVxuXG5cdHVsI2FkbWlubWVudSBhLndwLWhhcy1jdXJyZW50LXN1Ym1lbnU6OmFmdGVyLFxuXHR1bCNhZG1pbm1lbnUgPiBsaS5jdXJyZW50ID4gYS5jdXJyZW50OjphZnRlciB7XG5cdFx0Ym9yZGVyLXJpZ2h0LWNvbG9yOiBjb2xvcnMuJHdoaXRlO1xuXHR9XG5cblx0Lm1lZGlhLWZyYW1lIHNlbGVjdC5hdHRhY2htZW50LWZpbHRlcnM6bGFzdC1vZi10eXBlIHtcblx0XHR3aWR0aDogYXV0bztcblx0XHRtYXgtd2lkdGg6IDEwMCU7XG5cdH1cbn1cblxuQG1peGluIGFkbWluLXNjaGVtZSgkY29sb3ItcHJpbWFyeSkge1xuXHQvLyBEZWZpbmUgUkdCIGVxdWl2YWxlbnRzIGZvciB1c2UgaW4gcmdiYSBmdW5jdGlvbi5cblx0Ly8gSGV4YWRlY2ltYWwgY3NzIHZhcnMgZG8gbm90IHdvcmsgaW4gdGhlIHJnYmEgZnVuY3Rpb24uXG5cdC0td3AtYWRtaW4tdGhlbWUtY29sb3I6ICN7JGNvbG9yLXByaW1hcnl9O1xuXHQtLXdwLWFkbWluLXRoZW1lLWNvbG9yLS1yZ2I6ICN7ZnVuY3Rpb25zLmhleC10by1yZ2IoJGNvbG9yLXByaW1hcnkpfTtcblx0Ly8gRGFya2VyIHNoYWRlcy5cblx0LS13cC1hZG1pbi10aGVtZS1jb2xvci1kYXJrZXItMTA6ICN7Y29sb3IuYWRqdXN0KCRjb2xvci1wcmltYXJ5LCAkbGlnaHRuZXNzOiAtNSUpfTtcblx0LS13cC1hZG1pbi10aGVtZS1jb2xvci1kYXJrZXItMTAtLXJnYjogI3tmdW5jdGlvbnMuaGV4LXRvLXJnYihjb2xvci5hZGp1c3QoJGNvbG9yLXByaW1hcnksICRsaWdodG5lc3M6IC01JSkpfTtcblx0LS13cC1hZG1pbi10aGVtZS1jb2xvci1kYXJrZXItMjA6ICN7Y29sb3IuYWRqdXN0KCRjb2xvci1wcmltYXJ5LCAkbGlnaHRuZXNzOiAtMTAlKX07XG5cdC0td3AtYWRtaW4tdGhlbWUtY29sb3ItZGFya2VyLTIwLS1yZ2I6ICN7ZnVuY3Rpb25zLmhleC10by1yZ2IoY29sb3IuYWRqdXN0KCRjb2xvci1wcmltYXJ5LCAkbGlnaHRuZXNzOiAtMTAlKSl9O1xuXG5cdC8vIEZvY3VzIHN0eWxlIHdpZHRoLlxuXHQvLyBBdm9pZCByb3VuZGluZyBpc3N1ZXMgYnkgc2hvd2luZyBhIHdob2xlIDJweCBmb3IgMXggc2NyZWVucywgYW5kIDEuNXB4IG9uIGhpZ2ggcmVzb2x1dGlvbiBzY3JlZW5zLlxuXHQtLXdwLWFkbWluLWJvcmRlci13aWR0aC1mb2N1czogMnB4O1xuXHRAbWVkaWEgKCAtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLXJlc29sdXRpb246IDE5MmRwaSkge1xuXHRcdC0td3AtYWRtaW4tYm9yZGVyLXdpZHRoLWZvY3VzOiAxLjVweDtcblx0fVxufVxuXG5AbWl4aW4gd29yZHByZXNzLWFkbWluLXNjaGVtZXMoKSB7XG5cdGJvZHkuYWRtaW4tY29sb3ItbGlnaHQge1xuXHRcdEBpbmNsdWRlIGFkbWluLXNjaGVtZSgjMDA4NWJhKTtcblx0fVxuXG5cdGJvZHkuYWRtaW4tY29sb3ItbW9kZXJuIHtcblx0XHRAaW5jbHVkZSBhZG1pbi1zY2hlbWUoIzM4NThlOSk7XG5cdH1cblxuXHRib2R5LmFkbWluLWNvbG9yLWJsdWUge1xuXHRcdEBpbmNsdWRlIGFkbWluLXNjaGVtZSgjMDk2NDg0KTtcblx0fVxuXG5cdGJvZHkuYWRtaW4tY29sb3ItY29mZmVlIHtcblx0XHRAaW5jbHVkZSBhZG1pbi1zY2hlbWUoIzQ2NDAzYyk7XG5cdH1cblxuXHRib2R5LmFkbWluLWNvbG9yLWVjdG9wbGFzbSB7XG5cdFx0QGluY2x1ZGUgYWRtaW4tc2NoZW1lKCM1MjNmNmQpO1xuXHR9XG5cblx0Ym9keS5hZG1pbi1jb2xvci1taWRuaWdodCB7XG5cdFx0QGluY2x1ZGUgYWRtaW4tc2NoZW1lKCNlMTRkNDMpO1xuXHR9XG5cblx0Ym9keS5hZG1pbi1jb2xvci1vY2VhbiB7XG5cdFx0QGluY2x1ZGUgYWRtaW4tc2NoZW1lKCM2MjdjODMpO1xuXHR9XG5cblx0Ym9keS5hZG1pbi1jb2xvci1zdW5yaXNlIHtcblx0XHRAaW5jbHVkZSBhZG1pbi1zY2hlbWUoI2RkODIzYik7XG5cdH1cbn1cblxuLy8gRGVwcmVjYXRlZCBmcm9tIFVJLCBrZXB0IGZvciBiYWNrLWNvbXBhdC5cbkBtaXhpbiBiYWNrZ3JvdW5kLWNvbG9ycy1kZXByZWNhdGVkKCkge1xuXHQuaGFzLXZlcnktbGlnaHQtZ3JheS1iYWNrZ3JvdW5kLWNvbG9yIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuXHR9XG5cblx0Lmhhcy12ZXJ5LWRhcmstZ3JheS1iYWNrZ3JvdW5kLWNvbG9yIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMzEzMTMxO1xuXHR9XG59XG5cbi8vIERlcHJlY2F0ZWQgZnJvbSBVSSwga2VwdCBmb3IgYmFjay1jb21wYXQuXG5AbWl4aW4gZm9yZWdyb3VuZC1jb2xvcnMtZGVwcmVjYXRlZCgpIHtcblx0Lmhhcy12ZXJ5LWxpZ2h0LWdyYXktY29sb3Ige1xuXHRcdGNvbG9yOiAjZWVlO1xuXHR9XG5cblx0Lmhhcy12ZXJ5LWRhcmstZ3JheS1jb2xvciB7XG5cdFx0Y29sb3I6ICMzMTMxMzE7XG5cdH1cbn1cblxuLy8gRGVwcmVjYXRlZCBmcm9tIFVJLCBrZXB0IGZvciBiYWNrLWNvbXBhdC5cbkBtaXhpbiBncmFkaWVudC1jb2xvcnMtZGVwcmVjYXRlZCgpIHtcblx0Ly8gT3VyIGNsYXNzZXMgdXNlcyB0aGUgc2FtZSB2YWx1ZXMgd2Ugc2V0IGZvciBncmFkaWVudCB2YWx1ZSBhdHRyaWJ1dGVzLlxuXG5cdC8qIHN0eWxlbGludC1kaXNhYmxlIEBzdHlsaXN0aWMvZnVuY3Rpb24tY29tbWEtc3BhY2UtYWZ0ZXIgLS0gV2UgY2FuIG5vdCB1c2Ugc3BhY2luZyBiZWNhdXNlIG9mIFdQIG11bHRpIHNpdGUga3NlcyBydWxlLiAqL1xuXHQuaGFzLXZpdmlkLWdyZWVuLWN5YW4tdG8tdml2aWQtY3lhbi1ibHVlLWdyYWRpZW50LWJhY2tncm91bmQge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiYSgwLDIwOCwxMzIsMSkgMCUscmdiYSg2LDE0NywyMjcsMSkgMTAwJSk7XG5cdH1cblxuXHQuaGFzLXB1cnBsZS1jcnVzaC1ncmFkaWVudC1iYWNrZ3JvdW5kIHtcblx0XHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYig1MiwyMjYsMjI4KSAwJSxyZ2IoNzEsMzMsMjUxKSA1MCUscmdiKDE3MSwyOSwyNTQpIDEwMCUpO1xuXHR9XG5cblx0Lmhhcy1oYXp5LWRhd24tZ3JhZGllbnQtYmFja2dyb3VuZCB7XG5cdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMjUwLDE3MiwxNjgpIDAlLHJnYigyMTgsMjA4LDIzNikgMTAwJSk7XG5cdH1cblxuXHQuaGFzLXN1YmR1ZWQtb2xpdmUtZ3JhZGllbnQtYmFja2dyb3VuZCB7XG5cdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMjUwLDI1MCwyMjUpIDAlLHJnYigxMDMsMTY2LDExMykgMTAwJSk7XG5cdH1cblxuXHQuaGFzLWF0b21pYy1jcmVhbS1ncmFkaWVudC1iYWNrZ3JvdW5kIHtcblx0XHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyNTMsMjE1LDE1NCkgMCUscmdiKDAsNzQsODkpIDEwMCUpO1xuXHR9XG5cblx0Lmhhcy1uaWdodHNoYWRlLWdyYWRpZW50LWJhY2tncm91bmQge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDUxLDksMTA0KSAwJSxyZ2IoNDksMjA1LDIwNykgMTAwJSk7XG5cdH1cblxuXHQuaGFzLW1pZG5pZ2h0LWdyYWRpZW50LWJhY2tncm91bmQge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDIsMywxMjkpIDAlLHJnYig0MCwxMTYsMjUyKSAxMDAlKTtcblx0fVxuXHQvKiBzdHlsZWxpbnQtZW5hYmxlIEBzdHlsaXN0aWMvZnVuY3Rpb24tY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbn1cblxuQG1peGluIGN1c3RvbS1zY3JvbGxiYXJzLW9uLWhvdmVyKCRoYW5kbGUtY29sb3IsICRoYW5kbGUtY29sb3ItaG92ZXIpIHtcblxuXHQvLyBXZWJLaXRcblx0Jjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuXHRcdHdpZHRoOiAxMnB4O1xuXHRcdGhlaWdodDogMTJweDtcblx0fVxuXHQmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cdH1cblx0Jjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRoYW5kbGUtY29sb3I7XG5cdFx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRcdGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHRcdGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG5cdH1cblx0Jjpob3Zlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsIC8vIFRoaXMgbmVlZHMgc3BlY2lmaWNpdHkuXG5cdCY6Zm9jdXM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuXHQmOmZvY3VzLXdpdGhpbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRoYW5kbGUtY29sb3ItaG92ZXI7XG5cdH1cblxuXHQvLyBGaXJlZm94IDEwOSsgYW5kIENocm9tZSAxMTErXG5cdHNjcm9sbGJhci13aWR0aDogdGhpbjtcblx0c2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlIGJvdGgtZWRnZXM7XG5cdHNjcm9sbGJhci1jb2xvcjogJGhhbmRsZS1jb2xvciB0cmFuc3BhcmVudDsgLy8gU3ludGF4LCBcImRhcmtcIiwgXCJsaWdodFwiLCBvciBcIiNoYW5kbGUtY29sb3IgI3RyYWNrLWNvbG9yXCJcblxuXHQmOmhvdmVyLFxuXHQmOmZvY3VzLFxuXHQmOmZvY3VzLXdpdGhpbiB7XG5cdFx0c2Nyb2xsYmFyLWNvbG9yOiAkaGFuZGxlLWNvbG9yLWhvdmVyIHRyYW5zcGFyZW50O1xuXHR9XG5cblx0Ly8gTmVlZGVkIHRvIGZpeCBhIFNhZmFyaSByZW5kZXJpbmcgaXNzdWUuXG5cdHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG5cblx0Ly8gQWx3YXlzIHNob3cgc2Nyb2xsYmFyIG9uIE1vYmlsZSBkZXZpY2VzLlxuXHRAbWVkaWEgKGhvdmVyOiBub25lKSB7XG5cdFx0JiB7XG5cdFx0XHRzY3JvbGxiYXItY29sb3I6ICRoYW5kbGUtY29sb3ItaG92ZXIgdHJhbnNwYXJlbnQ7XG5cdFx0fVxuXHR9XG59XG5cbkBtaXhpbiBzZWxlY3RlZC1ibG9jay1vdXRsaW5lKCR3aWR0aFJhdGlvOiAxKSB7XG5cdG91dGxpbmUtY29sb3I6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblx0b3V0bGluZS1zdHlsZTogc29saWQ7XG5cdG91dGxpbmUtd2lkdGg6IGNhbGMoI3skd2lkdGhSYXRpb30gKiAodmFyKC0td3AtYWRtaW4tYm9yZGVyLXdpZHRoLWZvY3VzKSAvIHZhcigtLXdwLWJsb2NrLWVkaXRvci1pZnJhbWUtem9vbS1vdXQtc2NhbGUsIDEpKSk7XG5cdG91dGxpbmUtb2Zmc2V0OiBjYWxjKCN7JHdpZHRoUmF0aW99ICogKCgtMSAqIHZhcigtLXdwLWFkbWluLWJvcmRlci13aWR0aC1mb2N1cykgKSAvIHZhcigtLXdwLWJsb2NrLWVkaXRvci1pZnJhbWUtem9vbS1vdXQtc2NhbGUsIDEpKSk7XG59XG5cbkBtaXhpbiBzZWxlY3RlZC1ibG9jay1mb2N1cygkd2lkdGhSYXRpbzogMSkge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xuXHR0b3A6IDA7XG5cdHJpZ2h0OiAwO1xuXHRib3R0b206IDA7XG5cdGxlZnQ6IDA7XG5cdEBpbmNsdWRlIHNlbGVjdGVkLWJsb2NrLW91dGxpbmUoJHdpZHRoUmF0aW8pO1xufVxuIiwiLyoqXG4gKiBTQ1NTIFZhcmlhYmxlcy5cbiAqXG4gKiBQbGVhc2UgdXNlIHZhcmlhYmxlcyBmcm9tIHRoaXMgc2hlZXQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgVUkuXG4gKiBEb24ndCBhZGQgdG8gdGhpcyBzaGVldCB1bmxlc3MgeW91J3JlIHByZXR0eSBzdXJlIHRoZSB2YWx1ZSB3aWxsIGJlIHJldXNlZCBpbiBtYW55IHBsYWNlcy5cbiAqIEZvciBleGFtcGxlLCBkb24ndCBhZGQgcnVsZXMgdG8gdGhpcyBzaGVldCB0aGF0IGFmZmVjdCBibG9jayB2aXN1YWxzLiBJdCdzIHB1cmVseSBmb3IgVUkuXG4gKi9cblxuQHVzZSBcIi4vY29sb3JzXCI7XG5cbi8qKlxuICogRm9udHMgJiBiYXNpYyB2YXJpYWJsZXMuXG4gKi9cblxuJGRlZmF1bHQtZm9udDogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmOyAvLyBUb2RvOiBkZXByZWNhdGUgaW4gZmF2b3Igb2YgJGZhbWlseSB2YXJpYWJsZXNcbiRkZWZhdWx0LWxpbmUtaGVpZ2h0OiAxLjQ7IC8vIFRvZG86IGRlcHJlY2F0ZSBpbiBmYXZvciBvZiAkbGluZS1oZWlnaHQgdG9rZW5zXG5cbi8qKlxuICogVHlwb2dyYXBoeVxuICovXG5cbi8vIFNpemVzXG4kZm9udC1zaXplLXgtc21hbGw6IDExcHg7XG4kZm9udC1zaXplLXNtYWxsOiAxMnB4O1xuJGZvbnQtc2l6ZS1tZWRpdW06IDEzcHg7XG4kZm9udC1zaXplLWxhcmdlOiAxNXB4O1xuJGZvbnQtc2l6ZS14LWxhcmdlOiAyMHB4O1xuJGZvbnQtc2l6ZS0yeC1sYXJnZTogMzJweDtcblxuLy8gTGluZSBoZWlnaHRzXG4kZm9udC1saW5lLWhlaWdodC14LXNtYWxsOiAxNnB4O1xuJGZvbnQtbGluZS1oZWlnaHQtc21hbGw6IDIwcHg7XG4kZm9udC1saW5lLWhlaWdodC1tZWRpdW06IDI0cHg7XG4kZm9udC1saW5lLWhlaWdodC1sYXJnZTogMjhweDtcbiRmb250LWxpbmUtaGVpZ2h0LXgtbGFyZ2U6IDMycHg7XG4kZm9udC1saW5lLWhlaWdodC0yeC1sYXJnZTogNDBweDtcblxuLy8gV2VpZ2h0c1xuJGZvbnQtd2VpZ2h0LXJlZ3VsYXI6IDQwMDtcbiRmb250LXdlaWdodC1tZWRpdW06IDQ5OTsgLy8gZW5zdXJlcyBmYWxsYmFjayB0byA0MDAgKGluc3RlYWQgb2YgNjAwKVxuXG4vLyBGYW1pbGllc1xuJGZvbnQtZmFtaWx5LWhlYWRpbmdzOiAtYXBwbGUtc3lzdGVtLCBcInN5c3RlbS11aVwiLCBcIlNlZ29lIFVJXCIsIFJvYm90bywgT3h5Z2VuLVNhbnMsIFVidW50dSwgQ2FudGFyZWxsLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktYm9keTogLWFwcGxlLXN5c3RlbSwgXCJzeXN0ZW0tdWlcIiwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LW1vbm86IE1lbmxvLCBDb25zb2xhcywgbW9uYWNvLCBtb25vc3BhY2U7XG5cbi8qKlxuICogR3JpZCBTeXN0ZW0uXG4gKiBodHRwczovL21ha2Uud29yZHByZXNzLm9yZy9kZXNpZ24vMjAxOS8xMC8zMS9wcm9wb3NhbC1hLWNvbnNpc3RlbnQtc3BhY2luZy1zeXN0ZW0tZm9yLXdvcmRwcmVzcy9cbiAqL1xuXG4kZ3JpZC11bml0OiA4cHg7XG4kZ3JpZC11bml0LTA1OiAwLjUgKiAkZ3JpZC11bml0O1x0Ly8gNHB4XG4kZ3JpZC11bml0LTEwOiAxICogJGdyaWQtdW5pdDtcdFx0Ly8gOHB4XG4kZ3JpZC11bml0LTE1OiAxLjUgKiAkZ3JpZC11bml0O1x0Ly8gMTJweFxuJGdyaWQtdW5pdC0yMDogMiAqICRncmlkLXVuaXQ7XHRcdC8vIDE2cHhcbiRncmlkLXVuaXQtMzA6IDMgKiAkZ3JpZC11bml0O1x0XHQvLyAyNHB4XG4kZ3JpZC11bml0LTQwOiA0ICogJGdyaWQtdW5pdDtcdFx0Ly8gMzJweFxuJGdyaWQtdW5pdC01MDogNSAqICRncmlkLXVuaXQ7XHRcdC8vIDQwcHhcbiRncmlkLXVuaXQtNjA6IDYgKiAkZ3JpZC11bml0O1x0XHQvLyA0OHB4XG4kZ3JpZC11bml0LTcwOiA3ICogJGdyaWQtdW5pdDtcdFx0Ly8gNTZweFxuJGdyaWQtdW5pdC04MDogOCAqICRncmlkLXVuaXQ7XHRcdC8vIDY0cHhcblxuLyoqXG4gKiBSYWRpdXMgc2NhbGUuXG4gKi9cblxuJHJhZGl1cy14LXNtYWxsOiAxcHg7ICAgLy8gQXBwbGllZCB0byBlbGVtZW50cyBsaWtlIGJ1dHRvbnMgbmVzdGVkIHdpdGhpbiBwcmltaXRpdmVzIGxpa2UgaW5wdXRzLlxuJHJhZGl1cy1zbWFsbDogMnB4OyAgICAgLy8gQXBwbGllZCB0byBtb3N0IHByaW1pdGl2ZXMuXG4kcmFkaXVzLW1lZGl1bTogNHB4OyAgICAvLyBBcHBsaWVkIHRvIGNvbnRhaW5lcnMgd2l0aCBzbWFsbGVyIHBhZGRpbmcuXG4kcmFkaXVzLWxhcmdlOiA4cHg7ICAgICAvLyBBcHBsaWVkIHRvIGNvbnRhaW5lcnMgd2l0aCBsYXJnZXIgcGFkZGluZy5cbiRyYWRpdXMtZnVsbDogOTk5OXB4OyAgIC8vIEZvciBwaWxscy5cbiRyYWRpdXMtcm91bmQ6IDUwJTsgICAgIC8vIEZvciBjaXJjbGVzIGFuZCBvdmFscy5cblxuLyoqXG4gKiBFbGV2YXRpb24gc2NhbGUuXG4gKi9cblxuLy8gRm9yIHNlY3Rpb25zIGFuZCBjb250YWluZXJzIHRoYXQgZ3JvdXAgcmVsYXRlZCBjb250ZW50IGFuZCBjb250cm9scywgd2hpY2ggbWF5IG92ZXJsYXAgb3RoZXIgY29udGVudC4gRXhhbXBsZTogUHJldmlldyBGcmFtZS5cbiRlbGV2YXRpb24teC1zbWFsbDogMCAxcHggMXB4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wMyksIDAgMXB4IDJweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDIpLCAwIDNweCAzcHggcmdiYShjb2xvcnMuJGJsYWNrLCAwLjAyKSwgMCA0cHggNHB4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wMSk7XG5cbi8vIEZvciBjb21wb25lbnRzIHRoYXQgcHJvdmlkZSBjb250ZXh0dWFsIGZlZWRiYWNrIHdpdGhvdXQgYmVpbmcgaW50cnVzaXZlLiBHZW5lcmFsbHkgbm9uLWludGVycnVwdGl2ZS4gRXhhbXBsZTogVG9vbHRpcHMsIFNuYWNrYmFyLlxuJGVsZXZhdGlvbi1zbWFsbDogMCAxcHggMnB4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wNSksIDAgMnB4IDNweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDQpLCAwIDZweCA2cHggcmdiYShjb2xvcnMuJGJsYWNrLCAwLjAzKSwgMCA4cHggOHB4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wMik7XG5cbi8vIEZvciBjb21wb25lbnRzIHRoYXQgb2ZmZXIgYWRkaXRpb25hbCBhY3Rpb25zLiBFeGFtcGxlOiBNZW51cywgQ29tbWFuZCBQYWxldHRlXG4kZWxldmF0aW9uLW1lZGl1bTogMCAycHggM3B4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wNSksIDAgNHB4IDVweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDQpLCAwIDEycHggMTJweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDMpLCAwIDE2cHggMTZweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDIpO1xuXG4vLyBGb3IgY29tcG9uZW50cyB0aGF0IGNvbmZpcm0gZGVjaXNpb25zIG9yIGhhbmRsZSBuZWNlc3NhcnkgaW50ZXJydXB0aW9ucy4gRXhhbXBsZTogTW9kYWxzLlxuJGVsZXZhdGlvbi1sYXJnZTogMCA1cHggMTVweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDgpLCAwIDE1cHggMjdweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDcpLCAwIDMwcHggMzZweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDQpLCAwIDUwcHggNDNweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDIpO1xuXG4vKipcbiAqIERpbWVuc2lvbnMuXG4gKi9cblxuJGljb24tc2l6ZTogMjRweDtcbiRidXR0b24tc2l6ZTogMzZweDtcbiRidXR0b24tc2l6ZS1uZXh0LWRlZmF1bHQtNDBweDogNDBweDsgLy8gdHJhbnNpdGlvbmFyeSB2YXJpYWJsZSBmb3IgbmV4dCBkZWZhdWx0IGJ1dHRvbiBzaXplXG4kYnV0dG9uLXNpemUtc21hbGw6IDI0cHg7XG4kYnV0dG9uLXNpemUtY29tcGFjdDogMzJweDtcbiRoZWFkZXItaGVpZ2h0OiA2NHB4O1xuJHBhbmVsLWhlYWRlci1oZWlnaHQ6ICRncmlkLXVuaXQtNjA7XG4kbmF2LXNpZGViYXItd2lkdGg6IDMwMHB4O1xuJGFkbWluLWJhci1oZWlnaHQ6IDMycHg7XG4kYWRtaW4tYmFyLWhlaWdodC1iaWc6IDQ2cHg7XG4kYWRtaW4tc2lkZWJhci13aWR0aDogMTYwcHg7XG4kYWRtaW4tc2lkZWJhci13aWR0aC1iaWc6IDE5MHB4O1xuJGFkbWluLXNpZGViYXItd2lkdGgtY29sbGFwc2VkOiAzNnB4O1xuJG1vZGFsLW1pbi13aWR0aDogMzUwcHg7XG4kbW9kYWwtd2lkdGgtc21hbGw6IDM4NHB4O1xuJG1vZGFsLXdpZHRoLW1lZGl1bTogNTEycHg7XG4kbW9kYWwtd2lkdGgtbGFyZ2U6IDg0MHB4O1xuJHNwaW5uZXItc2l6ZTogMTZweDtcbiRjYW52YXMtcGFkZGluZzogJGdyaWQtdW5pdC0yMDtcbiRwYWxldHRlLW1heC1oZWlnaHQ6IDM2OHB4O1xuXG4vKipcbiAqIE1vYmlsZSBzcGVjaWZpYyBzdHlsZXNcbiAqL1xuJG1vYmlsZS10ZXh0LW1pbi1mb250LXNpemU6IDE2cHg7IC8vIEFueSBmb250IHNpemUgYmVsb3cgMTZweCB3aWxsIGNhdXNlIE1vYmlsZSBTYWZhcmkgdG8gXCJ6b29tIGluXCIuXG5cbi8qKlxuICogRWRpdG9yIHN0eWxlcy5cbiAqL1xuXG4kc2lkZWJhci13aWR0aDogMjgwcHg7XG4kY29udGVudC13aWR0aDogODQwcHg7XG4kd2lkZS1jb250ZW50LXdpZHRoOiAxMTAwcHg7XG4kd2lkZ2V0LWFyZWEtd2lkdGg6IDcwMHB4O1xuJHNlY29uZGFyeS1zaWRlYmFyLXdpZHRoOiAzNTBweDtcbiRlZGl0b3ItZm9udC1zaXplOiAxNnB4O1xuJGRlZmF1bHQtYmxvY2stbWFyZ2luOiAyOHB4OyAvLyBUaGlzIHZhbHVlIHByb3ZpZGVzIGEgY29uc2lzdGVudCwgY29udGlndW91cyBzcGFjaW5nIGJldHdlZW4gYmxvY2tzLlxuJHRleHQtZWRpdG9yLWZvbnQtc2l6ZTogMTVweDtcbiRlZGl0b3ItbGluZS1oZWlnaHQ6IDEuODtcbiRlZGl0b3ItaHRtbC1mb250OiAkZm9udC1mYW1pbHktbW9ubztcblxuLyoqXG4gKiBCbG9jayAmIEVkaXRvciBVSS5cbiAqL1xuXG4kYmxvY2stdG9vbGJhci1oZWlnaHQ6ICRncmlkLXVuaXQtNjA7XG4kYm9yZGVyLXdpZHRoOiAxcHg7XG4kYm9yZGVyLXdpZHRoLWZvY3VzLWZhbGxiYWNrOiAycHg7IC8vIFRoaXMgZXhpc3RzIGFzIGEgZmFsbGJhY2ssIGFuZCBpcyBpZGVhbGx5IG92ZXJyaWRkZW4gYnkgdmFyKC0td3AtYWRtaW4tYm9yZGVyLXdpZHRoLWZvY3VzKSB1bmxlc3MgaW4gc29tZSBTQVNTIG1hdGggY2FzZXMuXG4kYm9yZGVyLXdpZHRoLXRhYjogMS41cHg7XG4kaGVscHRleHQtZm9udC1zaXplOiAxMnB4O1xuJHJhZGlvLWlucHV0LXNpemU6IDE2cHg7XG4kcmFkaW8taW5wdXQtc2l6ZS1zbTogMjRweDsgLy8gV2lkdGggJiBoZWlnaHQgZm9yIHNtYWxsIHZpZXdwb3J0cy5cblxuLy8gRGVwcmVjYXRlZCwgcGxlYXNlIGF2b2lkIHVzaW5nIHRoZXNlLlxuJGJsb2NrLXBhZGRpbmc6IDE0cHg7IC8vIFVzZWQgdG8gZGVmaW5lIHNwYWNlIGJldHdlZW4gYmxvY2sgZm9vdHByaW50IGFuZCBzdXJyb3VuZGluZyBib3JkZXJzLlxuJHJhZGl1cy1ibG9jay11aTogJHJhZGl1cy1zbWFsbDtcbiRzaGFkb3ctcG9wb3ZlcjogJGVsZXZhdGlvbi14LXNtYWxsO1xuJHNoYWRvdy1tb2RhbDogJGVsZXZhdGlvbi1sYXJnZTtcbiRkZWZhdWx0LWZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1tZWRpdW07XG5cbi8qKlxuICogQmxvY2sgcGFkZGluZ3MuXG4gKi9cblxuLy8gUGFkZGluZyBmb3IgYmxvY2tzIHdpdGggYSBiYWNrZ3JvdW5kIGNvbG9yIChlLmcuIHBhcmFncmFwaCBvciBncm91cCkuXG4kYmxvY2stYmctcGFkZGluZy0tdjogMS4yNWVtO1xuJGJsb2NrLWJnLXBhZGRpbmctLWg6IDIuMzc1ZW07XG5cblxuLyoqXG4gKiBSZWFjdCBOYXRpdmUgc3BlY2lmaWMuXG4gKiBUaGVzZSB2YXJpYWJsZXMgZG8gbm90IGFwcGVhciB0byBiZSB1c2VkIGFueXdoZXJlIGVsc2UuXG4gKi9cblxuLy8gRGltZW5zaW9ucy5cbiRtb2JpbGUtaGVhZGVyLXRvb2xiYXItaGVpZ2h0OiA0NHB4O1xuJG1vYmlsZS1oZWFkZXItdG9vbGJhci1leHBhbmRlZC1oZWlnaHQ6IDUycHg7XG4kbW9iaWxlLWZsb2F0aW5nLXRvb2xiYXItaGVpZ2h0OiA0NHB4O1xuJG1vYmlsZS1mbG9hdGluZy10b29sYmFyLW1hcmdpbjogOHB4O1xuJG1vYmlsZS1jb2xvci1zd2F0Y2g6IDQ4cHg7XG5cbi8vIEJsb2NrIFVJLlxuJG1vYmlsZS1ibG9jay10b29sYmFyLWhlaWdodDogNDRweDtcbiRkaW1tZWQtb3BhY2l0eTogMTtcbiRibG9jay1lZGdlLXRvLWNvbnRlbnQ6IDE2cHg7XG4kc29saWQtYm9yZGVyLXNwYWNlOiAxMnB4O1xuJGRhc2hlZC1ib3JkZXItc3BhY2U6IDZweDtcbiRibG9jay1zZWxlY3RlZC1tYXJnaW46IDNweDtcbiRibG9jay1zZWxlY3RlZC1ib3JkZXItd2lkdGg6IDFweDtcbiRibG9jay1zZWxlY3RlZC1wYWRkaW5nOiAwO1xuJGJsb2NrLXNlbGVjdGVkLWNoaWxkLW1hcmdpbjogNXB4O1xuJGJsb2NrLXNlbGVjdGVkLXRvLWNvbnRlbnQ6ICRibG9jay1lZGdlLXRvLWNvbnRlbnQgLSAkYmxvY2stc2VsZWN0ZWQtbWFyZ2luIC0gJGJsb2NrLXNlbGVjdGVkLWJvcmRlci13aWR0aDtcbiIsIi8qKlxuICogQ29sb3JzXG4gKi9cblxuLy8gV29yZFByZXNzIGdyYXlzLlxuJGJsYWNrOiAjMDAwO1x0XHRcdC8vIFVzZSBvbmx5IHdoZW4geW91IHRydWx5IG5lZWQgcHVyZSBibGFjay4gRm9yIFVJLCB1c2UgJGdyYXktOTAwLlxuJGdyYXktOTAwOiAjMWUxZTFlO1xuJGdyYXktODAwOiAjMmYyZjJmO1xuJGdyYXktNzAwOiAjNzU3NTc1O1x0XHQvLyBNZWV0cyA0LjY6MSAoNC41OjEgaXMgbWluaW11bSkgdGV4dCBjb250cmFzdCBhZ2FpbnN0IHdoaXRlLlxuJGdyYXktNjAwOiAjOTQ5NDk0O1x0XHQvLyBNZWV0cyAzOjEgVUkgb3IgbGFyZ2UgdGV4dCBjb250cmFzdCBhZ2FpbnN0IHdoaXRlLlxuJGdyYXktNDAwOiAjY2NjO1xuJGdyYXktMzAwOiAjZGRkO1x0XHQvLyBVc2VkIGZvciBtb3N0IGJvcmRlcnMuXG4kZ3JheS0yMDA6ICNlMGUwZTA7XHRcdC8vIFVzZWQgc3BhcmluZ2x5IGZvciBsaWdodCBib3JkZXJzLlxuJGdyYXktMTAwOiAjZjBmMGYwO1x0XHQvLyBVc2VkIGZvciBsaWdodCBncmF5IGJhY2tncm91bmRzLlxuJHdoaXRlOiAjZmZmO1xuXG4vLyBPcGFjaXRpZXMgJiBhZGRpdGlvbmFsIGNvbG9ycy5cbiRkYXJrLWdyYXktcGxhY2Vob2xkZXI6IHJnYmEoJGdyYXktOTAwLCAwLjYyKTtcbiRtZWRpdW0tZ3JheS1wbGFjZWhvbGRlcjogcmdiYSgkZ3JheS05MDAsIDAuNTUpO1xuJGxpZ2h0LWdyYXktcGxhY2Vob2xkZXI6IHJnYmEoJHdoaXRlLCAwLjY1KTtcblxuLy8gQWxlcnQgY29sb3JzLlxuJGFsZXJ0LXllbGxvdzogI2YwYjg0OTtcbiRhbGVydC1yZWQ6ICNjYzE4MTg7XG4kYWxlcnQtZ3JlZW46ICM0YWI4NjY7XG5cbi8vIERlcHJlY2F0ZWQsIHBsZWFzZSBhdm9pZCB1c2luZyB0aGVzZS5cbiRkYXJrLXRoZW1lLWZvY3VzOiAkd2hpdGU7XHQvLyBGb2N1cyBjb2xvciB3aGVuIHRoZSB0aGVtZSBpcyBkYXJrLlxuIiwiLyoqXG4gKiBCcmVha3BvaW50cyAmIE1lZGlhIFF1ZXJpZXNcbiAqL1xuXG4vLyBNb3N0IHVzZWQgYnJlYWtwb2ludHNcbiRicmVhay14aHVnZTogMTkyMHB4O1xuJGJyZWFrLWh1Z2U6IDE0NDBweDtcbiRicmVhay13aWRlOiAxMjgwcHg7XG4kYnJlYWsteGxhcmdlOiAxMDgwcHg7XG4kYnJlYWstbGFyZ2U6IDk2MHB4O1x0Ly8gYWRtaW4gc2lkZWJhciBhdXRvIGZvbGRzXG4kYnJlYWstbWVkaXVtOiA3ODJweDtcdC8vIGFkbWluYmFyIGdvZXMgYmlnXG4kYnJlYWstc21hbGw6IDYwMHB4O1xuJGJyZWFrLW1vYmlsZTogNDgwcHg7XG4kYnJlYWstem9vbWVkLWluOiAyODBweDtcblxuLy8gQWxsIG1lZGlhIHF1ZXJpZXMgY3VycmVudGx5IGluIFdvcmRQcmVzczpcbi8vXG4vLyBtaW4td2lkdGg6IDIwMDBweFxuLy8gbWluLXdpZHRoOiAxNjgwcHhcbi8vIG1pbi13aWR0aDogMTI1MHB4XG4vLyBtYXgtd2lkdGg6IDExMjBweCAqXG4vLyBtYXgtd2lkdGg6IDEwMDBweFxuLy8gbWluLXdpZHRoOiA3NjlweCBhbmQgbWF4LXdpZHRoOiAxMDAwcHhcbi8vIG1heC13aWR0aDogOTYwcHggKlxuLy8gbWF4LXdpZHRoOiA5MDBweFxuLy8gbWF4LXdpZHRoOiA4NTBweFxuLy8gbWluLXdpZHRoOiA4MDBweCBhbmQgbWF4LXdpZHRoOiAxNDk5cHhcbi8vIG1heC13aWR0aDogODAwcHhcbi8vIG1heC13aWR0aDogNzk5cHhcbi8vIG1heC13aWR0aDogNzgycHggKlxuLy8gbWF4LXdpZHRoOiA3NjhweFxuLy8gbWF4LXdpZHRoOiA2NDBweCAqXG4vLyBtYXgtd2lkdGg6IDYwMHB4ICpcbi8vIG1heC13aWR0aDogNTIwcHhcbi8vIG1heC13aWR0aDogNTAwcHhcbi8vIG1heC13aWR0aDogNDgwcHggKlxuLy8gbWF4LXdpZHRoOiA0MDBweCAqXG4vLyBtYXgtd2lkdGg6IDM4MHB4XG4vLyBtYXgtd2lkdGg6IDMyMHB4ICpcbi8vXG4vLyBUaG9zZSBtYXJrZWQgKiBzZWVtIHRvIGJlIG1vcmUgY29tbW9ubHkgdXNlZCB0aGFuIHRoZSBvdGhlcnMuXG4vLyBMZXQncyB0cnkgYW5kIHVzZSBhcyBmZXcgb2YgdGhlc2UgYXMgcG9zc2libGUsIGFuZCBiZSBtaW5kZnVsIGFib3V0IGFkZGluZyBuZXcgb25lcywgc28gd2UgZG9uJ3QgbWFrZSB0aGUgc2l0dWF0aW9uIHdvcnNlXG4iLCIvKipcbiogIENvbnZlcnRzIGEgaGV4IHZhbHVlIGludG8gdGhlIHJnYiBlcXVpdmFsZW50LlxuKlxuKiBAcGFyYW0ge3N0cmluZ30gaGV4IC0gdGhlIGhleGFkZWNpbWFsIHZhbHVlIHRvIGNvbnZlcnRcbiogQHJldHVybiB7c3RyaW5nfSBjb21tYSBzZXBhcmF0ZWQgcmdiIHZhbHVlc1xuKi9cblxuQHVzZSBcInNhc3M6Y29sb3JcIjtcbkB1c2UgXCJzYXNzOm1ldGFcIjtcblxuQGZ1bmN0aW9uIGhleC10by1yZ2IoJGhleCkge1xuXHQvKlxuXHQgKiBUT0RPOiBgY29sb3Iue3JlZHxncmVlbnxibHVlfWAgd2lsbCB0cmlnZ2VyIGEgZGVwcmVjYXRpb24gd2FybmluZyBpbiBEYXJ0IFNhc3MsXG5cdCAqIGJ1dCB0aGUgU2FzcyB1c2VkIGJ5IHRoZSBHdXRlbmJlcmcgcHJvamVjdCBkb2Vzbid0IHN1cHBvcnQgYGNvbG9yLmNoYW5uZWwoKWAgeWV0LFxuXHQgKiBzbyB3ZSBjYW4ndCBtaWdyYXRlIHRvIGl0IGF0IHRoaXMgdGltZS5cblx0ICogSW4gdGhlIGZ1dHVyZSwgYWZ0ZXIgdGhlIEd1dGVuYmVyZyBwcm9qZWN0IGhhcyBiZWVuIGZ1bGx5IG1pZ3JhdGVkIHRvIERhcnQgU2Fzcyxcblx0ICogUmVtb3ZlIHRoaXMgY29uZGl0aW9uYWwgc3RhdGVtZW50IGFuZCB1c2Ugb25seSBgY29sb3IuY2hhbm5lbCgpYC5cblx0ICovXG5cdEBpZiBtZXRhLmZ1bmN0aW9uLWV4aXN0cyhcImNoYW5uZWxcIiwgXCJjb2xvclwiKSB7XG5cdFx0QHJldHVybiBjb2xvci5jaGFubmVsKCRoZXgsIFwicmVkXCIpLCBjb2xvci5jaGFubmVsKCRoZXgsIFwiZ3JlZW5cIiksIGNvbG9yLmNoYW5uZWwoJGhleCwgXCJibHVlXCIpO1xuXHR9IEBlbHNlIHtcblx0XHRAcmV0dXJuIGNvbG9yLnJlZCgkaGV4KSwgY29sb3IuZ3JlZW4oJGhleCksIGNvbG9yLmJsdWUoJGhleCk7XG5cdH1cbn1cbiIsIi8qKlxuICogTG9uZyBjb250ZW50IGZhZGUgbWl4aW5cbiAqXG4gKiBDcmVhdGVzIGEgZmFkaW5nIG92ZXJsYXkgdG8gc2lnbmlmeSB0aGF0IHRoZSBjb250ZW50IGlzIGxvbmdlclxuICogdGhhbiB0aGUgc3BhY2UgYWxsb3dzLlxuICovXG5cbkBtaXhpbiBsb25nLWNvbnRlbnQtZmFkZSgkZGlyZWN0aW9uOiByaWdodCwgJHNpemU6IDIwJSwgJGNvbG9yOiAjZmZmLCAkZWRnZTogMCwgJHotaW5kZXg6IGZhbHNlKSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcblx0LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcblx0LWtodG1sLXVzZXItc2VsZWN0OiBub25lO1xuXHQtbW96LXVzZXItc2VsZWN0OiBub25lO1xuXHQtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG5cdHVzZXItc2VsZWN0OiBub25lO1xuXHRwb2ludGVyLWV2ZW50czogbm9uZTtcblxuXHRAaWYgJHotaW5kZXgge1xuXHRcdHotaW5kZXg6ICR6LWluZGV4O1xuXHR9XG5cblx0QGlmICRkaXJlY3Rpb24gPT0gXCJib3R0b21cIiB7XG5cdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgdHJhbnNwYXJlbnQsICRjb2xvciA5MCUpO1xuXHRcdGxlZnQ6ICRlZGdlO1xuXHRcdHJpZ2h0OiAkZWRnZTtcblx0XHR0b3A6ICRlZGdlO1xuXHRcdGJvdHRvbTogY2FsYygxMDAlIC0gJHNpemUpO1xuXHRcdHdpZHRoOiBhdXRvO1xuXHR9XG5cblx0QGlmICRkaXJlY3Rpb24gPT0gXCJ0b3BcIiB7XG5cdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsICRjb2xvciA5MCUpO1xuXHRcdHRvcDogY2FsYygxMDAlIC0gJHNpemUpO1xuXHRcdGxlZnQ6ICRlZGdlO1xuXHRcdHJpZ2h0OiAkZWRnZTtcblx0XHRib3R0b206ICRlZGdlO1xuXHRcdHdpZHRoOiBhdXRvO1xuXHR9XG5cblx0QGlmICRkaXJlY3Rpb24gPT0gXCJsZWZ0XCIge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCB0cmFuc3BhcmVudCwgJGNvbG9yIDkwJSk7XG5cdFx0dG9wOiAkZWRnZTtcblx0XHRsZWZ0OiAkZWRnZTtcblx0XHRib3R0b206ICRlZGdlO1xuXHRcdHJpZ2h0OiBhdXRvO1xuXHRcdHdpZHRoOiAkc2l6ZTtcblx0XHRoZWlnaHQ6IGF1dG87XG5cdH1cblxuXHRAaWYgJGRpcmVjdGlvbiA9PSBcInJpZ2h0XCIge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsICRjb2xvciA5MCUpO1xuXHRcdHRvcDogJGVkZ2U7XG5cdFx0Ym90dG9tOiAkZWRnZTtcblx0XHRyaWdodDogJGVkZ2U7XG5cdFx0bGVmdDogYXV0bztcblx0XHR3aWR0aDogJHNpemU7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHR9XG59XG4iLCJAdXNlIFwiLi9taXhpbnNcIjtcbkB1c2UgXCIuL2Z1bmN0aW9uc1wiO1xuQHVzZSBcIi4vY29sb3JzXCI7XG5cbi8vIEl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIHRoZXNlIHN0eWxlcyBpbiBhbGwgYnVpbHQgc3R5bGVzaGVldHMuXG4vLyBUaGlzIGFsbG93cyB0byBDU1MgdmFyaWFibGVzIHBvc3QgQ1NTIHBsdWdpbiB0byBnZW5lcmF0ZSBmYWxsYmFja3MuXG4vLyBJdCBhbHNvIHByb3ZpZGVzIGRlZmF1bHQgQ1NTIHZhcmlhYmxlcyBmb3IgbnBtIHBhY2thZ2UgY29uc3VtZXJzLlxuOnJvb3Qge1xuXHQtLXdwLWJsb2NrLXN5bmNlZC1jb2xvcjogIzdhMDBkZjtcblx0LS13cC1ibG9jay1zeW5jZWQtY29sb3ItLXJnYjogI3tmdW5jdGlvbnMuaGV4LXRvLXJnYigjN2EwMGRmKX07XG5cdC8vIFRoaXMgQ1NTIHZhcmlhYmxlIGlzIG5vdCB1c2VkIGluIEd1dGVuYmVyZyBwcm9qZWN0LFxuXHQvLyBidXQgaXMgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdC0td3AtYm91bmQtYmxvY2stY29sb3I6IHZhcigtLXdwLWJsb2NrLXN5bmNlZC1jb2xvcik7XG5cdC0td3AtZWRpdG9yLWNhbnZhcy1iYWNrZ3JvdW5kOiAje2NvbG9ycy4kZ3JheS0zMDB9O1xuXHRAaW5jbHVkZSBtaXhpbnMuYWRtaW4tc2NoZW1lKCMwMDdjYmEpO1xufVxuIiwiQHVzZSBcInNhc3M6Y29sb3JcIjtcbkB1c2UgXCJAd29yZHByZXNzL2Jhc2Utc3R5bGVzL21peGluc1wiIGFzICo7XG5AdXNlIFwiQHdvcmRwcmVzcy9iYXNlLXN0eWxlcy92YXJpYWJsZXNcIiBhcyAqO1xuQHVzZSBcIkB3b3JkcHJlc3MvYmFzZS1zdHlsZXMvY29sb3JzXCIgYXMgKjtcbkB1c2UgXCJAd29yZHByZXNzL2Jhc2Utc3R5bGVzL2RlZmF1bHQtY3VzdG9tLXByb3BlcnRpZXNcIiBhcyAqO1xuXG4vLyBIZXJlIHdlIGV4dGVuZCB0aGUgbW9kYWwgc3R5bGVzIHRvIGJlIHRpZ2h0ZXIsIGFuZCB0byB0aGUgY2VudGVyLiBCZWNhdXNlIHRoZSBwYWxldHRlIHVzZXMgdGhlIG1vZGFsIGFzIGEgY29udGFpbmVyLlxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51IHtcblx0Ym9yZGVyLXJhZGl1czogJGdyaWQtdW5pdC0wNTtcblx0d2lkdGg6IGNhbGMoMTAwJSAtICN7JGdyaWQtdW5pdC00MH0pO1xuXHRtYXJnaW46IGF1dG87XG5cdG1heC13aWR0aDogNDAwcHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0dG9wOiBjYWxjKDUlICsgI3skaGVhZGVyLWhlaWdodH0pO1xuXG5cdEBpbmNsdWRlIGJyZWFrLXNtYWxsKCkge1xuXHRcdHRvcDogY2FsYygxMCUgKyAjeyRoZWFkZXItaGVpZ2h0fSk7XG5cdH1cblxuXHQuY29tcG9uZW50cy1tb2RhbF9fY29udGVudCB7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cbn1cblxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51X19vdmVybGF5IHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGFsaWduLWl0ZW1zOiBzdGFydDtcbn1cblxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51X19oZWFkZXIge1xuXHRwYWRkaW5nOiAwICRncmlkLXVuaXQtMjA7XG59XG5cbi53b3JrZmxvd3Mtd29ya2Zsb3ctbWVudV9faGVhZGVyLXNlYXJjaC1pY29uIHtcblx0JjpkaXIobHRyKSB7XG5cdFx0dHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuXHR9XG59XG5cbi53b3JrZmxvd3Mtd29ya2Zsb3ctbWVudV9fY29udGFpbmVyIHtcblx0Ly8gdGhlIHN0eWxlIGhlcmUgaXMgYSBoYWNrIHRvIGZvcmNlIHNhZmFyaSB0byByZXBhaW50IHRvIGF2b2lkIGEgc3R5bGUgZ2xpdGNoXG5cdHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG5cblx0Jjpmb2N1cyB7XG5cdFx0b3V0bGluZTogbm9uZTtcblx0fVxuXG5cdFtjbWRrLWlucHV0XSB7XG5cdFx0Ym9yZGVyOiBub25lO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdHBhZGRpbmc6ICRncmlkLXVuaXQtMjAgJGdyaWQtdW5pdC0wNTtcblx0XHRvdXRsaW5lOiBub25lO1xuXHRcdGNvbG9yOiAkZ3JheS05MDA7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRsaW5lLWhlaWdodDogMjhweDtcblx0XHRib3JkZXItcmFkaXVzOiAwO1xuXG5cdFx0Jjo6cGxhY2Vob2xkZXIge1xuXHRcdFx0Y29sb3I6ICRncmF5LTcwMDtcblx0XHR9XG5cblx0XHQmOmZvY3VzIHtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRvdXRsaW5lOiBub25lO1xuXHRcdH1cblx0fVxuXG5cdFtjbWRrLWl0ZW1dIHtcblx0XHRib3JkZXItcmFkaXVzOiAkcmFkaXVzLXNtYWxsO1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0Y29sb3I6ICRncmF5LTkwMDtcblx0XHRmb250LXNpemU6ICRkZWZhdWx0LWZvbnQtc2l6ZTtcblxuXHRcdCZbYXJpYS1zZWxlY3RlZD1cInRydWVcIl0sXG5cdFx0JjphY3RpdmUge1xuXHRcdFx0YmFja2dyb3VuZDogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpO1xuXHRcdFx0Y29sb3I6ICR3aGl0ZTtcblx0XHR9XG5cblx0XHQmW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdIHtcblx0XHRcdGNvbG9yOiAkZ3JheS02MDA7XG5cdFx0XHRjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXHRcdH1cblxuXHRcdD4gZGl2IHtcblx0XHRcdG1pbi1oZWlnaHQ6ICRidXR0b24tc2l6ZS1uZXh0LWRlZmF1bHQtNDBweDtcblx0XHRcdHBhZGRpbmc6ICRncmlkLXVuaXQtMDU7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6ICRncmlkLXVuaXQtMjA7XG5cdFx0fVxuXHR9XG5cblx0W2NtZGstcm9vdF0gPiBbY21kay1saXN0XSB7XG5cdFx0bWF4LWhlaWdodDogJHBhbGV0dGUtbWF4LWhlaWdodDsgLy8gU3BlY2lmaWMgdG8gbm90IGhhdmUgd29ya2Zsb3dzIG92ZXJmbG93IG9kZGx5LlxuXHRcdG92ZXJmbG93OiBhdXRvO1xuXG5cdFx0Ly8gRW5zdXJlcyB0aGVyZSBpcyBhbHdheXMgcGFkZGluZyBib3R0b20gb24gdGhlIGxhc3QgZ3JvdXAsIHdoZW4gdGhlcmUgYXJlIHdvcmtmbG93cy5cblx0XHQmXG5cdFx0W2NtZGstbGlzdC1zaXplcl0gPiBbY21kay1ncm91cF06bGFzdC1jaGlsZFxuXHRcdFtjbWRrLWdyb3VwLWl0ZW1zXTpub3QoOmVtcHR5KSB7XG5cdFx0XHRwYWRkaW5nLWJvdHRvbTogJGdyaWQtdW5pdC0xMDtcblx0XHR9XG5cblx0XHQmIFtjbWRrLWxpc3Qtc2l6ZXJdID4gW2NtZGstZ3JvdXBdID4gW2NtZGstZ3JvdXAtaXRlbXNdOm5vdCg6ZW1wdHkpIHtcblx0XHRcdHBhZGRpbmc6IDAgJGdyaWQtdW5pdC0xMDtcblx0XHR9XG5cdH1cblxuXHRbY21kay1lbXB0eV0ge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0XHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG5cdFx0Y29sb3I6ICRncmF5LTkwMDtcblx0XHRwYWRkaW5nOiAkZ3JpZC11bml0LTEwIDAgJGdyaWQtdW5pdC00MDtcblx0fVxuXG5cdFtjbWRrLWxvYWRpbmddIHtcblx0XHRwYWRkaW5nOiAkZ3JpZC11bml0LTIwO1xuXHR9XG5cblx0W2NtZGstbGlzdC1zaXplcl0ge1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0fVxufVxuXG4ud29ya2Zsb3dzLXdvcmtmbG93LW1lbnVfX2l0ZW0gc3BhbiB7XG5cdC8vIEVuc3VyZSB3b3JrZmxvd3MgZG8gbm90IHJ1biBvZmYgdGhlIGVkZ2UgKGdyZWF0IGZvciBwb3N0IHRpdGxlcykuXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi53b3JrZmxvd3Mtd29ya2Zsb3ctbWVudV9faXRlbSBtYXJrIHtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdGJhY2tncm91bmQ6IHVuc2V0O1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4ud29ya2Zsb3dzLXdvcmtmbG93LW1lbnVfX291dHB1dCB7XG5cdHBhZGRpbmc6ICRncmlkLXVuaXQtMjA7XG59XG5cbi53b3JrZmxvd3Mtd29ya2Zsb3ctbWVudV9fb3V0cHV0LWhlYWRlciB7XG5cdG1hcmdpbi1ib3R0b206ICRncmlkLXVuaXQtMjA7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZ3JheS0zMDA7XG5cdHBhZGRpbmctYm90dG9tOiAkZ3JpZC11bml0LTEwO1xuXG5cdGgzIHtcblx0XHRtYXJnaW46IDAgMCAkZ3JpZC11bml0LTA1O1xuXHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdGNvbG9yOiAkZ3JheS05MDA7XG5cdH1cbn1cblxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51X19vdXRwdXQtaGludCB7XG5cdG1hcmdpbjogMDtcblx0Zm9udC1zaXplOiAxMnB4O1xuXHRjb2xvcjogJGdyYXktNzAwO1xufVxuXG4ud29ya2Zsb3dzLXdvcmtmbG93LW1lbnVfX291dHB1dC1jb250ZW50IHtcblx0bWF4LWhlaWdodDogNDAwcHg7XG5cdG92ZXJmbG93OiBhdXRvO1xuXG5cdHByZSB7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHBhZGRpbmc6ICRncmlkLXVuaXQtMTU7XG5cdFx0YmFja2dyb3VuZDogJGdyYXktMTAwO1xuXHRcdGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtc21hbGw7XG5cdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XG5cdFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xuXHRcdHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG5cdFx0Y29sb3I6ICRncmF5LTkwMDtcblx0fVxufVxuXG4ud29ya2Zsb3dzLXdvcmtmbG93LW1lbnVfX291dHB1dC1lcnJvciB7XG5cdHBhZGRpbmc6ICRncmlkLXVuaXQtMTU7XG5cdGJhY2tncm91bmQ6ICRncmF5LTIwMDtcblx0Ym9yZGVyOiAxcHggc29saWQgI3tjb2xvci5hZGp1c3QoICRhbGVydC1yZWQsICRsaWdodG5lc3M6IC0xMCUgKX07XG5cdGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtc21hbGw7XG5cdGNvbG9yOiAkYWxlcnQtcmVkO1xuXG5cdHAge1xuXHRcdG1hcmdpbjogMDtcblx0XHRmb250LXNpemU6IDEzcHg7XG5cdH1cbn1cblxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51X19leGVjdXRpbmcge1xuXHRwYWRkaW5nOiAkZ3JpZC11bml0LTMwICRncmlkLXVuaXQtMjA7XG5cdGNvbG9yOiAkZ3JheS03MDA7XG5cdGZvbnQtc2l6ZTogMTRweDtcbn1cbiJdfQ== */`; 3597 document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css)); 3598 var { withIgnoreIMEEvents } = unlock(import_components.privateApis); 3599 var EMPTY_ARRAY = []; 3600 var inputLabel = (0, import_i18n.__)("Run abilities and workflows"); 3601 function WorkflowInput({ isOpen, search, setSearch, abilities }) { 3602 const workflowMenuInput = (0, import_element2.useRef)(); 3603 const _value = P((state) => state.value); 3604 const selectedItemId = (0, import_element2.useMemo)(() => { 3605 const ability = abilities.find((a) => a.label === _value); 3606 return ability?.name; 3607 }, [_value, abilities]); 3608 (0, import_element2.useEffect)(() => { 3609 if (isOpen) { 3610 workflowMenuInput.current.focus(); 3611 } 3612 }, [isOpen]); 3613 return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 3614 _e.Input, 3615 { 3616 ref: workflowMenuInput, 3617 value: search, 3618 onValueChange: setSearch, 3619 placeholder: inputLabel, 3620 "aria-activedescendant": selectedItemId 3621 } 3622 ); 3623 } 3624 function WorkflowMenu() { 3625 const { registerShortcut } = (0, import_data.useDispatch)(import_keyboard_shortcuts.store); 3626 const [search, setSearch] = (0, import_element2.useState)(""); 3627 const [isOpen, setIsOpen] = (0, import_element2.useState)(false); 3628 const [abilityOutput, setAbilityOutput] = (0, import_element2.useState)(null); 3629 const [isExecuting, setIsExecuting] = (0, import_element2.useState)(false); 3630 const containerRef = (0, import_element2.useRef)(); 3631 const abilities = (0, import_data.useSelect)((select) => { 3632 const allAbilities = select(abilitiesStore).getAbilities(); 3633 return allAbilities || EMPTY_ARRAY; 3634 }, []); 3635 const filteredAbilities = (0, import_element2.useMemo)(() => { 3636 if (!search) { 3637 return abilities; 3638 } 3639 const searchLower = search.toLowerCase(); 3640 return abilities.filter( 3641 (ability) => ability.label?.toLowerCase().includes(searchLower) || ability.name?.toLowerCase().includes(searchLower) 3642 ); 3643 }, [abilities, search]); 3644 (0, import_element2.useEffect)(() => { 3645 if (abilityOutput && containerRef.current) { 3646 containerRef.current.focus(); 3647 } 3648 }, [abilityOutput]); 3649 (0, import_element2.useEffect)(() => { 3650 registerShortcut({ 3651 name: "core/workflows", 3652 category: "global", 3653 description: (0, import_i18n.__)("Open the workflow palette."), 3654 keyCombination: { 3655 modifier: "primary", 3656 character: "j" 3657 } 3658 }); 3659 }, [registerShortcut]); 3660 (0, import_keyboard_shortcuts.useShortcut)( 3661 "core/workflows", 3662 /** @type {import('react').KeyboardEventHandler} */ 3663 withIgnoreIMEEvents((event) => { 3664 if (event.defaultPrevented) { 3665 return; 3666 } 3667 event.preventDefault(); 3668 setIsOpen(!isOpen); 3669 }), 3670 { 3671 bindGlobal: true 3672 } 3673 ); 3674 const closeAndReset = () => { 3675 setSearch(""); 3676 setIsOpen(false); 3677 setAbilityOutput(null); 3678 setIsExecuting(false); 3679 }; 3680 const goBack = () => { 3681 setAbilityOutput(null); 3682 setIsExecuting(false); 3683 setSearch(""); 3684 }; 3685 const handleExecuteAbility = async (ability) => { 3686 setIsExecuting(true); 3687 try { 3688 const result = await executeAbility(ability.name); 3689 setAbilityOutput({ 3690 name: ability.name, 3691 label: ability?.label || ability.name, 3692 description: ability?.description || "", 3693 success: true, 3694 data: result 3695 }); 3696 } catch (error) { 3697 setAbilityOutput({ 3698 name: ability.name, 3699 label: ability?.label || ability.name, 3700 description: ability?.description || "", 3701 success: false, 3702 error: error.message || String(error) 3703 }); 3704 } finally { 3705 setIsExecuting(false); 3706 } 3707 }; 3708 const onContainerKeyDown = (event) => { 3709 if (abilityOutput && (event.key === "Escape" || event.key === "Backspace" || event.key === "Delete")) { 3710 event.preventDefault(); 3711 event.stopPropagation(); 3712 goBack(); 3713 } 3714 }; 3715 if (!isOpen) { 3716 return null; 3717 } 3718 return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 3719 import_components.Modal, 3720 { 3721 className: "workflows-workflow-menu", 3722 overlayClassName: "workflows-workflow-menu__overlay", 3723 onRequestClose: abilityOutput ? goBack : closeAndReset, 3724 __experimentalHideHeader: true, 3725 contentLabel: (0, import_i18n.__)("Workflow palette"), 3726 children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 3727 "div", 3728 { 3729 className: "workflows-workflow-menu__container", 3730 onKeyDown: withIgnoreIMEEvents(onContainerKeyDown), 3731 ref: containerRef, 3732 tabIndex: -1, 3733 role: "presentation", 3734 children: abilityOutput ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "workflows-workflow-menu__output", children: [ 3735 /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "workflows-workflow-menu__output-header", children: [ 3736 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h3", { children: abilityOutput.label }), 3737 abilityOutput.description && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "workflows-workflow-menu__output-hint", children: abilityOutput.description }) 3738 ] }), 3739 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "workflows-workflow-menu__output-content", children: abilityOutput.success ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("pre", { children: JSON.stringify( 3740 abilityOutput.data, 3741 null, 3742 2 3743 ) }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "workflows-workflow-menu__output-error", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { children: abilityOutput.error }) }) }) 3744 ] }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(_e, { label: inputLabel, shouldFilter: false, children: [ 3745 /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_components.__experimentalHStack, { className: "workflows-workflow-menu__header", children: [ 3746 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 3747 icon_default, 3748 { 3749 className: "workflows-workflow-menu__header-search-icon", 3750 icon: search_default 3751 } 3752 ), 3753 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 3754 WorkflowInput, 3755 { 3756 search, 3757 setSearch, 3758 isOpen, 3759 abilities 3760 } 3761 ) 3762 ] }), 3763 /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(_e.List, { label: (0, import_i18n.__)("Workflow suggestions"), children: [ 3764 isExecuting && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 3765 import_components.__experimentalHStack, 3766 { 3767 className: "workflows-workflow-menu__executing", 3768 align: "center", 3769 children: (0, import_i18n.__)("Executing ability\u2026") 3770 } 3771 ), 3772 !isExecuting && search && filteredAbilities.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(_e.Empty, { children: (0, import_i18n.__)("No results found.") }), 3773 !isExecuting && filteredAbilities.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(_e.Group, { children: filteredAbilities.map((ability) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 3774 _e.Item, 3775 { 3776 value: ability.label, 3777 className: "workflows-workflow-menu__item", 3778 onSelect: () => handleExecuteAbility(ability), 3779 id: ability.name, 3780 children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_components.__experimentalHStack, { alignment: "left", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 3781 import_components.TextHighlight, 3782 { 3783 text: ability.label, 3784 highlight: search 3785 } 3786 ) }) }) 3787 }, 3788 ability.name 3789 )) }) 3790 ] }) 3791 ] }) 3792 } 3793 ) 3794 } 3795 ); 3796 } 3797 3798 // packages/workflow/build-module/index.js 3799 var root = document.createElement("div"); 3800 document.body.appendChild(root); 3801 (0, import_element3.createRoot)(root).render((0, import_element3.createElement)(WorkflowMenu));
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Tue May 5 08:20:14 2026 | Cross-referenced by PHPXref |