219 lines
21 KiB
Plaintext
219 lines
21 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/common/TransitioningContents.vue");import {
|
|
waitIntervalUntil,
|
|
timeoutAt,
|
|
WaitIntervalUntilCanceledError,
|
|
TimeoutError,
|
|
TIME_MS
|
|
} from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
|
|
import { until } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
|
|
|
|
import { defineComponent, ref, shallowRef, h } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { useLogger } from "/_nuxt/composables/logging.ts";
|
|
const _sfc_main = defineComponent({
|
|
props: {
|
|
duration: {
|
|
type: Number,
|
|
default: TIME_MS.second
|
|
},
|
|
debug: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
},
|
|
setup(props, { slots, expose }) {
|
|
const logger = useLogger();
|
|
const transitioning = ref(false);
|
|
const newWrapperRef = ref(null);
|
|
const oldWrapperRef = ref(null);
|
|
const newContents = shallowRef(slots.default?.());
|
|
const oldContents = shallowRef(void 0);
|
|
const newOpacity = ref(1);
|
|
const oldOpacity = ref(1);
|
|
const newTransitionEnabled = ref(false);
|
|
const oldTransitionEnabled = ref(false);
|
|
const waitForDomUpdate = async (params) => {
|
|
const { ref: ref2, expectClasses, expectStyle, shouldNotHaveClasses } = params;
|
|
let attempt = 0;
|
|
const promise = waitIntervalUntil(100, () => {
|
|
if (attempt > 20) {
|
|
promise.cancel();
|
|
}
|
|
attempt++;
|
|
const el = ref2.value;
|
|
if (!el) return false;
|
|
if (expectStyle) {
|
|
for (const [key, value] of Object.entries(expectStyle)) {
|
|
if (el.style[key] !== value) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
if (expectClasses) {
|
|
for (const className of expectClasses) {
|
|
if (!el.classList.contains(className)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
if (shouldNotHaveClasses) {
|
|
for (const className of shouldNotHaveClasses) {
|
|
if (el.classList.contains(className)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
try {
|
|
await promise;
|
|
} catch (e) {
|
|
if (e instanceof WaitIntervalUntilCanceledError) {
|
|
if (props.debug) {
|
|
throw e;
|
|
}
|
|
} else {
|
|
throw e;
|
|
}
|
|
}
|
|
};
|
|
const updateContents = async () => {
|
|
transitioning.value = true;
|
|
oldContents.value = newContents.value;
|
|
newContents.value = slots.default?.();
|
|
newTransitionEnabled.value = false;
|
|
newOpacity.value = 0;
|
|
oldTransitionEnabled.value = false;
|
|
oldOpacity.value = 1;
|
|
await Promise.all([
|
|
waitForDomUpdate({
|
|
ref: newWrapperRef,
|
|
expectStyle: { opacity: "0" },
|
|
shouldNotHaveClasses: ["transition-opacity"]
|
|
}),
|
|
waitForDomUpdate({
|
|
ref: oldWrapperRef,
|
|
expectStyle: { opacity: "1" },
|
|
shouldNotHaveClasses: ["transition-opacity"]
|
|
})
|
|
]);
|
|
oldTransitionEnabled.value = newTransitionEnabled.value = true;
|
|
await Promise.all([
|
|
waitForDomUpdate({
|
|
ref: newWrapperRef,
|
|
expectClasses: ["transition-opacity"]
|
|
}),
|
|
waitForDomUpdate({
|
|
ref: oldWrapperRef,
|
|
expectClasses: ["transition-opacity"]
|
|
})
|
|
]);
|
|
newOpacity.value = 1;
|
|
oldOpacity.value = 0;
|
|
await Promise.all([
|
|
waitForDomUpdate({
|
|
ref: newWrapperRef,
|
|
expectStyle: { opacity: "1" }
|
|
}),
|
|
waitForDomUpdate({
|
|
ref: oldWrapperRef,
|
|
expectStyle: { opacity: "0" }
|
|
})
|
|
]);
|
|
};
|
|
const triggerTransition = async () => {
|
|
if (!transitioning.value) {
|
|
await updateContents();
|
|
return;
|
|
}
|
|
try {
|
|
await Promise.race([
|
|
until(transitioning).toBe(false),
|
|
timeoutAt(
|
|
props.duration + TIME_MS.second,
|
|
"Waiting for transition to finish timed out"
|
|
)
|
|
]);
|
|
} catch (e) {
|
|
if (!(e instanceof TimeoutError)) {
|
|
throw e;
|
|
} else {
|
|
logger.warn(e);
|
|
}
|
|
}
|
|
await updateContents();
|
|
};
|
|
const buildItemProps = (params) => {
|
|
const { zIndex, withTransitions, opacity } = params;
|
|
const classParts = ["absolute inset-0"];
|
|
const style = {
|
|
zIndex,
|
|
opacity,
|
|
...withTransitions ? {
|
|
transitionDuration: `${props.duration}ms`
|
|
} : {}
|
|
};
|
|
if (withTransitions) {
|
|
classParts.push("transition-opacity");
|
|
}
|
|
return {
|
|
class: classParts.join(" "),
|
|
style
|
|
};
|
|
};
|
|
expose({
|
|
triggerTransition
|
|
});
|
|
return () => {
|
|
return h("div", { class: "relative" }, [
|
|
h(
|
|
"div",
|
|
{
|
|
...buildItemProps({
|
|
zIndex: 2,
|
|
withTransitions: newTransitionEnabled.value,
|
|
opacity: newOpacity.value
|
|
}),
|
|
ref: newWrapperRef
|
|
},
|
|
[newContents.value]
|
|
),
|
|
...oldContents.value ? [
|
|
h(
|
|
"div",
|
|
{
|
|
...buildItemProps({
|
|
zIndex: 1,
|
|
withTransitions: oldTransitionEnabled.value,
|
|
opacity: oldOpacity.value
|
|
}),
|
|
ref: oldWrapperRef,
|
|
onTransitionend: () => {
|
|
oldContents.value = void 0;
|
|
transitioning.value = false;
|
|
}
|
|
},
|
|
[oldContents.value]
|
|
)
|
|
] : []
|
|
]);
|
|
};
|
|
}
|
|
});
|
|
_sfc_main.__hmrId = "b0b85ad7";
|
|
typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
|
|
import.meta.hot.on("file-changed", ({ file }) => {
|
|
__VUE_HMR_RUNTIME__.CHANGED_FILE = file;
|
|
});
|
|
import.meta.hot.accept((mod) => {
|
|
if (!mod) return;
|
|
const { default: updated, _rerender_only } = mod;
|
|
if (_rerender_only) {
|
|
__VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
|
|
} else {
|
|
__VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
|
|
}
|
|
});
|
|
import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper";
|
|
export default /* @__PURE__ */ Object.assign(_export_sfc(_sfc_main, [["__file", "D:/speckle-server/packages/frontend-2/components/common/TransitioningContents.vue"]]), { __name: "CommonTransitioningContents" });
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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IjpbXSwic291cmNlcyI6WyJUcmFuc2l0aW9uaW5nQ29udGVudHMudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjxzY3JpcHQgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7XHJcbiAgd2FpdEludGVydmFsVW50aWwsXHJcbiAgdHlwZSBOdWxsYWJsZSxcclxuICB0aW1lb3V0QXQsXHJcbiAgV2FpdEludGVydmFsVW50aWxDYW5jZWxlZEVycm9yLFxyXG4gIFRpbWVvdXRFcnJvcixcclxuICBUSU1FX01TXHJcbn0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyB1bnRpbCB9IGZyb20gJ0B2dWV1c2UvY29yZSdcclxuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAndnVlJ1xyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHRoYXQgdHJhbnNpdGlvbnMgYmV0d2VlbiB0d28gc2V0cyBvZiBjb250ZW50cyB3aXRoIGEgY3Jvc3NmYWRlIGVmZmVjdC4gWW91IG9ubHlcclxuICogaGF2ZSB0byB1c2UgYSBzaW5nbGUgc2xvdCAtIHRoZSBjb21wb25lbnQgd2lsbCBub3QgdXBkYXRlIGFueSBjb250ZW50cyBpbnNpZGUgb2YgdGhlIHNsb3RcclxuICogdW50aWwgeW91IGNhbGwgdGhlIGB0cmlnZ2VyVHJhbnNpdGlvbmAgbWV0aG9kLCBhbmQgdGhlbiB0aGUgdXBkYXRlIHdpbGwgaGFwcGVuIHdpdGggYSBzbW9vdGhcclxuICogdHJhbnNpdGlvbi5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbXBvbmVudCh7XHJcbiAgcHJvcHM6IHtcclxuICAgIGR1cmF0aW9uOiB7XHJcbiAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgZGVmYXVsdDogVElNRV9NUy5zZWNvbmRcclxuICAgIH0sXHJcbiAgICBkZWJ1Zzoge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMsIGV4cG9zZSB9KSB7XHJcbiAgICBjb25zdCBsb2dnZXIgPSB1c2VMb2dnZXIoKVxyXG5cclxuICAgIGNvbnN0IHRyYW5zaXRpb25pbmcgPSByZWYoZmFsc2UpXHJcbiAgICBjb25zdCBuZXdXcmFwcGVyUmVmID0gcmVmKG51bGwgYXMgTnVsbGFibGU8SFRNTERpdkVsZW1lbnQ+KVxyXG4gICAgY29uc3Qgb2xkV3JhcHBlclJlZiA9IHJlZihudWxsIGFzIE51bGxhYmxlPEhUTUxEaXZFbGVtZW50PilcclxuXHJcbiAgICBjb25zdCBuZXdDb250ZW50cyA9IHNoYWxsb3dSZWYoc2xvdHMuZGVmYXVsdD8uKCkpXHJcbiAgICBjb25zdCBvbGRDb250ZW50czogdHlwZW9mIG5ld0NvbnRlbnRzID0gc2hhbGxvd1JlZih1bmRlZmluZWQpXHJcblxyXG4gICAgY29uc3QgbmV3T3BhY2l0eSA9IHJlZigxKVxyXG4gICAgY29uc3Qgb2xkT3BhY2l0eSA9IHJlZigxKVxyXG5cclxuICAgIGNvbnN0IG5ld1RyYW5zaXRpb25FbmFibGVkID0gcmVmKGZhbHNlKVxyXG4gICAgY29uc3Qgb2xkVHJhbnNpdGlvbkVuYWJsZWQgPSByZWYoZmFsc2UpXHJcblxyXG4gICAgY29uc3Qgd2FpdEZvckRvbVVwZGF0ZSA9IGFzeW5jIChwYXJhbXM6IHtcclxuICAgICAgcmVmOiBSZWY8TnVsbGFibGU8SFRNTEVsZW1lbnQ+PlxyXG4gICAgICBleHBlY3RTdHlsZT86IFBhcnRpYWw8Q1NTUHJvcGVydGllcz5cclxuICAgICAgZXhwZWN0Q2xhc3Nlcz86IHN0cmluZ1tdXHJcbiAgICAgIHNob3VsZE5vdEhhdmVDbGFzc2VzPzogc3RyaW5nW11cclxuICAgIH0pID0+IHtcclxuICAgICAgY29uc3QgeyByZWYsIGV4cGVjdENsYXNzZXMsIGV4cGVjdFN0eWxlLCBzaG91bGROb3RIYXZlQ2xhc3NlcyB9ID0gcGFyYW1zXHJcblxyXG4gICAgICBsZXQgYXR0ZW1wdCA9IDBcclxuICAgICAgY29uc3QgcHJvbWlzZSA9IHdhaXRJbnRlcnZhbFVudGlsKDEwMCwgKCkgPT4ge1xyXG4gICAgICAgIGlmIChhdHRlbXB0ID4gMjApIHtcclxuICAgICAgICAgIHByb21pc2UuY2FuY2VsKClcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0ZW1wdCsrXHJcblxyXG4gICAgICAgIGNvbnN0IGVsID0gcmVmLnZhbHVlXHJcbiAgICAgICAgaWYgKCFlbCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIGlmIChleHBlY3RTdHlsZSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0U3R5bGUpKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICAgIGlmIChlbC5zdHlsZVtrZXkgYXMgYW55XSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV4cGVjdENsYXNzZXMpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIGV4cGVjdENsYXNzZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2hvdWxkTm90SGF2ZUNsYXNzZXMpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIHNob3VsZE5vdEhhdmVDbGFzc2VzKSB7XHJcbiAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBwcm9taXNlXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFdhaXRJbnRlcnZhbFVudGlsQ2FuY2VsZWRFcnJvcikge1xyXG4gICAgICAgICAgaWYgKHByb3BzLmRlYnVnKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2F1c2UgZGVmYXVsdCBzbG90IHRvIHVwZGF0ZSB3aXRoIGFuIG9wYWNpdHkgdHJhbnNpdGlvblxyXG4gICAgICovXHJcbiAgICBjb25zdCB1cGRhdGVDb250ZW50cyA9IGFzeW5jICgpID0+IHtcclxuICAgICAgdHJhbnNpdGlvbmluZy52YWx1ZSA9IHRydWVcclxuXHJcbiAgICAgIC8vIFN0YWdlIDE6IEp1c3QgbW92ZSBuZXcgLT4gb2xkIHcvbyBhbnkgdHJhbnNpdGlvbnMgKHZpc3VhbGx5IHNob3VsZCBsb29rIHRoZSBzYW1lKVxyXG4gICAgICBvbGRDb250ZW50cy52YWx1ZSA9IG5ld0NvbnRlbnRzLnZhbHVlXHJcbiAgICAgIG5ld0NvbnRlbnRzLnZhbHVlID0gc2xvdHMuZGVmYXVsdD8uKClcclxuXHJcbiAgICAgIG5ld1RyYW5zaXRpb25FbmFibGVkLnZhbHVlID0gZmFsc2VcclxuICAgICAgbmV3T3BhY2l0eS52YWx1ZSA9IDBcclxuXHJcbiAgICAgIG9sZFRyYW5zaXRpb25FbmFibGVkLnZhbHVlID0gZmFsc2VcclxuICAgICAgb2xkT3BhY2l0eS52YWx1ZSA9IDFcclxuXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogbmV3V3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdFN0eWxlOiB7IG9wYWNpdHk6ICcwJyB9LFxyXG4gICAgICAgICAgc2hvdWxkTm90SGF2ZUNsYXNzZXM6IFsndHJhbnNpdGlvbi1vcGFjaXR5J11cclxuICAgICAgICB9KSxcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogb2xkV3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdFN0eWxlOiB7IG9wYWNpdHk6ICcxJyB9LFxyXG4gICAgICAgICAgc2hvdWxkTm90SGF2ZUNsYXNzZXM6IFsndHJhbnNpdGlvbi1vcGFjaXR5J11cclxuICAgICAgICB9KVxyXG4gICAgICBdKVxyXG5cclxuICAgICAgLy8gU3RhZ2UgMjogVHJhbnNpdGlvbiBib3RoXHJcbiAgICAgIG9sZFRyYW5zaXRpb25FbmFibGVkLnZhbHVlID0gbmV3VHJhbnNpdGlvbkVuYWJsZWQudmFsdWUgPSB0cnVlXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogbmV3V3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdENsYXNzZXM6IFsndHJhbnNpdGlvbi1vcGFjaXR5J11cclxuICAgICAgICB9KSxcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogb2xkV3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdENsYXNzZXM6IFsndHJhbnNpdGlvbi1vcGFjaXR5J11cclxuICAgICAgICB9KVxyXG4gICAgICBdKVxyXG5cclxuICAgICAgbmV3T3BhY2l0eS52YWx1ZSA9IDFcclxuICAgICAgb2xkT3BhY2l0eS52YWx1ZSA9IDBcclxuXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICB3YWl0Rm9yRG9tVXBkYXRlKHtcclxuICAgICAgICAgIHJlZjogbmV3V3JhcHBlclJlZixcclxuICAgICAgICAgIGV4cGVjdFN0eWxlOiB7IG9wYWNpdHk6ICcxJyB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgd2FpdEZvckRvbVVwZGF0ZSh7XHJcbiAgICAgICAgICByZWY6IG9sZFdyYXBwZXJSZWYsXHJcbiAgICAgICAgICBleHBlY3RTdHlsZTogeyBvcGFjaXR5OiAnMCcgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJpZ2dlclRyYW5zaXRpb24gPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGlmICghdHJhbnNpdGlvbmluZy52YWx1ZSkge1xyXG4gICAgICAgIGF3YWl0IHVwZGF0ZUNvbnRlbnRzKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgdW50aWwodHJhbnNpdGlvbmluZykudG9CZShmYWxzZSksXHJcbiAgICAgICAgICB0aW1lb3V0QXQoXHJcbiAgICAgICAgICAgIHByb3BzLmR1cmF0aW9uICsgVElNRV9NUy5zZWNvbmQsXHJcbiAgICAgICAgICAgICdXYWl0aW5nIGZvciB0cmFuc2l0aW9uIHRvIGZpbmlzaCB0aW1lZCBvdXQnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpKSB7XHJcbiAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxvZ2dlci53YXJuKGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhd2FpdCB1cGRhdGVDb250ZW50cygpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYnVpbGRJdGVtUHJvcHMgPSAocGFyYW1zOiB7XHJcbiAgICAgIHpJbmRleDogbnVtYmVyXHJcbiAgICAgIHdpdGhUcmFuc2l0aW9uczogYm9vbGVhblxyXG4gICAgICBvcGFjaXR5OiBudW1iZXJcclxuICAgIH0pID0+IHtcclxuICAgICAgY29uc3QgeyB6SW5kZXgsIHdpdGhUcmFuc2l0aW9ucywgb3BhY2l0eSB9ID0gcGFyYW1zXHJcbiAgICAgIGNvbnN0IGNsYXNzUGFydHMgPSBbJ2Fic29sdXRlIGluc2V0LTAnXVxyXG4gICAgICBjb25zdCBzdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcclxuICAgICAgICB6SW5kZXgsXHJcbiAgICAgICAgb3BhY2l0eSxcclxuICAgICAgICAuLi4od2l0aFRyYW5zaXRpb25zXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IGAke3Byb3BzLmR1cmF0aW9ufW1zYFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2l0aFRyYW5zaXRpb25zKSB7XHJcbiAgICAgICAgY2xhc3NQYXJ0cy5wdXNoKCd0cmFuc2l0aW9uLW9wYWNpdHknKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNsYXNzOiBjbGFzc1BhcnRzLmpvaW4oJyAnKSxcclxuICAgICAgICBzdHlsZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3NlKHtcclxuICAgICAgdHJpZ2dlclRyYW5zaXRpb25cclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgcmV0dXJuIGgoJ2RpdicsIHsgY2xhc3M6ICdyZWxhdGl2ZScgfSwgW1xyXG4gICAgICAgIGgoXHJcbiAgICAgICAgICAnZGl2JyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLi4uYnVpbGRJdGVtUHJvcHMoe1xyXG4gICAgICAgICAgICAgIHpJbmRleDogMixcclxuICAgICAgICAgICAgICB3aXRoVHJhbnNpdGlvbnM6IG5ld1RyYW5zaXRpb25FbmFibGVkLnZhbHVlLFxyXG4gICAgICAgICAgICAgIG9wYWNpdHk6IG5ld09wYWNpdHkudmFsdWVcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHJlZjogbmV3V3JhcHBlclJlZlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtuZXdDb250ZW50cy52YWx1ZV1cclxuICAgICAgICApLFxyXG4gICAgICAgIC4uLihvbGRDb250ZW50cy52YWx1ZVxyXG4gICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgaChcclxuICAgICAgICAgICAgICAgICdkaXYnLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAuLi5idWlsZEl0ZW1Qcm9wcyh7XHJcbiAgICAgICAgICAgICAgICAgICAgekluZGV4OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpdGhUcmFuc2l0aW9uczogb2xkVHJhbnNpdGlvbkVuYWJsZWQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogb2xkT3BhY2l0eS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgcmVmOiBvbGRXcmFwcGVyUmVmLFxyXG4gICAgICAgICAgICAgICAgICBvblRyYW5zaXRpb25lbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTdGFnZSAzOiBDbGVhbiB1cFxyXG4gICAgICAgICAgICAgICAgICAgIG9sZENvbnRlbnRzLnZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbmluZy52YWx1ZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBbb2xkQ29udGVudHMudmFsdWVdXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICA6IFtdKVxyXG4gICAgICBdKVxyXG4gICAgfVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL2NvbW1vbi9UcmFuc2l0aW9uaW5nQ29udGVudHMudnVlIn0= |