{"version":3,"file":"index.cjs","sources":["../src/components/admin-layout/shared.ts","../src/components/admin-layout/index.vue","../../color/dist/index.mjs","../src/components/page-tab/shared.ts","../src/components/page-tab/chrome-tab-bg.vue","../src/components/page-tab/chrome-tab.vue","../src/components/page-tab/button-tab.vue","../src/components/page-tab/svg-close.vue","../src/components/page-tab/index.vue","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/now.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_trimmedEndIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTrim.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toNumber.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/debounce.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/throttle.js","../../../node_modules/.pnpm/simplebar-core@1.3.2/node_modules/simplebar-core/dist/index.mjs","../../../node_modules/.pnpm/simplebar-vue@2.4.0_vue@3.5.19_typescript@5.8.3_/node_modules/simplebar-vue/dist/simplebar-vue.esm.js","../src/components/simple-scrollbar/index.vue","../../../node_modules/.pnpm/@vueuse+shared@12.8.2_typescript@5.8.3/node_modules/@vueuse/shared/index.mjs","../../../node_modules/.pnpm/@vueuse+core@12.8.2_typescript@5.8.3/node_modules/@vueuse/core/index.mjs","../../../node_modules/.pnpm/@better-scroll+core@2.5.1/node_modules/@better-scroll/core/dist/core.esm.js","../src/components/better-scroll/index.vue","../../../node_modules/.pnpm/tailwind-merge@2.5.5/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/components/button-icon/index.vue","../src/components/login-background/background-1.vue","../src/components/login-background/background-2.vue","../src/components/split-container/index.vue"],"sourcesContent":["import type { AdminLayoutProps, LayoutCssVars, LayoutCssVarsProps } from '../../types'\n\n/** The id of the scroll element of the layout */\nexport const LAYOUT_SCROLL_EL_ID = '__SCROLL_EL_ID__'\n\n/** The max z-index of the layout */\nexport const LAYOUT_MAX_Z_INDEX = 100\n\n/**\n * Create layout css vars by css vars props\n *\n * @param props Css vars props\n */\nfunction createLayoutCssVarsByCssVarsProps(props: LayoutCssVarsProps) {\n  const cssVars: LayoutCssVars = {\n    '--one-header-height': `${props.headerHeight}px`,\n    '--one-header-z-index': props.headerZIndex,\n    '--one-tab-height': `${props.tabHeight}px`,\n    '--one-tab-z-index': props.tabZIndex,\n    '--one-sider-width': `${props.siderWidth}px`,\n    '--one-sider-collapsed-width': `${props.siderCollapsedWidth}px`,\n    '--one-sider-z-index': props.siderZIndex,\n    '--one-mobile-sider-z-index': props.mobileSiderZIndex,\n    '--one-footer-height': `${props.footerHeight}px`,\n    '--one-footer-z-index': props.footerZIndex\n  }\n\n  return cssVars\n}\n\n/**\n * Create layout css vars\n *\n * @param props\n */\nexport function createLayoutCssVars(props: AdminLayoutProps) {\n  const { mode, isMobile, maxZIndex = LAYOUT_MAX_Z_INDEX, headerHeight, tabHeight, siderWidth, siderCollapsedWidth, footerHeight } = props\n\n  const headerZIndex = maxZIndex - 3\n  const tabZIndex = maxZIndex - 5\n  const siderZIndex = mode === 'vertical' || isMobile ? maxZIndex - 1 : maxZIndex - 4\n  const mobileSiderZIndex = isMobile ? maxZIndex - 2 : 0\n  const footerZIndex = maxZIndex - 5\n\n  const cssProps: LayoutCssVarsProps = {\n    headerHeight,\n    headerZIndex,\n    tabHeight,\n    tabZIndex,\n    siderWidth,\n    siderZIndex,\n    mobileSiderZIndex,\n    siderCollapsedWidth,\n    footerHeight,\n    footerZIndex\n  }\n\n  return createLayoutCssVarsByCssVarsProps(cssProps)\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useLayoutContentStyle } from '@ximax/hooks'\nimport type { AdminLayoutProps } from '../../types'\nimport { LAYOUT_MAX_Z_INDEX, LAYOUT_SCROLL_EL_ID, createLayoutCssVars } from './shared'\nimport style from './index.module.css'\n\ndefineOptions({\n  name: 'AdminLayout'\n})\n\nconst props = withDefaults(defineProps<AdminLayoutProps>(), {\n  mode: 'vertical',\n  scrollMode: 'content',\n  scrollElId: LAYOUT_SCROLL_EL_ID,\n  commonClass: 'transition-all-300',\n  fixedTop: true,\n  maxZIndex: LAYOUT_MAX_Z_INDEX,\n  headerVisible: true,\n  headerHeight: 56,\n  tabVisible: true,\n  tabHeight: 48,\n  siderVisible: true,\n  siderCollapse: false,\n  siderWidth: 220,\n  siderCollapsedWidth: 64,\n  footerVisible: true,\n  footerHeight: 48,\n  rightFooter: false\n})\n\ninterface Emits {\n  /** Update siderCollapse */\n  (_e: 'update:siderCollapse', _collapse: boolean): void\n}\n\nconst emit = defineEmits<Emits>()\n\ntype SlotFn = (_props?: Record<string, unknown>) => any\n\ntype Slots = {\n  /** Main */\n  default?: SlotFn\n  /** Header */\n  header?: SlotFn\n  /** Tab */\n  tab?: SlotFn\n  /** Sider */\n  sider?: SlotFn\n  /** Footer */\n  footer?: SlotFn\n}\n\nconst slots = defineSlots<Slots>()\n\nconst cssVars = computed(() => createLayoutCssVars(props))\n\nconst { contentElement, overlayStyle } = useLayoutContentStyle(32)\n\n// config visible\nconst showHeader = computed(() => Boolean(slots.header) && props.headerVisible)\nconst showTab = computed(() => Boolean(slots.tab) && props.tabVisible)\nconst showSider = computed(() => !props.isMobile && Boolean(slots.sider) && props.siderVisible)\nconst showMobileSider = computed(() => props.isMobile && Boolean(slots.sider) && props.siderVisible)\nconst showFooter = computed(() => Boolean(slots.footer) && props.footerVisible)\n\n// scroll mode\nconst isWrapperScroll = computed(() => props.scrollMode === 'wrapper')\nconst isContentScroll = computed(() => props.scrollMode === 'content')\n\n// layout direction\nconst isVertical = computed(() => props.mode === 'vertical')\nconst isHorizontal = computed(() => props.mode === 'horizontal')\n\nconst fixedHeaderAndTab = computed(() => props.fixedTop || (isHorizontal.value && isWrapperScroll.value))\n\n// css\nconst leftGapClass = computed(() => {\n  if (!props.fullContent && showSider.value) {\n    return props.siderCollapse ? style['left-gap_collapsed'] : style['left-gap']\n  }\n\n  return ''\n})\n\nconst headerLeftGapClass = computed(() => (isVertical.value ? leftGapClass.value : ''))\n\nconst footerLeftGapClass = computed(() => {\n  const condition1 = isVertical.value\n  const condition2 = isHorizontal.value && isWrapperScroll.value && !props.fixedFooter\n  const condition3 = Boolean(isHorizontal.value && props.rightFooter)\n\n  if (condition1 || condition2 || condition3) {\n    return leftGapClass.value\n  }\n\n  return ''\n})\n\nconst siderPaddingClass = computed(() => {\n  let cls = ''\n\n  if (showHeader.value && !headerLeftGapClass.value) {\n    cls += style['sider-padding-top']\n  }\n  if (showFooter.value && !footerLeftGapClass.value) {\n    cls += ` ${style['sider-padding-bottom']}`\n  }\n\n  return cls\n})\n\nfunction handleClickMask() {\n  emit('update:siderCollapse', true)\n}\n</script>\n\n<template>\n  <div class=\"relative h-full\" :class=\"[commonClass]\" :style=\"cssVars\" :data-style=\"overlayStyle\">\n    <div :id=\"isWrapperScroll ? scrollElId : undefined\" class=\"h-full flex flex-col\" :class=\"[commonClass, scrollWrapperClass, { 'overflow-y-auto': isWrapperScroll }]\">\n      <!-- Header -->\n      <template v-if=\"showHeader\">\n        <header v-show=\"!fullContent\" class=\"flex-shrink-0\" :class=\"[style['layout-header'], commonClass, headerClass, headerLeftGapClass, { 'absolute top-0 left-0 w-full': fixedHeaderAndTab }]\">\n          <slot name=\"header\"></slot>\n        </header>\n        <div v-show=\"!fullContent && fixedHeaderAndTab\" class=\"flex-shrink-0 overflow-hidden\" :class=\"[style['layout-header-placement']]\"></div>\n      </template>\n\n      <!-- Tab -->\n      <template v-if=\"showTab\">\n        <div class=\"flex-shrink-0\" :class=\"[style['layout-tab'], commonClass, tabClass, { 'top-0!': fullContent || !showHeader }, leftGapClass, { 'absolute left-0 w-full': fixedHeaderAndTab }]\">\n          <slot name=\"tab\"></slot>\n        </div>\n        <div v-show=\"fullContent || fixedHeaderAndTab\" class=\"flex-shrink-0 overflow-hidden\" :class=\"[style['layout-tab-placement']]\"></div>\n      </template>\n\n      <!-- Sider -->\n      <template v-if=\"showSider\">\n        <aside v-show=\"!fullContent\" class=\"absolute left-0 top-0 h-full\" :class=\"[commonClass, siderClass, siderPaddingClass, siderCollapse ? style['layout-sider_collapsed'] : style['layout-sider']]\">\n          <slot name=\"sider\"></slot>\n        </aside>\n      </template>\n\n      <!-- Mobile Sider -->\n      <template v-if=\"showMobileSider\">\n        <aside class=\"absolute left-0 top-0 h-full w-0 bg-white\" :class=\"[commonClass, mobileSiderClass, style['layout-mobile-sider'], siderCollapse ? 'overflow-hidden' : style['layout-sider']]\">\n          <slot name=\"sider\"></slot>\n        </aside>\n        <div v-show=\"!siderCollapse\" class=\"absolute left-0 top-0 h-full w-full bg-[rgba(0,0,0,0.2)]\" :class=\"[style['layout-mobile-sider-mask']]\" @click=\"handleClickMask\"></div>\n      </template>\n\n      <!-- Main Content -->\n      <main :id=\"isContentScroll ? scrollElId : undefined\" ref=\"contentElement\" class=\"flex flex-col flex-grow\" :class=\"[commonClass, contentClass, leftGapClass, { 'overflow-y-auto': isContentScroll }]\">\n        <slot></slot>\n      </main>\n\n      <!-- Footer -->\n      <template v-if=\"showFooter\">\n        <footer v-show=\"!fullContent\" class=\"flex-shrink-0\" :class=\"[style['layout-footer'], commonClass, footerClass, footerLeftGapClass, { 'absolute left-0 bottom-0 w-full': fixedFooter }]\">\n          <slot name=\"footer\"></slot>\n        </footer>\n        <div v-show=\"!fullContent && fixedFooter\" class=\"flex-shrink-0 overflow-hidden\" :class=\"[style['layout-footer-placement']]\"></div>\n      </template>\n    </div>\n  </div>\n</template>\n\n<style scoped></style>\n","const V=[[\"#000000\",\"Black\"],[\"#000080\",\"Navy Blue\"],[\"#0000c8\",\"Dark Blue\"],[\"#0000ff\",\"Blue\"],[\"#000741\",\"Stratos\"],[\"#001b1c\",\"Swamp\"],[\"#002387\",\"Resolution Blue\"],[\"#002900\",\"Deep Fir\"],[\"#002e20\",\"Burnham\"],[\"#002fa7\",\"International Klein Blue\"],[\"#003153\",\"Prussian Blue\"],[\"#003366\",\"Midnight Blue\"],[\"#003399\",\"Smalt\"],[\"#003532\",\"Deep Teal\"],[\"#003e40\",\"Cyprus\"],[\"#004620\",\"Kaitoke Green\"],[\"#0047ab\",\"Cobalt\"],[\"#004816\",\"Crusoe\"],[\"#004950\",\"Sherpa Blue\"],[\"#0056a7\",\"Endeavour\"],[\"#00581a\",\"Camarone\"],[\"#0066cc\",\"Science Blue\"],[\"#0066ff\",\"Blue Ribbon\"],[\"#00755e\",\"Tropical Rain Forest\"],[\"#0076a3\",\"Allports\"],[\"#007ba7\",\"Deep Cerulean\"],[\"#007ec7\",\"Lochmara\"],[\"#007fff\",\"Azure Radiance\"],[\"#008080\",\"Teal\"],[\"#0095b6\",\"Bondi Blue\"],[\"#009dc4\",\"Pacific Blue\"],[\"#00a693\",\"Persian Green\"],[\"#00a86b\",\"Jade\"],[\"#00cc99\",\"Caribbean Green\"],[\"#00cccc\",\"Robin's Egg Blue\"],[\"#00ff00\",\"Green\"],[\"#00ff7f\",\"Spring Green\"],[\"#00ffff\",\"Cyan Aqua\"],[\"#010d1a\",\"Blue Charcoal\"],[\"#011635\",\"Midnight\"],[\"#011d13\",\"Holly\"],[\"#012731\",\"Daintree\"],[\"#01361c\",\"Cardin Green\"],[\"#01371a\",\"County Green\"],[\"#013e62\",\"Astronaut Blue\"],[\"#013f6a\",\"Regal Blue\"],[\"#014b43\",\"Aqua Deep\"],[\"#015e85\",\"Orient\"],[\"#016162\",\"Blue Stone\"],[\"#016d39\",\"Fun Green\"],[\"#01796f\",\"Pine Green\"],[\"#017987\",\"Blue Lagoon\"],[\"#01826b\",\"Deep Sea\"],[\"#01a368\",\"Green Haze\"],[\"#022d15\",\"English Holly\"],[\"#02402c\",\"Sherwood Green\"],[\"#02478e\",\"Congress Blue\"],[\"#024e46\",\"Evening Sea\"],[\"#026395\",\"Bahama Blue\"],[\"#02866f\",\"Observatory\"],[\"#02a4d3\",\"Cerulean\"],[\"#03163c\",\"Tangaroa\"],[\"#032b52\",\"Green Vogue\"],[\"#036a6e\",\"Mosque\"],[\"#041004\",\"Midnight Moss\"],[\"#041322\",\"Black Pearl\"],[\"#042e4c\",\"Blue Whale\"],[\"#044022\",\"Zuccini\"],[\"#044259\",\"Teal Blue\"],[\"#051040\",\"Deep Cove\"],[\"#051657\",\"Gulf Blue\"],[\"#055989\",\"Venice Blue\"],[\"#056f57\",\"Watercourse\"],[\"#062a78\",\"Catalina Blue\"],[\"#063537\",\"Tiber\"],[\"#069b81\",\"Gossamer\"],[\"#06a189\",\"Niagara\"],[\"#073a50\",\"Tarawera\"],[\"#080110\",\"Jaguar\"],[\"#081910\",\"Black Bean\"],[\"#082567\",\"Deep Sapphire\"],[\"#088370\",\"Elf Green\"],[\"#08e8de\",\"Bright Turquoise\"],[\"#092256\",\"Downriver\"],[\"#09230f\",\"Palm Green\"],[\"#09255d\",\"Madison\"],[\"#093624\",\"Bottle Green\"],[\"#095859\",\"Deep Sea Green\"],[\"#097f4b\",\"Salem\"],[\"#0a001c\",\"Black Russian\"],[\"#0a480d\",\"Dark Fern\"],[\"#0a6906\",\"Japanese Laurel\"],[\"#0a6f75\",\"Atoll\"],[\"#0b0b0b\",\"Cod Gray\"],[\"#0b0f08\",\"Marshland\"],[\"#0b1107\",\"Gordons Green\"],[\"#0b1304\",\"Black Forest\"],[\"#0b6207\",\"San Felix\"],[\"#0bda51\",\"Malachite\"],[\"#0c0b1d\",\"Ebony\"],[\"#0c0d0f\",\"Woodsmoke\"],[\"#0c1911\",\"Racing Green\"],[\"#0c7a79\",\"Surfie Green\"],[\"#0c8990\",\"Blue Chill\"],[\"#0d0332\",\"Black Rock\"],[\"#0d1117\",\"Bunker\"],[\"#0d1c19\",\"Aztec\"],[\"#0d2e1c\",\"Bush\"],[\"#0e0e18\",\"Cinder\"],[\"#0e2a30\",\"Firefly\"],[\"#0f2d9e\",\"Torea Bay\"],[\"#10121d\",\"Vulcan\"],[\"#101405\",\"Green Waterloo\"],[\"#105852\",\"Eden\"],[\"#110c6c\",\"Arapawa\"],[\"#120a8f\",\"Ultramarine\"],[\"#123447\",\"Elephant\"],[\"#126b40\",\"Jewel\"],[\"#130000\",\"Diesel\"],[\"#130a06\",\"Asphalt\"],[\"#13264d\",\"Blue Zodiac\"],[\"#134f19\",\"Parsley\"],[\"#140600\",\"Nero\"],[\"#1450aa\",\"Tory Blue\"],[\"#151f4c\",\"Bunting\"],[\"#1560bd\",\"Denim\"],[\"#15736b\",\"Genoa\"],[\"#161928\",\"Mirage\"],[\"#161d10\",\"Hunter Green\"],[\"#162a40\",\"Big Stone\"],[\"#163222\",\"Celtic\"],[\"#16322c\",\"Timber Green\"],[\"#163531\",\"Gable Green\"],[\"#171f04\",\"Pine Tree\"],[\"#175579\",\"Chathams Blue\"],[\"#182d09\",\"Deep Forest Green\"],[\"#18587a\",\"Blumine\"],[\"#19330e\",\"Palm Leaf\"],[\"#193751\",\"Nile Blue\"],[\"#1959a8\",\"Fun Blue\"],[\"#1a1a68\",\"Lucky Point\"],[\"#1ab385\",\"Mountain Meadow\"],[\"#1b0245\",\"Tolopea\"],[\"#1b1035\",\"Haiti\"],[\"#1b127b\",\"Deep Koamaru\"],[\"#1b1404\",\"Acadia\"],[\"#1b2f11\",\"Seaweed\"],[\"#1b3162\",\"Biscay\"],[\"#1b659d\",\"Matisse\"],[\"#1c1208\",\"Crowshead\"],[\"#1c1e13\",\"Rangoon Green\"],[\"#1c39bb\",\"Persian Blue\"],[\"#1c402e\",\"Everglade\"],[\"#1c7c7d\",\"Elm\"],[\"#1d6142\",\"Green Pea\"],[\"#1e0f04\",\"Creole\"],[\"#1e1609\",\"Karaka\"],[\"#1e1708\",\"El Paso\"],[\"#1e385b\",\"Cello\"],[\"#1e433c\",\"Te Papa Green\"],[\"#1e90ff\",\"Dodger Blue\"],[\"#1e9ab0\",\"Eastern Blue\"],[\"#1f120f\",\"Night Rider\"],[\"#1fc2c2\",\"Java\"],[\"#20208d\",\"Jacksons Purple\"],[\"#202e54\",\"Cloud Burst\"],[\"#204852\",\"Blue Dianne\"],[\"#211a0e\",\"Eternity\"],[\"#220878\",\"Deep Blue\"],[\"#228b22\",\"Forest Green\"],[\"#233418\",\"Mallard\"],[\"#240a40\",\"Violet\"],[\"#240c02\",\"Kilamanjaro\"],[\"#242a1d\",\"Log Cabin\"],[\"#242e16\",\"Black Olive\"],[\"#24500f\",\"Green House\"],[\"#251607\",\"Graphite\"],[\"#251706\",\"Cannon Black\"],[\"#251f4f\",\"Port Gore\"],[\"#25272c\",\"Shark\"],[\"#25311c\",\"Green Kelp\"],[\"#2596d1\",\"Curious Blue\"],[\"#260368\",\"Paua\"],[\"#26056a\",\"Paris M\"],[\"#261105\",\"Wood Bark\"],[\"#261414\",\"Gondola\"],[\"#262335\",\"Steel Gray\"],[\"#26283b\",\"Ebony Clay\"],[\"#273a81\",\"Bay Of Many\"],[\"#27504b\",\"Plantation\"],[\"#278a5b\",\"Eucalyptus\"],[\"#281e15\",\"Oil\"],[\"#283a77\",\"Astronaut\"],[\"#286acd\",\"Mariner\"],[\"#290c5e\",\"Violent Violet\"],[\"#292130\",\"Bastille\"],[\"#292319\",\"Zeus\"],[\"#292937\",\"Charade\"],[\"#297b9a\",\"Jelly Bean\"],[\"#29ab87\",\"Jungle Green\"],[\"#2a0359\",\"Cherry Pie\"],[\"#2a140e\",\"Coffee Bean\"],[\"#2a2630\",\"Baltic Sea\"],[\"#2a380b\",\"Turtle Green\"],[\"#2a52be\",\"Cerulean Blue\"],[\"#2b0202\",\"Sepia Black\"],[\"#2b194f\",\"Valhalla\"],[\"#2b3228\",\"Heavy Metal\"],[\"#2c0e8c\",\"Blue Gem\"],[\"#2c1632\",\"Revolver\"],[\"#2c2133\",\"Bleached Cedar\"],[\"#2c8c84\",\"Lochinvar\"],[\"#2d2510\",\"Mikado\"],[\"#2d383a\",\"Outer Space\"],[\"#2d569b\",\"St Tropaz\"],[\"#2e0329\",\"Jacaranda\"],[\"#2e1905\",\"Jacko Bean\"],[\"#2e3222\",\"Rangitoto\"],[\"#2e3f62\",\"Rhino\"],[\"#2e8b57\",\"Sea Green\"],[\"#2ebfd4\",\"Scooter\"],[\"#2f270e\",\"Onion\"],[\"#2f3cb3\",\"Governor Bay\"],[\"#2f519e\",\"Sapphire\"],[\"#2f5a57\",\"Spectra\"],[\"#2f6168\",\"Casal\"],[\"#300529\",\"Melanzane\"],[\"#301f1e\",\"Cocoa Brown\"],[\"#302a0f\",\"Woodrush\"],[\"#304b6a\",\"San Juan\"],[\"#30d5c8\",\"Turquoise\"],[\"#311c17\",\"Eclipse\"],[\"#314459\",\"Pickled Bluewood\"],[\"#315ba1\",\"Azure\"],[\"#31728d\",\"Calypso\"],[\"#317d82\",\"Paradiso\"],[\"#32127a\",\"Persian Indigo\"],[\"#32293a\",\"Blackcurrant\"],[\"#323232\",\"Mine Shaft\"],[\"#325d52\",\"Stromboli\"],[\"#327c14\",\"Bilbao\"],[\"#327da0\",\"Astral\"],[\"#33036b\",\"Christalle\"],[\"#33292f\",\"Thunder\"],[\"#33cc99\",\"Shamrock\"],[\"#341515\",\"Tamarind\"],[\"#350036\",\"Mardi Gras\"],[\"#350e42\",\"Valentino\"],[\"#350e57\",\"Jagger\"],[\"#353542\",\"Tuna\"],[\"#354e8c\",\"Chambray\"],[\"#363050\",\"Martinique\"],[\"#363534\",\"Tuatara\"],[\"#363c0d\",\"Waiouru\"],[\"#36747d\",\"Ming\"],[\"#368716\",\"La Palma\"],[\"#370202\",\"Chocolate\"],[\"#371d09\",\"Clinker\"],[\"#37290e\",\"Brown Tumbleweed\"],[\"#373021\",\"Birch\"],[\"#377475\",\"Oracle\"],[\"#380474\",\"Blue Diamond\"],[\"#381a51\",\"Grape\"],[\"#383533\",\"Dune\"],[\"#384555\",\"Oxford Blue\"],[\"#384910\",\"Clover\"],[\"#394851\",\"Limed Spruce\"],[\"#396413\",\"Dell\"],[\"#3a0020\",\"Toledo\"],[\"#3a2010\",\"Sambuca\"],[\"#3a2a6a\",\"Jacarta\"],[\"#3a686c\",\"William\"],[\"#3a6a47\",\"Killarney\"],[\"#3ab09e\",\"Keppel\"],[\"#3b000b\",\"Temptress\"],[\"#3b0910\",\"Aubergine\"],[\"#3b1f1f\",\"Jon\"],[\"#3b2820\",\"Treehouse\"],[\"#3b7a57\",\"Amazon\"],[\"#3b91b4\",\"Boston Blue\"],[\"#3c0878\",\"Windsor\"],[\"#3c1206\",\"Rebel\"],[\"#3c1f76\",\"Meteorite\"],[\"#3c2005\",\"Dark Ebony\"],[\"#3c3910\",\"Camouflage\"],[\"#3c4151\",\"Bright Gray\"],[\"#3c4443\",\"Cape Cod\"],[\"#3c493a\",\"Lunar Green\"],[\"#3d0c02\",\"Bean  \"],[\"#3d2b1f\",\"Bistre\"],[\"#3d7d52\",\"Goblin\"],[\"#3e0480\",\"Kingfisher Daisy\"],[\"#3e1c14\",\"Cedar\"],[\"#3e2b23\",\"English Walnut\"],[\"#3e2c1c\",\"Black Marlin\"],[\"#3e3a44\",\"Ship Gray\"],[\"#3eabbf\",\"Pelorous\"],[\"#3f2109\",\"Bronze\"],[\"#3f2500\",\"Cola\"],[\"#3f3002\",\"Madras\"],[\"#3f307f\",\"Minsk\"],[\"#3f4c3a\",\"Cabbage Pont\"],[\"#3f583b\",\"Tom Thumb\"],[\"#3f5d53\",\"Mineral Green\"],[\"#3fc1aa\",\"Puerto Rico\"],[\"#3fff00\",\"Harlequin\"],[\"#401801\",\"Brown Pod\"],[\"#40291d\",\"Cork\"],[\"#403b38\",\"Masala\"],[\"#403d19\",\"Thatch Green\"],[\"#405169\",\"Fiord\"],[\"#40826d\",\"Viridian\"],[\"#40a860\",\"Chateau Green\"],[\"#410056\",\"Ripe Plum\"],[\"#411f10\",\"Paco\"],[\"#412010\",\"Deep Oak\"],[\"#413c37\",\"Merlin\"],[\"#414257\",\"Gun Powder\"],[\"#414c7d\",\"East Bay\"],[\"#4169e1\",\"Royal Blue\"],[\"#41aa78\",\"Ocean Green\"],[\"#420303\",\"Burnt Maroon\"],[\"#423921\",\"Lisbon Brown\"],[\"#427977\",\"Faded Jade\"],[\"#431560\",\"Scarlet Gum\"],[\"#433120\",\"Iroko\"],[\"#433e37\",\"Armadillo\"],[\"#434c59\",\"River Bed\"],[\"#436a0d\",\"Green Leaf\"],[\"#44012d\",\"Barossa\"],[\"#441d00\",\"Morocco Brown\"],[\"#444954\",\"Mako\"],[\"#454936\",\"Kelp\"],[\"#456cac\",\"San Marino\"],[\"#45b1e8\",\"Picton Blue\"],[\"#460b41\",\"Loulou\"],[\"#462425\",\"Crater Brown\"],[\"#465945\",\"Gray Asparagus\"],[\"#4682b4\",\"Steel Blue\"],[\"#480404\",\"Rustic Red\"],[\"#480607\",\"Bulgarian Rose\"],[\"#480656\",\"Clairvoyant\"],[\"#481c1c\",\"Cocoa Bean\"],[\"#483131\",\"Woody Brown\"],[\"#483c32\",\"Taupe\"],[\"#49170c\",\"Van Cleef\"],[\"#492615\",\"Brown Derby\"],[\"#49371b\",\"Metallic Bronze\"],[\"#495400\",\"Verdun Green\"],[\"#496679\",\"Blue Bayoux\"],[\"#497183\",\"Bismark\"],[\"#4a2a04\",\"Bracken\"],[\"#4a3004\",\"Deep Bronze\"],[\"#4a3c30\",\"Mondo\"],[\"#4a4244\",\"Tundora\"],[\"#4a444b\",\"Gravel\"],[\"#4a4e5a\",\"Trout\"],[\"#4b0082\",\"Pigment Indigo\"],[\"#4b5d52\",\"Nandor\"],[\"#4c3024\",\"Saddle\"],[\"#4c4f56\",\"Abbey\"],[\"#4d0135\",\"Blackberry\"],[\"#4d0a18\",\"Cab Sav\"],[\"#4d1e01\",\"Indian Tan\"],[\"#4d282d\",\"Cowboy\"],[\"#4d282e\",\"Livid Brown\"],[\"#4d3833\",\"Rock\"],[\"#4d3d14\",\"Punga\"],[\"#4d400f\",\"Bronzetone\"],[\"#4d5328\",\"Woodland\"],[\"#4e0606\",\"Mahogany\"],[\"#4e2a5a\",\"Bossanova\"],[\"#4e3b41\",\"Matterhorn\"],[\"#4e420c\",\"Bronze Olive\"],[\"#4e4562\",\"Mulled Wine\"],[\"#4e6649\",\"Axolotl\"],[\"#4e7f9e\",\"Wedgewood\"],[\"#4eabd1\",\"Shakespeare\"],[\"#4f1c70\",\"Honey Flower\"],[\"#4f2398\",\"Daisy Bush\"],[\"#4f69c6\",\"Indigo\"],[\"#4f7942\",\"Fern Green\"],[\"#4f9d5d\",\"Fruit Salad\"],[\"#4fa83d\",\"Apple\"],[\"#504351\",\"Mortar\"],[\"#507096\",\"Kashmir Blue\"],[\"#507672\",\"Cutty Sark\"],[\"#50c878\",\"Emerald\"],[\"#514649\",\"Emperor\"],[\"#516e3d\",\"Chalet Green\"],[\"#517c66\",\"Como\"],[\"#51808f\",\"Smalt Blue\"],[\"#52001f\",\"Castro\"],[\"#520c17\",\"Maroon Oak\"],[\"#523c94\",\"Gigas\"],[\"#533455\",\"Voodoo\"],[\"#534491\",\"Victoria\"],[\"#53824b\",\"Hippie Green\"],[\"#541012\",\"Heath\"],[\"#544333\",\"Judge Gray\"],[\"#54534d\",\"Fuscous Gray\"],[\"#549019\",\"Vida Loca\"],[\"#55280c\",\"Cioccolato\"],[\"#555b10\",\"Saratoga\"],[\"#556d56\",\"Finlandia\"],[\"#5590d9\",\"Havelock Blue\"],[\"#56b4be\",\"Fountain Blue\"],[\"#578363\",\"Spring Leaves\"],[\"#583401\",\"Saddle Brown\"],[\"#585562\",\"Scarpa Flow\"],[\"#587156\",\"Cactus\"],[\"#589aaf\",\"Hippie Blue\"],[\"#591d35\",\"Wine Berry\"],[\"#592804\",\"Brown Bramble\"],[\"#593737\",\"Congo Brown\"],[\"#594433\",\"Millbrook\"],[\"#5a6e9c\",\"Waikawa Gray\"],[\"#5a87a0\",\"Horizon\"],[\"#5b3013\",\"Jambalaya\"],[\"#5c0120\",\"Bordeaux\"],[\"#5c0536\",\"Mulberry Wood\"],[\"#5c2e01\",\"Carnaby Tan\"],[\"#5c5d75\",\"Comet\"],[\"#5d1e0f\",\"Redwood\"],[\"#5d4c51\",\"Don Juan\"],[\"#5d5c58\",\"Chicago\"],[\"#5d5e37\",\"Verdigris\"],[\"#5d7747\",\"Dingley\"],[\"#5da19f\",\"Breaker Bay\"],[\"#5e483e\",\"Kabul\"],[\"#5e5d3b\",\"Hemlock\"],[\"#5f3d26\",\"Irish Coffee\"],[\"#5f5f6e\",\"Mid Gray\"],[\"#5f6672\",\"Shuttle Gray\"],[\"#5fa777\",\"Aqua Forest\"],[\"#5fb3ac\",\"Tradewind\"],[\"#604913\",\"Horses Neck\"],[\"#605b73\",\"Smoky\"],[\"#606e68\",\"Corduroy\"],[\"#6093d1\",\"Danube\"],[\"#612718\",\"Espresso\"],[\"#614051\",\"Eggplant\"],[\"#615d30\",\"Costa Del Sol\"],[\"#61845f\",\"Glade Green\"],[\"#622f30\",\"Buccaneer\"],[\"#623f2d\",\"Quincy\"],[\"#624e9a\",\"Butterfly Bush\"],[\"#625119\",\"West Coast\"],[\"#626649\",\"Finch\"],[\"#639a8f\",\"Patina\"],[\"#63b76c\",\"Fern\"],[\"#6456b7\",\"Blue Violet\"],[\"#646077\",\"Dolphin\"],[\"#646463\",\"Storm Dust\"],[\"#646a54\",\"Siam\"],[\"#646e75\",\"Nevada\"],[\"#6495ed\",\"Cornflower Blue\"],[\"#64ccdb\",\"Viking\"],[\"#65000b\",\"Rosewood\"],[\"#651a14\",\"Cherrywood\"],[\"#652dc1\",\"Purple Heart\"],[\"#657220\",\"Fern Frond\"],[\"#65745d\",\"Willow Grove\"],[\"#65869f\",\"Hoki\"],[\"#660045\",\"Pompadour\"],[\"#660099\",\"Purple\"],[\"#66023c\",\"Tyrian Purple\"],[\"#661010\",\"Dark Tan\"],[\"#66b58f\",\"Silver Tree\"],[\"#66ff00\",\"Bright Green\"],[\"#66ff66\",\"Screamin Green\"],[\"#67032d\",\"Black Rose\"],[\"#675fa6\",\"Scampi\"],[\"#676662\",\"Ironside Gray\"],[\"#678975\",\"Viridian Green\"],[\"#67a712\",\"Christi\"],[\"#683600\",\"Nutmeg Wood Finish\"],[\"#685558\",\"Zambezi\"],[\"#685e6e\",\"Salt Box\"],[\"#692545\",\"Tawny Port\"],[\"#692d54\",\"Finn\"],[\"#695f62\",\"Scorpion\"],[\"#697e9a\",\"Lynch\"],[\"#6a442e\",\"Spice\"],[\"#6a5d1b\",\"Himalaya\"],[\"#6a6051\",\"Soya Bean\"],[\"#6b2a14\",\"Hairy Heath\"],[\"#6b3fa0\",\"Royal Purple\"],[\"#6b4e31\",\"Shingle Fawn\"],[\"#6b5755\",\"Dorado\"],[\"#6b8ba2\",\"Bermuda Gray\"],[\"#6b8e23\",\"Olive Drab\"],[\"#6c3082\",\"Eminence\"],[\"#6cdae7\",\"Turquoise Blue\"],[\"#6d0101\",\"Lonestar\"],[\"#6d5e54\",\"Pine Cone\"],[\"#6d6c6c\",\"Dove Gray\"],[\"#6d9292\",\"Juniper\"],[\"#6d92a1\",\"Gothic\"],[\"#6e0902\",\"Red Oxide\"],[\"#6e1d14\",\"Moccaccino\"],[\"#6e4826\",\"Pickled Bean\"],[\"#6e4b26\",\"Dallas\"],[\"#6e6d57\",\"Kokoda\"],[\"#6e7783\",\"Pale Sky\"],[\"#6f440c\",\"Cafe Royale\"],[\"#6f6a61\",\"Flint\"],[\"#6f8e63\",\"Highland\"],[\"#6f9d02\",\"Limeade\"],[\"#6fd0c5\",\"Downy\"],[\"#701c1c\",\"Persian Plum\"],[\"#704214\",\"Sepia\"],[\"#704a07\",\"Antique Bronze\"],[\"#704f50\",\"Ferra\"],[\"#706555\",\"Coffee\"],[\"#708090\",\"Slate Gray\"],[\"#711a00\",\"Cedar Wood Finish\"],[\"#71291d\",\"Metallic Copper\"],[\"#714693\",\"Affair\"],[\"#714ab2\",\"Studio\"],[\"#715d47\",\"Tobacco Brown\"],[\"#716338\",\"Yellow Metal\"],[\"#716b56\",\"Peat\"],[\"#716e10\",\"Olivetone\"],[\"#717486\",\"Storm Gray\"],[\"#718080\",\"Sirocco\"],[\"#71d9e2\",\"Aquamarine Blue\"],[\"#72010f\",\"Venetian Red\"],[\"#724a2f\",\"Old Copper\"],[\"#726d4e\",\"Go Ben\"],[\"#727b89\",\"Raven\"],[\"#731e8f\",\"Seance\"],[\"#734a12\",\"Raw Umber\"],[\"#736c9f\",\"Kimberly\"],[\"#736d58\",\"Crocodile\"],[\"#737829\",\"Crete\"],[\"#738678\",\"Xanadu\"],[\"#74640d\",\"Spicy Mustard\"],[\"#747d63\",\"Limed Ash\"],[\"#747d83\",\"Rolling Stone\"],[\"#748881\",\"Blue Smoke\"],[\"#749378\",\"Laurel\"],[\"#74c365\",\"Mantis\"],[\"#755a57\",\"Russett\"],[\"#7563a8\",\"Deluge\"],[\"#76395d\",\"Cosmic\"],[\"#7666c6\",\"Blue Marguerite\"],[\"#76bd17\",\"Lima\"],[\"#76d7ea\",\"Sky Blue\"],[\"#770f05\",\"Dark Burgundy\"],[\"#771f1f\",\"Crown Of Thorns\"],[\"#773f1a\",\"Walnut\"],[\"#776f61\",\"Pablo\"],[\"#778120\",\"Pacifika\"],[\"#779e86\",\"Oxley\"],[\"#77dd77\",\"Pastel Green\"],[\"#780109\",\"Japanese Maple\"],[\"#782d19\",\"Mocha\"],[\"#782f16\",\"Peanut\"],[\"#78866b\",\"Camouflage Green\"],[\"#788a25\",\"Wasabi\"],[\"#788bba\",\"Ship Cove\"],[\"#78a39c\",\"Sea Nymph\"],[\"#795d4c\",\"Roman Coffee\"],[\"#796878\",\"Old Lavender\"],[\"#796989\",\"Rum\"],[\"#796a78\",\"Fedora\"],[\"#796d62\",\"Sandstone\"],[\"#79deec\",\"Spray\"],[\"#7a013a\",\"Siren\"],[\"#7a58c1\",\"Fuchsia Blue\"],[\"#7a7a7a\",\"Boulder\"],[\"#7a89b8\",\"Wild Blue Yonder\"],[\"#7ac488\",\"De York\"],[\"#7b3801\",\"Red Beech\"],[\"#7b3f00\",\"Cinnamon\"],[\"#7b6608\",\"Yukon Gold\"],[\"#7b7874\",\"Tapa\"],[\"#7b7c94\",\"Waterloo \"],[\"#7b8265\",\"Flax Smoke\"],[\"#7b9f80\",\"Amulet\"],[\"#7ba05b\",\"Asparagus\"],[\"#7c1c05\",\"Kenyan Copper\"],[\"#7c7631\",\"Pesto\"],[\"#7c778a\",\"Topaz\"],[\"#7c7b7a\",\"Concord\"],[\"#7c7b82\",\"Jumbo\"],[\"#7c881a\",\"Trendy Green\"],[\"#7ca1a6\",\"Gumbo\"],[\"#7cb0a1\",\"Acapulco\"],[\"#7cb7bb\",\"Neptune\"],[\"#7d2c14\",\"Pueblo\"],[\"#7da98d\",\"Bay Leaf\"],[\"#7dc8f7\",\"Malibu\"],[\"#7dd8c6\",\"Bermuda\"],[\"#7e3a15\",\"Copper Canyon\"],[\"#7f1734\",\"Claret\"],[\"#7f3a02\",\"Peru Tan\"],[\"#7f626d\",\"Falcon\"],[\"#7f7589\",\"Mobster\"],[\"#7f76d3\",\"Moody Blue\"],[\"#7fff00\",\"Chartreuse\"],[\"#7fffd4\",\"Aquamarine\"],[\"#800000\",\"Maroon\"],[\"#800b47\",\"Rose Bud Cherry\"],[\"#801818\",\"Falu Red\"],[\"#80341f\",\"Red Robin\"],[\"#803790\",\"Vivid Violet\"],[\"#80461b\",\"Russet\"],[\"#807e79\",\"Friar Gray\"],[\"#808000\",\"Olive\"],[\"#808080\",\"Gray\"],[\"#80b3ae\",\"Gulf Stream\"],[\"#80b3c4\",\"Glacier\"],[\"#80ccea\",\"Seagull\"],[\"#81422c\",\"Nutmeg\"],[\"#816e71\",\"Spicy Pink\"],[\"#817377\",\"Empress\"],[\"#819885\",\"Spanish Green\"],[\"#826f65\",\"Sand Dune\"],[\"#828685\",\"Gunsmoke\"],[\"#828f72\",\"Battleship Gray\"],[\"#831923\",\"Merlot\"],[\"#837050\",\"Shadow\"],[\"#83aa5d\",\"Chelsea Cucumber\"],[\"#83d0c6\",\"Monte Carlo\"],[\"#843179\",\"Plum\"],[\"#84a0a0\",\"Granny Smith\"],[\"#8581d9\",\"Chetwode Blue\"],[\"#858470\",\"Bandicoot\"],[\"#859faf\",\"Bali Hai\"],[\"#85c4cc\",\"Half Baked\"],[\"#860111\",\"Red Devil\"],[\"#863c3c\",\"Lotus\"],[\"#86483c\",\"Ironstone\"],[\"#864d1e\",\"Bull Shot\"],[\"#86560a\",\"Rusty Nail\"],[\"#868974\",\"Bitter\"],[\"#86949f\",\"Regent Gray\"],[\"#871550\",\"Disco\"],[\"#87756e\",\"Americano\"],[\"#877c7b\",\"Hurricane\"],[\"#878d91\",\"Oslo Gray\"],[\"#87ab39\",\"Sushi\"],[\"#885342\",\"Spicy Mix\"],[\"#886221\",\"Kumera\"],[\"#888387\",\"Suva Gray\"],[\"#888d65\",\"Avocado\"],[\"#893456\",\"Camelot\"],[\"#893843\",\"Solid Pink\"],[\"#894367\",\"Cannon Pink\"],[\"#897d6d\",\"Makara\"],[\"#8a3324\",\"Burnt Umber\"],[\"#8a73d6\",\"True V\"],[\"#8a8360\",\"Clay Creek\"],[\"#8a8389\",\"Monsoon\"],[\"#8a8f8a\",\"Stack\"],[\"#8ab9f1\",\"Jordy Blue\"],[\"#8b00ff\",\"Electric Violet\"],[\"#8b0723\",\"Monarch\"],[\"#8b6b0b\",\"Corn Harvest\"],[\"#8b8470\",\"Olive Haze\"],[\"#8b847e\",\"Schooner\"],[\"#8b8680\",\"Natural Gray\"],[\"#8b9c90\",\"Mantle\"],[\"#8b9fee\",\"Portage\"],[\"#8ba690\",\"Envy\"],[\"#8ba9a5\",\"Cascade\"],[\"#8be6d8\",\"Riptide\"],[\"#8c055e\",\"Cardinal Pink\"],[\"#8c472f\",\"Mule Fawn\"],[\"#8c5738\",\"Potters Clay\"],[\"#8c6495\",\"Trendy Pink\"],[\"#8d0226\",\"Paprika\"],[\"#8d3d38\",\"Sanguine Brown\"],[\"#8d3f3f\",\"Tosca\"],[\"#8d7662\",\"Cement\"],[\"#8d8974\",\"Granite Green\"],[\"#8d90a1\",\"Manatee\"],[\"#8da8cc\",\"Polo Blue\"],[\"#8e0000\",\"Red Berry\"],[\"#8e4d1e\",\"Rope\"],[\"#8e6f70\",\"Opium\"],[\"#8e775e\",\"Domino\"],[\"#8e8190\",\"Mamba\"],[\"#8eabc1\",\"Nepal\"],[\"#8f021c\",\"Pohutukawa\"],[\"#8f3e33\",\"El Salva\"],[\"#8f4b0e\",\"Korma\"],[\"#8f8176\",\"Squirrel\"],[\"#8fd6b4\",\"Vista Blue\"],[\"#900020\",\"Burgundy\"],[\"#901e1e\",\"Old Brick\"],[\"#907874\",\"Hemp\"],[\"#907b71\",\"Almond Frost\"],[\"#908d39\",\"Sycamore\"],[\"#92000a\",\"Sangria\"],[\"#924321\",\"Cumin\"],[\"#926f5b\",\"Beaver\"],[\"#928573\",\"Stonewall\"],[\"#928590\",\"Venus\"],[\"#9370db\",\"Medium Purple\"],[\"#93ccea\",\"Cornflower\"],[\"#93dfb8\",\"Algae Green\"],[\"#944747\",\"Copper Rust\"],[\"#948771\",\"Arrowtown\"],[\"#950015\",\"Scarlett\"],[\"#956387\",\"Strikemaster\"],[\"#959396\",\"Mountain Mist\"],[\"#960018\",\"Carmine\"],[\"#964b00\",\"Brown\"],[\"#967059\",\"Leather\"],[\"#9678b6\",\"Purple Mountain's Majesty\"],[\"#967bb6\",\"Lavender Purple\"],[\"#96a8a1\",\"Pewter\"],[\"#96bbab\",\"Summer Green\"],[\"#97605d\",\"Au Chico\"],[\"#9771b5\",\"Wisteria\"],[\"#97cd2d\",\"Atlantis\"],[\"#983d61\",\"Vin Rouge\"],[\"#9874d3\",\"Lilac Bush\"],[\"#98777b\",\"Bazaar\"],[\"#98811b\",\"Hacienda\"],[\"#988d77\",\"Pale Oyster\"],[\"#98ff98\",\"Mint Green\"],[\"#990066\",\"Fresh Eggplant\"],[\"#991199\",\"Violet Eggplant\"],[\"#991613\",\"Tamarillo\"],[\"#991b07\",\"Totem Pole\"],[\"#996666\",\"Copper Rose\"],[\"#9966cc\",\"Amethyst\"],[\"#997a8d\",\"Mountbatten Pink\"],[\"#9999cc\",\"Blue Bell\"],[\"#9a3820\",\"Prairie Sand\"],[\"#9a6e61\",\"Toast\"],[\"#9a9577\",\"Gurkha\"],[\"#9ab973\",\"Olivine\"],[\"#9ac2b8\",\"Shadow Green\"],[\"#9b4703\",\"Oregon\"],[\"#9b9e8f\",\"Lemon Grass\"],[\"#9c3336\",\"Stiletto\"],[\"#9d5616\",\"Hawaiian Tan\"],[\"#9dacb7\",\"Gull Gray\"],[\"#9dc209\",\"Pistachio\"],[\"#9de093\",\"Granny Smith Apple\"],[\"#9de5ff\",\"Anakiwa\"],[\"#9e5302\",\"Chelsea Gem\"],[\"#9e5b40\",\"Sepia Skin\"],[\"#9ea587\",\"Sage\"],[\"#9ea91f\",\"Citron\"],[\"#9eb1cd\",\"Rock Blue\"],[\"#9edee0\",\"Morning Glory\"],[\"#9f381d\",\"Cognac\"],[\"#9f821c\",\"Reef Gold\"],[\"#9f9f9c\",\"Star Dust\"],[\"#9fa0b1\",\"Santas Gray\"],[\"#9fd7d3\",\"Sinbad\"],[\"#9fdd8c\",\"Feijoa\"],[\"#a02712\",\"Tabasco\"],[\"#a1750d\",\"Buttered Rum\"],[\"#a1adb5\",\"Hit Gray\"],[\"#a1c50a\",\"Citrus\"],[\"#a1dad7\",\"Aqua Island\"],[\"#a1e9de\",\"Water Leaf\"],[\"#a2006d\",\"Flirt\"],[\"#a23b6c\",\"Rouge\"],[\"#a26645\",\"Cape Palliser\"],[\"#a2aab3\",\"Gray Chateau\"],[\"#a2aeab\",\"Edward\"],[\"#a3807b\",\"Pharlap\"],[\"#a397b4\",\"Amethyst Smoke\"],[\"#a3e3ed\",\"Blizzard Blue\"],[\"#a4a49d\",\"Delta\"],[\"#a4a6d3\",\"Wistful\"],[\"#a4af6e\",\"Green Smoke\"],[\"#a50b5e\",\"Jazzberry Jam\"],[\"#a59b91\",\"Zorba\"],[\"#a5cb0c\",\"Bahia\"],[\"#a62f20\",\"Roof Terracotta\"],[\"#a65529\",\"Paarl\"],[\"#a68b5b\",\"Barley Corn\"],[\"#a69279\",\"Donkey Brown\"],[\"#a6a29a\",\"Dawn\"],[\"#a72525\",\"Mexican Red\"],[\"#a7882c\",\"Luxor Gold\"],[\"#a85307\",\"Rich Gold\"],[\"#a86515\",\"Reno Sand\"],[\"#a86b6b\",\"Coral Tree\"],[\"#a8989b\",\"Dusty Gray\"],[\"#a899e6\",\"Dull Lavender\"],[\"#a8a589\",\"Tallow\"],[\"#a8ae9c\",\"Bud\"],[\"#a8af8e\",\"Locust\"],[\"#a8bd9f\",\"Norway\"],[\"#a8e3bd\",\"Chinook\"],[\"#a9a491\",\"Gray Olive\"],[\"#a9acb6\",\"Aluminium\"],[\"#a9b2c3\",\"Cadet Blue\"],[\"#a9b497\",\"Schist\"],[\"#a9bdbf\",\"Tower Gray\"],[\"#a9bef2\",\"Perano\"],[\"#a9c6c2\",\"Opal\"],[\"#aa375a\",\"Night Shadz\"],[\"#aa4203\",\"Fire\"],[\"#aa8b5b\",\"Muesli\"],[\"#aa8d6f\",\"Sandal\"],[\"#aaa5a9\",\"Shady Lady\"],[\"#aaa9cd\",\"Logan\"],[\"#aaabb7\",\"Spun Pearl\"],[\"#aad6e6\",\"Regent St Blue\"],[\"#aaf0d1\",\"Magic Mint\"],[\"#ab0563\",\"Lipstick\"],[\"#ab3472\",\"Royal Heath\"],[\"#ab917a\",\"Sandrift\"],[\"#aba0d9\",\"Cold Purple\"],[\"#aba196\",\"Bronco\"],[\"#ac8a56\",\"Limed Oak\"],[\"#ac91ce\",\"East Side\"],[\"#ac9e22\",\"Lemon Ginger\"],[\"#aca494\",\"Napa\"],[\"#aca586\",\"Hillary\"],[\"#aca59f\",\"Cloudy\"],[\"#acacac\",\"Silver Chalice\"],[\"#acb78e\",\"Swamp Green\"],[\"#accbb1\",\"Spring Rain\"],[\"#acdd4d\",\"Conifer\"],[\"#ace1af\",\"Celadon\"],[\"#ad781b\",\"Mandalay\"],[\"#adbed1\",\"Casper\"],[\"#addfad\",\"Moss Green\"],[\"#ade6c4\",\"Padua\"],[\"#adff2f\",\"Green Yellow\"],[\"#ae4560\",\"Hippie Pink\"],[\"#ae6020\",\"Desert\"],[\"#ae809e\",\"Bouquet\"],[\"#af4035\",\"Medium Carmine\"],[\"#af4d43\",\"Apple Blossom\"],[\"#af593e\",\"Brown Rust\"],[\"#af8751\",\"Driftwood\"],[\"#af8f2c\",\"Alpine\"],[\"#af9f1c\",\"Lucky\"],[\"#afa09e\",\"Martini\"],[\"#afb1b8\",\"Bombay\"],[\"#afbdd9\",\"Pigeon Post\"],[\"#b04c6a\",\"Cadillac\"],[\"#b05d54\",\"Matrix\"],[\"#b05e81\",\"Tapestry\"],[\"#b06608\",\"Mai Tai\"],[\"#b09a95\",\"Del Rio\"],[\"#b0e0e6\",\"Powder Blue\"],[\"#b0e313\",\"Inch Worm\"],[\"#b10000\",\"Bright Red\"],[\"#b14a0b\",\"Vesuvius\"],[\"#b1610b\",\"Pumpkin Skin\"],[\"#b16d52\",\"Santa Fe\"],[\"#b19461\",\"Teak\"],[\"#b1e2c1\",\"Fringy Flower\"],[\"#b1f4e7\",\"Ice Cold\"],[\"#b20931\",\"Shiraz\"],[\"#b2a1ea\",\"Biloba Flower\"],[\"#b32d29\",\"Tall Poppy\"],[\"#b35213\",\"Fiery Orange\"],[\"#b38007\",\"Hot Toddy\"],[\"#b3af95\",\"Taupe Gray\"],[\"#b3c110\",\"La Rioja\"],[\"#b43332\",\"Well Read\"],[\"#b44668\",\"Blush\"],[\"#b4cfd3\",\"Jungle Mist\"],[\"#b57281\",\"Turkish Rose\"],[\"#b57edc\",\"Lavender\"],[\"#b5a27f\",\"Mongoose\"],[\"#b5b35c\",\"Olive Green\"],[\"#b5d2ce\",\"Jet Stream\"],[\"#b5ecdf\",\"Cruise\"],[\"#b6316c\",\"Hibiscus\"],[\"#b69d98\",\"Thatch\"],[\"#b6b095\",\"Heathered Gray\"],[\"#b6baa4\",\"Eagle\"],[\"#b6d1ea\",\"Spindle\"],[\"#b6d3bf\",\"Gum Leaf\"],[\"#b7410e\",\"Rust\"],[\"#b78e5c\",\"Muddy Waters\"],[\"#b7a214\",\"Sahara\"],[\"#b7a458\",\"Husk\"],[\"#b7b1b1\",\"Nobel\"],[\"#b7c3d0\",\"Heather\"],[\"#b7f0be\",\"Madang\"],[\"#b81104\",\"Milano Red\"],[\"#b87333\",\"Copper\"],[\"#b8b56a\",\"Gimblet\"],[\"#b8c1b1\",\"Green Spring\"],[\"#b8c25d\",\"Celery\"],[\"#b8e0f9\",\"Sail\"],[\"#b94e48\",\"Chestnut\"],[\"#b95140\",\"Crail\"],[\"#b98d28\",\"Marigold\"],[\"#b9c46a\",\"Wild Willow\"],[\"#b9c8ac\",\"Rainee\"],[\"#ba0101\",\"Guardsman Red\"],[\"#ba450c\",\"Rock Spray\"],[\"#ba6f1e\",\"Bourbon\"],[\"#ba7f03\",\"Pirate Gold\"],[\"#bab1a2\",\"Nomad\"],[\"#bac7c9\",\"Submarine\"],[\"#baeef9\",\"Charlotte\"],[\"#bb3385\",\"Medium Red Violet\"],[\"#bb8983\",\"Brandy Rose\"],[\"#bbd009\",\"Rio Grande\"],[\"#bbd7c1\",\"Surf\"],[\"#bcc9c2\",\"Powder Ash\"],[\"#bd5e2e\",\"Tuscany\"],[\"#bd978e\",\"Quicksand\"],[\"#bdb1a8\",\"Silk\"],[\"#bdb2a1\",\"Malta\"],[\"#bdb3c7\",\"Chatelle\"],[\"#bdbbd7\",\"Lavender Gray\"],[\"#bdbdc6\",\"French Gray\"],[\"#bdc8b3\",\"Clay Ash\"],[\"#bdc9ce\",\"Loblolly\"],[\"#bdedfd\",\"French Pass\"],[\"#bea6c3\",\"London Hue\"],[\"#beb5b7\",\"Pink Swan\"],[\"#bede0d\",\"Fuego\"],[\"#bf5500\",\"Rose Of Sharon\"],[\"#bfb8b0\",\"Tide\"],[\"#bfbed8\",\"Blue Haze\"],[\"#bfc1c2\",\"Silver Sand\"],[\"#bfc921\",\"Key Lime Pie\"],[\"#bfdbe2\",\"Ziggurat\"],[\"#bfff00\",\"Lime\"],[\"#c02b18\",\"Thunderbird\"],[\"#c04737\",\"Mojo\"],[\"#c08081\",\"Old Rose\"],[\"#c0c0c0\",\"Silver\"],[\"#c0d3b9\",\"Pale Leaf\"],[\"#c0d8b6\",\"Pixie Green\"],[\"#c1440e\",\"Tia Maria\"],[\"#c154c1\",\"Fuchsia Pink\"],[\"#c1a004\",\"Buddha Gold\"],[\"#c1b7a4\",\"Bison Hide\"],[\"#c1bab0\",\"Tea\"],[\"#c1becd\",\"Gray Suit\"],[\"#c1d7b0\",\"Sprout\"],[\"#c1f07c\",\"Sulu\"],[\"#c26b03\",\"Indochine\"],[\"#c2955d\",\"Twine\"],[\"#c2bdb6\",\"Cotton Seed\"],[\"#c2cac4\",\"Pumice\"],[\"#c2e8e5\",\"Jagged Ice\"],[\"#c32148\",\"Maroon Flush\"],[\"#c3b091\",\"Indian Khaki\"],[\"#c3bfc1\",\"Pale Slate\"],[\"#c3c3bd\",\"Gray Nickel\"],[\"#c3cde6\",\"Periwinkle Gray\"],[\"#c3d1d1\",\"Tiara\"],[\"#c3ddf9\",\"Tropical Blue\"],[\"#c41e3a\",\"Cardinal\"],[\"#c45655\",\"Fuzzy Wuzzy Brown\"],[\"#c45719\",\"Orange Roughy\"],[\"#c4c4bc\",\"Mist Gray\"],[\"#c4d0b0\",\"Coriander\"],[\"#c4f4eb\",\"Mint Tulip\"],[\"#c54b8c\",\"Mulberry\"],[\"#c59922\",\"Nugget\"],[\"#c5994b\",\"Tussock\"],[\"#c5dbca\",\"Sea Mist\"],[\"#c5e17a\",\"Yellow Green\"],[\"#c62d42\",\"Brick Red\"],[\"#c6726b\",\"Contessa\"],[\"#c69191\",\"Oriental Pink\"],[\"#c6a84b\",\"Roti\"],[\"#c6c3b5\",\"Ash\"],[\"#c6c8bd\",\"Kangaroo\"],[\"#c6e610\",\"Las Palmas\"],[\"#c7031e\",\"Monza\"],[\"#c71585\",\"Red Violet\"],[\"#c7bca2\",\"Coral Reef\"],[\"#c7c1ff\",\"Melrose\"],[\"#c7c4bf\",\"Cloud\"],[\"#c7c9d5\",\"Ghost\"],[\"#c7cd90\",\"Pine Glade\"],[\"#c7dde5\",\"Botticelli\"],[\"#c88a65\",\"Antique Brass\"],[\"#c8a2c8\",\"Lilac\"],[\"#c8a528\",\"Hokey Pokey\"],[\"#c8aabf\",\"Lily\"],[\"#c8b568\",\"Laser\"],[\"#c8e3d7\",\"Edgewater\"],[\"#c96323\",\"Piper\"],[\"#c99415\",\"Pizza\"],[\"#c9a0dc\",\"Light Wisteria\"],[\"#c9b29b\",\"Rodeo Dust\"],[\"#c9b35b\",\"Sundance\"],[\"#c9b93b\",\"Earls Green\"],[\"#c9c0bb\",\"Silver Rust\"],[\"#c9d9d2\",\"Conch\"],[\"#c9ffa2\",\"Reef\"],[\"#c9ffe5\",\"Aero Blue\"],[\"#ca3435\",\"Flush Mahogany\"],[\"#cabb48\",\"Turmeric\"],[\"#cadcd4\",\"Paris White\"],[\"#cae00d\",\"Bitter Lemon\"],[\"#cae6da\",\"Skeptic\"],[\"#cb8fa9\",\"Viola\"],[\"#cbcab6\",\"Foggy Gray\"],[\"#cbd3b0\",\"Green Mist\"],[\"#cbdbd6\",\"Nebula\"],[\"#cc3333\",\"Persian Red\"],[\"#cc5500\",\"Burnt Orange\"],[\"#cc7722\",\"Ochre\"],[\"#cc8899\",\"Puce\"],[\"#cccaa8\",\"Thistle Green\"],[\"#ccccff\",\"Periwinkle\"],[\"#ccff00\",\"Electric Lime\"],[\"#cd5700\",\"Tenn\"],[\"#cd5c5c\",\"Chestnut Rose\"],[\"#cd8429\",\"Brandy Punch\"],[\"#cdf4ff\",\"Onahau\"],[\"#ceb98f\",\"Sorrell Brown\"],[\"#cebaba\",\"Cold Turkey\"],[\"#cec291\",\"Yuma\"],[\"#cec7a7\",\"Chino\"],[\"#cfa39d\",\"Eunry\"],[\"#cfb53b\",\"Old Gold\"],[\"#cfdccf\",\"Tasman\"],[\"#cfe5d2\",\"Surf Crest\"],[\"#cff9f3\",\"Humming Bird\"],[\"#cffaf4\",\"Scandal\"],[\"#d05f04\",\"Red Stage\"],[\"#d06da1\",\"Hopbush\"],[\"#d07d12\",\"Meteor\"],[\"#d0bef8\",\"Perfume\"],[\"#d0c0e5\",\"Prelude\"],[\"#d0f0c0\",\"Tea Green\"],[\"#d18f1b\",\"Geebung\"],[\"#d1bea8\",\"Vanilla\"],[\"#d1c6b4\",\"Soft Amber\"],[\"#d1d2ca\",\"Celeste\"],[\"#d1d2dd\",\"Mischka\"],[\"#d1e231\",\"Pear\"],[\"#d2691e\",\"Hot Cinnamon\"],[\"#d27d46\",\"Raw Sienna\"],[\"#d29eaa\",\"Careys Pink\"],[\"#d2b48c\",\"Tan\"],[\"#d2da97\",\"Deco\"],[\"#d2f6de\",\"Blue Romance\"],[\"#d2f8b0\",\"Gossip\"],[\"#d3cbba\",\"Sisal\"],[\"#d3cdc5\",\"Swirl\"],[\"#d47494\",\"Charm\"],[\"#d4b6af\",\"Clam Shell\"],[\"#d4bf8d\",\"Straw\"],[\"#d4c4a8\",\"Akaroa\"],[\"#d4cd16\",\"Bird Flower\"],[\"#d4d7d9\",\"Iron\"],[\"#d4dfe2\",\"Geyser\"],[\"#d4e2fc\",\"Hawkes Blue\"],[\"#d54600\",\"Grenadier\"],[\"#d591a4\",\"Can Can\"],[\"#d59a6f\",\"Whiskey\"],[\"#d5d195\",\"Winter Hazel\"],[\"#d5f6e3\",\"Granny Apple\"],[\"#d69188\",\"My Pink\"],[\"#d6c562\",\"Tacha\"],[\"#d6cef6\",\"Moon Raker\"],[\"#d6d6d1\",\"Quill Gray\"],[\"#d6ffdb\",\"Snowy Mint\"],[\"#d7837f\",\"New York Pink\"],[\"#d7c498\",\"Pavlova\"],[\"#d7d0ff\",\"Fog\"],[\"#d84437\",\"Valencia\"],[\"#d87c63\",\"Japonica\"],[\"#d8bfd8\",\"Thistle\"],[\"#d8c2d5\",\"Maverick\"],[\"#d8fcfa\",\"Foam\"],[\"#d94972\",\"Cabaret\"],[\"#d99376\",\"Burning Sand\"],[\"#d9b99b\",\"Cameo\"],[\"#d9d6cf\",\"Timberwolf\"],[\"#d9dcc1\",\"Tana\"],[\"#d9e4f5\",\"Link Water\"],[\"#d9f7ff\",\"Mabel\"],[\"#da3287\",\"Cerise\"],[\"#da5b38\",\"Flame Pea\"],[\"#da6304\",\"Bamboo\"],[\"#da6a41\",\"Red Damask\"],[\"#da70d6\",\"Orchid\"],[\"#da8a67\",\"Copperfield\"],[\"#daa520\",\"Golden Grass\"],[\"#daecd6\",\"Zanah\"],[\"#daf4f0\",\"Iceberg\"],[\"#dafaff\",\"Oyster Bay\"],[\"#db5079\",\"Cranberry\"],[\"#db9690\",\"Petite Orchid\"],[\"#db995e\",\"Di Serria\"],[\"#dbdbdb\",\"Alto\"],[\"#dbfff8\",\"Frosted Mint\"],[\"#dc143c\",\"Crimson\"],[\"#dc4333\",\"Punch\"],[\"#dcb20c\",\"Galliano\"],[\"#dcb4bc\",\"Blossom\"],[\"#dcd747\",\"Wattle\"],[\"#dcd9d2\",\"Westar\"],[\"#dcddcc\",\"Moon Mist\"],[\"#dcedb4\",\"Caper\"],[\"#dcf0ea\",\"Swans Down\"],[\"#ddd6d5\",\"Swiss Coffee\"],[\"#ddf9f1\",\"White Ice\"],[\"#de3163\",\"Cerise Red\"],[\"#de6360\",\"Roman\"],[\"#dea681\",\"Tumbleweed\"],[\"#deba13\",\"Gold Tips\"],[\"#dec196\",\"Brandy\"],[\"#decbc6\",\"Wafer\"],[\"#ded4a4\",\"Sapling\"],[\"#ded717\",\"Barberry\"],[\"#dee5c0\",\"Beryl Green\"],[\"#def5ff\",\"Pattens Blue\"],[\"#df73ff\",\"Heliotrope\"],[\"#dfbe6f\",\"Apache\"],[\"#dfcd6f\",\"Chenin\"],[\"#dfcfdb\",\"Lola\"],[\"#dfecda\",\"Willow Brook\"],[\"#dfff00\",\"Chartreuse Yellow\"],[\"#e0b0ff\",\"Mauve\"],[\"#e0b646\",\"Anzac\"],[\"#e0b974\",\"Harvest Gold\"],[\"#e0c095\",\"Calico\"],[\"#e0ffff\",\"Baby Blue\"],[\"#e16865\",\"Sunglo\"],[\"#e1bc64\",\"Equator\"],[\"#e1c0c8\",\"Pink Flare\"],[\"#e1e6d6\",\"Periglacial Blue\"],[\"#e1ead4\",\"Kidnapper\"],[\"#e1f6e8\",\"Tara\"],[\"#e25465\",\"Mandy\"],[\"#e2725b\",\"Terracotta\"],[\"#e28913\",\"Golden Bell\"],[\"#e292c0\",\"Shocking\"],[\"#e29418\",\"Dixie\"],[\"#e29cd2\",\"Light Orchid\"],[\"#e2d8ed\",\"Snuff\"],[\"#e2ebed\",\"Mystic\"],[\"#e2f3ec\",\"Apple Green\"],[\"#e30b5c\",\"Razzmatazz\"],[\"#e32636\",\"Alizarin Crimson\"],[\"#e34234\",\"Cinnabar\"],[\"#e3bebe\",\"Cavern Pink\"],[\"#e3f5e1\",\"Peppermint\"],[\"#e3f988\",\"Mindaro\"],[\"#e47698\",\"Deep Blush\"],[\"#e49b0f\",\"Gamboge\"],[\"#e4c2d5\",\"Melanie\"],[\"#e4cfde\",\"Twilight\"],[\"#e4d1c0\",\"Bone\"],[\"#e4d422\",\"Sunflower\"],[\"#e4d5b7\",\"Grain Brown\"],[\"#e4d69b\",\"Zombie\"],[\"#e4f6e7\",\"Frostee\"],[\"#e4ffd1\",\"Snow Flurry\"],[\"#e52b50\",\"Amaranth\"],[\"#e5841b\",\"Zest\"],[\"#e5ccc9\",\"Dust Storm\"],[\"#e5d7bd\",\"Stark White\"],[\"#e5d8af\",\"Hampton\"],[\"#e5e0e1\",\"Bon Jour\"],[\"#e5e5e5\",\"Mercury\"],[\"#e5f9f6\",\"Polar\"],[\"#e64e03\",\"Trinidad\"],[\"#e6be8a\",\"Gold Sand\"],[\"#e6bea5\",\"Cashmere\"],[\"#e6d7b9\",\"Double Spanish White\"],[\"#e6e4d4\",\"Satin Linen\"],[\"#e6f2ea\",\"Harp\"],[\"#e6f8f3\",\"Off Green\"],[\"#e6ffe9\",\"Hint Of Green\"],[\"#e6ffff\",\"Tranquil\"],[\"#e77200\",\"Mango Tango\"],[\"#e7730a\",\"Christine\"],[\"#e79f8c\",\"Tonys Pink\"],[\"#e79fc4\",\"Kobi\"],[\"#e7bcb4\",\"Rose Fog\"],[\"#e7bf05\",\"Corn\"],[\"#e7cd8c\",\"Putty\"],[\"#e7ece6\",\"Gray Nurse\"],[\"#e7f8ff\",\"Lily White\"],[\"#e7feff\",\"Bubbles\"],[\"#e89928\",\"Fire Bush\"],[\"#e8b9b3\",\"Shilo\"],[\"#e8e0d5\",\"Pearl Bush\"],[\"#e8ebe0\",\"Green White\"],[\"#e8f1d4\",\"Chrome White\"],[\"#e8f2eb\",\"Gin\"],[\"#e8f5f2\",\"Aqua Squeeze\"],[\"#e96e00\",\"Clementine\"],[\"#e97451\",\"Burnt Sienna\"],[\"#e97c07\",\"Tahiti Gold\"],[\"#e9cecd\",\"Oyster Pink\"],[\"#e9d75a\",\"Confetti\"],[\"#e9e3e3\",\"Ebb\"],[\"#e9f8ed\",\"Ottoman\"],[\"#e9fffd\",\"Clear Day\"],[\"#ea88a8\",\"Carissma\"],[\"#eaae69\",\"Porsche\"],[\"#eab33b\",\"Tulip Tree\"],[\"#eac674\",\"Rob Roy\"],[\"#eadab8\",\"Raffia\"],[\"#eae8d4\",\"White Rock\"],[\"#eaf6ee\",\"Panache\"],[\"#eaf6ff\",\"Solitude\"],[\"#eaf9f5\",\"Aqua Spring\"],[\"#eafffe\",\"Dew\"],[\"#eb9373\",\"Apricot\"],[\"#ebc2af\",\"Zinnwaldite\"],[\"#eca927\",\"Fuel Yellow\"],[\"#ecc54e\",\"Ronchi\"],[\"#ecc7ee\",\"French Lilac\"],[\"#eccdb9\",\"Just Right\"],[\"#ece090\",\"Wild Rice\"],[\"#ecebbd\",\"Fall Green\"],[\"#ecebce\",\"Aths Special\"],[\"#ecf245\",\"Starship\"],[\"#ed0a3f\",\"Red Ribbon\"],[\"#ed7a1c\",\"Tango\"],[\"#ed9121\",\"Carrot Orange\"],[\"#ed989e\",\"Sea Pink\"],[\"#edb381\",\"Tacao\"],[\"#edc9af\",\"Desert Sand\"],[\"#edcdab\",\"Pancho\"],[\"#eddcb1\",\"Chamois\"],[\"#edea99\",\"Primrose\"],[\"#edf5dd\",\"Frost\"],[\"#edf5f5\",\"Aqua Haze\"],[\"#edf6ff\",\"Zumthor\"],[\"#edf9f1\",\"Narvik\"],[\"#edfc84\",\"Honeysuckle\"],[\"#ee82ee\",\"Lavender Magenta\"],[\"#eec1be\",\"Beauty Bush\"],[\"#eed794\",\"Chalky\"],[\"#eed9c4\",\"Almond\"],[\"#eedc82\",\"Flax\"],[\"#eededa\",\"Bizarre\"],[\"#eee3ad\",\"Double Colonial White\"],[\"#eeeee8\",\"Cararra\"],[\"#eeef78\",\"Manz\"],[\"#eef0c8\",\"Tahuna Sands\"],[\"#eef0f3\",\"Athens Gray\"],[\"#eef3c3\",\"Tusk\"],[\"#eef4de\",\"Loafer\"],[\"#eef6f7\",\"Catskill White\"],[\"#eefdff\",\"Twilight Blue\"],[\"#eeff9a\",\"Jonquil\"],[\"#eeffe2\",\"Rice Flower\"],[\"#ef863f\",\"Jaffa\"],[\"#efefef\",\"Gallery\"],[\"#eff2f3\",\"Porcelain\"],[\"#f091a9\",\"Mauvelous\"],[\"#f0d52d\",\"Golden Dream\"],[\"#f0db7d\",\"Golden Sand\"],[\"#f0dc82\",\"Buff\"],[\"#f0e2ec\",\"Prim\"],[\"#f0e68c\",\"Khaki\"],[\"#f0eefd\",\"Selago\"],[\"#f0eeff\",\"Titan White\"],[\"#f0f8ff\",\"Alice Blue\"],[\"#f0fcea\",\"Feta\"],[\"#f18200\",\"Gold Drop\"],[\"#f19bab\",\"Wewak\"],[\"#f1e788\",\"Sahara Sand\"],[\"#f1e9d2\",\"Parchment\"],[\"#f1e9ff\",\"Blue Chalk\"],[\"#f1eec1\",\"Mint Julep\"],[\"#f1f1f1\",\"Seashell\"],[\"#f1f7f2\",\"Saltpan\"],[\"#f1ffad\",\"Tidal\"],[\"#f1ffc8\",\"Chiffon\"],[\"#f2552a\",\"Flamingo\"],[\"#f28500\",\"Tangerine\"],[\"#f2c3b2\",\"Mandys Pink\"],[\"#f2f2f2\",\"Concrete\"],[\"#f2fafa\",\"Black Squeeze\"],[\"#f34723\",\"Pomegranate\"],[\"#f3ad16\",\"Buttercup\"],[\"#f3d69d\",\"New Orleans\"],[\"#f3d9df\",\"Vanilla Ice\"],[\"#f3e7bb\",\"Sidecar\"],[\"#f3e9e5\",\"Dawn Pink\"],[\"#f3edcf\",\"Wheatfield\"],[\"#f3fb62\",\"Canary\"],[\"#f3fbd4\",\"Orinoco\"],[\"#f3ffd8\",\"Carla\"],[\"#f400a1\",\"Hollywood Cerise\"],[\"#f4a460\",\"Sandy brown\"],[\"#f4c430\",\"Saffron\"],[\"#f4d81c\",\"Ripe Lemon\"],[\"#f4ebd3\",\"Janna\"],[\"#f4f2ee\",\"Pampas\"],[\"#f4f4f4\",\"Wild Sand\"],[\"#f4f8ff\",\"Zircon\"],[\"#f57584\",\"Froly\"],[\"#f5c85c\",\"Cream Can\"],[\"#f5c999\",\"Manhattan\"],[\"#f5d5a0\",\"Maize\"],[\"#f5deb3\",\"Wheat\"],[\"#f5e7a2\",\"Sandwisp\"],[\"#f5e7e2\",\"Pot Pourri\"],[\"#f5e9d3\",\"Albescent White\"],[\"#f5edef\",\"Soft Peach\"],[\"#f5f3e5\",\"Ecru White\"],[\"#f5f5dc\",\"Beige\"],[\"#f5fb3d\",\"Golden Fizz\"],[\"#f5ffbe\",\"Australian Mint\"],[\"#f64a8a\",\"French Rose\"],[\"#f653a6\",\"Brilliant Rose\"],[\"#f6a4c9\",\"Illusion\"],[\"#f6f0e6\",\"Merino\"],[\"#f6f7f7\",\"Black Haze\"],[\"#f6ffdc\",\"Spring Sun\"],[\"#f7468a\",\"Violet Red\"],[\"#f77703\",\"Chilean Fire\"],[\"#f77fbe\",\"Persian Pink\"],[\"#f7b668\",\"Rajah\"],[\"#f7c8da\",\"Azalea\"],[\"#f7dbe6\",\"We Peep\"],[\"#f7f2e1\",\"Quarter Spanish White\"],[\"#f7f5fa\",\"Whisper\"],[\"#f7faf7\",\"Snow Drift\"],[\"#f8b853\",\"Casablanca\"],[\"#f8c3df\",\"Chantilly\"],[\"#f8d9e9\",\"Cherub\"],[\"#f8db9d\",\"Marzipan\"],[\"#f8dd5c\",\"Energy Yellow\"],[\"#f8e4bf\",\"Givry\"],[\"#f8f0e8\",\"White Linen\"],[\"#f8f4ff\",\"Magnolia\"],[\"#f8f6f1\",\"Spring Wood\"],[\"#f8f7dc\",\"Coconut Cream\"],[\"#f8f7fc\",\"White Lilac\"],[\"#f8f8f7\",\"Desert Storm\"],[\"#f8f99c\",\"Texas\"],[\"#f8facd\",\"Corn Field\"],[\"#f8fdd3\",\"Mimosa\"],[\"#f95a61\",\"Carnation\"],[\"#f9bf58\",\"Saffron Mango\"],[\"#f9e0ed\",\"Carousel Pink\"],[\"#f9e4bc\",\"Dairy Cream\"],[\"#f9e663\",\"Portica\"],[\"#f9eaf3\",\"Amour\"],[\"#f9f8e4\",\"Rum Swizzle\"],[\"#f9ff8b\",\"Dolly\"],[\"#f9fff6\",\"Sugar Cane\"],[\"#fa7814\",\"Ecstasy\"],[\"#fa9d5a\",\"Tan Hide\"],[\"#fad3a2\",\"Corvette\"],[\"#fadfad\",\"Peach Yellow\"],[\"#fae600\",\"Turbo\"],[\"#faeab9\",\"Astra\"],[\"#faeccc\",\"Champagne\"],[\"#faf0e6\",\"Linen\"],[\"#faf3f0\",\"Fantasy\"],[\"#faf7d6\",\"Citrine White\"],[\"#fafafa\",\"Alabaster\"],[\"#fafde4\",\"Hint Of Yellow\"],[\"#faffa4\",\"Milan\"],[\"#fb607f\",\"Brink Pink\"],[\"#fb8989\",\"Geraldine\"],[\"#fba0e3\",\"Lavender Rose\"],[\"#fba129\",\"Sea Buckthorn\"],[\"#fbac13\",\"Sun\"],[\"#fbaed2\",\"Lavender Pink\"],[\"#fbb2a3\",\"Rose Bud\"],[\"#fbbeda\",\"Cupid\"],[\"#fbcce7\",\"Classic Rose\"],[\"#fbceb1\",\"Apricot Peach\"],[\"#fbe7b2\",\"Banana Mania\"],[\"#fbe870\",\"Marigold Yellow\"],[\"#fbe96c\",\"Festival\"],[\"#fbea8c\",\"Sweet Corn\"],[\"#fbec5d\",\"Candy Corn\"],[\"#fbf9f9\",\"Hint Of Red\"],[\"#fbffba\",\"Shalimar\"],[\"#fc0fc0\",\"Shocking Pink\"],[\"#fc80a5\",\"Tickle Me Pink\"],[\"#fc9c1d\",\"Tree Poppy\"],[\"#fcc01e\",\"Lightning Yellow\"],[\"#fcd667\",\"Goldenrod\"],[\"#fcd917\",\"Candlelight\"],[\"#fcda98\",\"Cherokee\"],[\"#fcf4d0\",\"Double Pearl Lusta\"],[\"#fcf4dc\",\"Pearl Lusta\"],[\"#fcf8f7\",\"Vista White\"],[\"#fcfbf3\",\"Bianca\"],[\"#fcfeda\",\"Moon Glow\"],[\"#fcffe7\",\"China Ivory\"],[\"#fcfff9\",\"Ceramic\"],[\"#fd0e35\",\"Torch Red\"],[\"#fd5b78\",\"Wild Watermelon\"],[\"#fd7b33\",\"Crusta\"],[\"#fd7c07\",\"Sorbus\"],[\"#fd9fa2\",\"Sweet Pink\"],[\"#fdd5b1\",\"Light Apricot\"],[\"#fdd7e4\",\"Pig Pink\"],[\"#fde1dc\",\"Cinderella\"],[\"#fde295\",\"Golden Glow\"],[\"#fde910\",\"Lemon\"],[\"#fdf5e6\",\"Old Lace\"],[\"#fdf6d3\",\"Half Colonial White\"],[\"#fdf7ad\",\"Drover\"],[\"#fdfeb8\",\"Pale Prim\"],[\"#fdffd5\",\"Cumulus\"],[\"#fe28a2\",\"Persian Rose\"],[\"#fe4c40\",\"Sunset Orange\"],[\"#fe6f5e\",\"Bittersweet\"],[\"#fe9d04\",\"California\"],[\"#fea904\",\"Yellow Sea\"],[\"#febaad\",\"Melon\"],[\"#fed33c\",\"Bright Sun\"],[\"#fed85d\",\"Dandelion\"],[\"#fedb8d\",\"Salomie\"],[\"#fee5ac\",\"Cape Honey\"],[\"#feebf3\",\"Remy\"],[\"#feefce\",\"Oasis\"],[\"#fef0ec\",\"Bridesmaid\"],[\"#fef2c7\",\"Beeswax\"],[\"#fef3d8\",\"Bleach White\"],[\"#fef4cc\",\"Pipi\"],[\"#fef4db\",\"Half Spanish White\"],[\"#fef4f8\",\"Wisp Pink\"],[\"#fef5f1\",\"Provincial Pink\"],[\"#fef7de\",\"Half Dutch White\"],[\"#fef8e2\",\"Solitaire\"],[\"#fef8ff\",\"White Pointer\"],[\"#fef9e3\",\"Off Yellow\"],[\"#fefced\",\"Orange White\"],[\"#ff0000\",\"Red\"],[\"#ff007f\",\"Rose\"],[\"#ff00cc\",\"Purple Pizzazz\"],[\"#ff00ff\",\"Magenta Fuchsia\"],[\"#ff2400\",\"Scarlet\"],[\"#ff3399\",\"Wild Strawberry\"],[\"#ff33cc\",\"Razzle Dazzle Rose\"],[\"#ff355e\",\"Radical Red\"],[\"#ff3f34\",\"Red Orange\"],[\"#ff4040\",\"Coral Red\"],[\"#ff4d00\",\"Vermilion\"],[\"#ff4f00\",\"International Orange\"],[\"#ff6037\",\"Outrageous Orange\"],[\"#ff6600\",\"Blaze Orange\"],[\"#ff66ff\",\"Pink Flamingo\"],[\"#ff681f\",\"Orange\"],[\"#ff69b4\",\"Hot Pink\"],[\"#ff6b53\",\"Persimmon\"],[\"#ff6fff\",\"Blush Pink\"],[\"#ff7034\",\"Burning Orange\"],[\"#ff7518\",\"Pumpkin\"],[\"#ff7d07\",\"Flamenco\"],[\"#ff7f00\",\"Flush Orange\"],[\"#ff7f50\",\"Coral\"],[\"#ff8c69\",\"Salmon\"],[\"#ff9000\",\"Pizazz\"],[\"#ff910f\",\"West Side\"],[\"#ff91a4\",\"Pink Salmon\"],[\"#ff9933\",\"Neon Carrot\"],[\"#ff9966\",\"Atomic Tangerine\"],[\"#ff9980\",\"Vivid Tangerine\"],[\"#ff9e2c\",\"Sunshade\"],[\"#ffa000\",\"Orange Peel\"],[\"#ffa194\",\"Mona Lisa\"],[\"#ffa500\",\"Web Orange\"],[\"#ffa6c9\",\"Carnation Pink\"],[\"#ffab81\",\"Hit Pink\"],[\"#ffae42\",\"Yellow Orange\"],[\"#ffb0ac\",\"Cornflower Lilac\"],[\"#ffb1b3\",\"Sundown\"],[\"#ffb31f\",\"My Sin\"],[\"#ffb555\",\"Texas Rose\"],[\"#ffb7d5\",\"Cotton Candy\"],[\"#ffb97b\",\"Macaroni And Cheese\"],[\"#ffba00\",\"Selective Yellow\"],[\"#ffbd5f\",\"Koromiko\"],[\"#ffbf00\",\"Amber\"],[\"#ffc0a8\",\"Wax Flower\"],[\"#ffc0cb\",\"Pink\"],[\"#ffc3c0\",\"Your Pink\"],[\"#ffc901\",\"Supernova\"],[\"#ffcba4\",\"Flesh\"],[\"#ffcc33\",\"Sunglow\"],[\"#ffcc5c\",\"Golden Tainoi\"],[\"#ffcc99\",\"Peach Orange\"],[\"#ffcd8c\",\"Chardonnay\"],[\"#ffd1dc\",\"Pastel Pink\"],[\"#ffd2b7\",\"Romantic\"],[\"#ffd38c\",\"Grandis\"],[\"#ffd700\",\"Gold\"],[\"#ffd800\",\"School Bus Yellow\"],[\"#ffd8d9\",\"Cosmos\"],[\"#ffdb58\",\"Mustard\"],[\"#ffdcd6\",\"Peach Schnapps\"],[\"#ffddaf\",\"Caramel\"],[\"#ffddcd\",\"Tuft Bush\"],[\"#ffddcf\",\"Watusi\"],[\"#ffddf4\",\"Pink Lace\"],[\"#ffdead\",\"Navajo White\"],[\"#ffdeb3\",\"Frangipani\"],[\"#ffe1df\",\"Pippin\"],[\"#ffe1f2\",\"Pale Rose\"],[\"#ffe2c5\",\"Negroni\"],[\"#ffe5a0\",\"Cream Brulee\"],[\"#ffe5b4\",\"Peach\"],[\"#ffe6c7\",\"Tequila\"],[\"#ffe772\",\"Kournikova\"],[\"#ffeac8\",\"Sandy Beach\"],[\"#ffead4\",\"Karry\"],[\"#ffec13\",\"Broom\"],[\"#ffedbc\",\"Colonial White\"],[\"#ffeed8\",\"Derby\"],[\"#ffefa1\",\"Vis Vis\"],[\"#ffefc1\",\"Egg White\"],[\"#ffefd5\",\"Papaya Whip\"],[\"#ffefec\",\"Fair Pink\"],[\"#fff0db\",\"Peach Cream\"],[\"#fff0f5\",\"Lavender Blush\"],[\"#fff14f\",\"Gorse\"],[\"#fff1b5\",\"Buttermilk\"],[\"#fff1d8\",\"Pink Lady\"],[\"#fff1ee\",\"Forget Me Not\"],[\"#fff1f9\",\"Tutu\"],[\"#fff39d\",\"Picasso\"],[\"#fff3f1\",\"Chardon\"],[\"#fff46e\",\"Paris Daisy\"],[\"#fff4ce\",\"Barley White\"],[\"#fff4dd\",\"Egg Sour\"],[\"#fff4e0\",\"Sazerac\"],[\"#fff4e8\",\"Serenade\"],[\"#fff4f3\",\"Chablis\"],[\"#fff5ee\",\"Seashell Peach\"],[\"#fff5f3\",\"Sauvignon\"],[\"#fff6d4\",\"Milk Punch\"],[\"#fff6df\",\"Varden\"],[\"#fff6f5\",\"Rose White\"],[\"#fff8d1\",\"Baja White\"],[\"#fff9e2\",\"Gin Fizz\"],[\"#fff9e6\",\"Early Dawn\"],[\"#fffacd\",\"Lemon Chiffon\"],[\"#fffaf4\",\"Bridal Heath\"],[\"#fffbdc\",\"Scotch Mist\"],[\"#fffbf9\",\"Soapstone\"],[\"#fffc99\",\"Witch Haze\"],[\"#fffcea\",\"Buttery White\"],[\"#fffcee\",\"Island Spice\"],[\"#fffdd0\",\"Cream\"],[\"#fffde6\",\"Chilean Heath\"],[\"#fffde8\",\"Travertine\"],[\"#fffdf3\",\"Orchid White\"],[\"#fffdf4\",\"Quarter Pearl Lusta\"],[\"#fffee1\",\"Half And Half\"],[\"#fffeec\",\"Apricot White\"],[\"#fffef0\",\"Rice Cake\"],[\"#fffef6\",\"Black White\"],[\"#fffefd\",\"Romance\"],[\"#ffff00\",\"Yellow\"],[\"#ffff66\",\"Laser Lemon\"],[\"#ffff99\",\"Pale Canary\"],[\"#ffffb4\",\"Portafino\"],[\"#fffff0\",\"Ivory\"],[\"#ffffff\",\"White\"]];V.reduce((e,[a,r])=>(e[a]=r,e),{});const de=[{name:\"Slate\",palettes:[{hex:\"#f8fafc\",number:50},{hex:\"#f1f5f9\",number:100},{hex:\"#e2e8f0\",number:200},{hex:\"#cbd5e1\",number:300},{hex:\"#94a3b8\",number:400},{hex:\"#64748b\",number:500},{hex:\"#475569\",number:600},{hex:\"#334155\",number:700},{hex:\"#1e293b\",number:800},{hex:\"#0f172a\",number:900},{hex:\"#020617\",number:950}]},{name:\"Gray\",palettes:[{hex:\"#f9fafb\",number:50},{hex:\"#f3f4f6\",number:100},{hex:\"#e5e7eb\",number:200},{hex:\"#d1d5db\",number:300},{hex:\"#9ca3af\",number:400},{hex:\"#6b7280\",number:500},{hex:\"#4b5563\",number:600},{hex:\"#374151\",number:700},{hex:\"#1f2937\",number:800},{hex:\"#111827\",number:900},{hex:\"#030712\",number:950}]},{name:\"Zinc\",palettes:[{hex:\"#fafafa\",number:50},{hex:\"#f4f4f5\",number:100},{hex:\"#e4e4e7\",number:200},{hex:\"#d4d4d8\",number:300},{hex:\"#a1a1aa\",number:400},{hex:\"#71717a\",number:500},{hex:\"#52525b\",number:600},{hex:\"#3f3f46\",number:700},{hex:\"#27272a\",number:800},{hex:\"#18181b\",number:900},{hex:\"#09090b\",number:950}]},{name:\"Neutral\",palettes:[{hex:\"#fafafa\",number:50},{hex:\"#f5f5f5\",number:100},{hex:\"#e5e5e5\",number:200},{hex:\"#d4d4d4\",number:300},{hex:\"#a3a3a3\",number:400},{hex:\"#737373\",number:500},{hex:\"#525252\",number:600},{hex:\"#404040\",number:700},{hex:\"#262626\",number:800},{hex:\"#171717\",number:900},{hex:\"#0a0a0a\",number:950}]},{name:\"Stone\",palettes:[{hex:\"#fafaf9\",number:50},{hex:\"#f5f5f4\",number:100},{hex:\"#e7e5e4\",number:200},{hex:\"#d6d3d1\",number:300},{hex:\"#a8a29e\",number:400},{hex:\"#78716c\",number:500},{hex:\"#57534e\",number:600},{hex:\"#44403c\",number:700},{hex:\"#292524\",number:800},{hex:\"#1c1917\",number:900},{hex:\"#0c0a09\",number:950}]},{name:\"Red\",palettes:[{hex:\"#fef2f2\",number:50},{hex:\"#fee2e2\",number:100},{hex:\"#fecaca\",number:200},{hex:\"#fca5a5\",number:300},{hex:\"#f87171\",number:400},{hex:\"#ef4444\",number:500},{hex:\"#dc2626\",number:600},{hex:\"#b91c1c\",number:700},{hex:\"#991b1b\",number:800},{hex:\"#7f1d1d\",number:900},{hex:\"#450a0a\",number:950}]},{name:\"Orange\",palettes:[{hex:\"#fff7ed\",number:50},{hex:\"#ffedd5\",number:100},{hex:\"#fed7aa\",number:200},{hex:\"#fdba74\",number:300},{hex:\"#fb923c\",number:400},{hex:\"#f97316\",number:500},{hex:\"#ea580c\",number:600},{hex:\"#c2410c\",number:700},{hex:\"#9a3412\",number:800},{hex:\"#7c2d12\",number:900},{hex:\"#431407\",number:950}]},{name:\"Amber\",palettes:[{hex:\"#fffbeb\",number:50},{hex:\"#fef3c7\",number:100},{hex:\"#fde68a\",number:200},{hex:\"#fcd34d\",number:300},{hex:\"#fbbf24\",number:400},{hex:\"#f59e0b\",number:500},{hex:\"#d97706\",number:600},{hex:\"#b45309\",number:700},{hex:\"#92400e\",number:800},{hex:\"#78350f\",number:900},{hex:\"#451a03\",number:950}]},{name:\"Yellow\",palettes:[{hex:\"#fefce8\",number:50},{hex:\"#fef9c3\",number:100},{hex:\"#fef08a\",number:200},{hex:\"#fde047\",number:300},{hex:\"#facc15\",number:400},{hex:\"#eab308\",number:500},{hex:\"#ca8a04\",number:600},{hex:\"#a16207\",number:700},{hex:\"#854d0e\",number:800},{hex:\"#713f12\",number:900},{hex:\"#422006\",number:950}]},{name:\"Lime\",palettes:[{hex:\"#f7fee7\",number:50},{hex:\"#ecfccb\",number:100},{hex:\"#d9f99d\",number:200},{hex:\"#bef264\",number:300},{hex:\"#a3e635\",number:400},{hex:\"#84cc16\",number:500},{hex:\"#65a30d\",number:600},{hex:\"#4d7c0f\",number:700},{hex:\"#3f6212\",number:800},{hex:\"#365314\",number:900},{hex:\"#1a2e05\",number:950}]},{name:\"Green\",palettes:[{hex:\"#f0fdf4\",number:50},{hex:\"#dcfce7\",number:100},{hex:\"#bbf7d0\",number:200},{hex:\"#86efac\",number:300},{hex:\"#4ade80\",number:400},{hex:\"#22c55e\",number:500},{hex:\"#16a34a\",number:600},{hex:\"#15803d\",number:700},{hex:\"#166534\",number:800},{hex:\"#14532d\",number:900},{hex:\"#052e16\",number:950}]},{name:\"Emerald\",palettes:[{hex:\"#ecfdf5\",number:50},{hex:\"#d1fae5\",number:100},{hex:\"#a7f3d0\",number:200},{hex:\"#6ee7b7\",number:300},{hex:\"#34d399\",number:400},{hex:\"#10b981\",number:500},{hex:\"#059669\",number:600},{hex:\"#047857\",number:700},{hex:\"#065f46\",number:800},{hex:\"#064e3b\",number:900},{hex:\"#022c22\",number:950}]},{name:\"Teal\",palettes:[{hex:\"#f0fdfa\",number:50},{hex:\"#ccfbf1\",number:100},{hex:\"#99f6e4\",number:200},{hex:\"#5eead4\",number:300},{hex:\"#2dd4bf\",number:400},{hex:\"#14b8a6\",number:500},{hex:\"#0d9488\",number:600},{hex:\"#0f766e\",number:700},{hex:\"#115e59\",number:800},{hex:\"#134e4a\",number:900},{hex:\"#042f2e\",number:950}]},{name:\"Cyan\",palettes:[{hex:\"#ecfeff\",number:50},{hex:\"#cffafe\",number:100},{hex:\"#a5f3fc\",number:200},{hex:\"#67e8f9\",number:300},{hex:\"#22d3ee\",number:400},{hex:\"#06b6d4\",number:500},{hex:\"#0891b2\",number:600},{hex:\"#0e7490\",number:700},{hex:\"#155e75\",number:800},{hex:\"#164e63\",number:900},{hex:\"#083344\",number:950}]},{name:\"Sky\",palettes:[{hex:\"#f0f9ff\",number:50},{hex:\"#e0f2fe\",number:100},{hex:\"#bae6fd\",number:200},{hex:\"#7dd3fc\",number:300},{hex:\"#38bdf8\",number:400},{hex:\"#0ea5e9\",number:500},{hex:\"#0284c7\",number:600},{hex:\"#0369a1\",number:700},{hex:\"#075985\",number:800},{hex:\"#0c4a6e\",number:900},{hex:\"#082f49\",number:950}]},{name:\"Blue\",palettes:[{hex:\"#eff6ff\",number:50},{hex:\"#dbeafe\",number:100},{hex:\"#bfdbfe\",number:200},{hex:\"#93c5fd\",number:300},{hex:\"#60a5fa\",number:400},{hex:\"#3b82f6\",number:500},{hex:\"#2563eb\",number:600},{hex:\"#1d4ed8\",number:700},{hex:\"#1e40af\",number:800},{hex:\"#1e3a8a\",number:900},{hex:\"#172554\",number:950}]},{name:\"Indigo\",palettes:[{hex:\"#eef2ff\",number:50},{hex:\"#e0e7ff\",number:100},{hex:\"#c7d2fe\",number:200},{hex:\"#a5b4fc\",number:300},{hex:\"#818cf8\",number:400},{hex:\"#6366f1\",number:500},{hex:\"#4f46e5\",number:600},{hex:\"#4338ca\",number:700},{hex:\"#3730a3\",number:800},{hex:\"#312e81\",number:900},{hex:\"#1e1b4b\",number:950}]},{name:\"Violet\",palettes:[{hex:\"#f5f3ff\",number:50},{hex:\"#ede9fe\",number:100},{hex:\"#ddd6fe\",number:200},{hex:\"#c4b5fd\",number:300},{hex:\"#a78bfa\",number:400},{hex:\"#8b5cf6\",number:500},{hex:\"#7c3aed\",number:600},{hex:\"#6d28d9\",number:700},{hex:\"#5b21b6\",number:800},{hex:\"#4c1d95\",number:900},{hex:\"#2e1065\",number:950}]},{name:\"Purple\",palettes:[{hex:\"#faf5ff\",number:50},{hex:\"#f3e8ff\",number:100},{hex:\"#e9d5ff\",number:200},{hex:\"#d8b4fe\",number:300},{hex:\"#c084fc\",number:400},{hex:\"#a855f7\",number:500},{hex:\"#9333ea\",number:600},{hex:\"#7e22ce\",number:700},{hex:\"#6b21a8\",number:800},{hex:\"#581c87\",number:900},{hex:\"#3b0764\",number:950}]},{name:\"Fuchsia\",palettes:[{hex:\"#fdf4ff\",number:50},{hex:\"#fae8ff\",number:100},{hex:\"#f5d0fe\",number:200},{hex:\"#f0abfc\",number:300},{hex:\"#e879f9\",number:400},{hex:\"#d946ef\",number:500},{hex:\"#c026d3\",number:600},{hex:\"#a21caf\",number:700},{hex:\"#86198f\",number:800},{hex:\"#701a75\",number:900},{hex:\"#4a044e\",number:950}]},{name:\"Pink\",palettes:[{hex:\"#fdf2f8\",number:50},{hex:\"#fce7f3\",number:100},{hex:\"#fbcfe8\",number:200},{hex:\"#f9a8d4\",number:300},{hex:\"#f472b6\",number:400},{hex:\"#ec4899\",number:500},{hex:\"#db2777\",number:600},{hex:\"#be185d\",number:700},{hex:\"#9d174d\",number:800},{hex:\"#831843\",number:900},{hex:\"#500724\",number:950}]},{name:\"Rose\",palettes:[{hex:\"#fff1f2\",number:50},{hex:\"#ffe4e6\",number:100},{hex:\"#fecdd3\",number:200},{hex:\"#fda4af\",number:300},{hex:\"#fb7185\",number:400},{hex:\"#f43f5e\",number:500},{hex:\"#e11d48\",number:600},{hex:\"#be123c\",number:700},{hex:\"#9f1239\",number:800},{hex:\"#881337\",number:900},{hex:\"#4c0519\",number:950}]}],W=3,Le={grad:.9,turn:360,rad:360/(Math.PI*2)},T={white:\"#ffffff\",bisque:\"#ffe4c4\",blue:\"#0000ff\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",azure:\"#f0ffff\",whitesmoke:\"#f5f5f5\",papayawhip:\"#ffefd5\",plum:\"#dda0dd\",blanchedalmond:\"#ffebcd\",black:\"#000000\",gold:\"#ffd700\",goldenrod:\"#daa520\",gainsboro:\"#dcdcdc\",cornsilk:\"#fff8dc\",cornflowerblue:\"#6495ed\",burlywood:\"#deb887\",aquamarine:\"#7fffd4\",beige:\"#f5f5dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkkhaki:\"#bdb76b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",peachpuff:\"#ffdab9\",darkmagenta:\"#8b008b\",darkred:\"#8b0000\",darkorchid:\"#9932cc\",darkorange:\"#ff8c00\",darkslateblue:\"#483d8b\",gray:\"#808080\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",wheat:\"#f5deb3\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",ghostwhite:\"#f8f8ff\",darkviolet:\"#9400d3\",magenta:\"#ff00ff\",green:\"#008000\",dodgerblue:\"#1e90ff\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",blueviolet:\"#8a2be2\",forestgreen:\"#228b22\",lawngreen:\"#7cfc00\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",fuchsia:\"#ff00ff\",brown:\"#a52a2a\",maroon:\"#800000\",mediumblue:\"#0000cd\",lightcoral:\"#f08080\",darkturquoise:\"#00ced1\",lightcyan:\"#e0ffff\",ivory:\"#fffff0\",lightyellow:\"#ffffe0\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",linen:\"#faf0e6\",mediumaquamarine:\"#66cdaa\",lemonchiffon:\"#fffacd\",lime:\"#00ff00\",khaki:\"#f0e68c\",mediumseagreen:\"#3cb371\",limegreen:\"#32cd32\",mediumspringgreen:\"#00fa9a\",lightskyblue:\"#87cefa\",lightblue:\"#add8e6\",midnightblue:\"#191970\",lightpink:\"#ffb6c1\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",mintcream:\"#f5fffa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",navajowhite:\"#ffdead\",navy:\"#000080\",mediumvioletred:\"#c71585\",powderblue:\"#b0e0e6\",palegoldenrod:\"#eee8aa\",oldlace:\"#fdf5e6\",paleturquoise:\"#afeeee\",mediumturquoise:\"#48d1cc\",mediumorchid:\"#ba55d3\",rebeccapurple:\"#663399\",lightsteelblue:\"#b0c4de\",mediumslateblue:\"#7b68ee\",thistle:\"#d8bfd8\",tan:\"#d2b48c\",orchid:\"#da70d6\",mediumpurple:\"#9370db\",purple:\"#800080\",pink:\"#ffc0cb\",skyblue:\"#87ceeb\",springgreen:\"#00ff7f\",palegreen:\"#98fb98\",red:\"#ff0000\",yellow:\"#ffff00\",slateblue:\"#6a5acd\",lavenderblush:\"#fff0f5\",peru:\"#cd853f\",palevioletred:\"#db7093\",violet:\"#ee82ee\",teal:\"#008080\",slategray:\"#708090\",slategrey:\"#708090\",aliceblue:\"#f0f8ff\",darkseagreen:\"#8fbc8f\",darkolivegreen:\"#556b2f\",greenyellow:\"#adff2f\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",tomato:\"#ff6347\",silver:\"#c0c0c0\",sienna:\"#a0522d\",lavender:\"#e6e6fa\",lightgreen:\"#90ee90\",orange:\"#ffa500\",orangered:\"#ff4500\",steelblue:\"#4682b4\",royalblue:\"#4169e1\",turquoise:\"#40e0d0\",yellowgreen:\"#9acd32\",salmon:\"#fa8072\",saddlebrown:\"#8b4513\",sandybrown:\"#f4a460\",rosybrown:\"#bc8f8f\",darksalmon:\"#e9967a\",lightgoldenrodyellow:\"#fafad2\",snow:\"#fffafa\",lightgrey:\"#d3d3d3\",lightgray:\"#d3d3d3\",dimgray:\"#696969\",dimgrey:\"#696969\",olivedrab:\"#6b8e23\",olive:\"#808000\"},h=e=>typeof e==\"string\"?e.length>0:typeof e==\"number\",i=(e,a=0,r=10**a)=>Math.round(r*e)/r+0,u=(e,a=0,r=1)=>e>r?r:e>a?e:a,be=e=>{const a=isFinite(e)?e%360:0;return a>0?a:a+360},ze=(e,a=\"deg\")=>Number(e)*(Le[a]||1),I=e=>({r:u(e.r,0,255),g:u(e.g,0,255),b:u(e.b,0,255),a:u(e.a)}),q=e=>({r:i(e.r),g:i(e.g),b:i(e.b),a:i(e.a,W)}),We=({r:e,g:a,b:r,a:f=1})=>!h(e)||!h(a)||!h(r)?null:I({r:Number(e),g:Number(a),b:Number(r),a:Number(f)}),J=e=>{const a=e/255;return a<.04045?a/12.92:((a+.055)/1.055)**2.4},$=e=>(e>.0031308?1.055*e**.4166666666666667-.055:12.92*e)*255,De=/^#([0-9a-f]{3,8})$/i,Fe=e=>{const a=De.exec(e);if(!a)return null;const r=a[1];return r.length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:r.length===4?i(parseInt(r[3]+r[3],16)/255,2):1}:r.length===6||r.length===8?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:r.length===8?i(parseInt(r.substr(6,2),16)/255,2):1}:null},A=e=>{const a=e.toString(16);return a.length<2?`0${a}`:a},Ae=e=>{const{r:a,g:r,b:f,a:n}=q(e),d=n<1?A(i(n*255)):\"\";return`#${A(a)}${A(r)}${A(f)}${d}`},Oe=e=>({h:be(e.h),s:u(e.s,0,100),v:u(e.v,0,100),a:u(e.a)}),Ne=e=>({h:i(e.h),s:i(e.s),v:i(e.v),a:i(e.a,W)}),ce=({r:e,g:a,b:r,a:f})=>{const n=Math.max(e,a,r),d=n-Math.min(e,a,r),t=d?n===e?(a-r)/d:n===a?2+(r-e)/d:4+(e-a)/d:0;return{h:60*(t<0?t+6:t),s:n?d/n*100:0,v:n/255*100,a:f}},oe=({h:e,s:a,v:r,a:f})=>{e=e/360*6,a/=100,r/=100;const n=Math.floor(e),d=r*(1-a),t=r*(1-(e-n)*a),b=r*(1-(1-e+n)*a),c=n%6;return{r:[r,t,d,d,b,r][c]*255,g:[b,r,r,t,d,d][c]*255,b:[d,d,b,r,r,t][c]*255,a:f}},Ee=({h:e,s:a,v:r,a:f=1})=>{if(!h(e)||!h(a)||!h(r))return null;const n=Oe({h:Number(e),s:Number(a),v:Number(r),a:Number(f)});return oe(n)},te=e=>({h:be(e.h),s:u(e.s,0,100),l:u(e.l,0,100),a:u(e.a)}),ie=e=>({h:i(e.h),s:i(e.s),l:i(e.l),a:i(e.a,W)}),Ve=({h:e,s:a,l:r,a:f})=>(a*=(r<50?r:100-r)/100,{h:e,s:a>0?2*a/(r+a)*100:0,v:r+a,a:f}),Ie=({h:e,s:a,v:r,a:f})=>{const n=(200-a)*r/100;return{h:e,s:n>0&&n<200?a*r/100/(n<=100?n:200-n)*100:0,l:n/2,a:f}},le=e=>oe(Ve(e)),D=e=>Ie(ce(e)),qe=({h:e,s:a,l:r,a:f=1})=>{if(!h(e)||!h(a)||!h(r))return null;const n=te({h:Number(e),s:Number(a),l:Number(r),a:Number(f)});return le(n)},Je=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,$e=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,Ke=e=>{const a=Je.exec(e)||$e.exec(e);if(!a)return null;const r=te({h:ze(a[1],a[2]),s:Number(a[3]),l:Number(a[4]),a:a[5]===void 0?1:Number(a[5])/(a[6]?100:1)});return le(r)},Ye=e=>{const{h:a,s:r,l:f,a:n}=ie(D(e));return n<1?`hsla(${a}, ${r}%, ${f}%, ${n})`:`hsl(${a}, ${r}%, ${f}%)`},je=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,Ze=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,Xe=e=>{const a=je.exec(e)||Ze.exec(e);return!a||a[2]!==a[4]||a[4]!==a[6]?null:I({r:Number(a[1])/(a[2]?100/255:1),g:Number(a[3])/(a[4]?100/255:1),b:Number(a[5])/(a[6]?100/255:1),a:a[7]===void 0?1:Number(a[7])/(a[8]?100:1)})},Qe=e=>{const{r:a,g:r,b:f,a:n}=q(e);return n<1?`rgba(${a}, ${r}, ${f}, ${n})`:`rgb(${a}, ${r}, ${f})`},y={x:96.422,y:100,z:82.521},Ue=e=>({x:e.x*.9555766+e.y*-.0230393+e.z*.0631636,y:e.x*-.0282895+e.y*1.0099416+e.z*.0210077,z:e.x*.0122982+e.y*-.020483+e.z*1.3299098}),_e=e=>{const a=Ue(e);return I({r:$(.032404542*a.x-.015371385*a.y-.004985314*a.z),g:$(-.00969266*a.x+.018760108*a.y+41556e-8*a.z),b:$(556434e-9*a.x-.002040259*a.y+.010572252*a.z),a:e.a})},ea=e=>({x:u(e.x,0,y.x),y:u(e.y,0,y.y),z:u(e.z,0,y.z),a:u(e.a)}),aa=e=>({x:e.x*1.0478112+e.y*.0228866+e.z*-.050127,y:e.x*.0295424+e.y*.9904844+e.z*-.0170491,z:e.x*-.0092345+e.y*.0150436+e.z*.7521316,a:e.a}),ra=e=>{const a=J(e.r),r=J(e.g),f=J(e.b),n={x:(a*.4124564+r*.3575761+f*.1804375)*100,y:(a*.2126729+r*.7151522+f*.072175)*100,z:(a*.0193339+r*.119192+f*.9503041)*100,a:e.a};return ea(aa(n))},v=216/24389,w=24389/27,ue=e=>{const a=(e.l+16)/116,r=e.a/500+a,f=a-e.b/200;return _e({x:(r**3>v?r**3:(116*r-16)/w)*y.x,y:(e.l>w*v?((e.l+16)/116)**3:e.l/w)*y.y,z:(f**3>v?f**3:(116*f-16)/w)*y.z,a:e.alpha})},se=e=>({l:u(e.l,0,400),a:e.a,b:e.b,alpha:u(e.alpha)}),fa=e=>({l:i(e.l,2),a:i(e.a,2),b:i(e.b,2),alpha:i(e.alpha,W)}),na=({l:e,a,b:r,alpha:f=1})=>{if(!h(e)||!h(a)||!h(r))return null;const n=se({l:Number(e),a:Number(a),b:Number(r),alpha:Number(f)});return ue(n)},K=e=>{const a=ra(e);let r=a.x/y.x,f=a.y/y.y,n=a.z/y.z;return r=r>v?Math.cbrt(r):(w*r+16)/116,f=f>v?Math.cbrt(f):(w*f+16)/116,n=n>v?Math.cbrt(n):(w*n+16)/116,{l:116*f-16,a:500*(r-f),b:200*(f-n),alpha:a.a}};function da(e){const a=e.toLowerCase(),r=a===\"transparent\"?\"#0000\":T[a];return r?new L(r).toRgb():null}const he={string:[[Fe,\"hex\"],[Xe,\"rgb\"],[Ke,\"hsl\"],[da,\"name\"]],object:[[We,\"rgb\"],[qe,\"hsl\"],[Ee,\"hsv\"],[na,\"lab\"]]},me=(e,a)=>{for(let r=0;r<a.length;r++){const f=a[r][0](e);if(f)return[f,a[r][1]]}return[null,void 0]},ba=e=>typeof e==\"string\"?me(e.trim(),he.string):typeof e==\"object\"&&e!==null?me(e,he.object):[null,void 0],ca=(e,a)=>({r:e.r,g:e.g,b:e.b,a}),Y=(e,a)=>{const r=D(e);return{h:r.h,s:u(r.s+a*100,0,100),l:r.l,a:r.a}},j=e=>(e.r*299+e.g*587+e.b*114)/1e3/255,ge=(e,a)=>{const r=D(e);return{h:r.h,s:r.s,l:u(r.l+a*100,0,100),a:r.a}},oa=e=>({r:255-e.r,g:255-e.g,b:255-e.b,a:e.a}),ta=(e,a,r)=>{const f=K(e),n=K(a),d=se({l:f.l*(1-r)+n.l*r,a:f.a*(1-r)+n.a*r,b:f.b*(1-r)+n.b*r,alpha:f.alpha*(1-r)+n.alpha*r});return ue(d)};function ia(e,a){const{l:r,a:f,b:n}=e,{l:d,a:t,b}=a,c=180/Math.PI,l=Math.PI/180,m=(f**2+n**2)**.5,P=(t**2+b**2)**.5,g=(m+P)/2,p=(r+d)/2,s=g**7,R=.5*(1-(s/(s+25**7))**.5),k=f*(1+R),G=t*(1+R),M=(k**2+n**2)**.5,z=(G**2+b**2)**.5,F=(M+z)/2;let C=k===0&&n===0?0:Math.atan2(n,k)*c,S=G===0&&b===0?0:Math.atan2(b,G)*c;C<0&&(C+=360),S<0&&(S+=360);let N=S-C;const E=Math.abs(S-C);E>180&&S<=C?N+=360:E>180&&S>C&&(N-=360);let x=C+S;E<=180?x/=2:x=(C+S<360?x+360:x-360)/2;const Me=1-.17*Math.cos(l*(x-30))+.24*Math.cos(l*2*x)+.32*Math.cos(l*(3*x+6))-.2*Math.cos(l*(4*x-63)),we=d-r,_=z-M,ee=2*Math.sin(l*N/2)*(M*z)**.5,Re=1+.015*(p-50)**2/(20+(p-50)**2)**.5,ae=1+.045*F,re=1+.015*F*Me,Te=30*Math.exp(-1*((x-275)/25)**2),ve=-(2*(s/(s+25**7))**.5)*Math.sin(l*2*Te),He=1,fe=1,ne=1;return((we/He/Re)**2+(_/fe/ae)**2+(ee/ne/re)**2+ve*_*ee/(fe*ae*ne*re))**.5}const la=(e,a)=>(e.r-a.r)**2+(e.g-a.g)**2+(e.b-a.b)**2;var ua=Object.defineProperty,sa=(e,a,r)=>a in e?ua(e,a,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[a]=r,pe=(e,a,r)=>(sa(e,typeof a!=\"symbol\"?a+\"\":a,r),r);function Z(e,a,r=5){const f=[],n=1/(r-1);for(let d=0;d<=r-1;d++)f.push(e.mix(a,n*d));return f}class L{constructor(a){pe(this,\"parsed\"),pe(this,\"rgba\"),this.parsed=ba(a)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}isValid(){return this.parsed!==null}brightness(){return i(j(this.rgba),2)}isDark(){return j(this.rgba)<.5}isLight(){return j(this.rgba)>=.5}toHex(){return Ae(this.rgba)}toRgb(){return q(this.rgba)}toRgbString(){return Qe(this.rgba)}toHsl(){return ie(D(this.rgba))}toHslString(){return Ye(this.rgba)}toHsv(){return Ne(ce(this.rgba))}invert(){return o(oa(this.rgba))}saturate(a=.1){return o(Y(this.rgba,a))}desaturate(a=.1){return o(Y(this.rgba,-a))}grayscale(){return o(Y(this.rgba,-1))}lighten(a=.1){return o(ge(this.rgba,a))}darken(a=.1){return o(ge(this.rgba,-a))}rotate(a=15){return this.hue(this.hue()+a)}alpha(a){return typeof a==\"number\"?o(ca(this.rgba,a)):i(this.rgba.a,W)}hue(a){const r=D(this.rgba);return typeof a==\"number\"?o({h:a,s:r.s,l:r.l,a:r.a}):i(r.h)}isEqual(a){return this.toHex()===o(a).toHex()}mix(a,r=.5){const f=ta(this.toRgb(),o(a).toRgb(),r);return new L(f)}tints(a){return Z(this,\"#fff\",a)}shades(a){return Z(this,\"#000\",a)}tones(a){return Z(this,\"#808080\",a)}toLab(){return fa(K(this.rgba))}delta(a){const r=ia(this.toLab(),o(a).toLab())/100;return u(i(r,3))}toName(a){const r={};for(const d in T)r[T[d]]=d;const f={};if(!this.rgba.a&&!this.rgba.r&&!this.rgba.g&&!this.rgba.b)return\"transparent\";const n=r[this.toHex()];if(n)return n;if(a?.closest){const d=this.toRgb();let t=1/0,b=\"black\";if(!f.length)for(const c in T)f[c]=new L(T[c]).toRgb();for(const c in T){const l=la(d,f[c]);l<t&&(t=l,b=c)}return b}}}const o=e=>e instanceof L?e:new L(e);function X(e){return o(e).isValid()}function H(e){return o(e).toHex()}function Q(e){return o(e).toRgb()}function B(e){return o(e).toHsl()}function xe(e){return o(e).toHsv()}function ye(e,a){return o(e).delta(a)}function Be(e){return o(e).toHex()}function Ce(e,a){return o(e).alpha(a).toHex()}function Se(e,a,r){return o(e).mix(a,r).toHex()}function ha(e,a,r=\"#ffffff\"){const f=Ce(e,a),{r:n,g:d,b:t}=o(f).toRgb(),{r:b,g:c,b:l}=o(r).toRgb();function m(g,p,s){return p+(g-p)*s}const P={r:m(n,b,a),g:m(d,c,a),b:m(t,l,a)};return o(P).toHex()}function ma(e){return o(e).isEqual(\"#ffffff\")}function Pe(e){const a=H(e),r=Q(e),f=B(e);let n=0,d=0,t=0,b=-1,c=-1,l=\"\";return V.some((m,P)=>{const[g,p]=m,s=a===g;if(s)l=p;else{const{r:R,g:k,b:G}=Q(g),{h:M,s:z,l:F}=B(g);d=(r.r-R)**2+(r.g-k)**2+(r.b-G)**2,t=(f.h-M)**2+(f.s-z)**2+(f.l-F)**2,n=d+t*2,(c<0||c>n)&&(c=n,b=P)}return s}),l=V[b]?.[1]??\"\",l}function ga(e){const a=pa(e),r=new Map;a.palettes.forEach(d=>{r.set(d.number,d)});const f=r.get(500),n=a.palettes.find(d=>d.hex===e);return{...a,colorMap:r,main:f,match:n}}function pa(e){if(!X(e))throw new Error(\"Invalid color, please check color value!\");let a=Pe(e);a=a.toLowerCase().replace(/\\s/g,\"-\");const{h:r,s:f}=B(e),{nearestLightnessPalette:n,palettes:d}=xa(e,de),{number:t,hex:b}=n,{h:c,s:l}=B(b),m=r-c,P=f/l;return{name:a,palettes:d.map(g=>{let p=e;if(t!==g.number){const{h:s,s:R,l:k}=B(g.hex),G=m<0?s+m:s-m,M=R*P;p=Be({h:G,s:M,l:k})}return{hex:p,number:g.number}})}}function xa(e,a){const r=a.map(n=>{const d=n.palettes.map(b=>({...b,delta:ye(e,b.hex)})),t=d.reduce((b,c)=>b.delta<c.delta?b:c);return{...n,palettes:d,nearestPalette:t}}).reduce((n,d)=>n.nearestPalette.delta<d.nearestPalette.delta?n:d),{l:f}=B(e);return{...r,nearestLightnessPalette:r.palettes.reduce((n,d)=>{const{l:t}=B(n.hex),{l:b}=B(d.hex),c=Math.abs(t-f),l=Math.abs(b-f);return c<l?n:d})}}const O=2,ke=16,ya=5,Ba=5,Ca=15,U=5,Sa=4;function Pa(e,a){if(!X(e))throw new Error(\"invalid input color value\");if(a===6)return H(e);const r=a<6,f=xe(e),n=r?U+1-a:a-U-1,d={h:Ma(f,n,r),s:wa(f,n,r),v:Ra(f,n,r)};return H(d)}const ka=[{index:7,opacity:.15},{index:6,opacity:.25},{index:5,opacity:.3},{index:5,opacity:.45},{index:5,opacity:.65},{index:5,opacity:.85},{index:5,opacity:.9},{index:4,opacity:.93},{index:3,opacity:.95},{index:2,opacity:.97},{index:1,opacity:.98}];function Ga(e,a=!1,r=\"#141414\"){const f=[1,2,3,4,5,6,7,8,9,10,11].map(n=>Pa(e,n));return a?ka.map(({index:n,opacity:d})=>Se(r,f[n],d)).map(n=>H(n)):f}function Ma(e,a,r){let f;const n=Math.round(e.h);return n>=60&&n<=240?f=r?n-O*a:n+O*a:f=r?n+O*a:n-O*a,f<0&&(f+=360),f>=360&&(f-=360),f}function wa(e,a,r){if(e.h===0&&e.s===0)return e.s;let f;return r?f=e.s-ke*a:a===Sa?f=e.s+ke:f=e.s+ya*a,f>100&&(f=100),r&&a===U&&f>10&&(f=10),f<6&&(f=6),f}function Ra(e,a,r){let f;return r?f=e.v+Ba*a:f=e.v-Ca*a,f>100&&(f=100),f}function Ge(e,a=!1){const r=new Map;if(a)ga(H(e)).palettes.forEach(f=>{r.set(f.number,f.hex)});else{const f=Ga(e);[50,100,200,300,400,500,600,700,800,900,950].forEach((n,d)=>{r.set(n,f[d])})}return r}function Ta(e,a,r=!1){return Ge(e,r).get(a)}export{Ce as addColorAlpha,de as colorPalettes,o as colord,Pe as getColorName,Ge as getColorPalette,ye as getDeltaE,H as getHex,B as getHsl,xe as getHsv,Ta as getPaletteColorByNumber,Q as getRgb,X as isValidColor,ma as isWhiteColor,Se as mixColor,ha as transformColorWithOpacity,Be as transformHslToHex};\n","import { addColorAlpha, transformColorWithOpacity } from '@ximax/color'\nimport type { PageTabCssVars, PageTabCssVarsProps } from '../../types'\n\n/** The active color of the tab */\nexport const ACTIVE_COLOR = '#1890ff'\n\nfunction createCssVars(props: PageTabCssVarsProps) {\n  const cssVars: PageTabCssVars = {\n    '--one-primary-color': props.primaryColor,\n    '--one-primary-color1': props.primaryColor1,\n    '--one-primary-color2': props.primaryColor2,\n    '--one-primary-color-opacity1': props.primaryColorOpacity1,\n    '--one-primary-color-opacity2': props.primaryColorOpacity2,\n    '--one-primary-color-opacity3': props.primaryColorOpacity3\n  }\n\n  return cssVars\n}\n\nexport function createTabCssVars(primaryColor: string) {\n  const cssProps: PageTabCssVarsProps = {\n    primaryColor,\n    primaryColor1: transformColorWithOpacity(primaryColor, 0.1, '#ffffff'),\n    primaryColor2: transformColorWithOpacity(primaryColor, 0.3, '#000000'),\n    primaryColorOpacity1: addColorAlpha(primaryColor, 0.1),\n    primaryColorOpacity2: addColorAlpha(primaryColor, 0.15),\n    primaryColorOpacity3: addColorAlpha(primaryColor, 0.3)\n  }\n\n  return createCssVars(cssProps)\n}\n","<script setup lang=\"ts\">\ndefineOptions({\n  name: 'ChromeTabBg'\n})\n</script>\n\n<template>\n  <svg class=\"size-full\">\n    <defs>\n      <symbol id=\"geometry-left\" viewBox=\"0 0 214 36\">\n        <path d=\"M17 0h197v36H0v-2c4.5 0 9-3.5 9-8V8c0-4.5 3.5-8 8-8z\" />\n      </symbol>\n      <symbol id=\"geometry-right\" viewBox=\"0 0 214 36\">\n        <use xlink:href=\"#geometry-left\" />\n      </symbol>\n      <clipPath>\n        <rect width=\"100%\" height=\"100%\" x=\"0\" />\n      </clipPath>\n    </defs>\n    <svg width=\"51%\" height=\"100%\">\n      <use xlink:href=\"#geometry-left\" width=\"214\" height=\"36\" fill=\"currentColor\" />\n    </svg>\n    <g transform=\"scale(-1, 1)\">\n      <svg width=\"51%\" height=\"100%\" x=\"-100%\" y=\"0\">\n        <use xlink:href=\"#geometry-right\" width=\"214\" height=\"36\" fill=\"currentColor\" />\n      </svg>\n    </g>\n  </svg>\n</template>\n\n<style scoped></style>\n","<script setup lang=\"ts\">\nimport type { PageTabProps } from '../../types'\nimport ChromeTabBg from './chrome-tab-bg.vue'\nimport style from './index.module.css'\n\ndefineOptions({\n  name: 'ChromeTab'\n})\n\ndefineProps<PageTabProps>()\n\ntype SlotFn = (_props?: Record<string, unknown>) => any\n\ntype Slots = {\n  /**\n   * Slot\n   *\n   * The center content of the tab\n   */\n  default?: SlotFn\n  /**\n   * Slot\n   *\n   * The left content of the tab\n   */\n  prefix?: SlotFn\n  /**\n   * Slot\n   *\n   * The right content of the tab\n   */\n  suffix?: SlotFn\n}\n\ndefineSlots<Slots>()\n</script>\n\n<template>\n  <div\n    class=\":one: relative inline-flex cursor-pointer items-center justify-center gap-16px whitespace-nowrap px-24px py-6px -mr-18px\"\n    :class=\"[style['chrome-tab'], { [style['chrome-tab_dark']]: darkMode }, { [style['chrome-tab_active']]: active }, { [style['chrome-tab_active_dark']]: active && darkMode }]\"\n  >\n    <div class=\":one: pointer-events-none absolute left-0 top-0 h-full w-full -z-1\" :class=\"[style['chrome-tab__bg']]\">\n      <ChromeTabBg />\n    </div>\n    <slot name=\"prefix\"></slot>\n    <slot></slot>\n    <slot name=\"suffix\"></slot>\n    <div class=\":one: absolute right-7px h-16px w-1px bg-#1f2225\" :class=\"[style['chrome-tab-divider']]\"></div>\n  </div>\n</template>\n\n<style scoped></style>\n","<script setup lang=\"ts\">\nimport type { PageTabProps } from '../../types'\nimport style from './index.module.css'\n\ndefineOptions({\n  name: 'ButtonTab'\n})\n\ndefineProps<PageTabProps>()\n\ntype SlotFn = (_props?: Record<string, unknown>) => any\n\ntype Slots = {\n  /**\n   * Slot\n   *\n   * The center content of the tab\n   */\n  default?: SlotFn\n  /**\n   * Slot\n   *\n   * The left content of the tab\n   */\n  prefix?: SlotFn\n  /**\n   * Slot\n   *\n   * The right content of the tab\n   */\n  suffix?: SlotFn\n}\n\ndefineSlots<Slots>()\n</script>\n\n<template>\n  <div\n    class=\":one: relative inline-flex cursor-pointer items-center justify-center gap-12px whitespace-nowrap border-(1px solid) rounded-4px px-12px py-4px\"\n    :class=\"[style['button-tab'], { [style['button-tab_dark']]: darkMode }, { [style['button-tab_active']]: active }, { [style['button-tab_active_dark']]: active && darkMode }]\"\n  >\n    <slot name=\"prefix\"></slot>\n    <slot></slot>\n    <slot name=\"suffix\"></slot>\n  </div>\n</template>\n\n<style scoped></style>\n","<script setup lang=\"ts\">\ndefineOptions({\n  name: 'SvgClose'\n})\n</script>\n\n<template>\n  <div class=\":one: relative h-16px w-16px inline-flex items-center justify-center rd-50% text-14px\">\n    <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 1024 1024\">\n      <path\n        fill=\"currentColor\"\n        d=\"m563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8L295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512L196.9 824.9A7.95 7.95 0 0 0 203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1l216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z\"\n      />\n    </svg>\n  </div>\n</template>\n\n<style scoped></style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { Component } from 'vue'\nimport type { PageTabMode, PageTabProps } from '../../types'\nimport { ACTIVE_COLOR, createTabCssVars } from './shared'\nimport ChromeTab from './chrome-tab.vue'\nimport ButtonTab from './button-tab.vue'\nimport SvgClose from './svg-close.vue'\nimport style from './index.module.css'\n\ndefineOptions({\n  name: 'PageTab'\n})\n\nconst props = withDefaults(defineProps<PageTabProps>(), {\n  mode: 'chrome',\n  commonClass: 'transition-all-300',\n  activeColor: ACTIVE_COLOR,\n  closable: true\n})\n\ninterface Emits {\n  (_e: 'close'): void\n}\n\nconst emit = defineEmits<Emits>()\n\nconst activeTabComponent = computed(() => {\n  const { mode, chromeClass, buttonClass } = props\n\n  const tabComponentMap = {\n    chrome: {\n      component: ChromeTab,\n      class: chromeClass\n    },\n    button: {\n      component: ButtonTab,\n      class: buttonClass\n    }\n  } satisfies Record<PageTabMode, { component: Component; class?: string }>\n\n  return tabComponentMap[mode]\n})\n\nconst cssVars = computed(() => createTabCssVars(props.activeColor))\n\nconst bindProps = computed(() => {\n  const { chromeClass: _chromeCls, buttonClass: _btnCls, ...rest } = props\n\n  return rest\n})\n\nfunction handleClose() {\n  emit('close')\n}\n</script>\n\n<template>\n  <component :is=\"activeTabComponent.component\" :class=\"activeTabComponent.class\" :style=\"cssVars\" v-bind=\"bindProps\">\n    <template #prefix>\n      <slot name=\"prefix\"></slot>\n    </template>\n    <slot></slot>\n    <template #suffix>\n      <slot name=\"suffix\">\n        <SvgClose v-if=\"closable\" :class=\"[style['svg-close']]\" @click.stop=\"handleClose\" />\n      </slot>\n    </template>\n  </component>\n</template>\n\n<style scoped></style>\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nexport default throttle;\n","/**\n * simplebar-core - v1.3.2\n * Scrollbars, simpler.\n * https://grsmto.github.io/simplebar/\n *\n * Made by Adrien Denat from a fork by Jonathan Nicol\n * Under MIT License\n */\n\nimport debounce from 'lodash-es/debounce.js';\nimport throttle from 'lodash-es/throttle.js';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\n\nfunction getElementWindow$1(element) {\n    if (!element ||\n        !element.ownerDocument ||\n        !element.ownerDocument.defaultView) {\n        return window;\n    }\n    return element.ownerDocument.defaultView;\n}\nfunction getElementDocument$1(element) {\n    if (!element || !element.ownerDocument) {\n        return document;\n    }\n    return element.ownerDocument;\n}\n// Helper function to retrieve options from element attributes\nvar getOptions$1 = function (obj) {\n    var initialObj = {};\n    var options = Array.prototype.reduce.call(obj, function (acc, attribute) {\n        var option = attribute.name.match(/data-simplebar-(.+)/);\n        if (option) {\n            var key = option[1].replace(/\\W+(.)/g, function (_, chr) { return chr.toUpperCase(); });\n            switch (attribute.value) {\n                case 'true':\n                    acc[key] = true;\n                    break;\n                case 'false':\n                    acc[key] = false;\n                    break;\n                case undefined:\n                    acc[key] = true;\n                    break;\n                default:\n                    acc[key] = attribute.value;\n            }\n        }\n        return acc;\n    }, initialObj);\n    return options;\n};\nfunction addClasses$1(el, classes) {\n    var _a;\n    if (!el)\n        return;\n    (_a = el.classList).add.apply(_a, classes.split(' '));\n}\nfunction removeClasses$1(el, classes) {\n    if (!el)\n        return;\n    classes.split(' ').forEach(function (className) {\n        el.classList.remove(className);\n    });\n}\nfunction classNamesToQuery$1(classNames) {\n    return \".\".concat(classNames.split(' ').join('.'));\n}\nvar canUseDOM = !!(typeof window !== 'undefined' &&\n    window.document &&\n    window.document.createElement);\n\nvar helpers = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    addClasses: addClasses$1,\n    canUseDOM: canUseDOM,\n    classNamesToQuery: classNamesToQuery$1,\n    getElementDocument: getElementDocument$1,\n    getElementWindow: getElementWindow$1,\n    getOptions: getOptions$1,\n    removeClasses: removeClasses$1\n});\n\nvar cachedScrollbarWidth = null;\nvar cachedDevicePixelRatio = null;\nif (canUseDOM) {\n    window.addEventListener('resize', function () {\n        if (cachedDevicePixelRatio !== window.devicePixelRatio) {\n            cachedDevicePixelRatio = window.devicePixelRatio;\n            cachedScrollbarWidth = null;\n        }\n    });\n}\nfunction scrollbarWidth() {\n    if (cachedScrollbarWidth === null) {\n        if (typeof document === 'undefined') {\n            cachedScrollbarWidth = 0;\n            return cachedScrollbarWidth;\n        }\n        var body = document.body;\n        var box = document.createElement('div');\n        box.classList.add('simplebar-hide-scrollbar');\n        body.appendChild(box);\n        var width = box.getBoundingClientRect().right;\n        body.removeChild(box);\n        cachedScrollbarWidth = width;\n    }\n    return cachedScrollbarWidth;\n}\n\nvar getElementWindow = getElementWindow$1, getElementDocument = getElementDocument$1, getOptions = getOptions$1, addClasses = addClasses$1, removeClasses = removeClasses$1, classNamesToQuery = classNamesToQuery$1;\nvar SimpleBarCore = /** @class */ (function () {\n    function SimpleBarCore(element, options) {\n        if (options === void 0) { options = {}; }\n        var _this = this;\n        this.removePreventClickId = null;\n        this.minScrollbarWidth = 20;\n        this.stopScrollDelay = 175;\n        this.isScrolling = false;\n        this.isMouseEntering = false;\n        this.isDragging = false;\n        this.scrollXTicking = false;\n        this.scrollYTicking = false;\n        this.wrapperEl = null;\n        this.contentWrapperEl = null;\n        this.contentEl = null;\n        this.offsetEl = null;\n        this.maskEl = null;\n        this.placeholderEl = null;\n        this.heightAutoObserverWrapperEl = null;\n        this.heightAutoObserverEl = null;\n        this.rtlHelpers = null;\n        this.scrollbarWidth = 0;\n        this.resizeObserver = null;\n        this.mutationObserver = null;\n        this.elStyles = null;\n        this.isRtl = null;\n        this.mouseX = 0;\n        this.mouseY = 0;\n        this.onMouseMove = function () { };\n        this.onWindowResize = function () { };\n        this.onStopScrolling = function () { };\n        this.onMouseEntered = function () { };\n        /**\n         * On scroll event handling\n         */\n        this.onScroll = function () {\n            var elWindow = getElementWindow(_this.el);\n            if (!_this.scrollXTicking) {\n                elWindow.requestAnimationFrame(_this.scrollX);\n                _this.scrollXTicking = true;\n            }\n            if (!_this.scrollYTicking) {\n                elWindow.requestAnimationFrame(_this.scrollY);\n                _this.scrollYTicking = true;\n            }\n            if (!_this.isScrolling) {\n                _this.isScrolling = true;\n                addClasses(_this.el, _this.classNames.scrolling);\n            }\n            _this.showScrollbar('x');\n            _this.showScrollbar('y');\n            _this.onStopScrolling();\n        };\n        this.scrollX = function () {\n            if (_this.axis.x.isOverflowing) {\n                _this.positionScrollbar('x');\n            }\n            _this.scrollXTicking = false;\n        };\n        this.scrollY = function () {\n            if (_this.axis.y.isOverflowing) {\n                _this.positionScrollbar('y');\n            }\n            _this.scrollYTicking = false;\n        };\n        this._onStopScrolling = function () {\n            removeClasses(_this.el, _this.classNames.scrolling);\n            if (_this.options.autoHide) {\n                _this.hideScrollbar('x');\n                _this.hideScrollbar('y');\n            }\n            _this.isScrolling = false;\n        };\n        this.onMouseEnter = function () {\n            if (!_this.isMouseEntering) {\n                addClasses(_this.el, _this.classNames.mouseEntered);\n                _this.showScrollbar('x');\n                _this.showScrollbar('y');\n                _this.isMouseEntering = true;\n            }\n            _this.onMouseEntered();\n        };\n        this._onMouseEntered = function () {\n            removeClasses(_this.el, _this.classNames.mouseEntered);\n            if (_this.options.autoHide) {\n                _this.hideScrollbar('x');\n                _this.hideScrollbar('y');\n            }\n            _this.isMouseEntering = false;\n        };\n        this._onMouseMove = function (e) {\n            _this.mouseX = e.clientX;\n            _this.mouseY = e.clientY;\n            if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n                _this.onMouseMoveForAxis('x');\n            }\n            if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n                _this.onMouseMoveForAxis('y');\n            }\n        };\n        this.onMouseLeave = function () {\n            _this.onMouseMove.cancel();\n            if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n                _this.onMouseLeaveForAxis('x');\n            }\n            if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n                _this.onMouseLeaveForAxis('y');\n            }\n            _this.mouseX = -1;\n            _this.mouseY = -1;\n        };\n        this._onWindowResize = function () {\n            // Recalculate scrollbarWidth in case it's a zoom\n            _this.scrollbarWidth = _this.getScrollbarWidth();\n            _this.hideNativeScrollbar();\n        };\n        this.onPointerEvent = function (e) {\n            if (!_this.axis.x.track.el ||\n                !_this.axis.y.track.el ||\n                !_this.axis.x.scrollbar.el ||\n                !_this.axis.y.scrollbar.el)\n                return;\n            var isWithinTrackXBounds, isWithinTrackYBounds;\n            _this.axis.x.track.rect = _this.axis.x.track.el.getBoundingClientRect();\n            _this.axis.y.track.rect = _this.axis.y.track.el.getBoundingClientRect();\n            if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) {\n                isWithinTrackXBounds = _this.isWithinBounds(_this.axis.x.track.rect);\n            }\n            if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) {\n                isWithinTrackYBounds = _this.isWithinBounds(_this.axis.y.track.rect);\n            }\n            // If any pointer event is called on the scrollbar\n            if (isWithinTrackXBounds || isWithinTrackYBounds) {\n                // Prevent event leaking\n                e.stopPropagation();\n                if (e.type === 'pointerdown' && e.pointerType !== 'touch') {\n                    if (isWithinTrackXBounds) {\n                        _this.axis.x.scrollbar.rect =\n                            _this.axis.x.scrollbar.el.getBoundingClientRect();\n                        if (_this.isWithinBounds(_this.axis.x.scrollbar.rect)) {\n                            _this.onDragStart(e, 'x');\n                        }\n                        else {\n                            _this.onTrackClick(e, 'x');\n                        }\n                    }\n                    if (isWithinTrackYBounds) {\n                        _this.axis.y.scrollbar.rect =\n                            _this.axis.y.scrollbar.el.getBoundingClientRect();\n                        if (_this.isWithinBounds(_this.axis.y.scrollbar.rect)) {\n                            _this.onDragStart(e, 'y');\n                        }\n                        else {\n                            _this.onTrackClick(e, 'y');\n                        }\n                    }\n                }\n            }\n        };\n        /**\n         * Drag scrollbar handle\n         */\n        this.drag = function (e) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n            if (!_this.draggedAxis || !_this.contentWrapperEl)\n                return;\n            var eventOffset;\n            var track = _this.axis[_this.draggedAxis].track;\n            var trackSize = (_b = (_a = track.rect) === null || _a === void 0 ? void 0 : _a[_this.axis[_this.draggedAxis].sizeAttr]) !== null && _b !== void 0 ? _b : 0;\n            var scrollbar = _this.axis[_this.draggedAxis].scrollbar;\n            var contentSize = (_d = (_c = _this.contentWrapperEl) === null || _c === void 0 ? void 0 : _c[_this.axis[_this.draggedAxis].scrollSizeAttr]) !== null && _d !== void 0 ? _d : 0;\n            var hostSize = parseInt((_f = (_e = _this.elStyles) === null || _e === void 0 ? void 0 : _e[_this.axis[_this.draggedAxis].sizeAttr]) !== null && _f !== void 0 ? _f : '0px', 10);\n            e.preventDefault();\n            e.stopPropagation();\n            if (_this.draggedAxis === 'y') {\n                eventOffset = e.pageY;\n            }\n            else {\n                eventOffset = e.pageX;\n            }\n            // Calculate how far the user's mouse is from the top/left of the scrollbar (minus the dragOffset).\n            var dragPos = eventOffset -\n                ((_h = (_g = track.rect) === null || _g === void 0 ? void 0 : _g[_this.axis[_this.draggedAxis].offsetAttr]) !== null && _h !== void 0 ? _h : 0) -\n                _this.axis[_this.draggedAxis].dragOffset;\n            dragPos =\n                _this.draggedAxis === 'x' && _this.isRtl\n                    ? ((_k = (_j = track.rect) === null || _j === void 0 ? void 0 : _j[_this.axis[_this.draggedAxis].sizeAttr]) !== null && _k !== void 0 ? _k : 0) -\n                        scrollbar.size -\n                        dragPos\n                    : dragPos;\n            // Convert the mouse position into a percentage of the scrollbar height/width.\n            var dragPerc = dragPos / (trackSize - scrollbar.size);\n            // Scroll the content by the same percentage.\n            var scrollPos = dragPerc * (contentSize - hostSize);\n            // Fix browsers inconsistency on RTL\n            if (_this.draggedAxis === 'x' && _this.isRtl) {\n                scrollPos = ((_l = SimpleBarCore.getRtlHelpers()) === null || _l === void 0 ? void 0 : _l.isScrollingToNegative)\n                    ? -scrollPos\n                    : scrollPos;\n            }\n            _this.contentWrapperEl[_this.axis[_this.draggedAxis].scrollOffsetAttr] =\n                scrollPos;\n        };\n        /**\n         * End scroll handle drag\n         */\n        this.onEndDrag = function (e) {\n            _this.isDragging = false;\n            var elDocument = getElementDocument(_this.el);\n            var elWindow = getElementWindow(_this.el);\n            e.preventDefault();\n            e.stopPropagation();\n            removeClasses(_this.el, _this.classNames.dragging);\n            _this.onStopScrolling();\n            elDocument.removeEventListener('mousemove', _this.drag, true);\n            elDocument.removeEventListener('mouseup', _this.onEndDrag, true);\n            _this.removePreventClickId = elWindow.setTimeout(function () {\n                // Remove these asynchronously so we still suppress click events\n                // generated simultaneously with mouseup.\n                elDocument.removeEventListener('click', _this.preventClick, true);\n                elDocument.removeEventListener('dblclick', _this.preventClick, true);\n                _this.removePreventClickId = null;\n            });\n        };\n        /**\n         * Handler to ignore click events during drag\n         */\n        this.preventClick = function (e) {\n            e.preventDefault();\n            e.stopPropagation();\n        };\n        this.el = element;\n        this.options = __assign(__assign({}, SimpleBarCore.defaultOptions), options);\n        this.classNames = __assign(__assign({}, SimpleBarCore.defaultOptions.classNames), options.classNames);\n        this.axis = {\n            x: {\n                scrollOffsetAttr: 'scrollLeft',\n                sizeAttr: 'width',\n                scrollSizeAttr: 'scrollWidth',\n                offsetSizeAttr: 'offsetWidth',\n                offsetAttr: 'left',\n                overflowAttr: 'overflowX',\n                dragOffset: 0,\n                isOverflowing: true,\n                forceVisible: false,\n                track: { size: null, el: null, rect: null, isVisible: false },\n                scrollbar: { size: null, el: null, rect: null, isVisible: false }\n            },\n            y: {\n                scrollOffsetAttr: 'scrollTop',\n                sizeAttr: 'height',\n                scrollSizeAttr: 'scrollHeight',\n                offsetSizeAttr: 'offsetHeight',\n                offsetAttr: 'top',\n                overflowAttr: 'overflowY',\n                dragOffset: 0,\n                isOverflowing: true,\n                forceVisible: false,\n                track: { size: null, el: null, rect: null, isVisible: false },\n                scrollbar: { size: null, el: null, rect: null, isVisible: false }\n            }\n        };\n        if (typeof this.el !== 'object' || !this.el.nodeName) {\n            throw new Error(\"Argument passed to SimpleBar must be an HTML element instead of \".concat(this.el));\n        }\n        this.onMouseMove = throttle(this._onMouseMove, 64);\n        this.onWindowResize = debounce(this._onWindowResize, 64, { leading: true });\n        this.onStopScrolling = debounce(this._onStopScrolling, this.stopScrollDelay);\n        this.onMouseEntered = debounce(this._onMouseEntered, this.stopScrollDelay);\n        this.init();\n    }\n    /**\n     * Helper to fix browsers inconsistency on RTL:\n     *  - Firefox inverts the scrollbar initial position\n     *  - IE11 inverts both scrollbar position and scrolling offset\n     * Directly inspired by @KingSora's OverlayScrollbars https://github.com/KingSora/OverlayScrollbars/blob/master/js/OverlayScrollbars.js#L1634\n     */\n    SimpleBarCore.getRtlHelpers = function () {\n        if (SimpleBarCore.rtlHelpers) {\n            return SimpleBarCore.rtlHelpers;\n        }\n        var dummyDiv = document.createElement('div');\n        dummyDiv.innerHTML =\n            '<div class=\"simplebar-dummy-scrollbar-size\"><div></div></div>';\n        var scrollbarDummyEl = dummyDiv.firstElementChild;\n        var dummyChild = scrollbarDummyEl === null || scrollbarDummyEl === void 0 ? void 0 : scrollbarDummyEl.firstElementChild;\n        if (!dummyChild)\n            return null;\n        document.body.appendChild(scrollbarDummyEl);\n        scrollbarDummyEl.scrollLeft = 0;\n        var dummyContainerOffset = SimpleBarCore.getOffset(scrollbarDummyEl);\n        var dummyChildOffset = SimpleBarCore.getOffset(dummyChild);\n        scrollbarDummyEl.scrollLeft = -999;\n        var dummyChildOffsetAfterScroll = SimpleBarCore.getOffset(dummyChild);\n        document.body.removeChild(scrollbarDummyEl);\n        SimpleBarCore.rtlHelpers = {\n            // determines if the scrolling is responding with negative values\n            isScrollOriginAtZero: dummyContainerOffset.left !== dummyChildOffset.left,\n            // determines if the origin scrollbar position is inverted or not (positioned on left or right)\n            isScrollingToNegative: dummyChildOffset.left !== dummyChildOffsetAfterScroll.left\n        };\n        return SimpleBarCore.rtlHelpers;\n    };\n    SimpleBarCore.prototype.getScrollbarWidth = function () {\n        // Try/catch for FF 56 throwing on undefined computedStyles\n        try {\n            // Detect browsers supporting CSS scrollbar styling and do not calculate\n            if ((this.contentWrapperEl &&\n                getComputedStyle(this.contentWrapperEl, '::-webkit-scrollbar')\n                    .display === 'none') ||\n                'scrollbarWidth' in document.documentElement.style ||\n                '-ms-overflow-style' in document.documentElement.style) {\n                return 0;\n            }\n            else {\n                return scrollbarWidth();\n            }\n        }\n        catch (e) {\n            return scrollbarWidth();\n        }\n    };\n    SimpleBarCore.getOffset = function (el) {\n        var rect = el.getBoundingClientRect();\n        var elDocument = getElementDocument(el);\n        var elWindow = getElementWindow(el);\n        return {\n            top: rect.top +\n                (elWindow.pageYOffset || elDocument.documentElement.scrollTop),\n            left: rect.left +\n                (elWindow.pageXOffset || elDocument.documentElement.scrollLeft)\n        };\n    };\n    SimpleBarCore.prototype.init = function () {\n        // We stop here on server-side\n        if (canUseDOM) {\n            this.initDOM();\n            this.rtlHelpers = SimpleBarCore.getRtlHelpers();\n            this.scrollbarWidth = this.getScrollbarWidth();\n            this.recalculate();\n            this.initListeners();\n        }\n    };\n    SimpleBarCore.prototype.initDOM = function () {\n        var _a, _b;\n        // assume that element has his DOM already initiated\n        this.wrapperEl = this.el.querySelector(classNamesToQuery(this.classNames.wrapper));\n        this.contentWrapperEl =\n            this.options.scrollableNode ||\n                this.el.querySelector(classNamesToQuery(this.classNames.contentWrapper));\n        this.contentEl =\n            this.options.contentNode ||\n                this.el.querySelector(classNamesToQuery(this.classNames.contentEl));\n        this.offsetEl = this.el.querySelector(classNamesToQuery(this.classNames.offset));\n        this.maskEl = this.el.querySelector(classNamesToQuery(this.classNames.mask));\n        this.placeholderEl = this.findChild(this.wrapperEl, classNamesToQuery(this.classNames.placeholder));\n        this.heightAutoObserverWrapperEl = this.el.querySelector(classNamesToQuery(this.classNames.heightAutoObserverWrapperEl));\n        this.heightAutoObserverEl = this.el.querySelector(classNamesToQuery(this.classNames.heightAutoObserverEl));\n        this.axis.x.track.el = this.findChild(this.el, \"\".concat(classNamesToQuery(this.classNames.track)).concat(classNamesToQuery(this.classNames.horizontal)));\n        this.axis.y.track.el = this.findChild(this.el, \"\".concat(classNamesToQuery(this.classNames.track)).concat(classNamesToQuery(this.classNames.vertical)));\n        this.axis.x.scrollbar.el =\n            ((_a = this.axis.x.track.el) === null || _a === void 0 ? void 0 : _a.querySelector(classNamesToQuery(this.classNames.scrollbar))) || null;\n        this.axis.y.scrollbar.el =\n            ((_b = this.axis.y.track.el) === null || _b === void 0 ? void 0 : _b.querySelector(classNamesToQuery(this.classNames.scrollbar))) || null;\n        if (!this.options.autoHide) {\n            addClasses(this.axis.x.scrollbar.el, this.classNames.visible);\n            addClasses(this.axis.y.scrollbar.el, this.classNames.visible);\n        }\n    };\n    SimpleBarCore.prototype.initListeners = function () {\n        var _this = this;\n        var _a;\n        var elWindow = getElementWindow(this.el);\n        // Event listeners\n        this.el.addEventListener('mouseenter', this.onMouseEnter);\n        this.el.addEventListener('pointerdown', this.onPointerEvent, true);\n        this.el.addEventListener('mousemove', this.onMouseMove);\n        this.el.addEventListener('mouseleave', this.onMouseLeave);\n        (_a = this.contentWrapperEl) === null || _a === void 0 ? void 0 : _a.addEventListener('scroll', this.onScroll);\n        // Browser zoom triggers a window resize\n        elWindow.addEventListener('resize', this.onWindowResize);\n        if (!this.contentEl)\n            return;\n        if (window.ResizeObserver) {\n            // Hack for https://github.com/WICG/ResizeObserver/issues/38\n            var resizeObserverStarted_1 = false;\n            var resizeObserver = elWindow.ResizeObserver || ResizeObserver;\n            this.resizeObserver = new resizeObserver(function () {\n                if (!resizeObserverStarted_1)\n                    return;\n                elWindow.requestAnimationFrame(function () {\n                    _this.recalculate();\n                });\n            });\n            this.resizeObserver.observe(this.el);\n            this.resizeObserver.observe(this.contentEl);\n            elWindow.requestAnimationFrame(function () {\n                resizeObserverStarted_1 = true;\n            });\n        }\n        // This is required to detect horizontal scroll. Vertical scroll only needs the resizeObserver.\n        this.mutationObserver = new elWindow.MutationObserver(function () {\n            elWindow.requestAnimationFrame(function () {\n                _this.recalculate();\n            });\n        });\n        this.mutationObserver.observe(this.contentEl, {\n            childList: true,\n            subtree: true,\n            characterData: true\n        });\n    };\n    SimpleBarCore.prototype.recalculate = function () {\n        if (!this.heightAutoObserverEl ||\n            !this.contentEl ||\n            !this.contentWrapperEl ||\n            !this.wrapperEl ||\n            !this.placeholderEl)\n            return;\n        var elWindow = getElementWindow(this.el);\n        this.elStyles = elWindow.getComputedStyle(this.el);\n        this.isRtl = this.elStyles.direction === 'rtl';\n        var contentElOffsetWidth = this.contentEl.offsetWidth;\n        var isHeightAuto = this.heightAutoObserverEl.offsetHeight <= 1;\n        var isWidthAuto = this.heightAutoObserverEl.offsetWidth <= 1 || contentElOffsetWidth > 0;\n        var contentWrapperElOffsetWidth = this.contentWrapperEl.offsetWidth;\n        var elOverflowX = this.elStyles.overflowX;\n        var elOverflowY = this.elStyles.overflowY;\n        this.contentEl.style.padding = \"\".concat(this.elStyles.paddingTop, \" \").concat(this.elStyles.paddingRight, \" \").concat(this.elStyles.paddingBottom, \" \").concat(this.elStyles.paddingLeft);\n        this.wrapperEl.style.margin = \"-\".concat(this.elStyles.paddingTop, \" -\").concat(this.elStyles.paddingRight, \" -\").concat(this.elStyles.paddingBottom, \" -\").concat(this.elStyles.paddingLeft);\n        var contentElScrollHeight = this.contentEl.scrollHeight;\n        var contentElScrollWidth = this.contentEl.scrollWidth;\n        this.contentWrapperEl.style.height = isHeightAuto ? 'auto' : '100%';\n        // Determine placeholder size\n        this.placeholderEl.style.width = isWidthAuto\n            ? \"\".concat(contentElOffsetWidth || contentElScrollWidth, \"px\")\n            : 'auto';\n        this.placeholderEl.style.height = \"\".concat(contentElScrollHeight, \"px\");\n        var contentWrapperElOffsetHeight = this.contentWrapperEl.offsetHeight;\n        this.axis.x.isOverflowing =\n            contentElOffsetWidth !== 0 && contentElScrollWidth > contentElOffsetWidth;\n        this.axis.y.isOverflowing =\n            contentElScrollHeight > contentWrapperElOffsetHeight;\n        // Set isOverflowing to false if user explicitely set hidden overflow\n        this.axis.x.isOverflowing =\n            elOverflowX === 'hidden' ? false : this.axis.x.isOverflowing;\n        this.axis.y.isOverflowing =\n            elOverflowY === 'hidden' ? false : this.axis.y.isOverflowing;\n        this.axis.x.forceVisible =\n            this.options.forceVisible === 'x' || this.options.forceVisible === true;\n        this.axis.y.forceVisible =\n            this.options.forceVisible === 'y' || this.options.forceVisible === true;\n        this.hideNativeScrollbar();\n        // Set isOverflowing to false if scrollbar is not necessary (content is shorter than offset)\n        var offsetForXScrollbar = this.axis.x.isOverflowing\n            ? this.scrollbarWidth\n            : 0;\n        var offsetForYScrollbar = this.axis.y.isOverflowing\n            ? this.scrollbarWidth\n            : 0;\n        this.axis.x.isOverflowing =\n            this.axis.x.isOverflowing &&\n                contentElScrollWidth > contentWrapperElOffsetWidth - offsetForYScrollbar;\n        this.axis.y.isOverflowing =\n            this.axis.y.isOverflowing &&\n                contentElScrollHeight >\n                    contentWrapperElOffsetHeight - offsetForXScrollbar;\n        this.axis.x.scrollbar.size = this.getScrollbarSize('x');\n        this.axis.y.scrollbar.size = this.getScrollbarSize('y');\n        if (this.axis.x.scrollbar.el)\n            this.axis.x.scrollbar.el.style.width = \"\".concat(this.axis.x.scrollbar.size, \"px\");\n        if (this.axis.y.scrollbar.el)\n            this.axis.y.scrollbar.el.style.height = \"\".concat(this.axis.y.scrollbar.size, \"px\");\n        this.positionScrollbar('x');\n        this.positionScrollbar('y');\n        this.toggleTrackVisibility('x');\n        this.toggleTrackVisibility('y');\n    };\n    /**\n     * Calculate scrollbar size\n     */\n    SimpleBarCore.prototype.getScrollbarSize = function (axis) {\n        var _a, _b;\n        if (axis === void 0) { axis = 'y'; }\n        if (!this.axis[axis].isOverflowing || !this.contentEl) {\n            return 0;\n        }\n        var contentSize = this.contentEl[this.axis[axis].scrollSizeAttr];\n        var trackSize = (_b = (_a = this.axis[axis].track.el) === null || _a === void 0 ? void 0 : _a[this.axis[axis].offsetSizeAttr]) !== null && _b !== void 0 ? _b : 0;\n        var scrollbarRatio = trackSize / contentSize;\n        var scrollbarSize;\n        // Calculate new height/position of drag handle.\n        scrollbarSize = Math.max(~~(scrollbarRatio * trackSize), this.options.scrollbarMinSize);\n        if (this.options.scrollbarMaxSize) {\n            scrollbarSize = Math.min(scrollbarSize, this.options.scrollbarMaxSize);\n        }\n        return scrollbarSize;\n    };\n    SimpleBarCore.prototype.positionScrollbar = function (axis) {\n        var _a, _b, _c;\n        if (axis === void 0) { axis = 'y'; }\n        var scrollbar = this.axis[axis].scrollbar;\n        if (!this.axis[axis].isOverflowing ||\n            !this.contentWrapperEl ||\n            !scrollbar.el ||\n            !this.elStyles) {\n            return;\n        }\n        var contentSize = this.contentWrapperEl[this.axis[axis].scrollSizeAttr];\n        var trackSize = ((_a = this.axis[axis].track.el) === null || _a === void 0 ? void 0 : _a[this.axis[axis].offsetSizeAttr]) || 0;\n        var hostSize = parseInt(this.elStyles[this.axis[axis].sizeAttr], 10);\n        var scrollOffset = this.contentWrapperEl[this.axis[axis].scrollOffsetAttr];\n        scrollOffset =\n            axis === 'x' &&\n                this.isRtl &&\n                ((_b = SimpleBarCore.getRtlHelpers()) === null || _b === void 0 ? void 0 : _b.isScrollOriginAtZero)\n                ? -scrollOffset\n                : scrollOffset;\n        if (axis === 'x' && this.isRtl) {\n            scrollOffset = ((_c = SimpleBarCore.getRtlHelpers()) === null || _c === void 0 ? void 0 : _c.isScrollingToNegative)\n                ? scrollOffset\n                : -scrollOffset;\n        }\n        var scrollPourcent = scrollOffset / (contentSize - hostSize);\n        var handleOffset = ~~((trackSize - scrollbar.size) * scrollPourcent);\n        handleOffset =\n            axis === 'x' && this.isRtl\n                ? -handleOffset + (trackSize - scrollbar.size)\n                : handleOffset;\n        scrollbar.el.style.transform =\n            axis === 'x'\n                ? \"translate3d(\".concat(handleOffset, \"px, 0, 0)\")\n                : \"translate3d(0, \".concat(handleOffset, \"px, 0)\");\n    };\n    SimpleBarCore.prototype.toggleTrackVisibility = function (axis) {\n        if (axis === void 0) { axis = 'y'; }\n        var track = this.axis[axis].track.el;\n        var scrollbar = this.axis[axis].scrollbar.el;\n        if (!track || !scrollbar || !this.contentWrapperEl)\n            return;\n        if (this.axis[axis].isOverflowing || this.axis[axis].forceVisible) {\n            track.style.visibility = 'visible';\n            this.contentWrapperEl.style[this.axis[axis].overflowAttr] = 'scroll';\n            this.el.classList.add(\"\".concat(this.classNames.scrollable, \"-\").concat(axis));\n        }\n        else {\n            track.style.visibility = 'hidden';\n            this.contentWrapperEl.style[this.axis[axis].overflowAttr] = 'hidden';\n            this.el.classList.remove(\"\".concat(this.classNames.scrollable, \"-\").concat(axis));\n        }\n        // Even if forceVisible is enabled, scrollbar itself should be hidden\n        if (this.axis[axis].isOverflowing) {\n            scrollbar.style.display = 'block';\n        }\n        else {\n            scrollbar.style.display = 'none';\n        }\n    };\n    SimpleBarCore.prototype.showScrollbar = function (axis) {\n        if (axis === void 0) { axis = 'y'; }\n        if (this.axis[axis].isOverflowing && !this.axis[axis].scrollbar.isVisible) {\n            addClasses(this.axis[axis].scrollbar.el, this.classNames.visible);\n            this.axis[axis].scrollbar.isVisible = true;\n        }\n    };\n    SimpleBarCore.prototype.hideScrollbar = function (axis) {\n        if (axis === void 0) { axis = 'y'; }\n        if (this.isDragging)\n            return;\n        if (this.axis[axis].isOverflowing && this.axis[axis].scrollbar.isVisible) {\n            removeClasses(this.axis[axis].scrollbar.el, this.classNames.visible);\n            this.axis[axis].scrollbar.isVisible = false;\n        }\n    };\n    SimpleBarCore.prototype.hideNativeScrollbar = function () {\n        if (!this.offsetEl)\n            return;\n        this.offsetEl.style[this.isRtl ? 'left' : 'right'] =\n            this.axis.y.isOverflowing || this.axis.y.forceVisible\n                ? \"-\".concat(this.scrollbarWidth, \"px\")\n                : '0px';\n        this.offsetEl.style.bottom =\n            this.axis.x.isOverflowing || this.axis.x.forceVisible\n                ? \"-\".concat(this.scrollbarWidth, \"px\")\n                : '0px';\n    };\n    SimpleBarCore.prototype.onMouseMoveForAxis = function (axis) {\n        if (axis === void 0) { axis = 'y'; }\n        var currentAxis = this.axis[axis];\n        if (!currentAxis.track.el || !currentAxis.scrollbar.el)\n            return;\n        currentAxis.track.rect = currentAxis.track.el.getBoundingClientRect();\n        currentAxis.scrollbar.rect =\n            currentAxis.scrollbar.el.getBoundingClientRect();\n        if (this.isWithinBounds(currentAxis.track.rect)) {\n            this.showScrollbar(axis);\n            addClasses(currentAxis.track.el, this.classNames.hover);\n            if (this.isWithinBounds(currentAxis.scrollbar.rect)) {\n                addClasses(currentAxis.scrollbar.el, this.classNames.hover);\n            }\n            else {\n                removeClasses(currentAxis.scrollbar.el, this.classNames.hover);\n            }\n        }\n        else {\n            removeClasses(currentAxis.track.el, this.classNames.hover);\n            if (this.options.autoHide) {\n                this.hideScrollbar(axis);\n            }\n        }\n    };\n    SimpleBarCore.prototype.onMouseLeaveForAxis = function (axis) {\n        if (axis === void 0) { axis = 'y'; }\n        removeClasses(this.axis[axis].track.el, this.classNames.hover);\n        removeClasses(this.axis[axis].scrollbar.el, this.classNames.hover);\n        if (this.options.autoHide) {\n            this.hideScrollbar(axis);\n        }\n    };\n    /**\n     * on scrollbar handle drag movement starts\n     */\n    SimpleBarCore.prototype.onDragStart = function (e, axis) {\n        var _a;\n        if (axis === void 0) { axis = 'y'; }\n        this.isDragging = true;\n        var elDocument = getElementDocument(this.el);\n        var elWindow = getElementWindow(this.el);\n        var scrollbar = this.axis[axis].scrollbar;\n        // Measure how far the user's mouse is from the top of the scrollbar drag handle.\n        var eventOffset = axis === 'y' ? e.pageY : e.pageX;\n        this.axis[axis].dragOffset =\n            eventOffset - (((_a = scrollbar.rect) === null || _a === void 0 ? void 0 : _a[this.axis[axis].offsetAttr]) || 0);\n        this.draggedAxis = axis;\n        addClasses(this.el, this.classNames.dragging);\n        elDocument.addEventListener('mousemove', this.drag, true);\n        elDocument.addEventListener('mouseup', this.onEndDrag, true);\n        if (this.removePreventClickId === null) {\n            elDocument.addEventListener('click', this.preventClick, true);\n            elDocument.addEventListener('dblclick', this.preventClick, true);\n        }\n        else {\n            elWindow.clearTimeout(this.removePreventClickId);\n            this.removePreventClickId = null;\n        }\n    };\n    SimpleBarCore.prototype.onTrackClick = function (e, axis) {\n        var _this = this;\n        var _a, _b, _c, _d;\n        if (axis === void 0) { axis = 'y'; }\n        var currentAxis = this.axis[axis];\n        if (!this.options.clickOnTrack ||\n            !currentAxis.scrollbar.el ||\n            !this.contentWrapperEl)\n            return;\n        // Preventing the event's default to trigger click underneath\n        e.preventDefault();\n        var elWindow = getElementWindow(this.el);\n        this.axis[axis].scrollbar.rect =\n            currentAxis.scrollbar.el.getBoundingClientRect();\n        var scrollbar = this.axis[axis].scrollbar;\n        var scrollbarOffset = (_b = (_a = scrollbar.rect) === null || _a === void 0 ? void 0 : _a[this.axis[axis].offsetAttr]) !== null && _b !== void 0 ? _b : 0;\n        var hostSize = parseInt((_d = (_c = this.elStyles) === null || _c === void 0 ? void 0 : _c[this.axis[axis].sizeAttr]) !== null && _d !== void 0 ? _d : '0px', 10);\n        var scrolled = this.contentWrapperEl[this.axis[axis].scrollOffsetAttr];\n        var t = axis === 'y'\n            ? this.mouseY - scrollbarOffset\n            : this.mouseX - scrollbarOffset;\n        var dir = t < 0 ? -1 : 1;\n        var scrollSize = dir === -1 ? scrolled - hostSize : scrolled + hostSize;\n        var speed = 40;\n        var scrollTo = function () {\n            if (!_this.contentWrapperEl)\n                return;\n            if (dir === -1) {\n                if (scrolled > scrollSize) {\n                    scrolled -= speed;\n                    _this.contentWrapperEl[_this.axis[axis].scrollOffsetAttr] = scrolled;\n                    elWindow.requestAnimationFrame(scrollTo);\n                }\n            }\n            else {\n                if (scrolled < scrollSize) {\n                    scrolled += speed;\n                    _this.contentWrapperEl[_this.axis[axis].scrollOffsetAttr] = scrolled;\n                    elWindow.requestAnimationFrame(scrollTo);\n                }\n            }\n        };\n        scrollTo();\n    };\n    /**\n     * Getter for content element\n     */\n    SimpleBarCore.prototype.getContentElement = function () {\n        return this.contentEl;\n    };\n    /**\n     * Getter for original scrolling element\n     */\n    SimpleBarCore.prototype.getScrollElement = function () {\n        return this.contentWrapperEl;\n    };\n    SimpleBarCore.prototype.removeListeners = function () {\n        var elWindow = getElementWindow(this.el);\n        // Event listeners\n        this.el.removeEventListener('mouseenter', this.onMouseEnter);\n        this.el.removeEventListener('pointerdown', this.onPointerEvent, true);\n        this.el.removeEventListener('mousemove', this.onMouseMove);\n        this.el.removeEventListener('mouseleave', this.onMouseLeave);\n        if (this.contentWrapperEl) {\n            this.contentWrapperEl.removeEventListener('scroll', this.onScroll);\n        }\n        elWindow.removeEventListener('resize', this.onWindowResize);\n        if (this.mutationObserver) {\n            this.mutationObserver.disconnect();\n        }\n        if (this.resizeObserver) {\n            this.resizeObserver.disconnect();\n        }\n        // Cancel all debounced functions\n        this.onMouseMove.cancel();\n        this.onWindowResize.cancel();\n        this.onStopScrolling.cancel();\n        this.onMouseEntered.cancel();\n    };\n    /**\n     * Remove all listeners from DOM nodes\n     */\n    SimpleBarCore.prototype.unMount = function () {\n        this.removeListeners();\n    };\n    /**\n     * Check if mouse is within bounds\n     */\n    SimpleBarCore.prototype.isWithinBounds = function (bbox) {\n        return (this.mouseX >= bbox.left &&\n            this.mouseX <= bbox.left + bbox.width &&\n            this.mouseY >= bbox.top &&\n            this.mouseY <= bbox.top + bbox.height);\n    };\n    /**\n     * Find element children matches query\n     */\n    SimpleBarCore.prototype.findChild = function (el, query) {\n        var matches = el.matches ||\n            el.webkitMatchesSelector ||\n            el.mozMatchesSelector ||\n            el.msMatchesSelector;\n        return Array.prototype.filter.call(el.children, function (child) {\n            return matches.call(child, query);\n        })[0];\n    };\n    SimpleBarCore.rtlHelpers = null;\n    SimpleBarCore.defaultOptions = {\n        forceVisible: false,\n        clickOnTrack: true,\n        scrollbarMinSize: 25,\n        scrollbarMaxSize: 0,\n        ariaLabel: 'scrollable content',\n        tabIndex: 0,\n        classNames: {\n            contentEl: 'simplebar-content',\n            contentWrapper: 'simplebar-content-wrapper',\n            offset: 'simplebar-offset',\n            mask: 'simplebar-mask',\n            wrapper: 'simplebar-wrapper',\n            placeholder: 'simplebar-placeholder',\n            scrollbar: 'simplebar-scrollbar',\n            track: 'simplebar-track',\n            heightAutoObserverWrapperEl: 'simplebar-height-auto-observer-wrapper',\n            heightAutoObserverEl: 'simplebar-height-auto-observer',\n            visible: 'simplebar-visible',\n            horizontal: 'simplebar-horizontal',\n            vertical: 'simplebar-vertical',\n            hover: 'simplebar-hover',\n            dragging: 'simplebar-dragging',\n            scrolling: 'simplebar-scrolling',\n            scrollable: 'simplebar-scrollable',\n            mouseEntered: 'simplebar-mouse-entered'\n        },\n        scrollableNode: null,\n        contentNode: null,\n        autoHide: true\n    };\n    /**\n     * Static functions\n     */\n    SimpleBarCore.getOptions = getOptions;\n    SimpleBarCore.helpers = helpers;\n    return SimpleBarCore;\n}());\n\nexport { SimpleBarCore as default };\n//# sourceMappingURL=index.mjs.map\n","/**\n * simplebar-vue - v2.4.0\n * Vue component for SimpleBar\n * https://grsmto.github.io/simplebar/\n *\n * Made by Piers Olenski\n * Under MIT License\n */\n\nimport SimpleBarCore from 'simplebar-core';\nimport { isVue3, defineComponent, h } from 'vue-demi';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\n\nvar lifecycleEventNames = {\n    beforeUnmount: isVue3 ? 'beforeUnmount' : 'beforeDestroy',\n    unmount: isVue3 ? 'unmount' : 'destroy'\n};\n\nvar _a;\n/**\n * This is not as easy to read than a regular <template> block, but a\n * render function is a necessary \"evil\" to avoid compiler output\n * differences between vue2 and vue3, which would required a\n * different cross-compatible implementation.\n *\n * IMPORTANT NOTES:\n *  - options API is required to keep backwards compatibility to vue<@2.6.\n *    only superior versions get compat with @vue/composition-api plugin.\n *  - String template refs are required for compat @vue<2.7\n *  - If refactoring to composition-api and thus dropping support to vue<@2.6\n *    do note that returning a render function from setup() hook does not\n *    in >=2.6.0 < 2.7.0 because the way @vue/composition-api handles\n *    template refs.\n *    {@link https://github.com/vuejs/composition-api#limitations}\n *\n * ALTERNATIVES:\n *  - https://github.com/vueuse/vue-demi/issues/152\n *  - https://github.com/vueuse/vue-demi/issues/153\n *  - https://github.com/vueuse/vue-demi/issues/154\n *  - {@link https://github.com/cloydlau/json-editor-vue/blob/3a6127d6587ef297f7ab60800cf78a8be5327cb7/src/Component.ts}\n *\n *\n * @todo maybe using jsx in a next version would make this a bit more readable.\n * but we need to ensure it compiles to a cross-compatible render function\n * to avoid going back to the same place where we've been with the <template>\n */\nfunction renderFn(_a) {\n    var _b;\n    var h = _a.h, emit = _a.emit, slots = _a.slots, props = _a.props;\n    var onScroll = function (event) { return emit('scroll', event); };\n    var classNames = __assign(__assign({}, SimpleBarCore.defaultOptions.classNames), props.classNames);\n    return h('div', __assign({ ref: 'element' }, (isVue3\n        ? {\n            'data-simplebar': 'init'\n        }\n        : {\n            attrs: {\n                'data-simplebar': 'init'\n            }\n        })), [\n        h('div', {\n            \"class\": classNames.wrapper\n        }, [\n            h('div', { \"class\": classNames.heightAutoObserverWrapperEl }, [\n                h('div', { \"class\": classNames.heightAutoObserverEl }),\n            ]),\n            h('div', { \"class\": classNames.mask }, [\n                h('div', { \"class\": classNames.offset }, [\n                    h('div', __assign(__assign({}, (isVue3\n                        ? {\n                            onScroll: onScroll,\n                            \"class\": classNames.contentWrapper,\n                            tabIndex: props.tabIndex ||\n                                SimpleBarCore.defaultOptions.tabIndex,\n                            role: 'region',\n                            'aria-label': props.ariaLabel ||\n                                SimpleBarCore.defaultOptions.ariaLabel\n                        }\n                        : {\n                            attrs: {\n                                \"class\": classNames.contentWrapper,\n                                tabIndex: props.tabIndex ||\n                                    SimpleBarCore.defaultOptions.tabIndex,\n                                role: 'region',\n                                'aria-label': props.ariaLabel ||\n                                    SimpleBarCore.defaultOptions.ariaLabel\n                            },\n                            on: { scroll: onScroll }\n                        })), { ref: 'scrollElement' }), [\n                        h('div', { \"class\": classNames.contentEl, ref: 'contentElement' }, (_b = slots[\"default\"]) === null || _b === void 0 ? void 0 : _b.call(slots)),\n                    ]),\n                ]),\n            ]),\n            h('div', { \"class\": classNames.placeholder }),\n        ]),\n        h('div', { \"class\": \"\".concat(classNames.track, \" simplebar-horizontal\") }, [\n            h('div', { \"class\": classNames.scrollbar }),\n        ]),\n        h('div', { \"class\": \"\".concat(classNames.track, \" simplebar-vertical\") }, [\n            h('div', { \"class\": classNames.scrollbar }),\n        ]),\n    ]);\n}\nvar simplebar = defineComponent((_a = {\n        name: 'simplebar-vue',\n        props: {\n            /**\n             * By default SimpleBar automatically hides the scrollbar if the user is not scrolling\n             * (it emulates Mac OSX Lion's scrollbar). You can make the scrollbar always visible\n             * by passing `false`.\n             *\n             * Default value is `true`.\n             *\n             * You can also control the animation via CSS as it's a simple CSS opacity transition.\n             */\n            autoHide: { type: Boolean, \"default\": undefined },\n            /**\n             * It is possible to change the default class names that SimpleBar uses.\n             * To get your own styles to work refer to simplebar.css to get an idea how to setup your css.\n             * - `content` represents the wrapper for the content being scrolled.\n             * - `scrollContent` represents the container containing the elements being scrolled.\n             * - `scrollbar` defines the style of the scrollbar with which the user can interact to scroll the content.\n             * - `track` styles the area surrounding the `scrollbar`.\n             *\n             * ```js\n             * classNames: {\n             *   // defaults\n             *   content: 'simplebar-content',\n             *   scrollContent: 'simplebar-scroll-content',\n             *   scrollbar: 'simplebar-scrollbar',\n             *   track: 'simplebar-track'\n             * }\n             * ```\n             */\n            classNames: Object,\n            /**\n             * Force the track to be visible (same behaviour as `overflow: scroll`).\n             * Can be `boolean | 'x' | 'y'`, defaults to `false`, which behaves like `overflow: auto`.\n             */\n            forceVisible: {\n                type: [Boolean, String],\n                validator: function (v) {\n                    return typeof v === 'boolean' || v === 'x' || v === 'y';\n                },\n                \"default\": undefined\n            },\n            /**\n             * Set custom aria-label attribute for users with screen reader.\n             */\n            ariaLabel: String,\n            /**\n            * Set custom tabIndex attribute.\n            */\n            tabIndex: Number,\n            /**\n             * Activate RTL support by passing `'rtl'`.\n             * You will also need a css rule with `direction: rtl`.\n             */\n            direction: {\n                type: String,\n                validator: function (v) { return v === 'ltr' || v === 'rtl'; }\n            },\n            /**\n             * Define the delay until the scrollbar hides. Has no effect if `autoHide` is `false`.\n             * Default value is `1000`.\n             */\n            timeout: Number,\n            /**\n             * Controls the click on track behaviour.\n             * Default to `true`.\n             */\n            clickOnTrack: { type: Boolean, \"default\": undefined },\n            /**\n             * Controls the min size of the scrollbar in `px`.\n             * Default is `25`.\n             */\n            scrollbarMinSize: Number,\n            /**\n             * Controls the max size of the scrollbar in `px`.\n             * Default is `0` (no max size).\n             */\n            scrollbarMaxSize: Number\n        },\n        // @ts-ignore\n        emits: ['scroll'],\n        /**\n         * @returns {{ SimpleBar?: SimpleBar; scrollElement?: HTMLDivElement; contentElement?: HTMLDivElement }}\n         */\n        data: function () {\n            return {};\n        },\n        mounted: function () {\n            // @ts-ignore (`getOptions` needs to be added to the type definition file)\n            var options = SimpleBarCore.getOptions(this.$refs.element.attributes);\n            for (var _i = 0, _a = Object.entries(this.$props); _i < _a.length; _i++) {\n                var _b = _a[_i], key = _b[0], value = _b[1];\n                if (value != undefined && typeof value !== 'function')\n                    options[key] = value;\n            }\n            // @ts-ignore (unable to type cast `$refs`)\n            this.SimpleBar = new SimpleBarCore(this.$refs.element, options);\n            // @ts-ignore (unable to type cast `$refs`)\n            this.scrollElement = this.$refs.scrollElement;\n            // @ts-ignore (unable to type cast `$refs`)\n            this.contentElement = this.$refs.contentElement;\n        }\n    },\n    _a[lifecycleEventNames.beforeUnmount] = function () {\n        var _a;\n        // unMount is not present in types package https://github.com/Grsmto/simplebar/blob/6125d4ac0897c02a82432441aa3bae5e6c6ccb87/packages/simplebar/src/simplebar.js#L925\n        // @ts-ignore\n        (_a = this.SimpleBar) === null || _a === void 0 ? void 0 : _a.unMount();\n        // @ts-ignore\n        this.SimpleBar = undefined;\n    },\n    _a.methods = {\n        recalculate: function () {\n            var _a;\n            // @ts-ignore\n            (_a = this.SimpleBar) === null || _a === void 0 ? void 0 : _a.recalculate();\n        }\n    },\n    /**\n     * Note that createElement argument is only provided in <=vue@2.7.x,\n     * in other versions it's a context object that we do not use.\n     */\n    _a.render = function (createElement) {\n        var _this = this;\n        return renderFn({\n            h: typeof createElement === 'function' ? createElement : h,\n            // @ts-ignore\n            emit: function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                return _this.$emit.apply(_this, args);\n            },\n            // @ts-ignore\n            slots: isVue3 ? this.$slots : this.$scopedSlots,\n            props: this.$props\n        });\n    },\n    _a));\n\nexport { simplebar as default };\n","<script setup lang=\"ts\">\nimport Simplebar from 'simplebar-vue'\nimport 'simplebar-vue/dist/simplebar.min.css'\n\ndefineOptions({\n  name: 'SimpleScrollbar'\n})\n</script>\n\n<template>\n  <div class=\"h-full flex-1-hidden\">\n    <Simplebar class=\"h-full\">\n      <slot />\n    </Simplebar>\n  </div>\n</template>\n\n<style scoped></style>\n","import { shallowRef, watchEffect, readonly, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, hasInjectionContext, inject, provide, ref, isRef, unref, toValue as toValue$1, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue';\n\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, {\n    ...options,\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  });\n  return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = shallowRef(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = typeof fn === \"function\" ? fn : fn.get;\n  const set = typeof fn === \"function\" ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get(v);\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = /* @__PURE__ */ new Set();\n  const off = (fn) => {\n    fns.delete(fn);\n  };\n  const clear = () => {\n    fns.clear();\n  };\n  const on = (fn) => {\n    fns.add(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (...args) => {\n    return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n  };\n  return {\n    on,\n    off,\n    trigger,\n    clear\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return (...args) => {\n    if (!initialized) {\n      state = scope.run(() => stateFactory(...args));\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst injectLocal = (...args) => {\n  var _a;\n  const key = args[0];\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null && !hasInjectionContext())\n    throw new Error(\"injectLocal must be called in setup\");\n  if (instance && localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n    return localProvidedStateMap.get(instance)[key];\n  return inject(...args);\n};\n\nconst provideLocal = (key, value) => {\n  var _a;\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"provideLocal must be called in setup\");\n  if (!localProvidedStateMap.has(instance))\n    localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n  const localProvidedState = localProvidedStateMap.get(instance);\n  localProvidedState[key] = value;\n  provide(key, value);\n};\n\nfunction createInjectionState(composable, options) {\n  const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n  const defaultValue = options == null ? void 0 : options.defaultValue;\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provideLocal(key, state);\n    return state;\n  };\n  const useInjectedState = () => injectLocal(key, defaultValue);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createRef(value, deep) {\n  if (deep === true) {\n    return ref(value);\n  } else {\n    return shallowRef(value);\n  }\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!scope) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = { ...obj };\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue$1;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(\n    keys.map((key) => {\n      const value = obj[key];\n      return [\n        key,\n        typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n      ];\n    })\n  );\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue$1(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n  var _a, _b;\n  return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  let lastInvoker;\n  const filter = (invoke) => {\n    const duration = toValue$1(ms);\n    const maxDuration = toValue$1(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      lastInvoker = invoke;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(lastInvoker());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(...args) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  let ms;\n  let trailing;\n  let leading;\n  let rejectOnCancel;\n  if (!isRef(args[0]) && typeof args[0] === \"object\")\n    ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n  else\n    [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = toValue$1(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      lastValue = new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, Math.max(0, duration - elapsed));\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n  const {\n    initialState = \"active\"\n  } = options;\n  const isActive = toRef(initialState === \"active\");\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction cacheStringFunction(fn) {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = Number.parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction pxValue(px) {\n  return px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n  return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n    return (!omitUndefined || value !== void 0) && !keys.includes(key);\n  }));\n}\nfunction objectEntries(obj) {\n  return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n  return target || getCurrentInstance();\n}\nfunction toArray(value) {\n  return Array.isArray(value) ? value : [value];\n}\n\nfunction toRef(...args) {\n  if (args.length !== 1)\n    return toRef$1(...args);\n  const r = args[0];\n  return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue$1(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = toValue$1(defaultValue);\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = toValue$1(defaultValue);\n      trigger();\n    }, toValue$1(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(\n    debounceFilter(ms, options),\n    fn\n  );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(\n    throttleFilter(ms, trailing, leading, rejectOnCancel),\n    fn\n  );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(\n    ref,\n    {\n      get,\n      set,\n      untrackedGet,\n      silentSet,\n      peek,\n      lay\n    },\n    { enumerable: true }\n  );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    const [target, key, value] = args;\n    target[key] = value;\n  }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  return watch(\n    source,\n    createFilterWrapper(\n      eventFilter,\n      cb\n    ),\n    watchOptions\n  );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n  const {\n    eventFilter: filter,\n    initialState = \"active\",\n    ...watchOptions\n  } = options;\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n  const stop = watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter\n    }\n  );\n  return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options || {};\n  const watchers = [];\n  const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n  const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchers.push(watchPausable(\n      left,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        right.value = transformLTR(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchers.push(watchPausable(\n      right,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        left.value = transformRTL(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  const stop = () => {\n    watchers.forEach((w) => w.stop());\n  };\n  return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  const targetsArray = toArray(targets);\n  return watch(\n    source,\n    (newValue) => targetsArray.forEach((target) => target.value = newValue),\n    { flush, deep, immediate }\n  );\n}\n\nfunction toRefs(objectRef, options = {}) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        var _a;\n        const replaceRef = (_a = toValue$1(options.replaceRef)) != null ? _a : true;\n        if (replaceRef) {\n          if (Array.isArray(objectRef.value)) {\n            const copy = [...objectRef.value];\n            copy[key] = v;\n            objectRef.value = copy;\n          } else {\n            const newObject = { ...objectRef.value, [key]: v };\n            Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n            objectRef.value = newObject;\n          }\n        } else {\n          objectRef.value[key] = v;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nconst toValue = toValue$1;\nconst resolveUnref = toValue$1;\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeMount(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n  const instance = getLifeCycleTarget();\n  if (instance)\n    onMounted(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        r,\n        (v) => {\n          if (condition(v) !== isNot) {\n            if (stop)\n              stop();\n            else\n              nextTick(() => stop == null ? void 0 : stop());\n            resolve(v);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => stop == null ? void 0 : stop())\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        [r, value],\n        ([v1, v2]) => {\n          if (isNot !== (v1 === v2)) {\n            if (stop)\n              stop();\n            else\n              nextTick(() => stop == null ? void 0 : stop());\n            resolve(v1);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => {\n          stop == null ? void 0 : stop();\n          return toValue$1(r);\n        })\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(toValue$1(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(toValue$1(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n  return value === othVal;\n}\nfunction useArrayDifference(...args) {\n  var _a, _b;\n  const list = args[0];\n  const values = args[1];\n  let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n  const {\n    symmetric = false\n  } = (_b = args[3]) != null ? _b : {};\n  if (typeof compareFn === \"string\") {\n    const key = compareFn;\n    compareFn = (value, othVal) => value[key] === othVal[key];\n  }\n  const diff1 = computed(() => toValue$1(list).filter((x) => toValue$1(values).findIndex((y) => compareFn(x, y)) === -1));\n  if (symmetric) {\n    const diff2 = computed(() => toValue$1(values).filter((x) => toValue$1(list).findIndex((y) => compareFn(x, y)) === -1));\n    return computed(() => symmetric ? [...toValue$1(diff1), ...toValue$1(diff2)] : toValue$1(diff1));\n  } else {\n    return diff1;\n  }\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => toValue$1(list).every((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => toValue$1(list).map((i) => toValue$1(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => toValue$1(\n    toValue$1(list).find((element, index, array) => fn(toValue$1(element), index, array))\n  ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => toValue$1(list).findIndex((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n  let index = arr.length;\n  while (index-- > 0) {\n    if (cb(arr[index], index, arr))\n      return arr[index];\n  }\n  return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n  return computed(() => toValue$1(\n    !Array.prototype.findLast ? findLast(toValue$1(list), (element, index, array) => fn(toValue$1(element), index, array)) : toValue$1(list).findLast((element, index, array) => fn(toValue$1(element), index, array))\n  ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n  return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n  var _a;\n  const list = args[0];\n  const value = args[1];\n  let comparator = args[2];\n  let formIndex = 0;\n  if (isArrayIncludesOptions(comparator)) {\n    formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n    comparator = comparator.comparator;\n  }\n  if (typeof comparator === \"string\") {\n    const key = comparator;\n    comparator = (element, value2) => element[key] === toValue$1(value2);\n  }\n  comparator = comparator != null ? comparator : (element, value2) => element === toValue$1(value2);\n  return computed(() => toValue$1(list).slice(formIndex).some((element, index, array) => comparator(\n    toValue$1(element),\n    toValue$1(value),\n    index,\n    toValue$1(array)\n  )));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => toValue$1(list).map((i) => toValue$1(i)).join(toValue$1(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => toValue$1(list).map((i) => toValue$1(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(toValue$1(sum), toValue$1(value), index);\n  return computed(() => {\n    const resolved = toValue$1(list);\n    return args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue$1(args[0]()) : toValue$1(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => toValue$1(list).some((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction uniq(array) {\n  return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n  return array.reduce((acc, v) => {\n    if (!acc.some((x) => fn(v, x, array)))\n      acc.push(v);\n    return acc;\n  }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n  return computed(() => {\n    const resolvedList = toValue$1(list).map((element) => toValue$1(element));\n    return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n  });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  let _initialValue = unref(initialValue);\n  const count = shallowRef(initialValue);\n  const {\n    max = Number.POSITIVE_INFINITY,\n    min = Number.NEGATIVE_INFINITY\n  } = options;\n  const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n  const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = _initialValue) => {\n    _initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n  const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n  const v = num % 100;\n  return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const stripTimeZone = (dateString) => {\n    var _a2;\n    return (_a2 = dateString.split(\" \")[1]) != null ? _a2 : \"\";\n  };\n  const matches = {\n    Yo: () => formatOrdinal(years),\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    Mo: () => formatOrdinal(month + 1),\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"long\" }),\n    D: () => String(days),\n    Do: () => formatOrdinal(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    Ho: () => formatOrdinal(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    ho: () => formatOrdinal(hours % 12 || 12),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mo: () => formatOrdinal(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    so: () => formatOrdinal(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true),\n    z: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n    zz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n    zzz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n    zzzz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"longOffset\" }))\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n    var _a2, _b;\n    return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n  });\n}\nfunction normalizeDate(date) {\n  if (date === null)\n    return new Date(Number.NaN);\n  if (date === void 0)\n    return /* @__PURE__ */ new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(toValue$1(date)), toValue$1(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = shallowRef(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = toValue$1(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    if (isActive.value)\n      timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || typeof interval === \"function\") {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = shallowRef(0);\n  const update = () => counter.value += 1;\n  const reset = () => {\n    counter.value = 0;\n  };\n  const controls = useIntervalFn(\n    callback ? () => {\n      update();\n      callback(counter.value);\n    } : update,\n    interval,\n    { immediate }\n  );\n  if (exposeControls) {\n    return {\n      counter,\n      reset,\n      ...controls\n    };\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = shallowRef((_a = options.initialValue) != null ? _a : null);\n  watch(\n    source,\n    () => ms.value = timestamp(),\n    options\n  );\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  const isPending = shallowRef(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    if (immediateCallback)\n      cb();\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, toValue$1(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(\n    callback != null ? callback : noop,\n    interval,\n    options\n  );\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return {\n      ready,\n      ...controls\n    };\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = toValue$1(value);\n    if (typeof method === \"function\")\n      resolved = method(resolved);\n    else if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && Number.isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${toValue$1(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = shallowRef(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = toValue$1(truthyValue);\n      _value.value = _value.value === truthy ? toValue$1(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue$1(source)];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = Array.from({ length: oldList.length });\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n  const {\n    count,\n    ...watchOptions\n  } = options;\n  const current = shallowRef(0);\n  const stop = watchWithFilter(\n    source,\n    (...args) => {\n      current.value += 1;\n      if (current.value >= toValue$1(count))\n        nextTick(() => stop());\n      cb(...args);\n    },\n    watchOptions\n  );\n  return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n  const {\n    debounce = 0,\n    maxWait = void 0,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: debounceFilter(debounce, { maxWait })\n    }\n  );\n}\n\nfunction watchDeep(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      deep: true\n    }\n  );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  const filteredCb = createFilterWrapper(\n    eventFilter,\n    cb\n  );\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = shallowRef(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(\n      source,\n      (...args) => {\n        if (!ignore.value)\n          filteredCb(...args);\n      },\n      watchOptions\n    );\n  } else {\n    const disposables = [];\n    const ignoreCounter = shallowRef(0);\n    const syncCounter = shallowRef(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(\n      watch(\n        source,\n        () => {\n          syncCounter.value++;\n        },\n        { ...watchOptions, flush: \"sync\" }\n      )\n    );\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(\n      watch(\n        source,\n        (...args) => {\n          const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n          ignoreCounter.value = 0;\n          syncCounter.value = 0;\n          if (ignore)\n            return;\n          filteredCb(...args);\n        },\n        watchOptions\n      )\n    );\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      immediate: true\n    }\n  );\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n  return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n  const {\n    throttle = 0,\n    trailing = true,\n    leading = true,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: throttleFilter(throttle, trailing, leading)\n    }\n  );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return {\n    ...res,\n    trigger\n  };\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => toValue$1(item));\n  return toValue$1(sources);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  const stop = watch(\n    source,\n    (v, ov, onInvalidate) => {\n      if (v) {\n        if (options == null ? void 0 : options.once)\n          nextTick(() => stop());\n        cb(v, ov, onInvalidate);\n      }\n    },\n    {\n      ...options,\n      once: false\n    }\n  );\n  return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, camelize, isClient, toArray, watchImmediate, isObject, tryOnScopeDispose, isIOS, notNullish, tryOnMounted, objectOmit, promiseTimeout, until, injectLocal, provideLocal, pxValue, increaseWithUnit, objectEntries, createRef, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, useIntervalFn, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, bypassFilter, createFilterWrapper, toRefs, watchOnce, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, tryOnUnmounted, clamp, syncRef, objectPick, watchWithFilter, identity, isDef, whenever, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, shallowRef, ref, watchEffect, computed, inject, defineComponent, h, TransitionGroup, shallowReactive, Fragment, toValue, unref, getCurrentInstance, onMounted, watch, customRef, onUpdated, readonly, reactive, hasInjectionContext, toRaw, nextTick, markRaw, getCurrentScope, isReadonly, onBeforeUpdate } from 'vue';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n  let options;\n  if (isRef(optionsOrRef)) {\n    options = {\n      evaluating: optionsOrRef\n    };\n  } else {\n    options = optionsOrRef || {};\n  }\n  const {\n    lazy = false,\n    evaluating = void 0,\n    shallow = true,\n    onError = noop\n  } = options;\n  const started = shallowRef(!lazy);\n  const current = shallow ? shallowRef(initialState) : ref(initialState);\n  let counter = 0;\n  watchEffect(async (onInvalidate) => {\n    if (!started.value)\n      return;\n    counter++;\n    const counterAtBeginning = counter;\n    let hasFinished = false;\n    if (evaluating) {\n      Promise.resolve().then(() => {\n        evaluating.value = true;\n      });\n    }\n    try {\n      const result = await evaluationCallback((cancelCallback) => {\n        onInvalidate(() => {\n          if (evaluating)\n            evaluating.value = false;\n          if (!hasFinished)\n            cancelCallback();\n        });\n      });\n      if (counterAtBeginning === counter)\n        current.value = result;\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (evaluating && counterAtBeginning === counter)\n        evaluating.value = false;\n      hasFinished = true;\n    }\n  });\n  if (lazy) {\n    return computed(() => {\n      started.value = true;\n      return current.value;\n    });\n  } else {\n    return current;\n  }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n  let source = inject(key);\n  if (defaultSource)\n    source = inject(key, defaultSource);\n  if (treatDefaultAsFactory)\n    source = inject(key, defaultSource, treatDefaultAsFactory);\n  if (typeof options === \"function\") {\n    return computed((ctx) => options(source, ctx));\n  } else {\n    return computed({\n      get: (ctx) => options.get(source, ctx),\n      set: options.set\n    });\n  }\n}\n\nfunction createReusableTemplate(options = {}) {\n  const {\n    inheritAttrs = true\n  } = options;\n  const render = shallowRef();\n  const define = /*@__PURE__*/ defineComponent({\n    setup(_, { slots }) {\n      return () => {\n        render.value = slots.default;\n      };\n    }\n  });\n  const reuse = /*@__PURE__*/ defineComponent({\n    inheritAttrs,\n    props: options.props,\n    setup(props, { attrs, slots }) {\n      return () => {\n        var _a;\n        if (!render.value && process.env.NODE_ENV !== \"production\")\n          throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n        const vnode = (_a = render.value) == null ? void 0 : _a.call(render, {\n          ...options.props == null ? keysToCamelKebabCase(attrs) : props,\n          $slots: slots\n        });\n        return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n      };\n    }\n  });\n  return makeDestructurable(\n    { define, reuse },\n    [define, reuse]\n  );\n}\nfunction keysToCamelKebabCase(obj) {\n  const newObj = {};\n  for (const key in obj)\n    newObj[camelize(key)] = obj[key];\n  return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n  let index = 0;\n  const instances = ref([]);\n  function create(...args) {\n    const props = shallowReactive({\n      key: index++,\n      args,\n      promise: void 0,\n      resolve: () => {\n      },\n      reject: () => {\n      },\n      isResolving: false,\n      options\n    });\n    instances.value.push(props);\n    props.promise = new Promise((_resolve, _reject) => {\n      props.resolve = (v) => {\n        props.isResolving = true;\n        return _resolve(v);\n      };\n      props.reject = _reject;\n    }).finally(() => {\n      props.promise = void 0;\n      const index2 = instances.value.indexOf(props);\n      if (index2 !== -1)\n        instances.value.splice(index2, 1);\n    });\n    return props.promise;\n  }\n  function start(...args) {\n    if (options.singleton && instances.value.length > 0)\n      return instances.value[0].promise;\n    return create(...args);\n  }\n  const component = /*@__PURE__*/ defineComponent((_, { slots }) => {\n    const renderList = () => instances.value.map((props) => {\n      var _a;\n      return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n    });\n    if (options.transition)\n      return () => h(TransitionGroup, options.transition, renderList);\n    return renderList;\n  });\n  component.start = start;\n  return component;\n}\n\nfunction createUnrefFn(fn) {\n  return function(...args) {\n    return fn.apply(this, args.map((i) => toValue(i)));\n  };\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = toValue(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener, options) => {\n    el.addEventListener(event, listener, options);\n    return () => el.removeEventListener(event, listener, options);\n  };\n  const firstParamTargets = computed(() => {\n    const test = toArray(toValue(args[0])).filter((e) => e != null);\n    return test.every((e) => typeof e !== \"string\") ? test : void 0;\n  });\n  const stopWatch = watchImmediate(\n    () => {\n      var _a, _b;\n      return [\n        (_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null),\n        toArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n        toArray(unref(firstParamTargets.value ? args[2] : args[1])),\n        // @ts-expect-error - TypeScript gets the correct types, but somehow still complains\n        toValue(firstParamTargets.value ? args[3] : args[2])\n      ];\n    },\n    ([raw_targets, raw_events, raw_listeners, raw_options]) => {\n      cleanup();\n      if (!(raw_targets == null ? void 0 : raw_targets.length) || !(raw_events == null ? void 0 : raw_events.length) || !(raw_listeners == null ? void 0 : raw_listeners.length))\n        return;\n      const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n      cleanups.push(\n        ...raw_targets.flatMap(\n          (el) => raw_events.flatMap(\n            (event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))\n          )\n        )\n      );\n    },\n    { flush: \"post\" }\n  );\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(cleanup);\n  return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n  if (!window) {\n    return controls ? { stop: noop, cancel: noop, trigger: noop } : noop;\n  }\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    const listenerOptions = { passive: true };\n    Array.from(window.document.body.children).forEach((el) => useEventListener(el, \"click\", noop, listenerOptions));\n    useEventListener(window.document.documentElement, \"click\", noop, listenerOptions);\n  }\n  let shouldListen = true;\n  const shouldIgnore = (event) => {\n    return toValue(ignore).some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  function hasMultipleRoots(target2) {\n    const vm = toValue(target2);\n    return vm && vm.$.subTree.shapeFlag === 16;\n  }\n  function checkMultipleRoots(target2, event) {\n    const vm = toValue(target2);\n    const children = vm.$.subTree && vm.$.subTree.children;\n    if (children == null || !Array.isArray(children))\n      return false;\n    return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n  }\n  const listener = (event) => {\n    const el = unrefElement(target);\n    if (event.target == null)\n      return;\n    if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n      return;\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (\"detail\" in event && event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  let isProcessingClick = false;\n  const cleanup = [\n    useEventListener(window, \"click\", (event) => {\n      if (!isProcessingClick) {\n        isProcessingClick = true;\n        setTimeout(() => {\n          isProcessingClick = false;\n        }, 0);\n        listener(event);\n      }\n    }, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      setTimeout(() => {\n        var _a;\n        const el = unrefElement(target);\n        if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n          handler(event);\n        }\n      }, 0);\n    }, { passive: true })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  if (controls) {\n    return {\n      stop,\n      cancel: () => {\n        shouldListen = false;\n      },\n      trigger: (event) => {\n        shouldListen = true;\n        listener(event);\n        shouldListen = false;\n      }\n    };\n  }\n  return stop;\n}\n\nfunction useMounted() {\n  const isMounted = shallowRef(false);\n  const instance = getCurrentInstance();\n  if (instance) {\n    onMounted(() => {\n      isMounted.value = true;\n    }, instance);\n  }\n  return isMounted;\n}\n\nfunction useSupported(callback) {\n  const isMounted = useMounted();\n  return computed(() => {\n    isMounted.value;\n    return Boolean(callback());\n  });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...mutationOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => {\n    const value = toValue(target);\n    const items = toArray(value).map(unrefElement).filter(notNullish);\n    return new Set(items);\n  });\n  const stopWatch = watch(\n    () => targets.value,\n    (targets2) => {\n      cleanup();\n      if (isSupported.value && targets2.size) {\n        observer = new MutationObserver(callback);\n        targets2.forEach((el) => observer.observe(el, mutationOptions));\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const takeRecords = () => {\n    return observer == null ? void 0 : observer.takeRecords();\n  };\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop,\n    takeRecords\n  };\n}\n\nfunction onElementRemoval(target, callback, options = {}) {\n  const {\n    window = defaultWindow,\n    document = window == null ? void 0 : window.document,\n    flush = \"sync\"\n  } = options;\n  if (!window || !document)\n    return noop;\n  let stopFn;\n  const cleanupAndUpdate = (fn) => {\n    stopFn == null ? void 0 : stopFn();\n    stopFn = fn;\n  };\n  const stopWatch = watchEffect(() => {\n    const el = unrefElement(target);\n    if (el) {\n      const { stop } = useMutationObserver(\n        document,\n        (mutationsList) => {\n          const targetRemoved = mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el));\n          if (targetRemoved) {\n            callback(mutationsList);\n          }\n        },\n        {\n          window,\n          childList: true,\n          subtree: true\n        }\n      );\n      cleanupAndUpdate(stop);\n    }\n  }, { flush });\n  const stopHandle = () => {\n    stopWatch();\n    cleanupAndUpdate();\n  };\n  tryOnScopeDispose(stopHandle);\n  return stopHandle;\n}\n\nfunction createKeyPredicate(keyFilter) {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n}\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const {\n    target = defaultWindow,\n    eventName = \"keydown\",\n    passive = false,\n    dedupe = false\n  } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (e.repeat && toValue(dedupe))\n      return;\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  let posStart;\n  let startTimestamp;\n  let hasLongPressed = false;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n    posStart = void 0;\n    startTimestamp = void 0;\n    hasLongPressed = false;\n  }\n  function onRelease(ev) {\n    var _a2, _b2, _c;\n    const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n    clear();\n    if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n      return;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    const dx = ev.x - _posStart.x;\n    const dy = ev.y - _posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    posStart = {\n      x: ev.x,\n      y: ev.y\n    };\n    startTimestamp = ev.timeStamp;\n    timeout = setTimeout(\n      () => {\n        hasLongPressed = true;\n        handler(ev);\n      },\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  function onMove(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n      return;\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    const dx = ev.x - posStart.x;\n    const dy = ev.y - posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n      clear();\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  const cleanup = [\n    useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n    useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n    useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n  ];\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nfunction isFocusedElementEditable() {\n  const { activeElement, body } = document;\n  if (!activeElement)\n    return false;\n  if (activeElement === body)\n    return false;\n  switch (activeElement.tagName) {\n    case \"INPUT\":\n    case \"TEXTAREA\":\n      return true;\n  }\n  return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n  keyCode,\n  metaKey,\n  ctrlKey,\n  altKey\n}) {\n  if (metaKey || ctrlKey || altKey)\n    return false;\n  if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)\n    return true;\n  if (keyCode >= 65 && keyCode <= 90)\n    return true;\n  return false;\n}\nfunction onStartTyping(callback, options = {}) {\n  const { document: document2 = defaultDocument } = options;\n  const keydown = (event) => {\n    if (!isFocusedElementEditable() && isTypedCharValid(event)) {\n      callback(event);\n    }\n  };\n  if (document2)\n    useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n  const instance = getCurrentInstance();\n  let _trigger = () => {\n  };\n  const element = customRef((track, trigger) => {\n    _trigger = trigger;\n    return {\n      get() {\n        var _a, _b;\n        track();\n        return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n      },\n      set() {\n      }\n    };\n  });\n  tryOnMounted(_trigger);\n  onUpdated(_trigger);\n  return element;\n}\n\nfunction useActiveElement(options = {}) {\n  var _a;\n  const {\n    window = defaultWindow,\n    deep = true,\n    triggerOnRemoval = false\n  } = options;\n  const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n  const getDeepActiveElement = () => {\n    var _a2;\n    let element = document == null ? void 0 : document.activeElement;\n    if (deep) {\n      while (element == null ? void 0 : element.shadowRoot)\n        element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n    }\n    return element;\n  };\n  const activeElement = shallowRef();\n  const trigger = () => {\n    activeElement.value = getDeepActiveElement();\n  };\n  if (window) {\n    const listenerOptions = {\n      capture: true,\n      passive: true\n    };\n    useEventListener(\n      window,\n      \"blur\",\n      (event) => {\n        if (event.relatedTarget !== null)\n          return;\n        trigger();\n      },\n      listenerOptions\n    );\n    useEventListener(\n      window,\n      \"focus\",\n      trigger,\n      listenerOptions\n    );\n  }\n  if (triggerOnRemoval) {\n    onElementRemoval(activeElement, trigger, { document });\n  }\n  trigger();\n  return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n  const {\n    immediate = true,\n    fpsLimit = void 0,\n    window = defaultWindow,\n    once = false\n  } = options;\n  const isActive = shallowRef(false);\n  const intervalLimit = computed(() => {\n    return fpsLimit ? 1e3 / toValue(fpsLimit) : null;\n  });\n  let previousFrameTimestamp = 0;\n  let rafId = null;\n  function loop(timestamp) {\n    if (!isActive.value || !window)\n      return;\n    if (!previousFrameTimestamp)\n      previousFrameTimestamp = timestamp;\n    const delta = timestamp - previousFrameTimestamp;\n    if (intervalLimit.value && delta < intervalLimit.value) {\n      rafId = window.requestAnimationFrame(loop);\n      return;\n    }\n    previousFrameTimestamp = timestamp;\n    fn({ delta, timestamp });\n    if (once) {\n      isActive.value = false;\n      rafId = null;\n      return;\n    }\n    rafId = window.requestAnimationFrame(loop);\n  }\n  function resume() {\n    if (!isActive.value && window) {\n      isActive.value = true;\n      previousFrameTimestamp = 0;\n      rafId = window.requestAnimationFrame(loop);\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    if (rafId != null && window) {\n      window.cancelAnimationFrame(rafId);\n      rafId = null;\n    }\n  }\n  if (immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive: readonly(isActive),\n    pause,\n    resume\n  };\n}\n\nfunction useAnimate(target, keyframes, options) {\n  let config;\n  let animateOptions;\n  if (isObject(options)) {\n    config = options;\n    animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n  } else {\n    config = { duration: options };\n    animateOptions = options;\n  }\n  const {\n    window = defaultWindow,\n    immediate = true,\n    commitStyles,\n    persist,\n    playbackRate: _playbackRate = 1,\n    onReady,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = config;\n  const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n  const animate = shallowRef(void 0);\n  const store = shallowReactive({\n    startTime: null,\n    currentTime: null,\n    timeline: null,\n    playbackRate: _playbackRate,\n    pending: false,\n    playState: immediate ? \"idle\" : \"paused\",\n    replaceState: \"active\"\n  });\n  const pending = computed(() => store.pending);\n  const playState = computed(() => store.playState);\n  const replaceState = computed(() => store.replaceState);\n  const startTime = computed({\n    get() {\n      return store.startTime;\n    },\n    set(value) {\n      store.startTime = value;\n      if (animate.value)\n        animate.value.startTime = value;\n    }\n  });\n  const currentTime = computed({\n    get() {\n      return store.currentTime;\n    },\n    set(value) {\n      store.currentTime = value;\n      if (animate.value) {\n        animate.value.currentTime = value;\n        syncResume();\n      }\n    }\n  });\n  const timeline = computed({\n    get() {\n      return store.timeline;\n    },\n    set(value) {\n      store.timeline = value;\n      if (animate.value)\n        animate.value.timeline = value;\n    }\n  });\n  const playbackRate = computed({\n    get() {\n      return store.playbackRate;\n    },\n    set(value) {\n      store.playbackRate = value;\n      if (animate.value)\n        animate.value.playbackRate = value;\n    }\n  });\n  const play = () => {\n    if (animate.value) {\n      try {\n        animate.value.play();\n        syncResume();\n      } catch (e) {\n        syncPause();\n        onError(e);\n      }\n    } else {\n      update();\n    }\n  };\n  const pause = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.pause();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const reverse = () => {\n    var _a;\n    if (!animate.value)\n      update();\n    try {\n      (_a = animate.value) == null ? void 0 : _a.reverse();\n      syncResume();\n    } catch (e) {\n      syncPause();\n      onError(e);\n    }\n  };\n  const finish = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.finish();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const cancel = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.cancel();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  watch(() => unrefElement(target), (el) => {\n    if (el) {\n      update();\n    } else {\n      animate.value = void 0;\n    }\n  });\n  watch(() => keyframes, (value) => {\n    if (animate.value) {\n      update();\n      const targetEl = unrefElement(target);\n      if (targetEl) {\n        animate.value.effect = new KeyframeEffect(\n          targetEl,\n          toValue(value),\n          animateOptions\n        );\n      }\n    }\n  }, { deep: true });\n  tryOnMounted(() => update(true), false);\n  tryOnScopeDispose(cancel);\n  function update(init) {\n    const el = unrefElement(target);\n    if (!isSupported.value || !el)\n      return;\n    if (!animate.value)\n      animate.value = el.animate(toValue(keyframes), animateOptions);\n    if (persist)\n      animate.value.persist();\n    if (_playbackRate !== 1)\n      animate.value.playbackRate = _playbackRate;\n    if (init && !immediate)\n      animate.value.pause();\n    else\n      syncResume();\n    onReady == null ? void 0 : onReady(animate.value);\n  }\n  const listenerOptions = { passive: true };\n  useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause, listenerOptions);\n  useEventListener(animate, \"finish\", () => {\n    var _a;\n    if (commitStyles)\n      (_a = animate.value) == null ? void 0 : _a.commitStyles();\n  }, listenerOptions);\n  const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n    if (!animate.value)\n      return;\n    store.pending = animate.value.pending;\n    store.playState = animate.value.playState;\n    store.replaceState = animate.value.replaceState;\n    store.startTime = animate.value.startTime;\n    store.currentTime = animate.value.currentTime;\n    store.timeline = animate.value.timeline;\n    store.playbackRate = animate.value.playbackRate;\n  }, { immediate: false });\n  function syncResume() {\n    if (isSupported.value)\n      resumeRef();\n  }\n  function syncPause() {\n    if (isSupported.value && window)\n      window.requestAnimationFrame(pauseRef);\n  }\n  return {\n    isSupported,\n    animate,\n    // actions\n    play,\n    pause,\n    reverse,\n    finish,\n    cancel,\n    // state\n    pending,\n    playState,\n    replaceState,\n    startTime,\n    currentTime,\n    timeline,\n    playbackRate\n  };\n}\n\nfunction useAsyncQueue(tasks, options) {\n  const {\n    interrupt = true,\n    onError = noop,\n    onFinished = noop,\n    signal\n  } = options || {};\n  const promiseState = {\n    aborted: \"aborted\",\n    fulfilled: \"fulfilled\",\n    pending: \"pending\",\n    rejected: \"rejected\"\n  };\n  const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n  const result = reactive(initialResult);\n  const activeIndex = shallowRef(-1);\n  if (!tasks || tasks.length === 0) {\n    onFinished();\n    return {\n      activeIndex,\n      result\n    };\n  }\n  function updateResult(state, res) {\n    activeIndex.value++;\n    result[activeIndex.value].data = res;\n    result[activeIndex.value].state = state;\n  }\n  tasks.reduce((prev, curr) => {\n    return prev.then((prevRes) => {\n      var _a;\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, new Error(\"aborted\"));\n        return;\n      }\n      if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n        onFinished();\n        return;\n      }\n      const done = curr(prevRes).then((currentRes) => {\n        updateResult(promiseState.fulfilled, currentRes);\n        if (activeIndex.value === tasks.length - 1)\n          onFinished();\n        return currentRes;\n      });\n      if (!signal)\n        return done;\n      return Promise.race([done, whenAborted(signal)]);\n    }).catch((e) => {\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, e);\n        return e;\n      }\n      updateResult(promiseState.rejected, e);\n      onError();\n      return e;\n    });\n  }, Promise.resolve());\n  return {\n    activeIndex,\n    result\n  };\n}\nfunction whenAborted(signal) {\n  return new Promise((resolve, reject) => {\n    const error = new Error(\"aborted\");\n    if (signal.aborted)\n      reject(error);\n    else\n      signal.addEventListener(\"abort\", () => reject(error), { once: true });\n  });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = shallowRef(false);\n  const isLoading = shallowRef(false);\n  const error = shallowRef(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw e;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate) {\n    execute(delay);\n  }\n  const shell = {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n  function waitUntilIsLoaded() {\n    return new Promise((resolve, reject) => {\n      until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n    });\n  }\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilIsLoaded().then(onFulfilled, onRejected);\n    }\n  };\n}\n\nconst defaults = {\n  array: (v) => JSON.stringify(v),\n  object: (v) => JSON.stringify(v),\n  set: (v) => JSON.stringify(Array.from(v)),\n  map: (v) => JSON.stringify(Object.fromEntries(v)),\n  null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n  if (!target)\n    return defaults.null;\n  if (target instanceof Map)\n    return defaults.map;\n  else if (target instanceof Set)\n    return defaults.set;\n  else if (Array.isArray(target))\n    return defaults.array;\n  else\n    return defaults.object;\n}\n\nfunction useBase64(target, options) {\n  const base64 = shallowRef(\"\");\n  const promise = shallowRef();\n  function execute() {\n    if (!isClient)\n      return;\n    promise.value = new Promise((resolve, reject) => {\n      try {\n        const _target = toValue(target);\n        if (_target == null) {\n          resolve(\"\");\n        } else if (typeof _target === \"string\") {\n          resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n        } else if (_target instanceof Blob) {\n          resolve(blobToBase64(_target));\n        } else if (_target instanceof ArrayBuffer) {\n          resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n        } else if (_target instanceof HTMLCanvasElement) {\n          resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n        } else if (_target instanceof HTMLImageElement) {\n          const img = _target.cloneNode(false);\n          img.crossOrigin = \"Anonymous\";\n          imgLoaded(img).then(() => {\n            const canvas = document.createElement(\"canvas\");\n            const ctx = canvas.getContext(\"2d\");\n            canvas.width = img.width;\n            canvas.height = img.height;\n            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n            resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n          }).catch(reject);\n        } else if (typeof _target === \"object\") {\n          const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n          const serialized = _serializeFn(_target);\n          return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n        } else {\n          reject(new Error(\"target is unsupported types\"));\n        }\n      } catch (error) {\n        reject(error);\n      }\n    });\n    promise.value.then((res) => {\n      base64.value = (options == null ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n    });\n    return promise.value;\n  }\n  if (isRef(target) || typeof target === \"function\")\n    watch(target, execute, { immediate: true });\n  else\n    execute();\n  return {\n    base64,\n    promise,\n    execute\n  };\n}\nfunction imgLoaded(img) {\n  return new Promise((resolve, reject) => {\n    if (!img.complete) {\n      img.onload = () => {\n        resolve();\n      };\n      img.onerror = reject;\n    } else {\n      resolve();\n    }\n  });\n}\nfunction blobToBase64(blob) {\n  return new Promise((resolve, reject) => {\n    const fr = new FileReader();\n    fr.onload = (e) => {\n      resolve(e.target.result);\n    };\n    fr.onerror = reject;\n    fr.readAsDataURL(blob);\n  });\n}\n\nfunction useBattery(options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n  const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n  const charging = shallowRef(false);\n  const chargingTime = shallowRef(0);\n  const dischargingTime = shallowRef(0);\n  const level = shallowRef(1);\n  let battery;\n  function updateBatteryInfo() {\n    charging.value = this.charging;\n    chargingTime.value = this.chargingTime || 0;\n    dischargingTime.value = this.dischargingTime || 0;\n    level.value = this.level;\n  }\n  if (isSupported.value) {\n    navigator.getBattery().then((_battery) => {\n      battery = _battery;\n      updateBatteryInfo.call(battery);\n      useEventListener(battery, events, updateBatteryInfo, { passive: true });\n    });\n  }\n  return {\n    isSupported,\n    charging,\n    chargingTime,\n    dischargingTime,\n    level\n  };\n}\n\nfunction useBluetooth(options) {\n  let {\n    acceptAllDevices = false\n  } = options || {};\n  const {\n    filters = void 0,\n    optionalServices = void 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n  const device = shallowRef();\n  const error = shallowRef(null);\n  watch(device, () => {\n    connectToBluetoothGATTServer();\n  });\n  async function requestDevice() {\n    if (!isSupported.value)\n      return;\n    error.value = null;\n    if (filters && filters.length > 0)\n      acceptAllDevices = false;\n    try {\n      device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n        acceptAllDevices,\n        filters,\n        optionalServices\n      }));\n    } catch (err) {\n      error.value = err;\n    }\n  }\n  const server = shallowRef();\n  const isConnected = shallowRef(false);\n  function reset() {\n    isConnected.value = false;\n    device.value = void 0;\n    server.value = void 0;\n  }\n  async function connectToBluetoothGATTServer() {\n    error.value = null;\n    if (device.value && device.value.gatt) {\n      useEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n      try {\n        server.value = await device.value.gatt.connect();\n        isConnected.value = server.value.connected;\n      } catch (err) {\n        error.value = err;\n      }\n    }\n  }\n  tryOnMounted(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.connect();\n  });\n  tryOnScopeDispose(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n  });\n  return {\n    isSupported,\n    isConnected: readonly(isConnected),\n    // Device:\n    device,\n    requestDevice,\n    // Server:\n    server,\n    // Errors:\n    error\n  };\n}\n\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\nfunction useSSRWidth() {\n  const ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n  return typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n  if (app !== void 0) {\n    app.provide(ssrWidthSymbol, width);\n  } else {\n    provideLocal(ssrWidthSymbol, width);\n  }\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow, ssrWidth = useSSRWidth() } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  const ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n  const mediaQuery = shallowRef();\n  const matches = shallowRef(false);\n  const handler = (event) => {\n    matches.value = event.matches;\n  };\n  watchEffect(() => {\n    if (ssrSupport.value) {\n      ssrSupport.value = !isSupported.value;\n      const queryStrings = toValue(query).split(\",\");\n      matches.value = queryStrings.some((queryString) => {\n        const not = queryString.includes(\"not all\");\n        const minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n        const maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n        let res = Boolean(minWidth || maxWidth);\n        if (minWidth && res) {\n          res = ssrWidth >= pxValue(minWidth[1]);\n        }\n        if (maxWidth && res) {\n          res = ssrWidth <= pxValue(maxWidth[1]);\n        }\n        return not ? !res : res;\n      });\n      return;\n    }\n    if (!isSupported.value)\n      return;\n    mediaQuery.value = window.matchMedia(toValue(query));\n    matches.value = mediaQuery.value.matches;\n  });\n  useEventListener(mediaQuery, \"change\", handler, { passive: true });\n  return computed(() => matches.value);\n}\n\nconst breakpointsTailwind = {\n  \"sm\": 640,\n  \"md\": 768,\n  \"lg\": 1024,\n  \"xl\": 1280,\n  \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n  xs: 0,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1264,\n  xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1280,\n  xl: 1920,\n  xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n  xs: 480,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1600\n};\nconst breakpointsQuasar = {\n  xs: 0,\n  sm: 600,\n  md: 1024,\n  lg: 1440,\n  xl: 1920\n};\nconst breakpointsSematic = {\n  mobileS: 320,\n  mobileM: 375,\n  mobileL: 425,\n  tablet: 768,\n  laptop: 1024,\n  laptopL: 1440,\n  desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n  \"3xs\": 360,\n  \"2xs\": 480,\n  \"xs\": 600,\n  \"sm\": 768,\n  \"md\": 1024,\n  \"lg\": 1280,\n  \"xl\": 1440,\n  \"2xl\": 1600,\n  \"3xl\": 1920,\n  \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200\n};\nconst breakpointsElement = {\n  xs: 0,\n  sm: 768,\n  md: 992,\n  lg: 1200,\n  xl: 1920\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n  function getValue(k, delta) {\n    let v = toValue(breakpoints[toValue(k)]);\n    if (delta != null)\n      v = increaseWithUnit(v, delta);\n    if (typeof v === \"number\")\n      v = `${v}px`;\n    return v;\n  }\n  const { window = defaultWindow, strategy = \"min-width\", ssrWidth = useSSRWidth() } = options;\n  const ssrSupport = typeof ssrWidth === \"number\";\n  const mounted = ssrSupport ? shallowRef(false) : { value: true };\n  if (ssrSupport) {\n    tryOnMounted(() => mounted.value = !!window);\n  }\n  function match(query, size) {\n    if (!mounted.value && ssrSupport) {\n      return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n    }\n    if (!window)\n      return false;\n    return window.matchMedia(`(${query}-width: ${size})`).matches;\n  }\n  const greaterOrEqual = (k) => {\n    return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n  };\n  const smallerOrEqual = (k) => {\n    return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n  };\n  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n    Object.defineProperty(shortcuts, k, {\n      get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n      enumerable: true,\n      configurable: true\n    });\n    return shortcuts;\n  }, {});\n  function current() {\n    const points = Object.keys(breakpoints).map((k) => [k, shortcutMethods[k], pxValue(getValue(k))]).sort((a, b) => a[2] - b[2]);\n    return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n  }\n  return Object.assign(shortcutMethods, {\n    greaterOrEqual,\n    smallerOrEqual,\n    greater(k) {\n      return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n    },\n    smaller(k) {\n      return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n    },\n    between(a, b) {\n      return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n    },\n    isGreater(k) {\n      return match(\"min\", getValue(k, 0.1));\n    },\n    isGreaterOrEqual(k) {\n      return match(\"min\", getValue(k));\n    },\n    isSmaller(k) {\n      return match(\"max\", getValue(k, -0.1));\n    },\n    isSmallerOrEqual(k) {\n      return match(\"max\", getValue(k));\n    },\n    isInBetween(a, b) {\n      return match(\"min\", getValue(a)) && match(\"max\", getValue(b, -0.1));\n    },\n    current,\n    active() {\n      const bps = current();\n      return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n    }\n  });\n}\n\nfunction useBroadcastChannel(options) {\n  const {\n    name,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n  const isClosed = shallowRef(false);\n  const channel = ref();\n  const data = ref();\n  const error = shallowRef(null);\n  const post = (data2) => {\n    if (channel.value)\n      channel.value.postMessage(data2);\n  };\n  const close = () => {\n    if (channel.value)\n      channel.value.close();\n    isClosed.value = true;\n  };\n  if (isSupported.value) {\n    tryOnMounted(() => {\n      error.value = null;\n      channel.value = new BroadcastChannel(name);\n      const listenerOptions = {\n        passive: true\n      };\n      useEventListener(channel, \"message\", (e) => {\n        data.value = e.data;\n      }, listenerOptions);\n      useEventListener(channel, \"messageerror\", (e) => {\n        error.value = e;\n      }, listenerOptions);\n      useEventListener(channel, \"close\", () => {\n        isClosed.value = true;\n      }, listenerOptions);\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    isSupported,\n    channel,\n    data,\n    post,\n    close,\n    error,\n    isClosed\n  };\n}\n\nconst WRITABLE_PROPERTIES = [\n  \"hash\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n  const { window = defaultWindow } = options;\n  const refs = Object.fromEntries(\n    WRITABLE_PROPERTIES.map((key) => [key, ref()])\n  );\n  for (const [key, ref] of objectEntries(refs)) {\n    watch(ref, (value) => {\n      if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n        return;\n      window.location[key] = value;\n    });\n  }\n  const buildState = (trigger) => {\n    var _a;\n    const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n    const { origin } = (window == null ? void 0 : window.location) || {};\n    for (const key of WRITABLE_PROPERTIES)\n      refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n    return reactive({\n      trigger,\n      state: state2,\n      length,\n      origin,\n      ...refs\n    });\n  };\n  const state = ref(buildState(\"load\"));\n  if (window) {\n    const listenerOptions = { passive: true };\n    useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n    useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n  }\n  return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, options) {\n  const { deepRefs = true, ...watchOptions } = options || {};\n  const cachedValue = createRef(refValue.value, deepRefs);\n  watch(() => refValue.value, (value) => {\n    if (!comparator(value, cachedValue.value))\n      cachedValue.value = value;\n  }, watchOptions);\n  return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n  const {\n    controls = false,\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n  const permissionStatus = shallowRef();\n  const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n  const state = shallowRef();\n  const update = () => {\n    var _a, _b;\n    state.value = (_b = (_a = permissionStatus.value) == null ? void 0 : _a.state) != null ? _b : \"prompt\";\n  };\n  useEventListener(permissionStatus, \"change\", update, { passive: true });\n  const query = createSingletonPromise(async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionStatus.value) {\n      try {\n        permissionStatus.value = await navigator.permissions.query(desc);\n      } catch (e) {\n        permissionStatus.value = void 0;\n      } finally {\n        update();\n      }\n    }\n    if (controls)\n      return toRaw(permissionStatus.value);\n  });\n  query();\n  if (controls) {\n    return {\n      state,\n      isSupported,\n      query\n    };\n  } else {\n    return state;\n  }\n}\n\nfunction useClipboard(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500,\n    legacy = false\n  } = options;\n  const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const permissionRead = usePermission(\"clipboard-read\");\n  const permissionWrite = usePermission(\"clipboard-write\");\n  const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n  const text = shallowRef(\"\");\n  const copied = shallowRef(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n  async function updateText() {\n    let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n    if (!useLegacy) {\n      try {\n        text.value = await navigator.clipboard.readText();\n      } catch (e) {\n        useLegacy = true;\n      }\n    }\n    if (useLegacy) {\n      text.value = legacyRead();\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n      if (!useLegacy) {\n        try {\n          await navigator.clipboard.writeText(value);\n        } catch (e) {\n          useLegacy = true;\n        }\n      }\n      if (useLegacy)\n        legacyCopy(value);\n      text.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  function legacyCopy(value) {\n    const ta = document.createElement(\"textarea\");\n    ta.value = value != null ? value : \"\";\n    ta.style.position = \"absolute\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand(\"copy\");\n    ta.remove();\n  }\n  function legacyRead() {\n    var _a, _b, _c;\n    return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n  }\n  function isAllowed(status) {\n    return status === \"granted\" || status === \"prompt\";\n  }\n  return {\n    isSupported,\n    text,\n    copied,\n    copy\n  };\n}\n\nfunction useClipboardItems(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500\n  } = options;\n  const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const content = ref([]);\n  const copied = shallowRef(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n  function updateContent() {\n    if (isSupported.value) {\n      navigator.clipboard.read().then((items) => {\n        content.value = items;\n      });\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      await navigator.clipboard.write(value);\n      content.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  return {\n    isSupported,\n    content,\n    copied,\n    copy\n  };\n}\n\nfunction cloneFnJSON(source) {\n  return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n  const cloned = ref({});\n  const isModified = shallowRef(false);\n  let _lastSync = false;\n  const {\n    manual,\n    clone = cloneFnJSON,\n    // watch options\n    deep = true,\n    immediate = true\n  } = options;\n  watch(cloned, () => {\n    if (_lastSync) {\n      _lastSync = false;\n      return;\n    }\n    isModified.value = true;\n  }, {\n    deep: true,\n    flush: \"sync\"\n  });\n  function sync() {\n    _lastSync = true;\n    isModified.value = false;\n    cloned.value = clone(toValue(source));\n  }\n  if (!manual && (isRef(source) || typeof source === \"function\")) {\n    watch(source, sync, {\n      ...options,\n      deep,\n      immediate\n    });\n  } else {\n    sync();\n  }\n  return { cloned, isModified, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n  if (!(globalKey in _global))\n    _global[globalKey] = _global[globalKey] || {};\n  return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n  handlers[key] = fn;\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    },\n    initOnMounted\n  } = options;\n  const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n  const keyComputed = computed(() => toValue(key));\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = toValue(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n    data,\n    () => write(data.value),\n    { flush, deep, eventFilter }\n  );\n  watch(keyComputed, () => update(), { flush });\n  if (window && listenToStorageChanges) {\n    tryOnMounted(() => {\n      if (storage instanceof Storage)\n        useEventListener(window, \"storage\", update, { passive: true });\n      else\n        useEventListener(window, customStorageEventName, updateFromCustomEvent);\n      if (initOnMounted)\n        update();\n    });\n  }\n  if (!initOnMounted)\n    update();\n  function dispatchWriteEvent(oldValue, newValue) {\n    if (window) {\n      const payload = {\n        key: keyComputed.value,\n        oldValue,\n        newValue,\n        storageArea: storage\n      };\n      window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n        detail: payload\n      }));\n    }\n  }\n  function write(v) {\n    try {\n      const oldValue = storage.getItem(keyComputed.value);\n      if (v == null) {\n        dispatchWriteEvent(oldValue, null);\n        storage.removeItem(keyComputed.value);\n      } else {\n        const serialized = serializer.write(v);\n        if (oldValue !== serialized) {\n          storage.setItem(keyComputed.value, serialized);\n          dispatchWriteEvent(oldValue, serialized);\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit != null)\n        storage.setItem(keyComputed.value, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (typeof mergeDefaults === \"function\")\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return { ...rawInit, ...value };\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== keyComputed.value)\n      return;\n    pauseWatch();\n    try {\n      if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n        data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto,\n    disableTransition = true\n  } = options;\n  const modes = {\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\",\n    ...options.modes || {}\n  };\n  const preferredDark = usePreferredDark({ window });\n  const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n  const updateHTMLAttrs = getSSRHandler(\n    \"updateHTMLAttrs\",\n    (selector2, attribute2, value) => {\n      const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n      if (!el)\n        return;\n      const classesToAdd = /* @__PURE__ */ new Set();\n      const classesToRemove = /* @__PURE__ */ new Set();\n      let attributeToChange = null;\n      if (attribute2 === \"class\") {\n        const current = value.split(/\\s/g);\n        Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n          if (current.includes(v))\n            classesToAdd.add(v);\n          else\n            classesToRemove.add(v);\n        });\n      } else {\n        attributeToChange = { key: attribute2, value };\n      }\n      if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n        return;\n      let style;\n      if (disableTransition) {\n        style = window.document.createElement(\"style\");\n        style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n        window.document.head.appendChild(style);\n      }\n      for (const c of classesToAdd) {\n        el.classList.add(c);\n      }\n      for (const c of classesToRemove) {\n        el.classList.remove(c);\n      }\n      if (attributeToChange) {\n        el.setAttribute(attributeToChange.key, attributeToChange.value);\n      }\n      if (disableTransition) {\n        window.getComputedStyle(style).opacity;\n        document.head.removeChild(style);\n      }\n    }\n  );\n  function defaultOnChanged(mode) {\n    var _a;\n    updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  tryOnMounted(() => onChanged(state.value));\n  const auto = computed({\n    get() {\n      return emitAuto ? store.value : state.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  return Object.assign(auto, { store, system, state });\n}\n\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n  const confirmHook = createEventHook();\n  const cancelHook = createEventHook();\n  const revealHook = createEventHook();\n  let _resolve = noop;\n  const reveal = (data) => {\n    revealHook.trigger(data);\n    revealed.value = true;\n    return new Promise((resolve) => {\n      _resolve = resolve;\n    });\n  };\n  const confirm = (data) => {\n    revealed.value = false;\n    confirmHook.trigger(data);\n    _resolve({ data, isCanceled: false });\n  };\n  const cancel = (data) => {\n    revealed.value = false;\n    cancelHook.trigger(data);\n    _resolve({ data, isCanceled: true });\n  };\n  return {\n    isRevealed: computed(() => revealed.value),\n    reveal,\n    confirm,\n    cancel,\n    onReveal: revealHook.on,\n    onConfirm: confirmHook.on,\n    onCancel: cancelHook.on\n  };\n}\n\nfunction useCountdown(initialCountdown, options) {\n  var _a, _b;\n  const remaining = shallowRef(toValue(initialCountdown));\n  const intervalController = useIntervalFn(() => {\n    var _a2, _b2;\n    const value = remaining.value - 1;\n    remaining.value = value < 0 ? 0 : value;\n    (_a2 = options == null ? void 0 : options.onTick) == null ? void 0 : _a2.call(options);\n    if (remaining.value <= 0) {\n      intervalController.pause();\n      (_b2 = options == null ? void 0 : options.onComplete) == null ? void 0 : _b2.call(options);\n    }\n  }, (_a = options == null ? void 0 : options.interval) != null ? _a : 1e3, { immediate: (_b = options == null ? void 0 : options.immediate) != null ? _b : false });\n  const reset = (countdown) => {\n    var _a2;\n    remaining.value = (_a2 = toValue(countdown)) != null ? _a2 : toValue(initialCountdown);\n  };\n  const stop = () => {\n    intervalController.pause();\n    reset();\n  };\n  const resume = () => {\n    if (!intervalController.isActive.value) {\n      if (remaining.value > 0) {\n        intervalController.resume();\n      }\n    }\n  };\n  const start = (countdown) => {\n    reset(countdown);\n    intervalController.resume();\n  };\n  return {\n    remaining,\n    reset,\n    stop,\n    start,\n    pause: intervalController.pause,\n    resume,\n    isActive: intervalController.isActive\n  };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n  const { window = defaultWindow, initialValue, observe = false } = options;\n  const variable = shallowRef(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  function updateCssVar() {\n    var _a;\n    const key = toValue(prop);\n    const el = toValue(elRef);\n    if (el && window && key) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n      variable.value = value || variable.value || initialValue;\n    }\n  }\n  if (observe) {\n    useMutationObserver(elRef, updateCssVar, {\n      attributeFilter: [\"style\", \"class\"],\n      window\n    });\n  }\n  watch(\n    [elRef, () => toValue(prop)],\n    (_, old) => {\n      if (old[0] && old[1])\n        old[0].style.removeProperty(old[1]);\n      updateCssVar();\n    },\n    { immediate: true }\n  );\n  watch(\n    [variable, elRef],\n    ([val, el]) => {\n      const raw_prop = toValue(prop);\n      if ((el == null ? void 0 : el.style) && raw_prop) {\n        if (val == null)\n          el.style.removeProperty(raw_prop);\n        else\n          el.style.setProperty(raw_prop, val);\n      }\n    },\n    { immediate: true }\n  );\n  return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n  const vm = getCurrentInstance();\n  const currentElement = computedWithControl(\n    () => null,\n    () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n  );\n  onUpdated(currentElement.trigger);\n  onMounted(currentElement.trigger);\n  return currentElement;\n}\n\nfunction useCycleList(list, options) {\n  const state = shallowRef(getInitialValue());\n  const listRef = toRef(list);\n  const index = computed({\n    get() {\n      var _a;\n      const targetList = listRef.value;\n      let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n      if (index2 < 0)\n        index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n      return index2;\n    },\n    set(v) {\n      set(v);\n    }\n  });\n  function set(i) {\n    const targetList = listRef.value;\n    const length = targetList.length;\n    const index2 = (i % length + length) % length;\n    const value = targetList[index2];\n    state.value = value;\n    return value;\n  }\n  function shift(delta = 1) {\n    return set(index.value + delta);\n  }\n  function next(n = 1) {\n    return shift(n);\n  }\n  function prev(n = 1) {\n    return shift(-n);\n  }\n  function getInitialValue() {\n    var _a, _b;\n    return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n  }\n  watch(listRef, () => set(index.value));\n  return {\n    state,\n    index,\n    next,\n    prev,\n    go: set\n  };\n}\n\nfunction useDark(options = {}) {\n  const {\n    valueDark = \"dark\",\n    valueLight = \"\"\n  } = options;\n  const mode = useColorMode({\n    ...options,\n    onChanged: (mode2, defaultHandler) => {\n      var _a;\n      if (options.onChanged)\n        (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n      else\n        defaultHandler(mode2);\n    },\n    modes: {\n      dark: valueDark,\n      light: valueLight\n    }\n  });\n  const system = computed(() => mode.system.value);\n  const isDark = computed({\n    get() {\n      return mode.value === \"dark\";\n    },\n    set(v) {\n      const modeVal = v ? \"dark\" : \"light\";\n      if (system.value === modeVal)\n        mode.value = \"auto\";\n      else\n        mode.value = modeVal;\n    }\n  });\n  return isDark;\n}\n\nfunction fnBypass(v) {\n  return v;\n}\nfunction fnSetSource(source, value) {\n  return source.value = value;\n}\nfunction defaultDump(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n  const {\n    clone = false,\n    dump = defaultDump(clone),\n    parse = defaultParse(clone),\n    setSource = fnSetSource\n  } = options;\n  function _createHistoryRecord() {\n    return markRaw({\n      snapshot: dump(source.value),\n      timestamp: timestamp()\n    });\n  }\n  const last = ref(_createHistoryRecord());\n  const undoStack = ref([]);\n  const redoStack = ref([]);\n  const _setSource = (record) => {\n    setSource(source, parse(record.snapshot));\n    last.value = record;\n  };\n  const commit = () => {\n    undoStack.value.unshift(last.value);\n    last.value = _createHistoryRecord();\n    if (options.capacity && undoStack.value.length > options.capacity)\n      undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n    if (redoStack.value.length)\n      redoStack.value.splice(0, redoStack.value.length);\n  };\n  const clear = () => {\n    undoStack.value.splice(0, undoStack.value.length);\n    redoStack.value.splice(0, redoStack.value.length);\n  };\n  const undo = () => {\n    const state = undoStack.value.shift();\n    if (state) {\n      redoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const redo = () => {\n    const state = redoStack.value.shift();\n    if (state) {\n      undoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const reset = () => {\n    _setSource(last.value);\n  };\n  const history = computed(() => [last.value, ...undoStack.value]);\n  const canUndo = computed(() => undoStack.value.length > 0);\n  const canRedo = computed(() => redoStack.value.length > 0);\n  return {\n    source,\n    undoStack,\n    redoStack,\n    last,\n    history,\n    canUndo,\n    canRedo,\n    clear,\n    commit,\n    reset,\n    undo,\n    redo\n  };\n}\n\nfunction useRefHistory(source, options = {}) {\n  const {\n    deep = false,\n    flush = \"pre\",\n    eventFilter\n  } = options;\n  const {\n    eventFilter: composedFilter,\n    pause,\n    resume: resumeTracking,\n    isActive: isTracking\n  } = pausableFilter(eventFilter);\n  const {\n    ignoreUpdates,\n    ignorePrevAsyncUpdates,\n    stop\n  } = watchIgnorable(\n    source,\n    commit,\n    { deep, flush, eventFilter: composedFilter }\n  );\n  function setSource(source2, value) {\n    ignorePrevAsyncUpdates();\n    ignoreUpdates(() => {\n      source2.value = value;\n    });\n  }\n  const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n  const { clear, commit: manualCommit } = manualHistory;\n  function commit() {\n    ignorePrevAsyncUpdates();\n    manualCommit();\n  }\n  function resume(commitNow) {\n    resumeTracking();\n    if (commitNow)\n      commit();\n  }\n  function batch(fn) {\n    let canceled = false;\n    const cancel = () => canceled = true;\n    ignoreUpdates(() => {\n      fn(cancel);\n    });\n    if (!canceled)\n      commit();\n  }\n  function dispose() {\n    stop();\n    clear();\n  }\n  return {\n    ...manualHistory,\n    isTracking,\n    pause,\n    resume,\n    commit,\n    batch,\n    dispose\n  };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\n\nfunction useDeviceMotion(options = {}) {\n  const {\n    window = defaultWindow,\n    requestPermissions = false,\n    eventFilter = bypassFilter\n  } = options;\n  const isSupported = useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n  const requirePermissions = useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n  const permissionGranted = shallowRef(false);\n  const acceleration = ref({ x: null, y: null, z: null });\n  const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n  const interval = shallowRef(0);\n  const accelerationIncludingGravity = ref({\n    x: null,\n    y: null,\n    z: null\n  });\n  function init() {\n    if (window) {\n      const onDeviceMotion = createFilterWrapper(\n        eventFilter,\n        (event) => {\n          var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n          acceleration.value = {\n            x: ((_a = event.acceleration) == null ? void 0 : _a.x) || null,\n            y: ((_b = event.acceleration) == null ? void 0 : _b.y) || null,\n            z: ((_c = event.acceleration) == null ? void 0 : _c.z) || null\n          };\n          accelerationIncludingGravity.value = {\n            x: ((_d = event.accelerationIncludingGravity) == null ? void 0 : _d.x) || null,\n            y: ((_e = event.accelerationIncludingGravity) == null ? void 0 : _e.y) || null,\n            z: ((_f = event.accelerationIncludingGravity) == null ? void 0 : _f.z) || null\n          };\n          rotationRate.value = {\n            alpha: ((_g = event.rotationRate) == null ? void 0 : _g.alpha) || null,\n            beta: ((_h = event.rotationRate) == null ? void 0 : _h.beta) || null,\n            gamma: ((_i = event.rotationRate) == null ? void 0 : _i.gamma) || null\n          };\n          interval.value = event.interval;\n        }\n      );\n      useEventListener(window, \"devicemotion\", onDeviceMotion, { passive: true });\n    }\n  }\n  const ensurePermissions = async () => {\n    if (!requirePermissions.value)\n      permissionGranted.value = true;\n    if (permissionGranted.value)\n      return;\n    if (requirePermissions.value) {\n      const requestPermission = DeviceMotionEvent.requestPermission;\n      try {\n        const response = await requestPermission();\n        if (response === \"granted\") {\n          permissionGranted.value = true;\n          init();\n        }\n      } catch (error) {\n        console.error(error);\n      }\n    }\n  };\n  if (isSupported.value) {\n    if (requestPermissions && requirePermissions.value) {\n      ensurePermissions().then(() => init());\n    } else {\n      init();\n    }\n  }\n  return {\n    acceleration,\n    accelerationIncludingGravity,\n    rotationRate,\n    interval,\n    isSupported,\n    requirePermissions,\n    ensurePermissions,\n    permissionGranted\n  };\n}\n\nfunction useDeviceOrientation(options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n  const isAbsolute = shallowRef(false);\n  const alpha = shallowRef(null);\n  const beta = shallowRef(null);\n  const gamma = shallowRef(null);\n  if (window && isSupported.value) {\n    useEventListener(window, \"deviceorientation\", (event) => {\n      isAbsolute.value = event.absolute;\n      alpha.value = event.alpha;\n      beta.value = event.beta;\n      gamma.value = event.gamma;\n    }, { passive: true });\n  }\n  return {\n    isSupported,\n    isAbsolute,\n    alpha,\n    beta,\n    gamma\n  };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const pixelRatio = shallowRef(1);\n  const query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n  let stop = noop;\n  if (window) {\n    stop = watchImmediate(query, () => pixelRatio.value = window.devicePixelRatio);\n  }\n  return {\n    pixelRatio: readonly(pixelRatio),\n    stop\n  };\n}\n\nfunction useDevicesList(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    requestPermissions = false,\n    constraints = { audio: true, video: true },\n    onUpdated\n  } = options;\n  const devices = ref([]);\n  const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n  const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n  const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n  const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n  const permissionGranted = shallowRef(false);\n  let stream;\n  async function update() {\n    if (!isSupported.value)\n      return;\n    devices.value = await navigator.mediaDevices.enumerateDevices();\n    onUpdated == null ? void 0 : onUpdated(devices.value);\n    if (stream) {\n      stream.getTracks().forEach((t) => t.stop());\n      stream = null;\n    }\n  }\n  async function ensurePermissions() {\n    const deviceName = constraints.video ? \"camera\" : \"microphone\";\n    if (!isSupported.value)\n      return false;\n    if (permissionGranted.value)\n      return true;\n    const { state, query } = usePermission(deviceName, { controls: true });\n    await query();\n    if (state.value !== \"granted\") {\n      let granted = true;\n      try {\n        stream = await navigator.mediaDevices.getUserMedia(constraints);\n      } catch (e) {\n        stream = null;\n        granted = false;\n      }\n      update();\n      permissionGranted.value = granted;\n    } else {\n      permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  }\n  if (isSupported.value) {\n    if (requestPermissions)\n      ensurePermissions();\n    useEventListener(navigator.mediaDevices, \"devicechange\", update, { passive: true });\n    update();\n  }\n  return {\n    devices,\n    ensurePermissions,\n    permissionGranted,\n    videoInputs,\n    audioInputs,\n    audioOutputs,\n    isSupported\n  };\n}\n\nfunction useDisplayMedia(options = {}) {\n  var _a;\n  const enabled = shallowRef((_a = options.enabled) != null ? _a : false);\n  const video = options.video;\n  const audio = options.audio;\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n  });\n  const constraint = { audio, video };\n  const stream = shallowRef();\n  async function _start() {\n    var _a2;\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    enabled\n  };\n}\n\nfunction useDocumentVisibility(options = {}) {\n  const { document = defaultDocument } = options;\n  if (!document)\n    return shallowRef(\"visible\");\n  const visibility = shallowRef(document.visibilityState);\n  useEventListener(document, \"visibilitychange\", () => {\n    visibility.value = document.visibilityState;\n  }, { passive: true });\n  return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n  var _a;\n  const {\n    pointerTypes,\n    preventDefault,\n    stopPropagation,\n    exact,\n    onMove,\n    onEnd,\n    onStart,\n    initialValue,\n    axis = \"both\",\n    draggingElement = defaultWindow,\n    containerElement,\n    handle: draggingHandle = target,\n    buttons = [0]\n  } = options;\n  const position = ref(\n    (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n  );\n  const pressedDelta = ref();\n  const filterEvent = (e) => {\n    if (pointerTypes)\n      return pointerTypes.includes(e.pointerType);\n    return true;\n  };\n  const handleEvent = (e) => {\n    if (toValue(preventDefault))\n      e.preventDefault();\n    if (toValue(stopPropagation))\n      e.stopPropagation();\n  };\n  const start = (e) => {\n    var _a2;\n    if (!toValue(buttons).includes(e.button))\n      return;\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (toValue(exact) && e.target !== toValue(target))\n      return;\n    const container = toValue(containerElement);\n    const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n    const targetRect = toValue(target).getBoundingClientRect();\n    const pos = {\n      x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n      y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n    };\n    if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n      return;\n    pressedDelta.value = pos;\n    handleEvent(e);\n  };\n  const move = (e) => {\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    const container = toValue(containerElement);\n    const targetRect = toValue(target).getBoundingClientRect();\n    let { x, y } = position.value;\n    if (axis === \"x\" || axis === \"both\") {\n      x = e.clientX - pressedDelta.value.x;\n      if (container)\n        x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n    }\n    if (axis === \"y\" || axis === \"both\") {\n      y = e.clientY - pressedDelta.value.y;\n      if (container)\n        y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n    }\n    position.value = {\n      x,\n      y\n    };\n    onMove == null ? void 0 : onMove(position.value, e);\n    handleEvent(e);\n  };\n  const end = (e) => {\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    pressedDelta.value = void 0;\n    onEnd == null ? void 0 : onEnd(position.value, e);\n    handleEvent(e);\n  };\n  if (isClient) {\n    const config = () => {\n      var _a2;\n      return {\n        capture: (_a2 = options.capture) != null ? _a2 : true,\n        passive: !toValue(preventDefault)\n      };\n    };\n    useEventListener(draggingHandle, \"pointerdown\", start, config);\n    useEventListener(draggingElement, \"pointermove\", move, config);\n    useEventListener(draggingElement, \"pointerup\", end, config);\n  }\n  return {\n    ...toRefs(position),\n    position,\n    isDragging: computed(() => !!pressedDelta.value),\n    style: computed(\n      () => `left:${position.value.x}px;top:${position.value.y}px;`\n    )\n  };\n}\n\nfunction useDropZone(target, options = {}) {\n  var _a, _b;\n  const isOverDropZone = shallowRef(false);\n  const files = shallowRef(null);\n  let counter = 0;\n  let isValid = true;\n  if (isClient) {\n    const _options = typeof options === \"function\" ? { onDrop: options } : options;\n    const multiple = (_a = _options.multiple) != null ? _a : true;\n    const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false;\n    const getFiles = (event) => {\n      var _a2, _b2;\n      const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.files) != null ? _b2 : []);\n      return list.length === 0 ? null : multiple ? list : [list[0]];\n    };\n    const checkDataTypes = (types) => {\n      const dataTypes = unref(_options.dataTypes);\n      if (typeof dataTypes === \"function\")\n        return dataTypes(types);\n      if (!(dataTypes == null ? void 0 : dataTypes.length))\n        return true;\n      if (types.length === 0)\n        return false;\n      return types.every(\n        (type) => dataTypes.some((allowedType) => type.includes(allowedType))\n      );\n    };\n    const checkValidity = (items) => {\n      const types = Array.from(items != null ? items : []).map((item) => item.type);\n      const dataTypesValid = checkDataTypes(types);\n      const multipleFilesValid = multiple || items.length <= 1;\n      return dataTypesValid && multipleFilesValid;\n    };\n    const isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n    const handleDragEvent = (event, eventType) => {\n      var _a2, _b2, _c, _d, _e, _f;\n      const dataTransferItemList = (_a2 = event.dataTransfer) == null ? void 0 : _a2.items;\n      isValid = (_b2 = dataTransferItemList && checkValidity(dataTransferItemList)) != null ? _b2 : false;\n      if (preventDefaultForUnhandled) {\n        event.preventDefault();\n      }\n      if (!isSafari() && !isValid) {\n        if (event.dataTransfer) {\n          event.dataTransfer.dropEffect = \"none\";\n        }\n        return;\n      }\n      event.preventDefault();\n      if (event.dataTransfer) {\n        event.dataTransfer.dropEffect = \"copy\";\n      }\n      const currentFiles = getFiles(event);\n      switch (eventType) {\n        case \"enter\":\n          counter += 1;\n          isOverDropZone.value = true;\n          (_c = _options.onEnter) == null ? void 0 : _c.call(_options, null, event);\n          break;\n        case \"over\":\n          (_d = _options.onOver) == null ? void 0 : _d.call(_options, null, event);\n          break;\n        case \"leave\":\n          counter -= 1;\n          if (counter === 0)\n            isOverDropZone.value = false;\n          (_e = _options.onLeave) == null ? void 0 : _e.call(_options, null, event);\n          break;\n        case \"drop\":\n          counter = 0;\n          isOverDropZone.value = false;\n          if (isValid) {\n            files.value = currentFiles;\n            (_f = _options.onDrop) == null ? void 0 : _f.call(_options, currentFiles, event);\n          }\n          break;\n      }\n    };\n    useEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n    useEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n    useEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n    useEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n  }\n  return {\n    files,\n    isOverDropZone\n  };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...observerOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => {\n    const _targets = toValue(target);\n    return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n  });\n  const stopWatch = watch(\n    targets,\n    (els) => {\n      cleanup();\n      if (isSupported.value && window) {\n        observer = new ResizeObserver(callback);\n        for (const _el of els) {\n          if (_el)\n            observer.observe(_el, observerOptions);\n        }\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementBounding(target, options = {}) {\n  const {\n    reset = true,\n    windowResize = true,\n    windowScroll = true,\n    immediate = true,\n    updateTiming = \"sync\"\n  } = options;\n  const height = shallowRef(0);\n  const bottom = shallowRef(0);\n  const left = shallowRef(0);\n  const right = shallowRef(0);\n  const top = shallowRef(0);\n  const width = shallowRef(0);\n  const x = shallowRef(0);\n  const y = shallowRef(0);\n  function recalculate() {\n    const el = unrefElement(target);\n    if (!el) {\n      if (reset) {\n        height.value = 0;\n        bottom.value = 0;\n        left.value = 0;\n        right.value = 0;\n        top.value = 0;\n        width.value = 0;\n        x.value = 0;\n        y.value = 0;\n      }\n      return;\n    }\n    const rect = el.getBoundingClientRect();\n    height.value = rect.height;\n    bottom.value = rect.bottom;\n    left.value = rect.left;\n    right.value = rect.right;\n    top.value = rect.top;\n    width.value = rect.width;\n    x.value = rect.x;\n    y.value = rect.y;\n  }\n  function update() {\n    if (updateTiming === \"sync\")\n      recalculate();\n    else if (updateTiming === \"next-frame\")\n      requestAnimationFrame(() => recalculate());\n  }\n  useResizeObserver(target, update);\n  watch(() => unrefElement(target), (ele) => !ele && update());\n  useMutationObserver(target, update, {\n    attributeFilter: [\"style\", \"class\"]\n  });\n  if (windowScroll)\n    useEventListener(\"scroll\", update, { capture: true, passive: true });\n  if (windowResize)\n    useEventListener(\"resize\", update, { passive: true });\n  tryOnMounted(() => {\n    if (immediate)\n      update();\n  });\n  return {\n    height,\n    bottom,\n    left,\n    right,\n    top,\n    width,\n    x,\n    y,\n    update\n  };\n}\n\nfunction useElementByPoint(options) {\n  const {\n    x,\n    y,\n    document = defaultDocument,\n    multiple,\n    interval = \"requestAnimationFrame\",\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => {\n    if (toValue(multiple))\n      return document && \"elementsFromPoint\" in document;\n    return document && \"elementFromPoint\" in document;\n  });\n  const element = shallowRef(null);\n  const cb = () => {\n    var _a, _b;\n    element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n  };\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  return {\n    isSupported,\n    element,\n    ...controls\n  };\n}\n\nfunction useElementHover(el, options = {}) {\n  const {\n    delayEnter = 0,\n    delayLeave = 0,\n    triggerOnRemoval = false,\n    window = defaultWindow\n  } = options;\n  const isHovered = shallowRef(false);\n  let timer;\n  const toggle = (entering) => {\n    const delay = entering ? delayEnter : delayLeave;\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n    if (delay)\n      timer = setTimeout(() => isHovered.value = entering, delay);\n    else\n      isHovered.value = entering;\n  };\n  if (!window)\n    return isHovered;\n  useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n  useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n  if (triggerOnRemoval) {\n    onElementRemoval(\n      computed(() => unrefElement(el)),\n      () => toggle(false)\n    );\n  }\n  return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = shallowRef(initialSize.width);\n  const height = shallowRef(initialSize.height);\n  const { stop: stop1 } = useResizeObserver(\n    target,\n    ([entry]) => {\n      const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n      if (window && isSVG.value) {\n        const $elem = unrefElement(target);\n        if ($elem) {\n          const rect = $elem.getBoundingClientRect();\n          width.value = rect.width;\n          height.value = rect.height;\n        }\n      } else {\n        if (boxSize) {\n          const formatBoxSize = toArray(boxSize);\n          width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n          height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n        } else {\n          width.value = entry.contentRect.width;\n          height.value = entry.contentRect.height;\n        }\n      }\n    },\n    options\n  );\n  tryOnMounted(() => {\n    const ele = unrefElement(target);\n    if (ele) {\n      width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n      height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n    }\n  });\n  const stop2 = watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  function stop() {\n    stop1();\n    stop2();\n  }\n  return {\n    width,\n    height,\n    stop\n  };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0,\n    window = defaultWindow,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  const targets = computed(() => {\n    const _target = toValue(target);\n    return toArray(_target).map(unrefElement).filter(notNullish);\n  });\n  let cleanup = noop;\n  const isActive = shallowRef(immediate);\n  const stopWatch = isSupported.value ? watch(\n    () => [targets.value, unrefElement(root), isActive.value],\n    ([targets2, root2]) => {\n      cleanup();\n      if (!isActive.value)\n        return;\n      if (!targets2.length)\n        return;\n      const observer = new IntersectionObserver(\n        callback,\n        {\n          root: unrefElement(root2),\n          rootMargin,\n          threshold\n        }\n      );\n      targets2.forEach((el) => el && observer.observe(el));\n      cleanup = () => {\n        observer.disconnect();\n        cleanup = noop;\n      };\n    },\n    { immediate, flush: \"post\" }\n  ) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n    isActive.value = false;\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    isActive,\n    pause() {\n      cleanup();\n      isActive.value = false;\n    },\n    resume() {\n      isActive.value = true;\n    },\n    stop\n  };\n}\n\nfunction useElementVisibility(element, options = {}) {\n  const {\n    window = defaultWindow,\n    scrollTarget,\n    threshold = 0,\n    rootMargin,\n    once = false\n  } = options;\n  const elementIsVisible = shallowRef(false);\n  const { stop } = useIntersectionObserver(\n    element,\n    (intersectionObserverEntries) => {\n      let isIntersecting = elementIsVisible.value;\n      let latestTime = 0;\n      for (const entry of intersectionObserverEntries) {\n        if (entry.time >= latestTime) {\n          latestTime = entry.time;\n          isIntersecting = entry.isIntersecting;\n        }\n      }\n      elementIsVisible.value = isIntersecting;\n      if (once) {\n        watchOnce(elementIsVisible, () => {\n          stop();\n        });\n      }\n    },\n    {\n      root: scrollTarget,\n      window,\n      threshold,\n      rootMargin: toValue(rootMargin)\n    }\n  );\n  return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n  const scope = getCurrentScope();\n  function on(listener) {\n    var _a;\n    const listeners = events.get(key) || /* @__PURE__ */ new Set();\n    listeners.add(listener);\n    events.set(key, listeners);\n    const _off = () => off(listener);\n    (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n    return _off;\n  }\n  function once(listener) {\n    function _listener(...args) {\n      off(_listener);\n      listener(...args);\n    }\n    return on(_listener);\n  }\n  function off(listener) {\n    const listeners = events.get(key);\n    if (!listeners)\n      return;\n    listeners.delete(listener);\n    if (!listeners.size)\n      reset();\n  }\n  function reset() {\n    events.delete(key);\n  }\n  function emit(event, payload) {\n    var _a;\n    (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n  }\n  return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n  const event = shallowRef(null);\n  const data = shallowRef(null);\n  const status = shallowRef(\"CONNECTING\");\n  const eventSource = ref(null);\n  const error = shallowRef(null);\n  const urlRef = toRef(url);\n  const lastEventId = shallowRef(null);\n  let explicitlyClosed = false;\n  let retried = 0;\n  const {\n    withCredentials = false,\n    immediate = true,\n    autoConnect = true,\n    autoReconnect\n  } = options;\n  const close = () => {\n    if (isClient && eventSource.value) {\n      eventSource.value.close();\n      eventSource.value = null;\n      status.value = \"CLOSED\";\n      explicitlyClosed = true;\n    }\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const es = new EventSource(urlRef.value, { withCredentials });\n    status.value = \"CONNECTING\";\n    eventSource.value = es;\n    es.onopen = () => {\n      status.value = \"OPEN\";\n      error.value = null;\n    };\n    es.onerror = (e) => {\n      status.value = \"CLOSED\";\n      error.value = e;\n      if (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n        es.close();\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions$1(autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    es.onmessage = (e) => {\n      event.value = null;\n      data.value = e.data;\n      lastEventId.value = e.lastEventId;\n    };\n    for (const event_name of events) {\n      useEventListener(es, event_name, (e) => {\n        event.value = event_name;\n        data.value = e.data || null;\n      }, { passive: true });\n    }\n  };\n  const open = () => {\n    if (!isClient)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    open();\n  if (autoConnect)\n    watch(urlRef, open);\n  tryOnScopeDispose(close);\n  return {\n    eventSource,\n    event,\n    data,\n    status,\n    error,\n    open,\n    close,\n    lastEventId\n  };\n}\n\nfunction useEyeDropper(options = {}) {\n  const { initialValue = \"\" } = options;\n  const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n  const sRGBHex = shallowRef(initialValue);\n  async function open(openOptions) {\n    if (!isSupported.value)\n      return;\n    const eyeDropper = new window.EyeDropper();\n    const result = await eyeDropper.open(openOptions);\n    sRGBHex.value = result.sRGBHex;\n    return result;\n  }\n  return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n  const {\n    baseUrl = \"\",\n    rel = \"icon\",\n    document = defaultDocument\n  } = options;\n  const favicon = toRef(newIcon);\n  const applyIcon = (icon) => {\n    const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n    if (!elements || elements.length === 0) {\n      const link = document == null ? void 0 : document.createElement(\"link\");\n      if (link) {\n        link.rel = rel;\n        link.href = `${baseUrl}${icon}`;\n        link.type = `image/${icon.split(\".\").pop()}`;\n        document == null ? void 0 : document.head.append(link);\n      }\n      return;\n    }\n    elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n  };\n  watch(\n    favicon,\n    (i, o) => {\n      if (typeof i === \"string\" && i !== o)\n        applyIcon(i);\n    },\n    { immediate: true }\n  );\n  return favicon;\n}\n\nconst payloadMapping = {\n  json: \"application/json\",\n  text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n  return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n  return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n    return Object.fromEntries(headers.entries());\n  return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n  if (combination === \"overwrite\") {\n    return async (ctx) => {\n      let callback;\n      for (let i = callbacks.length - 1; i >= 0; i--) {\n        if (callbacks[i] != null) {\n          callback = callbacks[i];\n          break;\n        }\n      }\n      if (callback)\n        return { ...ctx, ...await callback(ctx) };\n      return ctx;\n    };\n  } else {\n    return async (ctx) => {\n      for (const callback of callbacks) {\n        if (callback)\n          ctx = { ...ctx, ...await callback(ctx) };\n      }\n      return ctx;\n    };\n  }\n}\nfunction createFetch(config = {}) {\n  const _combination = config.combination || \"chain\";\n  const _options = config.options || {};\n  const _fetchOptions = config.fetchOptions || {};\n  function useFactoryFetch(url, ...args) {\n    const computedUrl = computed(() => {\n      const baseUrl = toValue(config.baseUrl);\n      const targetUrl = toValue(url);\n      return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n    });\n    let options = _options;\n    let fetchOptions = _fetchOptions;\n    if (args.length > 0) {\n      if (isFetchOptions(args[0])) {\n        options = {\n          ...options,\n          ...args[0],\n          beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n          afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n          onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n        };\n      } else {\n        fetchOptions = {\n          ...fetchOptions,\n          ...args[0],\n          headers: {\n            ...headersToObject(fetchOptions.headers) || {},\n            ...headersToObject(args[0].headers) || {}\n          }\n        };\n      }\n    }\n    if (args.length > 1 && isFetchOptions(args[1])) {\n      options = {\n        ...options,\n        ...args[1],\n        beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n        afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n        onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n      };\n    }\n    return useFetch(computedUrl, fetchOptions, options);\n  }\n  return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n  var _a;\n  const supportsAbort = typeof AbortController === \"function\";\n  let fetchOptions = {};\n  let options = {\n    immediate: true,\n    refetch: false,\n    timeout: 0,\n    updateDataOnError: false\n  };\n  const config = {\n    method: \"GET\",\n    type: \"text\",\n    payload: void 0\n  };\n  if (args.length > 0) {\n    if (isFetchOptions(args[0]))\n      options = { ...options, ...args[0] };\n    else\n      fetchOptions = args[0];\n  }\n  if (args.length > 1) {\n    if (isFetchOptions(args[1]))\n      options = { ...options, ...args[1] };\n  }\n  const {\n    fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n    initialData,\n    timeout\n  } = options;\n  const responseEvent = createEventHook();\n  const errorEvent = createEventHook();\n  const finallyEvent = createEventHook();\n  const isFinished = shallowRef(false);\n  const isFetching = shallowRef(false);\n  const aborted = shallowRef(false);\n  const statusCode = shallowRef(null);\n  const response = shallowRef(null);\n  const error = shallowRef(null);\n  const data = shallowRef(initialData || null);\n  const canAbort = computed(() => supportsAbort && isFetching.value);\n  let controller;\n  let timer;\n  const abort = () => {\n    if (supportsAbort) {\n      controller == null ? void 0 : controller.abort();\n      controller = new AbortController();\n      controller.signal.onabort = () => aborted.value = true;\n      fetchOptions = {\n        ...fetchOptions,\n        signal: controller.signal\n      };\n    }\n  };\n  const loading = (isLoading) => {\n    isFetching.value = isLoading;\n    isFinished.value = !isLoading;\n  };\n  if (timeout)\n    timer = useTimeoutFn(abort, timeout, { immediate: false });\n  let executeCounter = 0;\n  const execute = async (throwOnFailed = false) => {\n    var _a2, _b;\n    abort();\n    loading(true);\n    error.value = null;\n    statusCode.value = null;\n    aborted.value = false;\n    executeCounter += 1;\n    const currentExecuteCounter = executeCounter;\n    const defaultFetchOptions = {\n      method: config.method,\n      headers: {}\n    };\n    const payload = toValue(config.payload);\n    if (payload) {\n      const headers = headersToObject(defaultFetchOptions.headers);\n      const proto = Object.getPrototypeOf(payload);\n      if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData))\n        config.payloadType = \"json\";\n      if (config.payloadType)\n        headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n      defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n    }\n    let isCanceled = false;\n    const context = {\n      url: toValue(url),\n      options: {\n        ...defaultFetchOptions,\n        ...fetchOptions\n      },\n      cancel: () => {\n        isCanceled = true;\n      }\n    };\n    if (options.beforeFetch)\n      Object.assign(context, await options.beforeFetch(context));\n    if (isCanceled || !fetch) {\n      loading(false);\n      return Promise.resolve(null);\n    }\n    let responseData = null;\n    if (timer)\n      timer.start();\n    return fetch(\n      context.url,\n      {\n        ...defaultFetchOptions,\n        ...context.options,\n        headers: {\n          ...headersToObject(defaultFetchOptions.headers),\n          ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n        }\n      }\n    ).then(async (fetchResponse) => {\n      response.value = fetchResponse;\n      statusCode.value = fetchResponse.status;\n      responseData = await fetchResponse.clone()[config.type]();\n      if (!fetchResponse.ok) {\n        data.value = initialData || null;\n        throw new Error(fetchResponse.statusText);\n      }\n      if (options.afterFetch) {\n        ({ data: responseData } = await options.afterFetch({\n          data: responseData,\n          response: fetchResponse,\n          context,\n          execute\n        }));\n      }\n      data.value = responseData;\n      responseEvent.trigger(fetchResponse);\n      return fetchResponse;\n    }).catch(async (fetchError) => {\n      let errorData = fetchError.message || fetchError.name;\n      if (options.onFetchError) {\n        ({ error: errorData, data: responseData } = await options.onFetchError({\n          data: responseData,\n          error: fetchError,\n          response: response.value,\n          context,\n          execute\n        }));\n      }\n      error.value = errorData;\n      if (options.updateDataOnError)\n        data.value = responseData;\n      errorEvent.trigger(fetchError);\n      if (throwOnFailed)\n        throw fetchError;\n      return null;\n    }).finally(() => {\n      if (currentExecuteCounter === executeCounter)\n        loading(false);\n      if (timer)\n        timer.stop();\n      finallyEvent.trigger(null);\n    });\n  };\n  const refetch = toRef(options.refetch);\n  watch(\n    [\n      refetch,\n      toRef(url)\n    ],\n    ([refetch2]) => refetch2 && execute(),\n    { deep: true }\n  );\n  const shell = {\n    isFinished: readonly(isFinished),\n    isFetching: readonly(isFetching),\n    statusCode,\n    response,\n    error,\n    data,\n    canAbort,\n    aborted,\n    abort,\n    execute,\n    onFetchResponse: responseEvent.on,\n    onFetchError: errorEvent.on,\n    onFetchFinally: finallyEvent.on,\n    // method\n    get: setMethod(\"GET\"),\n    put: setMethod(\"PUT\"),\n    post: setMethod(\"POST\"),\n    delete: setMethod(\"DELETE\"),\n    patch: setMethod(\"PATCH\"),\n    head: setMethod(\"HEAD\"),\n    options: setMethod(\"OPTIONS\"),\n    // type\n    json: setType(\"json\"),\n    text: setType(\"text\"),\n    blob: setType(\"blob\"),\n    arrayBuffer: setType(\"arrayBuffer\"),\n    formData: setType(\"formData\")\n  };\n  function setMethod(method) {\n    return (payload, payloadType) => {\n      if (!isFetching.value) {\n        config.method = method;\n        config.payload = payload;\n        config.payloadType = payloadType;\n        if (isRef(config.payload)) {\n          watch(\n            [\n              refetch,\n              toRef(config.payload)\n            ],\n            ([refetch2]) => refetch2 && execute(),\n            { deep: true }\n          );\n        }\n        return {\n          ...shell,\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        };\n      }\n      return void 0;\n    };\n  }\n  function waitUntilFinished() {\n    return new Promise((resolve, reject) => {\n      until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n    });\n  }\n  function setType(type) {\n    return () => {\n      if (!isFetching.value) {\n        config.type = type;\n        return {\n          ...shell,\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        };\n      }\n      return void 0;\n    };\n  }\n  if (options.immediate)\n    Promise.resolve().then(() => execute());\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilFinished().then(onFulfilled, onRejected);\n    }\n  };\n}\nfunction joinPaths(start, end) {\n  if (!start.endsWith(\"/\") && !end.startsWith(\"/\")) {\n    return `${start}/${end}`;\n  }\n  if (start.endsWith(\"/\") && end.startsWith(\"/\")) {\n    return `${start.slice(0, -1)}${end}`;\n  }\n  return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n  multiple: true,\n  accept: \"*\",\n  reset: false,\n  directory: false\n};\nfunction prepareInitialFiles(files) {\n  if (!files)\n    return null;\n  if (files instanceof FileList)\n    return files;\n  const dt = new DataTransfer();\n  for (const file of files) {\n    dt.items.add(file);\n  }\n  return dt.files;\n}\nfunction useFileDialog(options = {}) {\n  const {\n    document = defaultDocument\n  } = options;\n  const files = ref(prepareInitialFiles(options.initialFiles));\n  const { on: onChange, trigger: changeTrigger } = createEventHook();\n  const { on: onCancel, trigger: cancelTrigger } = createEventHook();\n  let input;\n  if (document) {\n    input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.onchange = (event) => {\n      const result = event.target;\n      files.value = result.files;\n      changeTrigger(files.value);\n    };\n    input.oncancel = () => {\n      cancelTrigger();\n    };\n  }\n  const reset = () => {\n    files.value = null;\n    if (input && input.value) {\n      input.value = \"\";\n      changeTrigger(null);\n    }\n  };\n  const open = (localOptions) => {\n    if (!input)\n      return;\n    const _options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n      ...localOptions\n    };\n    input.multiple = _options.multiple;\n    input.accept = _options.accept;\n    input.webkitdirectory = _options.directory;\n    if (hasOwn(_options, \"capture\"))\n      input.capture = _options.capture;\n    if (_options.reset)\n      reset();\n    input.click();\n  };\n  return {\n    files: readonly(files),\n    open,\n    reset,\n    onCancel,\n    onChange\n  };\n}\n\nfunction useFileSystemAccess(options = {}) {\n  const {\n    window: _window = defaultWindow,\n    dataType = \"Text\"\n  } = options;\n  const window = _window;\n  const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n  const fileHandle = shallowRef();\n  const data = shallowRef();\n  const file = shallowRef();\n  const fileName = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n  });\n  const fileMIME = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n  });\n  const fileSize = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n  });\n  const fileLastModified = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n  });\n  async function open(_options = {}) {\n    if (!isSupported.value)\n      return;\n    const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n    fileHandle.value = handle;\n    await updateData();\n  }\n  async function create(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    data.value = void 0;\n    await updateData();\n  }\n  async function save(_options = {}) {\n    if (!isSupported.value)\n      return;\n    if (!fileHandle.value)\n      return saveAs(_options);\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function saveAs(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function updateFile() {\n    var _a;\n    file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n  }\n  async function updateData() {\n    var _a, _b;\n    await updateFile();\n    const type = toValue(dataType);\n    if (type === \"Text\")\n      data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n    else if (type === \"ArrayBuffer\")\n      data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n    else if (type === \"Blob\")\n      data.value = file.value;\n  }\n  watch(() => toValue(dataType), updateData);\n  return {\n    isSupported,\n    data,\n    file,\n    fileName,\n    fileMIME,\n    fileSize,\n    fileLastModified,\n    open,\n    create,\n    save,\n    saveAs,\n    updateData\n  };\n}\n\nfunction useFocus(target, options = {}) {\n  const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n  const innerFocused = shallowRef(false);\n  const targetElement = computed(() => unrefElement(target));\n  const listenerOptions = { passive: true };\n  useEventListener(targetElement, \"focus\", (event) => {\n    var _a, _b;\n    if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n      innerFocused.value = true;\n  }, listenerOptions);\n  useEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n  const focused = computed({\n    get: () => innerFocused.value,\n    set(value) {\n      var _a, _b;\n      if (!value && innerFocused.value)\n        (_a = targetElement.value) == null ? void 0 : _a.blur();\n      else if (value && !innerFocused.value)\n        (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll });\n    }\n  });\n  watch(\n    targetElement,\n    () => {\n      focused.value = initialValue;\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  return { focused };\n}\n\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\nfunction useFocusWithin(target, options = {}) {\n  const { window = defaultWindow } = options;\n  const targetElement = computed(() => unrefElement(target));\n  const _focused = shallowRef(false);\n  const focused = computed(() => _focused.value);\n  const activeElement = useActiveElement(options);\n  if (!window || !activeElement.value) {\n    return { focused };\n  }\n  const listenerOptions = { passive: true };\n  useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n  useEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n    var _a, _b, _c;\n    return _focused.value = (_c = (_b = (_a = targetElement.value) == null ? void 0 : _a.matches) == null ? void 0 : _b.call(_a, PSEUDO_CLASS_FOCUS_WITHIN)) != null ? _c : false;\n  }, listenerOptions);\n  return { focused };\n}\n\nfunction useFps(options) {\n  var _a;\n  const fps = shallowRef(0);\n  if (typeof performance === \"undefined\")\n    return fps;\n  const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n  let last = performance.now();\n  let ticks = 0;\n  useRafFn(() => {\n    ticks += 1;\n    if (ticks >= every) {\n      const now = performance.now();\n      const diff = now - last;\n      fps.value = Math.round(1e3 / (diff / ticks));\n      last = now;\n      ticks = 0;\n    }\n  });\n  return fps;\n}\n\nconst eventHandlers = [\n  \"fullscreenchange\",\n  \"webkitfullscreenchange\",\n  \"webkitendfullscreen\",\n  \"mozfullscreenchange\",\n  \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n  const {\n    document = defaultDocument,\n    autoExit = false\n  } = options;\n  const targetRef = computed(() => {\n    var _a;\n    return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.documentElement;\n  });\n  const isFullscreen = shallowRef(false);\n  const requestMethod = computed(() => {\n    return [\n      \"requestFullscreen\",\n      \"webkitRequestFullscreen\",\n      \"webkitEnterFullscreen\",\n      \"webkitEnterFullScreen\",\n      \"webkitRequestFullScreen\",\n      \"mozRequestFullScreen\",\n      \"msRequestFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const exitMethod = computed(() => {\n    return [\n      \"exitFullscreen\",\n      \"webkitExitFullscreen\",\n      \"webkitExitFullScreen\",\n      \"webkitCancelFullScreen\",\n      \"mozCancelFullScreen\",\n      \"msExitFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenEnabled = computed(() => {\n    return [\n      \"fullScreen\",\n      \"webkitIsFullScreen\",\n      \"webkitDisplayingFullscreen\",\n      \"mozFullScreen\",\n      \"msFullscreenElement\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenElementMethod = [\n    \"fullscreenElement\",\n    \"webkitFullscreenElement\",\n    \"mozFullScreenElement\",\n    \"msFullscreenElement\"\n  ].find((m) => document && m in document);\n  const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n  const isCurrentElementFullScreen = () => {\n    if (fullscreenElementMethod)\n      return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n    return false;\n  };\n  const isElementFullScreen = () => {\n    if (fullscreenEnabled.value) {\n      if (document && document[fullscreenEnabled.value] != null) {\n        return document[fullscreenEnabled.value];\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n          return Boolean(target2[fullscreenEnabled.value]);\n        }\n      }\n    }\n    return false;\n  };\n  async function exit() {\n    if (!isSupported.value || !isFullscreen.value)\n      return;\n    if (exitMethod.value) {\n      if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n        await document[exitMethod.value]();\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n          await target2[exitMethod.value]();\n      }\n    }\n    isFullscreen.value = false;\n  }\n  async function enter() {\n    if (!isSupported.value || isFullscreen.value)\n      return;\n    if (isElementFullScreen())\n      await exit();\n    const target2 = targetRef.value;\n    if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n      await target2[requestMethod.value]();\n      isFullscreen.value = true;\n    }\n  }\n  async function toggle() {\n    await (isFullscreen.value ? exit() : enter());\n  }\n  const handlerCallback = () => {\n    const isElementFullScreenValue = isElementFullScreen();\n    if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n      isFullscreen.value = isElementFullScreenValue;\n  };\n  const listenerOptions = { capture: false, passive: true };\n  useEventListener(document, eventHandlers, handlerCallback, listenerOptions);\n  useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n  if (autoExit)\n    tryOnScopeDispose(exit);\n  return {\n    isSupported,\n    isFullscreen,\n    enter,\n    exit,\n    toggle\n  };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n  return computed(() => {\n    if (gamepad.value) {\n      return {\n        buttons: {\n          a: gamepad.value.buttons[0],\n          b: gamepad.value.buttons[1],\n          x: gamepad.value.buttons[2],\n          y: gamepad.value.buttons[3]\n        },\n        bumper: {\n          left: gamepad.value.buttons[4],\n          right: gamepad.value.buttons[5]\n        },\n        triggers: {\n          left: gamepad.value.buttons[6],\n          right: gamepad.value.buttons[7]\n        },\n        stick: {\n          left: {\n            horizontal: gamepad.value.axes[0],\n            vertical: gamepad.value.axes[1],\n            button: gamepad.value.buttons[10]\n          },\n          right: {\n            horizontal: gamepad.value.axes[2],\n            vertical: gamepad.value.axes[3],\n            button: gamepad.value.buttons[11]\n          }\n        },\n        dpad: {\n          up: gamepad.value.buttons[12],\n          down: gamepad.value.buttons[13],\n          left: gamepad.value.buttons[14],\n          right: gamepad.value.buttons[15]\n        },\n        back: gamepad.value.buttons[8],\n        start: gamepad.value.buttons[9]\n      };\n    }\n    return null;\n  });\n}\nfunction useGamepad(options = {}) {\n  const {\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n  const gamepads = ref([]);\n  const onConnectedHook = createEventHook();\n  const onDisconnectedHook = createEventHook();\n  const stateFromGamepad = (gamepad) => {\n    const hapticActuators = [];\n    const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n    if (vibrationActuator)\n      hapticActuators.push(vibrationActuator);\n    if (gamepad.hapticActuators)\n      hapticActuators.push(...gamepad.hapticActuators);\n    return {\n      id: gamepad.id,\n      index: gamepad.index,\n      connected: gamepad.connected,\n      mapping: gamepad.mapping,\n      timestamp: gamepad.timestamp,\n      vibrationActuator: gamepad.vibrationActuator,\n      hapticActuators,\n      axes: gamepad.axes.map((axes) => axes),\n      buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n    };\n  };\n  const updateGamepadState = () => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (const gamepad of _gamepads) {\n      if (gamepad && gamepads.value[gamepad.index])\n        gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n    }\n  };\n  const { isActive, pause, resume } = useRafFn(updateGamepadState);\n  const onGamepadConnected = (gamepad) => {\n    if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n      gamepads.value.push(stateFromGamepad(gamepad));\n      onConnectedHook.trigger(gamepad.index);\n    }\n    resume();\n  };\n  const onGamepadDisconnected = (gamepad) => {\n    gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n    onDisconnectedHook.trigger(gamepad.index);\n  };\n  const listenerOptions = { passive: true };\n  useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n  useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n  tryOnMounted(() => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (const gamepad of _gamepads) {\n      if (gamepad && gamepads.value[gamepad.index])\n        onGamepadConnected(gamepad);\n    }\n  });\n  pause();\n  return {\n    isSupported,\n    onConnected: onConnectedHook.on,\n    onDisconnected: onDisconnectedHook.on,\n    gamepads,\n    pause,\n    resume,\n    isActive\n  };\n}\n\nfunction useGeolocation(options = {}) {\n  const {\n    enableHighAccuracy = true,\n    maximumAge = 3e4,\n    timeout = 27e3,\n    navigator = defaultNavigator,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n  const locatedAt = shallowRef(null);\n  const error = shallowRef(null);\n  const coords = ref({\n    accuracy: 0,\n    latitude: Number.POSITIVE_INFINITY,\n    longitude: Number.POSITIVE_INFINITY,\n    altitude: null,\n    altitudeAccuracy: null,\n    heading: null,\n    speed: null\n  });\n  function updatePosition(position) {\n    locatedAt.value = position.timestamp;\n    coords.value = position.coords;\n    error.value = null;\n  }\n  let watcher;\n  function resume() {\n    if (isSupported.value) {\n      watcher = navigator.geolocation.watchPosition(\n        updatePosition,\n        (err) => error.value = err,\n        {\n          enableHighAccuracy,\n          maximumAge,\n          timeout\n        }\n      );\n    }\n  }\n  if (immediate)\n    resume();\n  function pause() {\n    if (watcher && navigator)\n      navigator.geolocation.clearWatch(watcher);\n  }\n  tryOnScopeDispose(() => {\n    pause();\n  });\n  return {\n    isSupported,\n    coords,\n    locatedAt,\n    error,\n    resume,\n    pause\n  };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n  const {\n    initialState = false,\n    listenForVisibilityChange = true,\n    events = defaultEvents$1,\n    window = defaultWindow,\n    eventFilter = throttleFilter(50)\n  } = options;\n  const idle = shallowRef(initialState);\n  const lastActive = shallowRef(timestamp());\n  let timer;\n  const reset = () => {\n    idle.value = false;\n    clearTimeout(timer);\n    timer = setTimeout(() => idle.value = true, timeout);\n  };\n  const onEvent = createFilterWrapper(\n    eventFilter,\n    () => {\n      lastActive.value = timestamp();\n      reset();\n    }\n  );\n  if (window) {\n    const document = window.document;\n    const listenerOptions = { passive: true };\n    for (const event of events)\n      useEventListener(window, event, onEvent, listenerOptions);\n    if (listenForVisibilityChange) {\n      useEventListener(document, \"visibilitychange\", () => {\n        if (!document.hidden)\n          onEvent();\n      }, listenerOptions);\n    }\n    reset();\n  }\n  return {\n    idle,\n    lastActive,\n    reset\n  };\n}\n\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n    img.src = src;\n    if (srcset != null)\n      img.srcset = srcset;\n    if (sizes != null)\n      img.sizes = sizes;\n    if (clazz != null)\n      img.className = clazz;\n    if (loading != null)\n      img.loading = loading;\n    if (crossorigin != null)\n      img.crossOrigin = crossorigin;\n    if (referrerPolicy != null)\n      img.referrerPolicy = referrerPolicy;\n    if (width != null)\n      img.width = width;\n    if (height != null)\n      img.height = height;\n    if (decoding != null)\n      img.decoding = decoding;\n    if (fetchPriority != null)\n      img.fetchPriority = fetchPriority;\n    if (ismap != null)\n      img.isMap = ismap;\n    if (usemap != null)\n      img.useMap = usemap;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n  const state = useAsyncState(\n    () => loadImage(toValue(options)),\n    void 0,\n    {\n      resetOnExecute: true,\n      ...asyncStateOptions\n    }\n  );\n  watch(\n    () => toValue(options),\n    () => state.execute(asyncStateOptions.delay),\n    { deep: true }\n  );\n  return state;\n}\n\nfunction resolveElement(el) {\n  if (typeof Window !== \"undefined\" && el instanceof Window)\n    return el.document.documentElement;\n  if (typeof Document !== \"undefined\" && el instanceof Document)\n    return el.documentElement;\n  return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\",\n    window = defaultWindow,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const internalX = shallowRef(0);\n  const internalY = shallowRef(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c, _d;\n    if (!window)\n      return;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = toValue(_y)) != null ? _a : y.value,\n      left: (_b = toValue(_x)) != null ? _b : x.value,\n      behavior: toValue(behavior)\n    });\n    const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n    if (x != null)\n      internalX.value = scrollContainer.scrollLeft;\n    if (y != null)\n      internalY.value = scrollContainer.scrollTop;\n  }\n  const isScrolling = shallowRef(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = (e) => {\n    if (!isScrolling.value)\n      return;\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  };\n  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n  const setArrivedState = (target) => {\n    var _a;\n    if (!window)\n      return;\n    const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n    const { display, flexDirection, direction } = getComputedStyle(el);\n    const directionMultipler = direction === \"rtl\" ? -1 : 1;\n    const scrollLeft = el.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalX.value;\n    const left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n    const right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"row-reverse\") {\n      arrivedState.left = right;\n      arrivedState.right = left;\n    } else {\n      arrivedState.left = left;\n      arrivedState.right = right;\n    }\n    internalX.value = scrollLeft;\n    let scrollTop = el.scrollTop;\n    if (target === window.document && !scrollTop)\n      scrollTop = window.document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= (offset.top || 0);\n    const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"column-reverse\") {\n      arrivedState.top = bottom;\n      arrivedState.bottom = top;\n    } else {\n      arrivedState.top = top;\n      arrivedState.bottom = bottom;\n    }\n    internalY.value = scrollTop;\n  };\n  const onScrollHandler = (e) => {\n    var _a;\n    if (!window)\n      return;\n    const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n    setArrivedState(eventTarget);\n    isScrolling.value = true;\n    onScrollEndDebounced(e);\n    onScroll(e);\n  };\n  useEventListener(\n    element,\n    \"scroll\",\n    throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n    eventListenerOptions\n  );\n  tryOnMounted(() => {\n    try {\n      const _element = toValue(element);\n      if (!_element)\n        return;\n      setArrivedState(_element);\n    } catch (e) {\n      onError(e);\n    }\n  });\n  useEventListener(\n    element,\n    \"scrollend\",\n    onScrollEnd,\n    eventListenerOptions\n  );\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions,\n    measure() {\n      const _element = toValue(element);\n      if (window && _element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100,\n    canLoadMore = () => true\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    {\n      ...options,\n      offset: {\n        [direction]: (_a = options.distance) != null ? _a : 0,\n        ...options.offset\n      }\n    }\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  const observedElement = computed(() => {\n    return resolveElement(toValue(element));\n  });\n  const isElementVisible = useElementVisibility(observedElement);\n  function checkAndLoad() {\n    state.measure();\n    if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n      return;\n    const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n    if (state.arrivedState[direction] || isNarrower) {\n      if (!promise.value) {\n        promise.value = Promise.all([\n          onLoadMore(state),\n          new Promise((resolve) => setTimeout(resolve, interval))\n        ]).finally(() => {\n          promise.value = null;\n          nextTick(() => checkAndLoad());\n        });\n      }\n    }\n  }\n  const stop = watch(\n    () => [state.arrivedState[direction], isElementVisible.value],\n    checkAndLoad,\n    { immediate: true }\n  );\n  tryOnUnmounted(stop);\n  return {\n    isLoading,\n    reset() {\n      nextTick(() => checkAndLoad());\n    }\n  };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n  const {\n    events = defaultEvents,\n    document = defaultDocument,\n    initial = null\n  } = options;\n  const state = shallowRef(initial);\n  if (document) {\n    events.forEach((listenerEvent) => {\n      useEventListener(document, listenerEvent, (evt) => {\n        if (typeof evt.getModifierState === \"function\")\n          state.value = evt.getModifierState(modifier);\n      }, { passive: true });\n    });\n  }\n  return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n  ctrl: \"control\",\n  command: \"meta\",\n  cmd: \"meta\",\n  option: \"alt\",\n  up: \"arrowup\",\n  down: \"arrowdown\",\n  left: \"arrowleft\",\n  right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n  const {\n    reactive: useReactive = false,\n    target = defaultWindow,\n    aliasMap = DefaultMagicKeysAliasMap,\n    passive = true,\n    onEventFired = noop\n  } = options;\n  const current = reactive(/* @__PURE__ */ new Set());\n  const obj = {\n    toJSON() {\n      return {};\n    },\n    current\n  };\n  const refs = useReactive ? reactive(obj) : obj;\n  const metaDeps = /* @__PURE__ */ new Set();\n  const usedKeys = /* @__PURE__ */ new Set();\n  function setRefs(key, value) {\n    if (key in refs) {\n      if (useReactive)\n        refs[key] = value;\n      else\n        refs[key].value = value;\n    }\n  }\n  function reset() {\n    current.clear();\n    for (const key of usedKeys)\n      setRefs(key, false);\n  }\n  function updateRefs(e, value) {\n    var _a, _b;\n    const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n    const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n    const values = [code, key].filter(Boolean);\n    if (key) {\n      if (value)\n        current.add(key);\n      else\n        current.delete(key);\n    }\n    for (const key2 of values) {\n      usedKeys.add(key2);\n      setRefs(key2, value);\n    }\n    if (key === \"meta\" && !value) {\n      metaDeps.forEach((key2) => {\n        current.delete(key2);\n        setRefs(key2, false);\n      });\n      metaDeps.clear();\n    } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n      [...current, ...values].forEach((key2) => metaDeps.add(key2));\n    }\n  }\n  useEventListener(target, \"keydown\", (e) => {\n    updateRefs(e, true);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(target, \"keyup\", (e) => {\n    updateRefs(e, false);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(\"blur\", reset, { passive });\n  useEventListener(\"focus\", reset, { passive });\n  const proxy = new Proxy(\n    refs,\n    {\n      get(target2, prop, rec) {\n        if (typeof prop !== \"string\")\n          return Reflect.get(target2, prop, rec);\n        prop = prop.toLowerCase();\n        if (prop in aliasMap)\n          prop = aliasMap[prop];\n        if (!(prop in refs)) {\n          if (/[+_-]/.test(prop)) {\n            const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n            refs[prop] = computed(() => keys.map((key) => toValue(proxy[key])).every(Boolean));\n          } else {\n            refs[prop] = shallowRef(false);\n          }\n        }\n        const r = Reflect.get(target2, prop, rec);\n        return useReactive ? toValue(r) : r;\n      }\n    }\n  );\n  return proxy;\n}\n\nfunction usingElRef(source, cb) {\n  if (toValue(source))\n    cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n  let ranges = [];\n  for (let i = 0; i < timeRanges.length; ++i)\n    ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n  return ranges;\n}\nfunction tracksToArray(tracks) {\n  return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n  src: \"\",\n  tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n  target = toRef(target);\n  options = {\n    ...defaultOptions,\n    ...options\n  };\n  const {\n    document = defaultDocument\n  } = options;\n  const listenerOptions = { passive: true };\n  const currentTime = shallowRef(0);\n  const duration = shallowRef(0);\n  const seeking = shallowRef(false);\n  const volume = shallowRef(1);\n  const waiting = shallowRef(false);\n  const ended = shallowRef(false);\n  const playing = shallowRef(false);\n  const rate = shallowRef(1);\n  const stalled = shallowRef(false);\n  const buffered = ref([]);\n  const tracks = ref([]);\n  const selectedTrack = shallowRef(-1);\n  const isPictureInPicture = shallowRef(false);\n  const muted = shallowRef(false);\n  const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n  const sourceErrorEvent = createEventHook();\n  const playbackErrorEvent = createEventHook();\n  const disableTrack = (track) => {\n    usingElRef(target, (el) => {\n      if (track) {\n        const id = typeof track === \"number\" ? track : track.id;\n        el.textTracks[id].mode = \"disabled\";\n      } else {\n        for (let i = 0; i < el.textTracks.length; ++i)\n          el.textTracks[i].mode = \"disabled\";\n      }\n      selectedTrack.value = -1;\n    });\n  };\n  const enableTrack = (track, disableTracks = true) => {\n    usingElRef(target, (el) => {\n      const id = typeof track === \"number\" ? track : track.id;\n      if (disableTracks)\n        disableTrack();\n      el.textTracks[id].mode = \"showing\";\n      selectedTrack.value = id;\n    });\n  };\n  const togglePictureInPicture = () => {\n    return new Promise((resolve, reject) => {\n      usingElRef(target, async (el) => {\n        if (supportsPictureInPicture) {\n          if (!isPictureInPicture.value) {\n            el.requestPictureInPicture().then(resolve).catch(reject);\n          } else {\n            document.exitPictureInPicture().then(resolve).catch(reject);\n          }\n        }\n      });\n    });\n  };\n  watchEffect(() => {\n    if (!document)\n      return;\n    const el = toValue(target);\n    if (!el)\n      return;\n    const src = toValue(options.src);\n    let sources = [];\n    if (!src)\n      return;\n    if (typeof src === \"string\")\n      sources = [{ src }];\n    else if (Array.isArray(src))\n      sources = src;\n    else if (isObject(src))\n      sources = [src];\n    el.querySelectorAll(\"source\").forEach((e) => {\n      e.remove();\n    });\n    sources.forEach(({ src: src2, type, media }) => {\n      const source = document.createElement(\"source\");\n      source.setAttribute(\"src\", src2);\n      source.setAttribute(\"type\", type || \"\");\n      source.setAttribute(\"media\", media || \"\");\n      useEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n      el.appendChild(source);\n    });\n    el.load();\n  });\n  watch([target, volume], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.volume = volume.value;\n  });\n  watch([target, muted], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.muted = muted.value;\n  });\n  watch([target, rate], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.playbackRate = rate.value;\n  });\n  watchEffect(() => {\n    if (!document)\n      return;\n    const textTracks = toValue(options.tracks);\n    const el = toValue(target);\n    if (!textTracks || !textTracks.length || !el)\n      return;\n    el.querySelectorAll(\"track\").forEach((e) => e.remove());\n    textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n      const track = document.createElement(\"track\");\n      track.default = isDefault || false;\n      track.kind = kind;\n      track.label = label;\n      track.src = src;\n      track.srclang = srcLang;\n      if (track.default)\n        selectedTrack.value = i;\n      el.appendChild(track);\n    });\n  });\n  const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.currentTime = time;\n  });\n  const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    if (isPlaying) {\n      el.play().catch((e) => {\n        playbackErrorEvent.trigger(e);\n        throw e;\n      });\n    } else {\n      el.pause();\n    }\n  });\n  useEventListener(\n    target,\n    \"timeupdate\",\n    () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime),\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"durationchange\",\n    () => duration.value = toValue(target).duration,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"progress\",\n    () => buffered.value = timeRangeToArray(toValue(target).buffered),\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"seeking\",\n    () => seeking.value = true,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"seeked\",\n    () => seeking.value = false,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    [\"waiting\", \"loadstart\"],\n    () => {\n      waiting.value = true;\n      ignorePlayingUpdates(() => playing.value = false);\n    },\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"loadeddata\",\n    () => waiting.value = false,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"playing\",\n    () => {\n      waiting.value = false;\n      ended.value = false;\n      ignorePlayingUpdates(() => playing.value = true);\n    },\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"ratechange\",\n    () => rate.value = toValue(target).playbackRate,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"stalled\",\n    () => stalled.value = true,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"ended\",\n    () => ended.value = true,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"pause\",\n    () => ignorePlayingUpdates(() => playing.value = false),\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"play\",\n    () => ignorePlayingUpdates(() => playing.value = true),\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"enterpictureinpicture\",\n    () => isPictureInPicture.value = true,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"leavepictureinpicture\",\n    () => isPictureInPicture.value = false,\n    listenerOptions\n  );\n  useEventListener(\n    target,\n    \"volumechange\",\n    () => {\n      const el = toValue(target);\n      if (!el)\n        return;\n      volume.value = el.volume;\n      muted.value = el.muted;\n    },\n    listenerOptions\n  );\n  const listeners = [];\n  const stop = watch([target], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    stop();\n    listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n    listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n    listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n  });\n  tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n  return {\n    currentTime,\n    duration,\n    waiting,\n    seeking,\n    ended,\n    stalled,\n    buffered,\n    playing,\n    rate,\n    // Volume\n    volume,\n    muted,\n    // Tracks\n    tracks,\n    selectedTrack,\n    enableTrack,\n    disableTrack,\n    // Picture in Picture\n    supportsPictureInPicture,\n    togglePictureInPicture,\n    isPictureInPicture,\n    // Events\n    onSourceError: sourceErrorEvent.on,\n    onPlaybackError: playbackErrorEvent.on\n  };\n}\n\nfunction useMemoize(resolver, options) {\n  const initCache = () => {\n    if (options == null ? void 0 : options.cache)\n      return shallowReactive(options.cache);\n    return shallowReactive(/* @__PURE__ */ new Map());\n  };\n  const cache = initCache();\n  const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n  const _loadData = (key, ...args) => {\n    cache.set(key, resolver(...args));\n    return cache.get(key);\n  };\n  const loadData = (...args) => _loadData(generateKey(...args), ...args);\n  const deleteData = (...args) => {\n    cache.delete(generateKey(...args));\n  };\n  const clearData = () => {\n    cache.clear();\n  };\n  const memoized = (...args) => {\n    const key = generateKey(...args);\n    if (cache.has(key))\n      return cache.get(key);\n    return _loadData(key, ...args);\n  };\n  memoized.load = loadData;\n  memoized.delete = deleteData;\n  memoized.clear = clearData;\n  memoized.generateKey = generateKey;\n  memoized.cache = cache;\n  return memoized;\n}\n\nfunction useMemory(options = {}) {\n  const memory = ref();\n  const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n  if (isSupported.value) {\n    const { interval = 1e3 } = options;\n    useIntervalFn(() => {\n      memory.value = performance.memory;\n    }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n  }\n  return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n  page: (event) => [event.pageX, event.pageY],\n  client: (event) => [event.clientX, event.clientY],\n  screen: (event) => [event.screenX, event.screenY],\n  movement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\nfunction useMouse(options = {}) {\n  const {\n    type = \"page\",\n    touch = true,\n    resetOnTouchEnds = false,\n    initialValue = { x: 0, y: 0 },\n    window = defaultWindow,\n    target = window,\n    scroll = true,\n    eventFilter\n  } = options;\n  let _prevMouseEvent = null;\n  let _prevScrollX = 0;\n  let _prevScrollY = 0;\n  const x = shallowRef(initialValue.x);\n  const y = shallowRef(initialValue.y);\n  const sourceType = shallowRef(null);\n  const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n  const mouseHandler = (event) => {\n    const result = extractor(event);\n    _prevMouseEvent = event;\n    if (result) {\n      [x.value, y.value] = result;\n      sourceType.value = \"mouse\";\n    }\n    if (window) {\n      _prevScrollX = window.scrollX;\n      _prevScrollY = window.scrollY;\n    }\n  };\n  const touchHandler = (event) => {\n    if (event.touches.length > 0) {\n      const result = extractor(event.touches[0]);\n      if (result) {\n        [x.value, y.value] = result;\n        sourceType.value = \"touch\";\n      }\n    }\n  };\n  const scrollHandler = () => {\n    if (!_prevMouseEvent || !window)\n      return;\n    const pos = extractor(_prevMouseEvent);\n    if (_prevMouseEvent instanceof MouseEvent && pos) {\n      x.value = pos[0] + window.scrollX - _prevScrollX;\n      y.value = pos[1] + window.scrollY - _prevScrollY;\n    }\n  };\n  const reset = () => {\n    x.value = initialValue.x;\n    y.value = initialValue.y;\n  };\n  const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n  const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n  const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n    if (touch && type !== \"movement\") {\n      useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n      if (resetOnTouchEnds)\n        useEventListener(target, \"touchend\", reset, listenerOptions);\n    }\n    if (scroll && type === \"page\")\n      useEventListener(window, \"scroll\", scrollHandlerWrapper, listenerOptions);\n  }\n  return {\n    x,\n    y,\n    sourceType\n  };\n}\n\nfunction useMouseInElement(target, options = {}) {\n  const {\n    handleOutside = true,\n    window = defaultWindow\n  } = options;\n  const type = options.type || \"page\";\n  const { x, y, sourceType } = useMouse(options);\n  const targetRef = shallowRef(target != null ? target : window == null ? void 0 : window.document.body);\n  const elementX = shallowRef(0);\n  const elementY = shallowRef(0);\n  const elementPositionX = shallowRef(0);\n  const elementPositionY = shallowRef(0);\n  const elementHeight = shallowRef(0);\n  const elementWidth = shallowRef(0);\n  const isOutside = shallowRef(true);\n  let stop = () => {\n  };\n  if (window) {\n    stop = watch(\n      [targetRef, x, y],\n      () => {\n        const el = unrefElement(targetRef);\n        if (!el || !(el instanceof Element))\n          return;\n        const {\n          left,\n          top,\n          width,\n          height\n        } = el.getBoundingClientRect();\n        elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n        elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n        elementHeight.value = height;\n        elementWidth.value = width;\n        const elX = x.value - elementPositionX.value;\n        const elY = y.value - elementPositionY.value;\n        isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n        if (handleOutside || !isOutside.value) {\n          elementX.value = elX;\n          elementY.value = elY;\n        }\n      },\n      { immediate: true }\n    );\n    useEventListener(\n      document,\n      \"mouseleave\",\n      () => isOutside.value = true,\n      { passive: true }\n    );\n  }\n  return {\n    x,\n    y,\n    sourceType,\n    elementX,\n    elementY,\n    elementPositionX,\n    elementPositionY,\n    elementHeight,\n    elementWidth,\n    isOutside,\n    stop\n  };\n}\n\nfunction useMousePressed(options = {}) {\n  const {\n    touch = true,\n    drag = true,\n    capture = false,\n    initialValue = false,\n    window = defaultWindow\n  } = options;\n  const pressed = shallowRef(initialValue);\n  const sourceType = shallowRef(null);\n  if (!window) {\n    return {\n      pressed,\n      sourceType\n    };\n  }\n  const onPressed = (srcType) => (event) => {\n    var _a;\n    pressed.value = true;\n    sourceType.value = srcType;\n    (_a = options.onPressed) == null ? void 0 : _a.call(options, event);\n  };\n  const onReleased = (event) => {\n    var _a;\n    pressed.value = false;\n    sourceType.value = null;\n    (_a = options.onReleased) == null ? void 0 : _a.call(options, event);\n  };\n  const target = computed(() => unrefElement(options.target) || window);\n  const listenerOptions = { passive: true, capture };\n  useEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n  useEventListener(window, \"mouseleave\", onReleased, listenerOptions);\n  useEventListener(window, \"mouseup\", onReleased, listenerOptions);\n  if (drag) {\n    useEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n    useEventListener(window, \"drop\", onReleased, listenerOptions);\n    useEventListener(window, \"dragend\", onReleased, listenerOptions);\n  }\n  if (touch) {\n    useEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n    useEventListener(window, \"touchend\", onReleased, listenerOptions);\n    useEventListener(window, \"touchcancel\", onReleased, listenerOptions);\n  }\n  return {\n    pressed,\n    sourceType\n  };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"language\" in navigator);\n  const language = shallowRef(navigator == null ? void 0 : navigator.language);\n  useEventListener(window, \"languagechange\", () => {\n    if (navigator)\n      language.value = navigator.language;\n  }, { passive: true });\n  return {\n    isSupported,\n    language\n  };\n}\n\nfunction useNetwork(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n  const isOnline = shallowRef(true);\n  const saveData = shallowRef(false);\n  const offlineAt = shallowRef(void 0);\n  const onlineAt = shallowRef(void 0);\n  const downlink = shallowRef(void 0);\n  const downlinkMax = shallowRef(void 0);\n  const rtt = shallowRef(void 0);\n  const effectiveType = shallowRef(void 0);\n  const type = shallowRef(\"unknown\");\n  const connection = isSupported.value && navigator.connection;\n  function updateNetworkInformation() {\n    if (!navigator)\n      return;\n    isOnline.value = navigator.onLine;\n    offlineAt.value = isOnline.value ? void 0 : Date.now();\n    onlineAt.value = isOnline.value ? Date.now() : void 0;\n    if (connection) {\n      downlink.value = connection.downlink;\n      downlinkMax.value = connection.downlinkMax;\n      effectiveType.value = connection.effectiveType;\n      rtt.value = connection.rtt;\n      saveData.value = connection.saveData;\n      type.value = connection.type;\n    }\n  }\n  const listenerOptions = { passive: true };\n  if (window) {\n    useEventListener(window, \"offline\", () => {\n      isOnline.value = false;\n      offlineAt.value = Date.now();\n    }, listenerOptions);\n    useEventListener(window, \"online\", () => {\n      isOnline.value = true;\n      onlineAt.value = Date.now();\n    }, listenerOptions);\n  }\n  if (connection)\n    useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n  updateNetworkInformation();\n  return {\n    isSupported,\n    isOnline: readonly(isOnline),\n    saveData: readonly(saveData),\n    offlineAt: readonly(offlineAt),\n    onlineAt: readonly(onlineAt),\n    downlink: readonly(downlink),\n    downlinkMax: readonly(downlinkMax),\n    effectiveType: readonly(effectiveType),\n    rtt: readonly(rtt),\n    type: readonly(type)\n  };\n}\n\nfunction useNow(options = {}) {\n  const {\n    controls: exposeControls = false,\n    interval = \"requestAnimationFrame\"\n  } = options;\n  const now = ref(/* @__PURE__ */ new Date());\n  const update = () => now.value = /* @__PURE__ */ new Date();\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n  if (exposeControls) {\n    return {\n      now,\n      ...controls\n    };\n  } else {\n    return now;\n  }\n}\n\nfunction useObjectUrl(object) {\n  const url = shallowRef();\n  const release = () => {\n    if (url.value)\n      URL.revokeObjectURL(url.value);\n    url.value = void 0;\n  };\n  watch(\n    () => toValue(object),\n    (newObject) => {\n      release();\n      if (newObject)\n        url.value = URL.createObjectURL(newObject);\n    },\n    { immediate: true }\n  );\n  tryOnScopeDispose(release);\n  return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n  if (typeof value === \"function\" || isReadonly(value))\n    return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n  const _value = ref(value);\n  return computed({\n    get() {\n      return _value.value = clamp(_value.value, toValue(min), toValue(max));\n    },\n    set(value2) {\n      _value.value = clamp(value2, toValue(min), toValue(max));\n    }\n  });\n}\n\nfunction useOffsetPagination(options) {\n  const {\n    total = Number.POSITIVE_INFINITY,\n    pageSize = 10,\n    page = 1,\n    onPageChange = noop,\n    onPageSizeChange = noop,\n    onPageCountChange = noop\n  } = options;\n  const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n  const pageCount = computed(() => Math.max(\n    1,\n    Math.ceil(toValue(total) / toValue(currentPageSize))\n  ));\n  const currentPage = useClamp(page, 1, pageCount);\n  const isFirstPage = computed(() => currentPage.value === 1);\n  const isLastPage = computed(() => currentPage.value === pageCount.value);\n  if (isRef(page)) {\n    syncRef(page, currentPage, {\n      direction: isReadonly(page) ? \"ltr\" : \"both\"\n    });\n  }\n  if (isRef(pageSize)) {\n    syncRef(pageSize, currentPageSize, {\n      direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n    });\n  }\n  function prev() {\n    currentPage.value--;\n  }\n  function next() {\n    currentPage.value++;\n  }\n  const returnValue = {\n    currentPage,\n    currentPageSize,\n    pageCount,\n    isFirstPage,\n    isLastPage,\n    prev,\n    next\n  };\n  watch(currentPage, () => {\n    onPageChange(reactive(returnValue));\n  });\n  watch(currentPageSize, () => {\n    onPageSizeChange(reactive(returnValue));\n  });\n  watch(pageCount, () => {\n    onPageCountChange(reactive(returnValue));\n  });\n  return returnValue;\n}\n\nfunction useOnline(options = {}) {\n  const { isOnline } = useNetwork(options);\n  return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n  const { window = defaultWindow } = options;\n  const isLeft = shallowRef(false);\n  const handler = (event) => {\n    if (!window)\n      return;\n    event = event || window.event;\n    const from = event.relatedTarget || event.toElement;\n    isLeft.value = !from;\n  };\n  if (window) {\n    const listenerOptions = { passive: true };\n    useEventListener(window, \"mouseout\", handler, listenerOptions);\n    useEventListener(window.document, \"mouseleave\", handler, listenerOptions);\n    useEventListener(window.document, \"mouseenter\", handler, listenerOptions);\n  }\n  return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n  const screenOrientation = isSupported.value ? window.screen.orientation : {};\n  const orientation = ref(screenOrientation.type);\n  const angle = shallowRef(screenOrientation.angle || 0);\n  if (isSupported.value) {\n    useEventListener(window, \"orientationchange\", () => {\n      orientation.value = screenOrientation.type;\n      angle.value = screenOrientation.angle;\n    }, { passive: true });\n  }\n  const lockOrientation = (type) => {\n    if (isSupported.value && typeof screenOrientation.lock === \"function\")\n      return screenOrientation.lock(type);\n    return Promise.reject(new Error(\"Not supported\"));\n  };\n  const unlockOrientation = () => {\n    if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n      screenOrientation.unlock();\n  };\n  return {\n    isSupported,\n    orientation,\n    angle,\n    lockOrientation,\n    unlockOrientation\n  };\n}\n\nfunction useParallax(target, options = {}) {\n  const {\n    deviceOrientationTiltAdjust = (i) => i,\n    deviceOrientationRollAdjust = (i) => i,\n    mouseTiltAdjust = (i) => i,\n    mouseRollAdjust = (i) => i,\n    window = defaultWindow\n  } = options;\n  const orientation = reactive(useDeviceOrientation({ window }));\n  const screenOrientation = reactive(useScreenOrientation({ window }));\n  const {\n    elementX: x,\n    elementY: y,\n    elementWidth: width,\n    elementHeight: height\n  } = useMouseInElement(target, { handleOutside: false, window });\n  const source = computed(() => {\n    if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n      return \"deviceOrientation\";\n    }\n    return \"mouse\";\n  });\n  const roll = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      let value;\n      switch (screenOrientation.orientation) {\n        case \"landscape-primary\":\n          value = orientation.gamma / 90;\n          break;\n        case \"landscape-secondary\":\n          value = -orientation.gamma / 90;\n          break;\n        case \"portrait-primary\":\n          value = -orientation.beta / 90;\n          break;\n        case \"portrait-secondary\":\n          value = orientation.beta / 90;\n          break;\n        default:\n          value = -orientation.beta / 90;\n      }\n      return deviceOrientationRollAdjust(value);\n    } else {\n      const value = -(y.value - height.value / 2) / height.value;\n      return mouseRollAdjust(value);\n    }\n  });\n  const tilt = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      let value;\n      switch (screenOrientation.orientation) {\n        case \"landscape-primary\":\n          value = orientation.beta / 90;\n          break;\n        case \"landscape-secondary\":\n          value = -orientation.beta / 90;\n          break;\n        case \"portrait-primary\":\n          value = orientation.gamma / 90;\n          break;\n        case \"portrait-secondary\":\n          value = -orientation.gamma / 90;\n          break;\n        default:\n          value = orientation.gamma / 90;\n      }\n      return deviceOrientationTiltAdjust(value);\n    } else {\n      const value = (x.value - width.value / 2) / width.value;\n      return mouseTiltAdjust(value);\n    }\n  });\n  return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n  const parentElement = shallowRef();\n  const update = () => {\n    const el = unrefElement(element);\n    if (el)\n      parentElement.value = el.parentElement;\n  };\n  tryOnMounted(update);\n  watch(() => toValue(element), update);\n  return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n  const {\n    window = defaultWindow,\n    immediate = true,\n    ...performanceOptions\n  } = options;\n  const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n  let observer;\n  const stop = () => {\n    observer == null ? void 0 : observer.disconnect();\n  };\n  const start = () => {\n    if (isSupported.value) {\n      stop();\n      observer = new PerformanceObserver(callback);\n      observer.observe(performanceOptions);\n    }\n  };\n  tryOnScopeDispose(stop);\n  if (immediate)\n    start();\n  return {\n    isSupported,\n    start,\n    stop\n  };\n}\n\nconst defaultState = {\n  x: 0,\n  y: 0,\n  pointerId: 0,\n  pressure: 0,\n  tiltX: 0,\n  tiltY: 0,\n  width: 0,\n  height: 0,\n  twist: 0,\n  pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n  const {\n    target = defaultWindow\n  } = options;\n  const isInside = shallowRef(false);\n  const state = ref(options.initialValue || {});\n  Object.assign(state.value, defaultState, state.value);\n  const handler = (event) => {\n    isInside.value = true;\n    if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n      return;\n    state.value = objectPick(event, keys, false);\n  };\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n    useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n  }\n  return {\n    ...toRefs(state),\n    isInside\n  };\n}\n\nfunction usePointerLock(target, options = {}) {\n  const { document = defaultDocument } = options;\n  const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n  const element = shallowRef();\n  const triggerElement = shallowRef();\n  let targetElement;\n  if (isSupported.value) {\n    const listenerOptions = { passive: true };\n    useEventListener(document, \"pointerlockchange\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        element.value = document.pointerLockElement;\n        if (!element.value)\n          targetElement = triggerElement.value = null;\n      }\n    }, listenerOptions);\n    useEventListener(document, \"pointerlockerror\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        const action = document.pointerLockElement ? \"release\" : \"acquire\";\n        throw new Error(`Failed to ${action} pointer lock.`);\n      }\n    }, listenerOptions);\n  }\n  async function lock(e) {\n    var _a;\n    if (!isSupported.value)\n      throw new Error(\"Pointer Lock API is not supported by your browser.\");\n    triggerElement.value = e instanceof Event ? e.currentTarget : null;\n    targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n    if (!targetElement)\n      throw new Error(\"Target element undefined.\");\n    targetElement.requestPointerLock();\n    return await until(element).toBe(targetElement);\n  }\n  async function unlock() {\n    if (!element.value)\n      return false;\n    document.exitPointerLock();\n    await until(element).toBeNull();\n    return true;\n  }\n  return {\n    isSupported,\n    element,\n    triggerElement,\n    lock,\n    unlock\n  };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n  const targetRef = toRef(target);\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    disableTextSelect = false\n  } = options;\n  const posStart = reactive({ x: 0, y: 0 });\n  const updatePosStart = (x, y) => {\n    posStart.x = x;\n    posStart.y = y;\n  };\n  const posEnd = reactive({ x: 0, y: 0 });\n  const updatePosEnd = (x, y) => {\n    posEnd.x = x;\n    posEnd.y = y;\n  };\n  const distanceX = computed(() => posStart.x - posEnd.x);\n  const distanceY = computed(() => posStart.y - posEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n  const isSwiping = shallowRef(false);\n  const isPointerDown = shallowRef(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(distanceX.value) > abs(distanceY.value)) {\n      return distanceX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return distanceY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const eventIsAllowed = (e) => {\n    var _a, _b, _c;\n    const isReleasingButton = e.buttons === 0;\n    const isPrimaryButton = e.buttons === 1;\n    return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n  };\n  const listenerOptions = { passive: true };\n  const stops = [\n    useEventListener(target, \"pointerdown\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      isPointerDown.value = true;\n      const eventTarget = e.target;\n      eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n      const { clientX: x, clientY: y } = e;\n      updatePosStart(x, y);\n      updatePosEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }, listenerOptions),\n    useEventListener(target, \"pointermove\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (!isPointerDown.value)\n        return;\n      const { clientX: x, clientY: y } = e;\n      updatePosEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }, listenerOptions),\n    useEventListener(target, \"pointerup\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (isSwiping.value)\n        onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n      isPointerDown.value = false;\n      isSwiping.value = false;\n    }, listenerOptions)\n  ];\n  tryOnMounted(() => {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n    if (disableTextSelect) {\n      (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n      (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n      (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n    }\n  });\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isSwiping: readonly(isSwiping),\n    direction: readonly(direction),\n    posStart: readonly(posStart),\n    posEnd: readonly(posEnd),\n    distanceX,\n    distanceY,\n    stop\n  };\n}\n\nfunction usePreferredColorScheme(options) {\n  const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n  const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n  return computed(() => {\n    if (isDark.value)\n      return \"dark\";\n    if (isLight.value)\n      return \"light\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredContrast(options) {\n  const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n  const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n  const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n  return computed(() => {\n    if (isMore.value)\n      return \"more\";\n    if (isLess.value)\n      return \"less\";\n    if (isCustom.value)\n      return \"custom\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredLanguages(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref([\"en\"]);\n  const navigator = window.navigator;\n  const value = ref(navigator.languages);\n  useEventListener(window, \"languagechange\", () => {\n    value.value = navigator.languages;\n  }, { passive: true });\n  return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n  const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n  return computed(() => {\n    if (isReduced.value)\n      return \"reduce\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredReducedTransparency(options) {\n  const isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n  return computed(() => {\n    if (isReduced.value)\n      return \"reduce\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePrevious(value, initialValue) {\n  const previous = shallowRef(initialValue);\n  watch(\n    toRef(value),\n    (_, oldValue) => {\n      previous.value = oldValue;\n    },\n    { flush: \"sync\" }\n  );\n  return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = shallowRef(\"\");\n  const right = shallowRef(\"\");\n  const bottom = shallowRef(\"\");\n  const left = shallowRef(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update), { passive: true });\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n  const {\n    immediate = true,\n    manual = false,\n    type = \"text/javascript\",\n    async = true,\n    crossOrigin,\n    referrerPolicy,\n    noModule,\n    defer,\n    document = defaultDocument,\n    attrs = {}\n  } = options;\n  const scriptTag = shallowRef(null);\n  let _promise = null;\n  const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n    const resolveWithElement = (el2) => {\n      scriptTag.value = el2;\n      resolve(el2);\n      return el2;\n    };\n    if (!document) {\n      resolve(false);\n      return;\n    }\n    let shouldAppend = false;\n    let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (!el) {\n      el = document.createElement(\"script\");\n      el.type = type;\n      el.async = async;\n      el.src = toValue(src);\n      if (defer)\n        el.defer = defer;\n      if (crossOrigin)\n        el.crossOrigin = crossOrigin;\n      if (noModule)\n        el.noModule = noModule;\n      if (referrerPolicy)\n        el.referrerPolicy = referrerPolicy;\n      Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n      shouldAppend = true;\n    } else if (el.hasAttribute(\"data-loaded\")) {\n      resolveWithElement(el);\n    }\n    const listenerOptions = {\n      passive: true\n    };\n    useEventListener(el, \"error\", (event) => reject(event), listenerOptions);\n    useEventListener(el, \"abort\", (event) => reject(event), listenerOptions);\n    useEventListener(el, \"load\", () => {\n      el.setAttribute(\"data-loaded\", \"true\");\n      onLoaded(el);\n      resolveWithElement(el);\n    }, listenerOptions);\n    if (shouldAppend)\n      el = document.head.appendChild(el);\n    if (!waitForScriptLoad)\n      resolveWithElement(el);\n  });\n  const load = (waitForScriptLoad = true) => {\n    if (!_promise)\n      _promise = loadScript(waitForScriptLoad);\n    return _promise;\n  };\n  const unload = () => {\n    if (!document)\n      return;\n    _promise = null;\n    if (scriptTag.value)\n      scriptTag.value = null;\n    const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (el)\n      document.head.removeChild(el);\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnUnmounted(unload);\n  return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = shallowRef(initialState);\n  let stopTouchMoveListener = null;\n  let initialOverflow = \"\";\n  watch(toRef(element), (el) => {\n    const target = resolveElement(toValue(el));\n    if (target) {\n      const ele = target;\n      if (!elInitialOverflow.get(ele))\n        elInitialOverflow.set(ele, ele.style.overflow);\n      if (ele.style.overflow !== \"hidden\")\n        initialOverflow = ele.style.overflow;\n      if (ele.style.overflow === \"hidden\")\n        return isLocked.value = true;\n      if (isLocked.value)\n        return ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        el,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    el.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || !isLocked.value)\n      return;\n    if (isIOS)\n      stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n    el.style.overflow = initialOverflow;\n    elInitialOverflow.delete(el);\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else unlock();\n    }\n  });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const _navigator = navigator;\n  const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n  const share = async (overrideOptions = {}) => {\n    if (isSupported.value) {\n      const data = {\n        ...toValue(shareOptions),\n        ...toValue(overrideOptions)\n      };\n      let granted = true;\n      if (data.files && _navigator.canShare)\n        granted = _navigator.canShare({ files: data.files });\n      if (granted)\n        return _navigator.share(data);\n    }\n  };\n  return {\n    isSupported,\n    share\n  };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n  var _a, _b, _c, _d;\n  const [source] = args;\n  let compareFn = defaultCompare;\n  let options = {};\n  if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      options = args[1];\n      compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n    } else {\n      compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n    }\n  } else if (args.length > 2) {\n    compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n    options = (_d = args[2]) != null ? _d : {};\n  }\n  const {\n    dirty = false,\n    sortFn = defaultSortFn\n  } = options;\n  if (!dirty)\n    return computed(() => sortFn([...toValue(source)], compareFn));\n  watchEffect(() => {\n    const result = sortFn(toValue(source), compareFn);\n    if (isRef(source))\n      source.value = result;\n    else\n      source.splice(0, source.length, ...result);\n  });\n  return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n  const {\n    interimResults = true,\n    continuous = true,\n    maxAlternatives = 1,\n    window = defaultWindow\n  } = options;\n  const lang = toRef(options.lang || \"en-US\");\n  const isListening = shallowRef(false);\n  const isFinal = shallowRef(false);\n  const result = shallowRef(\"\");\n  const error = shallowRef(void 0);\n  let recognition;\n  const start = () => {\n    isListening.value = true;\n  };\n  const stop = () => {\n    isListening.value = false;\n  };\n  const toggle = (value = !isListening.value) => {\n    if (value) {\n      start();\n    } else {\n      stop();\n    }\n  };\n  const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n  const isSupported = useSupported(() => SpeechRecognition);\n  if (isSupported.value) {\n    recognition = new SpeechRecognition();\n    recognition.continuous = continuous;\n    recognition.interimResults = interimResults;\n    recognition.lang = toValue(lang);\n    recognition.maxAlternatives = maxAlternatives;\n    recognition.onstart = () => {\n      isListening.value = true;\n      isFinal.value = false;\n    };\n    watch(lang, (lang2) => {\n      if (recognition && !isListening.value)\n        recognition.lang = lang2;\n    });\n    recognition.onresult = (event) => {\n      const currentResult = event.results[event.resultIndex];\n      const { transcript } = currentResult[0];\n      isFinal.value = currentResult.isFinal;\n      result.value = transcript;\n      error.value = void 0;\n    };\n    recognition.onerror = (event) => {\n      error.value = event;\n    };\n    recognition.onend = () => {\n      isListening.value = false;\n      recognition.lang = toValue(lang);\n    };\n    watch(isListening, (newValue, oldValue) => {\n      if (newValue === oldValue)\n        return;\n      if (newValue)\n        recognition.start();\n      else\n        recognition.stop();\n    });\n  }\n  tryOnScopeDispose(() => {\n    stop();\n  });\n  return {\n    isSupported,\n    isListening,\n    isFinal,\n    recognition,\n    result,\n    error,\n    toggle,\n    start,\n    stop\n  };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n  const {\n    pitch = 1,\n    rate = 1,\n    volume = 1,\n    window = defaultWindow\n  } = options;\n  const synth = window && window.speechSynthesis;\n  const isSupported = useSupported(() => synth);\n  const isPlaying = shallowRef(false);\n  const status = shallowRef(\"init\");\n  const spokenText = toRef(text || \"\");\n  const lang = toRef(options.lang || \"en-US\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isPlaying.value) => {\n    isPlaying.value = value;\n  };\n  const bindEventsForUtterance = (utterance2) => {\n    utterance2.lang = toValue(lang);\n    utterance2.voice = toValue(options.voice) || null;\n    utterance2.pitch = toValue(pitch);\n    utterance2.rate = toValue(rate);\n    utterance2.volume = volume;\n    utterance2.onstart = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onpause = () => {\n      isPlaying.value = false;\n      status.value = \"pause\";\n    };\n    utterance2.onresume = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onend = () => {\n      isPlaying.value = false;\n      status.value = \"end\";\n    };\n    utterance2.onerror = (event) => {\n      error.value = event;\n    };\n  };\n  const utterance = computed(() => {\n    isPlaying.value = false;\n    status.value = \"init\";\n    const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n    bindEventsForUtterance(newUtterance);\n    return newUtterance;\n  });\n  const speak = () => {\n    synth.cancel();\n    if (utterance)\n      synth.speak(utterance.value);\n  };\n  const stop = () => {\n    synth.cancel();\n    isPlaying.value = false;\n  };\n  if (isSupported.value) {\n    bindEventsForUtterance(utterance.value);\n    watch(lang, (lang2) => {\n      if (utterance.value && !isPlaying.value)\n        utterance.value.lang = lang2;\n    });\n    if (options.voice) {\n      watch(options.voice, () => {\n        synth.cancel();\n      });\n    }\n    watch(isPlaying, () => {\n      if (isPlaying.value)\n        synth.resume();\n      else\n        synth.pause();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isPlaying.value = false;\n  });\n  return {\n    isSupported,\n    isPlaying,\n    status,\n    utterance,\n    error,\n    stop,\n    toggle,\n    speak\n  };\n}\n\nfunction useStepper(steps, initialStep) {\n  const stepsRef = ref(steps);\n  const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n  const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n  const current = computed(() => at(index.value));\n  const isFirst = computed(() => index.value === 0);\n  const isLast = computed(() => index.value === stepNames.value.length - 1);\n  const next = computed(() => stepNames.value[index.value + 1]);\n  const previous = computed(() => stepNames.value[index.value - 1]);\n  function at(index2) {\n    if (Array.isArray(stepsRef.value))\n      return stepsRef.value[index2];\n    return stepsRef.value[stepNames.value[index2]];\n  }\n  function get(step) {\n    if (!stepNames.value.includes(step))\n      return;\n    return at(stepNames.value.indexOf(step));\n  }\n  function goTo(step) {\n    if (stepNames.value.includes(step))\n      index.value = stepNames.value.indexOf(step);\n  }\n  function goToNext() {\n    if (isLast.value)\n      return;\n    index.value++;\n  }\n  function goToPrevious() {\n    if (isFirst.value)\n      return;\n    index.value--;\n  }\n  function goBackTo(step) {\n    if (isAfter(step))\n      goTo(step);\n  }\n  function isNext(step) {\n    return stepNames.value.indexOf(step) === index.value + 1;\n  }\n  function isPrevious(step) {\n    return stepNames.value.indexOf(step) === index.value - 1;\n  }\n  function isCurrent(step) {\n    return stepNames.value.indexOf(step) === index.value;\n  }\n  function isBefore(step) {\n    return index.value < stepNames.value.indexOf(step);\n  }\n  function isAfter(step) {\n    return index.value > stepNames.value.indexOf(step);\n  }\n  return {\n    steps: stepsRef,\n    stepNames,\n    index,\n    current,\n    next,\n    previous,\n    isFirst,\n    isLast,\n    at,\n    get,\n    goTo,\n    goToNext,\n    goToPrevious,\n    goBackTo,\n    isNext,\n    isPrevious,\n    isCurrent,\n    isBefore,\n    isAfter\n  };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const rawInit = toValue(initialValue);\n  const type = guessSerializerType(rawInit);\n  const data = (shallow ? shallowRef : ref)(toValue(initialValue));\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  async function read(event) {\n    if (!storage || event && event.key !== key)\n      return;\n    try {\n      const rawValue = event ? event.newValue : await storage.getItem(key);\n      if (rawValue == null) {\n        data.value = rawInit;\n        if (writeDefaults && rawInit !== null)\n          await storage.setItem(key, await serializer.write(rawInit));\n      } else if (mergeDefaults) {\n        const value = await serializer.read(rawValue);\n        if (typeof mergeDefaults === \"function\")\n          data.value = mergeDefaults(value, rawInit);\n        else if (type === \"object\" && !Array.isArray(value))\n          data.value = { ...rawInit, ...value };\n        else data.value = value;\n      } else {\n        data.value = await serializer.read(rawValue);\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  read();\n  if (window && listenToStorageChanges)\n    useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n  if (storage) {\n    watchWithFilter(\n      data,\n      async () => {\n        try {\n          if (data.value == null)\n            await storage.removeItem(key);\n          else\n            await storage.setItem(key, await serializer.write(data.value));\n        } catch (e) {\n          onError(e);\n        }\n      },\n      {\n        flush,\n        deep,\n        eventFilter\n      }\n    );\n  }\n  return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n  const isLoaded = shallowRef(false);\n  const {\n    document = defaultDocument,\n    immediate = true,\n    manual = false,\n    id = `vueuse_styletag_${++_id}`\n  } = options;\n  const cssRef = shallowRef(css);\n  let stop = () => {\n  };\n  const load = () => {\n    if (!document)\n      return;\n    const el = document.getElementById(id) || document.createElement(\"style\");\n    if (!el.isConnected) {\n      el.id = id;\n      if (options.media)\n        el.media = options.media;\n      document.head.appendChild(el);\n    }\n    if (isLoaded.value)\n      return;\n    stop = watch(\n      cssRef,\n      (value) => {\n        el.textContent = value;\n      },\n      { immediate: true }\n    );\n    isLoaded.value = true;\n  };\n  const unload = () => {\n    if (!document || !isLoaded.value)\n      return;\n    stop();\n    document.head.removeChild(document.getElementById(id));\n    isLoaded.value = false;\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnScopeDispose(unload);\n  return {\n    id,\n    css: cssRef,\n    unload,\n    load,\n    isLoaded: readonly(isLoaded)\n  };\n}\n\nfunction useSwipe(target, options = {}) {\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    passive = true\n  } = options;\n  const coordsStart = reactive({ x: 0, y: 0 });\n  const coordsEnd = reactive({ x: 0, y: 0 });\n  const diffX = computed(() => coordsStart.x - coordsEnd.x);\n  const diffY = computed(() => coordsStart.y - coordsEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n  const isSwiping = shallowRef(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(diffX.value) > abs(diffY.value)) {\n      return diffX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return diffY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n  const updateCoordsStart = (x, y) => {\n    coordsStart.x = x;\n    coordsStart.y = y;\n  };\n  const updateCoordsEnd = (x, y) => {\n    coordsEnd.x = x;\n    coordsEnd.y = y;\n  };\n  const listenerOptions = { passive, capture: !passive };\n  const onTouchEnd = (e) => {\n    if (isSwiping.value)\n      onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n    isSwiping.value = false;\n  };\n  const stops = [\n    useEventListener(target, \"touchstart\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsStart(x, y);\n      updateCoordsEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchmove\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsEnd(x, y);\n      if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value))\n        e.preventDefault();\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }, listenerOptions),\n    useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isSwiping,\n    direction,\n    coordsStart,\n    coordsEnd,\n    lengthX: diffX,\n    lengthY: diffY,\n    stop,\n    // TODO: Remove in the next major version\n    isPassiveEventSupported: true\n  };\n}\n\nfunction useTemplateRefsList() {\n  const refs = ref([]);\n  refs.value.set = (el) => {\n    if (el)\n      refs.value.push(el);\n  };\n  onBeforeUpdate(() => {\n    refs.value.length = 0;\n  });\n  return refs;\n}\n\nfunction useTextDirection(options = {}) {\n  const {\n    document = defaultDocument,\n    selector = \"html\",\n    observe = false,\n    initialValue = \"ltr\"\n  } = options;\n  function getValue() {\n    var _a, _b;\n    return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n  }\n  const dir = ref(getValue());\n  tryOnMounted(() => dir.value = getValue());\n  if (observe && document) {\n    useMutationObserver(\n      document.querySelector(selector),\n      () => dir.value = getValue(),\n      { attributes: true }\n    );\n  }\n  return computed({\n    get() {\n      return dir.value;\n    },\n    set(v) {\n      var _a, _b;\n      dir.value = v;\n      if (!document)\n        return;\n      if (dir.value)\n        (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n      else\n        (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n    }\n  });\n}\n\nfunction getRangesFromSelection(selection) {\n  var _a;\n  const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n  return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const selection = ref(null);\n  const text = computed(() => {\n    var _a, _b;\n    return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n  });\n  const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n  const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n  function onSelectionChange() {\n    selection.value = null;\n    if (window)\n      selection.value = window.getSelection();\n  }\n  if (window)\n    useEventListener(window.document, \"selectionchange\", onSelectionChange, { passive: true });\n  return {\n    text,\n    rects,\n    ranges,\n    selection\n  };\n}\n\nfunction tryRequestAnimationFrame(window = defaultWindow, fn) {\n  if (window && typeof window.requestAnimationFrame === \"function\") {\n    window.requestAnimationFrame(fn);\n  } else {\n    fn();\n  }\n}\nfunction useTextareaAutosize(options = {}) {\n  var _a, _b;\n  const { window = defaultWindow } = options;\n  const textarea = toRef(options == null ? void 0 : options.element);\n  const input = toRef((_a = options == null ? void 0 : options.input) != null ? _a : \"\");\n  const styleProp = (_b = options == null ? void 0 : options.styleProp) != null ? _b : \"height\";\n  const textareaScrollHeight = shallowRef(1);\n  const textareaOldWidth = shallowRef(0);\n  function triggerResize() {\n    var _a2;\n    if (!textarea.value)\n      return;\n    let height = \"\";\n    textarea.value.style[styleProp] = \"1px\";\n    textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n    const _styleTarget = toValue(options == null ? void 0 : options.styleTarget);\n    if (_styleTarget)\n      _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n    else\n      height = `${textareaScrollHeight.value}px`;\n    textarea.value.style[styleProp] = height;\n  }\n  watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n  watch(textareaScrollHeight, () => {\n    var _a2;\n    return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options);\n  });\n  useResizeObserver(textarea, ([{ contentRect }]) => {\n    if (textareaOldWidth.value === contentRect.width)\n      return;\n    tryRequestAnimationFrame(window, () => {\n      textareaOldWidth.value = contentRect.width;\n      triggerResize();\n    });\n  });\n  if (options == null ? void 0 : options.watch)\n    watch(options.watch, triggerResize, { immediate: true, deep: true });\n  return {\n    textarea,\n    input,\n    triggerResize\n  };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n  const { throttle = 200, trailing = true } = options;\n  const filter = throttleFilter(throttle, trailing);\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\n\nconst DEFAULT_UNITS = [\n  { max: 6e4, value: 1e3, name: \"second\" },\n  { max: 276e4, value: 6e4, name: \"minute\" },\n  { max: 72e6, value: 36e5, name: \"hour\" },\n  { max: 5184e5, value: 864e5, name: \"day\" },\n  { max: 24192e5, value: 6048e5, name: \"week\" },\n  { max: 28512e6, value: 2592e6, name: \"month\" },\n  { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n  justNow: \"just now\",\n  past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n  future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n  month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n  year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n  day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n  week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n  hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n  minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n  second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n  invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n  return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n  const {\n    controls: exposeControls = false,\n    updateInterval = 3e4\n  } = options;\n  const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n  const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n  if (exposeControls) {\n    return {\n      timeAgo,\n      ...controls\n    };\n  } else {\n    return timeAgo;\n  }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n  var _a;\n  const {\n    max,\n    messages = DEFAULT_MESSAGES,\n    fullDateFormatter = DEFAULT_FORMATTER,\n    units = DEFAULT_UNITS,\n    showSecond = false,\n    rounding = \"round\"\n  } = options;\n  const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n  const diff = +now - +from;\n  const absDiff = Math.abs(diff);\n  function getValue(diff2, unit) {\n    return roundFn(Math.abs(diff2) / unit.value);\n  }\n  function format(diff2, unit) {\n    const val = getValue(diff2, unit);\n    const past = diff2 > 0;\n    const str = applyFormat(unit.name, val, past);\n    return applyFormat(past ? \"past\" : \"future\", str, past);\n  }\n  function applyFormat(name, val, isPast) {\n    const formatter = messages[name];\n    if (typeof formatter === \"function\")\n      return formatter(val, isPast);\n    return formatter.replace(\"{0}\", val.toString());\n  }\n  if (absDiff < 6e4 && !showSecond)\n    return messages.justNow;\n  if (typeof max === \"number\" && absDiff > max)\n    return fullDateFormatter(new Date(from));\n  if (typeof max === \"string\") {\n    const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n    if (unitMax && absDiff > unitMax)\n      return fullDateFormatter(new Date(from));\n  }\n  for (const [idx, unit] of units.entries()) {\n    const val = getValue(diff, unit);\n    if (val <= 0 && units[idx - 1])\n      return format(diff, units[idx - 1]);\n    if (absDiff < unit.max)\n      return format(diff, unit);\n  }\n  return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  const { start } = useTimeoutFn(loop, interval, { immediate });\n  const isActive = shallowRef(false);\n  async function loop() {\n    if (!isActive.value)\n      return;\n    await fn();\n    start();\n  }\n  function resume() {\n    if (!isActive.value) {\n      isActive.value = true;\n      if (immediateCallback)\n        fn();\n      start();\n    }\n  }\n  function pause() {\n    isActive.value = false;\n  }\n  if (immediate && isClient)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useTimestamp(options = {}) {\n  const {\n    controls: exposeControls = false,\n    offset = 0,\n    immediate = true,\n    interval = \"requestAnimationFrame\",\n    callback\n  } = options;\n  const ts = shallowRef(timestamp() + offset);\n  const update = () => ts.value = timestamp() + offset;\n  const cb = callback ? () => {\n    update();\n    callback(ts.value);\n  } : update;\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  if (exposeControls) {\n    return {\n      timestamp: ts,\n      ...controls\n    };\n  } else {\n    return ts;\n  }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n  var _a, _b, _c;\n  const {\n    document = defaultDocument,\n    restoreOnUnmount = (t) => t\n  } = options;\n  const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n  const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n  const isReadonly = !!(newTitle && typeof newTitle === \"function\");\n  function format(t) {\n    if (!(\"titleTemplate\" in options))\n      return t;\n    const template = options.titleTemplate || \"%s\";\n    return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n  }\n  watch(\n    title,\n    (newValue, oldValue) => {\n      if (newValue !== oldValue && document)\n        document.title = format(newValue != null ? newValue : \"\");\n    },\n    { immediate: true }\n  );\n  if (options.observe && !options.titleTemplate && document && !isReadonly) {\n    useMutationObserver(\n      (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n      () => {\n        if (document && document.title !== title.value)\n          title.value = format(document.title);\n      },\n      { childList: true }\n    );\n  }\n  tryOnScopeDispose(() => {\n    if (restoreOnUnmount) {\n      const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n      if (restoredTitle != null && document)\n        document.title = restoredTitle;\n    }\n  });\n  return title;\n}\n\nconst _TransitionPresets = {\n  easeInSine: [0.12, 0, 0.39, 0],\n  easeOutSine: [0.61, 1, 0.88, 1],\n  easeInOutSine: [0.37, 0, 0.63, 1],\n  easeInQuad: [0.11, 0, 0.5, 0],\n  easeOutQuad: [0.5, 1, 0.89, 1],\n  easeInOutQuad: [0.45, 0, 0.55, 1],\n  easeInCubic: [0.32, 0, 0.67, 0],\n  easeOutCubic: [0.33, 1, 0.68, 1],\n  easeInOutCubic: [0.65, 0, 0.35, 1],\n  easeInQuart: [0.5, 0, 0.75, 0],\n  easeOutQuart: [0.25, 1, 0.5, 1],\n  easeInOutQuart: [0.76, 0, 0.24, 1],\n  easeInQuint: [0.64, 0, 0.78, 0],\n  easeOutQuint: [0.22, 1, 0.36, 1],\n  easeInOutQuint: [0.83, 0, 0.17, 1],\n  easeInExpo: [0.7, 0, 0.84, 0],\n  easeOutExpo: [0.16, 1, 0.3, 1],\n  easeInOutExpo: [0.87, 0, 0.13, 1],\n  easeInCirc: [0.55, 0, 1, 0.45],\n  easeOutCirc: [0, 0.55, 0.45, 1],\n  easeInOutCirc: [0.85, 0, 0.15, 1],\n  easeInBack: [0.36, 0, 0.66, -0.56],\n  easeOutBack: [0.34, 1.56, 0.64, 1],\n  easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n  const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n  const b = (a1, a2) => 3 * a2 - 6 * a1;\n  const c = (a1) => 3 * a1;\n  const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n  const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n  const getTforX = (x) => {\n    let aGuessT = x;\n    for (let i = 0; i < 4; ++i) {\n      const currentSlope = getSlope(aGuessT, p0, p2);\n      if (currentSlope === 0)\n        return aGuessT;\n      const currentX = calcBezier(aGuessT, p0, p2) - x;\n      aGuessT -= currentX / currentSlope;\n    }\n    return aGuessT;\n  };\n  return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n  return a + alpha * (b - a);\n}\nfunction toVec(t) {\n  return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n  var _a, _b;\n  const fromVal = toValue(from);\n  const toVal = toValue(to);\n  const v1 = toVec(fromVal);\n  const v2 = toVec(toVal);\n  const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n  const startedAt = Date.now();\n  const endAt = Date.now() + duration;\n  const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n  const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n  return new Promise((resolve) => {\n    source.value = fromVal;\n    const tick = () => {\n      var _a2;\n      if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n        resolve();\n        return;\n      }\n      const now = Date.now();\n      const alpha = ease((now - startedAt) / duration);\n      const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n      if (Array.isArray(source.value))\n        source.value = arr.map((n, i) => {\n          var _a3, _b2;\n          return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n        });\n      else if (typeof source.value === \"number\")\n        source.value = arr[0];\n      if (now < endAt) {\n        requestAnimationFrame(tick);\n      } else {\n        source.value = toVal;\n        resolve();\n      }\n    };\n    tick();\n  });\n}\nfunction useTransition(source, options = {}) {\n  let currentId = 0;\n  const sourceVal = () => {\n    const v = toValue(source);\n    return typeof v === \"number\" ? v : v.map(toValue);\n  };\n  const outputRef = ref(sourceVal());\n  watch(sourceVal, async (to) => {\n    var _a, _b;\n    if (toValue(options.disabled))\n      return;\n    const id = ++currentId;\n    if (options.delay)\n      await promiseTimeout(toValue(options.delay));\n    if (id !== currentId)\n      return;\n    const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n    (_a = options.onStarted) == null ? void 0 : _a.call(options);\n    await executeTransition(outputRef, outputRef.value, toVal, {\n      ...options,\n      abort: () => {\n        var _a2;\n        return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n      }\n    });\n    (_b = options.onFinished) == null ? void 0 : _b.call(options);\n  }, { deep: true });\n  watch(() => toValue(options.disabled), (disabled) => {\n    if (disabled) {\n      currentId++;\n      outputRef.value = sourceVal();\n    }\n  });\n  tryOnScopeDispose(() => {\n    currentId++;\n  });\n  return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n  const {\n    initialValue = {},\n    removeNullishValues = true,\n    removeFalsyValues = false,\n    write: enableWrite = true,\n    writeMode = \"replace\",\n    window = defaultWindow\n  } = options;\n  if (!window)\n    return reactive(initialValue);\n  const state = reactive({});\n  function getRawParams() {\n    if (mode === \"history\") {\n      return window.location.search || \"\";\n    } else if (mode === \"hash\") {\n      const hash = window.location.hash || \"\";\n      const index = hash.indexOf(\"?\");\n      return index > 0 ? hash.slice(index) : \"\";\n    } else {\n      return (window.location.hash || \"\").replace(/^#/, \"\");\n    }\n  }\n  function constructQuery(params) {\n    const stringified = params.toString();\n    if (mode === \"history\")\n      return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n    if (mode === \"hash-params\")\n      return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n    const hash = window.location.hash || \"#\";\n    const index = hash.indexOf(\"?\");\n    if (index > 0)\n      return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n    return `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n  }\n  function read() {\n    return new URLSearchParams(getRawParams());\n  }\n  function updateState(params) {\n    const unusedKeys = new Set(Object.keys(state));\n    for (const key of params.keys()) {\n      const paramsForKey = params.getAll(key);\n      state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n      unusedKeys.delete(key);\n    }\n    Array.from(unusedKeys).forEach((key) => delete state[key]);\n  }\n  const { pause, resume } = pausableWatch(\n    state,\n    () => {\n      const params = new URLSearchParams(\"\");\n      Object.keys(state).forEach((key) => {\n        const mapEntry = state[key];\n        if (Array.isArray(mapEntry))\n          mapEntry.forEach((value) => params.append(key, value));\n        else if (removeNullishValues && mapEntry == null)\n          params.delete(key);\n        else if (removeFalsyValues && !mapEntry)\n          params.delete(key);\n        else\n          params.set(key, mapEntry);\n      });\n      write(params, false);\n    },\n    { deep: true }\n  );\n  function write(params, shouldUpdate) {\n    pause();\n    if (shouldUpdate)\n      updateState(params);\n    if (writeMode === \"replace\") {\n      window.history.replaceState(\n        window.history.state,\n        window.document.title,\n        window.location.pathname + constructQuery(params)\n      );\n    } else {\n      window.history.pushState(\n        window.history.state,\n        window.document.title,\n        window.location.pathname + constructQuery(params)\n      );\n    }\n    resume();\n  }\n  function onChanged() {\n    if (!enableWrite)\n      return;\n    write(read(), true);\n  }\n  const listenerOptions = { passive: true };\n  useEventListener(window, \"popstate\", onChanged, listenerOptions);\n  if (mode !== \"history\")\n    useEventListener(window, \"hashchange\", onChanged, listenerOptions);\n  const initial = read();\n  if (initial.keys().next().value)\n    updateState(initial);\n  else\n    Object.assign(state, initialValue);\n  return state;\n}\n\nfunction useUserMedia(options = {}) {\n  var _a, _b;\n  const enabled = shallowRef((_a = options.enabled) != null ? _a : false);\n  const autoSwitch = shallowRef((_b = options.autoSwitch) != null ? _b : true);\n  const constraints = ref(options.constraints);\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n  });\n  const stream = shallowRef();\n  function getDeviceOptions(type) {\n    switch (type) {\n      case \"video\": {\n        if (constraints.value)\n          return constraints.value.video || false;\n        break;\n      }\n      case \"audio\": {\n        if (constraints.value)\n          return constraints.value.audio || false;\n        break;\n      }\n    }\n  }\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getUserMedia({\n      video: getDeviceOptions(\"video\"),\n      audio: getDeviceOptions(\"audio\")\n    });\n    return stream.value;\n  }\n  function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  async function restart() {\n    _stop();\n    return await start();\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else _stop();\n    },\n    { immediate: true }\n  );\n  watch(\n    constraints,\n    () => {\n      if (autoSwitch.value && stream.value)\n        restart();\n    },\n    { immediate: true }\n  );\n  tryOnScopeDispose(() => {\n    stop();\n  });\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    restart,\n    constraints,\n    enabled,\n    autoSwitch\n  };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n  var _a, _b, _c;\n  const {\n    clone = false,\n    passive = false,\n    eventName,\n    deep = false,\n    defaultValue,\n    shouldEmit\n  } = options;\n  const vm = getCurrentInstance();\n  const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n  let event = eventName;\n  if (!key) {\n    key = \"modelValue\";\n  }\n  event = event || `update:${key.toString()}`;\n  const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n  const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n  const triggerEmit = (value) => {\n    if (shouldEmit) {\n      if (shouldEmit(value))\n        _emit(event, value);\n    } else {\n      _emit(event, value);\n    }\n  };\n  if (passive) {\n    const initialValue = getValue();\n    const proxy = ref(initialValue);\n    let isUpdating = false;\n    watch(\n      () => props[key],\n      (v) => {\n        if (!isUpdating) {\n          isUpdating = true;\n          proxy.value = cloneFn(v);\n          nextTick(() => isUpdating = false);\n        }\n      }\n    );\n    watch(\n      proxy,\n      (v) => {\n        if (!isUpdating && (v !== props[key] || deep))\n          triggerEmit(v);\n      },\n      { deep }\n    );\n    return proxy;\n  } else {\n    return computed({\n      get() {\n        return getValue();\n      },\n      set(value) {\n        triggerEmit(value);\n      }\n    });\n  }\n}\n\nfunction useVModels(props, emit, options = {}) {\n  const ret = {};\n  for (const key in props) {\n    ret[key] = useVModel(\n      props,\n      key,\n      emit,\n      options\n    );\n  }\n  return ret;\n}\n\nfunction useVibrate(options) {\n  const {\n    pattern = [],\n    interval = 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n  const patternRef = toRef(pattern);\n  let intervalControls;\n  const vibrate = (pattern2 = patternRef.value) => {\n    if (isSupported.value)\n      navigator.vibrate(pattern2);\n  };\n  const stop = () => {\n    if (isSupported.value)\n      navigator.vibrate(0);\n    intervalControls == null ? void 0 : intervalControls.pause();\n  };\n  if (interval > 0) {\n    intervalControls = useIntervalFn(\n      vibrate,\n      interval,\n      {\n        immediate: false,\n        immediateCallback: false\n      }\n    );\n  }\n  return {\n    isSupported,\n    pattern,\n    intervalControls,\n    vibrate,\n    stop\n  };\n}\n\nfunction useVirtualList(list, options) {\n  const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n  return {\n    list: currentList,\n    scrollTo,\n    containerProps: {\n      ref: containerRef,\n      onScroll: () => {\n        calculateRange();\n      },\n      style: containerStyle\n    },\n    wrapperProps\n  };\n}\nfunction useVirtualListResources(list) {\n  const containerRef = shallowRef(null);\n  const size = useElementSize(containerRef);\n  const currentList = ref([]);\n  const source = shallowRef(list);\n  const state = ref({ start: 0, end: 10 });\n  return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n  return (containerSize) => {\n    if (typeof itemSize === \"number\")\n      return Math.ceil(containerSize / itemSize);\n    const { start = 0 } = state.value;\n    let sum = 0;\n    let capacity = 0;\n    for (let i = start; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      capacity = i;\n      if (sum > containerSize)\n        break;\n    }\n    return capacity - start;\n  };\n}\nfunction createGetOffset(source, itemSize) {\n  return (scrollDirection) => {\n    if (typeof itemSize === \"number\")\n      return Math.floor(scrollDirection / itemSize) + 1;\n    let sum = 0;\n    let offset = 0;\n    for (let i = 0; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      if (sum >= scrollDirection) {\n        offset = i;\n        break;\n      }\n    }\n    return offset + 1;\n  };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n  return () => {\n    const element = containerRef.value;\n    if (element) {\n      const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n      const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n      const from = offset - overscan;\n      const to = offset + viewCapacity + overscan;\n      state.value = {\n        start: from < 0 ? 0 : from,\n        end: to > source.value.length ? source.value.length : to\n      };\n      currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n        data: ele,\n        index: index + state.value.start\n      }));\n    }\n  };\n}\nfunction createGetDistance(itemSize, source) {\n  return (index) => {\n    if (typeof itemSize === \"number\") {\n      const size2 = index * itemSize;\n      return size2;\n    }\n    const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n    return size;\n  };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n  watch([size.width, size.height, list, containerRef], () => {\n    calculateRange();\n  });\n}\nfunction createComputedTotalSize(itemSize, source) {\n  return computed(() => {\n    if (typeof itemSize === \"number\")\n      return source.value.length * itemSize;\n    return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n  });\n}\nconst scrollToDictionaryForElementScrollKey = {\n  horizontal: \"scrollLeft\",\n  vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n  return (index) => {\n    if (containerRef.value) {\n      containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n      calculateRange();\n    }\n  };\n}\nfunction useHorizontalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowX: \"auto\" };\n  const { itemWidth, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n  const getOffset = createGetOffset(source, itemWidth);\n  const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceLeft = createGetDistance(itemWidth, source);\n  const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n  const totalWidth = createComputedTotalSize(itemWidth, source);\n  useWatchForSizes(size, list, containerRef, calculateRange);\n  const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        height: \"100%\",\n        width: `${totalWidth.value - offsetLeft.value}px`,\n        marginLeft: `${offsetLeft.value}px`,\n        display: \"flex\"\n      }\n    };\n  });\n  return {\n    scrollTo,\n    calculateRange,\n    wrapperProps,\n    containerStyle,\n    currentList,\n    containerRef\n  };\n}\nfunction useVerticalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowY: \"auto\" };\n  const { itemHeight, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n  const getOffset = createGetOffset(source, itemHeight);\n  const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceTop = createGetDistance(itemHeight, source);\n  const offsetTop = computed(() => getDistanceTop(state.value.start));\n  const totalHeight = createComputedTotalSize(itemHeight, source);\n  useWatchForSizes(size, list, containerRef, calculateRange);\n  const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        width: \"100%\",\n        height: `${totalHeight.value - offsetTop.value}px`,\n        marginTop: `${offsetTop.value}px`\n      }\n    };\n  });\n  return {\n    calculateRange,\n    scrollTo,\n    containerStyle,\n    wrapperProps,\n    currentList,\n    containerRef\n  };\n}\n\nfunction useWakeLock(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    document = defaultDocument\n  } = options;\n  const requestedType = shallowRef(false);\n  const sentinel = shallowRef(null);\n  const documentVisibility = useDocumentVisibility({ document });\n  const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n  const isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n  if (isSupported.value) {\n    useEventListener(sentinel, \"release\", () => {\n      var _a, _b;\n      requestedType.value = (_b = (_a = sentinel.value) == null ? void 0 : _a.type) != null ? _b : false;\n    }, { passive: true });\n    whenever(\n      () => documentVisibility.value === \"visible\" && (document == null ? void 0 : document.visibilityState) === \"visible\" && requestedType.value,\n      (type) => {\n        requestedType.value = false;\n        forceRequest(type);\n      }\n    );\n  }\n  async function forceRequest(type) {\n    var _a;\n    await ((_a = sentinel.value) == null ? void 0 : _a.release());\n    sentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n  }\n  async function request(type) {\n    if (documentVisibility.value === \"visible\")\n      await forceRequest(type);\n    else\n      requestedType.value = type;\n  }\n  async function release() {\n    requestedType.value = false;\n    const s = sentinel.value;\n    sentinel.value = null;\n    await (s == null ? void 0 : s.release());\n  }\n  return {\n    sentinel,\n    isSupported,\n    isActive,\n    request,\n    forceRequest,\n    release\n  };\n}\n\nfunction useWebNotification(options = {}) {\n  const {\n    window = defaultWindow,\n    requestPermissions: _requestForPermissions = true\n  } = options;\n  const defaultWebNotificationOptions = options;\n  const isSupported = useSupported(() => {\n    if (!window || !(\"Notification\" in window))\n      return false;\n    if (Notification.permission === \"granted\")\n      return true;\n    try {\n      const notification2 = new Notification(\"\");\n      notification2.onshow = () => {\n        notification2.close();\n      };\n    } catch (e) {\n      if (e.name === \"TypeError\")\n        return false;\n    }\n    return true;\n  });\n  const permissionGranted = shallowRef(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n  const notification = ref(null);\n  const ensurePermissions = async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionGranted.value && Notification.permission !== \"denied\") {\n      const result = await Notification.requestPermission();\n      if (result === \"granted\")\n        permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  };\n  const { on: onClick, trigger: clickTrigger } = createEventHook();\n  const { on: onShow, trigger: showTrigger } = createEventHook();\n  const { on: onError, trigger: errorTrigger } = createEventHook();\n  const { on: onClose, trigger: closeTrigger } = createEventHook();\n  const show = async (overrides) => {\n    if (!isSupported.value || !permissionGranted.value)\n      return;\n    const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n    notification.value = new Notification(options2.title || \"\", options2);\n    notification.value.onclick = clickTrigger;\n    notification.value.onshow = showTrigger;\n    notification.value.onerror = errorTrigger;\n    notification.value.onclose = closeTrigger;\n    return notification.value;\n  };\n  const close = () => {\n    if (notification.value)\n      notification.value.close();\n    notification.value = null;\n  };\n  if (_requestForPermissions)\n    tryOnMounted(ensurePermissions);\n  tryOnScopeDispose(close);\n  if (isSupported.value && window) {\n    const document = window.document;\n    useEventListener(document, \"visibilitychange\", (e) => {\n      e.preventDefault();\n      if (document.visibilityState === \"visible\") {\n        close();\n      }\n    });\n  }\n  return {\n    isSupported,\n    notification,\n    ensurePermissions,\n    permissionGranted,\n    show,\n    close,\n    onClick,\n    onShow,\n    onError,\n    onClose\n  };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useWebSocket(url, options = {}) {\n  const {\n    onConnected,\n    onDisconnected,\n    onError,\n    onMessage,\n    immediate = true,\n    autoConnect = true,\n    autoClose = true,\n    protocols = []\n  } = options;\n  const data = ref(null);\n  const status = shallowRef(\"CLOSED\");\n  const wsRef = ref();\n  const urlRef = toRef(url);\n  let heartbeatPause;\n  let heartbeatResume;\n  let explicitlyClosed = false;\n  let retried = 0;\n  let bufferedData = [];\n  let retryTimeout;\n  let pongTimeoutWait;\n  const _sendBuffer = () => {\n    if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n      for (const buffer of bufferedData)\n        wsRef.value.send(buffer);\n      bufferedData = [];\n    }\n  };\n  const resetRetry = () => {\n    if (retryTimeout != null) {\n      clearTimeout(retryTimeout);\n      retryTimeout = void 0;\n    }\n  };\n  const resetHeartbeat = () => {\n    clearTimeout(pongTimeoutWait);\n    pongTimeoutWait = void 0;\n  };\n  const close = (code = 1e3, reason) => {\n    resetRetry();\n    if (!isClient && !isWorker || !wsRef.value)\n      return;\n    explicitlyClosed = true;\n    resetHeartbeat();\n    heartbeatPause == null ? void 0 : heartbeatPause();\n    wsRef.value.close(code, reason);\n    wsRef.value = void 0;\n  };\n  const send = (data2, useBuffer = true) => {\n    if (!wsRef.value || status.value !== \"OPEN\") {\n      if (useBuffer)\n        bufferedData.push(data2);\n      return false;\n    }\n    _sendBuffer();\n    wsRef.value.send(data2);\n    return true;\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const ws = new WebSocket(urlRef.value, protocols);\n    wsRef.value = ws;\n    status.value = \"CONNECTING\";\n    ws.onopen = () => {\n      status.value = \"OPEN\";\n      retried = 0;\n      onConnected == null ? void 0 : onConnected(ws);\n      heartbeatResume == null ? void 0 : heartbeatResume();\n      _sendBuffer();\n    };\n    ws.onclose = (ev) => {\n      status.value = \"CLOSED\";\n      resetHeartbeat();\n      heartbeatPause == null ? void 0 : heartbeatPause();\n      onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n      if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions(options.autoReconnect);\n        const checkRetires = typeof retries === \"function\" ? retries : () => typeof retries === \"number\" && (retries < 0 || retried < retries);\n        if (checkRetires(retried)) {\n          retried += 1;\n          retryTimeout = setTimeout(_init, delay);\n        } else {\n          onFailed == null ? void 0 : onFailed();\n        }\n      }\n    };\n    ws.onerror = (e) => {\n      onError == null ? void 0 : onError(ws, e);\n    };\n    ws.onmessage = (e) => {\n      if (options.heartbeat) {\n        resetHeartbeat();\n        const {\n          message = DEFAULT_PING_MESSAGE,\n          responseMessage = message\n        } = resolveNestedOptions(options.heartbeat);\n        if (e.data === toValue(responseMessage))\n          return;\n      }\n      data.value = e.data;\n      onMessage == null ? void 0 : onMessage(ws, e);\n    };\n  };\n  if (options.heartbeat) {\n    const {\n      message = DEFAULT_PING_MESSAGE,\n      interval = 1e3,\n      pongTimeout = 1e3\n    } = resolveNestedOptions(options.heartbeat);\n    const { pause, resume } = useIntervalFn(\n      () => {\n        send(toValue(message), false);\n        if (pongTimeoutWait != null)\n          return;\n        pongTimeoutWait = setTimeout(() => {\n          close();\n          explicitlyClosed = false;\n        }, pongTimeout);\n      },\n      interval,\n      { immediate: false }\n    );\n    heartbeatPause = pause;\n    heartbeatResume = resume;\n  }\n  if (autoClose) {\n    if (isClient)\n      useEventListener(\"beforeunload\", () => close(), { passive: true });\n    tryOnScopeDispose(close);\n  }\n  const open = () => {\n    if (!isClient && !isWorker)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    open();\n  if (autoConnect)\n    watch(urlRef, open);\n  return {\n    data,\n    status,\n    close,\n    send,\n    open,\n    ws: wsRef\n  };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n  const {\n    window = defaultWindow\n  } = options != null ? options : {};\n  const data = ref(null);\n  const worker = shallowRef();\n  const post = (...args) => {\n    if (!worker.value)\n      return;\n    worker.value.postMessage(...args);\n  };\n  const terminate = function terminate2() {\n    if (!worker.value)\n      return;\n    worker.value.terminate();\n  };\n  if (window) {\n    if (typeof arg0 === \"string\")\n      worker.value = new Worker(arg0, workerOptions);\n    else if (typeof arg0 === \"function\")\n      worker.value = arg0();\n    else\n      worker.value = arg0;\n    worker.value.onmessage = (e) => {\n      data.value = e.data;\n    };\n    tryOnScopeDispose(() => {\n      if (worker.value)\n        worker.value.terminate();\n    });\n  }\n  return {\n    data,\n    post,\n    terminate,\n    worker\n  };\n}\n\nfunction depsParser(deps, localDeps) {\n  if (deps.length === 0 && localDeps.length === 0)\n    return \"\";\n  const depsString = deps.map((dep) => `'${dep}'`).toString();\n  const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n    const str = fn.toString();\n    if (str.trim().startsWith(\"function\")) {\n      return str;\n    } else {\n      const name = fn.name;\n      return `const ${name} = ${str}`;\n    }\n  }).join(\";\");\n  const importString = `importScripts(${depsString});`;\n  return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction jobRunner(userFunc) {\n  return (e) => {\n    const userFuncArgs = e.data[0];\n    return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n      postMessage([\"SUCCESS\", result]);\n    }).catch((error) => {\n      postMessage([\"ERROR\", error]);\n    });\n  };\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n  const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n  const blob = new Blob([blobCode], { type: \"text/javascript\" });\n  const url = URL.createObjectURL(blob);\n  return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n  const {\n    dependencies = [],\n    localDependencies = [],\n    timeout,\n    window = defaultWindow\n  } = options;\n  const worker = ref();\n  const workerStatus = shallowRef(\"PENDING\");\n  const promise = ref({});\n  const timeoutId = shallowRef();\n  const workerTerminate = (status = \"PENDING\") => {\n    if (worker.value && worker.value._url && window) {\n      worker.value.terminate();\n      URL.revokeObjectURL(worker.value._url);\n      promise.value = {};\n      worker.value = void 0;\n      window.clearTimeout(timeoutId.value);\n      workerStatus.value = status;\n    }\n  };\n  workerTerminate();\n  tryOnScopeDispose(workerTerminate);\n  const generateWorker = () => {\n    const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n    const newWorker = new Worker(blobUrl);\n    newWorker._url = blobUrl;\n    newWorker.onmessage = (e) => {\n      const { resolve = () => {\n      }, reject = () => {\n      } } = promise.value;\n      const [status, result] = e.data;\n      switch (status) {\n        case \"SUCCESS\":\n          resolve(result);\n          workerTerminate(status);\n          break;\n        default:\n          reject(result);\n          workerTerminate(\"ERROR\");\n          break;\n      }\n    };\n    newWorker.onerror = (e) => {\n      const { reject = () => {\n      } } = promise.value;\n      e.preventDefault();\n      reject(e);\n      workerTerminate(\"ERROR\");\n    };\n    if (timeout) {\n      timeoutId.value = setTimeout(\n        () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n        timeout\n      );\n    }\n    return newWorker;\n  };\n  const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n    var _a;\n    promise.value = {\n      resolve,\n      reject\n    };\n    (_a = worker.value) == null ? void 0 : _a.postMessage([[...fnArgs]]);\n    workerStatus.value = \"RUNNING\";\n  });\n  const workerFn = (...fnArgs) => {\n    if (workerStatus.value === \"RUNNING\") {\n      console.error(\n        \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n      );\n      return Promise.reject();\n    }\n    worker.value = generateWorker();\n    return callWorker(...fnArgs);\n  };\n  return {\n    workerFn,\n    workerStatus,\n    workerTerminate\n  };\n}\n\nfunction useWindowFocus(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return shallowRef(false);\n  const focused = shallowRef(window.document.hasFocus());\n  const listenerOptions = { passive: true };\n  useEventListener(window, \"blur\", () => {\n    focused.value = false;\n  }, listenerOptions);\n  useEventListener(window, \"focus\", () => {\n    focused.value = true;\n  }, listenerOptions);\n  return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n  const { window = defaultWindow, ...rest } = options;\n  return useScroll(window, rest);\n}\n\nfunction useWindowSize(options = {}) {\n  const {\n    window = defaultWindow,\n    initialWidth = Number.POSITIVE_INFINITY,\n    initialHeight = Number.POSITIVE_INFINITY,\n    listenOrientation = true,\n    includeScrollbar = true,\n    type = \"inner\"\n  } = options;\n  const width = shallowRef(initialWidth);\n  const height = shallowRef(initialHeight);\n  const update = () => {\n    if (window) {\n      if (type === \"outer\") {\n        width.value = window.outerWidth;\n        height.value = window.outerHeight;\n      } else if (type === \"visual\" && window.visualViewport) {\n        const { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;\n        width.value = Math.round(visualViewportWidth * scale);\n        height.value = Math.round(visualViewportHeight * scale);\n      } else if (includeScrollbar) {\n        width.value = window.innerWidth;\n        height.value = window.innerHeight;\n      } else {\n        width.value = window.document.documentElement.clientWidth;\n        height.value = window.document.documentElement.clientHeight;\n      }\n    }\n  };\n  update();\n  tryOnMounted(update);\n  const listenerOptions = { passive: true };\n  useEventListener(\"resize\", update, listenerOptions);\n  if (window && type === \"visual\" && window.visualViewport) {\n    useEventListener(window.visualViewport, \"resize\", update, listenerOptions);\n  }\n  if (listenOrientation) {\n    const matches = useMediaQuery(\"(orientation: portrait)\");\n    watch(matches, () => update());\n  }\n  return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCountdown, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","/*!\n * better-scroll / core\n * (c) 2016-2023 ustbhuangyi\n * Released under the MIT License.\n */\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\n\nvar propertiesConfig = [\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorX.currentPos',\r\n        key: 'x'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorY.currentPos',\r\n        key: 'y'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorX.hasScroll',\r\n        key: 'hasHorizontalScroll'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorY.hasScroll',\r\n        key: 'hasVerticalScroll'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorX.contentSize',\r\n        key: 'scrollerWidth'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorY.contentSize',\r\n        key: 'scrollerHeight'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorX.maxScrollPos',\r\n        key: 'maxScrollX'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorY.maxScrollPos',\r\n        key: 'maxScrollY'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorX.minScrollPos',\r\n        key: 'minScrollX'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorY.minScrollPos',\r\n        key: 'minScrollY'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorX.movingDirection',\r\n        key: 'movingDirectionX'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorY.movingDirection',\r\n        key: 'movingDirectionY'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorX.direction',\r\n        key: 'directionX'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBehaviorY.direction',\r\n        key: 'directionY'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.actions.enabled',\r\n        key: 'enabled'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.animater.pending',\r\n        key: 'pending'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.animater.stop',\r\n        key: 'stop'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollTo',\r\n        key: 'scrollTo'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollBy',\r\n        key: 'scrollBy'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.scrollToElement',\r\n        key: 'scrollToElement'\r\n    },\r\n    {\r\n        sourceKey: 'scroller.resetPosition',\r\n        key: 'resetPosition'\r\n    }\r\n];\n\nfunction warn(msg) {\r\n    console.error(\"[BScroll warn]: \" + msg);\r\n}\n\n// ssr support\r\nvar inBrowser = typeof window !== 'undefined';\r\nvar ua = inBrowser && navigator.userAgent.toLowerCase();\r\nvar isWeChatDevTools = !!(ua && /wechatdevtools/.test(ua));\r\nvar isAndroid = ua && ua.indexOf('android') > 0;\r\n/* istanbul ignore next */\r\nvar isIOSBadVersion = (function () {\r\n    if (typeof ua === 'string') {\r\n        var regex = /os (\\d\\d?_\\d(_\\d)?)/;\r\n        var matches = regex.exec(ua);\r\n        if (!matches)\r\n            return false;\r\n        var parts = matches[1].split('_').map(function (item) {\r\n            return parseInt(item, 10);\r\n        });\r\n        // ios version >= 13.4 issue 982\r\n        return !!(parts[0] === 13 && parts[1] >= 4);\r\n    }\r\n    return false;\r\n})();\r\n/* istanbul ignore next */\r\nvar supportsPassive = false;\r\n/* istanbul ignore next */\r\nif (inBrowser) {\r\n    var EventName = 'test-passive';\r\n    try {\r\n        var opts = {};\r\n        Object.defineProperty(opts, 'passive', {\r\n            get: function () {\r\n                supportsPassive = true;\r\n            },\r\n        }); // https://github.com/facebook/flow/issues/285\r\n        window.addEventListener(EventName, function () { }, opts);\r\n    }\r\n    catch (e) { }\r\n}\n\nfunction getNow() {\r\n    return window.performance &&\r\n        window.performance.now &&\r\n        window.performance.timing\r\n        ? window.performance.now() + window.performance.timing.navigationStart\r\n        : +new Date();\r\n}\r\nvar extend = function (target, source) {\r\n    for (var key in source) {\r\n        target[key] = source[key];\r\n    }\r\n    return target;\r\n};\r\nfunction isUndef(v) {\r\n    return v === undefined || v === null;\r\n}\r\nfunction between(x, min, max) {\r\n    if (x < min) {\r\n        return min;\r\n    }\r\n    if (x > max) {\r\n        return max;\r\n    }\r\n    return x;\r\n}\n\nvar elementStyle = (inBrowser &&\r\n    document.createElement('div').style);\r\nvar vendor = (function () {\r\n    /* istanbul ignore if  */\r\n    if (!inBrowser) {\r\n        return false;\r\n    }\r\n    var transformNames = [\r\n        {\r\n            key: 'standard',\r\n            value: 'transform',\r\n        },\r\n        {\r\n            key: 'webkit',\r\n            value: 'webkitTransform',\r\n        },\r\n        {\r\n            key: 'Moz',\r\n            value: 'MozTransform',\r\n        },\r\n        {\r\n            key: 'O',\r\n            value: 'OTransform',\r\n        },\r\n        {\r\n            key: 'ms',\r\n            value: 'msTransform',\r\n        },\r\n    ];\r\n    for (var _i = 0, transformNames_1 = transformNames; _i < transformNames_1.length; _i++) {\r\n        var obj = transformNames_1[_i];\r\n        if (elementStyle[obj.value] !== undefined) {\r\n            return obj.key;\r\n        }\r\n    }\r\n    /* istanbul ignore next  */\r\n    return false;\r\n})();\r\n/* istanbul ignore next  */\r\nfunction prefixStyle(style) {\r\n    if (vendor === false) {\r\n        return style;\r\n    }\r\n    if (vendor === 'standard') {\r\n        if (style === 'transitionEnd') {\r\n            return 'transitionend';\r\n        }\r\n        return style;\r\n    }\r\n    return vendor + style.charAt(0).toUpperCase() + style.substr(1);\r\n}\r\nfunction getElement(el) {\r\n    return (typeof el === 'string' ? document.querySelector(el) : el);\r\n}\r\nfunction addEvent(el, type, fn, capture) {\r\n    var useCapture = supportsPassive\r\n        ? {\r\n            passive: false,\r\n            capture: !!capture,\r\n        }\r\n        : !!capture;\r\n    el.addEventListener(type, fn, useCapture);\r\n}\r\nfunction removeEvent(el, type, fn, capture) {\r\n    el.removeEventListener(type, fn, {\r\n        capture: !!capture,\r\n    });\r\n}\r\nfunction maybePrevent(e) {\r\n    if (e.cancelable) {\r\n        e.preventDefault();\r\n    }\r\n}\r\nfunction offset(el) {\r\n    var left = 0;\r\n    var top = 0;\r\n    while (el) {\r\n        left -= el.offsetLeft;\r\n        top -= el.offsetTop;\r\n        el = el.offsetParent;\r\n    }\r\n    return {\r\n        left: left,\r\n        top: top,\r\n    };\r\n}\r\nvendor && vendor !== 'standard' ? '-' + vendor.toLowerCase() + '-' : '';\r\nvar transform = prefixStyle('transform');\r\nvar transition = prefixStyle('transition');\r\nvar hasPerspective = inBrowser && prefixStyle('perspective') in elementStyle;\r\n// fix issue #361\r\nvar hasTouch = inBrowser && ('ontouchstart' in window || isWeChatDevTools);\r\nvar hasTransition = inBrowser && transition in elementStyle;\r\nvar style = {\r\n    transform: transform,\r\n    transition: transition,\r\n    transitionTimingFunction: prefixStyle('transitionTimingFunction'),\r\n    transitionDuration: prefixStyle('transitionDuration'),\r\n    transitionDelay: prefixStyle('transitionDelay'),\r\n    transformOrigin: prefixStyle('transformOrigin'),\r\n    transitionEnd: prefixStyle('transitionEnd'),\r\n    transitionProperty: prefixStyle('transitionProperty'),\r\n};\r\nvar eventTypeMap = {\r\n    touchstart: 1,\r\n    touchmove: 1,\r\n    touchend: 1,\r\n    touchcancel: 1,\r\n    mousedown: 2,\r\n    mousemove: 2,\r\n    mouseup: 2,\r\n};\r\nfunction getRect(el) {\r\n    /* istanbul ignore if  */\r\n    if (el instanceof window.SVGElement) {\r\n        var rect = el.getBoundingClientRect();\r\n        return {\r\n            top: rect.top,\r\n            left: rect.left,\r\n            width: rect.width,\r\n            height: rect.height,\r\n        };\r\n    }\r\n    else {\r\n        return {\r\n            top: el.offsetTop,\r\n            left: el.offsetLeft,\r\n            width: el.offsetWidth,\r\n            height: el.offsetHeight,\r\n        };\r\n    }\r\n}\r\nfunction preventDefaultExceptionFn(el, exceptions) {\r\n    for (var i in exceptions) {\r\n        if (exceptions[i].test(el[i])) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nvar tagExceptionFn = preventDefaultExceptionFn;\r\nfunction tap(e, eventName) {\r\n    var ev = document.createEvent('Event');\r\n    ev.initEvent(eventName, true, true);\r\n    ev.pageX = e.pageX;\r\n    ev.pageY = e.pageY;\r\n    e.target.dispatchEvent(ev);\r\n}\r\nfunction click(e, event) {\r\n    if (event === void 0) { event = 'click'; }\r\n    var eventSource;\r\n    if (e.type === 'mouseup') {\r\n        eventSource = e;\r\n    }\r\n    else if (e.type === 'touchend' || e.type === 'touchcancel') {\r\n        eventSource = e.changedTouches[0];\r\n    }\r\n    var posSrc = {};\r\n    if (eventSource) {\r\n        posSrc.screenX = eventSource.screenX || 0;\r\n        posSrc.screenY = eventSource.screenY || 0;\r\n        posSrc.clientX = eventSource.clientX || 0;\r\n        posSrc.clientY = eventSource.clientY || 0;\r\n    }\r\n    var ev;\r\n    var bubbles = true;\r\n    var cancelable = true;\r\n    var ctrlKey = e.ctrlKey, shiftKey = e.shiftKey, altKey = e.altKey, metaKey = e.metaKey;\r\n    var pressedKeysMap = {\r\n        ctrlKey: ctrlKey,\r\n        shiftKey: shiftKey,\r\n        altKey: altKey,\r\n        metaKey: metaKey,\r\n    };\r\n    if (typeof MouseEvent !== 'undefined') {\r\n        try {\r\n            ev = new MouseEvent(event, extend(__assign({ bubbles: bubbles,\r\n                cancelable: cancelable }, pressedKeysMap), posSrc));\r\n        }\r\n        catch (e) {\r\n            /* istanbul ignore next */\r\n            createEvent();\r\n        }\r\n    }\r\n    else {\r\n        createEvent();\r\n    }\r\n    function createEvent() {\r\n        ev = document.createEvent('Event');\r\n        ev.initEvent(event, bubbles, cancelable);\r\n        extend(ev, posSrc);\r\n    }\r\n    // forwardedTouchEvent set to true in case of the conflict with fastclick\r\n    ev.forwardedTouchEvent = true;\r\n    ev._constructed = true;\r\n    e.target.dispatchEvent(ev);\r\n}\r\nfunction dblclick(e) {\r\n    click(e, 'dblclick');\r\n}\n\nvar ease = {\r\n    // easeOutQuint\r\n    swipe: {\r\n        style: 'cubic-bezier(0.23, 1, 0.32, 1)',\r\n        fn: function (t) {\r\n            return 1 + --t * t * t * t * t;\r\n        }\r\n    },\r\n    // easeOutQuard\r\n    swipeBounce: {\r\n        style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\r\n        fn: function (t) {\r\n            return t * (2 - t);\r\n        }\r\n    },\r\n    // easeOutQuart\r\n    bounce: {\r\n        style: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\r\n        fn: function (t) {\r\n            return 1 - --t * t * t * t;\r\n        }\r\n    }\r\n};\n\nvar DEFAULT_INTERVAL = 1000 / 60;\r\nvar windowCompat = inBrowser && window;\r\n/* istanbul ignore next */\r\nfunction noop$1() { }\r\nvar requestAnimationFrame = (function () {\r\n    /* istanbul ignore if  */\r\n    if (!inBrowser) {\r\n        return noop$1;\r\n    }\r\n    return (windowCompat.requestAnimationFrame ||\r\n        windowCompat.webkitRequestAnimationFrame ||\r\n        windowCompat.mozRequestAnimationFrame ||\r\n        windowCompat.oRequestAnimationFrame ||\r\n        // if all else fails, use setTimeout\r\n        function (callback) {\r\n            return window.setTimeout(callback, callback.interval || DEFAULT_INTERVAL); // make interval as precise as possible.\r\n        });\r\n})();\r\nvar cancelAnimationFrame = (function () {\r\n    /* istanbul ignore if  */\r\n    if (!inBrowser) {\r\n        return noop$1;\r\n    }\r\n    return (windowCompat.cancelAnimationFrame ||\r\n        windowCompat.webkitCancelAnimationFrame ||\r\n        windowCompat.mozCancelAnimationFrame ||\r\n        windowCompat.oCancelAnimationFrame ||\r\n        function (id) {\r\n            window.clearTimeout(id);\r\n        });\r\n})();\n\n/* istanbul ignore next */\r\nvar noop = function (val) { };\r\nvar sharedPropertyDefinition = {\r\n    enumerable: true,\r\n    configurable: true,\r\n    get: noop,\r\n    set: noop,\r\n};\r\nvar getProperty = function (obj, key) {\r\n    var keys = key.split('.');\r\n    for (var i = 0; i < keys.length - 1; i++) {\r\n        obj = obj[keys[i]];\r\n        if (typeof obj !== 'object' || !obj)\r\n            return;\r\n    }\r\n    var lastKey = keys.pop();\r\n    if (typeof obj[lastKey] === 'function') {\r\n        return function () {\r\n            return obj[lastKey].apply(obj, arguments);\r\n        };\r\n    }\r\n    else {\r\n        return obj[lastKey];\r\n    }\r\n};\r\nvar setProperty = function (obj, key, value) {\r\n    var keys = key.split('.');\r\n    var temp;\r\n    for (var i = 0; i < keys.length - 1; i++) {\r\n        temp = keys[i];\r\n        if (!obj[temp])\r\n            obj[temp] = {};\r\n        obj = obj[temp];\r\n    }\r\n    obj[keys.pop()] = value;\r\n};\r\nfunction propertiesProxy(target, sourceKey, key) {\r\n    sharedPropertyDefinition.get = function proxyGetter() {\r\n        return getProperty(this, sourceKey);\r\n    };\r\n    sharedPropertyDefinition.set = function proxySetter(val) {\r\n        setProperty(this, sourceKey, val);\r\n    };\r\n    Object.defineProperty(target, key, sharedPropertyDefinition);\r\n}\n\nvar EventEmitter = /** @class */ (function () {\r\n    function EventEmitter(names) {\r\n        this.events = {};\r\n        this.eventTypes = {};\r\n        this.registerType(names);\r\n    }\r\n    EventEmitter.prototype.on = function (type, fn, context) {\r\n        if (context === void 0) { context = this; }\r\n        this.hasType(type);\r\n        if (!this.events[type]) {\r\n            this.events[type] = [];\r\n        }\r\n        this.events[type].push([fn, context]);\r\n        return this;\r\n    };\r\n    EventEmitter.prototype.once = function (type, fn, context) {\r\n        var _this = this;\r\n        if (context === void 0) { context = this; }\r\n        this.hasType(type);\r\n        var magic = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            _this.off(type, magic);\r\n            var ret = fn.apply(context, args);\r\n            if (ret === true) {\r\n                return ret;\r\n            }\r\n        };\r\n        magic.fn = fn;\r\n        this.on(type, magic);\r\n        return this;\r\n    };\r\n    EventEmitter.prototype.off = function (type, fn) {\r\n        if (!type && !fn) {\r\n            this.events = {};\r\n            return this;\r\n        }\r\n        if (type) {\r\n            this.hasType(type);\r\n            if (!fn) {\r\n                this.events[type] = [];\r\n                return this;\r\n            }\r\n            var events = this.events[type];\r\n            if (!events) {\r\n                return this;\r\n            }\r\n            var count = events.length;\r\n            while (count--) {\r\n                if (events[count][0] === fn ||\r\n                    (events[count][0] && events[count][0].fn === fn)) {\r\n                    events.splice(count, 1);\r\n                }\r\n            }\r\n            return this;\r\n        }\r\n    };\r\n    EventEmitter.prototype.trigger = function (type) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        this.hasType(type);\r\n        var events = this.events[type];\r\n        if (!events) {\r\n            return;\r\n        }\r\n        var len = events.length;\r\n        var eventsCopy = __spreadArrays(events);\r\n        var ret;\r\n        for (var i = 0; i < len; i++) {\r\n            var event_1 = eventsCopy[i];\r\n            var fn = event_1[0], context = event_1[1];\r\n            if (fn) {\r\n                ret = fn.apply(context, args);\r\n                if (ret === true) {\r\n                    return ret;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    EventEmitter.prototype.registerType = function (names) {\r\n        var _this = this;\r\n        names.forEach(function (type) {\r\n            _this.eventTypes[type] = type;\r\n        });\r\n    };\r\n    EventEmitter.prototype.destroy = function () {\r\n        this.events = {};\r\n        this.eventTypes = {};\r\n    };\r\n    EventEmitter.prototype.hasType = function (type) {\r\n        var types = this.eventTypes;\r\n        var isType = types[type] === type;\r\n        if (!isType) {\r\n            warn(\"EventEmitter has used unknown event type: \\\"\" + type + \"\\\", should be oneof [\" +\r\n                (\"\" + Object.keys(types).map(function (_) { return JSON.stringify(_); })) +\r\n                \"]\");\r\n        }\r\n    };\r\n    return EventEmitter;\r\n}());\r\nvar EventRegister = /** @class */ (function () {\r\n    function EventRegister(wrapper, events) {\r\n        this.wrapper = wrapper;\r\n        this.events = events;\r\n        this.addDOMEvents();\r\n    }\r\n    EventRegister.prototype.destroy = function () {\r\n        this.removeDOMEvents();\r\n        this.events = [];\r\n    };\r\n    EventRegister.prototype.addDOMEvents = function () {\r\n        this.handleDOMEvents(addEvent);\r\n    };\r\n    EventRegister.prototype.removeDOMEvents = function () {\r\n        this.handleDOMEvents(removeEvent);\r\n    };\r\n    EventRegister.prototype.handleDOMEvents = function (eventOperation) {\r\n        var _this = this;\r\n        var wrapper = this.wrapper;\r\n        this.events.forEach(function (event) {\r\n            eventOperation(wrapper, event.name, _this, !!event.capture);\r\n        });\r\n    };\r\n    EventRegister.prototype.handleEvent = function (e) {\r\n        var eventType = e.type;\r\n        this.events.some(function (event) {\r\n            if (event.name === eventType) {\r\n                event.handler(e);\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n    };\r\n    return EventRegister;\r\n}());\n\nvar CustomOptions = /** @class */ (function () {\r\n    function CustomOptions() {\r\n    }\r\n    return CustomOptions;\r\n}());\r\nvar OptionsConstructor = /** @class */ (function (_super) {\r\n    __extends(OptionsConstructor, _super);\r\n    function OptionsConstructor() {\r\n        var _this = _super.call(this) || this;\r\n        _this.startX = 0;\r\n        _this.startY = 0;\r\n        _this.scrollX = false;\r\n        _this.scrollY = true;\r\n        _this.freeScroll = false;\r\n        _this.directionLockThreshold = 0;\r\n        _this.eventPassthrough = \"\" /* None */;\r\n        _this.click = false;\r\n        _this.dblclick = false;\r\n        _this.tap = '';\r\n        _this.bounce = {\r\n            top: true,\r\n            bottom: true,\r\n            left: true,\r\n            right: true,\r\n        };\r\n        _this.bounceTime = 800;\r\n        _this.momentum = true;\r\n        _this.momentumLimitTime = 300;\r\n        _this.momentumLimitDistance = 15;\r\n        _this.swipeTime = 2500;\r\n        _this.swipeBounceTime = 500;\r\n        _this.deceleration = 0.0015;\r\n        _this.flickLimitTime = 200;\r\n        _this.flickLimitDistance = 100;\r\n        _this.resizePolling = 60;\r\n        _this.probeType = 0 /* Default */;\r\n        _this.stopPropagation = false;\r\n        _this.preventDefault = true;\r\n        _this.preventDefaultException = {\r\n            tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/,\r\n        };\r\n        _this.tagException = {\r\n            tagName: /^TEXTAREA$/,\r\n        };\r\n        _this.HWCompositing = true;\r\n        _this.useTransition = true;\r\n        _this.bindToWrapper = false;\r\n        _this.bindToTarget = false;\r\n        _this.disableMouse = hasTouch;\r\n        _this.disableTouch = !hasTouch;\r\n        _this.autoBlur = true;\r\n        _this.autoEndDistance = 5;\r\n        _this.outOfBoundaryDampingFactor = 1 / 3;\r\n        _this.specifiedIndexAsContent = 0;\r\n        _this.quadrant = 1 /* First */;\r\n        return _this;\r\n    }\r\n    OptionsConstructor.prototype.merge = function (options) {\r\n        if (!options)\r\n            return this;\r\n        for (var key in options) {\r\n            if (key === 'bounce') {\r\n                this.bounce = this.resolveBounce(options[key]);\r\n                continue;\r\n            }\r\n            this[key] = options[key];\r\n        }\r\n        return this;\r\n    };\r\n    OptionsConstructor.prototype.process = function () {\r\n        this.translateZ =\r\n            this.HWCompositing && hasPerspective ? ' translateZ(1px)' : '';\r\n        this.useTransition = this.useTransition && hasTransition;\r\n        this.preventDefault = !this.eventPassthrough && this.preventDefault;\r\n        // If you want eventPassthrough I have to lock one of the axes\r\n        this.scrollX =\r\n            this.eventPassthrough === \"horizontal\" /* Horizontal */\r\n                ? false\r\n                : this.scrollX;\r\n        this.scrollY =\r\n            this.eventPassthrough === \"vertical\" /* Vertical */ ? false : this.scrollY;\r\n        // With eventPassthrough we also need lockDirection mechanism\r\n        this.freeScroll = this.freeScroll && !this.eventPassthrough;\r\n        // force true when freeScroll is true\r\n        this.scrollX = this.freeScroll ? true : this.scrollX;\r\n        this.scrollY = this.freeScroll ? true : this.scrollY;\r\n        this.directionLockThreshold = this.eventPassthrough\r\n            ? 0\r\n            : this.directionLockThreshold;\r\n        return this;\r\n    };\r\n    OptionsConstructor.prototype.resolveBounce = function (bounceOptions) {\r\n        var DEFAULT_BOUNCE = {\r\n            top: true,\r\n            right: true,\r\n            bottom: true,\r\n            left: true,\r\n        };\r\n        var NEGATED_BOUNCE = {\r\n            top: false,\r\n            right: false,\r\n            bottom: false,\r\n            left: false,\r\n        };\r\n        var ret;\r\n        if (typeof bounceOptions === 'object') {\r\n            ret = extend(DEFAULT_BOUNCE, bounceOptions);\r\n        }\r\n        else {\r\n            ret = bounceOptions ? DEFAULT_BOUNCE : NEGATED_BOUNCE;\r\n        }\r\n        return ret;\r\n    };\r\n    return OptionsConstructor;\r\n}(CustomOptions));\n\nvar ActionsHandler = /** @class */ (function () {\r\n    function ActionsHandler(wrapper, options) {\r\n        this.wrapper = wrapper;\r\n        this.options = options;\r\n        this.hooks = new EventEmitter([\r\n            'beforeStart',\r\n            'start',\r\n            'move',\r\n            'end',\r\n            'click',\r\n        ]);\r\n        this.handleDOMEvents();\r\n    }\r\n    ActionsHandler.prototype.handleDOMEvents = function () {\r\n        var _a = this.options, bindToWrapper = _a.bindToWrapper, disableMouse = _a.disableMouse, disableTouch = _a.disableTouch, click = _a.click;\r\n        var wrapper = this.wrapper;\r\n        var target = bindToWrapper ? wrapper : window;\r\n        var wrapperEvents = [];\r\n        var targetEvents = [];\r\n        var shouldRegisterTouch = !disableTouch;\r\n        var shouldRegisterMouse = !disableMouse;\r\n        if (click) {\r\n            wrapperEvents.push({\r\n                name: 'click',\r\n                handler: this.click.bind(this),\r\n                capture: true,\r\n            });\r\n        }\r\n        if (shouldRegisterTouch) {\r\n            wrapperEvents.push({\r\n                name: 'touchstart',\r\n                handler: this.start.bind(this),\r\n            });\r\n            targetEvents.push({\r\n                name: 'touchmove',\r\n                handler: this.move.bind(this),\r\n            }, {\r\n                name: 'touchend',\r\n                handler: this.end.bind(this),\r\n            }, {\r\n                name: 'touchcancel',\r\n                handler: this.end.bind(this),\r\n            });\r\n        }\r\n        if (shouldRegisterMouse) {\r\n            wrapperEvents.push({\r\n                name: 'mousedown',\r\n                handler: this.start.bind(this),\r\n            });\r\n            targetEvents.push({\r\n                name: 'mousemove',\r\n                handler: this.move.bind(this),\r\n            }, {\r\n                name: 'mouseup',\r\n                handler: this.end.bind(this),\r\n            });\r\n        }\r\n        this.wrapperEventRegister = new EventRegister(wrapper, wrapperEvents);\r\n        this.targetEventRegister = new EventRegister(target, targetEvents);\r\n    };\r\n    ActionsHandler.prototype.beforeHandler = function (e, type) {\r\n        var _a = this.options, preventDefault = _a.preventDefault, stopPropagation = _a.stopPropagation, preventDefaultException = _a.preventDefaultException;\r\n        var preventDefaultConditions = {\r\n            start: function () {\r\n                return (preventDefault &&\r\n                    !preventDefaultExceptionFn(e.target, preventDefaultException));\r\n            },\r\n            end: function () {\r\n                return (preventDefault &&\r\n                    !preventDefaultExceptionFn(e.target, preventDefaultException));\r\n            },\r\n            move: function () {\r\n                return preventDefault;\r\n            },\r\n        };\r\n        if (preventDefaultConditions[type]()) {\r\n            e.preventDefault();\r\n        }\r\n        if (stopPropagation) {\r\n            e.stopPropagation();\r\n        }\r\n    };\r\n    ActionsHandler.prototype.setInitiated = function (type) {\r\n        if (type === void 0) { type = 0; }\r\n        this.initiated = type;\r\n    };\r\n    ActionsHandler.prototype.start = function (e) {\r\n        var _eventType = eventTypeMap[e.type];\r\n        if (this.initiated && this.initiated !== _eventType) {\r\n            return;\r\n        }\r\n        this.setInitiated(_eventType);\r\n        // if textarea or other html tags in options.tagException is manipulated\r\n        // do not make bs scroll\r\n        if (tagExceptionFn(e.target, this.options.tagException)) {\r\n            this.setInitiated();\r\n            return;\r\n        }\r\n        // only allow mouse left button\r\n        if (_eventType === 2 /* Mouse */ && e.button !== 0 /* Left */)\r\n            return;\r\n        if (this.hooks.trigger(this.hooks.eventTypes.beforeStart, e)) {\r\n            return;\r\n        }\r\n        this.beforeHandler(e, 'start');\r\n        var point = (e.touches ? e.touches[0] : e);\r\n        this.pointX = point.pageX;\r\n        this.pointY = point.pageY;\r\n        this.hooks.trigger(this.hooks.eventTypes.start, e);\r\n    };\r\n    ActionsHandler.prototype.move = function (e) {\r\n        if (eventTypeMap[e.type] !== this.initiated) {\r\n            return;\r\n        }\r\n        this.beforeHandler(e, 'move');\r\n        var point = (e.touches ? e.touches[0] : e);\r\n        var deltaX = point.pageX - this.pointX;\r\n        var deltaY = point.pageY - this.pointY;\r\n        this.pointX = point.pageX;\r\n        this.pointY = point.pageY;\r\n        if (this.hooks.trigger(this.hooks.eventTypes.move, {\r\n            deltaX: deltaX,\r\n            deltaY: deltaY,\r\n            e: e,\r\n        })) {\r\n            return;\r\n        }\r\n        // auto end when out of viewport\r\n        var scrollLeft = document.documentElement.scrollLeft ||\r\n            window.pageXOffset ||\r\n            document.body.scrollLeft;\r\n        var scrollTop = document.documentElement.scrollTop ||\r\n            window.pageYOffset ||\r\n            document.body.scrollTop;\r\n        var pX = this.pointX - scrollLeft;\r\n        var pY = this.pointY - scrollTop;\r\n        var autoEndDistance = this.options.autoEndDistance;\r\n        if (pX > document.documentElement.clientWidth - autoEndDistance ||\r\n            pY > document.documentElement.clientHeight - autoEndDistance ||\r\n            pX < autoEndDistance ||\r\n            pY < autoEndDistance) {\r\n            this.end(e);\r\n        }\r\n    };\r\n    ActionsHandler.prototype.end = function (e) {\r\n        if (eventTypeMap[e.type] !== this.initiated) {\r\n            return;\r\n        }\r\n        this.setInitiated();\r\n        this.beforeHandler(e, 'end');\r\n        this.hooks.trigger(this.hooks.eventTypes.end, e);\r\n    };\r\n    ActionsHandler.prototype.click = function (e) {\r\n        this.hooks.trigger(this.hooks.eventTypes.click, e);\r\n    };\r\n    ActionsHandler.prototype.setContent = function (content) {\r\n        if (content !== this.wrapper) {\r\n            this.wrapper = content;\r\n            this.rebindDOMEvents();\r\n        }\r\n    };\r\n    ActionsHandler.prototype.rebindDOMEvents = function () {\r\n        this.wrapperEventRegister.destroy();\r\n        this.targetEventRegister.destroy();\r\n        this.handleDOMEvents();\r\n    };\r\n    ActionsHandler.prototype.destroy = function () {\r\n        this.wrapperEventRegister.destroy();\r\n        this.targetEventRegister.destroy();\r\n        this.hooks.destroy();\r\n    };\r\n    return ActionsHandler;\r\n}());\n\nvar translaterMetaData = {\r\n    x: ['translateX', 'px'],\r\n    y: ['translateY', 'px'],\r\n};\r\nvar Translater = /** @class */ (function () {\r\n    function Translater(content) {\r\n        this.setContent(content);\r\n        this.hooks = new EventEmitter(['beforeTranslate', 'translate']);\r\n    }\r\n    Translater.prototype.getComputedPosition = function () {\r\n        var cssStyle = window.getComputedStyle(this.content, null);\r\n        var matrix = cssStyle[style.transform].split(')')[0].split(', ');\r\n        var x = +(matrix[12] || matrix[4]) || 0;\r\n        var y = +(matrix[13] || matrix[5]) || 0;\r\n        return {\r\n            x: x,\r\n            y: y,\r\n        };\r\n    };\r\n    Translater.prototype.translate = function (point) {\r\n        var transformStyle = [];\r\n        Object.keys(point).forEach(function (key) {\r\n            if (!translaterMetaData[key]) {\r\n                return;\r\n            }\r\n            var transformFnName = translaterMetaData[key][0];\r\n            if (transformFnName) {\r\n                var transformFnArgUnit = translaterMetaData[key][1];\r\n                var transformFnArg = point[key];\r\n                transformStyle.push(transformFnName + \"(\" + transformFnArg + transformFnArgUnit + \")\");\r\n            }\r\n        });\r\n        this.hooks.trigger(this.hooks.eventTypes.beforeTranslate, transformStyle, point);\r\n        this.style[style.transform] = transformStyle.join(' ');\r\n        this.hooks.trigger(this.hooks.eventTypes.translate, point);\r\n    };\r\n    Translater.prototype.setContent = function (content) {\r\n        if (this.content !== content) {\r\n            this.content = content;\r\n            this.style = content.style;\r\n        }\r\n    };\r\n    Translater.prototype.destroy = function () {\r\n        this.hooks.destroy();\r\n    };\r\n    return Translater;\r\n}());\n\nvar Base = /** @class */ (function () {\r\n    function Base(content, translater, options) {\r\n        this.translater = translater;\r\n        this.options = options;\r\n        this.timer = 0;\r\n        this.hooks = new EventEmitter([\r\n            'move',\r\n            'end',\r\n            'beforeForceStop',\r\n            'forceStop',\r\n            'callStop',\r\n            'time',\r\n            'timeFunction',\r\n        ]);\r\n        this.setContent(content);\r\n    }\r\n    Base.prototype.translate = function (endPoint) {\r\n        this.translater.translate(endPoint);\r\n    };\r\n    Base.prototype.setPending = function (pending) {\r\n        this.pending = pending;\r\n    };\r\n    Base.prototype.setForceStopped = function (forceStopped) {\r\n        this.forceStopped = forceStopped;\r\n    };\r\n    Base.prototype.setCallStop = function (called) {\r\n        this.callStopWhenPending = called;\r\n    };\r\n    Base.prototype.setContent = function (content) {\r\n        if (this.content !== content) {\r\n            this.content = content;\r\n            this.style = content.style;\r\n            this.stop();\r\n        }\r\n    };\r\n    Base.prototype.clearTimer = function () {\r\n        if (this.timer) {\r\n            cancelAnimationFrame(this.timer);\r\n            this.timer = 0;\r\n        }\r\n    };\r\n    Base.prototype.destroy = function () {\r\n        this.hooks.destroy();\r\n        cancelAnimationFrame(this.timer);\r\n    };\r\n    return Base;\r\n}());\n\n// iOS 13.6 - 14.x, window.getComputedStyle sometimes will get wrong transform value\r\n// when bs use transition mode\r\n// eg: translateY -100px -> -200px, when the last frame which is about to scroll to -200px\r\n// window.getComputedStyle(this.content) will calculate transformY to be -100px(startPoint)\r\n// it is weird\r\n// so we should validate position caculated by 'window.getComputedStyle'\r\nvar isValidPostion = function (startPoint, endPoint, currentPos, prePos) {\r\n    var computeDirection = function (endValue, startValue) {\r\n        var delta = endValue - startValue;\r\n        var direction = delta > 0\r\n            ? -1 /* Negative */\r\n            : delta < 0\r\n                ? 1 /* Positive */\r\n                : 0 /* Default */;\r\n        return direction;\r\n    };\r\n    var directionX = computeDirection(endPoint.x, startPoint.x);\r\n    var directionY = computeDirection(endPoint.y, startPoint.y);\r\n    var deltaX = currentPos.x - prePos.x;\r\n    var deltaY = currentPos.y - prePos.y;\r\n    return directionX * deltaX <= 0 && directionY * deltaY <= 0;\r\n};\n\nvar Transition = /** @class */ (function (_super) {\r\n    __extends(Transition, _super);\r\n    function Transition() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Transition.prototype.startProbe = function (startPoint, endPoint) {\r\n        var _this = this;\r\n        var prePos = startPoint;\r\n        var probe = function () {\r\n            var pos = _this.translater.getComputedPosition();\r\n            if (isValidPostion(startPoint, endPoint, pos, prePos)) {\r\n                _this.hooks.trigger(_this.hooks.eventTypes.move, pos);\r\n            }\r\n            // call bs.stop() should not dispatch end hook again.\r\n            // forceStop hook will do this.\r\n            /* istanbul ignore if  */\r\n            if (!_this.pending) {\r\n                if (_this.callStopWhenPending) {\r\n                    _this.callStopWhenPending = false;\r\n                }\r\n                else {\r\n                    // transition ends should dispatch end hook.\r\n                    _this.hooks.trigger(_this.hooks.eventTypes.end, pos);\r\n                }\r\n            }\r\n            prePos = pos;\r\n            if (_this.pending) {\r\n                _this.timer = requestAnimationFrame(probe);\r\n            }\r\n        };\r\n        // when manually call bs.stop(), then bs.scrollTo()\r\n        // we should reset callStopWhenPending to dispatch end hook\r\n        if (this.callStopWhenPending) {\r\n            this.setCallStop(false);\r\n        }\r\n        cancelAnimationFrame(this.timer);\r\n        probe();\r\n    };\r\n    Transition.prototype.transitionTime = function (time) {\r\n        if (time === void 0) { time = 0; }\r\n        this.style[style.transitionDuration] = time + 'ms';\r\n        this.hooks.trigger(this.hooks.eventTypes.time, time);\r\n    };\r\n    Transition.prototype.transitionTimingFunction = function (easing) {\r\n        this.style[style.transitionTimingFunction] = easing;\r\n        this.hooks.trigger(this.hooks.eventTypes.timeFunction, easing);\r\n    };\r\n    Transition.prototype.transitionProperty = function () {\r\n        this.style[style.transitionProperty] = style.transform;\r\n    };\r\n    Transition.prototype.move = function (startPoint, endPoint, time, easingFn) {\r\n        this.setPending(time > 0);\r\n        this.transitionTimingFunction(easingFn);\r\n        this.transitionProperty();\r\n        this.transitionTime(time);\r\n        this.translate(endPoint);\r\n        var isRealtimeProbeType = this.options.probeType === 3 /* Realtime */;\r\n        if (time && isRealtimeProbeType) {\r\n            this.startProbe(startPoint, endPoint);\r\n        }\r\n        // if we change content's transformY in a tick\r\n        // such as: 0 -> 50px -> 0\r\n        // transitionend will not be triggered\r\n        // so we forceupdate by reflow\r\n        if (!time) {\r\n            this._reflow = this.content.offsetHeight;\r\n            if (isRealtimeProbeType) {\r\n                this.hooks.trigger(this.hooks.eventTypes.move, endPoint);\r\n            }\r\n            this.hooks.trigger(this.hooks.eventTypes.end, endPoint);\r\n        }\r\n    };\r\n    Transition.prototype.doStop = function () {\r\n        var pending = this.pending;\r\n        this.setForceStopped(false);\r\n        this.setCallStop(false);\r\n        // still in transition\r\n        if (pending) {\r\n            this.setPending(false);\r\n            cancelAnimationFrame(this.timer);\r\n            var _a = this.translater.getComputedPosition(), x = _a.x, y = _a.y;\r\n            this.transitionTime();\r\n            this.translate({ x: x, y: y });\r\n            this.setForceStopped(true);\r\n            this.setCallStop(true);\r\n            this.hooks.trigger(this.hooks.eventTypes.forceStop, { x: x, y: y });\r\n        }\r\n        return pending;\r\n    };\r\n    Transition.prototype.stop = function () {\r\n        var stopFromTransition = this.doStop();\r\n        if (stopFromTransition) {\r\n            this.hooks.trigger(this.hooks.eventTypes.callStop);\r\n        }\r\n    };\r\n    return Transition;\r\n}(Base));\n\nvar Animation = /** @class */ (function (_super) {\r\n    __extends(Animation, _super);\r\n    function Animation() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Animation.prototype.move = function (startPoint, endPoint, time, easingFn) {\r\n        // time is 0\r\n        if (!time) {\r\n            this.translate(endPoint);\r\n            if (this.options.probeType === 3 /* Realtime */) {\r\n                this.hooks.trigger(this.hooks.eventTypes.move, endPoint);\r\n            }\r\n            this.hooks.trigger(this.hooks.eventTypes.end, endPoint);\r\n            return;\r\n        }\r\n        this.animate(startPoint, endPoint, time, easingFn);\r\n    };\r\n    Animation.prototype.animate = function (startPoint, endPoint, duration, easingFn) {\r\n        var _this = this;\r\n        var startTime = getNow();\r\n        var destTime = startTime + duration;\r\n        var isRealtimeProbeType = this.options.probeType === 3 /* Realtime */;\r\n        var step = function () {\r\n            var now = getNow();\r\n            // js animation end\r\n            if (now >= destTime) {\r\n                _this.translate(endPoint);\r\n                if (isRealtimeProbeType) {\r\n                    _this.hooks.trigger(_this.hooks.eventTypes.move, endPoint);\r\n                }\r\n                _this.hooks.trigger(_this.hooks.eventTypes.end, endPoint);\r\n                return;\r\n            }\r\n            now = (now - startTime) / duration;\r\n            var easing = easingFn(now);\r\n            var newPoint = {};\r\n            Object.keys(endPoint).forEach(function (key) {\r\n                var startValue = startPoint[key];\r\n                var endValue = endPoint[key];\r\n                newPoint[key] = (endValue - startValue) * easing + startValue;\r\n            });\r\n            _this.translate(newPoint);\r\n            if (isRealtimeProbeType) {\r\n                _this.hooks.trigger(_this.hooks.eventTypes.move, newPoint);\r\n            }\r\n            if (_this.pending) {\r\n                _this.timer = requestAnimationFrame(step);\r\n            }\r\n            // call bs.stop() should not dispatch end hook again.\r\n            // forceStop hook will do this.\r\n            /* istanbul ignore if  */\r\n            if (!_this.pending) {\r\n                if (_this.callStopWhenPending) {\r\n                    _this.callStopWhenPending = false;\r\n                }\r\n                else {\r\n                    // raf ends should dispatch end hook.\r\n                    _this.hooks.trigger(_this.hooks.eventTypes.end, endPoint);\r\n                }\r\n            }\r\n        };\r\n        this.setPending(true);\r\n        // when manually call bs.stop(), then bs.scrollTo()\r\n        // we should reset callStopWhenPending to dispatch end hook\r\n        if (this.callStopWhenPending) {\r\n            this.setCallStop(false);\r\n        }\r\n        cancelAnimationFrame(this.timer);\r\n        step();\r\n    };\r\n    Animation.prototype.doStop = function () {\r\n        var pending = this.pending;\r\n        this.setForceStopped(false);\r\n        this.setCallStop(false);\r\n        // still in requestFrameAnimation\r\n        if (pending) {\r\n            this.setPending(false);\r\n            cancelAnimationFrame(this.timer);\r\n            var pos = this.translater.getComputedPosition();\r\n            this.setForceStopped(true);\r\n            this.setCallStop(true);\r\n            this.hooks.trigger(this.hooks.eventTypes.forceStop, pos);\r\n        }\r\n        return pending;\r\n    };\r\n    Animation.prototype.stop = function () {\r\n        var stopFromAnimation = this.doStop();\r\n        if (stopFromAnimation) {\r\n            this.hooks.trigger(this.hooks.eventTypes.callStop);\r\n        }\r\n    };\r\n    return Animation;\r\n}(Base));\n\nfunction createAnimater(element, translater, options) {\r\n    var useTransition = options.useTransition;\r\n    var animaterOptions = {};\r\n    Object.defineProperty(animaterOptions, 'probeType', {\r\n        enumerable: true,\r\n        configurable: false,\r\n        get: function () {\r\n            return options.probeType;\r\n        },\r\n    });\r\n    if (useTransition) {\r\n        return new Transition(element, translater, animaterOptions);\r\n    }\r\n    else {\r\n        return new Animation(element, translater, animaterOptions);\r\n    }\r\n}\n\nvar Behavior = /** @class */ (function () {\r\n    function Behavior(wrapper, content, options) {\r\n        this.wrapper = wrapper;\r\n        this.options = options;\r\n        this.hooks = new EventEmitter([\r\n            'beforeComputeBoundary',\r\n            'computeBoundary',\r\n            'momentum',\r\n            'end',\r\n            'ignoreHasScroll'\r\n        ]);\r\n        this.refresh(content);\r\n    }\r\n    Behavior.prototype.start = function () {\r\n        this.dist = 0;\r\n        this.setMovingDirection(0 /* Default */);\r\n        this.setDirection(0 /* Default */);\r\n    };\r\n    Behavior.prototype.move = function (delta) {\r\n        delta = this.hasScroll ? delta : 0;\r\n        this.setMovingDirection(delta);\r\n        return this.performDampingAlgorithm(delta, this.options.outOfBoundaryDampingFactor);\r\n    };\r\n    Behavior.prototype.setMovingDirection = function (delta) {\r\n        this.movingDirection =\r\n            delta > 0\r\n                ? -1 /* Negative */\r\n                : delta < 0\r\n                    ? 1 /* Positive */\r\n                    : 0 /* Default */;\r\n    };\r\n    Behavior.prototype.setDirection = function (delta) {\r\n        this.direction =\r\n            delta > 0\r\n                ? -1 /* Negative */\r\n                : delta < 0\r\n                    ? 1 /* Positive */\r\n                    : 0 /* Default */;\r\n    };\r\n    Behavior.prototype.performDampingAlgorithm = function (delta, dampingFactor) {\r\n        var newPos = this.currentPos + delta;\r\n        // Slow down or stop if outside of the boundaries\r\n        if (newPos > this.minScrollPos || newPos < this.maxScrollPos) {\r\n            if ((newPos > this.minScrollPos && this.options.bounces[0]) ||\r\n                (newPos < this.maxScrollPos && this.options.bounces[1])) {\r\n                newPos = this.currentPos + delta * dampingFactor;\r\n            }\r\n            else {\r\n                newPos =\r\n                    newPos > this.minScrollPos ? this.minScrollPos : this.maxScrollPos;\r\n            }\r\n        }\r\n        return newPos;\r\n    };\r\n    Behavior.prototype.end = function (duration) {\r\n        var momentumInfo = {\r\n            duration: 0\r\n        };\r\n        var absDist = Math.abs(this.currentPos - this.startPos);\r\n        // start momentum animation if needed\r\n        if (this.options.momentum &&\r\n            duration < this.options.momentumLimitTime &&\r\n            absDist > this.options.momentumLimitDistance) {\r\n            var wrapperSize = (this.direction === -1 /* Negative */ && this.options.bounces[0]) ||\r\n                (this.direction === 1 /* Positive */ && this.options.bounces[1])\r\n                ? this.wrapperSize\r\n                : 0;\r\n            momentumInfo = this.hasScroll\r\n                ? this.momentum(this.currentPos, this.startPos, duration, this.maxScrollPos, this.minScrollPos, wrapperSize, this.options)\r\n                : { destination: this.currentPos, duration: 0 };\r\n        }\r\n        else {\r\n            this.hooks.trigger(this.hooks.eventTypes.end, momentumInfo);\r\n        }\r\n        return momentumInfo;\r\n    };\r\n    Behavior.prototype.momentum = function (current, start, time, lowerMargin, upperMargin, wrapperSize, options) {\r\n        if (options === void 0) { options = this.options; }\r\n        var distance = current - start;\r\n        var speed = Math.abs(distance) / time;\r\n        var deceleration = options.deceleration, swipeBounceTime = options.swipeBounceTime, swipeTime = options.swipeTime;\r\n        var duration = Math.min(swipeTime, (speed * 2) / deceleration);\r\n        var momentumData = {\r\n            destination: current + ((speed * speed) / deceleration) * (distance < 0 ? -1 : 1),\r\n            duration: duration,\r\n            rate: 15\r\n        };\r\n        this.hooks.trigger(this.hooks.eventTypes.momentum, momentumData, distance);\r\n        if (momentumData.destination < lowerMargin) {\r\n            momentumData.destination = wrapperSize\r\n                ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - (wrapperSize / momentumData.rate) * speed)\r\n                : lowerMargin;\r\n            momentumData.duration = swipeBounceTime;\r\n        }\r\n        else if (momentumData.destination > upperMargin) {\r\n            momentumData.destination = wrapperSize\r\n                ? Math.min(upperMargin + wrapperSize / 4, upperMargin + (wrapperSize / momentumData.rate) * speed)\r\n                : upperMargin;\r\n            momentumData.duration = swipeBounceTime;\r\n        }\r\n        momentumData.destination = Math.round(momentumData.destination);\r\n        return momentumData;\r\n    };\r\n    Behavior.prototype.updateDirection = function () {\r\n        var absDist = this.currentPos - this.absStartPos;\r\n        this.setDirection(absDist);\r\n    };\r\n    Behavior.prototype.refresh = function (content) {\r\n        var _a = this.options.rect, size = _a.size, position = _a.position;\r\n        var isWrapperStatic = window.getComputedStyle(this.wrapper, null).position === 'static';\r\n        // Force reflow\r\n        var wrapperRect = getRect(this.wrapper);\r\n        // use client is more fair than offset\r\n        this.wrapperSize = this.wrapper[size === 'width' ? 'clientWidth' : 'clientHeight'];\r\n        this.setContent(content);\r\n        var contentRect = getRect(this.content);\r\n        this.contentSize = contentRect[size];\r\n        this.relativeOffset = contentRect[position];\r\n        /* istanbul ignore if  */\r\n        if (isWrapperStatic) {\r\n            this.relativeOffset -= wrapperRect[position];\r\n        }\r\n        this.computeBoundary();\r\n        this.setDirection(0 /* Default */);\r\n    };\r\n    Behavior.prototype.setContent = function (content) {\r\n        if (content !== this.content) {\r\n            this.content = content;\r\n            this.resetState();\r\n        }\r\n    };\r\n    Behavior.prototype.resetState = function () {\r\n        this.currentPos = 0;\r\n        this.startPos = 0;\r\n        this.dist = 0;\r\n        this.setDirection(0 /* Default */);\r\n        this.setMovingDirection(0 /* Default */);\r\n        this.resetStartPos();\r\n    };\r\n    Behavior.prototype.computeBoundary = function () {\r\n        this.hooks.trigger(this.hooks.eventTypes.beforeComputeBoundary);\r\n        var boundary = {\r\n            minScrollPos: 0,\r\n            maxScrollPos: this.wrapperSize - this.contentSize\r\n        };\r\n        if (boundary.maxScrollPos < 0) {\r\n            boundary.maxScrollPos -= this.relativeOffset;\r\n            if (this.options.specifiedIndexAsContent === 0) {\r\n                boundary.minScrollPos = -this.relativeOffset;\r\n            }\r\n        }\r\n        this.hooks.trigger(this.hooks.eventTypes.computeBoundary, boundary);\r\n        this.minScrollPos = boundary.minScrollPos;\r\n        this.maxScrollPos = boundary.maxScrollPos;\r\n        this.hasScroll =\r\n            this.options.scrollable && this.maxScrollPos < this.minScrollPos;\r\n        if (!this.hasScroll && this.minScrollPos < this.maxScrollPos) {\r\n            this.maxScrollPos = this.minScrollPos;\r\n            this.contentSize = this.wrapperSize;\r\n        }\r\n    };\r\n    Behavior.prototype.updatePosition = function (pos) {\r\n        this.currentPos = pos;\r\n    };\r\n    Behavior.prototype.getCurrentPos = function () {\r\n        return this.currentPos;\r\n    };\r\n    Behavior.prototype.checkInBoundary = function () {\r\n        var position = this.adjustPosition(this.currentPos);\r\n        var inBoundary = position === this.getCurrentPos();\r\n        return {\r\n            position: position,\r\n            inBoundary: inBoundary\r\n        };\r\n    };\r\n    // adjust position when out of boundary\r\n    Behavior.prototype.adjustPosition = function (pos) {\r\n        if (!this.hasScroll &&\r\n            !this.hooks.trigger(this.hooks.eventTypes.ignoreHasScroll)) {\r\n            pos = this.minScrollPos;\r\n        }\r\n        else if (pos > this.minScrollPos) {\r\n            pos = this.minScrollPos;\r\n        }\r\n        else if (pos < this.maxScrollPos) {\r\n            pos = this.maxScrollPos;\r\n        }\r\n        return pos;\r\n    };\r\n    Behavior.prototype.updateStartPos = function () {\r\n        this.startPos = this.currentPos;\r\n    };\r\n    Behavior.prototype.updateAbsStartPos = function () {\r\n        this.absStartPos = this.currentPos;\r\n    };\r\n    Behavior.prototype.resetStartPos = function () {\r\n        this.updateStartPos();\r\n        this.updateAbsStartPos();\r\n    };\r\n    Behavior.prototype.getAbsDist = function (delta) {\r\n        this.dist += delta;\r\n        return Math.abs(this.dist);\r\n    };\r\n    Behavior.prototype.destroy = function () {\r\n        this.hooks.destroy();\r\n    };\r\n    return Behavior;\r\n}());\n\nvar _a, _b, _c, _d;\r\nvar PassthroughHandlers = (_a = {},\r\n    _a[\"yes\" /* Yes */] = function (e) {\r\n        return true;\r\n    },\r\n    _a[\"no\" /* No */] = function (e) {\r\n        maybePrevent(e);\r\n        return false;\r\n    },\r\n    _a);\r\nvar DirectionMap = (_b = {},\r\n    _b[\"horizontal\" /* Horizontal */] = (_c = {},\r\n        _c[\"yes\" /* Yes */] = \"horizontal\" /* Horizontal */,\r\n        _c[\"no\" /* No */] = \"vertical\" /* Vertical */,\r\n        _c),\r\n    _b[\"vertical\" /* Vertical */] = (_d = {},\r\n        _d[\"yes\" /* Yes */] = \"vertical\" /* Vertical */,\r\n        _d[\"no\" /* No */] = \"horizontal\" /* Horizontal */,\r\n        _d),\r\n    _b);\r\nvar DirectionLockAction = /** @class */ (function () {\r\n    function DirectionLockAction(directionLockThreshold, freeScroll, eventPassthrough) {\r\n        this.directionLockThreshold = directionLockThreshold;\r\n        this.freeScroll = freeScroll;\r\n        this.eventPassthrough = eventPassthrough;\r\n        this.reset();\r\n    }\r\n    DirectionLockAction.prototype.reset = function () {\r\n        this.directionLocked = \"\" /* Default */;\r\n    };\r\n    DirectionLockAction.prototype.checkMovingDirection = function (absDistX, absDistY, e) {\r\n        this.computeDirectionLock(absDistX, absDistY);\r\n        return this.handleEventPassthrough(e);\r\n    };\r\n    DirectionLockAction.prototype.adjustDelta = function (deltaX, deltaY) {\r\n        if (this.directionLocked === \"horizontal\" /* Horizontal */) {\r\n            deltaY = 0;\r\n        }\r\n        else if (this.directionLocked === \"vertical\" /* Vertical */) {\r\n            deltaX = 0;\r\n        }\r\n        return {\r\n            deltaX: deltaX,\r\n            deltaY: deltaY,\r\n        };\r\n    };\r\n    DirectionLockAction.prototype.computeDirectionLock = function (absDistX, absDistY) {\r\n        // If you are scrolling in one direction, lock it\r\n        if (this.directionLocked === \"\" /* Default */ && !this.freeScroll) {\r\n            if (absDistX > absDistY + this.directionLockThreshold) {\r\n                this.directionLocked = \"horizontal\" /* Horizontal */; // lock horizontally\r\n            }\r\n            else if (absDistY >= absDistX + this.directionLockThreshold) {\r\n                this.directionLocked = \"vertical\" /* Vertical */; // lock vertically\r\n            }\r\n            else {\r\n                this.directionLocked = \"none\" /* None */; // no lock\r\n            }\r\n        }\r\n    };\r\n    DirectionLockAction.prototype.handleEventPassthrough = function (e) {\r\n        var handleMap = DirectionMap[this.directionLocked];\r\n        if (handleMap) {\r\n            if (this.eventPassthrough === handleMap[\"yes\" /* Yes */]) {\r\n                return PassthroughHandlers[\"yes\" /* Yes */](e);\r\n            }\r\n            else if (this.eventPassthrough === handleMap[\"no\" /* No */]) {\r\n                return PassthroughHandlers[\"no\" /* No */](e);\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    return DirectionLockAction;\r\n}());\n\nvar applyQuadrantTransformation = function (deltaX, deltaY, quadrant) {\r\n    if (quadrant === 2 /* Second */) {\r\n        return [deltaY, -deltaX];\r\n    }\r\n    else if (quadrant === 3 /* Third */) {\r\n        return [-deltaX, -deltaY];\r\n    }\r\n    else if (quadrant === 4 /* Forth */) {\r\n        return [-deltaY, deltaX];\r\n    }\r\n    else {\r\n        return [deltaX, deltaY];\r\n    }\r\n};\r\nvar ScrollerActions = /** @class */ (function () {\r\n    function ScrollerActions(scrollBehaviorX, scrollBehaviorY, actionsHandler, animater, options) {\r\n        this.hooks = new EventEmitter([\r\n            'start',\r\n            'beforeMove',\r\n            'scrollStart',\r\n            'scroll',\r\n            'beforeEnd',\r\n            'end',\r\n            'scrollEnd',\r\n            'contentNotMoved',\r\n            'detectMovingDirection',\r\n            'coordinateTransformation',\r\n        ]);\r\n        this.scrollBehaviorX = scrollBehaviorX;\r\n        this.scrollBehaviorY = scrollBehaviorY;\r\n        this.actionsHandler = actionsHandler;\r\n        this.animater = animater;\r\n        this.options = options;\r\n        this.directionLockAction = new DirectionLockAction(options.directionLockThreshold, options.freeScroll, options.eventPassthrough);\r\n        this.enabled = true;\r\n        this.bindActionsHandler();\r\n    }\r\n    ScrollerActions.prototype.bindActionsHandler = function () {\r\n        var _this = this;\r\n        // [mouse|touch]start event\r\n        this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.start, function (e) {\r\n            if (!_this.enabled)\r\n                return true;\r\n            return _this.handleStart(e);\r\n        });\r\n        // [mouse|touch]move event\r\n        this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.move, function (_a) {\r\n            var deltaX = _a.deltaX, deltaY = _a.deltaY, e = _a.e;\r\n            if (!_this.enabled)\r\n                return true;\r\n            var _b = applyQuadrantTransformation(deltaX, deltaY, _this.options.quadrant), transformateDeltaX = _b[0], transformateDeltaY = _b[1];\r\n            var transformateDeltaData = {\r\n                deltaX: transformateDeltaX,\r\n                deltaY: transformateDeltaY,\r\n            };\r\n            _this.hooks.trigger(_this.hooks.eventTypes.coordinateTransformation, transformateDeltaData);\r\n            return _this.handleMove(transformateDeltaData.deltaX, transformateDeltaData.deltaY, e);\r\n        });\r\n        // [mouse|touch]end event\r\n        this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.end, function (e) {\r\n            if (!_this.enabled)\r\n                return true;\r\n            return _this.handleEnd(e);\r\n        });\r\n        // click\r\n        this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.click, function (e) {\r\n            // handle native click event\r\n            if (_this.enabled && !e._constructed) {\r\n                _this.handleClick(e);\r\n            }\r\n        });\r\n    };\r\n    ScrollerActions.prototype.handleStart = function (e) {\r\n        var timestamp = getNow();\r\n        this.fingerMoved = false;\r\n        this.contentMoved = false;\r\n        this.startTime = timestamp;\r\n        this.directionLockAction.reset();\r\n        this.scrollBehaviorX.start();\r\n        this.scrollBehaviorY.start();\r\n        // force stopping last transition or animation\r\n        this.animater.doStop();\r\n        this.scrollBehaviorX.resetStartPos();\r\n        this.scrollBehaviorY.resetStartPos();\r\n        this.hooks.trigger(this.hooks.eventTypes.start, e);\r\n    };\r\n    ScrollerActions.prototype.handleMove = function (deltaX, deltaY, e) {\r\n        if (this.hooks.trigger(this.hooks.eventTypes.beforeMove, e)) {\r\n            return;\r\n        }\r\n        var absDistX = this.scrollBehaviorX.getAbsDist(deltaX);\r\n        var absDistY = this.scrollBehaviorY.getAbsDist(deltaY);\r\n        var timestamp = getNow();\r\n        // We need to move at least momentumLimitDistance pixels\r\n        // for the scrolling to initiate\r\n        if (this.checkMomentum(absDistX, absDistY, timestamp)) {\r\n            return true;\r\n        }\r\n        if (this.directionLockAction.checkMovingDirection(absDistX, absDistY, e)) {\r\n            this.actionsHandler.setInitiated();\r\n            return true;\r\n        }\r\n        var delta = this.directionLockAction.adjustDelta(deltaX, deltaY);\r\n        var prevX = this.scrollBehaviorX.getCurrentPos();\r\n        var newX = this.scrollBehaviorX.move(delta.deltaX);\r\n        var prevY = this.scrollBehaviorY.getCurrentPos();\r\n        var newY = this.scrollBehaviorY.move(delta.deltaY);\r\n        if (this.hooks.trigger(this.hooks.eventTypes.detectMovingDirection)) {\r\n            return;\r\n        }\r\n        if (!this.fingerMoved) {\r\n            this.fingerMoved = true;\r\n        }\r\n        var positionChanged = newX !== prevX || newY !== prevY;\r\n        if (!this.contentMoved && !positionChanged) {\r\n            this.hooks.trigger(this.hooks.eventTypes.contentNotMoved);\r\n        }\r\n        if (!this.contentMoved && positionChanged) {\r\n            this.contentMoved = true;\r\n            this.hooks.trigger(this.hooks.eventTypes.scrollStart);\r\n        }\r\n        if (this.contentMoved && positionChanged) {\r\n            this.animater.translate({\r\n                x: newX,\r\n                y: newY,\r\n            });\r\n            this.dispatchScroll(timestamp);\r\n        }\r\n    };\r\n    ScrollerActions.prototype.dispatchScroll = function (timestamp) {\r\n        // dispatch scroll in interval time\r\n        if (timestamp - this.startTime > this.options.momentumLimitTime) {\r\n            // refresh time and starting position to initiate a momentum\r\n            this.startTime = timestamp;\r\n            this.scrollBehaviorX.updateStartPos();\r\n            this.scrollBehaviorY.updateStartPos();\r\n            if (this.options.probeType === 1 /* Throttle */) {\r\n                this.hooks.trigger(this.hooks.eventTypes.scroll, this.getCurrentPos());\r\n            }\r\n        }\r\n        // dispatch scroll all the time\r\n        if (this.options.probeType > 1 /* Throttle */) {\r\n            this.hooks.trigger(this.hooks.eventTypes.scroll, this.getCurrentPos());\r\n        }\r\n    };\r\n    ScrollerActions.prototype.checkMomentum = function (absDistX, absDistY, timestamp) {\r\n        return (timestamp - this.endTime > this.options.momentumLimitTime &&\r\n            absDistY < this.options.momentumLimitDistance &&\r\n            absDistX < this.options.momentumLimitDistance);\r\n    };\r\n    ScrollerActions.prototype.handleEnd = function (e) {\r\n        if (this.hooks.trigger(this.hooks.eventTypes.beforeEnd, e)) {\r\n            return;\r\n        }\r\n        var currentPos = this.getCurrentPos();\r\n        this.scrollBehaviorX.updateDirection();\r\n        this.scrollBehaviorY.updateDirection();\r\n        if (this.hooks.trigger(this.hooks.eventTypes.end, e, currentPos)) {\r\n            return true;\r\n        }\r\n        currentPos = this.ensureIntegerPos(currentPos);\r\n        this.animater.translate(currentPos);\r\n        this.endTime = getNow();\r\n        var duration = this.endTime - this.startTime;\r\n        this.hooks.trigger(this.hooks.eventTypes.scrollEnd, currentPos, duration);\r\n    };\r\n    ScrollerActions.prototype.ensureIntegerPos = function (currentPos) {\r\n        this.ensuringInteger = true;\r\n        var x = currentPos.x, y = currentPos.y;\r\n        var _a = this.scrollBehaviorX, minScrollPosX = _a.minScrollPos, maxScrollPosX = _a.maxScrollPos;\r\n        var _b = this.scrollBehaviorY, minScrollPosY = _b.minScrollPos, maxScrollPosY = _b.maxScrollPos;\r\n        x = x > 0 ? Math.ceil(x) : Math.floor(x);\r\n        y = y > 0 ? Math.ceil(y) : Math.floor(y);\r\n        x = between(x, maxScrollPosX, minScrollPosX);\r\n        y = between(y, maxScrollPosY, minScrollPosY);\r\n        return { x: x, y: y };\r\n    };\r\n    ScrollerActions.prototype.handleClick = function (e) {\r\n        if (!preventDefaultExceptionFn(e.target, this.options.preventDefaultException)) {\r\n            maybePrevent(e);\r\n            e.stopPropagation();\r\n        }\r\n    };\r\n    ScrollerActions.prototype.getCurrentPos = function () {\r\n        return {\r\n            x: this.scrollBehaviorX.getCurrentPos(),\r\n            y: this.scrollBehaviorY.getCurrentPos(),\r\n        };\r\n    };\r\n    ScrollerActions.prototype.refresh = function () {\r\n        this.endTime = 0;\r\n    };\r\n    ScrollerActions.prototype.destroy = function () {\r\n        this.hooks.destroy();\r\n    };\r\n    return ScrollerActions;\r\n}());\n\nfunction createActionsHandlerOptions(bsOptions) {\r\n    var options = [\r\n        'click',\r\n        'bindToWrapper',\r\n        'disableMouse',\r\n        'disableTouch',\r\n        'preventDefault',\r\n        'stopPropagation',\r\n        'tagException',\r\n        'preventDefaultException',\r\n        'autoEndDistance',\r\n    ].reduce(function (prev, cur) {\r\n        prev[cur] = bsOptions[cur];\r\n        return prev;\r\n    }, {});\r\n    return options;\r\n}\r\nfunction createBehaviorOptions(bsOptions, extraProp, bounces, rect) {\r\n    var options = [\r\n        'momentum',\r\n        'momentumLimitTime',\r\n        'momentumLimitDistance',\r\n        'deceleration',\r\n        'swipeBounceTime',\r\n        'swipeTime',\r\n        'outOfBoundaryDampingFactor',\r\n        'specifiedIndexAsContent',\r\n    ].reduce(function (prev, cur) {\r\n        prev[cur] = bsOptions[cur];\r\n        return prev;\r\n    }, {});\r\n    // add extra property\r\n    options.scrollable = !!bsOptions[extraProp];\r\n    options.bounces = bounces;\r\n    options.rect = rect;\r\n    return options;\r\n}\n\nfunction bubbling(source, target, events) {\r\n    events.forEach(function (event) {\r\n        var sourceEvent;\r\n        var targetEvent;\r\n        if (typeof event === 'string') {\r\n            sourceEvent = targetEvent = event;\r\n        }\r\n        else {\r\n            sourceEvent = event.source;\r\n            targetEvent = event.target;\r\n        }\r\n        source.on(sourceEvent, function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            return target.trigger.apply(target, __spreadArrays([targetEvent], args));\r\n        });\r\n    });\r\n}\n\nfunction isSamePoint(startPoint, endPoint) {\r\n    // keys of startPoint and endPoint should be equal\r\n    var keys = Object.keys(startPoint);\r\n    for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n        var key = keys_1[_i];\r\n        if (startPoint[key] !== endPoint[key])\r\n            return false;\r\n    }\r\n    return true;\r\n}\n\nvar MIN_SCROLL_DISTANCE = 1;\r\nvar Scroller = /** @class */ (function () {\r\n    function Scroller(wrapper, content, options) {\r\n        this.wrapper = wrapper;\r\n        this.content = content;\r\n        this.resizeTimeout = 0;\r\n        this.hooks = new EventEmitter([\r\n            'beforeStart',\r\n            'beforeMove',\r\n            'beforeScrollStart',\r\n            'scrollStart',\r\n            'scroll',\r\n            'beforeEnd',\r\n            'scrollEnd',\r\n            'resize',\r\n            'touchEnd',\r\n            'end',\r\n            'flick',\r\n            'scrollCancel',\r\n            'momentum',\r\n            'scrollTo',\r\n            'minDistanceScroll',\r\n            'scrollToElement',\r\n            'beforeRefresh',\r\n        ]);\r\n        this.options = options;\r\n        var _a = this.options.bounce, left = _a.left, right = _a.right, top = _a.top, bottom = _a.bottom;\r\n        // direction X\r\n        this.scrollBehaviorX = new Behavior(wrapper, content, createBehaviorOptions(options, 'scrollX', [left, right], {\r\n            size: 'width',\r\n            position: 'left',\r\n        }));\r\n        // direction Y\r\n        this.scrollBehaviorY = new Behavior(wrapper, content, createBehaviorOptions(options, 'scrollY', [top, bottom], {\r\n            size: 'height',\r\n            position: 'top',\r\n        }));\r\n        this.translater = new Translater(this.content);\r\n        this.animater = createAnimater(this.content, this.translater, this.options);\r\n        this.actionsHandler = new ActionsHandler(this.options.bindToTarget ? this.content : wrapper, createActionsHandlerOptions(this.options));\r\n        this.actions = new ScrollerActions(this.scrollBehaviorX, this.scrollBehaviorY, this.actionsHandler, this.animater, this.options);\r\n        var resizeHandler = this.resize.bind(this);\r\n        this.resizeRegister = new EventRegister(window, [\r\n            {\r\n                name: 'orientationchange',\r\n                handler: resizeHandler,\r\n            },\r\n            {\r\n                name: 'resize',\r\n                handler: resizeHandler,\r\n            },\r\n        ]);\r\n        this.registerTransitionEnd();\r\n        this.init();\r\n    }\r\n    Scroller.prototype.init = function () {\r\n        var _this = this;\r\n        this.bindTranslater();\r\n        this.bindAnimater();\r\n        this.bindActions();\r\n        // enable pointer events when scrolling ends\r\n        this.hooks.on(this.hooks.eventTypes.scrollEnd, function () {\r\n            _this.togglePointerEvents(true);\r\n        });\r\n    };\r\n    Scroller.prototype.registerTransitionEnd = function () {\r\n        this.transitionEndRegister = new EventRegister(this.content, [\r\n            {\r\n                name: style.transitionEnd,\r\n                handler: this.transitionEnd.bind(this),\r\n            },\r\n        ]);\r\n    };\r\n    Scroller.prototype.bindTranslater = function () {\r\n        var _this = this;\r\n        var hooks = this.translater.hooks;\r\n        hooks.on(hooks.eventTypes.beforeTranslate, function (transformStyle) {\r\n            if (_this.options.translateZ) {\r\n                transformStyle.push(_this.options.translateZ);\r\n            }\r\n        });\r\n        // disable pointer events when scrolling\r\n        hooks.on(hooks.eventTypes.translate, function (pos) {\r\n            var prevPos = _this.getCurrentPos();\r\n            _this.updatePositions(pos);\r\n            // scrollEnd will dispatch when scroll is force stopping in touchstart handler\r\n            // so in touchend handler, don't toggle pointer-events\r\n            if (_this.actions.ensuringInteger === true) {\r\n                _this.actions.ensuringInteger = false;\r\n                return;\r\n            }\r\n            // a valid translate\r\n            if (pos.x !== prevPos.x || pos.y !== prevPos.y) {\r\n                _this.togglePointerEvents(false);\r\n            }\r\n        });\r\n    };\r\n    Scroller.prototype.bindAnimater = function () {\r\n        var _this = this;\r\n        // reset position\r\n        this.animater.hooks.on(this.animater.hooks.eventTypes.end, function (pos) {\r\n            if (!_this.resetPosition(_this.options.bounceTime)) {\r\n                _this.animater.setPending(false);\r\n                _this.hooks.trigger(_this.hooks.eventTypes.scrollEnd, pos);\r\n            }\r\n        });\r\n        bubbling(this.animater.hooks, this.hooks, [\r\n            {\r\n                source: this.animater.hooks.eventTypes.move,\r\n                target: this.hooks.eventTypes.scroll,\r\n            },\r\n            {\r\n                source: this.animater.hooks.eventTypes.forceStop,\r\n                target: this.hooks.eventTypes.scrollEnd,\r\n            },\r\n        ]);\r\n    };\r\n    Scroller.prototype.bindActions = function () {\r\n        var _this = this;\r\n        var actions = this.actions;\r\n        bubbling(actions.hooks, this.hooks, [\r\n            {\r\n                source: actions.hooks.eventTypes.start,\r\n                target: this.hooks.eventTypes.beforeStart,\r\n            },\r\n            {\r\n                source: actions.hooks.eventTypes.start,\r\n                target: this.hooks.eventTypes.beforeScrollStart,\r\n            },\r\n            {\r\n                source: actions.hooks.eventTypes.beforeMove,\r\n                target: this.hooks.eventTypes.beforeMove,\r\n            },\r\n            {\r\n                source: actions.hooks.eventTypes.scrollStart,\r\n                target: this.hooks.eventTypes.scrollStart,\r\n            },\r\n            {\r\n                source: actions.hooks.eventTypes.scroll,\r\n                target: this.hooks.eventTypes.scroll,\r\n            },\r\n            {\r\n                source: actions.hooks.eventTypes.beforeEnd,\r\n                target: this.hooks.eventTypes.beforeEnd,\r\n            },\r\n        ]);\r\n        actions.hooks.on(actions.hooks.eventTypes.end, function (e, pos) {\r\n            _this.hooks.trigger(_this.hooks.eventTypes.touchEnd, pos);\r\n            if (_this.hooks.trigger(_this.hooks.eventTypes.end, pos)) {\r\n                return true;\r\n            }\r\n            // check if it is a click operation\r\n            if (!actions.fingerMoved) {\r\n                _this.hooks.trigger(_this.hooks.eventTypes.scrollCancel);\r\n                if (_this.checkClick(e)) {\r\n                    return true;\r\n                }\r\n            }\r\n            // reset if we are outside of the boundaries\r\n            if (_this.resetPosition(_this.options.bounceTime, ease.bounce)) {\r\n                _this.animater.setForceStopped(false);\r\n                return true;\r\n            }\r\n        });\r\n        actions.hooks.on(actions.hooks.eventTypes.scrollEnd, function (pos, duration) {\r\n            var deltaX = Math.abs(pos.x - _this.scrollBehaviorX.startPos);\r\n            var deltaY = Math.abs(pos.y - _this.scrollBehaviorY.startPos);\r\n            if (_this.checkFlick(duration, deltaX, deltaY)) {\r\n                _this.animater.setForceStopped(false);\r\n                _this.hooks.trigger(_this.hooks.eventTypes.flick);\r\n                return;\r\n            }\r\n            if (_this.momentum(pos, duration)) {\r\n                _this.animater.setForceStopped(false);\r\n                return;\r\n            }\r\n            if (actions.contentMoved) {\r\n                _this.hooks.trigger(_this.hooks.eventTypes.scrollEnd, pos);\r\n            }\r\n            if (_this.animater.forceStopped) {\r\n                _this.animater.setForceStopped(false);\r\n            }\r\n        });\r\n    };\r\n    Scroller.prototype.checkFlick = function (duration, deltaX, deltaY) {\r\n        var flickMinMovingDistance = 1; // distinguish flick from click\r\n        if (this.hooks.events.flick.length > 1 &&\r\n            duration < this.options.flickLimitTime &&\r\n            deltaX < this.options.flickLimitDistance &&\r\n            deltaY < this.options.flickLimitDistance &&\r\n            (deltaY > flickMinMovingDistance || deltaX > flickMinMovingDistance)) {\r\n            return true;\r\n        }\r\n    };\r\n    Scroller.prototype.momentum = function (pos, duration) {\r\n        var meta = {\r\n            time: 0,\r\n            easing: ease.swiper,\r\n            newX: pos.x,\r\n            newY: pos.y,\r\n        };\r\n        // start momentum animation if needed\r\n        var momentumX = this.scrollBehaviorX.end(duration);\r\n        var momentumY = this.scrollBehaviorY.end(duration);\r\n        meta.newX = isUndef(momentumX.destination)\r\n            ? meta.newX\r\n            : momentumX.destination;\r\n        meta.newY = isUndef(momentumY.destination)\r\n            ? meta.newY\r\n            : momentumY.destination;\r\n        meta.time = Math.max(momentumX.duration, momentumY.duration);\r\n        this.hooks.trigger(this.hooks.eventTypes.momentum, meta, this);\r\n        // when x or y changed, do momentum animation now!\r\n        if (meta.newX !== pos.x || meta.newY !== pos.y) {\r\n            // change easing function when scroller goes out of the boundaries\r\n            if (meta.newX > this.scrollBehaviorX.minScrollPos ||\r\n                meta.newX < this.scrollBehaviorX.maxScrollPos ||\r\n                meta.newY > this.scrollBehaviorY.minScrollPos ||\r\n                meta.newY < this.scrollBehaviorY.maxScrollPos) {\r\n                meta.easing = ease.swipeBounce;\r\n            }\r\n            this.scrollTo(meta.newX, meta.newY, meta.time, meta.easing);\r\n            return true;\r\n        }\r\n    };\r\n    Scroller.prototype.checkClick = function (e) {\r\n        var cancelable = {\r\n            preventClick: this.animater.forceStopped,\r\n        };\r\n        // we scrolled less than momentumLimitDistance pixels\r\n        if (this.hooks.trigger(this.hooks.eventTypes.checkClick)) {\r\n            this.animater.setForceStopped(false);\r\n            return true;\r\n        }\r\n        if (!cancelable.preventClick) {\r\n            var _dblclick = this.options.dblclick;\r\n            var dblclickTrigged = false;\r\n            if (_dblclick && this.lastClickTime) {\r\n                var _a = _dblclick.delay, delay = _a === void 0 ? 300 : _a;\r\n                if (getNow() - this.lastClickTime < delay) {\r\n                    dblclickTrigged = true;\r\n                    dblclick(e);\r\n                }\r\n            }\r\n            if (this.options.tap) {\r\n                tap(e, this.options.tap);\r\n            }\r\n            if (this.options.click &&\r\n                !preventDefaultExceptionFn(e.target, this.options.preventDefaultException)) {\r\n                click(e);\r\n            }\r\n            this.lastClickTime = dblclickTrigged ? null : getNow();\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    Scroller.prototype.resize = function () {\r\n        var _this = this;\r\n        if (!this.actions.enabled) {\r\n            return;\r\n        }\r\n        // fix a scroll problem under Android condition\r\n        /* istanbul ignore if  */\r\n        if (isAndroid) {\r\n            this.wrapper.scrollTop = 0;\r\n        }\r\n        clearTimeout(this.resizeTimeout);\r\n        this.resizeTimeout = window.setTimeout(function () {\r\n            _this.hooks.trigger(_this.hooks.eventTypes.resize);\r\n        }, this.options.resizePolling);\r\n    };\r\n    /* istanbul ignore next */\r\n    Scroller.prototype.transitionEnd = function (e) {\r\n        if (e.target !== this.content || !this.animater.pending) {\r\n            return;\r\n        }\r\n        var animater = this.animater;\r\n        animater.transitionTime();\r\n        if (!this.resetPosition(this.options.bounceTime, ease.bounce)) {\r\n            this.animater.setPending(false);\r\n            if (this.options.probeType !== 3 /* Realtime */) {\r\n                this.hooks.trigger(this.hooks.eventTypes.scrollEnd, this.getCurrentPos());\r\n            }\r\n        }\r\n    };\r\n    Scroller.prototype.togglePointerEvents = function (enabled) {\r\n        if (enabled === void 0) { enabled = true; }\r\n        var el = this.content.children.length\r\n            ? this.content.children\r\n            : [this.content];\r\n        var pointerEvents = enabled ? 'auto' : 'none';\r\n        for (var i = 0; i < el.length; i++) {\r\n            var node = el[i];\r\n            // ignore BetterScroll instance's wrapper DOM\r\n            /* istanbul ignore if  */\r\n            if (node.isBScrollContainer) {\r\n                continue;\r\n            }\r\n            node.style.pointerEvents = pointerEvents;\r\n        }\r\n    };\r\n    Scroller.prototype.refresh = function (content) {\r\n        var contentChanged = this.setContent(content);\r\n        this.hooks.trigger(this.hooks.eventTypes.beforeRefresh);\r\n        this.scrollBehaviorX.refresh(content);\r\n        this.scrollBehaviorY.refresh(content);\r\n        if (contentChanged) {\r\n            this.translater.setContent(content);\r\n            this.animater.setContent(content);\r\n            this.transitionEndRegister.destroy();\r\n            this.registerTransitionEnd();\r\n            if (this.options.bindToTarget) {\r\n                this.actionsHandler.setContent(content);\r\n            }\r\n        }\r\n        this.actions.refresh();\r\n        this.wrapperOffset = offset(this.wrapper);\r\n    };\r\n    Scroller.prototype.setContent = function (content) {\r\n        var contentChanged = content !== this.content;\r\n        if (contentChanged) {\r\n            this.content = content;\r\n        }\r\n        return contentChanged;\r\n    };\r\n    Scroller.prototype.scrollBy = function (deltaX, deltaY, time, easing) {\r\n        if (time === void 0) { time = 0; }\r\n        var _a = this.getCurrentPos(), x = _a.x, y = _a.y;\r\n        easing = !easing ? ease.bounce : easing;\r\n        deltaX += x;\r\n        deltaY += y;\r\n        this.scrollTo(deltaX, deltaY, time, easing);\r\n    };\r\n    Scroller.prototype.scrollTo = function (x, y, time, easing, extraTransform) {\r\n        if (time === void 0) { time = 0; }\r\n        if (easing === void 0) { easing = ease.bounce; }\r\n        if (extraTransform === void 0) { extraTransform = {\r\n            start: {},\r\n            end: {},\r\n        }; }\r\n        var easingFn = this.options.useTransition ? easing.style : easing.fn;\r\n        var currentPos = this.getCurrentPos();\r\n        var startPoint = __assign({ x: currentPos.x, y: currentPos.y }, extraTransform.start);\r\n        var endPoint = __assign({ x: x,\r\n            y: y }, extraTransform.end);\r\n        this.hooks.trigger(this.hooks.eventTypes.scrollTo, endPoint);\r\n        // it is an useless move\r\n        if (isSamePoint(startPoint, endPoint))\r\n            return;\r\n        var deltaX = Math.abs(endPoint.x - startPoint.x);\r\n        var deltaY = Math.abs(endPoint.y - startPoint.y);\r\n        // considering of browser compatibility for decimal transform value\r\n        // force translating immediately\r\n        if (deltaX < MIN_SCROLL_DISTANCE && deltaY < MIN_SCROLL_DISTANCE) {\r\n            time = 0;\r\n            this.hooks.trigger(this.hooks.eventTypes.minDistanceScroll);\r\n        }\r\n        this.animater.move(startPoint, endPoint, time, easingFn);\r\n    };\r\n    Scroller.prototype.scrollToElement = function (el, time, offsetX, offsetY, easing) {\r\n        var targetEle = getElement(el);\r\n        var pos = offset(targetEle);\r\n        var getOffset = function (offset, size, wrapperSize) {\r\n            if (typeof offset === 'number') {\r\n                return offset;\r\n            }\r\n            // if offsetX/Y are true we center the element to the screen\r\n            return offset ? Math.round(size / 2 - wrapperSize / 2) : 0;\r\n        };\r\n        offsetX = getOffset(offsetX, targetEle.offsetWidth, this.wrapper.offsetWidth);\r\n        offsetY = getOffset(offsetY, targetEle.offsetHeight, this.wrapper.offsetHeight);\r\n        var getPos = function (pos, wrapperPos, offset, scrollBehavior) {\r\n            pos -= wrapperPos;\r\n            pos = scrollBehavior.adjustPosition(pos - offset);\r\n            return pos;\r\n        };\r\n        pos.left = getPos(pos.left, this.wrapperOffset.left, offsetX, this.scrollBehaviorX);\r\n        pos.top = getPos(pos.top, this.wrapperOffset.top, offsetY, this.scrollBehaviorY);\r\n        if (this.hooks.trigger(this.hooks.eventTypes.scrollToElement, targetEle, pos)) {\r\n            return;\r\n        }\r\n        this.scrollTo(pos.left, pos.top, time, easing);\r\n    };\r\n    Scroller.prototype.resetPosition = function (time, easing) {\r\n        if (time === void 0) { time = 0; }\r\n        if (easing === void 0) { easing = ease.bounce; }\r\n        var _a = this.scrollBehaviorX.checkInBoundary(), x = _a.position, xInBoundary = _a.inBoundary;\r\n        var _b = this.scrollBehaviorY.checkInBoundary(), y = _b.position, yInBoundary = _b.inBoundary;\r\n        if (xInBoundary && yInBoundary) {\r\n            return false;\r\n        }\r\n        /* istanbul ignore if  */\r\n        if (isIOSBadVersion) {\r\n            // fix ios 13.4 bouncing\r\n            // see it in issues 982\r\n            this.reflow();\r\n        }\r\n        // out of boundary\r\n        this.scrollTo(x, y, time, easing);\r\n        return true;\r\n    };\r\n    /* istanbul ignore next */\r\n    Scroller.prototype.reflow = function () {\r\n        this._reflow = this.content.offsetHeight;\r\n    };\r\n    Scroller.prototype.updatePositions = function (pos) {\r\n        this.scrollBehaviorX.updatePosition(pos.x);\r\n        this.scrollBehaviorY.updatePosition(pos.y);\r\n    };\r\n    Scroller.prototype.getCurrentPos = function () {\r\n        return this.actions.getCurrentPos();\r\n    };\r\n    Scroller.prototype.enable = function () {\r\n        this.actions.enabled = true;\r\n    };\r\n    Scroller.prototype.disable = function () {\r\n        cancelAnimationFrame(this.animater.timer);\r\n        this.actions.enabled = false;\r\n    };\r\n    Scroller.prototype.destroy = function () {\r\n        var _this = this;\r\n        var keys = [\r\n            'resizeRegister',\r\n            'transitionEndRegister',\r\n            'actionsHandler',\r\n            'actions',\r\n            'hooks',\r\n            'animater',\r\n            'translater',\r\n            'scrollBehaviorX',\r\n            'scrollBehaviorY',\r\n        ];\r\n        keys.forEach(function (key) { return _this[key].destroy(); });\r\n    };\r\n    return Scroller;\r\n}());\n\nvar BScrollConstructor = /** @class */ (function (_super) {\r\n    __extends(BScrollConstructor, _super);\r\n    function BScrollConstructor(el, options) {\r\n        var _this = _super.call(this, [\r\n            'refresh',\r\n            'contentChanged',\r\n            'enable',\r\n            'disable',\r\n            'beforeScrollStart',\r\n            'scrollStart',\r\n            'scroll',\r\n            'scrollEnd',\r\n            'scrollCancel',\r\n            'touchEnd',\r\n            'flick',\r\n            'destroy'\r\n        ]) || this;\r\n        var wrapper = getElement(el);\r\n        if (!wrapper) {\r\n            warn('Can not resolve the wrapper DOM.');\r\n            return _this;\r\n        }\r\n        _this.plugins = {};\r\n        _this.options = new OptionsConstructor().merge(options).process();\r\n        if (!_this.setContent(wrapper).valid) {\r\n            return _this;\r\n        }\r\n        _this.hooks = new EventEmitter([\r\n            'refresh',\r\n            'enable',\r\n            'disable',\r\n            'destroy',\r\n            'beforeInitialScrollTo',\r\n            'contentChanged'\r\n        ]);\r\n        _this.init(wrapper);\r\n        return _this;\r\n    }\r\n    BScrollConstructor.use = function (ctor) {\r\n        var name = ctor.pluginName;\r\n        var installed = BScrollConstructor.plugins.some(function (plugin) { return ctor === plugin.ctor; });\r\n        if (installed)\r\n            return BScrollConstructor;\r\n        if (isUndef(name)) {\r\n            warn(\"Plugin Class must specify plugin's name in static property by 'pluginName' field.\");\r\n            return BScrollConstructor;\r\n        }\r\n        BScrollConstructor.pluginsMap[name] = true;\r\n        BScrollConstructor.plugins.push({\r\n            name: name,\r\n            applyOrder: ctor.applyOrder,\r\n            ctor: ctor\r\n        });\r\n        return BScrollConstructor;\r\n    };\r\n    BScrollConstructor.prototype.setContent = function (wrapper) {\r\n        var contentChanged = false;\r\n        var valid = true;\r\n        var content = wrapper.children[this.options.specifiedIndexAsContent];\r\n        if (!content) {\r\n            warn('The wrapper need at least one child element to be content element to scroll.');\r\n            valid = false;\r\n        }\r\n        else {\r\n            contentChanged = this.content !== content;\r\n            if (contentChanged) {\r\n                this.content = content;\r\n            }\r\n        }\r\n        return {\r\n            valid: valid,\r\n            contentChanged: contentChanged\r\n        };\r\n    };\r\n    BScrollConstructor.prototype.init = function (wrapper) {\r\n        var _this = this;\r\n        this.wrapper = wrapper;\r\n        // mark wrapper to recognize bs instance by DOM attribute\r\n        wrapper.isBScrollContainer = true;\r\n        this.scroller = new Scroller(wrapper, this.content, this.options);\r\n        this.scroller.hooks.on(this.scroller.hooks.eventTypes.resize, function () {\r\n            _this.refresh();\r\n        });\r\n        this.eventBubbling();\r\n        this.handleAutoBlur();\r\n        this.enable();\r\n        this.proxy(propertiesConfig);\r\n        this.applyPlugins();\r\n        // maybe boundary has changed, should refresh\r\n        this.refreshWithoutReset(this.content);\r\n        var _a = this.options, startX = _a.startX, startY = _a.startY;\r\n        var position = {\r\n            x: startX,\r\n            y: startY\r\n        };\r\n        // maybe plugins want to control scroll position\r\n        if (this.hooks.trigger(this.hooks.eventTypes.beforeInitialScrollTo, position)) {\r\n            return;\r\n        }\r\n        this.scroller.scrollTo(position.x, position.y);\r\n    };\r\n    BScrollConstructor.prototype.applyPlugins = function () {\r\n        var _this = this;\r\n        var options = this.options;\r\n        BScrollConstructor.plugins\r\n            .sort(function (a, b) {\r\n            var _a;\r\n            var applyOrderMap = (_a = {},\r\n                _a[\"pre\" /* Pre */] = -1,\r\n                _a[\"post\" /* Post */] = 1,\r\n                _a);\r\n            var aOrder = a.applyOrder ? applyOrderMap[a.applyOrder] : 0;\r\n            var bOrder = b.applyOrder ? applyOrderMap[b.applyOrder] : 0;\r\n            return aOrder - bOrder;\r\n        })\r\n            .forEach(function (item) {\r\n            var ctor = item.ctor;\r\n            if (options[item.name] && typeof ctor === 'function') {\r\n                _this.plugins[item.name] = new ctor(_this);\r\n            }\r\n        });\r\n    };\r\n    BScrollConstructor.prototype.handleAutoBlur = function () {\r\n        /* istanbul ignore if  */\r\n        if (this.options.autoBlur) {\r\n            this.on(this.eventTypes.beforeScrollStart, function () {\r\n                var activeElement = document.activeElement;\r\n                if (activeElement &&\r\n                    (activeElement.tagName === 'INPUT' ||\r\n                        activeElement.tagName === 'TEXTAREA')) {\r\n                    activeElement.blur();\r\n                }\r\n            });\r\n        }\r\n    };\r\n    BScrollConstructor.prototype.eventBubbling = function () {\r\n        bubbling(this.scroller.hooks, this, [\r\n            this.eventTypes.beforeScrollStart,\r\n            this.eventTypes.scrollStart,\r\n            this.eventTypes.scroll,\r\n            this.eventTypes.scrollEnd,\r\n            this.eventTypes.scrollCancel,\r\n            this.eventTypes.touchEnd,\r\n            this.eventTypes.flick\r\n        ]);\r\n    };\r\n    BScrollConstructor.prototype.refreshWithoutReset = function (content) {\r\n        this.scroller.refresh(content);\r\n        this.hooks.trigger(this.hooks.eventTypes.refresh, content);\r\n        this.trigger(this.eventTypes.refresh, content);\r\n    };\r\n    BScrollConstructor.prototype.proxy = function (propertiesConfig) {\r\n        var _this = this;\r\n        propertiesConfig.forEach(function (_a) {\r\n            var key = _a.key, sourceKey = _a.sourceKey;\r\n            propertiesProxy(_this, sourceKey, key);\r\n        });\r\n    };\r\n    BScrollConstructor.prototype.refresh = function () {\r\n        var _a = this.setContent(this.wrapper), contentChanged = _a.contentChanged, valid = _a.valid;\r\n        if (valid) {\r\n            var content = this.content;\r\n            this.refreshWithoutReset(content);\r\n            if (contentChanged) {\r\n                this.hooks.trigger(this.hooks.eventTypes.contentChanged, content);\r\n                this.trigger(this.eventTypes.contentChanged, content);\r\n            }\r\n            this.scroller.resetPosition();\r\n        }\r\n    };\r\n    BScrollConstructor.prototype.enable = function () {\r\n        this.scroller.enable();\r\n        this.hooks.trigger(this.hooks.eventTypes.enable);\r\n        this.trigger(this.eventTypes.enable);\r\n    };\r\n    BScrollConstructor.prototype.disable = function () {\r\n        this.scroller.disable();\r\n        this.hooks.trigger(this.hooks.eventTypes.disable);\r\n        this.trigger(this.eventTypes.disable);\r\n    };\r\n    BScrollConstructor.prototype.destroy = function () {\r\n        this.hooks.trigger(this.hooks.eventTypes.destroy);\r\n        this.trigger(this.eventTypes.destroy);\r\n        this.scroller.destroy();\r\n    };\r\n    BScrollConstructor.prototype.eventRegister = function (names) {\r\n        this.registerType(names);\r\n    };\r\n    BScrollConstructor.plugins = [];\r\n    BScrollConstructor.pluginsMap = {};\r\n    return BScrollConstructor;\r\n}(EventEmitter));\r\nfunction createBScroll(el, options) {\r\n    var bs = new BScrollConstructor(el, options);\r\n    return bs;\r\n}\r\ncreateBScroll.use = BScrollConstructor.use;\r\ncreateBScroll.plugins = BScrollConstructor.plugins;\r\ncreateBScroll.pluginsMap = BScrollConstructor.pluginsMap;\r\nvar BScroll = createBScroll;\n\nexport { Behavior, CustomOptions, createBScroll, BScroll as default };\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { useElementSize } from '@vueuse/core'\nimport BScroll from '@better-scroll/core'\nimport type { Options } from '@better-scroll/core'\n\ndefineOptions({ name: 'BetterScroll' })\n\ninterface Props {\n  /**\n   * BetterScroll options\n   *\n   * @link https://better-scroll.github.io/docs/zh-CN/guide/base-scroll-options.html\n   */\n  options: Options\n}\n\nconst props = defineProps<Props>()\n\nconst bsWrapper = ref<HTMLElement>()\nconst bsContent = ref<HTMLElement>()\nconst { width: wrapWidth } = useElementSize(bsWrapper)\nconst { width, height } = useElementSize(bsContent)\n\nconst instance = ref<BScroll>()\nconst isScrollY = computed(() => Boolean(props.options.scrollY))\n\nfunction initBetterScroll() {\n  if (!bsWrapper.value) return\n  instance.value = new BScroll(bsWrapper.value, props.options)\n}\n\n// refresh BS when scroll element size changed\nwatch([() => wrapWidth.value, () => width.value, () => height.value], () => {\n  instance.value?.refresh()\n})\n\nonMounted(() => {\n  initBetterScroll()\n})\n\ndefineExpose({ instance })\n</script>\n\n<template>\n  <div ref=\"bsWrapper\" class=\"basic-better-scroll\">\n    <div ref=\"bsContent\" class=\"basic-better-scroll-inline-block\" :class=\"{ 'basic-better-scroll-h-full': !isScrollY }\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.basic-better-scroll {\n  height: 100%;\n  text-align: left;\n}\n.basic-better-scroll-inline-block {\n  display: inline-block;\n}\n.basic-better-scroll-h-full {\n  height: 100%;\n}\n</style>\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n  const classMap = createClassMap(config);\n  const {\n    conflictingClassGroups,\n    conflictingClassGroupModifiers\n  } = config;\n  const getClassGroupId = className => {\n    const classParts = className.split(CLASS_PART_SEPARATOR);\n    // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n    if (classParts[0] === '' && classParts.length !== 1) {\n      classParts.shift();\n    }\n    return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n  };\n  const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n    const conflicts = conflictingClassGroups[classGroupId] || [];\n    if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n      return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n    }\n    return conflicts;\n  };\n  return {\n    getClassGroupId,\n    getConflictingClassGroupIds\n  };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n  if (classParts.length === 0) {\n    return classPartObject.classGroupId;\n  }\n  const currentClassPart = classParts[0];\n  const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n  const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n  if (classGroupFromNextClassPart) {\n    return classGroupFromNextClassPart;\n  }\n  if (classPartObject.validators.length === 0) {\n    return undefined;\n  }\n  const classRest = classParts.join(CLASS_PART_SEPARATOR);\n  return classPartObject.validators.find(({\n    validator\n  }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n  if (arbitraryPropertyRegex.test(className)) {\n    const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n    const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n    if (property) {\n      // I use two dots here because one dot is used as prefix for class groups in plugins\n      return 'arbitrary..' + property;\n    }\n  }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n  const {\n    theme,\n    prefix\n  } = config;\n  const classMap = {\n    nextPart: new Map(),\n    validators: []\n  };\n  const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n  prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n    processClassesRecursively(classGroup, classMap, classGroupId, theme);\n  });\n  return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n  classGroup.forEach(classDefinition => {\n    if (typeof classDefinition === 'string') {\n      const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n      classPartObjectToEdit.classGroupId = classGroupId;\n      return;\n    }\n    if (typeof classDefinition === 'function') {\n      if (isThemeGetter(classDefinition)) {\n        processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n        return;\n      }\n      classPartObject.validators.push({\n        validator: classDefinition,\n        classGroupId\n      });\n      return;\n    }\n    Object.entries(classDefinition).forEach(([key, classGroup]) => {\n      processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n    });\n  });\n};\nconst getPart = (classPartObject, path) => {\n  let currentClassPartObject = classPartObject;\n  path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n    if (!currentClassPartObject.nextPart.has(pathPart)) {\n      currentClassPartObject.nextPart.set(pathPart, {\n        nextPart: new Map(),\n        validators: []\n      });\n    }\n    currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n  });\n  return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n  if (!prefix) {\n    return classGroupEntries;\n  }\n  return classGroupEntries.map(([classGroupId, classGroup]) => {\n    const prefixedClassGroup = classGroup.map(classDefinition => {\n      if (typeof classDefinition === 'string') {\n        return prefix + classDefinition;\n      }\n      if (typeof classDefinition === 'object') {\n        return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n      }\n      return classDefinition;\n    });\n    return [classGroupId, prefixedClassGroup];\n  });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n  if (maxCacheSize < 1) {\n    return {\n      get: () => undefined,\n      set: () => {}\n    };\n  }\n  let cacheSize = 0;\n  let cache = new Map();\n  let previousCache = new Map();\n  const update = (key, value) => {\n    cache.set(key, value);\n    cacheSize++;\n    if (cacheSize > maxCacheSize) {\n      cacheSize = 0;\n      previousCache = cache;\n      cache = new Map();\n    }\n  };\n  return {\n    get(key) {\n      let value = cache.get(key);\n      if (value !== undefined) {\n        return value;\n      }\n      if ((value = previousCache.get(key)) !== undefined) {\n        update(key, value);\n        return value;\n      }\n    },\n    set(key, value) {\n      if (cache.has(key)) {\n        cache.set(key, value);\n      } else {\n        update(key, value);\n      }\n    }\n  };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n  const {\n    separator,\n    experimentalParseClassName\n  } = config;\n  const isSeparatorSingleCharacter = separator.length === 1;\n  const firstSeparatorCharacter = separator[0];\n  const separatorLength = separator.length;\n  // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n  const parseClassName = className => {\n    const modifiers = [];\n    let bracketDepth = 0;\n    let modifierStart = 0;\n    let postfixModifierPosition;\n    for (let index = 0; index < className.length; index++) {\n      let currentCharacter = className[index];\n      if (bracketDepth === 0) {\n        if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n          modifiers.push(className.slice(modifierStart, index));\n          modifierStart = index + separatorLength;\n          continue;\n        }\n        if (currentCharacter === '/') {\n          postfixModifierPosition = index;\n          continue;\n        }\n      }\n      if (currentCharacter === '[') {\n        bracketDepth++;\n      } else if (currentCharacter === ']') {\n        bracketDepth--;\n      }\n    }\n    const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n    const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n    const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n    const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n    return {\n      modifiers,\n      hasImportantModifier,\n      baseClassName,\n      maybePostfixModifierPosition\n    };\n  };\n  if (experimentalParseClassName) {\n    return className => experimentalParseClassName({\n      className,\n      parseClassName\n    });\n  }\n  return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n  if (modifiers.length <= 1) {\n    return modifiers;\n  }\n  const sortedModifiers = [];\n  let unsortedModifiers = [];\n  modifiers.forEach(modifier => {\n    const isArbitraryVariant = modifier[0] === '[';\n    if (isArbitraryVariant) {\n      sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n      unsortedModifiers = [];\n    } else {\n      unsortedModifiers.push(modifier);\n    }\n  });\n  sortedModifiers.push(...unsortedModifiers.sort());\n  return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n  cache: createLruCache(config.cacheSize),\n  parseClassName: createParseClassName(config),\n  ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n  const {\n    parseClassName,\n    getClassGroupId,\n    getConflictingClassGroupIds\n  } = configUtils;\n  /**\n   * Set of classGroupIds in following format:\n   * `{importantModifier}{variantModifiers}{classGroupId}`\n   * @example 'float'\n   * @example 'hover:focus:bg-color'\n   * @example 'md:!pr'\n   */\n  const classGroupsInConflict = [];\n  const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n  let result = '';\n  for (let index = classNames.length - 1; index >= 0; index -= 1) {\n    const originalClassName = classNames[index];\n    const {\n      modifiers,\n      hasImportantModifier,\n      baseClassName,\n      maybePostfixModifierPosition\n    } = parseClassName(originalClassName);\n    let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n    let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n    if (!classGroupId) {\n      if (!hasPostfixModifier) {\n        // Not a Tailwind class\n        result = originalClassName + (result.length > 0 ? ' ' + result : result);\n        continue;\n      }\n      classGroupId = getClassGroupId(baseClassName);\n      if (!classGroupId) {\n        // Not a Tailwind class\n        result = originalClassName + (result.length > 0 ? ' ' + result : result);\n        continue;\n      }\n      hasPostfixModifier = false;\n    }\n    const variantModifier = sortModifiers(modifiers).join(':');\n    const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n    const classId = modifierId + classGroupId;\n    if (classGroupsInConflict.includes(classId)) {\n      // Tailwind class omitted due to conflict\n      continue;\n    }\n    classGroupsInConflict.push(classId);\n    const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n    for (let i = 0; i < conflictGroups.length; ++i) {\n      const group = conflictGroups[i];\n      classGroupsInConflict.push(modifierId + group);\n    }\n    // Tailwind class not in conflict\n    result = originalClassName + (result.length > 0 ? ' ' + result : result);\n  }\n  return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n  let index = 0;\n  let argument;\n  let resolvedValue;\n  let string = '';\n  while (index < arguments.length) {\n    if (argument = arguments[index++]) {\n      if (resolvedValue = toValue(argument)) {\n        string && (string += ' ');\n        string += resolvedValue;\n      }\n    }\n  }\n  return string;\n}\nconst toValue = mix => {\n  if (typeof mix === 'string') {\n    return mix;\n  }\n  let resolvedValue;\n  let string = '';\n  for (let k = 0; k < mix.length; k++) {\n    if (mix[k]) {\n      if (resolvedValue = toValue(mix[k])) {\n        string && (string += ' ');\n        string += resolvedValue;\n      }\n    }\n  }\n  return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n  let configUtils;\n  let cacheGet;\n  let cacheSet;\n  let functionToCall = initTailwindMerge;\n  function initTailwindMerge(classList) {\n    const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n    configUtils = createConfigUtils(config);\n    cacheGet = configUtils.cache.get;\n    cacheSet = configUtils.cache.set;\n    functionToCall = tailwindMerge;\n    return tailwindMerge(classList);\n  }\n  function tailwindMerge(classList) {\n    const cachedResult = cacheGet(classList);\n    if (cachedResult) {\n      return cachedResult;\n    }\n    const result = mergeClassList(classList, configUtils);\n    cacheSet(classList, result);\n    return result;\n  }\n  return function callTailwindMerge() {\n    return functionToCall(twJoin.apply(null, arguments));\n  };\n}\nconst fromTheme = key => {\n  const themeGetter = theme => theme[key] || [];\n  themeGetter.isThemeGetter = true;\n  return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n  const result = arbitraryValueRegex.exec(value);\n  if (result) {\n    if (result[1]) {\n      return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n    }\n    return testValue(result[2]);\n  }\n  return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n  __proto__: null,\n  isAny,\n  isArbitraryImage,\n  isArbitraryLength,\n  isArbitraryNumber,\n  isArbitraryPosition,\n  isArbitraryShadow,\n  isArbitrarySize,\n  isArbitraryValue,\n  isInteger,\n  isLength,\n  isNumber,\n  isPercent,\n  isTshirtSize\n}, Symbol.toStringTag, {\n  value: 'Module'\n});\nconst getDefaultConfig = () => {\n  const colors = fromTheme('colors');\n  const spacing = fromTheme('spacing');\n  const blur = fromTheme('blur');\n  const brightness = fromTheme('brightness');\n  const borderColor = fromTheme('borderColor');\n  const borderRadius = fromTheme('borderRadius');\n  const borderSpacing = fromTheme('borderSpacing');\n  const borderWidth = fromTheme('borderWidth');\n  const contrast = fromTheme('contrast');\n  const grayscale = fromTheme('grayscale');\n  const hueRotate = fromTheme('hueRotate');\n  const invert = fromTheme('invert');\n  const gap = fromTheme('gap');\n  const gradientColorStops = fromTheme('gradientColorStops');\n  const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n  const inset = fromTheme('inset');\n  const margin = fromTheme('margin');\n  const opacity = fromTheme('opacity');\n  const padding = fromTheme('padding');\n  const saturate = fromTheme('saturate');\n  const scale = fromTheme('scale');\n  const sepia = fromTheme('sepia');\n  const skew = fromTheme('skew');\n  const space = fromTheme('space');\n  const translate = fromTheme('translate');\n  const getOverscroll = () => ['auto', 'contain', 'none'];\n  const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n  const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n  const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n  const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n  const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n  const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n  const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n  const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n  const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n  const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n  const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n  const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n  return {\n    cacheSize: 500,\n    separator: ':',\n    theme: {\n      colors: [isAny],\n      spacing: [isLength, isArbitraryLength],\n      blur: ['none', '', isTshirtSize, isArbitraryValue],\n      brightness: getNumberAndArbitrary(),\n      borderColor: [colors],\n      borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n      borderSpacing: getSpacingWithArbitrary(),\n      borderWidth: getLengthWithEmptyAndArbitrary(),\n      contrast: getNumberAndArbitrary(),\n      grayscale: getZeroAndEmpty(),\n      hueRotate: getNumberAndArbitrary(),\n      invert: getZeroAndEmpty(),\n      gap: getSpacingWithArbitrary(),\n      gradientColorStops: [colors],\n      gradientColorStopPositions: [isPercent, isArbitraryLength],\n      inset: getSpacingWithAutoAndArbitrary(),\n      margin: getSpacingWithAutoAndArbitrary(),\n      opacity: getNumberAndArbitrary(),\n      padding: getSpacingWithArbitrary(),\n      saturate: getNumberAndArbitrary(),\n      scale: getNumberAndArbitrary(),\n      sepia: getZeroAndEmpty(),\n      skew: getNumberAndArbitrary(),\n      space: getSpacingWithArbitrary(),\n      translate: getSpacingWithArbitrary()\n    },\n    classGroups: {\n      // Layout\n      /**\n       * Aspect Ratio\n       * @see https://tailwindcss.com/docs/aspect-ratio\n       */\n      aspect: [{\n        aspect: ['auto', 'square', 'video', isArbitraryValue]\n      }],\n      /**\n       * Container\n       * @see https://tailwindcss.com/docs/container\n       */\n      container: ['container'],\n      /**\n       * Columns\n       * @see https://tailwindcss.com/docs/columns\n       */\n      columns: [{\n        columns: [isTshirtSize]\n      }],\n      /**\n       * Break After\n       * @see https://tailwindcss.com/docs/break-after\n       */\n      'break-after': [{\n        'break-after': getBreaks()\n      }],\n      /**\n       * Break Before\n       * @see https://tailwindcss.com/docs/break-before\n       */\n      'break-before': [{\n        'break-before': getBreaks()\n      }],\n      /**\n       * Break Inside\n       * @see https://tailwindcss.com/docs/break-inside\n       */\n      'break-inside': [{\n        'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n      }],\n      /**\n       * Box Decoration Break\n       * @see https://tailwindcss.com/docs/box-decoration-break\n       */\n      'box-decoration': [{\n        'box-decoration': ['slice', 'clone']\n      }],\n      /**\n       * Box Sizing\n       * @see https://tailwindcss.com/docs/box-sizing\n       */\n      box: [{\n        box: ['border', 'content']\n      }],\n      /**\n       * Display\n       * @see https://tailwindcss.com/docs/display\n       */\n      display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n      /**\n       * Floats\n       * @see https://tailwindcss.com/docs/float\n       */\n      float: [{\n        float: ['right', 'left', 'none', 'start', 'end']\n      }],\n      /**\n       * Clear\n       * @see https://tailwindcss.com/docs/clear\n       */\n      clear: [{\n        clear: ['left', 'right', 'both', 'none', 'start', 'end']\n      }],\n      /**\n       * Isolation\n       * @see https://tailwindcss.com/docs/isolation\n       */\n      isolation: ['isolate', 'isolation-auto'],\n      /**\n       * Object Fit\n       * @see https://tailwindcss.com/docs/object-fit\n       */\n      'object-fit': [{\n        object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n      }],\n      /**\n       * Object Position\n       * @see https://tailwindcss.com/docs/object-position\n       */\n      'object-position': [{\n        object: [...getPositions(), isArbitraryValue]\n      }],\n      /**\n       * Overflow\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      overflow: [{\n        overflow: getOverflow()\n      }],\n      /**\n       * Overflow X\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      'overflow-x': [{\n        'overflow-x': getOverflow()\n      }],\n      /**\n       * Overflow Y\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      'overflow-y': [{\n        'overflow-y': getOverflow()\n      }],\n      /**\n       * Overscroll Behavior\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      overscroll: [{\n        overscroll: getOverscroll()\n      }],\n      /**\n       * Overscroll Behavior X\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      'overscroll-x': [{\n        'overscroll-x': getOverscroll()\n      }],\n      /**\n       * Overscroll Behavior Y\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      'overscroll-y': [{\n        'overscroll-y': getOverscroll()\n      }],\n      /**\n       * Position\n       * @see https://tailwindcss.com/docs/position\n       */\n      position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n      /**\n       * Top / Right / Bottom / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      inset: [{\n        inset: [inset]\n      }],\n      /**\n       * Right / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-x': [{\n        'inset-x': [inset]\n      }],\n      /**\n       * Top / Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-y': [{\n        'inset-y': [inset]\n      }],\n      /**\n       * Start\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      start: [{\n        start: [inset]\n      }],\n      /**\n       * End\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      end: [{\n        end: [inset]\n      }],\n      /**\n       * Top\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      top: [{\n        top: [inset]\n      }],\n      /**\n       * Right\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      right: [{\n        right: [inset]\n      }],\n      /**\n       * Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      bottom: [{\n        bottom: [inset]\n      }],\n      /**\n       * Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      left: [{\n        left: [inset]\n      }],\n      /**\n       * Visibility\n       * @see https://tailwindcss.com/docs/visibility\n       */\n      visibility: ['visible', 'invisible', 'collapse'],\n      /**\n       * Z-Index\n       * @see https://tailwindcss.com/docs/z-index\n       */\n      z: [{\n        z: ['auto', isInteger, isArbitraryValue]\n      }],\n      // Flexbox and Grid\n      /**\n       * Flex Basis\n       * @see https://tailwindcss.com/docs/flex-basis\n       */\n      basis: [{\n        basis: getSpacingWithAutoAndArbitrary()\n      }],\n      /**\n       * Flex Direction\n       * @see https://tailwindcss.com/docs/flex-direction\n       */\n      'flex-direction': [{\n        flex: ['row', 'row-reverse', 'col', 'col-reverse']\n      }],\n      /**\n       * Flex Wrap\n       * @see https://tailwindcss.com/docs/flex-wrap\n       */\n      'flex-wrap': [{\n        flex: ['wrap', 'wrap-reverse', 'nowrap']\n      }],\n      /**\n       * Flex\n       * @see https://tailwindcss.com/docs/flex\n       */\n      flex: [{\n        flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n      }],\n      /**\n       * Flex Grow\n       * @see https://tailwindcss.com/docs/flex-grow\n       */\n      grow: [{\n        grow: getZeroAndEmpty()\n      }],\n      /**\n       * Flex Shrink\n       * @see https://tailwindcss.com/docs/flex-shrink\n       */\n      shrink: [{\n        shrink: getZeroAndEmpty()\n      }],\n      /**\n       * Order\n       * @see https://tailwindcss.com/docs/order\n       */\n      order: [{\n        order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n      }],\n      /**\n       * Grid Template Columns\n       * @see https://tailwindcss.com/docs/grid-template-columns\n       */\n      'grid-cols': [{\n        'grid-cols': [isAny]\n      }],\n      /**\n       * Grid Column Start / End\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-start-end': [{\n        col: ['auto', {\n          span: ['full', isInteger, isArbitraryValue]\n        }, isArbitraryValue]\n      }],\n      /**\n       * Grid Column Start\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-start': [{\n        'col-start': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Column End\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-end': [{\n        'col-end': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Template Rows\n       * @see https://tailwindcss.com/docs/grid-template-rows\n       */\n      'grid-rows': [{\n        'grid-rows': [isAny]\n      }],\n      /**\n       * Grid Row Start / End\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-start-end': [{\n        row: ['auto', {\n          span: [isInteger, isArbitraryValue]\n        }, isArbitraryValue]\n      }],\n      /**\n       * Grid Row Start\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-start': [{\n        'row-start': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Row End\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-end': [{\n        'row-end': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Auto Flow\n       * @see https://tailwindcss.com/docs/grid-auto-flow\n       */\n      'grid-flow': [{\n        'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n      }],\n      /**\n       * Grid Auto Columns\n       * @see https://tailwindcss.com/docs/grid-auto-columns\n       */\n      'auto-cols': [{\n        'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n      }],\n      /**\n       * Grid Auto Rows\n       * @see https://tailwindcss.com/docs/grid-auto-rows\n       */\n      'auto-rows': [{\n        'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n      }],\n      /**\n       * Gap\n       * @see https://tailwindcss.com/docs/gap\n       */\n      gap: [{\n        gap: [gap]\n      }],\n      /**\n       * Gap X\n       * @see https://tailwindcss.com/docs/gap\n       */\n      'gap-x': [{\n        'gap-x': [gap]\n      }],\n      /**\n       * Gap Y\n       * @see https://tailwindcss.com/docs/gap\n       */\n      'gap-y': [{\n        'gap-y': [gap]\n      }],\n      /**\n       * Justify Content\n       * @see https://tailwindcss.com/docs/justify-content\n       */\n      'justify-content': [{\n        justify: ['normal', ...getAlign()]\n      }],\n      /**\n       * Justify Items\n       * @see https://tailwindcss.com/docs/justify-items\n       */\n      'justify-items': [{\n        'justify-items': ['start', 'end', 'center', 'stretch']\n      }],\n      /**\n       * Justify Self\n       * @see https://tailwindcss.com/docs/justify-self\n       */\n      'justify-self': [{\n        'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n      }],\n      /**\n       * Align Content\n       * @see https://tailwindcss.com/docs/align-content\n       */\n      'align-content': [{\n        content: ['normal', ...getAlign(), 'baseline']\n      }],\n      /**\n       * Align Items\n       * @see https://tailwindcss.com/docs/align-items\n       */\n      'align-items': [{\n        items: ['start', 'end', 'center', 'baseline', 'stretch']\n      }],\n      /**\n       * Align Self\n       * @see https://tailwindcss.com/docs/align-self\n       */\n      'align-self': [{\n        self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n      }],\n      /**\n       * Place Content\n       * @see https://tailwindcss.com/docs/place-content\n       */\n      'place-content': [{\n        'place-content': [...getAlign(), 'baseline']\n      }],\n      /**\n       * Place Items\n       * @see https://tailwindcss.com/docs/place-items\n       */\n      'place-items': [{\n        'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n      }],\n      /**\n       * Place Self\n       * @see https://tailwindcss.com/docs/place-self\n       */\n      'place-self': [{\n        'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n      }],\n      // Spacing\n      /**\n       * Padding\n       * @see https://tailwindcss.com/docs/padding\n       */\n      p: [{\n        p: [padding]\n      }],\n      /**\n       * Padding X\n       * @see https://tailwindcss.com/docs/padding\n       */\n      px: [{\n        px: [padding]\n      }],\n      /**\n       * Padding Y\n       * @see https://tailwindcss.com/docs/padding\n       */\n      py: [{\n        py: [padding]\n      }],\n      /**\n       * Padding Start\n       * @see https://tailwindcss.com/docs/padding\n       */\n      ps: [{\n        ps: [padding]\n      }],\n      /**\n       * Padding End\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pe: [{\n        pe: [padding]\n      }],\n      /**\n       * Padding Top\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pt: [{\n        pt: [padding]\n      }],\n      /**\n       * Padding Right\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pr: [{\n        pr: [padding]\n      }],\n      /**\n       * Padding Bottom\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pb: [{\n        pb: [padding]\n      }],\n      /**\n       * Padding Left\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pl: [{\n        pl: [padding]\n      }],\n      /**\n       * Margin\n       * @see https://tailwindcss.com/docs/margin\n       */\n      m: [{\n        m: [margin]\n      }],\n      /**\n       * Margin X\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mx: [{\n        mx: [margin]\n      }],\n      /**\n       * Margin Y\n       * @see https://tailwindcss.com/docs/margin\n       */\n      my: [{\n        my: [margin]\n      }],\n      /**\n       * Margin Start\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ms: [{\n        ms: [margin]\n      }],\n      /**\n       * Margin End\n       * @see https://tailwindcss.com/docs/margin\n       */\n      me: [{\n        me: [margin]\n      }],\n      /**\n       * Margin Top\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mt: [{\n        mt: [margin]\n      }],\n      /**\n       * Margin Right\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mr: [{\n        mr: [margin]\n      }],\n      /**\n       * Margin Bottom\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mb: [{\n        mb: [margin]\n      }],\n      /**\n       * Margin Left\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ml: [{\n        ml: [margin]\n      }],\n      /**\n       * Space Between X\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-x': [{\n        'space-x': [space]\n      }],\n      /**\n       * Space Between X Reverse\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-x-reverse': ['space-x-reverse'],\n      /**\n       * Space Between Y\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-y': [{\n        'space-y': [space]\n      }],\n      /**\n       * Space Between Y Reverse\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-y-reverse': ['space-y-reverse'],\n      // Sizing\n      /**\n       * Width\n       * @see https://tailwindcss.com/docs/width\n       */\n      w: [{\n        w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n      }],\n      /**\n       * Min-Width\n       * @see https://tailwindcss.com/docs/min-width\n       */\n      'min-w': [{\n        'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n      }],\n      /**\n       * Max-Width\n       * @see https://tailwindcss.com/docs/max-width\n       */\n      'max-w': [{\n        'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n          screen: [isTshirtSize]\n        }, isTshirtSize]\n      }],\n      /**\n       * Height\n       * @see https://tailwindcss.com/docs/height\n       */\n      h: [{\n        h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Min-Height\n       * @see https://tailwindcss.com/docs/min-height\n       */\n      'min-h': [{\n        'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Max-Height\n       * @see https://tailwindcss.com/docs/max-height\n       */\n      'max-h': [{\n        'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Size\n       * @see https://tailwindcss.com/docs/size\n       */\n      size: [{\n        size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n      }],\n      // Typography\n      /**\n       * Font Size\n       * @see https://tailwindcss.com/docs/font-size\n       */\n      'font-size': [{\n        text: ['base', isTshirtSize, isArbitraryLength]\n      }],\n      /**\n       * Font Smoothing\n       * @see https://tailwindcss.com/docs/font-smoothing\n       */\n      'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n      /**\n       * Font Style\n       * @see https://tailwindcss.com/docs/font-style\n       */\n      'font-style': ['italic', 'not-italic'],\n      /**\n       * Font Weight\n       * @see https://tailwindcss.com/docs/font-weight\n       */\n      'font-weight': [{\n        font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n      }],\n      /**\n       * Font Family\n       * @see https://tailwindcss.com/docs/font-family\n       */\n      'font-family': [{\n        font: [isAny]\n      }],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-normal': ['normal-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-ordinal': ['ordinal'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-slashed-zero': ['slashed-zero'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n      /**\n       * Letter Spacing\n       * @see https://tailwindcss.com/docs/letter-spacing\n       */\n      tracking: [{\n        tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n      }],\n      /**\n       * Line Clamp\n       * @see https://tailwindcss.com/docs/line-clamp\n       */\n      'line-clamp': [{\n        'line-clamp': ['none', isNumber, isArbitraryNumber]\n      }],\n      /**\n       * Line Height\n       * @see https://tailwindcss.com/docs/line-height\n       */\n      leading: [{\n        leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n      }],\n      /**\n       * List Style Image\n       * @see https://tailwindcss.com/docs/list-style-image\n       */\n      'list-image': [{\n        'list-image': ['none', isArbitraryValue]\n      }],\n      /**\n       * List Style Type\n       * @see https://tailwindcss.com/docs/list-style-type\n       */\n      'list-style-type': [{\n        list: ['none', 'disc', 'decimal', isArbitraryValue]\n      }],\n      /**\n       * List Style Position\n       * @see https://tailwindcss.com/docs/list-style-position\n       */\n      'list-style-position': [{\n        list: ['inside', 'outside']\n      }],\n      /**\n       * Placeholder Color\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/placeholder-color\n       */\n      'placeholder-color': [{\n        placeholder: [colors]\n      }],\n      /**\n       * Placeholder Opacity\n       * @see https://tailwindcss.com/docs/placeholder-opacity\n       */\n      'placeholder-opacity': [{\n        'placeholder-opacity': [opacity]\n      }],\n      /**\n       * Text Alignment\n       * @see https://tailwindcss.com/docs/text-align\n       */\n      'text-alignment': [{\n        text: ['left', 'center', 'right', 'justify', 'start', 'end']\n      }],\n      /**\n       * Text Color\n       * @see https://tailwindcss.com/docs/text-color\n       */\n      'text-color': [{\n        text: [colors]\n      }],\n      /**\n       * Text Opacity\n       * @see https://tailwindcss.com/docs/text-opacity\n       */\n      'text-opacity': [{\n        'text-opacity': [opacity]\n      }],\n      /**\n       * Text Decoration\n       * @see https://tailwindcss.com/docs/text-decoration\n       */\n      'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n      /**\n       * Text Decoration Style\n       * @see https://tailwindcss.com/docs/text-decoration-style\n       */\n      'text-decoration-style': [{\n        decoration: [...getLineStyles(), 'wavy']\n      }],\n      /**\n       * Text Decoration Thickness\n       * @see https://tailwindcss.com/docs/text-decoration-thickness\n       */\n      'text-decoration-thickness': [{\n        decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n      }],\n      /**\n       * Text Underline Offset\n       * @see https://tailwindcss.com/docs/text-underline-offset\n       */\n      'underline-offset': [{\n        'underline-offset': ['auto', isLength, isArbitraryValue]\n      }],\n      /**\n       * Text Decoration Color\n       * @see https://tailwindcss.com/docs/text-decoration-color\n       */\n      'text-decoration-color': [{\n        decoration: [colors]\n      }],\n      /**\n       * Text Transform\n       * @see https://tailwindcss.com/docs/text-transform\n       */\n      'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n      /**\n       * Text Overflow\n       * @see https://tailwindcss.com/docs/text-overflow\n       */\n      'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n      /**\n       * Text Wrap\n       * @see https://tailwindcss.com/docs/text-wrap\n       */\n      'text-wrap': [{\n        text: ['wrap', 'nowrap', 'balance', 'pretty']\n      }],\n      /**\n       * Text Indent\n       * @see https://tailwindcss.com/docs/text-indent\n       */\n      indent: [{\n        indent: getSpacingWithArbitrary()\n      }],\n      /**\n       * Vertical Alignment\n       * @see https://tailwindcss.com/docs/vertical-align\n       */\n      'vertical-align': [{\n        align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n      }],\n      /**\n       * Whitespace\n       * @see https://tailwindcss.com/docs/whitespace\n       */\n      whitespace: [{\n        whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n      }],\n      /**\n       * Word Break\n       * @see https://tailwindcss.com/docs/word-break\n       */\n      break: [{\n        break: ['normal', 'words', 'all', 'keep']\n      }],\n      /**\n       * Hyphens\n       * @see https://tailwindcss.com/docs/hyphens\n       */\n      hyphens: [{\n        hyphens: ['none', 'manual', 'auto']\n      }],\n      /**\n       * Content\n       * @see https://tailwindcss.com/docs/content\n       */\n      content: [{\n        content: ['none', isArbitraryValue]\n      }],\n      // Backgrounds\n      /**\n       * Background Attachment\n       * @see https://tailwindcss.com/docs/background-attachment\n       */\n      'bg-attachment': [{\n        bg: ['fixed', 'local', 'scroll']\n      }],\n      /**\n       * Background Clip\n       * @see https://tailwindcss.com/docs/background-clip\n       */\n      'bg-clip': [{\n        'bg-clip': ['border', 'padding', 'content', 'text']\n      }],\n      /**\n       * Background Opacity\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/background-opacity\n       */\n      'bg-opacity': [{\n        'bg-opacity': [opacity]\n      }],\n      /**\n       * Background Origin\n       * @see https://tailwindcss.com/docs/background-origin\n       */\n      'bg-origin': [{\n        'bg-origin': ['border', 'padding', 'content']\n      }],\n      /**\n       * Background Position\n       * @see https://tailwindcss.com/docs/background-position\n       */\n      'bg-position': [{\n        bg: [...getPositions(), isArbitraryPosition]\n      }],\n      /**\n       * Background Repeat\n       * @see https://tailwindcss.com/docs/background-repeat\n       */\n      'bg-repeat': [{\n        bg: ['no-repeat', {\n          repeat: ['', 'x', 'y', 'round', 'space']\n        }]\n      }],\n      /**\n       * Background Size\n       * @see https://tailwindcss.com/docs/background-size\n       */\n      'bg-size': [{\n        bg: ['auto', 'cover', 'contain', isArbitrarySize]\n      }],\n      /**\n       * Background Image\n       * @see https://tailwindcss.com/docs/background-image\n       */\n      'bg-image': [{\n        bg: ['none', {\n          'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n        }, isArbitraryImage]\n      }],\n      /**\n       * Background Color\n       * @see https://tailwindcss.com/docs/background-color\n       */\n      'bg-color': [{\n        bg: [colors]\n      }],\n      /**\n       * Gradient Color Stops From Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-from-pos': [{\n        from: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops Via Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-via-pos': [{\n        via: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops To Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-to-pos': [{\n        to: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops From\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-from': [{\n        from: [gradientColorStops]\n      }],\n      /**\n       * Gradient Color Stops Via\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-via': [{\n        via: [gradientColorStops]\n      }],\n      /**\n       * Gradient Color Stops To\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-to': [{\n        to: [gradientColorStops]\n      }],\n      // Borders\n      /**\n       * Border Radius\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      rounded: [{\n        rounded: [borderRadius]\n      }],\n      /**\n       * Border Radius Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-s': [{\n        'rounded-s': [borderRadius]\n      }],\n      /**\n       * Border Radius End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-e': [{\n        'rounded-e': [borderRadius]\n      }],\n      /**\n       * Border Radius Top\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-t': [{\n        'rounded-t': [borderRadius]\n      }],\n      /**\n       * Border Radius Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-r': [{\n        'rounded-r': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-b': [{\n        'rounded-b': [borderRadius]\n      }],\n      /**\n       * Border Radius Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-l': [{\n        'rounded-l': [borderRadius]\n      }],\n      /**\n       * Border Radius Start Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-ss': [{\n        'rounded-ss': [borderRadius]\n      }],\n      /**\n       * Border Radius Start End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-se': [{\n        'rounded-se': [borderRadius]\n      }],\n      /**\n       * Border Radius End End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-ee': [{\n        'rounded-ee': [borderRadius]\n      }],\n      /**\n       * Border Radius End Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-es': [{\n        'rounded-es': [borderRadius]\n      }],\n      /**\n       * Border Radius Top Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-tl': [{\n        'rounded-tl': [borderRadius]\n      }],\n      /**\n       * Border Radius Top Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-tr': [{\n        'rounded-tr': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-br': [{\n        'rounded-br': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-bl': [{\n        'rounded-bl': [borderRadius]\n      }],\n      /**\n       * Border Width\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w': [{\n        border: [borderWidth]\n      }],\n      /**\n       * Border Width X\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-x': [{\n        'border-x': [borderWidth]\n      }],\n      /**\n       * Border Width Y\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-y': [{\n        'border-y': [borderWidth]\n      }],\n      /**\n       * Border Width Start\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-s': [{\n        'border-s': [borderWidth]\n      }],\n      /**\n       * Border Width End\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-e': [{\n        'border-e': [borderWidth]\n      }],\n      /**\n       * Border Width Top\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-t': [{\n        'border-t': [borderWidth]\n      }],\n      /**\n       * Border Width Right\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-r': [{\n        'border-r': [borderWidth]\n      }],\n      /**\n       * Border Width Bottom\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-b': [{\n        'border-b': [borderWidth]\n      }],\n      /**\n       * Border Width Left\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-l': [{\n        'border-l': [borderWidth]\n      }],\n      /**\n       * Border Opacity\n       * @see https://tailwindcss.com/docs/border-opacity\n       */\n      'border-opacity': [{\n        'border-opacity': [opacity]\n      }],\n      /**\n       * Border Style\n       * @see https://tailwindcss.com/docs/border-style\n       */\n      'border-style': [{\n        border: [...getLineStyles(), 'hidden']\n      }],\n      /**\n       * Divide Width X\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-x': [{\n        'divide-x': [borderWidth]\n      }],\n      /**\n       * Divide Width X Reverse\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-x-reverse': ['divide-x-reverse'],\n      /**\n       * Divide Width Y\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-y': [{\n        'divide-y': [borderWidth]\n      }],\n      /**\n       * Divide Width Y Reverse\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-y-reverse': ['divide-y-reverse'],\n      /**\n       * Divide Opacity\n       * @see https://tailwindcss.com/docs/divide-opacity\n       */\n      'divide-opacity': [{\n        'divide-opacity': [opacity]\n      }],\n      /**\n       * Divide Style\n       * @see https://tailwindcss.com/docs/divide-style\n       */\n      'divide-style': [{\n        divide: getLineStyles()\n      }],\n      /**\n       * Border Color\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color': [{\n        border: [borderColor]\n      }],\n      /**\n       * Border Color X\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-x': [{\n        'border-x': [borderColor]\n      }],\n      /**\n       * Border Color Y\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-y': [{\n        'border-y': [borderColor]\n      }],\n      /**\n       * Border Color S\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-s': [{\n        'border-s': [borderColor]\n      }],\n      /**\n       * Border Color E\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-e': [{\n        'border-e': [borderColor]\n      }],\n      /**\n       * Border Color Top\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-t': [{\n        'border-t': [borderColor]\n      }],\n      /**\n       * Border Color Right\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-r': [{\n        'border-r': [borderColor]\n      }],\n      /**\n       * Border Color Bottom\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-b': [{\n        'border-b': [borderColor]\n      }],\n      /**\n       * Border Color Left\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-l': [{\n        'border-l': [borderColor]\n      }],\n      /**\n       * Divide Color\n       * @see https://tailwindcss.com/docs/divide-color\n       */\n      'divide-color': [{\n        divide: [borderColor]\n      }],\n      /**\n       * Outline Style\n       * @see https://tailwindcss.com/docs/outline-style\n       */\n      'outline-style': [{\n        outline: ['', ...getLineStyles()]\n      }],\n      /**\n       * Outline Offset\n       * @see https://tailwindcss.com/docs/outline-offset\n       */\n      'outline-offset': [{\n        'outline-offset': [isLength, isArbitraryValue]\n      }],\n      /**\n       * Outline Width\n       * @see https://tailwindcss.com/docs/outline-width\n       */\n      'outline-w': [{\n        outline: [isLength, isArbitraryLength]\n      }],\n      /**\n       * Outline Color\n       * @see https://tailwindcss.com/docs/outline-color\n       */\n      'outline-color': [{\n        outline: [colors]\n      }],\n      /**\n       * Ring Width\n       * @see https://tailwindcss.com/docs/ring-width\n       */\n      'ring-w': [{\n        ring: getLengthWithEmptyAndArbitrary()\n      }],\n      /**\n       * Ring Width Inset\n       * @see https://tailwindcss.com/docs/ring-width\n       */\n      'ring-w-inset': ['ring-inset'],\n      /**\n       * Ring Color\n       * @see https://tailwindcss.com/docs/ring-color\n       */\n      'ring-color': [{\n        ring: [colors]\n      }],\n      /**\n       * Ring Opacity\n       * @see https://tailwindcss.com/docs/ring-opacity\n       */\n      'ring-opacity': [{\n        'ring-opacity': [opacity]\n      }],\n      /**\n       * Ring Offset Width\n       * @see https://tailwindcss.com/docs/ring-offset-width\n       */\n      'ring-offset-w': [{\n        'ring-offset': [isLength, isArbitraryLength]\n      }],\n      /**\n       * Ring Offset Color\n       * @see https://tailwindcss.com/docs/ring-offset-color\n       */\n      'ring-offset-color': [{\n        'ring-offset': [colors]\n      }],\n      // Effects\n      /**\n       * Box Shadow\n       * @see https://tailwindcss.com/docs/box-shadow\n       */\n      shadow: [{\n        shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n      }],\n      /**\n       * Box Shadow Color\n       * @see https://tailwindcss.com/docs/box-shadow-color\n       */\n      'shadow-color': [{\n        shadow: [isAny]\n      }],\n      /**\n       * Opacity\n       * @see https://tailwindcss.com/docs/opacity\n       */\n      opacity: [{\n        opacity: [opacity]\n      }],\n      /**\n       * Mix Blend Mode\n       * @see https://tailwindcss.com/docs/mix-blend-mode\n       */\n      'mix-blend': [{\n        'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n      }],\n      /**\n       * Background Blend Mode\n       * @see https://tailwindcss.com/docs/background-blend-mode\n       */\n      'bg-blend': [{\n        'bg-blend': getBlendModes()\n      }],\n      // Filters\n      /**\n       * Filter\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/filter\n       */\n      filter: [{\n        filter: ['', 'none']\n      }],\n      /**\n       * Blur\n       * @see https://tailwindcss.com/docs/blur\n       */\n      blur: [{\n        blur: [blur]\n      }],\n      /**\n       * Brightness\n       * @see https://tailwindcss.com/docs/brightness\n       */\n      brightness: [{\n        brightness: [brightness]\n      }],\n      /**\n       * Contrast\n       * @see https://tailwindcss.com/docs/contrast\n       */\n      contrast: [{\n        contrast: [contrast]\n      }],\n      /**\n       * Drop Shadow\n       * @see https://tailwindcss.com/docs/drop-shadow\n       */\n      'drop-shadow': [{\n        'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n      }],\n      /**\n       * Grayscale\n       * @see https://tailwindcss.com/docs/grayscale\n       */\n      grayscale: [{\n        grayscale: [grayscale]\n      }],\n      /**\n       * Hue Rotate\n       * @see https://tailwindcss.com/docs/hue-rotate\n       */\n      'hue-rotate': [{\n        'hue-rotate': [hueRotate]\n      }],\n      /**\n       * Invert\n       * @see https://tailwindcss.com/docs/invert\n       */\n      invert: [{\n        invert: [invert]\n      }],\n      /**\n       * Saturate\n       * @see https://tailwindcss.com/docs/saturate\n       */\n      saturate: [{\n        saturate: [saturate]\n      }],\n      /**\n       * Sepia\n       * @see https://tailwindcss.com/docs/sepia\n       */\n      sepia: [{\n        sepia: [sepia]\n      }],\n      /**\n       * Backdrop Filter\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/backdrop-filter\n       */\n      'backdrop-filter': [{\n        'backdrop-filter': ['', 'none']\n      }],\n      /**\n       * Backdrop Blur\n       * @see https://tailwindcss.com/docs/backdrop-blur\n       */\n      'backdrop-blur': [{\n        'backdrop-blur': [blur]\n      }],\n      /**\n       * Backdrop Brightness\n       * @see https://tailwindcss.com/docs/backdrop-brightness\n       */\n      'backdrop-brightness': [{\n        'backdrop-brightness': [brightness]\n      }],\n      /**\n       * Backdrop Contrast\n       * @see https://tailwindcss.com/docs/backdrop-contrast\n       */\n      'backdrop-contrast': [{\n        'backdrop-contrast': [contrast]\n      }],\n      /**\n       * Backdrop Grayscale\n       * @see https://tailwindcss.com/docs/backdrop-grayscale\n       */\n      'backdrop-grayscale': [{\n        'backdrop-grayscale': [grayscale]\n      }],\n      /**\n       * Backdrop Hue Rotate\n       * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n       */\n      'backdrop-hue-rotate': [{\n        'backdrop-hue-rotate': [hueRotate]\n      }],\n      /**\n       * Backdrop Invert\n       * @see https://tailwindcss.com/docs/backdrop-invert\n       */\n      'backdrop-invert': [{\n        'backdrop-invert': [invert]\n      }],\n      /**\n       * Backdrop Opacity\n       * @see https://tailwindcss.com/docs/backdrop-opacity\n       */\n      'backdrop-opacity': [{\n        'backdrop-opacity': [opacity]\n      }],\n      /**\n       * Backdrop Saturate\n       * @see https://tailwindcss.com/docs/backdrop-saturate\n       */\n      'backdrop-saturate': [{\n        'backdrop-saturate': [saturate]\n      }],\n      /**\n       * Backdrop Sepia\n       * @see https://tailwindcss.com/docs/backdrop-sepia\n       */\n      'backdrop-sepia': [{\n        'backdrop-sepia': [sepia]\n      }],\n      // Tables\n      /**\n       * Border Collapse\n       * @see https://tailwindcss.com/docs/border-collapse\n       */\n      'border-collapse': [{\n        border: ['collapse', 'separate']\n      }],\n      /**\n       * Border Spacing\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing': [{\n        'border-spacing': [borderSpacing]\n      }],\n      /**\n       * Border Spacing X\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing-x': [{\n        'border-spacing-x': [borderSpacing]\n      }],\n      /**\n       * Border Spacing Y\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing-y': [{\n        'border-spacing-y': [borderSpacing]\n      }],\n      /**\n       * Table Layout\n       * @see https://tailwindcss.com/docs/table-layout\n       */\n      'table-layout': [{\n        table: ['auto', 'fixed']\n      }],\n      /**\n       * Caption Side\n       * @see https://tailwindcss.com/docs/caption-side\n       */\n      caption: [{\n        caption: ['top', 'bottom']\n      }],\n      // Transitions and Animation\n      /**\n       * Tranisition Property\n       * @see https://tailwindcss.com/docs/transition-property\n       */\n      transition: [{\n        transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n      }],\n      /**\n       * Transition Duration\n       * @see https://tailwindcss.com/docs/transition-duration\n       */\n      duration: [{\n        duration: getNumberAndArbitrary()\n      }],\n      /**\n       * Transition Timing Function\n       * @see https://tailwindcss.com/docs/transition-timing-function\n       */\n      ease: [{\n        ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n      }],\n      /**\n       * Transition Delay\n       * @see https://tailwindcss.com/docs/transition-delay\n       */\n      delay: [{\n        delay: getNumberAndArbitrary()\n      }],\n      /**\n       * Animation\n       * @see https://tailwindcss.com/docs/animation\n       */\n      animate: [{\n        animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n      }],\n      // Transforms\n      /**\n       * Transform\n       * @see https://tailwindcss.com/docs/transform\n       */\n      transform: [{\n        transform: ['', 'gpu', 'none']\n      }],\n      /**\n       * Scale\n       * @see https://tailwindcss.com/docs/scale\n       */\n      scale: [{\n        scale: [scale]\n      }],\n      /**\n       * Scale X\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-x': [{\n        'scale-x': [scale]\n      }],\n      /**\n       * Scale Y\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-y': [{\n        'scale-y': [scale]\n      }],\n      /**\n       * Rotate\n       * @see https://tailwindcss.com/docs/rotate\n       */\n      rotate: [{\n        rotate: [isInteger, isArbitraryValue]\n      }],\n      /**\n       * Translate X\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-x': [{\n        'translate-x': [translate]\n      }],\n      /**\n       * Translate Y\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-y': [{\n        'translate-y': [translate]\n      }],\n      /**\n       * Skew X\n       * @see https://tailwindcss.com/docs/skew\n       */\n      'skew-x': [{\n        'skew-x': [skew]\n      }],\n      /**\n       * Skew Y\n       * @see https://tailwindcss.com/docs/skew\n       */\n      'skew-y': [{\n        'skew-y': [skew]\n      }],\n      /**\n       * Transform Origin\n       * @see https://tailwindcss.com/docs/transform-origin\n       */\n      'transform-origin': [{\n        origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n      }],\n      // Interactivity\n      /**\n       * Accent Color\n       * @see https://tailwindcss.com/docs/accent-color\n       */\n      accent: [{\n        accent: ['auto', colors]\n      }],\n      /**\n       * Appearance\n       * @see https://tailwindcss.com/docs/appearance\n       */\n      appearance: [{\n        appearance: ['none', 'auto']\n      }],\n      /**\n       * Cursor\n       * @see https://tailwindcss.com/docs/cursor\n       */\n      cursor: [{\n        cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n      }],\n      /**\n       * Caret Color\n       * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n       */\n      'caret-color': [{\n        caret: [colors]\n      }],\n      /**\n       * Pointer Events\n       * @see https://tailwindcss.com/docs/pointer-events\n       */\n      'pointer-events': [{\n        'pointer-events': ['none', 'auto']\n      }],\n      /**\n       * Resize\n       * @see https://tailwindcss.com/docs/resize\n       */\n      resize: [{\n        resize: ['none', 'y', 'x', '']\n      }],\n      /**\n       * Scroll Behavior\n       * @see https://tailwindcss.com/docs/scroll-behavior\n       */\n      'scroll-behavior': [{\n        scroll: ['auto', 'smooth']\n      }],\n      /**\n       * Scroll Margin\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-m': [{\n        'scroll-m': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin X\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mx': [{\n        'scroll-mx': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Y\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-my': [{\n        'scroll-my': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Start\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ms': [{\n        'scroll-ms': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin End\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-me': [{\n        'scroll-me': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Top\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mt': [{\n        'scroll-mt': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Right\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mr': [{\n        'scroll-mr': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Bottom\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mb': [{\n        'scroll-mb': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Left\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ml': [{\n        'scroll-ml': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-p': [{\n        'scroll-p': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding X\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-px': [{\n        'scroll-px': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Y\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-py': [{\n        'scroll-py': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Start\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-ps': [{\n        'scroll-ps': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding End\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pe': [{\n        'scroll-pe': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Top\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pt': [{\n        'scroll-pt': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Right\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pr': [{\n        'scroll-pr': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Bottom\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pb': [{\n        'scroll-pb': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Left\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pl': [{\n        'scroll-pl': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Snap Align\n       * @see https://tailwindcss.com/docs/scroll-snap-align\n       */\n      'snap-align': [{\n        snap: ['start', 'end', 'center', 'align-none']\n      }],\n      /**\n       * Scroll Snap Stop\n       * @see https://tailwindcss.com/docs/scroll-snap-stop\n       */\n      'snap-stop': [{\n        snap: ['normal', 'always']\n      }],\n      /**\n       * Scroll Snap Type\n       * @see https://tailwindcss.com/docs/scroll-snap-type\n       */\n      'snap-type': [{\n        snap: ['none', 'x', 'y', 'both']\n      }],\n      /**\n       * Scroll Snap Type Strictness\n       * @see https://tailwindcss.com/docs/scroll-snap-type\n       */\n      'snap-strictness': [{\n        snap: ['mandatory', 'proximity']\n      }],\n      /**\n       * Touch Action\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      touch: [{\n        touch: ['auto', 'none', 'manipulation']\n      }],\n      /**\n       * Touch Action X\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-x': [{\n        'touch-pan': ['x', 'left', 'right']\n      }],\n      /**\n       * Touch Action Y\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-y': [{\n        'touch-pan': ['y', 'up', 'down']\n      }],\n      /**\n       * Touch Action Pinch Zoom\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-pz': ['touch-pinch-zoom'],\n      /**\n       * User Select\n       * @see https://tailwindcss.com/docs/user-select\n       */\n      select: [{\n        select: ['none', 'text', 'all', 'auto']\n      }],\n      /**\n       * Will Change\n       * @see https://tailwindcss.com/docs/will-change\n       */\n      'will-change': [{\n        'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n      }],\n      // SVG\n      /**\n       * Fill\n       * @see https://tailwindcss.com/docs/fill\n       */\n      fill: [{\n        fill: [colors, 'none']\n      }],\n      /**\n       * Stroke Width\n       * @see https://tailwindcss.com/docs/stroke-width\n       */\n      'stroke-w': [{\n        stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n      }],\n      /**\n       * Stroke\n       * @see https://tailwindcss.com/docs/stroke\n       */\n      stroke: [{\n        stroke: [colors, 'none']\n      }],\n      // Accessibility\n      /**\n       * Screen Readers\n       * @see https://tailwindcss.com/docs/screen-readers\n       */\n      sr: ['sr-only', 'not-sr-only'],\n      /**\n       * Forced Color Adjust\n       * @see https://tailwindcss.com/docs/forced-color-adjust\n       */\n      'forced-color-adjust': [{\n        'forced-color-adjust': ['auto', 'none']\n      }]\n    },\n    conflictingClassGroups: {\n      overflow: ['overflow-x', 'overflow-y'],\n      overscroll: ['overscroll-x', 'overscroll-y'],\n      inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n      'inset-x': ['right', 'left'],\n      'inset-y': ['top', 'bottom'],\n      flex: ['basis', 'grow', 'shrink'],\n      gap: ['gap-x', 'gap-y'],\n      p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n      px: ['pr', 'pl'],\n      py: ['pt', 'pb'],\n      m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n      mx: ['mr', 'ml'],\n      my: ['mt', 'mb'],\n      size: ['w', 'h'],\n      'font-size': ['leading'],\n      'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n      'fvn-ordinal': ['fvn-normal'],\n      'fvn-slashed-zero': ['fvn-normal'],\n      'fvn-figure': ['fvn-normal'],\n      'fvn-spacing': ['fvn-normal'],\n      'fvn-fraction': ['fvn-normal'],\n      'line-clamp': ['display', 'overflow'],\n      rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n      'rounded-s': ['rounded-ss', 'rounded-es'],\n      'rounded-e': ['rounded-se', 'rounded-ee'],\n      'rounded-t': ['rounded-tl', 'rounded-tr'],\n      'rounded-r': ['rounded-tr', 'rounded-br'],\n      'rounded-b': ['rounded-br', 'rounded-bl'],\n      'rounded-l': ['rounded-tl', 'rounded-bl'],\n      'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n      'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n      'border-w-x': ['border-w-r', 'border-w-l'],\n      'border-w-y': ['border-w-t', 'border-w-b'],\n      'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n      'border-color-x': ['border-color-r', 'border-color-l'],\n      'border-color-y': ['border-color-t', 'border-color-b'],\n      'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n      'scroll-mx': ['scroll-mr', 'scroll-ml'],\n      'scroll-my': ['scroll-mt', 'scroll-mb'],\n      'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n      'scroll-px': ['scroll-pr', 'scroll-pl'],\n      'scroll-py': ['scroll-pt', 'scroll-pb'],\n      touch: ['touch-x', 'touch-y', 'touch-pz'],\n      'touch-x': ['touch'],\n      'touch-y': ['touch'],\n      'touch-pz': ['touch']\n    },\n    conflictingClassGroupModifiers: {\n      'font-size': ['leading']\n    }\n  };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n  cacheSize,\n  prefix,\n  separator,\n  experimentalParseClassName,\n  extend = {},\n  override = {}\n}) => {\n  overrideProperty(baseConfig, 'cacheSize', cacheSize);\n  overrideProperty(baseConfig, 'prefix', prefix);\n  overrideProperty(baseConfig, 'separator', separator);\n  overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n  for (const configKey in override) {\n    overrideConfigProperties(baseConfig[configKey], override[configKey]);\n  }\n  for (const key in extend) {\n    mergeConfigProperties(baseConfig[key], extend[key]);\n  }\n  return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n  if (overrideValue !== undefined) {\n    baseObject[overrideKey] = overrideValue;\n  }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n  if (overrideObject) {\n    for (const key in overrideObject) {\n      overrideProperty(baseObject, key, overrideObject[key]);\n    }\n  }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n  if (mergeObject) {\n    for (const key in mergeObject) {\n      const mergeValue = mergeObject[key];\n      if (mergeValue !== undefined) {\n        baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n      }\n    }\n  }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","<script setup lang=\"ts\">\nimport { NButton, NTooltip } from 'naive-ui'\nimport type { PopoverPlacement } from 'naive-ui'\nimport { twMerge } from 'tailwind-merge'\nimport { XBasicSvgIcon } from '@ximax/ui'\n\ndefineOptions({\n  name: 'ButtonIcon',\n  inheritAttrs: false\n})\n\ninterface Props {\n  /** Button class */\n  class?: string\n  /** Iconify icon name */\n  icon?: string\n  /** Tooltip content */\n  tooltipContent?: string\n  /** Tooltip placement */\n  tooltipPlacement?: PopoverPlacement\n  zIndex?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  class: '',\n  icon: '',\n  tooltipContent: '',\n  tooltipPlacement: 'bottom',\n  zIndex: 98\n})\n\nconst DEFAULT_CLASS = 'button-icon button-icon-36px button-icon-text-icon'\n</script>\n\n<template>\n  <NTooltip :placement=\"tooltipPlacement\" :z-index=\"zIndex\" :disabled=\"!tooltipContent\">\n    <template #trigger>\n      <NButton quaternary :class=\"twMerge(DEFAULT_CLASS, props.class)\" v-bind=\"$attrs\">\n        <div class=\"flex-center gap-8px\">\n          <slot>\n            <XBasicSvgIcon :icon=\"icon\" />\n          </slot>\n        </div>\n      </NButton>\n    </template>\n    {{ tooltipContent }}\n  </NTooltip>\n</template>\n\n<style scoped>\n.button-icon-36px {\n  height: 36px;\n}\n.button-icon-text-icon {\n  font-size: 1.125rem;\n  line-height: 1;\n}\n</style>\n","<script lang=\"ts\" setup></script>\n\n<template>\n  <div class=\"login-bg absolute-lt z-1 size-full flex-center overflow-hidden\"></div>\n</template>\n\n<style scoped>\n.login-bg {\n  background-image: url('./assets/login-background-1.jpg');\n  background-size: cover;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n</style>\n","<script lang=\"ts\" setup></script>\n\n<template>\n  <div class=\"login-bg absolute-lt z-1 size-full flex-center overflow-hidden\">\n    <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"1920\" height=\"1080\" viewBox=\"0 0 1920 1080\" fill=\"none\">\n      <g clip-path=\"url(#clip-path-78jOFjxVBCd9S5AZrL2KP)\">\n        <path fill=\"#130C1A\" d=\"M0 1080L1920 1080L1920 0L0 0L0 1080Z\"></path>\n        <path d=\"M825.171 1312C825.171 1622.38 573.74 1874 263.585 1874C-46.5697 1874 -298 1622.38 -298 1312C-298 1001.62 -46.5697 750 263.585 750C573.74 750 825.171 1001.62 825.171 1312Z\" fill=\"url(#linear_fill_7P5GizVYZEJTSSHSfKAxV)\"></path>\n        <g filter=\"url(#filter_j2ad20QvKp0qwr195lr-Z)\">\n          <path\n            d=\"M661.192 910.875C559.305 809.728 418.487 747 263.59 747C108.664 747 -32.177 809.748 -134.069 910.924C-237.007 1013.14 -301 1155.37 -301 1312C-301 1468.63 -237.007 1610.86 -134.069 1713.08C-32.177 1814.25 108.664 1877 263.59 1877C418.486 1877 559.304 1814.27 661.191 1713.13C764.16 1610.91 828.17 1468.65 828.17 1312C828.17 1155.35 764.16 1013.09 661.192 910.875ZM-129.841 915.181C-28.73 814.781 109.94 753 263.59 753C417.211 753 555.858 814.761 656.964 915.133C759.14 1016.57 822.17 1156.64 822.17 1312C822.17 1467.36 759.14 1607.43 656.964 1708.87C555.858 1809.24 417.211 1871 263.59 1871C109.94 1871 -28.73 1809.22 -129.841 1708.82C-231.991 1607.39 -295 1467.34 -295 1312C-295 1156.66 -231.991 1016.61 -129.841 915.181Z\"\n            fill-rule=\"evenodd\"\n            fill=\"url(#linear_fill_j2ad20QvKp0qwr195lr-Z)\"\n          ></path>\n        </g>\n        <g opacity=\"0.4\">\n          <g filter=\"url(#filter_MSDv03dt-Zbpmo_g7ZVvW)\">\n            <path\n              fill=\"url(#linear_fill_MSDv03dt-Zbpmo_g7ZVvW_0)\"\n              d=\"M1126.57 -114.683L783.665 -188.251C812.745 -114.511 739.404 135.806 472.081 493.332C204.757 850.857 -320.358 856.135 -619.273 965.338C-649.539 1017.56 -722.63 1244.86 -320.468 1334.49C-50.8701 1192.42 638.139 492.094 889.28 227.539L1126.57 -114.683\"\n            ></path>\n            <path\n              fill=\"url(#linear_fill_MSDv03dt-Zbpmo_g7ZVvW_1)\"\n              d=\"M1126.57 -114.683L783.665 -188.251C812.745 -114.511 739.404 135.806 472.081 493.332C204.757 850.857 -320.358 856.135 -619.273 965.338C-649.539 1017.56 -722.63 1244.86 -320.468 1334.49C-50.8701 1192.42 638.139 492.094 889.28 227.539L1126.57 -114.683\"\n            ></path>\n          </g>\n        </g>\n        <g opacity=\"0.5\">\n          <g opacity=\"0.7\">\n            <path stroke=\"url(#linear_border_UkBLHn533rtejkLQFonx5_0)\" stroke-width=\"1\" stroke-linecap=\"round\" d=\"M1304.9 1252.58L1887 766\"></path>\n          </g>\n          <g opacity=\"0.7\">\n            <path stroke=\"url(#linear_border_ikCBpRUNHolOi1xg0l1q4_0)\" stroke-width=\"1\" stroke-linecap=\"round\" d=\"M488.898 1037.58L1071 551\"></path>\n          </g>\n          <g opacity=\"0.7\">\n            <path stroke=\"url(#linear_border_kv67yBlHN14a1eBr9B0V7_0)\" stroke-width=\"1\" stroke-linecap=\"round\" d=\"M632.898 664.578L1215 178\"></path>\n          </g>\n          <g opacity=\"0.7\">\n            <path stroke=\"url(#linear_border_kp4V1CgV1-6XkMPe2BdpO_0)\" stroke-width=\"1\" stroke-linecap=\"round\" d=\"M826.898 1186.58L1409 700\"></path>\n          </g>\n          <g opacity=\"0.7\">\n            <path stroke=\"url(#linear_border_I2aKLFOHw5qbze2XqfxNz_0)\" stroke-width=\"1\" stroke-linecap=\"round\" d=\"M1265.9 529.578L1848 43\"></path>\n          </g>\n          <g opacity=\"0.7\">\n            <path stroke=\"url(#linear_border_xWT9apJoWOIiq6EDvvrIF_0)\" stroke-width=\"1\" stroke-linecap=\"round\" d=\"M838.355 168L1057.35 -23.9999\"></path>\n          </g>\n          <g opacity=\"0.5\">\n            <path stroke=\"url(#linear_border_4gx9P903UignmyssoKjsm_0)\" stroke-width=\"1\" stroke-linecap=\"round\" d=\"M582.898 409.578L1165 -77\"></path>\n          </g>\n        </g>\n        <circle cx=\"162.87588500976562\" cy=\"459.5\" r=\"348.5\" fill=\"url(#linear_fill_ADFUuIgnrpQ0I0ui_sPV8)\"></circle>\n        <circle cx=\"162.87588500976562\" cy=\"459.5\" r=\"348.5\" stroke=\"url(#linear_border_FKdxCLbvOrrYPMG5QD_BC)\" stroke-width=\"1\"></circle>\n        <path\n          d=\"M388.876 363.125C388.876 555.597 222.347 425.5 29.8759 425.5C-162.595 425.5 -82.6241 399.5 -185.624 459.5C-361.624 763.607 154.857 1003.22 217.923 940.158C249.078 909.003 656.357 569.19 796.614 363.125C940.279 152.055 817.181 75 865.876 75C913.128 75 255.183 120.404 296.273 137.442C306.849 141.828 323.775 150.026 333.796 155.393C343.877 160.792 347.049 163.367 356.506 169.698C375.509 182.42 393.191 196.962 409.303 213.073C472.369 276.139 388.876 266.89 388.876 363.125Z\"\n          fill-rule=\"evenodd\"\n          fill=\"url(#linear_fill_2cjO80gCLGQnmLyIrvkDn)\"\n          fill-opacity=\"0\"\n        ></path>\n        <g mask=\"url(#mask-2cjO80gCLGQnmLyIrvkDn)\">\n          <ellipse cx=\"27.5750135356526\" cy=\"651.2208484866873\" transform=\"rotate(-19.78539362009903 -529.254150390625 510.320068359375)\" rx=\"556.8291639262776\" ry=\"140.90078012731226\" stroke=\"url(#linear_border_Uqh8zhWNf9yl2KpS-BIId)\" stroke-width=\"1\"></ellipse>\n        </g>\n        <g mask=\"url(#mask-2cjO80gCLGQnmLyIrvkDn)\">\n          <ellipse cx=\"20.918654509192265\" cy=\"698.2956494370932\" transform=\"rotate(-19.78539362009903 -642.444091796875 513.030029296875)\" rx=\"663.3627463060673\" ry=\"185.26562014021815\" stroke=\"url(#linear_border_Q8NVmudxFtVwGApcu0SPY)\" stroke-width=\"1\"></ellipse>\n        </g>\n        <g mask=\"url(#mask-2cjO80gCLGQnmLyIrvkDn)\">\n          <ellipse cx=\"-42.429995837054776\" cy=\"781.2397627143642\" transform=\"rotate(-19.78539362009903 -891.6241455078125 560.901123046875)\" rx=\"849.1941496707577\" ry=\"220.33863966748925\" stroke=\"url(#linear_border_qQwe7-Hfb7I7cV2er_qZE)\" stroke-width=\"1\"></ellipse>\n        </g>\n        <path d=\"M663.595 405.066L642.268 397.677L644.066 375.179L636.677 396.505L614.179 394.708L635.505 402.096L633.708 424.595L641.096 403.268L663.595 405.066Z\" fill=\"#8548E8\"></path>\n        <circle cx=\"659.244140625\" cy=\"220.76025390625\" r=\"5.76025390625\" fill=\"#8640FF\"></circle>\n        <g filter=\"url(#filter_NXOZVqseWfvb2eAxCWDB2)\">\n          <path d=\"M464.996 230.204L460.577 225.311L464.205 219.804L459.311 224.224L453.804 220.596L458.224 225.49L454.596 230.996L459.49 226.577L464.996 230.204Z\" fill=\"#9569DB\"></path>\n        </g>\n      </g>\n      <defs>\n        <clipPath id=\"clip-path-78jOFjxVBCd9S5AZrL2KP\">\n          <path d=\"M0 1080L1920 1080L1920 0L0 0L0 1080Z\" fill=\"white\" />\n        </clipPath>\n        <linearGradient id=\"linear_fill_7P5GizVYZEJTSSHSfKAxV\" x1=\"367.56842041015625\" y1=\"1111.25341796875\" x2=\"602.5020141601562\" y2=\"891.5340576171875\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#130C1A\" />\n          <stop offset=\"1\" stop-color=\"#271B3B\" />\n        </linearGradient>\n        <linearGradient id=\"linear_fill_j2ad20QvKp0qwr195lr-Z\" x1=\"418.9534912109375\" y1=\"1181.357177734375\" x2=\"613.6550903320312\" y2=\"902.976318359375\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#8640FF\" stop-opacity=\"0\" />\n          <stop offset=\"1\" stop-color=\"#8640FF\" stop-opacity=\"0.62\" />\n        </linearGradient>\n        <filter id=\"filter_j2ad20QvKp0qwr195lr-Z\" x=\"-305\" y=\"743\" width=\"1137.1700439453125\" height=\"1138\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n          <feFlood flood-opacity=\"0\" result=\"feFloodId_j2ad20QvKp0qwr195lr-Z\" />\n          <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"feFloodId_j2ad20QvKp0qwr195lr-Z\" result=\"shape\" />\n          <feGaussianBlur result=\"gaussian_blur_j2ad20QvKp0qwr195lr-Z\" stdDeviation=\"2\" />\n        </filter>\n        <linearGradient id=\"linear_fill_MSDv03dt-Zbpmo_g7ZVvW_0\" x1=\"169.7024154663086\" y1=\"424.1353759765625\" x2=\"470.1065673828125\" y2=\"668.6484375\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#130C1A\" />\n          <stop offset=\"0.795\" stop-color=\"#5A298C\" />\n          <stop offset=\"1\" stop-color=\"#4B8BDE\" stop-opacity=\"0.7\" />\n        </linearGradient>\n        <linearGradient id=\"linear_fill_MSDv03dt-Zbpmo_g7ZVvW_1\" x1=\"-2.21142578125\" y1=\"1175.1416015625\" x2=\"786.4098815917969\" y2=\"254.284912109375\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#130C1A\" />\n          <stop offset=\"1\" stop-color=\"#130C1A\" stop-opacity=\"0\" />\n        </linearGradient>\n        <filter id=\"filter_MSDv03dt-Zbpmo_g7ZVvW\" x=\"-684.635009765625\" y=\"-228.25140380859375\" width=\"1851.2008666992188\" height=\"1602.7374877929688\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n          <feFlood flood-opacity=\"0\" result=\"feFloodId_MSDv03dt-Zbpmo_g7ZVvW\" />\n          <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"feFloodId_MSDv03dt-Zbpmo_g7ZVvW\" result=\"shape\" />\n          <feGaussianBlur result=\"gaussian_blur_MSDv03dt-Zbpmo_g7ZVvW\" stdDeviation=\"20\" />\n        </filter>\n        <linearGradient id=\"linear_border_UkBLHn533rtejkLQFonx5_0\" x1=\"1304.44921875\" y1=\"1009.8284912109375\" x2=\"1887.4483642578125\" y2=\"1008.7496337890625\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#000000\" />\n          <stop offset=\"1\" stop-color=\"#573491\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_ikCBpRUNHolOi1xg0l1q4_0\" x1=\"488.0002746582031\" y1=\"986.9857177734375\" x2=\"917.162353515625\" y2=\"809.1778564453125\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#000000\" stop-opacity=\"0\" />\n          <stop offset=\"1\" stop-color=\"#573491\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_kv67yBlHN14a1eBr9B0V7_0\" x1=\"632.44921875\" y1=\"421.8284912109375\" x2=\"1215.4483642578125\" y2=\"420.7496337890625\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#000000\" />\n          <stop offset=\"1\" stop-color=\"#573491\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_kp4V1CgV1-6XkMPe2BdpO_0\" x1=\"826.44921875\" y1=\"943.8284912109375\" x2=\"1409.4483642578125\" y2=\"942.7496337890625\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#000000\" />\n          <stop offset=\"1\" stop-color=\"#573491\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_I2aKLFOHw5qbze2XqfxNz_0\" x1=\"1265.44921875\" y1=\"286.8284912109375\" x2=\"1848.4483642578125\" y2=\"285.7496337890625\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#000000\" />\n          <stop offset=\"1\" stop-color=\"#573491\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_xWT9apJoWOIiq6EDvvrIF_0\" x1=\"860.3316650390625\" y1=\"167.9996337890625\" x2=\"1017.6767578125\" y2=\"44.719970703125\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#000000\" />\n          <stop offset=\"1\" stop-color=\"#573491\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_4gx9P903UignmyssoKjsm_0\" x1=\"582.44921875\" y1=\"166.8284912109375\" x2=\"1165.4483642578125\" y2=\"165.7496337890625\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#000000\" />\n          <stop offset=\"1\" stop-color=\"#573491\" />\n        </linearGradient>\n        <linearGradient id=\"linear_fill_ADFUuIgnrpQ0I0ui_sPV8\" x1=\"139.1151550097656\" y1=\"440.36038\" x2=\"393.13680500976557\" y2=\"190.22102\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#110E14\" stop-opacity=\"0\" />\n          <stop offset=\"1\" stop-color=\"#7D5DC7\" stop-opacity=\"0.29\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_FKdxCLbvOrrYPMG5QD_BC\" x1=\"402.9645050097656\" y1=\"214.84603\" x2=\"319.1711650097656\" y2=\"301.43434\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#8D54F0\" />\n          <stop offset=\"1\" stop-color=\"#130C1A\" />\n        </linearGradient>\n        <linearGradient id=\"linear_fill_2cjO80gCLGQnmLyIrvkDn\" x1=\"139.11517333984375\" y1=\"440.3603515625\" x2=\"393.1368408203125\" y2=\"190.2210693359375\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#110E14\" stop-opacity=\"0\" />\n          <stop offset=\"1\" stop-color=\"#7D5DC7\" stop-opacity=\"0.29\" />\n        </linearGradient>\n        <mask id=\"mask-2cjO80gCLGQnmLyIrvkDn\" maskUnits=\"userSpaceOnUse\">\n          <path\n            d=\"M388.876 363.125C388.876 555.597 222.347 425.5 29.8759 425.5C-162.595 425.5 -82.6241 399.5 -185.624 459.5C-361.624 763.607 154.857 1003.22 217.923 940.158C249.078 909.003 656.357 569.19 796.614 363.125C940.279 152.055 817.181 75 865.876 75C913.128 75 255.183 120.404 296.273 137.442C306.849 141.828 323.775 150.026 333.796 155.393C343.877 160.792 347.049 163.367 356.506 169.698C375.509 182.42 393.191 196.962 409.303 213.073C472.369 276.139 388.876 266.89 388.876 363.125Z\"\n            fill-rule=\"evenodd\"\n            fill=\"url(#linear_fill_2cjO80gCLGQnmLyIrvkDn)\"\n            fill-opacity=\"0\"\n          ></path>\n        </mask>\n        <linearGradient id=\"linear_border_Uqh8zhWNf9yl2KpS-BIId\" x1=\"-22.417108801648567\" y1=\"770.5412651297004\" x2=\"532.1847384689238\" y2=\"649.346868110994\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#291C3D\" stop-opacity=\"0.37\" />\n          <stop offset=\"1\" stop-color=\"#563D7D\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_Q8NVmudxFtVwGApcu0SPY\" x1=\"-62.014956033992235\" y1=\"859.6731205164315\" x2=\"627.7230930652042\" y2=\"703.657236483951\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#573491\" stop-opacity=\"0.09\" />\n          <stop offset=\"1\" stop-color=\"#593D87\" />\n        </linearGradient>\n        <linearGradient id=\"linear_border_qQwe7-Hfb7I7cV2er_qZE\" x1=\"163.56752099007758\" y1=\"959.3879596583226\" x2=\"751.1079692642816\" y2=\"821.8613943234626\" gradientUnits=\"userSpaceOnUse\">\n          <stop offset=\"0\" stop-color=\"#573491\" stop-opacity=\"0.15\" />\n          <stop offset=\"1\" stop-color=\"#4C2E7D\" />\n        </linearGradient>\n        <filter id=\"filter_NXOZVqseWfvb2eAxCWDB2\" x=\"452.8043670654297\" y=\"218.8043212890625\" width=\"13.191818237304688\" height=\"13.1917724609375\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n          <feFlood flood-opacity=\"0\" result=\"feFloodId_NXOZVqseWfvb2eAxCWDB2\" />\n          <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"feFloodId_NXOZVqseWfvb2eAxCWDB2\" result=\"shape\" />\n          <feGaussianBlur result=\"gaussian_blur_NXOZVqseWfvb2eAxCWDB2\" stdDeviation=\"0.5\" />\n        </filter>\n      </defs>\n    </svg>\n    <svg version=\"1.1\" baseProfile=\"full\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1400 800\" class=\"absolute left-0 top-0 h-full w-full\">\n      <rect x=\"1300\" y=\"400\" rx=\"40\" ry=\"40\" width=\"300\" height=\"300\" stroke=\"#646cff\" fill=\"#646cff\">\n        <animateTransform attributeType=\"XML\" attributeName=\"transform\" begin=\"0s\" dur=\"35s\" type=\"rotate\" from=\"0 1450 550\" to=\"360 1450 550\" repeatCount=\"indefinite\" />\n      </rect>\n\n      <path\n        class=\"st6\"\n        d=\"M470.6,258c-1.6-2.7-5.4-4.9-8.5-4.9h-64c-3.1,0-6.9,2.2-8.5,4.9l-32,55.4c-1.6,2.7-1.6,7.1,0,9.8l32,55.4\n  c1.6,2.7,5.4,4.9,8.5,4.9h64c3.1,0,6.9-2.2,8.5-4.9l32-55.4c1.6-2.7,1.6-7.1,0-9.8L470.6,258z\"\n        stroke=\"rgb(253, 214, 99)\"\n        fill=\"rgb(253, 214, 99)\"\n      >\n        <animateMotion path=\"M 800 -200 L 800 -300 L 800 -200\" dur=\"20s\" begin=\"0s\" repeatCount=\"indefinite\" />\n        <animateTransform attributeType=\"XML\" attributeName=\"transform\" begin=\"0s\" dur=\"30s\" type=\"rotate\" values=\"0 210 530 ; -30 210 530 ; 0 210 530\" keyTimes=\"0 ; 0.5 ; 1\" repeatCount=\"indefinite\" />\n      </path>\n\n      <circle cx=\"200\" cy=\"150\" r=\"20\" stroke=\"#646cff\" fill=\"#646cff\">\n        <animateMotion path=\"M 0 0 L 40 20 Z\" dur=\"5s\" repeatCount=\"indefinite\" />\n      </circle>\n\n      <!-- 三角形 -->\n      <path d=\"M 165 580 L 270 580 Q275 578 270 570 L 223 483 Q220 480 217 483 L 165 570 Q160 578 165 580\" stroke=\"#36cfc9\" fill=\"#36cfc9\">\n        <animateTransform attributeType=\"XML\" attributeName=\"transform\" begin=\"0s\" dur=\"35s\" type=\"rotate\" from=\"0 210 530\" to=\"360 210 530\" repeatCount=\"indefinite\" />\n      </path>\n\n      <circle cx=\"1200\" cy=\"600\" r=\"30\" stroke=\"rgb(241, 243, 244)\" fill=\"rgb(241, 243, 244)\">\n        <animateMotion path=\"M 0 0 L -20 40 Z\" dur=\"9s\" repeatCount=\"indefinite\" />\n      </circle>\n\n      <path d=\"M 100 350 A 40 40 0 1 1 180 350 L 180 430 A 40 40 0 1 1 100 430 Z\" stroke=\"rgb(241, 243, 244)\" fill=\"rgb(241, 243, 244)\">\n        <animateMotion path=\"M 140 390 L 180 360 L 140 390\" dur=\"20s\" begin=\"0s\" repeatCount=\"indefinite\" />\n        <animateTransform attributeType=\"XML\" attributeName=\"transform\" begin=\"0s\" dur=\"30s\" type=\"rotate\" values=\"0 140 390; -60 140 390; 0 140 390\" keyTimes=\"0 ; 0.5 ; 1\" repeatCount=\"indefinite\" />\n      </path>\n\n      <rect x=\"400\" y=\"600\" rx=\"40\" ry=\"40\" width=\"100\" height=\"100\" stroke=\"#ffec3d\" fill=\"#ffec3d\">\n        <animateTransform attributeType=\"XML\" attributeName=\"transform\" begin=\"0s\" dur=\"35s\" type=\"rotate\" from=\"-30 550 750\" to=\"330 550 750\" repeatCount=\"indefinite\" />\n      </rect>\n    </svg>\n  </div>\n</template>\n\n<style scoped>\n#mask-2cjO80gCLGQnmLyIrvkDn {\n  mask-type: alpha;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport type { SplitContainerProps } from '../../types'\n\ndefineOptions({\n  name: 'SplitContainer'\n})\n\nconst props = withDefaults(defineProps<SplitContainerProps>(), {\n  rightWidth: 320,\n  collapsedWidth: 50,\n  collapsible: true,\n  defaultCollapsed: false,\n  showToggleButton: true,\n  toggleButtonPosition: 'right'\n})\n\n// 内部状态\nconst isCollapsed = ref(props.defaultCollapsed)\n\n// 切换函数\nfunction toggle() {\n  if (props.collapsible) {\n    isCollapsed.value = !isCollapsed.value\n  }\n}\n\n// 样式计算\nconst containerStyle = computed(() => ({\n  '--right-width': `${props.rightWidth}px`,\n  '--right-collapsed-width': `${props.collapsedWidth}px`,\n  '--right-current-width': isCollapsed.value ? `${props.collapsedWidth}px` : `${props.rightWidth}px`\n}))\n</script>\n\n<template>\n  <div class=\"split-container\" :style=\"containerStyle\">\n    <!-- 左侧内容 -->\n    <div class=\"split-left\" :class=\"props.leftClass\">\n      <slot name=\"left\" />\n    </div>\n\n    <!-- 右侧内容 -->\n    <div class=\"split-right\" :class=\"[props.rightClass, { 'split-right--collapsed': isCollapsed }]\">\n      <div class=\"split-right__content\">\n        <slot name=\"right\" />\n      </div>\n    </div>\n\n    <!-- 切换按钮 -->\n    <button v-if=\"collapsible && showToggleButton\" class=\"split-toggle\" :class=\"[`split-toggle--${toggleButtonPosition}`, { 'split-toggle--collapsed': isCollapsed }, props.toggleButtonClass]\" @click=\"toggle\">\n      <slot name=\"toggle\">\n        <svg class=\"split-toggle__icon\" :class=\"{ 'split-toggle__icon--collapsed': isCollapsed }\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n          <path d=\"M6.5 12L10 8L6.5 4L5.5 5L8 8L5.5 11L6.5 12Z\" />\n        </svg>\n      </slot>\n    </button>\n  </div>\n</template>\n\n<style scoped>\n.split-container {\n  display: flex;\n  height: 100%;\n  width: 100%;\n  position: relative;\n}\n\n.split-left {\n  flex: 1;\n  min-width: 0;\n  overflow: hidden;\n  padding-right: 12px;\n}\n\n.split-right {\n  width: var(--right-current-width);\n  flex-shrink: 0;\n  overflow: hidden;\n  transition: width 0.3s ease;\n}\n\n.split-right--collapsed {\n  width: var(--right-collapsed-width);\n}\n\n.split-right__content {\n  height: 100%;\n  width: 100%;\n  overflow: hidden;\n}\n\n.split-toggle {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  z-index: 10;\n  width: 32px;\n  height: 32px;\n  background: #ffffff;\n  border: 1px solid #e1e5e9;\n  border-radius: 50%;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  box-shadow:\n    0 2px 8px rgba(0, 0, 0, 0.08),\n    0 1px 4px rgba(0, 0, 0, 0.04);\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  color: #64748b;\n}\n\n.split-toggle:hover {\n  background: #f8fafc;\n  border-color: #cbd5e1;\n  color: #475569;\n  box-shadow:\n    0 4px 12px rgba(0, 0, 0, 0.12),\n    0 2px 6px rgba(0, 0, 0, 0.06);\n  transform: translateY(-50%) scale(1.05);\n}\n\n.split-toggle:active {\n  transform: translateY(-50%) scale(0.98);\n  box-shadow:\n    0 1px 4px rgba(0, 0, 0, 0.08),\n    0 0px 2px rgba(0, 0, 0, 0.04);\n}\n\n.split-toggle--right {\n  right: var(--right-current-width);\n  margin-right: -16px;\n}\n\n.split-toggle--left {\n  left: calc(100% - var(--right-current-width));\n  margin-left: -16px;\n}\n\n.split-toggle__icon {\n  transition: transform 0.3s ease;\n}\n\n.split-toggle__icon--collapsed {\n  transform: rotate(180deg);\n}\n</style>\n"],"names":["LAYOUT_SCROLL_EL_ID","LAYOUT_MAX_Z_INDEX","createLayoutCssVarsByCssVarsProps","props","createLayoutCssVars","mode","isMobile","maxZIndex","headerHeight","tabHeight","siderWidth","siderCollapsedWidth","footerHeight","headerZIndex","tabZIndex","siderZIndex","mobileSiderZIndex","footerZIndex","__props","emit","__emit","slots","_useSlots","cssVars","computed","contentElement","overlayStyle","useLayoutContentStyle","showHeader","showTab","showSider","showMobileSider","showFooter","isWrapperScroll","isContentScroll","isVertical","isHorizontal","fixedHeaderAndTab","leftGapClass","style","headerLeftGapClass","footerLeftGapClass","condition1","condition2","condition3","siderPaddingClass","cls","handleClickMask","_createElementBlock","_normalizeClass","commonClass","_unref","_createElementVNode","scrollElId","scrollWrapperClass","_Fragment","headerClass","_renderSlot","_ctx","fullContent","tabClass","siderClass","siderCollapse","mobileSiderClass","contentClass","footerClass","fixedFooter","V","e","a","W","Le","T","h","i","u","be","ze","I","q","We","f","J","$","De","Fe","A","Ae","n","d","Oe","Ne","ce","t","oe","b","Ee","te","ie","Ve","Ie","le","D","qe","Je","$e","Ke","Ye","je","Ze","Xe","Qe","y","Ue","_e","ea","aa","ra","v","w","ue","se","fa","na","K","da","L","he","me","ba","ca","Y","j","ge","oa","ta","ia","l","m","P","g","p","s","R","k","G","M","z","F","C","S","N","E","x","Me","we","_","ee","Re","ae","re","Te","ve","He","fe","ne","la","ua","sa","pe","Z","o","Ce","ha","ACTIVE_COLOR","createCssVars","createTabCssVars","primaryColor","cssProps","transformColorWithOpacity","addColorAlpha","_openBlock","_hoisted_1","_cache","darkMode","active","_createVNode","ChromeTabBg","activeTabComponent","chromeClass","buttonClass","ChromeTab","ButtonTab","bindProps","_chromeCls","_btnCls","rest","handleClose","_createBlock","_resolveDynamicComponent","_mergeProps","closable","SvgClose","isObject","value","type","freeGlobal","freeSelf","root","now","reWhitespace","trimmedEndIndex","string","index","reTrimStart","baseTrim","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","throttle","__assign","getElementWindow$1","element","getElementDocument$1","getOptions$1","obj","initialObj","acc","attribute","option","key","chr","addClasses$1","el","classes","_a","removeClasses$1","className","classNamesToQuery$1","classNames","canUseDOM","helpers","cachedScrollbarWidth","cachedDevicePixelRatio","scrollbarWidth","body","box","width","getElementWindow","getElementDocument","getOptions","addClasses","removeClasses","classNamesToQuery","SimpleBarCore","_this","elWindow","isWithinTrackXBounds","isWithinTrackYBounds","_b","_c","_d","_f","_g","_h","_j","_k","_l","eventOffset","track","trackSize","scrollbar","contentSize","hostSize","dragPos","dragPerc","scrollPos","elDocument","dummyDiv","scrollbarDummyEl","dummyChild","dummyContainerOffset","dummyChildOffset","dummyChildOffsetAfterScroll","rect","resizeObserverStarted_1","resizeObserver","contentElOffsetWidth","isHeightAuto","isWidthAuto","contentWrapperElOffsetWidth","elOverflowX","elOverflowY","contentElScrollHeight","contentElScrollWidth","contentWrapperElOffsetHeight","offsetForXScrollbar","offsetForYScrollbar","axis","scrollbarRatio","scrollbarSize","scrollOffset","scrollPourcent","handleOffset","currentAxis","scrollbarOffset","scrolled","dir","scrollSize","speed","scrollTo","bbox","query","matches","child","lifecycleEventNames","renderFn","onScroll","event","simplebar","defineComponent","_i","createElement","Simplebar","tryOnScopeDispose","fn","getCurrentScope","onScopeDispose","isClient","getLifeCycleTarget","target","getCurrentInstance","toArray","tryOnMounted","sync","onMounted","nextTick","defaultWindow","unrefElement","elRef","plain","toValue","useMounted","isMounted","shallowRef","instance","useSupported","callback","useResizeObserver","window","observerOptions","observer","isSupported","cleanup","targets","_targets","stopWatch","watch","els","_el","stop","useElementSize","initialSize","isSVG","height","stop1","entry","boxSize","$elem","formatBoxSize","inlineSize","blockSize","ele","stop2","extendStatics","__extends","__","__spreadArrays","il","r","jl","propertiesConfig","warn","msg","inBrowser","isWeChatDevTools","isAndroid","isIOSBadVersion","regex","parts","item","supportsPassive","EventName","opts","getNow","extend","source","isUndef","between","min","max","elementStyle","vendor","transformNames","transformNames_1","prefixStyle","getElement","addEvent","capture","useCapture","removeEvent","maybePrevent","offset","left","top","transform","transition","hasPerspective","hasTouch","hasTransition","eventTypeMap","getRect","preventDefaultExceptionFn","exceptions","tagExceptionFn","tap","eventName","ev","click","eventSource","posSrc","bubbles","cancelable","ctrlKey","shiftKey","altKey","metaKey","pressedKeysMap","createEvent","dblclick","ease","DEFAULT_INTERVAL","windowCompat","noop$1","requestAnimationFrame","cancelAnimationFrame","id","noop","val","sharedPropertyDefinition","getProperty","keys","lastKey","setProperty","temp","propertiesProxy","sourceKey","EventEmitter","names","context","magic","ret","events","count","len","eventsCopy","event_1","types","isType","EventRegister","wrapper","eventOperation","eventType","CustomOptions","OptionsConstructor","_super","bounceOptions","DEFAULT_BOUNCE","NEGATED_BOUNCE","ActionsHandler","bindToWrapper","disableMouse","disableTouch","wrapperEvents","targetEvents","shouldRegisterTouch","shouldRegisterMouse","preventDefault","stopPropagation","preventDefaultException","preventDefaultConditions","_eventType","point","deltaX","deltaY","scrollLeft","scrollTop","pX","pY","autoEndDistance","content","translaterMetaData","Translater","cssStyle","matrix","transformStyle","transformFnName","transformFnArgUnit","transformFnArg","Base","translater","endPoint","pending","forceStopped","called","isValidPostion","startPoint","currentPos","prePos","computeDirection","endValue","startValue","delta","direction","directionX","directionY","Transition","probe","pos","easing","easingFn","isRealtimeProbeType","stopFromTransition","Animation","duration","startTime","destTime","step","newPoint","stopFromAnimation","createAnimater","useTransition","animaterOptions","Behavior","dampingFactor","newPos","momentumInfo","absDist","wrapperSize","current","start","lowerMargin","upperMargin","distance","deceleration","swipeBounceTime","swipeTime","momentumData","size","position","isWrapperStatic","wrapperRect","contentRect","boundary","inBoundary","PassthroughHandlers","DirectionMap","DirectionLockAction","directionLockThreshold","freeScroll","eventPassthrough","absDistX","absDistY","handleMap","applyQuadrantTransformation","quadrant","ScrollerActions","scrollBehaviorX","scrollBehaviorY","actionsHandler","animater","transformateDeltaX","transformateDeltaY","transformateDeltaData","timestamp","prevX","newX","prevY","newY","positionChanged","minScrollPosX","maxScrollPosX","minScrollPosY","maxScrollPosY","createActionsHandlerOptions","bsOptions","prev","cur","createBehaviorOptions","extraProp","bounces","bubbling","sourceEvent","targetEvent","isSamePoint","keys_1","MIN_SCROLL_DISTANCE","Scroller","right","bottom","resizeHandler","hooks","prevPos","actions","flickMinMovingDistance","meta","momentumX","momentumY","_dblclick","dblclickTrigged","delay","enabled","pointerEvents","node","contentChanged","extraTransform","offsetX","offsetY","targetEle","getOffset","getPos","wrapperPos","scrollBehavior","xInBoundary","yInBoundary","BScrollConstructor","ctor","name","installed","plugin","valid","startX","startY","applyOrderMap","aOrder","bOrder","activeElement","createBScroll","bs","BScroll","bsWrapper","ref","bsContent","wrapWidth","isScrollY","initBetterScroll","__expose","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","prefix","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","path","currentClassPartObject","pathPart","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","originalClassName","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","DEFAULT_CLASS","NTooltip","tooltipPlacement","zIndex","tooltipContent","$attrs","XBasicSvgIcon","icon","_createTextVNode","isCollapsed","toggle","containerStyle","collapsible","showToggleButton","toggleButtonPosition"],"mappings":"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","x_google_ignoreList":[9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,28,29,31]}