{"version":3,"file":"panel.obs.js","sources":["../../../Framework/Controls/panel.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n <Fullscreen v-model=\"isFullscreen\" :isPageOnly=\"isFullscreenPageOnly\" :class=\"fullScreenClass\">\r\n <div v-if=\"$slots.sidebar\" class=\"panel-sidebar-content\">\r\n <slot name=\"sidebar\" />\r\n </div>\r\n\r\n <div :class=\"panelClass\" ref=\"panelElement\" v-bind=\"$attrs\" :tabIndex=\"panelTabIndex\" @keydown=\"onPanelKeyDown\">\r\n\r\n <div v-if=\"hasTitle\" :class=\"panelHeadingClass\" @click=\"onPanelHeadingClick\">\r\n <h1 class=\"panel-title\">\r\n <slot v-if=\"$slots.title\" name=\"title\" />\r\n <template v-else>\r\n <i v-if=\"titleIconCssClass\" :class=\"titleIconCssClass\"></i>\r\n {{ title }}\r\n </template>\r\n </h1>\r\n\r\n <div class=\"panel-header-actions\">\r\n <slot name=\"headerActions\" />\r\n\r\n <span v-if=\"isZoomActive && hasZoom\" class=\"mr-1 ml-1 panel-action-zoom-control\">\r\n <span class=\"input-group\">\r\n <span class=\"input-group-addon\">\r\n <span class=\"btn btn-default\" type=\"button\" @click=\"onZoomDecreaseClick\"><i class=\"fa fa-minus\"></i></span>\r\n </span>\r\n <input class=\"form-control text-center\" type=\"text\" style=\"width: 70px; pointer-events: none;\" :value=\"zoomValue + '%'\" />\r\n <span class=\"input-group-addon\">\r\n <span class=\"btn btn-default\" type=\"button\" @click=\"onZoomIncreaseClick\"><i class=\"fa fa-plus\"></i></span>\r\n </span>\r\n </span>\r\n </span>\r\n\r\n <span v-if=\"hasZoom && isZoomSupported\" class=\"action panel-action-zoom clickable\" :class=\"{ active: isZoomActive }\" @click=\"onZoomClick\">\r\n <i class=\"fa fa-search-plus\" />\r\n </span>\r\n\r\n <span v-if=\"$slots.helpContent\" class=\"action panel-action-help clickable\" @click=\"onHelpClick\">\r\n <i class=\"fa fa-question\"></i>\r\n </span>\r\n\r\n <span v-if=\"hasFullscreen\" class=\"action panel-action-fullscreen clickable\" @click=\"onFullscreenClick\">\r\n <i class=\"fa fa-expand\"></i>\r\n </span>\r\n\r\n <template v-if=\"hasHeaderSecondaryActions\">\r\n <span class=\"action panel-action-context clickable\" style=\"position: relative;\">\r\n <i class=\"fa fa-ellipsis-v\" data-toggle=\"dropdown\" ref=\"headerSecondaryActionMenu\"></i>\r\n <ul class=\"dropdown-menu dropdown-menu-right\">\r\n <li v-for=\"action in headerSecondaryActions\" :class=\"getHeaderSecondaryActionItemClass(action)\">\r\n <a href=\"#\" @click.prevent.stop=\"onActionClick(action, $event)\">\r\n <i :class=\"getHeaderSecondaryActionIconClass(action)\"></i>\r\n {{ action.title }}\r\n </a>\r\n </li>\r\n </ul>\r\n </span>\r\n </template>\r\n\r\n <span v-if=\"hasCollapseAction\" class=\"action clickable\" @click=\"onPanelExpandClick\">\r\n <i v-if=\"isPanelOpen\" class=\"fa fa-chevron-up\"></i>\r\n <i v-else class=\"fa fa-chevron-down\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"$slots.subheaderLeft || $slots.subheaderRight\" class=\"panel-sub-header\">\r\n <div class=\"panel-sub-header-left\">\r\n <slot name=\"subheaderLeft\" />\r\n </div>\r\n\r\n <div class=\"panel-sub-header-right\">\r\n <slot name=\"subheaderRight\" />\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"$slots.helpContent\" class=\"panel-help\">\r\n <TransitionVerticalCollapse>\r\n <div v-show=\"isHelpOpen\" class=\"help-content\">\r\n <slot name=\"helpContent\" />\r\n </div>\r\n </TransitionVerticalCollapse>\r\n </div>\r\n\r\n <div v-if=\"$slots.drawer\" class=\"panel-drawer rock-panel-drawer\" :class=\"isDrawerOpen ? 'open' : ''\">\r\n <TransitionVerticalCollapse>\r\n <div v-show=\"isDrawerOpen\" class=\"drawer-content\">\r\n <slot name=\"drawer\" />\r\n </div>\r\n </TransitionVerticalCollapse>\r\n\r\n <div class=\"drawer-pull\" @click=\"onDrawerPullClick\">\r\n <i :class=\"isDrawerOpen ? 'fa fa-chevron-up fa-xs' : 'fa fa-chevron-down fa-xs'\"></i>\r\n </div>\r\n </div>\r\n\r\n <template v-if=\"$slots.preBody\">\r\n <slot name=\"preBody\" />\r\n </template>\r\n\r\n <TransitionVerticalCollapse>\r\n <div v-show=\"isPanelOpen\" class=\"panel-body\" :style=\"panelBodyStyle\">\r\n <slot />\r\n\r\n <div v-if=\"$slots.footerActions || $slots.footerSecondaryActions\" class=\"actions\">\r\n <div class=\"footer-actions\">\r\n <slot name=\"footerActions\" />\r\n </div>\r\n\r\n <div class=\"footer-secondary-actions\">\r\n <slot name=\"footerSecondaryActions\" />\r\n </div>\r\n </div>\r\n </div>\r\n </TransitionVerticalCollapse>\r\n </div>\r\n </Fullscreen>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n declare function $(element: any): any;\r\n\r\n export default {\r\n inheritAttrs: false\r\n };\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, nextTick, onBeforeUpdate, PropType, ref, useSlots, watch } from \"vue\";\r\n import { useVModelPassthrough } from \"@Obsidian/Utility/component\";\r\n import Fullscreen from \"./fullscreen.obs\";\r\n import TransitionVerticalCollapse from \"./transitionVerticalCollapse.obs\";\r\n import { PanelAction } from \"@Obsidian/Types/Controls/panelAction\";\r\n\r\n const props = defineProps({\r\n /** True if the panel content is shown when hasCollapse is also true. */\r\n modelValue: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n },\r\n\r\n /** True if the draw should be open and its content displayed. */\r\n isDrawerOpen: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n },\r\n\r\n /** True if the panel should be in full screen mode. */\r\n isFullscreen: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n },\r\n\r\n /**\r\n * True if the panel has a Title and the Title area should be displayed\r\n * false if no title is given and the area should not be displayed.\r\n */\r\n hasTitle: {\r\n type: Boolean,\r\n default: true\r\n },\r\n\r\n /** True if the panel is collapsable and shows the collapse button. */\r\n hasCollapse: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n },\r\n\r\n /**\r\n * True if the panel will show a control in the header that allows\r\n * the individual to change the zoom of the panel body.\r\n */\r\n hasZoom: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n },\r\n\r\n /** True if the panel can go into full screen mode. */\r\n hasFullscreen: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n },\r\n\r\n /** True if the panel should use in-page full screen mode. */\r\n isFullscreenPageOnly: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n },\r\n\r\n /** The type of panel to render. */\r\n type: {\r\n type: String as PropType<\"default\" | \"block\" | \"default\" | \"primary\" | \"success\" | \"info\" | \"warning\" | \"danger\">,\r\n default: \"default\"\r\n },\r\n\r\n /** The title text to display in the panel, will be overridden by slot usage. */\r\n title: {\r\n type: String as PropType<string>,\r\n default: \"\"\r\n },\r\n\r\n /** The Icon CSS class to display in the title, will be overridden by slot usage. */\r\n titleIconCssClass: {\r\n type: String as PropType<string>,\r\n default: \"\"\r\n },\r\n\r\n /** A list of action items to be included in the ellipsis. */\r\n headerSecondaryActions: {\r\n type: Array as PropType<PanelAction[]>,\r\n required: false\r\n }\r\n });\r\n\r\n const emit = defineEmits([\r\n \"update:modelValue\",\r\n \"update:isDrawerOpen\",\r\n \"update:isFullscreen\"\r\n ]);\r\n\r\n const slots = useSlots();\r\n\r\n /** The internal state of the collapsable panel content. */\r\n const internalValue = useVModelPassthrough(props, \"modelValue\", emit);\r\n\r\n /** True if the draw content should be shown. */\r\n const isDrawerOpen = useVModelPassthrough(props, \"isDrawerOpen\", emit);\r\n\r\n /** True if the panel should be shown in full screen mode. */\r\n const isFullscreen = useVModelPassthrough(props, \"isFullscreen\", emit);\r\n\r\n /** The HTML Element that is the main panel div. */\r\n const panelElement = ref<HTMLElement | null>(null);\r\n\r\n /** True if the collapse action should be shown. */\r\n const hasCollapseAction = computed((): boolean => props.hasCollapse && !isFullscreen.value);\r\n\r\n const hasHeaderSecondaryActions = computed((): boolean => !!props.headerSecondaryActions && props.headerSecondaryActions.length > 0);\r\n const isHelpOpen = ref(false);\r\n const headerSecondaryActionMenu = ref<HTMLElement | null>(null);\r\n\r\n const isZoomActive = ref(false);\r\n const zoomValue = ref(100);\r\n const isZoomSupported = !/Firefox\\/([0-9.]+)(?:\\s|$)/.test(navigator.userAgent)\r\n && !/FxiOS\\/([0-9.]+)/.test(navigator.userAgent);\r\n\r\n /** True if we have a sidebar template defined. */\r\n const hasSidebar = ref(!!slots.sidebar);\r\n\r\n /** The CSS class names to be applied to the full screen wrapper. */\r\n const fullScreenClass = computed((): string[] => {\r\n return hasSidebar.value ? [\"panel-with-sidebar\"] : [];\r\n });\r\n\r\n /** The CSS class names to be applied to the panel. */\r\n const panelClass = computed((): string[] => {\r\n const classes = [\"panel\", \"panel-flex\"];\r\n\r\n classes.push(`panel-${props.type}`);\r\n\r\n if (isFullscreen.value) {\r\n classes.push(\"panel-fullscreen\");\r\n }\r\n\r\n if (hasSidebar.value) {\r\n classes.push(\"flex-grow-1\");\r\n }\r\n\r\n return classes;\r\n });\r\n\r\n /** The CSS class names to be applied to the panel heading. */\r\n const panelHeadingClass = computed((): string[] => {\r\n const classes = [\"panel-heading\"];\r\n\r\n if (props.hasCollapse) {\r\n classes.push(\"cursor-pointer\");\r\n }\r\n\r\n return classes;\r\n });\r\n\r\n /** The style attribute values to apply to the panel-body. */\r\n const panelBodyStyle = computed((): Record<string, string> => {\r\n const styles: Record<string, string> = {};\r\n\r\n if (props.hasZoom && isZoomActive.value) {\r\n styles[\"zoom\"] = `${zoomValue.value}%`;\r\n }\r\n\r\n return styles;\r\n });\r\n\r\n /** The tab index for the panel, this allows us to catch the escape key. */\r\n const panelTabIndex = computed((): string | undefined => isFullscreen.value ? \"0\" : undefined);\r\n\r\n /** True if the panel body should be displayed. */\r\n const isPanelOpen = computed((): boolean => !props.hasCollapse || internalValue.value !== false || isFullscreen.value);\r\n\r\n const getHeaderSecondaryActionIconClass = (action: PanelAction): string => {\r\n if (action.iconCssClass) {\r\n let iconClass = action.iconCssClass;\r\n\r\n if (action.type !== \"default\" && action.type !== \"link\") {\r\n iconClass += ` text-${action.type}`;\r\n }\r\n\r\n return iconClass;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n };\r\n\r\n const getHeaderSecondaryActionItemClass = (action: PanelAction): string => {\r\n return action.disabled ? \"disabled\" : \"\";\r\n };\r\n\r\n /** Event handler when the drawer expander is clicked. */\r\n const onDrawerPullClick = (): void => {\r\n isDrawerOpen.value = !isDrawerOpen.value;\r\n };\r\n\r\n const onHelpClick = (): void => {\r\n isHelpOpen.value = !isHelpOpen.value;\r\n };\r\n\r\n /** Event handler when the panel heading is clicked. */\r\n const onPanelHeadingClick = (event: Event): void => {\r\n // Ignore the click if it happened inside the panel actions.\r\n if (event.target && event.target instanceof HTMLElement && event.target.closest(\".panel-header-actions\")) {\r\n return;\r\n }\r\n\r\n if (props.hasCollapse) {\r\n internalValue.value = !isPanelOpen.value;\r\n }\r\n };\r\n\r\n const onPanelExpandClick = (): void => {\r\n if (props.hasCollapse) {\r\n internalValue.value = !isPanelOpen.value;\r\n }\r\n };\r\n\r\n /**\r\n * Event handler for when a key is pressed down inside the panel.\r\n *\r\n * @param ev The event that describes which key was pressed.\r\n */\r\n const onPanelKeyDown = (ev: KeyboardEvent): void => {\r\n if (isFullscreen.value && ev.keyCode === 27) {\r\n ev.stopImmediatePropagation();\r\n\r\n isFullscreen.value = false;\r\n }\r\n };\r\n\r\n /** Event handler when the full-screen button is clicked. */\r\n const onFullscreenClick = (): void => {\r\n if (props.hasFullscreen) {\r\n isFullscreen.value = !isFullscreen.value;\r\n }\r\n };\r\n\r\n /** Event handler for when a secondary action is clicked. */\r\n const onActionClick = (action: PanelAction, event: Event): void => {\r\n if (action.disabled) {\r\n return;\r\n }\r\n\r\n // Close the drop down since we are hijacking the click event.\r\n if (headerSecondaryActionMenu.value) {\r\n $(headerSecondaryActionMenu.value).dropdown(\"toggle\");\r\n }\r\n\r\n if (action.handler) {\r\n action.handler(event);\r\n }\r\n };\r\n\r\n /** Event handler for when the zoom action is clicked. */\r\n function onZoomClick(): void {\r\n isZoomActive.value = !isZoomActive.value;\r\n }\r\n\r\n /** Event handler for when the increase zoom button is clicked. */\r\n function onZoomIncreaseClick(): void {\r\n if (zoomValue.value < 400) {\r\n zoomValue.value += 25;\r\n }\r\n }\r\n\r\n /** Event handler for when the decrease zoom button is clicked. */\r\n function onZoomDecreaseClick(): void {\r\n if (zoomValue.value > 25) {\r\n zoomValue.value -= 25;\r\n }\r\n }\r\n\r\n // Watches for changes to our full screen status and responds accordingly.\r\n watch(isFullscreen, () => {\r\n // If we have entered full screen then wait for the UI to update\r\n // and set focus on the panel. This allows the escape key to work.\r\n if (isFullscreen.value) {\r\n nextTick(() => panelElement.value?.focus());\r\n }\r\n });\r\n\r\n watch(headerSecondaryActionMenu, () => {\r\n if (headerSecondaryActionMenu.value) {\r\n $(headerSecondaryActionMenu.value).dropdown();\r\n }\r\n });\r\n\r\n onBeforeUpdate(() => {\r\n // Normally this would be a computed. But it doesn't seem to work\r\n // anymore. Either it's a bug in Vue or was changed by design.\r\n hasSidebar.value = !!slots.sidebar;\r\n });\r\n</script>"],"names":["__default__","inheritAttrs","slots","useSlots","internalValue","useVModelPassthrough","props","emit","isDrawerOpen","isFullscreen","panelElement","ref","hasCollapseAction","computed","hasCollapse","value","hasHeaderSecondaryActions","headerSecondaryActions","length","isHelpOpen","headerSecondaryActionMenu","isZoomActive","zoomValue","isZoomSupported","test","navigator","userAgent","hasSidebar","sidebar","fullScreenClass","panelClass","classes","push","concat","type","panelHeadingClass","panelBodyStyle","styles","hasZoom","panelTabIndex","undefined","isPanelOpen","getHeaderSecondaryActionIconClass","action","iconCssClass","iconClass","getHeaderSecondaryActionItemClass","disabled","onDrawerPullClick","onHelpClick","onPanelHeadingClick","event","target","HTMLElement","closest","onPanelExpandClick","onPanelKeyDown","ev","keyCode","stopImmediatePropagation","onFullscreenClick","hasFullscreen","onActionClick","$","dropdown","handler","onZoomClick","onZoomIncreaseClick","onZoomDecreaseClick","watch","nextTick","_panelElement$value","focus","onBeforeUpdate"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2HI,IAAAA,WAAA,GAAe;MACXC,EAAAA,YAAY,EAAE,KAAA;MAClB,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAgGD,IAAMC,KAAK,GAAGC,QAAQ,EAAE,CAAA;UAGxB,IAAMC,aAAa,GAAGC,oBAAoB,CAACC,KAAK,EAAE,YAAY,EAAEC,IAAI,CAAC,CAAA;UAGrE,IAAMC,YAAY,GAAGH,oBAAoB,CAACC,KAAK,EAAE,cAAc,EAAEC,IAAI,CAAC,CAAA;UAGtE,IAAME,YAAY,GAAGJ,oBAAoB,CAACC,KAAK,EAAE,cAAc,EAAEC,IAAI,CAAC,CAAA;MAGtE,IAAA,IAAMG,YAAY,GAAGC,GAAG,CAAqB,IAAI,CAAC,CAAA;MAGlD,IAAA,IAAMC,iBAAiB,GAAGC,QAAQ,CAAC,MAAeP,KAAK,CAACQ,WAAW,IAAI,CAACL,YAAY,CAACM,KAAK,CAAC,CAAA;MAE3F,IAAA,IAAMC,yBAAyB,GAAGH,QAAQ,CAAC,MAAe,CAAC,CAACP,KAAK,CAACW,sBAAsB,IAAIX,KAAK,CAACW,sBAAsB,CAACC,MAAM,GAAG,CAAC,CAAC,CAAA;MACpI,IAAA,IAAMC,UAAU,GAAGR,GAAG,CAAC,KAAK,CAAC,CAAA;MAC7B,IAAA,IAAMS,yBAAyB,GAAGT,GAAG,CAAqB,IAAI,CAAC,CAAA;MAE/D,IAAA,IAAMU,YAAY,GAAGV,GAAG,CAAC,KAAK,CAAC,CAAA;MAC/B,IAAA,IAAMW,SAAS,GAAGX,GAAG,CAAC,GAAG,CAAC,CAAA;UAC1B,IAAMY,eAAe,GAAG,CAAC,4BAA4B,CAACC,IAAI,CAACC,SAAS,CAACC,SAAS,CAAC,IACxE,CAAC,kBAAkB,CAACF,IAAI,CAACC,SAAS,CAACC,SAAS,CAAC,CAAA;UAGpD,IAAMC,UAAU,GAAGhB,GAAG,CAAC,CAAC,CAACT,KAAK,CAAC0B,OAAO,CAAC,CAAA;MAGvC,IAAA,IAAMC,eAAe,GAAGhB,QAAQ,CAAC,MAAgB;YAC7C,OAAOc,UAAU,CAACZ,KAAK,GAAG,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAA;MACzD,KAAC,CAAC,CAAA;MAGF,IAAA,IAAMe,UAAU,GAAGjB,QAAQ,CAAC,MAAgB;MACxC,MAAA,IAAMkB,OAAO,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;YAEvCA,OAAO,CAACC,IAAI,CAAAC,QAAAA,CAAAA,MAAA,CAAU3B,KAAK,CAAC4B,IAAI,CAAG,CAAA,CAAA;YAEnC,IAAIzB,YAAY,CAACM,KAAK,EAAE;MACpBgB,QAAAA,OAAO,CAACC,IAAI,CAAC,kBAAkB,CAAC,CAAA;MACpC,OAAA;YAEA,IAAIL,UAAU,CAACZ,KAAK,EAAE;MAClBgB,QAAAA,OAAO,CAACC,IAAI,CAAC,aAAa,CAAC,CAAA;MAC/B,OAAA;MAEA,MAAA,OAAOD,OAAO,CAAA;MAClB,KAAC,CAAC,CAAA;MAGF,IAAA,IAAMI,iBAAiB,GAAGtB,QAAQ,CAAC,MAAgB;MAC/C,MAAA,IAAMkB,OAAO,GAAG,CAAC,eAAe,CAAC,CAAA;YAEjC,IAAIzB,KAAK,CAACQ,WAAW,EAAE;MACnBiB,QAAAA,OAAO,CAACC,IAAI,CAAC,gBAAgB,CAAC,CAAA;MAClC,OAAA;MAEA,MAAA,OAAOD,OAAO,CAAA;MAClB,KAAC,CAAC,CAAA;MAGF,IAAA,IAAMK,cAAc,GAAGvB,QAAQ,CAAC,MAA8B;YAC1D,IAAMwB,MAA8B,GAAG,EAAE,CAAA;MAEzC,MAAA,IAAI/B,KAAK,CAACgC,OAAO,IAAIjB,YAAY,CAACN,KAAK,EAAE;cACrCsB,MAAM,CAAC,MAAM,CAAC,GAAA,EAAA,CAAAJ,MAAA,CAAMX,SAAS,CAACP,KAAK,EAAG,GAAA,CAAA,CAAA;MAC1C,OAAA;MAEA,MAAA,OAAOsB,MAAM,CAAA;MACjB,KAAC,CAAC,CAAA;MAGF,IAAA,IAAME,aAAa,GAAG1B,QAAQ,CAAC,MAA0BJ,YAAY,CAACM,KAAK,GAAG,GAAG,GAAGyB,SAAS,CAAC,CAAA;MAG9F,IAAA,IAAMC,WAAW,GAAG5B,QAAQ,CAAC,MAAe,CAACP,KAAK,CAACQ,WAAW,IAAIV,aAAa,CAACW,KAAK,KAAK,KAAK,IAAIN,YAAY,CAACM,KAAK,CAAC,CAAA;UAEtH,IAAM2B,iCAAiC,GAAIC,MAAmB,IAAa;YACvE,IAAIA,MAAM,CAACC,YAAY,EAAE;MACrB,QAAA,IAAIC,SAAS,GAAGF,MAAM,CAACC,YAAY,CAAA;cAEnC,IAAID,MAAM,CAACT,IAAI,KAAK,SAAS,IAAIS,MAAM,CAACT,IAAI,KAAK,MAAM,EAAE;MACrDW,UAAAA,SAAS,aAAAZ,MAAA,CAAaU,MAAM,CAACT,IAAI,CAAE,CAAA;MACvC,SAAA;MAEA,QAAA,OAAOW,SAAS,CAAA;MACpB,OAAC,MACI;MACD,QAAA,OAAO,EAAE,CAAA;MACb,OAAA;WACH,CAAA;UAED,IAAMC,iCAAiC,GAAIH,MAAmB,IAAa;MACvE,MAAA,OAAOA,MAAM,CAACI,QAAQ,GAAG,UAAU,GAAG,EAAE,CAAA;WAC3C,CAAA;UAGD,IAAMC,iBAAiB,GAAGA,MAAY;MAClCxC,MAAAA,YAAY,CAACO,KAAK,GAAG,CAACP,YAAY,CAACO,KAAK,CAAA;WAC3C,CAAA;UAED,IAAMkC,WAAW,GAAGA,MAAY;MAC5B9B,MAAAA,UAAU,CAACJ,KAAK,GAAG,CAACI,UAAU,CAACJ,KAAK,CAAA;WACvC,CAAA;UAGD,IAAMmC,mBAAmB,GAAIC,KAAY,IAAW;MAEhD,MAAA,IAAIA,KAAK,CAACC,MAAM,IAAID,KAAK,CAACC,MAAM,YAAYC,WAAW,IAAIF,KAAK,CAACC,MAAM,CAACE,OAAO,CAAC,uBAAuB,CAAC,EAAE;MACtG,QAAA,OAAA;MACJ,OAAA;YAEA,IAAIhD,KAAK,CAACQ,WAAW,EAAE;MACnBV,QAAAA,aAAa,CAACW,KAAK,GAAG,CAAC0B,WAAW,CAAC1B,KAAK,CAAA;MAC5C,OAAA;WACH,CAAA;UAED,IAAMwC,kBAAkB,GAAGA,MAAY;YACnC,IAAIjD,KAAK,CAACQ,WAAW,EAAE;MACnBV,QAAAA,aAAa,CAACW,KAAK,GAAG,CAAC0B,WAAW,CAAC1B,KAAK,CAAA;MAC5C,OAAA;WACH,CAAA;UAOD,IAAMyC,cAAc,GAAIC,EAAiB,IAAW;YAChD,IAAIhD,YAAY,CAACM,KAAK,IAAI0C,EAAE,CAACC,OAAO,KAAK,EAAE,EAAE;cACzCD,EAAE,CAACE,wBAAwB,EAAE,CAAA;cAE7BlD,YAAY,CAACM,KAAK,GAAG,KAAK,CAAA;MAC9B,OAAA;WACH,CAAA;UAGD,IAAM6C,iBAAiB,GAAGA,MAAY;YAClC,IAAItD,KAAK,CAACuD,aAAa,EAAE;MACrBpD,QAAAA,YAAY,CAACM,KAAK,GAAG,CAACN,YAAY,CAACM,KAAK,CAAA;MAC5C,OAAA;WACH,CAAA;MAGD,IAAA,IAAM+C,aAAa,GAAGA,CAACnB,MAAmB,EAAEQ,KAAY,KAAW;YAC/D,IAAIR,MAAM,CAACI,QAAQ,EAAE;MACjB,QAAA,OAAA;MACJ,OAAA;YAGA,IAAI3B,yBAAyB,CAACL,KAAK,EAAE;cACjCgD,CAAC,CAAC3C,yBAAyB,CAACL,KAAK,CAAC,CAACiD,QAAQ,CAAC,QAAQ,CAAC,CAAA;MACzD,OAAA;YAEA,IAAIrB,MAAM,CAACsB,OAAO,EAAE;MAChBtB,QAAAA,MAAM,CAACsB,OAAO,CAACd,KAAK,CAAC,CAAA;MACzB,OAAA;WACH,CAAA;UAGD,SAASe,WAAWA,GAAS;MACzB7C,MAAAA,YAAY,CAACN,KAAK,GAAG,CAACM,YAAY,CAACN,KAAK,CAAA;MAC5C,KAAA;UAGA,SAASoD,mBAAmBA,GAAS;MACjC,MAAA,IAAI7C,SAAS,CAACP,KAAK,GAAG,GAAG,EAAE;cACvBO,SAAS,CAACP,KAAK,IAAI,EAAE,CAAA;MACzB,OAAA;MACJ,KAAA;UAGA,SAASqD,mBAAmBA,GAAS;MACjC,MAAA,IAAI9C,SAAS,CAACP,KAAK,GAAG,EAAE,EAAE;cACtBO,SAAS,CAACP,KAAK,IAAI,EAAE,CAAA;MACzB,OAAA;MACJ,KAAA;UAGAsD,KAAK,CAAC5D,YAAY,EAAE,MAAM;YAGtB,IAAIA,YAAY,CAACM,KAAK,EAAE;MACpBuD,QAAAA,QAAQ,CAAC,MAAA;MAAA,UAAA,IAAAC,mBAAA,CAAA;gBAAA,OAAAA,CAAAA,mBAAA,GAAM7D,YAAY,CAACK,KAAK,MAAAwD,IAAAA,IAAAA,mBAAA,KAAlBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAA,CAAoBC,KAAK,EAAE,CAAA;eAAC,CAAA,CAAA;MAC/C,OAAA;MACJ,KAAC,CAAC,CAAA;UAEFH,KAAK,CAACjD,yBAAyB,EAAE,MAAM;YACnC,IAAIA,yBAAyB,CAACL,KAAK,EAAE;MACjCgD,QAAAA,CAAC,CAAC3C,yBAAyB,CAACL,KAAK,CAAC,CAACiD,QAAQ,EAAE,CAAA;MACjD,OAAA;MACJ,KAAC,CAAC,CAAA;MAEFS,IAAAA,cAAc,CAAC,MAAM;MAGjB9C,MAAAA,UAAU,CAACZ,KAAK,GAAG,CAAC,CAACb,KAAK,CAAC0B,OAAO,CAAA;MACtC,KAAC,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}